Thread (1 message) 1 message, 1 author, 2014-08-04

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.c
b/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_t
bond_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_t
bond_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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help