diff options
Diffstat (limited to 'drivers/net/macsec.c')
-rw-r--r-- | drivers/net/macsec.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c index 4bb90b6867a2..64a982563d59 100644 --- a/drivers/net/macsec.c +++ b/drivers/net/macsec.c | |||
@@ -2812,9 +2812,6 @@ static int macsec_dev_open(struct net_device *dev) | |||
2812 | struct net_device *real_dev = macsec->real_dev; | 2812 | struct net_device *real_dev = macsec->real_dev; |
2813 | int err; | 2813 | int err; |
2814 | 2814 | ||
2815 | if (!(real_dev->flags & IFF_UP)) | ||
2816 | return -ENETDOWN; | ||
2817 | |||
2818 | err = dev_uc_add(real_dev, dev->dev_addr); | 2815 | err = dev_uc_add(real_dev, dev->dev_addr); |
2819 | if (err < 0) | 2816 | if (err < 0) |
2820 | return err; | 2817 | return err; |
@@ -3306,6 +3303,9 @@ static int macsec_newlink(struct net *net, struct net_device *dev, | |||
3306 | if (err < 0) | 3303 | if (err < 0) |
3307 | goto del_dev; | 3304 | goto del_dev; |
3308 | 3305 | ||
3306 | netif_stacked_transfer_operstate(real_dev, dev); | ||
3307 | linkwatch_fire_event(dev); | ||
3308 | |||
3309 | macsec_generation++; | 3309 | macsec_generation++; |
3310 | 3310 | ||
3311 | return 0; | 3311 | return 0; |
@@ -3490,6 +3490,20 @@ static int macsec_notify(struct notifier_block *this, unsigned long event, | |||
3490 | return NOTIFY_DONE; | 3490 | return NOTIFY_DONE; |
3491 | 3491 | ||
3492 | switch (event) { | 3492 | switch (event) { |
3493 | case NETDEV_DOWN: | ||
3494 | case NETDEV_UP: | ||
3495 | case NETDEV_CHANGE: { | ||
3496 | struct macsec_dev *m, *n; | ||
3497 | struct macsec_rxh_data *rxd; | ||
3498 | |||
3499 | rxd = macsec_data_rtnl(real_dev); | ||
3500 | list_for_each_entry_safe(m, n, &rxd->secys, secys) { | ||
3501 | struct net_device *dev = m->secy.netdev; | ||
3502 | |||
3503 | netif_stacked_transfer_operstate(real_dev, dev); | ||
3504 | } | ||
3505 | break; | ||
3506 | } | ||
3493 | case NETDEV_UNREGISTER: { | 3507 | case NETDEV_UNREGISTER: { |
3494 | struct macsec_dev *m, *n; | 3508 | struct macsec_dev *m, *n; |
3495 | struct macsec_rxh_data *rxd; | 3509 | struct macsec_rxh_data *rxd; |