Lines Matching defs:macsec

3  * drivers/net/macsec.c - MACsec device
20 #include <net/macsec.h>
343 static bool macsec_is_offloaded(struct macsec_dev *macsec)
345 if (macsec->offload == MACSEC_OFFLOAD_MAC ||
346 macsec->offload == MACSEC_OFFLOAD_PHY)
354 struct macsec_dev *macsec)
356 if (!macsec || !macsec->real_dev)
360 return macsec->real_dev->phydev &&
361 macsec->real_dev->phydev->macsec_ops;
363 return macsec->real_dev->features & NETIF_F_HW_MACSEC &&
364 macsec->real_dev->macsec_ops;
370 struct macsec_dev *macsec,
378 ctx->phydev = macsec->real_dev->phydev;
380 ctx->netdev = macsec->real_dev;
384 return macsec->real_dev->phydev->macsec_ops;
386 return macsec->real_dev->macsec_ops;
392 static const struct macsec_ops *macsec_get_ops(struct macsec_dev *macsec,
395 if (!macsec_check_offload(macsec->offload, macsec))
398 return __macsec_get_ops(macsec->offload, macsec, ctx);
506 struct macsec_dev *macsec = netdev_priv(dev);
508 skb->dev = macsec->real_dev;
515 struct macsec_dev *macsec = macsec_priv(skb->dev);
516 struct macsec_secy *secy = &macsec->secy;
557 struct macsec_dev *macsec = macsec_priv(dev);
564 macsec_count_tx(skb, &macsec->secy.tx_sc, macsec_skb_cb(skb)->tx_sa);
620 struct macsec_dev *macsec = macsec_priv(dev);
624 secy = &macsec->secy;
675 struct pcpu_secy_stats *secy_stats = this_cpu_ptr(macsec->stats);
864 struct macsec_dev *macsec = macsec_priv(dev);
877 if (!macsec_post_decrypt(skb, &macsec->secy, pn)) {
883 macsec_finalize_skb(skb, macsec->secy.icv_len,
886 macsec_reset_skb(skb, macsec->secy.netdev);
888 if (gro_cells_receive(&macsec->gro_cells, skb) == NET_RX_SUCCESS)
956 /* confidentiality: ethernet + macsec header
1030 struct macsec_dev *macsec;
1035 list_for_each_entry_rcu(macsec, &rxd->secys, secys) {
1037 struct pcpu_secy_stats *secy_stats = this_cpu_ptr(macsec->stats);
1038 struct net_device *ndev = macsec->secy.netdev;
1043 if (macsec_is_offloaded(macsec) && netif_running(ndev)) {
1074 if (macsec->secy.validate_frames == MACSEC_VALIDATE_STRICT) {
1078 DEV_STATS_INC(macsec->secy.netdev, rx_dropped);
1110 struct macsec_dev *macsec;
1164 list_for_each_entry_rcu(macsec, &rxd->secys, secys) {
1165 struct macsec_rx_sc *sc = find_rx_sc(&macsec->secy, sci);
1170 secy = &macsec->secy;
1180 macsec = macsec_priv(dev);
1181 secy_stats = this_cpu_ptr(macsec->stats);
1239 DEV_STATS_INC(macsec->secy.netdev, rx_dropped);
1276 ret = gro_cells_receive(&macsec->gro_cells, skb);
1280 DEV_STATS_INC(macsec->secy.netdev, rx_dropped);
1304 list_for_each_entry_rcu(macsec, &rxd->secys, secys) {
1307 secy_stats = this_cpu_ptr(macsec->stats);
1313 macsec->secy.validate_frames == MACSEC_VALIDATE_STRICT) {
1317 DEV_STATS_INC(macsec->secy.netdev, rx_errors);
1328 macsec_reset_skb(nskb, macsec->secy.netdev);
1336 DEV_STATS_INC(macsec->secy.netdev, rx_dropped);
1435 struct macsec_dev *macsec;
1440 list_for_each_entry(macsec, &rxd->secys, secys) {
1441 if (find_rx_sc_rtnl(&macsec->secy, sci))
1786 pr_notice("macsec: nl: add_rxsa: bad key length: %d != %d\n",
1795 pr_notice("macsec: nl: add_rxsa: bad pn length: %d != %d\n",
1808 pr_notice("macsec: nl: add_rxsa: bad salt length: %d != %d\n",
2030 pr_notice("macsec: nl: add_txsa: bad key length: %d != %d\n",
2038 pr_notice("macsec: nl: add_txsa: bad pn length: %d != %d\n",
2051 pr_notice("macsec: nl: add_txsa: bad salt length: %d != %d\n",
2384 pr_notice("macsec: nl: upd_txsa: bad pn length: %d != %d\n",
2482 pr_notice("macsec: nl: upd_rxsa: bad pn length: %d != %d\n",
2601 static bool macsec_is_configured(struct macsec_dev *macsec)
2603 struct macsec_secy *secy = &macsec->secy;
2626 struct macsec_dev *macsec;
2647 macsec = macsec_priv(dev);
2655 if (macsec->offload == offload)
2660 !macsec_check_offload(offload, macsec)) {
2671 prev_offload = macsec->offload;
2672 macsec->offload = offload;
2677 if (macsec_is_configured(macsec)) {
2683 macsec, &ctx);
2694 ctx.secy = &macsec->secy;
2703 macsec->offload = prev_offload;
2713 struct macsec_dev *macsec = macsec_priv(dev);
2717 if (macsec_is_offloaded(macsec)) {
2721 ops = macsec_get_ops(macsec, &ctx);
2757 struct macsec_dev *macsec = macsec_priv(dev);
2761 if (macsec_is_offloaded(macsec)) {
2765 ops = macsec_get_ops(macsec, &ctx);
2810 struct macsec_dev *macsec = macsec_priv(dev);
2814 if (macsec_is_offloaded(macsec)) {
2818 ops = macsec_get_ops(macsec, &ctx);
2892 struct macsec_dev *macsec = macsec_priv(dev);
2896 if (macsec_is_offloaded(macsec)) {
2900 ops = macsec_get_ops(macsec, &ctx);
2948 struct macsec_dev *macsec = macsec_priv(dev);
2952 if (macsec_is_offloaded(macsec)) {
2956 ops = macsec_get_ops(macsec, &ctx);
3076 struct macsec_dev *macsec = netdev_priv(dev);
3098 if (nla_put_u8(skb, MACSEC_OFFLOAD_ATTR_TYPE, macsec->offload))
3421 struct macsec_dev *macsec = netdev_priv(dev);
3422 struct macsec_secy *secy = &macsec->secy;
3427 skb->dev = macsec->real_dev;
3433 secy_stats = this_cpu_ptr(macsec->stats);
3437 skb->dev = macsec->real_dev;
3458 macsec_count_tx(skb, &macsec->secy.tx_sc, macsec_skb_cb(skb)->tx_sa);
3471 struct macsec_dev *macsec = macsec_priv(dev);
3472 struct net_device *real_dev = macsec->real_dev;
3479 err = gro_cells_init(&macsec->gro_cells, dev);
3503 struct macsec_dev *macsec = macsec_priv(dev);
3505 gro_cells_destroy(&macsec->gro_cells);
3512 struct macsec_dev *macsec = macsec_priv(dev);
3513 struct net_device *real_dev = macsec->real_dev;
3524 struct macsec_dev *macsec = macsec_priv(dev);
3525 struct net_device *real_dev = macsec->real_dev;
3545 if (macsec_is_offloaded(macsec)) {
3555 ctx.secy = &macsec->secy;
3576 struct macsec_dev *macsec = macsec_priv(dev);
3577 struct net_device *real_dev = macsec->real_dev;
3582 if (macsec_is_offloaded(macsec)) {
3586 ops = macsec_get_ops(macsec, &ctx);
3588 ctx.secy = &macsec->secy;
3632 struct macsec_dev *macsec = macsec_priv(dev);
3633 struct net_device *real_dev = macsec->real_dev;
3651 macsec->secy.sci = dev_to_sci(dev, MACSEC_PORT_ES);
3654 if (macsec_is_offloaded(macsec)) {
3658 ops = macsec_get_ops(macsec, &ctx);
3660 ctx.secy = &macsec->secy;
3670 struct macsec_dev *macsec = macsec_priv(dev);
3671 unsigned int extra = macsec->secy.icv_len + macsec_extra_len(true);
3673 if (macsec->real_dev->mtu - extra < new_mtu)
3715 .name = "macsec",
3737 struct macsec_dev *macsec = macsec_priv(dev);
3739 free_percpu(macsec->stats);
3740 free_percpu(macsec->secy.tx_sc.stats);
3838 struct macsec_dev *macsec = macsec_priv(dev);
3855 memcpy(&secy, &macsec->secy, sizeof(secy));
3856 memcpy(&tx_sc, &macsec->secy.tx_sc, sizeof(tx_sc));
3863 if (macsec_is_offloaded(macsec)) {
3873 ctx.secy = &macsec->secy;
3882 memcpy(&macsec->secy.tx_sc, &tx_sc, sizeof(tx_sc));
3883 memcpy(&macsec->secy, &secy, sizeof(secy));
3888 static void macsec_del_dev(struct macsec_dev *macsec)
3892 while (macsec->secy.rx_sc) {
3893 struct macsec_rx_sc *rx_sc = rtnl_dereference(macsec->secy.rx_sc);
3895 rcu_assign_pointer(macsec->secy.rx_sc, rx_sc->next);
3900 struct macsec_tx_sa *sa = rtnl_dereference(macsec->secy.tx_sc.sa[i]);
3903 RCU_INIT_POINTER(macsec->secy.tx_sc.sa[i], NULL);
3911 struct macsec_dev *macsec = macsec_priv(dev);
3912 struct net_device *real_dev = macsec->real_dev;
3915 if (macsec_is_offloaded(macsec)) {
3921 ctx.secy = &macsec->secy;
3927 list_del_rcu(&macsec->secys);
3928 macsec_del_dev(macsec);
3936 struct macsec_dev *macsec = macsec_priv(dev);
3937 struct net_device *real_dev = macsec->real_dev;
3951 struct macsec_dev *macsec = macsec_priv(dev);
3971 list_add_tail_rcu(&macsec->secys, &rxd->secys);
3978 struct macsec_dev *macsec;
3980 list_for_each_entry(macsec, &rxd->secys, secys) {
3981 if (macsec->secy.sci == sci)
3990 struct macsec_dev *macsec = macsec_priv(dev);
3991 struct macsec_secy *secy = &macsec->secy;
3993 macsec->stats = netdev_alloc_pcpu_stats(struct pcpu_secy_stats);
3994 if (!macsec->stats)
3999 free_percpu(macsec->stats);
4032 struct macsec_dev *macsec = macsec_priv(dev);
4049 macsec->real_dev = real_dev;
4052 macsec->offload = nla_get_offload(data[IFLA_MACSEC_OFFLOAD]);
4055 macsec->offload = MACSEC_OFFLOAD_OFF;
4058 if (macsec->offload != MACSEC_OFFLOAD_OFF &&
4059 !macsec_check_offload(macsec->offload, macsec))
4121 if (macsec_is_offloaded(macsec)) {
4125 ops = macsec_get_ops(macsec, &ctx);
4127 ctx.secy = &macsec->secy;
4146 macsec_del_dev(macsec);
4298 .kind = "macsec",
4416 MODULE_ALIAS_RTNL_LINK("macsec");
4417 MODULE_ALIAS_GENL_FAMILY("macsec");