[V2] net/bonding: fix lacp negotiation failed
diff mbox series

Message ID 1594351775-30864-1-git-send-email-luyicai@huawei.com
State Accepted, archived
Delegated to: Ferruh Yigit
Headers show
Series
  • [V2] net/bonding: fix lacp negotiation failed
Related show

Checks

Context Check Description
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-testing success Testing PASS
ci/Intel-compilation success Compilation OK
ci/travis-robot success Travis build: passed
ci/iol-broadcom-Performance success Performance Testing PASS
ci/checkpatch warning coding style issues

Commit Message

luyicai July 10, 2020, 3:29 a.m. UTC
From: Yicai Lu <luyicai@huawei.com>

When two host is connected directly without any devices like switch,
rx_machine_update would recieving 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: luyicai <luyicai@huawei.com>
---
v1 -> v2: Adjust commit info style
---
 drivers/net/bonding/rte_eth_bond_8023ad.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Wei Hu (Xavier) July 11, 2020, 1:20 a.m. UTC | #1
Reviewed-by: Wei Hu (Xavier) <xavier.huwei@huawei.com>


On 2020/7/10 11:29, luyicai wrote:
> From: Yicai Lu <luyicai@huawei.com>
>
> When two host is connected directly without any devices like switch,
> rx_machine_update would recieving 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: luyicai <luyicai@huawei.com>
> ---
> v1 -> v2: Adjust commit info style
> ---
>   drivers/net/bonding/rte_eth_bond_8023ad.c | 3 ++-
>   1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/bonding/rte_eth_bond_8023ad.c b/drivers/net/bonding/rte_eth_bond_8023ad.c
> index b77a37d..2002ec0 100644
> --- a/drivers/net/bonding/rte_eth_bond_8023ad.c
> +++ b/drivers/net/bonding/rte_eth_bond_8023ad.c
> @@ -798,7 +798,8 @@
>   		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.
Ferruh Yigit July 11, 2020, 3:07 a.m. UTC | #2
On 7/11/2020 2:20 AM, Wei Hu (Xavier) wrote:

> 
> On 2020/7/10 11:29, luyicai wrote:
>> From: Yicai Lu <luyicai@huawei.com>
>>
>> When two host is connected directly without any devices like switch,
>> rx_machine_update would recieving 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: luyicai <luyicai@huawei.com>
>
> Reviewed-by: Wei Hu (Xavier) <xavier.huwei@huawei.com>
> 
Applied to dpdk-next-net/master, thanks.

Patch
diff mbox series

diff --git a/drivers/net/bonding/rte_eth_bond_8023ad.c b/drivers/net/bonding/rte_eth_bond_8023ad.c
index b77a37d..2002ec0 100644
--- a/drivers/net/bonding/rte_eth_bond_8023ad.c
+++ b/drivers/net/bonding/rte_eth_bond_8023ad.c
@@ -798,7 +798,8 @@ 
 		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.