Messages in this thread | | | From | Jay Vosburgh <> | Subject | Re: [PATCH net] bonding: emit event when bonding changes MAC | Date | Thu, 29 Mar 2012 10:19:44 -0700 |
| |
Weiping Pan <wpan@redhat.com> wrote:
>When a bonding device is configured with fail_over_mac=active, >we expect to see the MAC address of the new active slave as the source MAC >address after failover. But we see that the source MAC address is the MAC >address of previous active slave. > >Emit NETDEV_CHANGEADDR event when bonding changes its MAC address, in order >to let arp_netdev_event flush neighbour cache and route cache. > >How to reproduce this bug ? > > -----------hostB---------------- >hostA ----- switch ---|-- eth0--bond0(192.168.100.2/24)| >(192.168.100.1/24 \--|-- eth1-/ | > -------------------------------- > >1 on hostB, >modprobe bonding mode=1 miimon=500 fail_over_mac=active downdelay=1000 >num_grat_arp=1 >ifconfig bond0 192.168.100.2/24 up >ifenslave bond0 eth0 >ifenslave bond0 eth1 > >then eth0 is the active slave, and MAC of bond0 is MAC of eth0. > >2 on hostA, ping 192.168.100.2 > >3 on hostB, >tcpdump -i bond0 -p icmp -XXX >you will see bond0 uses MAC of eth0 as source MAC in icmp reply. > >4 on hostB, >ifconfig eth0 down >tcpdump -i bond0 -p icmp -XXX (just keep it running in step 3) >you will see first bond0 uses MAC of eth1 as source MAC in icmp >reply, then it will use MAC of eth0 as source MAC. > >Signed-off-by: Weiping Pan <wpan@redhat.com>
Signed-off-by: Jay Vosburgh <fubar@us.ibm.com>
>--- > drivers/net/bonding/bond_main.c | 8 +++++++- > 1 files changed, 7 insertions(+), 1 deletions(-) > >diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c >index b920d82..a20b585 100644 >--- a/drivers/net/bonding/bond_main.c >+++ b/drivers/net/bonding/bond_main.c >@@ -892,9 +892,15 @@ static void bond_do_fail_over_mac(struct bonding *bond, > > 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); >+ write_unlock_bh(&bond->curr_slave_lock); >+ read_unlock(&bond->lock); >+ call_netdevice_notifiers(NETDEV_CHANGEADDR, bond->dev); >+ read_lock(&bond->lock); >+ write_lock_bh(&bond->curr_slave_lock); >+ } > break; > case BOND_FOM_FOLLOW: > /* >-- >1.7.4 > >-- >To unsubscribe from this list: send the line "unsubscribe netdev" in >the body of a message to majordomo@vger.kernel.org >More majordomo info at http://vger.kernel.org/majordomo-info.html >
| |