net: bonding: Issue NETDEV_PRE_CHANGEADDR
authorPetr Machata <petrm@mellanox.com>
Thu, 13 Dec 2018 11:54:46 +0000 (11:54 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 14 Dec 2018 02:41:39 +0000 (18:41 -0800)
Give interested parties an opportunity to veto an impending HW address
change.

Signed-off-by: Petr Machata <petrm@mellanox.com>
Acked-by: Jiri Pirko <jiri@mellanox.com>
Reviewed-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/bonding/bond_main.c

index 66d9a6c7b9c5adfb32e12493e0145c4ff26bffe2..a9d597f28023f874fa69102e4d2f8adb173214a7 100644 (file)
@@ -612,8 +612,14 @@ static void bond_hw_addr_swap(struct bonding *bond, struct slave *new_active,
 static int bond_set_dev_addr(struct net_device *bond_dev,
                             struct net_device *slave_dev)
 {
+       int err;
+
        netdev_dbg(bond_dev, "bond_dev=%p slave_dev=%p slave_dev->name=%s slave_dev->addr_len=%d\n",
                   bond_dev, slave_dev, slave_dev->name, slave_dev->addr_len);
+       err = dev_pre_changeaddr_notify(bond_dev, slave_dev->dev_addr, NULL);
+       if (err)
+               return err;
+
        memcpy(bond_dev->dev_addr, slave_dev->dev_addr, slave_dev->addr_len);
        bond_dev->addr_assign_type = NET_ADDR_STOLEN;
        call_netdevice_notifiers(NETDEV_CHANGEADDR, bond_dev);