aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/macsec.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/macsec.c')
-rw-r--r--drivers/net/macsec.c20
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;