aboutsummaryrefslogtreecommitdiffstats
path: root/net/core
diff options
context:
space:
mode:
authorJiri Pirko <jiri@mellanox.com>2015-12-03 06:12:11 -0500
committerDavid S. Miller <davem@davemloft.net>2015-12-03 11:49:25 -0500
commit29bf24afb29042f568fa67b1b0eee46796725ed2 (patch)
tree865e593be107511f4032b41c09fd252e317cd540 /net/core
parent6dffb0447c25476f499d205dfceb1972e8dae919 (diff)
net: add possibility to pass information about upper device via notifier
Sometimes the drivers and other code would find it handy to know some internal information about upper device being changed. So allow upper-code to pass information down to notifier listeners during linking. Signed-off-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
-rw-r--r--net/core/dev.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index 27d052bb78bc..8ed886663c6d 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -5421,7 +5421,7 @@ static void __netdev_adjacent_dev_unlink_neighbour(struct net_device *dev,
5421 5421
5422static int __netdev_upper_dev_link(struct net_device *dev, 5422static int __netdev_upper_dev_link(struct net_device *dev,
5423 struct net_device *upper_dev, bool master, 5423 struct net_device *upper_dev, bool master,
5424 void *upper_priv) 5424 void *upper_priv, void *upper_info)
5425{ 5425{
5426 struct netdev_notifier_changeupper_info changeupper_info; 5426 struct netdev_notifier_changeupper_info changeupper_info;
5427 struct netdev_adjacent *i, *j, *to_i, *to_j; 5427 struct netdev_adjacent *i, *j, *to_i, *to_j;
@@ -5445,6 +5445,7 @@ static int __netdev_upper_dev_link(struct net_device *dev,
5445 changeupper_info.upper_dev = upper_dev; 5445 changeupper_info.upper_dev = upper_dev;
5446 changeupper_info.master = master; 5446 changeupper_info.master = master;
5447 changeupper_info.linking = true; 5447 changeupper_info.linking = true;
5448 changeupper_info.upper_info = upper_info;
5448 5449
5449 ret = call_netdevice_notifiers_info(NETDEV_PRECHANGEUPPER, dev, 5450 ret = call_netdevice_notifiers_info(NETDEV_PRECHANGEUPPER, dev,
5450 &changeupper_info.info); 5451 &changeupper_info.info);
@@ -5549,7 +5550,7 @@ rollback_mesh:
5549int netdev_upper_dev_link(struct net_device *dev, 5550int netdev_upper_dev_link(struct net_device *dev,
5550 struct net_device *upper_dev) 5551 struct net_device *upper_dev)
5551{ 5552{
5552 return __netdev_upper_dev_link(dev, upper_dev, false, NULL); 5553 return __netdev_upper_dev_link(dev, upper_dev, false, NULL, NULL);
5553} 5554}
5554EXPORT_SYMBOL(netdev_upper_dev_link); 5555EXPORT_SYMBOL(netdev_upper_dev_link);
5555 5556
@@ -5558,6 +5559,7 @@ EXPORT_SYMBOL(netdev_upper_dev_link);
5558 * @dev: device 5559 * @dev: device
5559 * @upper_dev: new upper device 5560 * @upper_dev: new upper device
5560 * @upper_priv: upper device private 5561 * @upper_priv: upper device private
5562 * @upper_info: upper info to be passed down via notifier
5561 * 5563 *
5562 * Adds a link to device which is upper to this one. In this case, only 5564 * Adds a link to device which is upper to this one. In this case, only
5563 * one master upper device can be linked, although other non-master devices 5565 * one master upper device can be linked, although other non-master devices
@@ -5567,9 +5569,10 @@ EXPORT_SYMBOL(netdev_upper_dev_link);
5567 */ 5569 */
5568int netdev_master_upper_dev_link(struct net_device *dev, 5570int netdev_master_upper_dev_link(struct net_device *dev,
5569 struct net_device *upper_dev, 5571 struct net_device *upper_dev,
5570 void *upper_priv) 5572 void *upper_priv, void *upper_info)
5571{ 5573{
5572 return __netdev_upper_dev_link(dev, upper_dev, true, upper_priv); 5574 return __netdev_upper_dev_link(dev, upper_dev, true,
5575 upper_priv, upper_info);
5573} 5576}
5574EXPORT_SYMBOL(netdev_master_upper_dev_link); 5577EXPORT_SYMBOL(netdev_master_upper_dev_link);
5575 5578