Lines Matching refs:macsec

316 static bool macsec_is_offloaded(struct macsec_dev *macsec)  in macsec_is_offloaded()  argument
318 if (macsec->offload == MACSEC_OFFLOAD_MAC || in macsec_is_offloaded()
319 macsec->offload == MACSEC_OFFLOAD_PHY) in macsec_is_offloaded()
327 struct macsec_dev *macsec) in macsec_check_offload() argument
329 if (!macsec || !macsec->real_dev) in macsec_check_offload()
333 return macsec->real_dev->phydev && in macsec_check_offload()
334 macsec->real_dev->phydev->macsec_ops; in macsec_check_offload()
336 return macsec->real_dev->features & NETIF_F_HW_MACSEC && in macsec_check_offload()
337 macsec->real_dev->macsec_ops; in macsec_check_offload()
343 struct macsec_dev *macsec, in __macsec_get_ops() argument
351 ctx->phydev = macsec->real_dev->phydev; in __macsec_get_ops()
353 ctx->netdev = macsec->real_dev; in __macsec_get_ops()
357 return macsec->real_dev->phydev->macsec_ops; in __macsec_get_ops()
359 return macsec->real_dev->macsec_ops; in __macsec_get_ops()
365 static const struct macsec_ops *macsec_get_ops(struct macsec_dev *macsec, in macsec_get_ops() argument
368 if (!macsec_check_offload(macsec->offload, macsec)) in macsec_get_ops()
371 return __macsec_get_ops(macsec->offload, macsec, ctx); in macsec_get_ops()
474 struct macsec_dev *macsec = netdev_priv(dev); in macsec_encrypt_finish() local
476 skb->dev = macsec->real_dev; in macsec_encrypt_finish()
483 struct macsec_dev *macsec = macsec_priv(skb->dev); in macsec_msdu_len() local
484 struct macsec_secy *secy = &macsec->secy; in macsec_msdu_len()
519 struct macsec_dev *macsec = macsec_priv(dev); in macsec_encrypt_done() local
526 macsec_count_tx(skb, &macsec->secy.tx_sc, macsec_skb_cb(skb)->tx_sa); in macsec_encrypt_done()
582 struct macsec_dev *macsec = macsec_priv(dev); in macsec_encrypt() local
586 secy = &macsec->secy; in macsec_encrypt()
637 struct pcpu_secy_stats *secy_stats = this_cpu_ptr(macsec->stats); in macsec_encrypt()
821 struct macsec_dev *macsec = macsec_priv(dev); in macsec_decrypt_done() local
834 if (!macsec_post_decrypt(skb, &macsec->secy, pn)) { in macsec_decrypt_done()
840 macsec_finalize_skb(skb, macsec->secy.icv_len, in macsec_decrypt_done()
843 macsec_reset_skb(skb, macsec->secy.netdev); in macsec_decrypt_done()
845 if (gro_cells_receive(&macsec->gro_cells, skb) == NET_RX_SUCCESS) in macsec_decrypt_done()
988 struct macsec_dev *macsec; in handle_not_macsec() local
996 list_for_each_entry_rcu(macsec, &rxd->secys, secys) { in handle_not_macsec()
998 struct pcpu_secy_stats *secy_stats = this_cpu_ptr(macsec->stats); in handle_not_macsec()
999 struct net_device *ndev = macsec->secy.netdev; in handle_not_macsec()
1004 if (macsec_is_offloaded(macsec) && netif_running(ndev)) { in handle_not_macsec()
1007 ops = macsec_get_ops(macsec, NULL); in handle_not_macsec()
1020 rx_sc = find_rx_sc(&macsec->secy, in handle_not_macsec()
1073 if (macsec->secy.validate_frames == MACSEC_VALIDATE_STRICT) { in handle_not_macsec()
1077 DEV_STATS_INC(macsec->secy.netdev, rx_dropped); in handle_not_macsec()
1109 struct macsec_dev *macsec; in macsec_handle_frame() local
1163 list_for_each_entry_rcu(macsec, &rxd->secys, secys) { in macsec_handle_frame()
1164 struct macsec_rx_sc *sc = find_rx_sc(&macsec->secy, sci); in macsec_handle_frame()
1169 secy = &macsec->secy; in macsec_handle_frame()
1179 macsec = macsec_priv(dev); in macsec_handle_frame()
1180 secy_stats = this_cpu_ptr(macsec->stats); in macsec_handle_frame()
1233 DEV_STATS_INC(macsec->secy.netdev, rx_dropped); in macsec_handle_frame()
1270 ret = gro_cells_receive(&macsec->gro_cells, skb); in macsec_handle_frame()
1274 DEV_STATS_INC(macsec->secy.netdev, rx_dropped); in macsec_handle_frame()
1298 list_for_each_entry_rcu(macsec, &rxd->secys, secys) { in macsec_handle_frame()
1301 secy_stats = this_cpu_ptr(macsec->stats); in macsec_handle_frame()
1307 macsec->secy.validate_frames == MACSEC_VALIDATE_STRICT) { in macsec_handle_frame()
1311 DEV_STATS_INC(macsec->secy.netdev, rx_errors); in macsec_handle_frame()
1322 macsec_reset_skb(nskb, macsec->secy.netdev); in macsec_handle_frame()
1330 DEV_STATS_INC(macsec->secy.netdev, rx_dropped); in macsec_handle_frame()
1429 struct macsec_dev *macsec; in create_rx_sc() local
1434 list_for_each_entry(macsec, &rxd->secys, secys) { in create_rx_sc()
1435 if (find_rx_sc_rtnl(&macsec->secy, sci)) in create_rx_sc()
2581 static bool macsec_is_configured(struct macsec_dev *macsec) in macsec_is_configured() argument
2583 struct macsec_secy *secy = &macsec->secy; in macsec_is_configured()
2597 static bool macsec_needs_tx_tag(struct macsec_dev *macsec, in macsec_needs_tx_tag() argument
2600 return macsec->offload == MACSEC_OFFLOAD_PHY && in macsec_needs_tx_tag()
2606 struct macsec_dev *macsec = macsec_priv(dev); in macsec_set_head_tail_room() local
2607 struct net_device *real_dev = macsec->real_dev; in macsec_set_head_tail_room()
2611 ops = macsec_get_ops(macsec, NULL); in macsec_set_head_tail_room()
2629 struct macsec_dev *macsec; in macsec_update_offload() local
2632 macsec = macsec_priv(dev); in macsec_update_offload()
2636 !macsec_check_offload(offload, macsec)) in macsec_update_offload()
2646 if (macsec_is_configured(macsec)) in macsec_update_offload()
2649 prev_offload = macsec->offload; in macsec_update_offload()
2652 macsec, &ctx); in macsec_update_offload()
2656 macsec->offload = offload; in macsec_update_offload()
2658 ctx.secy = &macsec->secy; in macsec_update_offload()
2662 macsec->offload = prev_offload; in macsec_update_offload()
2667 macsec->insert_tx_tag = macsec_needs_tx_tag(macsec, ops); in macsec_update_offload()
2677 struct macsec_dev *macsec; in macsec_upd_offload() local
2699 macsec = macsec_priv(dev); in macsec_upd_offload()
2708 if (macsec->offload != offload) in macsec_upd_offload()
2719 struct macsec_dev *macsec = macsec_priv(dev); in get_tx_sa_stats() local
2723 if (macsec_is_offloaded(macsec)) { in get_tx_sa_stats()
2727 ops = macsec_get_ops(macsec, &ctx); in get_tx_sa_stats()
2763 struct macsec_dev *macsec = macsec_priv(dev); in get_rx_sa_stats() local
2767 if (macsec_is_offloaded(macsec)) { in get_rx_sa_stats()
2771 ops = macsec_get_ops(macsec, &ctx); in get_rx_sa_stats()
2816 struct macsec_dev *macsec = macsec_priv(dev); in get_rx_sc_stats() local
2820 if (macsec_is_offloaded(macsec)) { in get_rx_sc_stats()
2824 ops = macsec_get_ops(macsec, &ctx); in get_rx_sc_stats()
2898 struct macsec_dev *macsec = macsec_priv(dev); in get_tx_sc_stats() local
2902 if (macsec_is_offloaded(macsec)) { in get_tx_sc_stats()
2906 ops = macsec_get_ops(macsec, &ctx); in get_tx_sc_stats()
2954 struct macsec_dev *macsec = macsec_priv(dev); in get_secy_stats() local
2958 if (macsec_is_offloaded(macsec)) { in get_secy_stats()
2962 ops = macsec_get_ops(macsec, &ctx); in get_secy_stats()
3082 struct macsec_dev *macsec = netdev_priv(dev); in dump_secy() local
3104 if (nla_put_u8(skb, MACSEC_OFFLOAD_ATTR_TYPE, macsec->offload)) in dump_secy()
3428 struct macsec_dev *macsec = macsec_priv(dev); in macsec_insert_tx_tag() local
3435 ops = macsec_get_ops(macsec, &ctx); in macsec_insert_tx_tag()
3438 if (unlikely(skb_final_len > macsec->real_dev->mtu)) { in macsec_insert_tx_tag()
3443 phydev = macsec->real_dev->phydev; in macsec_insert_tx_tag()
3462 struct macsec_dev *macsec = netdev_priv(dev); in macsec_start_xmit() local
3463 struct macsec_secy *secy = &macsec->secy; in macsec_start_xmit()
3474 if (macsec->insert_tx_tag) { in macsec_start_xmit()
3482 skb->dev = macsec->real_dev; in macsec_start_xmit()
3488 secy_stats = this_cpu_ptr(macsec->stats); in macsec_start_xmit()
3492 skb->dev = macsec->real_dev; in macsec_start_xmit()
3513 macsec_count_tx(skb, &macsec->secy.tx_sc, macsec_skb_cb(skb)->tx_sa); in macsec_start_xmit()
3526 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dev_init() local
3527 struct net_device *real_dev = macsec->real_dev; in macsec_dev_init()
3530 err = gro_cells_init(&macsec->gro_cells, dev); in macsec_dev_init()
3547 netdev_hold(real_dev, &macsec->dev_tracker, GFP_KERNEL); in macsec_dev_init()
3554 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dev_uninit() local
3556 gro_cells_destroy(&macsec->gro_cells); in macsec_dev_uninit()
3562 struct macsec_dev *macsec = macsec_priv(dev); in macsec_fix_features() local
3563 struct net_device *real_dev = macsec->real_dev; in macsec_fix_features()
3573 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dev_open() local
3574 struct net_device *real_dev = macsec->real_dev; in macsec_dev_open()
3594 if (macsec_is_offloaded(macsec)) { in macsec_dev_open()
3604 ctx.secy = &macsec->secy; in macsec_dev_open()
3625 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dev_stop() local
3626 struct net_device *real_dev = macsec->real_dev; in macsec_dev_stop()
3631 if (macsec_is_offloaded(macsec)) { in macsec_dev_stop()
3635 ops = macsec_get_ops(macsec, &ctx); in macsec_dev_stop()
3637 ctx.secy = &macsec->secy; in macsec_dev_stop()
3681 struct macsec_dev *macsec = macsec_priv(dev); in macsec_set_mac_address() local
3682 struct net_device *real_dev = macsec->real_dev; in macsec_set_mac_address()
3700 if (macsec_is_offloaded(macsec)) { in macsec_set_mac_address()
3704 ops = macsec_get_ops(macsec, &ctx); in macsec_set_mac_address()
3710 ctx.secy = &macsec->secy; in macsec_set_mac_address()
3732 struct macsec_dev *macsec = macsec_priv(dev); in macsec_change_mtu() local
3733 unsigned int extra = macsec->secy.icv_len + macsec_extra_len(true); in macsec_change_mtu()
3735 if (macsec->real_dev->mtu - extra < new_mtu) in macsec_change_mtu()
3799 struct macsec_dev *macsec = macsec_priv(dev); in macsec_free_netdev() local
3801 dst_release(&macsec->secy.tx_sc.md_dst->dst); in macsec_free_netdev()
3802 free_percpu(macsec->stats); in macsec_free_netdev()
3803 free_percpu(macsec->secy.tx_sc.stats); in macsec_free_netdev()
3806 netdev_put(macsec->real_dev, &macsec->dev_tracker); in macsec_free_netdev()
3903 struct macsec_dev *macsec = macsec_priv(dev); in macsec_changelink() local
3922 memcpy(&secy, &macsec->secy, sizeof(secy)); in macsec_changelink()
3923 memcpy(&tx_sc, &macsec->secy.tx_sc, sizeof(tx_sc)); in macsec_changelink()
3931 if (macsec->offload != offload) { in macsec_changelink()
3940 if (!macsec_offload_state_change && macsec_is_offloaded(macsec)) { in macsec_changelink()
3950 ctx.secy = &macsec->secy; in macsec_changelink()
3959 memcpy(&macsec->secy.tx_sc, &tx_sc, sizeof(tx_sc)); in macsec_changelink()
3960 memcpy(&macsec->secy, &secy, sizeof(secy)); in macsec_changelink()
3965 static void macsec_del_dev(struct macsec_dev *macsec) in macsec_del_dev() argument
3969 while (macsec->secy.rx_sc) { in macsec_del_dev()
3970 struct macsec_rx_sc *rx_sc = rtnl_dereference(macsec->secy.rx_sc); in macsec_del_dev()
3972 rcu_assign_pointer(macsec->secy.rx_sc, rx_sc->next); in macsec_del_dev()
3977 struct macsec_tx_sa *sa = rtnl_dereference(macsec->secy.tx_sc.sa[i]); in macsec_del_dev()
3980 RCU_INIT_POINTER(macsec->secy.tx_sc.sa[i], NULL); in macsec_del_dev()
3988 struct macsec_dev *macsec = macsec_priv(dev); in macsec_common_dellink() local
3989 struct net_device *real_dev = macsec->real_dev; in macsec_common_dellink()
3992 if (macsec_is_offloaded(macsec)) { in macsec_common_dellink()
3998 ctx.secy = &macsec->secy; in macsec_common_dellink()
4004 list_del_rcu(&macsec->secys); in macsec_common_dellink()
4005 macsec_del_dev(macsec); in macsec_common_dellink()
4013 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dellink() local
4014 struct net_device *real_dev = macsec->real_dev; in macsec_dellink()
4028 struct macsec_dev *macsec = macsec_priv(dev); in register_macsec_dev() local
4048 list_add_tail_rcu(&macsec->secys, &rxd->secys); in register_macsec_dev()
4055 struct macsec_dev *macsec; in sci_exists() local
4057 list_for_each_entry(macsec, &rxd->secys, secys) { in sci_exists()
4058 if (macsec->secy.sci == sci) in sci_exists()
4072 struct macsec_dev *macsec = macsec_priv(dev); in macsec_add_dev() local
4073 struct macsec_secy *secy = &macsec->secy; in macsec_add_dev()
4075 macsec->stats = netdev_alloc_pcpu_stats(struct pcpu_secy_stats); in macsec_add_dev()
4076 if (!macsec->stats) in macsec_add_dev()
4120 struct macsec_dev *macsec = macsec_priv(dev); in macsec_newlink() local
4137 macsec->real_dev = real_dev; in macsec_newlink()
4140 macsec->offload = nla_get_offload(data[IFLA_MACSEC_OFFLOAD]); in macsec_newlink()
4143 macsec->offload = MACSEC_OFFLOAD_OFF; in macsec_newlink()
4146 if (macsec->offload != MACSEC_OFFLOAD_OFF && in macsec_newlink()
4147 !macsec_check_offload(macsec->offload, macsec)) in macsec_newlink()
4209 if (macsec_is_offloaded(macsec)) { in macsec_newlink()
4213 ops = macsec_get_ops(macsec, &ctx); in macsec_newlink()
4215 ctx.secy = &macsec->secy; in macsec_newlink()
4220 macsec->insert_tx_tag = in macsec_newlink()
4221 macsec_needs_tx_tag(macsec, ops); in macsec_newlink()
4237 macsec_del_dev(macsec); in macsec_newlink()
4360 struct macsec_dev *macsec; in macsec_fill_info() local
4364 macsec = macsec_priv(dev); in macsec_fill_info()
4365 secy = &macsec->secy; in macsec_fill_info()
4392 nla_put_u8(skb, IFLA_MACSEC_OFFLOAD, macsec->offload) || in macsec_fill_info()