|
@@ -5346,6 +5346,12 @@ static int __netdev_upper_dev_link(struct net_device *dev,
|
|
|
changeupper_info.master = master;
|
|
|
changeupper_info.linking = true;
|
|
|
|
|
|
+ ret = call_netdevice_notifiers_info(NETDEV_PRECHANGEUPPER, dev,
|
|
|
+ &changeupper_info.info);
|
|
|
+ ret = notifier_to_errno(ret);
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+
|
|
|
ret = __netdev_adjacent_dev_link_neighbour(dev, upper_dev, private,
|
|
|
master);
|
|
|
if (ret)
|
|
@@ -5488,6 +5494,9 @@ void netdev_upper_dev_unlink(struct net_device *dev,
|
|
|
changeupper_info.master = netdev_master_upper_dev_get(dev) == upper_dev;
|
|
|
changeupper_info.linking = false;
|
|
|
|
|
|
+ call_netdevice_notifiers_info(NETDEV_PRECHANGEUPPER, dev,
|
|
|
+ &changeupper_info.info);
|
|
|
+
|
|
|
__netdev_adjacent_dev_unlink_neighbour(dev, upper_dev);
|
|
|
|
|
|
/* Here is the tricky part. We must remove all dev's lower
|