• Weiping Pan's avatar
    bonding: emit event when bonding changes MAC · 7d26bb10
    Weiping Pan authored
    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: default avatarWeiping Pan <wpan@redhat.com>
    Signed-off-by: default avatarJay Vosburgh <fubar@us.ibm.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    7d26bb10
bond_main.c 129 KB