]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
net: add possibility to pass information about upper device via notifier
authorJiri Pirko <jiri@mellanox.com>
Thu, 3 Dec 2015 11:12:11 +0000 (12:12 +0100)
committerBrian Maly <brian.maly@oracle.com>
Tue, 20 Nov 2018 22:11:16 +0000 (17:11 -0500)
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>
(cherry picked from commit 29bf24afb29042f568fa67b1b0eee46796725ed2)
Orabug: 28122104
Signed-off-by: Vijay Balakrishna <vijay.balakrishna@oracle.com>
Reviewed-by: Si-Wei Liu <si-wei.liu@oracle.com>
Reviewed-by: Shannon Nelson <shannon.nelson@oracle.com>
Signed-off-by: Brian Maly <brian.maly@oracle.com>
Conflicts:
drivers/net/bonding/bond_main.c
drivers/net/team/team.c
drivers/net/vrf.c
(vrf.c - file not present in uek4)
include/linux/netdevice.h
net/batman-adv/hard-interface.c
net/bridge/br_if.c
net/core/dev.c
net/openvswitch/vport-netdev.c
(conflicts are related to #of arguments to netdev_master_upper_dev_link(),
which is retained to maintain kABI.  To allow upper-code to pass
information down to notifier during linking we have modified
number of arguments to netdev_master_upper_dev_link_private())

Signed-off-by: Brian Maly <brian.maly@oracle.com>
drivers/net/bonding/bond_main.c
include/linux/netdevice.h
net/core/dev.c

index 3ddeb3c102971a85f967a5aa3fed00c081b1bdc8..930e1603bb3440b4009ce48df0818148291da46e 100644 (file)
@@ -1217,7 +1217,8 @@ static int bond_master_upper_dev_link(struct net_device *bond_dev,
 {
        int err;
 
-       err = netdev_master_upper_dev_link_private(slave_dev, bond_dev, slave);
+       err = netdev_master_upper_dev_link_private(slave_dev, bond_dev, slave,
+                                                  NULL);
        if (err)
                return err;
        slave_dev->flags |= IFF_SLAVE;
index 63f38d13a7e56c5db9a115c35334a8ec402668fc..a3f88e8ea0c5aac1c49b12ed2bca74f366420eb5 100644 (file)
@@ -2117,6 +2117,7 @@ struct netdev_notifier_changeupper_info {
        struct net_device *upper_dev; /* new upper dev */
        bool master; /* is upper dev master */
        bool linking; /* is the nofication for link or unlink */
+       void *upper_info; /* upper dev info */
 };
 
 static inline void netdev_notifier_info_init(struct netdev_notifier_info *info,
@@ -3609,7 +3610,7 @@ int netdev_master_upper_dev_link(struct net_device *dev,
                                 struct net_device *upper_dev);
 int netdev_master_upper_dev_link_private(struct net_device *dev,
                                         struct net_device *upper_dev,
-                                        void *private);
+                                        void *upper_priv, void *upper_info);
 void netdev_upper_dev_unlink(struct net_device *dev,
                             struct net_device *upper_dev);
 void netdev_adjacent_rename_links(struct net_device *dev, char *oldname);
index 74e259c88b773e9b8f2b8fe2d330f9b59b1b1685..e7111c4b4f8d1c198d9b60d7e9a9d9e14d658575 100644 (file)
@@ -5252,7 +5252,7 @@ static void __netdev_adjacent_dev_unlink_neighbour(struct net_device *dev,
 
 static int __netdev_upper_dev_link(struct net_device *dev,
                                   struct net_device *upper_dev, bool master,
-                                  void *private)
+                                  void *upper_priv, void *upper_info)
 {
        struct netdev_notifier_changeupper_info changeupper_info;
        struct netdev_adjacent *i, *j, *to_i, *to_j;
@@ -5276,8 +5276,9 @@ static int __netdev_upper_dev_link(struct net_device *dev,
        changeupper_info.upper_dev = upper_dev;
        changeupper_info.master = master;
        changeupper_info.linking = true;
+       changeupper_info.upper_info = upper_info;
 
-       ret = __netdev_adjacent_dev_link_neighbour(dev, upper_dev, private,
+       ret = __netdev_adjacent_dev_link_neighbour(dev, upper_dev, upper_priv,
                                                   master);
        if (ret)
                return ret;
@@ -5374,7 +5375,7 @@ rollback_mesh:
 int netdev_upper_dev_link(struct net_device *dev,
                          struct net_device *upper_dev)
 {
-       return __netdev_upper_dev_link(dev, upper_dev, false, NULL);
+       return __netdev_upper_dev_link(dev, upper_dev, false, NULL, NULL);
 }
 EXPORT_SYMBOL(netdev_upper_dev_link);
 
@@ -5392,15 +5393,23 @@ EXPORT_SYMBOL(netdev_upper_dev_link);
 int netdev_master_upper_dev_link(struct net_device *dev,
                                 struct net_device *upper_dev)
 {
-       return __netdev_upper_dev_link(dev, upper_dev, true, NULL);
+       return __netdev_upper_dev_link(dev, upper_dev, true, NULL, NULL);
 }
 EXPORT_SYMBOL(netdev_master_upper_dev_link);
 
+/**
+ * netdev_master_upper_dev_link_private - Add a master link to the upper device
+ * @dev: device
+ * @upper_dev: new upper device
+ * @upper_priv: upper device private
+ * @upper_info: upper info to be passed down via notifier
+ */
 int netdev_master_upper_dev_link_private(struct net_device *dev,
                                         struct net_device *upper_dev,
-                                        void *private)
+                                        void *upper_priv, void *upper_info)
 {
-       return __netdev_upper_dev_link(dev, upper_dev, true, private);
+       return __netdev_upper_dev_link(dev, upper_dev, true, upper_priv,
+                                      upper_info);
 }
 EXPORT_SYMBOL(netdev_master_upper_dev_link_private);