42 lines
1.6 KiB
Diff
42 lines
1.6 KiB
Diff
From a9cbca743083ace5232e9df90119b4defa7df6e5 Mon Sep 17 00:00:00 2001
|
|
From: Yicai Lu <luyicai@huawei.com>
|
|
Date: Fri, 10 Jul 2020 11:29:35 +0800
|
|
Subject: net/bonding: fix LACP negotiation
|
|
|
|
When two host is connected directly without any devices like switch,
|
|
rx_machine_update would receiving partner LACP negotiation packets,
|
|
and partner's port mac is filled with zeros in this packet, which is
|
|
different with internal's mode4 mac. So in this situation, it would
|
|
never go rx_machine branch and then execute mac swap for negotiation!
|
|
Thus bond mode 4 will negotiation failed.
|
|
|
|
Fixes: 56cbc0817399 ("net/bonding: fix LACP negotiation")
|
|
Cc: stable@dpdk.org
|
|
|
|
Signed-off-by: Yicai Lu <luyicai@huawei.com>
|
|
Reviewed-by: Wei Hu (Xavier) <xavier.huwei@huawei.com>
|
|
---
|
|
drivers/net/bonding/rte_eth_bond_8023ad.c | 3 ++-
|
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
|
|
(limited to 'drivers/net/bonding')
|
|
|
|
diff --git a/drivers/net/bonding/rte_eth_bond_8023ad.c b/drivers/net/bonding/rte_eth_bond_8023ad.c
|
|
index b7ffa2f2cf..3991825ad9 100644
|
|
--- a/drivers/net/bonding/rte_eth_bond_8023ad.c
|
|
+++ b/drivers/net/bonding/rte_eth_bond_8023ad.c
|
|
@@ -798,7 +798,8 @@ rx_machine_update(struct bond_dev_private *internals, uint16_t slave_id,
|
|
RTE_ASSERT(lacp->lacpdu.subtype == SLOW_SUBTYPE_LACP);
|
|
|
|
partner = &lacp->lacpdu.partner;
|
|
- if (rte_is_same_ether_addr(&partner->port_params.system,
|
|
+ if (rte_is_zero_ether_addr(&partner->port_params.system) ||
|
|
+ rte_is_same_ether_addr(&partner->port_params.system,
|
|
&internals->mode4.mac_addr)) {
|
|
/* This LACP frame is sending to the bonding port
|
|
* so pass it to rx_machine.
|
|
--
|
|
cgit v1.2.1
|
|
|
|
|