From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jay Vosburgh Subject: Re: [PATCH] bonding: Inactive slaves should keep inactive flag's value to 1. Date: Thu, 20 Mar 2014 10:02:33 -0700 Message-ID: <3119.1395334953@death.nxdomain> References: <1395305504-29973-1-git-send-email-zheng.x.li@oracle.com> Cc: netdev@vger.kernel.org, andy@greyhouse.net, linux-kernel@vger.kernel.org, davem@davemloft.net, joe.jin@oracle.com To: Zheng Li Return-path: In-reply-to: <1395305504-29973-1-git-send-email-zheng.x.li@oracle.com> Sender: linux-kernel-owner@vger.kernel.org List-Id: netdev.vger.kernel.org Zheng Li wrote: >Except bond mode 1, in other bond modes, inactive slaves should keep >inactive flag to 1 to refuse to receive broadcast packets. Now, active >slave send broadcast packets (for example ARP requests) which will >arrive inactive slaves on same host from switch, but inactive slave's >inactive flag is zero that cause bridge receive the broadcast packets >to produce a wrong entry in forward table. Typical situation is domu >send some ARP request which go out from dom0 bond's active slave, then >the ARP broadcast request packets go back to inactive slave from >switch, because the inactive slave's inactive flag is zero, kernel will >receive the packets and pass them to bridge, that cause dom0's bridge >map domu's MAC address to port of bond, bridge should map domu's MAC to >port of vif. I suspect this will break LACP (802.3ad) and Etherchannel (balance-xor, balance-rr) modes, as those modes can receive broadcast or multicast on any slave. In those cases, the switch knows about the aggregation, and will only send the broadcast / multicast to one of the ports, but the port selected is not always the same one. In which mode are you having trouble? -J > >Signed-off-by: Zheng Li >--- > drivers/net/bonding/bond_main.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > >diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c >index e5628fc..2f73f18 100644 >--- a/drivers/net/bonding/bond_main.c >+++ b/drivers/net/bonding/bond_main.c >@@ -3063,7 +3063,7 @@ static int bond_open(struct net_device *bond_dev) > bond_set_slave_inactive_flags(slave, > BOND_SLAVE_NOTIFY_NOW); > } else { >- bond_set_slave_active_flags(slave, >+ bond_set_slave_state(slave, BOND_STATE_ACTIVE, > BOND_SLAVE_NOTIFY_NOW); > } > } >-- >1.7.6.5 > --- -Jay Vosburgh, IBM Linux Technology Center, fubar@us.ibm.com