Lines Matching refs:macsec
329 static bool macsec_is_offloaded(struct macsec_dev *macsec) in macsec_is_offloaded() argument
331 if (macsec->offload == MACSEC_OFFLOAD_MAC || in macsec_is_offloaded()
332 macsec->offload == MACSEC_OFFLOAD_PHY) in macsec_is_offloaded()
340 struct macsec_dev *macsec) in macsec_check_offload() argument
342 if (!macsec || !macsec->real_dev) in macsec_check_offload()
346 return macsec->real_dev->phydev && in macsec_check_offload()
347 macsec->real_dev->phydev->macsec_ops; in macsec_check_offload()
349 return macsec->real_dev->features & NETIF_F_HW_MACSEC && in macsec_check_offload()
350 macsec->real_dev->macsec_ops; in macsec_check_offload()
356 struct macsec_dev *macsec, in __macsec_get_ops() argument
364 ctx->phydev = macsec->real_dev->phydev; in __macsec_get_ops()
366 ctx->netdev = macsec->real_dev; in __macsec_get_ops()
370 return macsec->real_dev->phydev->macsec_ops; in __macsec_get_ops()
372 return macsec->real_dev->macsec_ops; in __macsec_get_ops()
378 static const struct macsec_ops *macsec_get_ops(struct macsec_dev *macsec, in macsec_get_ops() argument
381 if (!macsec_check_offload(macsec->offload, macsec)) in macsec_get_ops()
384 return __macsec_get_ops(macsec->offload, macsec, ctx); in macsec_get_ops()
492 struct macsec_dev *macsec = netdev_priv(dev); in macsec_encrypt_finish() local
494 skb->dev = macsec->real_dev; in macsec_encrypt_finish()
533 struct macsec_dev *macsec = macsec_priv(dev); in macsec_encrypt_done() local
541 macsec_count_tx(skb, &macsec->secy.tx_sc, macsec_skb_cb(skb)->tx_sa); in macsec_encrypt_done()
595 struct macsec_dev *macsec = macsec_priv(dev); in macsec_encrypt() local
599 secy = &macsec->secy; in macsec_encrypt()
650 struct pcpu_secy_stats *secy_stats = this_cpu_ptr(macsec->stats); in macsec_encrypt()
834 struct macsec_dev *macsec = macsec_priv(dev); in macsec_decrypt_done() local
847 if (!macsec_post_decrypt(skb, &macsec->secy, pn)) { in macsec_decrypt_done()
853 macsec_finalize_skb(skb, macsec->secy.icv_len, in macsec_decrypt_done()
855 macsec_reset_skb(skb, macsec->secy.netdev); in macsec_decrypt_done()
858 if (gro_cells_receive(&macsec->gro_cells, skb) == NET_RX_SUCCESS) in macsec_decrypt_done()
1000 struct macsec_dev *macsec; in handle_not_macsec() local
1005 list_for_each_entry_rcu(macsec, &rxd->secys, secys) { in handle_not_macsec()
1007 struct pcpu_secy_stats *secy_stats = this_cpu_ptr(macsec->stats); in handle_not_macsec()
1008 struct net_device *ndev = macsec->secy.netdev; in handle_not_macsec()
1013 if (macsec_is_offloaded(macsec) && netif_running(ndev)) { in handle_not_macsec()
1044 if (macsec->secy.validate_frames == MACSEC_VALIDATE_STRICT) { in handle_not_macsec()
1079 struct macsec_dev *macsec; in macsec_handle_frame() local
1133 list_for_each_entry_rcu(macsec, &rxd->secys, secys) { in macsec_handle_frame()
1134 struct macsec_rx_sc *sc = find_rx_sc(&macsec->secy, sci); in macsec_handle_frame()
1139 secy = &macsec->secy; in macsec_handle_frame()
1149 macsec = macsec_priv(dev); in macsec_handle_frame()
1150 secy_stats = this_cpu_ptr(macsec->stats); in macsec_handle_frame()
1237 ret = gro_cells_receive(&macsec->gro_cells, skb); in macsec_handle_frame()
1241 macsec->secy.netdev->stats.rx_dropped++; in macsec_handle_frame()
1265 list_for_each_entry_rcu(macsec, &rxd->secys, secys) { in macsec_handle_frame()
1268 secy_stats = this_cpu_ptr(macsec->stats); in macsec_handle_frame()
1274 macsec->secy.validate_frames == MACSEC_VALIDATE_STRICT) { in macsec_handle_frame()
1288 macsec_reset_skb(nskb, macsec->secy.netdev); in macsec_handle_frame()
1296 macsec->secy.netdev->stats.rx_dropped++; in macsec_handle_frame()
1395 struct macsec_dev *macsec; in create_rx_sc() local
1400 list_for_each_entry(macsec, &rxd->secys, secys) { in create_rx_sc()
1401 if (find_rx_sc_rtnl(&macsec->secy, sci)) in create_rx_sc()
2556 static bool macsec_is_configured(struct macsec_dev *macsec) in macsec_is_configured() argument
2558 struct macsec_secy *secy = &macsec->secy; in macsec_is_configured()
2581 struct macsec_dev *macsec; in macsec_upd_offload() local
2598 macsec = macsec_priv(dev); in macsec_upd_offload()
2604 if (macsec->offload == offload) in macsec_upd_offload()
2609 !macsec_check_offload(offload, macsec)) in macsec_upd_offload()
2618 prev_offload = macsec->offload; in macsec_upd_offload()
2619 macsec->offload = offload; in macsec_upd_offload()
2624 if (macsec_is_configured(macsec)) { in macsec_upd_offload()
2630 macsec, &ctx); in macsec_upd_offload()
2641 ctx.secy = &macsec->secy; in macsec_upd_offload()
2655 macsec->offload = prev_offload; in macsec_upd_offload()
2665 struct macsec_dev *macsec = macsec_priv(dev); in get_tx_sa_stats() local
2669 if (macsec_is_offloaded(macsec)) { in get_tx_sa_stats()
2673 ops = macsec_get_ops(macsec, &ctx); in get_tx_sa_stats()
2709 struct macsec_dev *macsec = macsec_priv(dev); in get_rx_sa_stats() local
2713 if (macsec_is_offloaded(macsec)) { in get_rx_sa_stats()
2717 ops = macsec_get_ops(macsec, &ctx); in get_rx_sa_stats()
2762 struct macsec_dev *macsec = macsec_priv(dev); in get_rx_sc_stats() local
2766 if (macsec_is_offloaded(macsec)) { in get_rx_sc_stats()
2770 ops = macsec_get_ops(macsec, &ctx); in get_rx_sc_stats()
2844 struct macsec_dev *macsec = macsec_priv(dev); in get_tx_sc_stats() local
2848 if (macsec_is_offloaded(macsec)) { in get_tx_sc_stats()
2852 ops = macsec_get_ops(macsec, &ctx); in get_tx_sc_stats()
2900 struct macsec_dev *macsec = macsec_priv(dev); in get_secy_stats() local
2904 if (macsec_is_offloaded(macsec)) { in get_secy_stats()
2908 ops = macsec_get_ops(macsec, &ctx); in get_secy_stats()
3028 struct macsec_dev *macsec = netdev_priv(dev); in dump_secy() local
3050 if (nla_put_u8(skb, MACSEC_OFFLOAD_ATTR_TYPE, macsec->offload)) in dump_secy()
3373 struct macsec_dev *macsec = netdev_priv(dev); in macsec_start_xmit() local
3374 struct macsec_secy *secy = &macsec->secy; in macsec_start_xmit()
3379 skb->dev = macsec->real_dev; in macsec_start_xmit()
3385 secy_stats = this_cpu_ptr(macsec->stats); in macsec_start_xmit()
3389 skb->dev = macsec->real_dev; in macsec_start_xmit()
3409 macsec_count_tx(skb, &macsec->secy.tx_sc, macsec_skb_cb(skb)->tx_sa); in macsec_start_xmit()
3430 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dev_init() local
3431 struct net_device *real_dev = macsec->real_dev; in macsec_dev_init()
3438 err = gro_cells_init(&macsec->gro_cells, dev); in macsec_dev_init()
3444 if (macsec_is_offloaded(macsec)) { in macsec_dev_init()
3466 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dev_uninit() local
3468 gro_cells_destroy(&macsec->gro_cells); in macsec_dev_uninit()
3475 struct macsec_dev *macsec = macsec_priv(dev); in macsec_fix_features() local
3476 struct net_device *real_dev = macsec->real_dev; in macsec_fix_features()
3478 if (macsec_is_offloaded(macsec)) in macsec_fix_features()
3490 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dev_open() local
3491 struct net_device *real_dev = macsec->real_dev; in macsec_dev_open()
3511 if (macsec_is_offloaded(macsec)) { in macsec_dev_open()
3521 ctx.secy = &macsec->secy; in macsec_dev_open()
3542 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dev_stop() local
3543 struct net_device *real_dev = macsec->real_dev; in macsec_dev_stop()
3548 if (macsec_is_offloaded(macsec)) { in macsec_dev_stop()
3552 ops = macsec_get_ops(macsec, &ctx); in macsec_dev_stop()
3554 ctx.secy = &macsec->secy; in macsec_dev_stop()
3598 struct macsec_dev *macsec = macsec_priv(dev); in macsec_set_mac_address() local
3599 struct net_device *real_dev = macsec->real_dev; in macsec_set_mac_address()
3617 macsec->secy.sci = dev_to_sci(dev, MACSEC_PORT_ES); in macsec_set_mac_address()
3620 if (macsec_is_offloaded(macsec)) { in macsec_set_mac_address()
3624 ops = macsec_get_ops(macsec, &ctx); in macsec_set_mac_address()
3626 ctx.secy = &macsec->secy; in macsec_set_mac_address()
3636 struct macsec_dev *macsec = macsec_priv(dev); in macsec_change_mtu() local
3637 unsigned int extra = macsec->secy.icv_len + macsec_extra_len(true); in macsec_change_mtu()
3639 if (macsec->real_dev->mtu - extra < new_mtu) in macsec_change_mtu()
3701 struct macsec_dev *macsec = macsec_priv(dev); in macsec_free_netdev() local
3703 free_percpu(macsec->stats); in macsec_free_netdev()
3704 free_percpu(macsec->secy.tx_sc.stats); in macsec_free_netdev()
3795 struct macsec_dev *macsec = macsec_priv(dev); in macsec_changelink() local
3812 memcpy(&secy, &macsec->secy, sizeof(secy)); in macsec_changelink()
3813 memcpy(&tx_sc, &macsec->secy.tx_sc, sizeof(tx_sc)); in macsec_changelink()
3820 if (macsec_is_offloaded(macsec)) { in macsec_changelink()
3831 ctx.secy = &macsec->secy; in macsec_changelink()
3840 memcpy(&macsec->secy.tx_sc, &tx_sc, sizeof(tx_sc)); in macsec_changelink()
3841 memcpy(&macsec->secy, &secy, sizeof(secy)); in macsec_changelink()
3846 static void macsec_del_dev(struct macsec_dev *macsec) in macsec_del_dev() argument
3850 while (macsec->secy.rx_sc) { in macsec_del_dev()
3851 struct macsec_rx_sc *rx_sc = rtnl_dereference(macsec->secy.rx_sc); in macsec_del_dev()
3853 rcu_assign_pointer(macsec->secy.rx_sc, rx_sc->next); in macsec_del_dev()
3858 struct macsec_tx_sa *sa = rtnl_dereference(macsec->secy.tx_sc.sa[i]); in macsec_del_dev()
3861 RCU_INIT_POINTER(macsec->secy.tx_sc.sa[i], NULL); in macsec_del_dev()
3869 struct macsec_dev *macsec = macsec_priv(dev); in macsec_common_dellink() local
3870 struct net_device *real_dev = macsec->real_dev; in macsec_common_dellink()
3873 list_del_rcu(&macsec->secys); in macsec_common_dellink()
3874 macsec_del_dev(macsec); in macsec_common_dellink()
3882 struct macsec_dev *macsec = macsec_priv(dev); in macsec_dellink() local
3883 struct net_device *real_dev = macsec->real_dev; in macsec_dellink()
3887 if (macsec_is_offloaded(macsec)) { in macsec_dellink()
3893 ctx.secy = &macsec->secy; in macsec_dellink()
3909 struct macsec_dev *macsec = macsec_priv(dev); in register_macsec_dev() local
3929 list_add_tail_rcu(&macsec->secys, &rxd->secys); in register_macsec_dev()
3936 struct macsec_dev *macsec; in sci_exists() local
3938 list_for_each_entry(macsec, &rxd->secys, secys) { in sci_exists()
3939 if (macsec->secy.sci == sci) in sci_exists()
3948 struct macsec_dev *macsec = macsec_priv(dev); in macsec_add_dev() local
3949 struct macsec_secy *secy = &macsec->secy; in macsec_add_dev()
3951 macsec->stats = netdev_alloc_pcpu_stats(struct pcpu_secy_stats); in macsec_add_dev()
3952 if (!macsec->stats) in macsec_add_dev()
3957 free_percpu(macsec->stats); in macsec_add_dev()
3990 struct macsec_dev *macsec = macsec_priv(dev); in macsec_newlink() local
4007 macsec->real_dev = real_dev; in macsec_newlink()
4010 macsec->offload = nla_get_offload(data[IFLA_MACSEC_OFFLOAD]); in macsec_newlink()
4013 macsec->offload = MACSEC_OFFLOAD_OFF; in macsec_newlink()
4016 if (macsec->offload != MACSEC_OFFLOAD_OFF && in macsec_newlink()
4017 !macsec_check_offload(macsec->offload, macsec)) in macsec_newlink()
4070 if (macsec_is_offloaded(macsec)) { in macsec_newlink()
4074 ops = macsec_get_ops(macsec, &ctx); in macsec_newlink()
4076 ctx.secy = &macsec->secy; in macsec_newlink()
4095 macsec_del_dev(macsec); in macsec_newlink()