Lines Matching refs:macsec
330 static bool macsec_is_offloaded(struct macsec_dev *macsec) in macsec_is_offloaded() argument
332 if (macsec->offload == MACSEC_OFFLOAD_MAC || in macsec_is_offloaded()
333 macsec->offload == MACSEC_OFFLOAD_PHY) in macsec_is_offloaded()
341 struct macsec_dev *macsec) in macsec_check_offload() argument
343 if (!macsec || !macsec->real_dev) in macsec_check_offload()
347 return macsec->real_dev->phydev && in macsec_check_offload()
348 macsec->real_dev->phydev->macsec_ops; in macsec_check_offload()
350 return macsec->real_dev->features & NETIF_F_HW_MACSEC && in macsec_check_offload()
351 macsec->real_dev->macsec_ops; in macsec_check_offload()
357 struct macsec_dev *macsec, in __macsec_get_ops() argument
365 ctx->phydev = macsec->real_dev->phydev; in __macsec_get_ops()
367 ctx->netdev = macsec->real_dev; in __macsec_get_ops()
371 return macsec->real_dev->phydev->macsec_ops; in __macsec_get_ops()
373 return macsec->real_dev->macsec_ops; in __macsec_get_ops()
379 static const struct macsec_ops *macsec_get_ops(struct macsec_dev *macsec, in macsec_get_ops() argument
382 if (!macsec_check_offload(macsec->offload, macsec)) in macsec_get_ops()
385 return __macsec_get_ops(macsec->offload, macsec, ctx); in macsec_get_ops()
493 struct macsec_dev *macsec = netdev_priv(dev); in macsec_encrypt_finish() local
495 skb->dev = macsec->real_dev; in macsec_encrypt_finish()
534 struct macsec_dev *macsec = macsec_priv(dev); in macsec_encrypt_done() local
542 macsec_count_tx(skb, &macsec->secy.tx_sc, macsec_skb_cb(skb)->tx_sa); in macsec_encrypt_done()
596 struct macsec_dev *macsec = macsec_priv(dev); in macsec_encrypt() local
600 secy = &macsec->secy; in macsec_encrypt()
651 struct pcpu_secy_stats *secy_stats = this_cpu_ptr(macsec->stats); in macsec_encrypt()
835 struct macsec_dev *macsec = macsec_priv(dev); in macsec_decrypt_done() local
848 if (!macsec_post_decrypt(skb, &macsec->secy, pn)) { in macsec_decrypt_done()
854 macsec_finalize_skb(skb, macsec->secy.icv_len, in macsec_decrypt_done()
856 macsec_reset_skb(skb, macsec->secy.netdev); in macsec_decrypt_done()
859 if (gro_cells_receive(&macsec->gro_cells, skb) == NET_RX_SUCCESS) in macsec_decrypt_done()
1001 struct macsec_dev *macsec; in handle_not_macsec() local
1006 list_for_each_entry_rcu(macsec, &rxd->secys, secys) { in handle_not_macsec()
1008 struct pcpu_secy_stats *secy_stats = this_cpu_ptr(macsec->stats); in handle_not_macsec()
1009 struct net_device *ndev = macsec->secy.netdev; in handle_not_macsec()
1014 if (macsec_is_offloaded(macsec) && netif_running(ndev)) { in handle_not_macsec()
1045 if (macsec->secy.validate_frames == MACSEC_VALIDATE_STRICT) { in handle_not_macsec()
1080 struct macsec_dev *macsec; in macsec_handle_frame() local
1134 list_for_each_entry_rcu(macsec, &rxd->secys, secys) { in macsec_handle_frame()
1135 struct macsec_rx_sc *sc = find_rx_sc(&macsec->secy, sci); in macsec_handle_frame()
1140 secy = &macsec->secy; in macsec_handle_frame()
1150 macsec = macsec_priv(dev); in macsec_handle_frame()
1151 secy_stats = this_cpu_ptr(macsec->stats); in macsec_handle_frame()
1238 ret = gro_cells_receive(&macsec->gro_cells, skb); in macsec_handle_frame()
1242 macsec->secy.netdev->stats.rx_dropped++; in macsec_handle_frame()
1266 list_for_each_entry_rcu(macsec, &rxd->secys, secys) { in macsec_handle_frame()
1269 secy_stats = this_cpu_ptr(macsec->stats); in macsec_handle_frame()
1275 macsec->secy.validate_frames == MACSEC_VALIDATE_STRICT) { in macsec_handle_frame()
1289 macsec_reset_skb(nskb, macsec->secy.netdev); in macsec_handle_frame()
1297 macsec->secy.netdev->stats.rx_dropped++; in macsec_handle_frame()
1396 struct macsec_dev *macsec; in create_rx_sc() local
1401 list_for_each_entry(macsec, &rxd->secys, secys) { in create_rx_sc()
1402 if (find_rx_sc_rtnl(&macsec->secy, sci)) in create_rx_sc()
2557 static bool macsec_is_configured(struct macsec_dev *macsec) in macsec_is_configured() argument
2559 struct macsec_secy *secy = &macsec->secy; in macsec_is_configured()
2582 struct macsec_dev *macsec; in macsec_upd_offload() local
2599 macsec = macsec_priv(dev); in macsec_upd_offload()
2605 if (macsec->offload == offload) in macsec_upd_offload()
2610 !macsec_check_offload(offload, macsec)) in macsec_upd_offload()
2619 prev_offload = macsec->offload; in macsec_upd_offload()
2620 macsec->offload = offload; in macsec_upd_offload()
2625 if (macsec_is_configured(macsec)) { in macsec_upd_offload()
2631 macsec, &ctx); in macsec_upd_offload()
2642 ctx.secy = &macsec->secy; in macsec_upd_offload()
2656 macsec->offload = prev_offload; in macsec_upd_offload()
2666 struct macsec_dev *macsec = macsec_priv(dev); in get_tx_sa_stats() local
2670 if (macsec_is_offloaded(macsec)) { in get_tx_sa_stats()
2674 ops = macsec_get_ops(macsec, &ctx); in get_tx_sa_stats()
2710 struct macsec_dev *macsec = macsec_priv(dev); in get_rx_sa_stats() local
2714 if (macsec_is_offloaded(macsec)) { in get_rx_sa_stats()
2718 ops = macsec_get_ops(macsec, &ctx); in get_rx_sa_stats()
2763 struct macsec_dev *macsec = macsec_priv(dev); in get_rx_sc_stats() local
2767 if (macsec_is_offloaded(macsec)) { in get_rx_sc_stats()
2771 ops = macsec_get_ops(macsec, &ctx); in get_rx_sc_stats()
2845 struct macsec_dev *macsec = macsec_priv(dev); in get_tx_sc_stats() local
2849 if (macsec_is_offloaded(macsec)) { in get_tx_sc_stats()
2853 ops = macsec_get_ops(macsec, &ctx); in get_tx_sc_stats()
2901 struct macsec_dev *macsec = macsec_priv(dev); in get_secy_stats() local
2905 if (macsec_is_offloaded(macsec)) { in get_secy_stats()
2909 ops = macsec_get_ops(macsec, &ctx); in get_secy_stats()
3029 struct macsec_dev *macsec = netdev_priv(dev); in dump_secy() local
3051 if (nla_put_u8(skb, MACSEC_OFFLOAD_ATTR_TYPE, macsec->offload)) in dump_secy()
3374 struct macsec_dev *macsec = netdev_priv(dev); in macsec_start_xmit() local
3375 struct macsec_secy *secy = &macsec->secy; in macsec_start_xmit()
3380 skb->dev = macsec->real_dev; in macsec_start_xmit()
3386 secy_stats = this_cpu_ptr(macsec->stats); in macsec_start_xmit()
3390 skb->dev = macsec->real_dev; in macsec_start_xmit()
3410 macsec_count_tx(skb, &macsec->secy.tx_sc, macsec_skb_cb(skb)->tx_sa); in macsec_start_xmit()
3431 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dev_init() local
3432 struct net_device *real_dev = macsec->real_dev; in macsec_dev_init()
3439 err = gro_cells_init(&macsec->gro_cells, dev); in macsec_dev_init()
3445 if (macsec_is_offloaded(macsec)) { in macsec_dev_init()
3467 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dev_uninit() local
3469 gro_cells_destroy(&macsec->gro_cells); in macsec_dev_uninit()
3476 struct macsec_dev *macsec = macsec_priv(dev); in macsec_fix_features() local
3477 struct net_device *real_dev = macsec->real_dev; in macsec_fix_features()
3479 if (macsec_is_offloaded(macsec)) in macsec_fix_features()
3491 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dev_open() local
3492 struct net_device *real_dev = macsec->real_dev; in macsec_dev_open()
3512 if (macsec_is_offloaded(macsec)) { in macsec_dev_open()
3522 ctx.secy = &macsec->secy; in macsec_dev_open()
3543 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dev_stop() local
3544 struct net_device *real_dev = macsec->real_dev; in macsec_dev_stop()
3549 if (macsec_is_offloaded(macsec)) { in macsec_dev_stop()
3553 ops = macsec_get_ops(macsec, &ctx); in macsec_dev_stop()
3555 ctx.secy = &macsec->secy; in macsec_dev_stop()
3599 struct macsec_dev *macsec = macsec_priv(dev); in macsec_set_mac_address() local
3600 struct net_device *real_dev = macsec->real_dev; in macsec_set_mac_address()
3618 macsec->secy.sci = dev_to_sci(dev, MACSEC_PORT_ES); in macsec_set_mac_address()
3621 if (macsec_is_offloaded(macsec)) { in macsec_set_mac_address()
3625 ops = macsec_get_ops(macsec, &ctx); in macsec_set_mac_address()
3627 ctx.secy = &macsec->secy; in macsec_set_mac_address()
3637 struct macsec_dev *macsec = macsec_priv(dev); in macsec_change_mtu() local
3638 unsigned int extra = macsec->secy.icv_len + macsec_extra_len(true); in macsec_change_mtu()
3640 if (macsec->real_dev->mtu - extra < new_mtu) in macsec_change_mtu()
3702 struct macsec_dev *macsec = macsec_priv(dev); in macsec_free_netdev() local
3704 free_percpu(macsec->stats); in macsec_free_netdev()
3705 free_percpu(macsec->secy.tx_sc.stats); in macsec_free_netdev()
3796 struct macsec_dev *macsec = macsec_priv(dev); in macsec_changelink() local
3813 memcpy(&secy, &macsec->secy, sizeof(secy)); in macsec_changelink()
3814 memcpy(&tx_sc, &macsec->secy.tx_sc, sizeof(tx_sc)); in macsec_changelink()
3821 if (macsec_is_offloaded(macsec)) { in macsec_changelink()
3832 ctx.secy = &macsec->secy; in macsec_changelink()
3841 memcpy(&macsec->secy.tx_sc, &tx_sc, sizeof(tx_sc)); in macsec_changelink()
3842 memcpy(&macsec->secy, &secy, sizeof(secy)); in macsec_changelink()
3847 static void macsec_del_dev(struct macsec_dev *macsec) in macsec_del_dev() argument
3851 while (macsec->secy.rx_sc) { in macsec_del_dev()
3852 struct macsec_rx_sc *rx_sc = rtnl_dereference(macsec->secy.rx_sc); in macsec_del_dev()
3854 rcu_assign_pointer(macsec->secy.rx_sc, rx_sc->next); in macsec_del_dev()
3859 struct macsec_tx_sa *sa = rtnl_dereference(macsec->secy.tx_sc.sa[i]); in macsec_del_dev()
3862 RCU_INIT_POINTER(macsec->secy.tx_sc.sa[i], NULL); in macsec_del_dev()
3870 struct macsec_dev *macsec = macsec_priv(dev); in macsec_common_dellink() local
3871 struct net_device *real_dev = macsec->real_dev; in macsec_common_dellink()
3874 list_del_rcu(&macsec->secys); in macsec_common_dellink()
3875 macsec_del_dev(macsec); in macsec_common_dellink()
3883 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dellink() local
3884 struct net_device *real_dev = macsec->real_dev; in macsec_dellink()
3888 if (macsec_is_offloaded(macsec)) { in macsec_dellink()
3894 ctx.secy = &macsec->secy; in macsec_dellink()
3910 struct macsec_dev *macsec = macsec_priv(dev); in register_macsec_dev() local
3930 list_add_tail_rcu(&macsec->secys, &rxd->secys); in register_macsec_dev()
3937 struct macsec_dev *macsec; in sci_exists() local
3939 list_for_each_entry(macsec, &rxd->secys, secys) { in sci_exists()
3940 if (macsec->secy.sci == sci) in sci_exists()
3949 struct macsec_dev *macsec = macsec_priv(dev); in macsec_add_dev() local
3950 struct macsec_secy *secy = &macsec->secy; in macsec_add_dev()
3952 macsec->stats = netdev_alloc_pcpu_stats(struct pcpu_secy_stats); in macsec_add_dev()
3953 if (!macsec->stats) in macsec_add_dev()
3958 free_percpu(macsec->stats); in macsec_add_dev()
3991 struct macsec_dev *macsec = macsec_priv(dev); in macsec_newlink() local
4008 macsec->real_dev = real_dev; in macsec_newlink()
4011 macsec->offload = nla_get_offload(data[IFLA_MACSEC_OFFLOAD]); in macsec_newlink()
4014 macsec->offload = MACSEC_OFFLOAD_OFF; in macsec_newlink()
4017 if (macsec->offload != MACSEC_OFFLOAD_OFF && in macsec_newlink()
4018 !macsec_check_offload(macsec->offload, macsec)) in macsec_newlink()
4071 if (macsec_is_offloaded(macsec)) { in macsec_newlink()
4075 ops = macsec_get_ops(macsec, &ctx); in macsec_newlink()
4077 ctx.secy = &macsec->secy; in macsec_newlink()
4096 macsec_del_dev(macsec); in macsec_newlink()