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()
2533 static bool macsec_is_configured(struct macsec_dev *macsec) in macsec_is_configured() argument
2535 struct macsec_secy *secy = &macsec->secy; in macsec_is_configured()
2549 static bool macsec_needs_tx_tag(struct macsec_dev *macsec, in macsec_needs_tx_tag() argument
2552 return macsec->offload == MACSEC_OFFLOAD_PHY && in macsec_needs_tx_tag()
2558 struct macsec_dev *macsec = macsec_priv(dev); in macsec_set_head_tail_room() local
2559 struct net_device *real_dev = macsec->real_dev; in macsec_set_head_tail_room()
2563 ops = macsec_get_ops(macsec, NULL); in macsec_set_head_tail_room()
2578 struct macsec_dev *macsec = macsec_priv(dev); in macsec_inherit_tso_max() local
2583 if (macsec_is_offloaded(macsec)) in macsec_inherit_tso_max()
2584 netif_inherit_tso_max(dev, macsec->real_dev); in macsec_inherit_tso_max()
2592 struct macsec_dev *macsec; in macsec_update_offload() local
2595 macsec = macsec_priv(dev); in macsec_update_offload()
2599 !macsec_check_offload(offload, macsec)) in macsec_update_offload()
2609 if (macsec_is_configured(macsec)) in macsec_update_offload()
2612 prev_offload = macsec->offload; in macsec_update_offload()
2615 macsec, &ctx); in macsec_update_offload()
2619 macsec->offload = offload; in macsec_update_offload()
2621 ctx.secy = &macsec->secy; in macsec_update_offload()
2625 macsec->offload = prev_offload; in macsec_update_offload()
2630 macsec->insert_tx_tag = macsec_needs_tx_tag(macsec, ops); in macsec_update_offload()
2644 struct macsec_dev *macsec; in macsec_upd_offload() local
2666 macsec = macsec_priv(dev); in macsec_upd_offload()
2675 if (macsec->offload != offload) in macsec_upd_offload()
2686 struct macsec_dev *macsec = macsec_priv(dev); in get_tx_sa_stats() local
2690 if (macsec_is_offloaded(macsec)) { in get_tx_sa_stats()
2694 ops = macsec_get_ops(macsec, &ctx); in get_tx_sa_stats()
2730 struct macsec_dev *macsec = macsec_priv(dev); in get_rx_sa_stats() local
2734 if (macsec_is_offloaded(macsec)) { in get_rx_sa_stats()
2738 ops = macsec_get_ops(macsec, &ctx); in get_rx_sa_stats()
2783 struct macsec_dev *macsec = macsec_priv(dev); in get_rx_sc_stats() local
2787 if (macsec_is_offloaded(macsec)) { in get_rx_sc_stats()
2791 ops = macsec_get_ops(macsec, &ctx); in get_rx_sc_stats()
2865 struct macsec_dev *macsec = macsec_priv(dev); in get_tx_sc_stats() local
2869 if (macsec_is_offloaded(macsec)) { in get_tx_sc_stats()
2873 ops = macsec_get_ops(macsec, &ctx); in get_tx_sc_stats()
2921 struct macsec_dev *macsec = macsec_priv(dev); in get_secy_stats() local
2925 if (macsec_is_offloaded(macsec)) { in get_secy_stats()
2929 ops = macsec_get_ops(macsec, &ctx); in get_secy_stats()
3049 struct macsec_dev *macsec = netdev_priv(dev); in dump_secy() local
3071 if (nla_put_u8(skb, MACSEC_OFFLOAD_ATTR_TYPE, macsec->offload)) in dump_secy()
3395 struct macsec_dev *macsec = macsec_priv(dev); in macsec_insert_tx_tag() local
3402 ops = macsec_get_ops(macsec, &ctx); in macsec_insert_tx_tag()
3405 if (unlikely(skb_final_len > macsec->real_dev->mtu)) { in macsec_insert_tx_tag()
3410 phydev = macsec->real_dev->phydev; in macsec_insert_tx_tag()
3429 struct macsec_dev *macsec = netdev_priv(dev); in macsec_start_xmit() local
3430 struct macsec_secy *secy = &macsec->secy; in macsec_start_xmit()
3441 if (macsec->insert_tx_tag) { in macsec_start_xmit()
3449 skb->dev = macsec->real_dev; in macsec_start_xmit()
3455 secy_stats = this_cpu_ptr(macsec->stats); in macsec_start_xmit()
3459 skb->dev = macsec->real_dev; in macsec_start_xmit()
3480 macsec_count_tx(skb, &macsec->secy.tx_sc, macsec_skb_cb(skb)->tx_sa); in macsec_start_xmit()
3497 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dev_init() local
3498 struct net_device *real_dev = macsec->real_dev; in macsec_dev_init()
3501 err = gro_cells_init(&macsec->gro_cells, dev); in macsec_dev_init()
3523 netdev_hold(real_dev, &macsec->dev_tracker, GFP_KERNEL); in macsec_dev_init()
3530 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dev_uninit() local
3532 gro_cells_destroy(&macsec->gro_cells); in macsec_dev_uninit()
3538 struct macsec_dev *macsec = macsec_priv(dev); in macsec_fix_features() local
3539 struct net_device *real_dev = macsec->real_dev; in macsec_fix_features()
3542 mask = macsec_is_offloaded(macsec) ? MACSEC_OFFLOAD_FEATURES in macsec_fix_features()
3553 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dev_open() local
3554 struct net_device *real_dev = macsec->real_dev; in macsec_dev_open()
3574 if (macsec_is_offloaded(macsec)) { in macsec_dev_open()
3584 ctx.secy = &macsec->secy; in macsec_dev_open()
3605 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dev_stop() local
3606 struct net_device *real_dev = macsec->real_dev; in macsec_dev_stop()
3611 if (macsec_is_offloaded(macsec)) { in macsec_dev_stop()
3615 ops = macsec_get_ops(macsec, &ctx); in macsec_dev_stop()
3617 ctx.secy = &macsec->secy; in macsec_dev_stop()
3661 struct macsec_dev *macsec = macsec_priv(dev); in macsec_set_mac_address() local
3662 struct net_device *real_dev = macsec->real_dev; in macsec_set_mac_address()
3680 if (macsec_is_offloaded(macsec)) { in macsec_set_mac_address()
3684 ops = macsec_get_ops(macsec, &ctx); in macsec_set_mac_address()
3690 ctx.secy = &macsec->secy; in macsec_set_mac_address()
3712 struct macsec_dev *macsec = macsec_priv(dev); in macsec_change_mtu() local
3713 unsigned int extra = macsec->secy.icv_len + macsec_extra_len(true); in macsec_change_mtu()
3715 if (macsec->real_dev->mtu - extra < new_mtu) in macsec_change_mtu()
3781 struct macsec_dev *macsec = macsec_priv(dev); in macsec_free_netdev() local
3783 dst_release(&macsec->secy.tx_sc.md_dst->dst); in macsec_free_netdev()
3784 free_percpu(macsec->stats); in macsec_free_netdev()
3785 free_percpu(macsec->secy.tx_sc.stats); in macsec_free_netdev()
3788 netdev_put(macsec->real_dev, &macsec->dev_tracker); in macsec_free_netdev()
3885 struct macsec_dev *macsec = macsec_priv(dev); in macsec_changelink() local
3904 memcpy(&secy, &macsec->secy, sizeof(secy)); in macsec_changelink()
3905 memcpy(&tx_sc, &macsec->secy.tx_sc, sizeof(tx_sc)); in macsec_changelink()
3913 if (macsec->offload != offload) { in macsec_changelink()
3922 if (!macsec_offload_state_change && macsec_is_offloaded(macsec)) { in macsec_changelink()
3932 ctx.secy = &macsec->secy; in macsec_changelink()
3941 memcpy(&macsec->secy.tx_sc, &tx_sc, sizeof(tx_sc)); in macsec_changelink()
3942 memcpy(&macsec->secy, &secy, sizeof(secy)); in macsec_changelink()
3947 static void macsec_del_dev(struct macsec_dev *macsec) in macsec_del_dev() argument
3951 while (macsec->secy.rx_sc) { in macsec_del_dev()
3952 struct macsec_rx_sc *rx_sc = rtnl_dereference(macsec->secy.rx_sc); in macsec_del_dev()
3954 rcu_assign_pointer(macsec->secy.rx_sc, rx_sc->next); in macsec_del_dev()
3959 struct macsec_tx_sa *sa = rtnl_dereference(macsec->secy.tx_sc.sa[i]); in macsec_del_dev()
3962 RCU_INIT_POINTER(macsec->secy.tx_sc.sa[i], NULL); in macsec_del_dev()
3970 struct macsec_dev *macsec = macsec_priv(dev); in macsec_common_dellink() local
3971 struct net_device *real_dev = macsec->real_dev; in macsec_common_dellink()
3974 if (macsec_is_offloaded(macsec)) { in macsec_common_dellink()
3980 ctx.secy = &macsec->secy; in macsec_common_dellink()
3986 list_del_rcu(&macsec->secys); in macsec_common_dellink()
3987 macsec_del_dev(macsec); in macsec_common_dellink()
3995 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dellink() local
3996 struct net_device *real_dev = macsec->real_dev; in macsec_dellink()
4010 struct macsec_dev *macsec = macsec_priv(dev); in register_macsec_dev() local
4030 list_add_tail_rcu(&macsec->secys, &rxd->secys); in register_macsec_dev()
4037 struct macsec_dev *macsec; in sci_exists() local
4039 list_for_each_entry(macsec, &rxd->secys, secys) { in sci_exists()
4040 if (macsec->secy.sci == sci) in sci_exists()
4054 struct macsec_dev *macsec = macsec_priv(dev); in macsec_add_dev() local
4055 struct macsec_secy *secy = &macsec->secy; in macsec_add_dev()
4057 macsec->stats = netdev_alloc_pcpu_stats(struct pcpu_secy_stats); in macsec_add_dev()
4058 if (!macsec->stats) in macsec_add_dev()
4103 struct macsec_dev *macsec = macsec_priv(dev); in macsec_newlink() local
4122 macsec->real_dev = real_dev; in macsec_newlink()
4125 macsec->offload = nla_get_offload(data[IFLA_MACSEC_OFFLOAD]); in macsec_newlink()
4128 macsec->offload = MACSEC_OFFLOAD_OFF; in macsec_newlink()
4131 if (macsec->offload != MACSEC_OFFLOAD_OFF && in macsec_newlink()
4132 !macsec_check_offload(macsec->offload, macsec)) in macsec_newlink()
4194 if (macsec_is_offloaded(macsec)) { in macsec_newlink()
4198 ops = macsec_get_ops(macsec, &ctx); in macsec_newlink()
4200 ctx.secy = &macsec->secy; in macsec_newlink()
4205 macsec->insert_tx_tag = in macsec_newlink()
4206 macsec_needs_tx_tag(macsec, ops); in macsec_newlink()
4223 macsec_del_dev(macsec); in macsec_newlink()
4324 struct macsec_dev *macsec; in macsec_fill_info() local
4328 macsec = macsec_priv(dev); in macsec_fill_info()
4329 secy = &macsec->secy; in macsec_fill_info()
4356 nla_put_u8(skb, IFLA_MACSEC_OFFLOAD, macsec->offload) || in macsec_fill_info()