Lines Matching refs:macsec
265 struct macsec_dev *macsec; in macsec_frame_sci() local
276 macsec = list_first_or_null_rcu(&rxd->secys, struct macsec_dev, in macsec_frame_sci()
278 if (macsec) in macsec_frame_sci()
279 return macsec_active_sci(&macsec->secy); in macsec_frame_sci()
341 static bool macsec_is_offloaded(struct macsec_dev *macsec) in macsec_is_offloaded() argument
343 if (macsec->offload == MACSEC_OFFLOAD_MAC || in macsec_is_offloaded()
344 macsec->offload == MACSEC_OFFLOAD_PHY) in macsec_is_offloaded()
352 struct macsec_dev *macsec) in macsec_check_offload() argument
354 if (!macsec || !macsec->real_dev) in macsec_check_offload()
358 return macsec->real_dev->phydev && in macsec_check_offload()
359 macsec->real_dev->phydev->macsec_ops; in macsec_check_offload()
361 return macsec->real_dev->features & NETIF_F_HW_MACSEC && in macsec_check_offload()
362 macsec->real_dev->macsec_ops; in macsec_check_offload()
368 struct macsec_dev *macsec, in __macsec_get_ops() argument
376 ctx->phydev = macsec->real_dev->phydev; in __macsec_get_ops()
378 ctx->netdev = macsec->real_dev; in __macsec_get_ops()
382 return macsec->real_dev->phydev->macsec_ops; in __macsec_get_ops()
384 return macsec->real_dev->macsec_ops; in __macsec_get_ops()
390 static const struct macsec_ops *macsec_get_ops(struct macsec_dev *macsec, in macsec_get_ops() argument
393 if (!macsec_check_offload(macsec->offload, macsec)) in macsec_get_ops()
396 return __macsec_get_ops(macsec->offload, macsec, ctx); in macsec_get_ops()
499 struct macsec_dev *macsec = netdev_priv(dev); in macsec_encrypt_finish() local
501 skb->dev = macsec->real_dev; in macsec_encrypt_finish()
508 struct macsec_dev *macsec = macsec_priv(skb->dev); in macsec_msdu_len() local
509 struct macsec_secy *secy = &macsec->secy; in macsec_msdu_len()
544 struct macsec_dev *macsec = macsec_priv(dev); in macsec_encrypt_done() local
551 macsec_count_tx(skb, &macsec->secy.tx_sc, macsec_skb_cb(skb)->tx_sa); in macsec_encrypt_done()
607 struct macsec_dev *macsec = macsec_priv(dev); in macsec_encrypt() local
611 secy = &macsec->secy; in macsec_encrypt()
662 struct pcpu_secy_stats *secy_stats = this_cpu_ptr(macsec->stats); in macsec_encrypt()
846 struct macsec_dev *macsec = macsec_priv(dev); in macsec_decrypt_done() local
859 if (!macsec_post_decrypt(skb, &macsec->secy, pn)) { in macsec_decrypt_done()
865 macsec_finalize_skb(skb, macsec->secy.icv_len, in macsec_decrypt_done()
868 macsec_reset_skb(skb, macsec->secy.netdev); in macsec_decrypt_done()
870 if (gro_cells_receive(&macsec->gro_cells, skb) == NET_RX_SUCCESS) in macsec_decrypt_done()
1013 struct macsec_dev *macsec; in handle_not_macsec() local
1021 list_for_each_entry_rcu(macsec, &rxd->secys, secys) { in handle_not_macsec()
1023 struct pcpu_secy_stats *secy_stats = this_cpu_ptr(macsec->stats); in handle_not_macsec()
1024 struct net_device *ndev = macsec->secy.netdev; in handle_not_macsec()
1029 if (macsec_is_offloaded(macsec) && netif_running(ndev)) { in handle_not_macsec()
1032 ops = macsec_get_ops(macsec, NULL); in handle_not_macsec()
1045 rx_sc = find_rx_sc(&macsec->secy, in handle_not_macsec()
1098 if (macsec->secy.validate_frames == MACSEC_VALIDATE_STRICT) { in handle_not_macsec()
1102 DEV_STATS_INC(macsec->secy.netdev, rx_dropped); in handle_not_macsec()
1134 struct macsec_dev *macsec; in macsec_handle_frame() local
1191 list_for_each_entry_rcu(macsec, &rxd->secys, secys) { in macsec_handle_frame()
1192 struct macsec_rx_sc *sc = find_rx_sc(&macsec->secy, sci); in macsec_handle_frame()
1197 secy = &macsec->secy; in macsec_handle_frame()
1207 macsec = macsec_priv(dev); in macsec_handle_frame()
1208 secy_stats = this_cpu_ptr(macsec->stats); in macsec_handle_frame()
1261 DEV_STATS_INC(macsec->secy.netdev, rx_dropped); in macsec_handle_frame()
1298 ret = gro_cells_receive(&macsec->gro_cells, skb); in macsec_handle_frame()
1302 DEV_STATS_INC(macsec->secy.netdev, rx_dropped); in macsec_handle_frame()
1327 list_for_each_entry_rcu(macsec, &rxd->secys, secys) { in macsec_handle_frame()
1330 secy_stats = this_cpu_ptr(macsec->stats); in macsec_handle_frame()
1336 macsec->secy.validate_frames == MACSEC_VALIDATE_STRICT) { in macsec_handle_frame()
1340 DEV_STATS_INC(macsec->secy.netdev, rx_errors); in macsec_handle_frame()
1351 macsec_reset_skb(nskb, macsec->secy.netdev); in macsec_handle_frame()
1359 DEV_STATS_INC(macsec->secy.netdev, rx_dropped); in macsec_handle_frame()
1458 struct macsec_dev *macsec; in create_rx_sc() local
1463 list_for_each_entry(macsec, &rxd->secys, secys) { in create_rx_sc()
1464 if (find_rx_sc_rtnl(&macsec->secy, sci)) in create_rx_sc()
2610 static bool macsec_is_configured(struct macsec_dev *macsec) in macsec_is_configured() argument
2612 struct macsec_secy *secy = &macsec->secy; in macsec_is_configured()
2626 static bool macsec_needs_tx_tag(struct macsec_dev *macsec, in macsec_needs_tx_tag() argument
2629 return macsec->offload == MACSEC_OFFLOAD_PHY && in macsec_needs_tx_tag()
2635 struct macsec_dev *macsec = macsec_priv(dev); in macsec_set_head_tail_room() local
2636 struct net_device *real_dev = macsec->real_dev; in macsec_set_head_tail_room()
2640 ops = macsec_get_ops(macsec, NULL); in macsec_set_head_tail_room()
2655 struct macsec_dev *macsec = macsec_priv(dev); in macsec_inherit_tso_max() local
2660 if (macsec_is_offloaded(macsec)) in macsec_inherit_tso_max()
2661 netif_inherit_tso_max(dev, macsec->real_dev); in macsec_inherit_tso_max()
2669 struct macsec_dev *macsec; in macsec_update_offload() local
2672 macsec = macsec_priv(dev); in macsec_update_offload()
2676 !macsec_check_offload(offload, macsec)) in macsec_update_offload()
2686 if (macsec_is_configured(macsec)) in macsec_update_offload()
2689 prev_offload = macsec->offload; in macsec_update_offload()
2692 macsec, &ctx); in macsec_update_offload()
2696 macsec->offload = offload; in macsec_update_offload()
2698 ctx.secy = &macsec->secy; in macsec_update_offload()
2702 macsec->offload = prev_offload; in macsec_update_offload()
2707 macsec->insert_tx_tag = macsec_needs_tx_tag(macsec, ops); in macsec_update_offload()
2721 struct macsec_dev *macsec; in macsec_upd_offload() local
2743 macsec = macsec_priv(dev); in macsec_upd_offload()
2752 if (macsec->offload != offload) in macsec_upd_offload()
2763 struct macsec_dev *macsec = macsec_priv(dev); in get_tx_sa_stats() local
2767 if (macsec_is_offloaded(macsec)) { in get_tx_sa_stats()
2771 ops = macsec_get_ops(macsec, &ctx); in get_tx_sa_stats()
2807 struct macsec_dev *macsec = macsec_priv(dev); in get_rx_sa_stats() local
2811 if (macsec_is_offloaded(macsec)) { in get_rx_sa_stats()
2815 ops = macsec_get_ops(macsec, &ctx); in get_rx_sa_stats()
2860 struct macsec_dev *macsec = macsec_priv(dev); in get_rx_sc_stats() local
2864 if (macsec_is_offloaded(macsec)) { in get_rx_sc_stats()
2868 ops = macsec_get_ops(macsec, &ctx); in get_rx_sc_stats()
2942 struct macsec_dev *macsec = macsec_priv(dev); in get_tx_sc_stats() local
2946 if (macsec_is_offloaded(macsec)) { in get_tx_sc_stats()
2950 ops = macsec_get_ops(macsec, &ctx); in get_tx_sc_stats()
2998 struct macsec_dev *macsec = macsec_priv(dev); in get_secy_stats() local
3002 if (macsec_is_offloaded(macsec)) { in get_secy_stats()
3006 ops = macsec_get_ops(macsec, &ctx); in get_secy_stats()
3126 struct macsec_dev *macsec = netdev_priv(dev); in dump_secy() local
3148 if (nla_put_u8(skb, MACSEC_OFFLOAD_ATTR_TYPE, macsec->offload)) in dump_secy()
3472 struct macsec_dev *macsec = macsec_priv(dev); in macsec_insert_tx_tag() local
3479 ops = macsec_get_ops(macsec, &ctx); in macsec_insert_tx_tag()
3482 if (unlikely(skb_final_len > macsec->real_dev->mtu)) { in macsec_insert_tx_tag()
3487 phydev = macsec->real_dev->phydev; in macsec_insert_tx_tag()
3506 struct macsec_dev *macsec = netdev_priv(dev); in macsec_start_xmit() local
3507 struct macsec_secy *secy = &macsec->secy; in macsec_start_xmit()
3518 if (macsec->insert_tx_tag) { in macsec_start_xmit()
3526 skb->dev = macsec->real_dev; in macsec_start_xmit()
3532 secy_stats = this_cpu_ptr(macsec->stats); in macsec_start_xmit()
3536 skb->dev = macsec->real_dev; in macsec_start_xmit()
3557 macsec_count_tx(skb, &macsec->secy.tx_sc, macsec_skb_cb(skb)->tx_sa); in macsec_start_xmit()
3574 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dev_init() local
3575 struct net_device *real_dev = macsec->real_dev; in macsec_dev_init()
3578 err = gro_cells_init(&macsec->gro_cells, dev); in macsec_dev_init()
3600 netdev_hold(real_dev, &macsec->dev_tracker, GFP_KERNEL); in macsec_dev_init()
3607 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dev_uninit() local
3609 gro_cells_destroy(&macsec->gro_cells); in macsec_dev_uninit()
3615 struct macsec_dev *macsec = macsec_priv(dev); in macsec_fix_features() local
3616 struct net_device *real_dev = macsec->real_dev; in macsec_fix_features()
3619 mask = macsec_is_offloaded(macsec) ? MACSEC_OFFLOAD_FEATURES in macsec_fix_features()
3630 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dev_open() local
3631 struct net_device *real_dev = macsec->real_dev; in macsec_dev_open()
3651 if (macsec_is_offloaded(macsec)) { in macsec_dev_open()
3661 ctx.secy = &macsec->secy; in macsec_dev_open()
3682 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dev_stop() local
3683 struct net_device *real_dev = macsec->real_dev; in macsec_dev_stop()
3688 if (macsec_is_offloaded(macsec)) { in macsec_dev_stop()
3692 ops = macsec_get_ops(macsec, &ctx); in macsec_dev_stop()
3694 ctx.secy = &macsec->secy; in macsec_dev_stop()
3738 struct macsec_dev *macsec = macsec_priv(dev); in macsec_set_mac_address() local
3739 struct net_device *real_dev = macsec->real_dev; in macsec_set_mac_address()
3757 if (macsec_is_offloaded(macsec)) { in macsec_set_mac_address()
3761 ops = macsec_get_ops(macsec, &ctx); in macsec_set_mac_address()
3767 ctx.secy = &macsec->secy; in macsec_set_mac_address()
3789 struct macsec_dev *macsec = macsec_priv(dev); in macsec_change_mtu() local
3790 unsigned int extra = macsec->secy.icv_len + macsec_extra_len(true); in macsec_change_mtu()
3792 if (macsec->real_dev->mtu - extra < new_mtu) in macsec_change_mtu()
3856 struct macsec_dev *macsec = macsec_priv(dev); in macsec_free_netdev() local
3858 dst_release(&macsec->secy.tx_sc.md_dst->dst); in macsec_free_netdev()
3859 free_percpu(macsec->stats); in macsec_free_netdev()
3860 free_percpu(macsec->secy.tx_sc.stats); in macsec_free_netdev()
3863 netdev_put(macsec->real_dev, &macsec->dev_tracker); in macsec_free_netdev()
3960 struct macsec_dev *macsec = macsec_priv(dev); in macsec_changelink() local
3979 memcpy(&secy, &macsec->secy, sizeof(secy)); in macsec_changelink()
3980 memcpy(&tx_sc, &macsec->secy.tx_sc, sizeof(tx_sc)); in macsec_changelink()
3988 if (macsec->offload != offload) { in macsec_changelink()
3997 if (!macsec_offload_state_change && macsec_is_offloaded(macsec)) { in macsec_changelink()
4007 ctx.secy = &macsec->secy; in macsec_changelink()
4016 memcpy(&macsec->secy.tx_sc, &tx_sc, sizeof(tx_sc)); in macsec_changelink()
4017 memcpy(&macsec->secy, &secy, sizeof(secy)); in macsec_changelink()
4022 static void macsec_del_dev(struct macsec_dev *macsec) in macsec_del_dev() argument
4026 while (macsec->secy.rx_sc) { in macsec_del_dev()
4027 struct macsec_rx_sc *rx_sc = rtnl_dereference(macsec->secy.rx_sc); in macsec_del_dev()
4029 rcu_assign_pointer(macsec->secy.rx_sc, rx_sc->next); in macsec_del_dev()
4034 struct macsec_tx_sa *sa = rtnl_dereference(macsec->secy.tx_sc.sa[i]); in macsec_del_dev()
4037 RCU_INIT_POINTER(macsec->secy.tx_sc.sa[i], NULL); in macsec_del_dev()
4045 struct macsec_dev *macsec = macsec_priv(dev); in macsec_common_dellink() local
4046 struct net_device *real_dev = macsec->real_dev; in macsec_common_dellink()
4049 if (macsec_is_offloaded(macsec)) { in macsec_common_dellink()
4055 ctx.secy = &macsec->secy; in macsec_common_dellink()
4061 list_del_rcu(&macsec->secys); in macsec_common_dellink()
4062 macsec_del_dev(macsec); in macsec_common_dellink()
4070 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dellink() local
4071 struct net_device *real_dev = macsec->real_dev; in macsec_dellink()
4085 struct macsec_dev *macsec = macsec_priv(dev); in register_macsec_dev() local
4105 list_add_tail_rcu(&macsec->secys, &rxd->secys); in register_macsec_dev()
4112 struct macsec_dev *macsec; in sci_exists() local
4114 list_for_each_entry(macsec, &rxd->secys, secys) { in sci_exists()
4115 if (macsec->secy.sci == sci) in sci_exists()
4129 struct macsec_dev *macsec = macsec_priv(dev); in macsec_add_dev() local
4130 struct macsec_secy *secy = &macsec->secy; in macsec_add_dev()
4132 macsec->stats = netdev_alloc_pcpu_stats(struct pcpu_secy_stats); in macsec_add_dev()
4133 if (!macsec->stats) in macsec_add_dev()
4178 struct macsec_dev *macsec = macsec_priv(dev); in macsec_newlink() local
4197 macsec->real_dev = real_dev; in macsec_newlink()
4200 macsec->offload = nla_get_offload(data[IFLA_MACSEC_OFFLOAD]); in macsec_newlink()
4203 macsec->offload = MACSEC_OFFLOAD_OFF; in macsec_newlink()
4206 if (macsec->offload != MACSEC_OFFLOAD_OFF && in macsec_newlink()
4207 !macsec_check_offload(macsec->offload, macsec)) in macsec_newlink()
4269 if (macsec_is_offloaded(macsec)) { in macsec_newlink()
4273 ops = macsec_get_ops(macsec, &ctx); in macsec_newlink()
4275 ctx.secy = &macsec->secy; in macsec_newlink()
4280 macsec->insert_tx_tag = in macsec_newlink()
4281 macsec_needs_tx_tag(macsec, ops); in macsec_newlink()
4297 macsec_del_dev(macsec); in macsec_newlink()
4420 struct macsec_dev *macsec; in macsec_fill_info() local
4424 macsec = macsec_priv(dev); in macsec_fill_info()
4425 secy = &macsec->secy; in macsec_fill_info()
4452 nla_put_u8(skb, IFLA_MACSEC_OFFLOAD, macsec->offload) || in macsec_fill_info()