[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20110415121054.73717900@nehalam>
Date: Fri, 15 Apr 2011 12:10:54 -0700
From: Stephen Hemminger <shemminger@...tta.com>
To: Jay Vosburgh <fubar@...ibm.com>
Cc: Nicolas de Pesloüan
<nicolas.2p.debian@...il.com>,
Michał Górny <mgorny@...too.org>,
netdev@...r.kernel.org, roy@...ples.name,
Andy Gospodarek <andy@...yhouse.net>
Subject: [RFC net-next] bonding: notify when bonding device address changes
When a device changes its hardware address, it needs to call the network
device notifiers to inform protocols.
Compile tested only.
Signed-off-by: Stephen Hemminger <shemminger@...tta.com>
--- a/drivers/net/bonding/bond_main.c 2011-04-15 11:21:02.142866195 -0700
+++ b/drivers/net/bonding/bond_main.c 2011-04-15 11:28:06.491408825 -0700
@@ -967,9 +967,11 @@ static void bond_do_fail_over_mac(struct
switch (bond->params.fail_over_mac) {
case BOND_FOM_ACTIVE:
- if (new_active)
+ if (new_active) {
memcpy(bond->dev->dev_addr, new_active->dev->dev_addr,
new_active->dev->addr_len);
+ call_netdevice_notifiers(NETDEV_CHANGEADDR, bond->dev);
+ }
break;
case BOND_FOM_FOLLOW:
/*
@@ -1386,6 +1388,7 @@ static int bond_sethwaddr(struct net_dev
pr_debug("slave_dev=%p\n", slave_dev);
pr_debug("slave_dev->addr_len=%d\n", slave_dev->addr_len);
memcpy(bond_dev->dev_addr, slave_dev->dev_addr, slave_dev->addr_len);
+ call_netdevice_notifiers(NETDEV_CHANGEADDR, bond_dev);
return 0;
}
@@ -1644,10 +1647,11 @@ int bond_enslave(struct net_device *bond
/* If this is the first slave, then we need to set the master's hardware
* address to be the same as the slave's. */
- if (is_zero_ether_addr(bond->dev->dev_addr))
+ if (is_zero_ether_addr(bond->dev->dev_addr)) {
memcpy(bond->dev->dev_addr, slave_dev->dev_addr,
slave_dev->addr_len);
-
+ call_netdevice_notifiers(NETDEV_CHANGEADDR, bond->dev);
+ }
new_slave = kzalloc(sizeof(struct slave), GFP_KERNEL);
if (!new_slave) {
@@ -2067,6 +2071,7 @@ int bond_release(struct net_device *bond
* to the mac address of the first slave
*/
memset(bond_dev->dev_addr, 0, bond_dev->addr_len);
+ call_netdevice_notifiers(NETDEV_CHANGEADDR, bond_dev);
if (!bond->vlgrp) {
bond_dev->features |= NETIF_F_VLAN_CHALLENGED;
@@ -2252,6 +2257,7 @@ static int bond_release_all(struct net_d
* first slave
*/
memset(bond_dev->dev_addr, 0, bond_dev->addr_len);
+ call_netdevice_notifiers(NETDEV_CHANGEADDR, bond_dev);
if (!bond->vlgrp) {
bond_dev->features |= NETIF_F_VLAN_CHALLENGED;
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists