Lines Matching refs:macsec
317 static bool macsec_is_offloaded(struct macsec_dev *macsec) in macsec_is_offloaded() argument
319 if (macsec->offload == MACSEC_OFFLOAD_MAC || in macsec_is_offloaded()
320 macsec->offload == MACSEC_OFFLOAD_PHY) in macsec_is_offloaded()
328 struct macsec_dev *macsec) in macsec_check_offload() argument
330 if (!macsec || !macsec->real_dev) in macsec_check_offload()
334 return macsec->real_dev->phydev && in macsec_check_offload()
335 macsec->real_dev->phydev->macsec_ops; in macsec_check_offload()
337 return macsec->real_dev->features & NETIF_F_HW_MACSEC && in macsec_check_offload()
338 macsec->real_dev->macsec_ops; in macsec_check_offload()
344 struct macsec_dev *macsec, in __macsec_get_ops() argument
352 ctx->phydev = macsec->real_dev->phydev; in __macsec_get_ops()
354 ctx->netdev = macsec->real_dev; in __macsec_get_ops()
358 return macsec->real_dev->phydev->macsec_ops; in __macsec_get_ops()
360 return macsec->real_dev->macsec_ops; in __macsec_get_ops()
366 static const struct macsec_ops *macsec_get_ops(struct macsec_dev *macsec, in macsec_get_ops() argument
369 if (!macsec_check_offload(macsec->offload, macsec)) in macsec_get_ops()
372 return __macsec_get_ops(macsec->offload, macsec, ctx); in macsec_get_ops()
475 struct macsec_dev *macsec = netdev_priv(dev); in macsec_encrypt_finish() local
477 skb->dev = macsec->real_dev; in macsec_encrypt_finish()
484 struct macsec_dev *macsec = macsec_priv(skb->dev); in macsec_msdu_len() local
485 struct macsec_secy *secy = &macsec->secy; in macsec_msdu_len()
520 struct macsec_dev *macsec = macsec_priv(dev); in macsec_encrypt_done() local
527 macsec_count_tx(skb, &macsec->secy.tx_sc, macsec_skb_cb(skb)->tx_sa); in macsec_encrypt_done()
583 struct macsec_dev *macsec = macsec_priv(dev); in macsec_encrypt() local
587 secy = &macsec->secy; in macsec_encrypt()
638 struct pcpu_secy_stats *secy_stats = this_cpu_ptr(macsec->stats); in macsec_encrypt()
822 struct macsec_dev *macsec = macsec_priv(dev); in macsec_decrypt_done() local
835 if (!macsec_post_decrypt(skb, &macsec->secy, pn)) { in macsec_decrypt_done()
841 macsec_finalize_skb(skb, macsec->secy.icv_len, in macsec_decrypt_done()
844 macsec_reset_skb(skb, macsec->secy.netdev); in macsec_decrypt_done()
846 if (gro_cells_receive(&macsec->gro_cells, skb) == NET_RX_SUCCESS) in macsec_decrypt_done()
989 struct macsec_dev *macsec; in handle_not_macsec() local
997 list_for_each_entry_rcu(macsec, &rxd->secys, secys) { in handle_not_macsec()
999 struct pcpu_secy_stats *secy_stats = this_cpu_ptr(macsec->stats); in handle_not_macsec()
1000 struct net_device *ndev = macsec->secy.netdev; in handle_not_macsec()
1005 if (macsec_is_offloaded(macsec) && netif_running(ndev)) { in handle_not_macsec()
1008 ops = macsec_get_ops(macsec, NULL); in handle_not_macsec()
1021 rx_sc = find_rx_sc(&macsec->secy, in handle_not_macsec()
1074 if (macsec->secy.validate_frames == MACSEC_VALIDATE_STRICT) { in handle_not_macsec()
1078 DEV_STATS_INC(macsec->secy.netdev, rx_dropped); in handle_not_macsec()
1110 struct macsec_dev *macsec; in macsec_handle_frame() local
1164 list_for_each_entry_rcu(macsec, &rxd->secys, secys) { in macsec_handle_frame()
1165 struct macsec_rx_sc *sc = find_rx_sc(&macsec->secy, sci); in macsec_handle_frame()
1170 secy = &macsec->secy; in macsec_handle_frame()
1180 macsec = macsec_priv(dev); in macsec_handle_frame()
1181 secy_stats = this_cpu_ptr(macsec->stats); in macsec_handle_frame()
1234 DEV_STATS_INC(macsec->secy.netdev, rx_dropped); in macsec_handle_frame()
1271 ret = gro_cells_receive(&macsec->gro_cells, skb); in macsec_handle_frame()
1275 DEV_STATS_INC(macsec->secy.netdev, rx_dropped); in macsec_handle_frame()
1299 list_for_each_entry_rcu(macsec, &rxd->secys, secys) { in macsec_handle_frame()
1302 secy_stats = this_cpu_ptr(macsec->stats); in macsec_handle_frame()
1308 macsec->secy.validate_frames == MACSEC_VALIDATE_STRICT) { in macsec_handle_frame()
1312 DEV_STATS_INC(macsec->secy.netdev, rx_errors); in macsec_handle_frame()
1323 macsec_reset_skb(nskb, macsec->secy.netdev); in macsec_handle_frame()
1331 DEV_STATS_INC(macsec->secy.netdev, rx_dropped); in macsec_handle_frame()
1430 struct macsec_dev *macsec; in create_rx_sc() local
1435 list_for_each_entry(macsec, &rxd->secys, secys) { in create_rx_sc()
1436 if (find_rx_sc_rtnl(&macsec->secy, sci)) in create_rx_sc()
2582 static bool macsec_is_configured(struct macsec_dev *macsec) in macsec_is_configured() argument
2584 struct macsec_secy *secy = &macsec->secy; in macsec_is_configured()
2598 static bool macsec_needs_tx_tag(struct macsec_dev *macsec, in macsec_needs_tx_tag() argument
2601 return macsec->offload == MACSEC_OFFLOAD_PHY && in macsec_needs_tx_tag()
2607 struct macsec_dev *macsec = macsec_priv(dev); in macsec_set_head_tail_room() local
2608 struct net_device *real_dev = macsec->real_dev; in macsec_set_head_tail_room()
2612 ops = macsec_get_ops(macsec, NULL); in macsec_set_head_tail_room()
2627 struct macsec_dev *macsec = macsec_priv(dev); in macsec_inherit_tso_max() local
2632 if (macsec_is_offloaded(macsec)) in macsec_inherit_tso_max()
2633 netif_inherit_tso_max(dev, macsec->real_dev); in macsec_inherit_tso_max()
2641 struct macsec_dev *macsec; in macsec_update_offload() local
2644 macsec = macsec_priv(dev); in macsec_update_offload()
2648 !macsec_check_offload(offload, macsec)) in macsec_update_offload()
2658 if (macsec_is_configured(macsec)) in macsec_update_offload()
2661 prev_offload = macsec->offload; in macsec_update_offload()
2664 macsec, &ctx); in macsec_update_offload()
2668 macsec->offload = offload; in macsec_update_offload()
2670 ctx.secy = &macsec->secy; in macsec_update_offload()
2674 macsec->offload = prev_offload; in macsec_update_offload()
2679 macsec->insert_tx_tag = macsec_needs_tx_tag(macsec, ops); in macsec_update_offload()
2693 struct macsec_dev *macsec; in macsec_upd_offload() local
2715 macsec = macsec_priv(dev); in macsec_upd_offload()
2724 if (macsec->offload != offload) in macsec_upd_offload()
2735 struct macsec_dev *macsec = macsec_priv(dev); in get_tx_sa_stats() local
2739 if (macsec_is_offloaded(macsec)) { in get_tx_sa_stats()
2743 ops = macsec_get_ops(macsec, &ctx); in get_tx_sa_stats()
2779 struct macsec_dev *macsec = macsec_priv(dev); in get_rx_sa_stats() local
2783 if (macsec_is_offloaded(macsec)) { in get_rx_sa_stats()
2787 ops = macsec_get_ops(macsec, &ctx); in get_rx_sa_stats()
2832 struct macsec_dev *macsec = macsec_priv(dev); in get_rx_sc_stats() local
2836 if (macsec_is_offloaded(macsec)) { in get_rx_sc_stats()
2840 ops = macsec_get_ops(macsec, &ctx); in get_rx_sc_stats()
2914 struct macsec_dev *macsec = macsec_priv(dev); in get_tx_sc_stats() local
2918 if (macsec_is_offloaded(macsec)) { in get_tx_sc_stats()
2922 ops = macsec_get_ops(macsec, &ctx); in get_tx_sc_stats()
2970 struct macsec_dev *macsec = macsec_priv(dev); in get_secy_stats() local
2974 if (macsec_is_offloaded(macsec)) { in get_secy_stats()
2978 ops = macsec_get_ops(macsec, &ctx); in get_secy_stats()
3098 struct macsec_dev *macsec = netdev_priv(dev); in dump_secy() local
3120 if (nla_put_u8(skb, MACSEC_OFFLOAD_ATTR_TYPE, macsec->offload)) in dump_secy()
3444 struct macsec_dev *macsec = macsec_priv(dev); in macsec_insert_tx_tag() local
3451 ops = macsec_get_ops(macsec, &ctx); in macsec_insert_tx_tag()
3454 if (unlikely(skb_final_len > macsec->real_dev->mtu)) { in macsec_insert_tx_tag()
3459 phydev = macsec->real_dev->phydev; in macsec_insert_tx_tag()
3478 struct macsec_dev *macsec = netdev_priv(dev); in macsec_start_xmit() local
3479 struct macsec_secy *secy = &macsec->secy; in macsec_start_xmit()
3490 if (macsec->insert_tx_tag) { in macsec_start_xmit()
3498 skb->dev = macsec->real_dev; in macsec_start_xmit()
3504 secy_stats = this_cpu_ptr(macsec->stats); in macsec_start_xmit()
3508 skb->dev = macsec->real_dev; in macsec_start_xmit()
3529 macsec_count_tx(skb, &macsec->secy.tx_sc, macsec_skb_cb(skb)->tx_sa); in macsec_start_xmit()
3546 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dev_init() local
3547 struct net_device *real_dev = macsec->real_dev; in macsec_dev_init()
3550 err = gro_cells_init(&macsec->gro_cells, dev); in macsec_dev_init()
3572 netdev_hold(real_dev, &macsec->dev_tracker, GFP_KERNEL); in macsec_dev_init()
3579 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dev_uninit() local
3581 gro_cells_destroy(&macsec->gro_cells); in macsec_dev_uninit()
3587 struct macsec_dev *macsec = macsec_priv(dev); in macsec_fix_features() local
3588 struct net_device *real_dev = macsec->real_dev; in macsec_fix_features()
3591 mask = macsec_is_offloaded(macsec) ? MACSEC_OFFLOAD_FEATURES in macsec_fix_features()
3602 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dev_open() local
3603 struct net_device *real_dev = macsec->real_dev; in macsec_dev_open()
3623 if (macsec_is_offloaded(macsec)) { in macsec_dev_open()
3633 ctx.secy = &macsec->secy; in macsec_dev_open()
3654 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dev_stop() local
3655 struct net_device *real_dev = macsec->real_dev; in macsec_dev_stop()
3660 if (macsec_is_offloaded(macsec)) { in macsec_dev_stop()
3664 ops = macsec_get_ops(macsec, &ctx); in macsec_dev_stop()
3666 ctx.secy = &macsec->secy; in macsec_dev_stop()
3710 struct macsec_dev *macsec = macsec_priv(dev); in macsec_set_mac_address() local
3711 struct net_device *real_dev = macsec->real_dev; in macsec_set_mac_address()
3729 if (macsec_is_offloaded(macsec)) { in macsec_set_mac_address()
3733 ops = macsec_get_ops(macsec, &ctx); in macsec_set_mac_address()
3739 ctx.secy = &macsec->secy; in macsec_set_mac_address()
3761 struct macsec_dev *macsec = macsec_priv(dev); in macsec_change_mtu() local
3762 unsigned int extra = macsec->secy.icv_len + macsec_extra_len(true); in macsec_change_mtu()
3764 if (macsec->real_dev->mtu - extra < new_mtu) in macsec_change_mtu()
3828 struct macsec_dev *macsec = macsec_priv(dev); in macsec_free_netdev() local
3830 dst_release(&macsec->secy.tx_sc.md_dst->dst); in macsec_free_netdev()
3831 free_percpu(macsec->stats); in macsec_free_netdev()
3832 free_percpu(macsec->secy.tx_sc.stats); in macsec_free_netdev()
3835 netdev_put(macsec->real_dev, &macsec->dev_tracker); in macsec_free_netdev()
3932 struct macsec_dev *macsec = macsec_priv(dev); in macsec_changelink() local
3951 memcpy(&secy, &macsec->secy, sizeof(secy)); in macsec_changelink()
3952 memcpy(&tx_sc, &macsec->secy.tx_sc, sizeof(tx_sc)); in macsec_changelink()
3960 if (macsec->offload != offload) { in macsec_changelink()
3969 if (!macsec_offload_state_change && macsec_is_offloaded(macsec)) { in macsec_changelink()
3979 ctx.secy = &macsec->secy; in macsec_changelink()
3988 memcpy(&macsec->secy.tx_sc, &tx_sc, sizeof(tx_sc)); in macsec_changelink()
3989 memcpy(&macsec->secy, &secy, sizeof(secy)); in macsec_changelink()
3994 static void macsec_del_dev(struct macsec_dev *macsec) in macsec_del_dev() argument
3998 while (macsec->secy.rx_sc) { in macsec_del_dev()
3999 struct macsec_rx_sc *rx_sc = rtnl_dereference(macsec->secy.rx_sc); in macsec_del_dev()
4001 rcu_assign_pointer(macsec->secy.rx_sc, rx_sc->next); in macsec_del_dev()
4006 struct macsec_tx_sa *sa = rtnl_dereference(macsec->secy.tx_sc.sa[i]); in macsec_del_dev()
4009 RCU_INIT_POINTER(macsec->secy.tx_sc.sa[i], NULL); in macsec_del_dev()
4017 struct macsec_dev *macsec = macsec_priv(dev); in macsec_common_dellink() local
4018 struct net_device *real_dev = macsec->real_dev; in macsec_common_dellink()
4021 if (macsec_is_offloaded(macsec)) { in macsec_common_dellink()
4027 ctx.secy = &macsec->secy; in macsec_common_dellink()
4033 list_del_rcu(&macsec->secys); in macsec_common_dellink()
4034 macsec_del_dev(macsec); in macsec_common_dellink()
4042 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dellink() local
4043 struct net_device *real_dev = macsec->real_dev; in macsec_dellink()
4057 struct macsec_dev *macsec = macsec_priv(dev); in register_macsec_dev() local
4077 list_add_tail_rcu(&macsec->secys, &rxd->secys); in register_macsec_dev()
4084 struct macsec_dev *macsec; in sci_exists() local
4086 list_for_each_entry(macsec, &rxd->secys, secys) { in sci_exists()
4087 if (macsec->secy.sci == sci) in sci_exists()
4101 struct macsec_dev *macsec = macsec_priv(dev); in macsec_add_dev() local
4102 struct macsec_secy *secy = &macsec->secy; in macsec_add_dev()
4104 macsec->stats = netdev_alloc_pcpu_stats(struct pcpu_secy_stats); in macsec_add_dev()
4105 if (!macsec->stats) in macsec_add_dev()
4150 struct macsec_dev *macsec = macsec_priv(dev); in macsec_newlink() local
4169 macsec->real_dev = real_dev; in macsec_newlink()
4172 macsec->offload = nla_get_offload(data[IFLA_MACSEC_OFFLOAD]); in macsec_newlink()
4175 macsec->offload = MACSEC_OFFLOAD_OFF; in macsec_newlink()
4178 if (macsec->offload != MACSEC_OFFLOAD_OFF && in macsec_newlink()
4179 !macsec_check_offload(macsec->offload, macsec)) in macsec_newlink()
4241 if (macsec_is_offloaded(macsec)) { in macsec_newlink()
4245 ops = macsec_get_ops(macsec, &ctx); in macsec_newlink()
4247 ctx.secy = &macsec->secy; in macsec_newlink()
4252 macsec->insert_tx_tag = in macsec_newlink()
4253 macsec_needs_tx_tag(macsec, ops); in macsec_newlink()
4269 macsec_del_dev(macsec); in macsec_newlink()
4392 struct macsec_dev *macsec; in macsec_fill_info() local
4396 macsec = macsec_priv(dev); in macsec_fill_info()
4397 secy = &macsec->secy; in macsec_fill_info()
4424 nla_put_u8(skb, IFLA_MACSEC_OFFLOAD, macsec->offload) || in macsec_fill_info()