RE: [PATCH net/net-next] bonding:Don't received packets if bonding is not up
From: Lichunhe <hidden>
Date: 2014-08-04 08:07:25
Thanks for your reply. You mean that even the bonding device is down, it also should receive packets for refreshing slaves status by arp monitoring or 802.3ad protocol. But the bonding device is down, the status of slaves maybe is not useful, when it is up, it could check it quickly.
-----Original Message----- From: Veaceslav Falico [mailto:vfalico@gmail.com] Sent: Monday, August 04, 2014 2:13 PM To: Lichunhe Cc: j.vosburgh@gmail.com; andy@greyhouse.net; linux-kernel@vger.kernel.org; Dingtianhong; Qianhuibin (Huibin QIAN, Euler) Subject: Re: [PATCH net/net-next] bonding:Don't received packets if bonding is not up On Mon, Aug 04, 2014 at 11:15:13AM +0800, lichunhe@huawei.com wrote:quoted
From: Chunhe Li <redacted> If the bonding device is down, it should not receive packets to network stack or other upper flow stack.This breaks arp monitoring and 802.3ad modes, as they won't ever come up. Also, please cc netdev next times.quoted
Signed-off-by: Chunhe Li <redacted> --- drivers/net/bonding/bond_main.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)diff --git a/drivers/net/bonding/bond_main.cb/drivers/net/bonding/bond_main.c index 701f86c..48a127b 100644--- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c@@ -1110,6 +1110,12 @@ static rx_handler_result_tbond_handle_frame(struct sk_buff **pskb)quoted
int (*recv_probe)(const struct sk_buff *, struct bonding *, struct slave *); int ret = RX_HANDLER_ANOTHER; + + slave = bond_slave_get_rcu(skb->dev); + bond = slave->bond; + + if (unlikely(!(bond->dev->flags & IFF_UP))) + return RX_HANDLER_PASS; skb = skb_share_check(skb, GFP_ATOMIC); if (unlikely(!skb))@@ -1117,9 +1123,6 @@ static rx_handler_result_tbond_handle_frame(struct sk_buff **pskb) *pskb = skb; - slave = bond_slave_get_rcu(skb->dev); - bond = slave->bond; - recv_probe = ACCESS_ONCE(bond->recv_probe); if (recv_probe) { ret = recv_probe(skb, bond, slave); -- 1.9.2.0