We create bond0 and add eth0ð1 as slaves. Eth0 is active. Then we add bond0 into br0 as a bridge port. Br0 has ip address. When eth0 is down, after bond0's failover eth1 become active. At this moment, we need br0 send a gratuitous ARP to notify peer to update ARP table.
Signed-off-by: Xing.Qingjie <[email protected]> --- net/bridge/br_notify.c | 12 ++++++++++++ 1 files changed, 12 insertions(+), 0 deletions(-) diff --git a/net/bridge/br_notify.c b/net/bridge/br_notify.c index a76b621..90cf123 100644 --- a/net/bridge/br_notify.c +++ b/net/bridge/br_notify.c @@ -34,6 +34,7 @@ static int br_device_event(struct notifier_block *unused, unsigned long event, v struct net_device *dev = ptr; struct net_bridge_port *p; struct net_bridge *br; + struct in_device *in_dev; bool changed_addr; int err; @@ -102,6 +103,17 @@ static int br_device_event(struct notifier_block *unused, unsigned long event, v case NETDEV_PRE_TYPE_CHANGE: /* Forbid underlaying device to change its type. */ return NOTIFY_BAD; + + case NETDEV_NOTIFY_PEERS: + /* Send gratuitous arp while bond,a port of bridge, changes */ + if (dev->priv_flags & IFF_BONDING && dev->flags & IFF_MASTER) { + in_dev = __in_dev_get_rtnl(br->dev); + + ASSERT_RTNL(); + if (in_dev) + inetdev_send_gratuitous_arp(br->dev, in_dev); + } + break; } /* Events that may cause spanning tree to refresh */ -- 1.7.1
0001-bridge-should-send-gratuitous-ARP-to-notify-peer-whi.patch
Description: Binary data
