net: add netnotifier event for upper device change
authorJiri Pirko <jiri@resnulli.us>
Sat, 25 May 2013 04:12:10 +0000 (04:12 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sun, 26 May 2013 06:12:19 +0000 (23:12 -0700)
Now when upper device is changed, event is not propagated via RT Netlink
to userspace. Userspace might never now about the change. Fix this by
adding upper-device-change notifier event.

Signed-off-by: Jiri Pirko <jiri@resnulli.us>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/netdevice.h
net/core/dev.c

index 0ebd63ae2cc825e487b55a8fb7ae23e0dab1b864..ea7b6bce9ea07f345b302a2fe466963c88762e50 100644 (file)
@@ -1593,6 +1593,7 @@ struct packet_offload {
 #define NETDEV_RELEASE         0x0012
 #define NETDEV_NOTIFY_PEERS    0x0013
 #define NETDEV_JOIN            0x0014
+#define NETDEV_CHANGEUPPER     0x0015
 
 extern int register_netdevice_notifier(struct notifier_block *nb);
 extern int unregister_netdevice_notifier(struct notifier_block *nb);
index 7229bc30e509d309d1dd5f1be055c95212eaeb69..50c02ded1d69dad8d4ce4f9bd64b4eccef0d416f 100644 (file)
@@ -4411,7 +4411,7 @@ static int __netdev_upper_dev_link(struct net_device *dev,
        else
                list_add_tail_rcu(&upper->list, &dev->upper_dev_list);
        dev_hold(upper_dev);
-
+       call_netdevice_notifiers(NETDEV_CHANGEUPPER, dev);
        return 0;
 }
 
@@ -4471,6 +4471,7 @@ void netdev_upper_dev_unlink(struct net_device *dev,
        list_del_rcu(&upper->list);
        dev_put(upper_dev);
        kfree_rcu(upper, rcu);
+       call_netdevice_notifiers(NETDEV_CHANGEUPPER, dev);
 }
 EXPORT_SYMBOL(netdev_upper_dev_unlink);