aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiri Pirko <jiri@resnulli.us>2013-05-25 00:12:10 -0400
committerDavid S. Miller <davem@davemloft.net>2013-05-26 02:12:19 -0400
commit42e52bf9e3ae80fd44b21ddfcd64c54e6db2ff76 (patch)
tree4d395ed55ed5e36d0b54ea49329e797c06783f9f
parent8513fbd880093f00a47e85a552f14ca2de8d84d6 (diff)
net: add netnotifier event for upper device change
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>
-rw-r--r--include/linux/netdevice.h1
-rw-r--r--net/core/dev.c3
2 files changed, 3 insertions, 1 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 0ebd63ae2cc8..ea7b6bce9ea0 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -1593,6 +1593,7 @@ struct packet_offload {
1593#define NETDEV_RELEASE 0x0012 1593#define NETDEV_RELEASE 0x0012
1594#define NETDEV_NOTIFY_PEERS 0x0013 1594#define NETDEV_NOTIFY_PEERS 0x0013
1595#define NETDEV_JOIN 0x0014 1595#define NETDEV_JOIN 0x0014
1596#define NETDEV_CHANGEUPPER 0x0015
1596 1597
1597extern int register_netdevice_notifier(struct notifier_block *nb); 1598extern int register_netdevice_notifier(struct notifier_block *nb);
1598extern int unregister_netdevice_notifier(struct notifier_block *nb); 1599extern int unregister_netdevice_notifier(struct notifier_block *nb);
diff --git a/net/core/dev.c b/net/core/dev.c
index 7229bc30e509..50c02ded1d69 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -4411,7 +4411,7 @@ static int __netdev_upper_dev_link(struct net_device *dev,
4411 else 4411 else
4412 list_add_tail_rcu(&upper->list, &dev->upper_dev_list); 4412 list_add_tail_rcu(&upper->list, &dev->upper_dev_list);
4413 dev_hold(upper_dev); 4413 dev_hold(upper_dev);
4414 4414 call_netdevice_notifiers(NETDEV_CHANGEUPPER, dev);
4415 return 0; 4415 return 0;
4416} 4416}
4417 4417
@@ -4471,6 +4471,7 @@ void netdev_upper_dev_unlink(struct net_device *dev,
4471 list_del_rcu(&upper->list); 4471 list_del_rcu(&upper->list);
4472 dev_put(upper_dev); 4472 dev_put(upper_dev);
4473 kfree_rcu(upper, rcu); 4473 kfree_rcu(upper, rcu);
4474 call_netdevice_notifiers(NETDEV_CHANGEUPPER, dev);
4474} 4475}
4475EXPORT_SYMBOL(netdev_upper_dev_unlink); 4476EXPORT_SYMBOL(netdev_upper_dev_unlink);
4476 4477