From: Flavio Leitner <fbl@redhat.com> Date: Tue, 10 Aug 2010 14:11:56 -0400 Subject: [net] bonding: check if clients MAC addr has changed Message-id: <20100810141156.GB3064@redhat.com> Patchwork-id: 27487 O-Subject: [RHEL5.6 PATCH] bonding: check if clients MAC addr has changed Bugzilla: 610234 RH-Acked-by: Jiri Pirko <jpirko@redhat.com> RH-Acked-by: David S. Miller <davem@redhat.com> RH-Acked-by: Amerigo Wang <amwang@redhat.com> RHBZ#: 610234 ======= https://bugzilla.redhat.com/show_bug.cgi?id=610234 Description: ============= When two systems using bonding devices in adaptive load balancing (ALB) communicates with each other, an endless ping-pong of ARP replies starts between these two systems. Upstream: ========== The fix is accepted upstream: 42d782ac1bef7cbcdf05b857731345c6e8149f90 Test Build at: =============== https://brewweb.devel.redhat.com/taskinfo?taskID=2667289 Testing Status: =============== Tested by myself and by customer. Proposed Patch: ================ It's a backport of upstream commit mentioned above. Signed-off-by: Flavio Leitner <fbl@redhat.com> Signed-off-by: Jarod Wilson <jarod@redhat.com> diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c index a8f106d..ea2e771 100644 --- a/drivers/net/bonding/bond_alb.c +++ b/drivers/net/bonding/bond_alb.c @@ -332,7 +332,8 @@ static void rlb_update_entry_from_arp(struct bonding *bond, struct arp_pkt *arp) if ((client_info->assigned) && (client_info->ip_src == arp->ip_dst) && - (client_info->ip_dst == arp->ip_src)) { + (client_info->ip_dst == arp->ip_src) && + (memcmp(client_info->mac_dst, arp->mac_src, ETH_ALEN))) { /* update the clients MAC address */ memcpy(client_info->mac_dst, arp->mac_src, ETH_ALEN); client_info->ntt = 1;