[dpdk-stable] patch 'net/bonding: fix MAC address when switching active port' has been queued to LTS release 18.11.10

Kevin Traynor ktraynor at redhat.com
Fri Aug 28 12:12:31 CEST 2020


Hi,

FYI, your patch has been queued to LTS release 18.11.10

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 09/02/20. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Queued patches are on a temporary branch at:
https://github.com/kevintraynor/dpdk-stable-queue

This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable-queue/commit/7d6cbe1df1614551e945ce8feb11313078ee6e2c

Thanks.

Kevin.

---
>From 7d6cbe1df1614551e945ce8feb11313078ee6e2c Mon Sep 17 00:00:00 2001
From: "Wei Hu (Xavier)" <xavier.huwei at huawei.com>
Date: Fri, 17 Apr 2020 16:19:17 +0800
Subject: [PATCH] net/bonding: fix MAC address when switching active port

[ upstream commit edf6489ea43ec9c27d54dbe9e94adcdc43b70e04 ]

Currently, based on a active-backup bond device, when the link status of
the primary port changes from up to down, one slave port changes to the
primary port, but the new primary port's MAC address cannot change to
the bond device's MAC address. And we can't continue receive packets
whose destination MAC addresses are the same as the bond devices's MAC
address.

The current bonding PMD driver call mac_address_slaves_update function
to modify the MAC address of all slaves devices: the primary port using
bond device's MAC address, and other slaves devices using the respective
MAC address. We found that one error using primary_port instead of
current_primary_port in mac_address_slaves_update function.

On the other hand, The current bonding PMD driver sets slave devices's
MAC address according to the variable named current_primary_port. The
variable named current_primary_port changes in the following scenario:
1. Add the slave devices to bond, the first slave port will be regarded
   as the current_primary_port. If changing the order of adding the
   slave devices, the value of the variable named current_primary_port
   will be different.
2. The upper application specifies primary_port via calling the
   rte_eth_bond_primary_set API function.
3. Delete the primary slave device.
4. The link status of the primary port changes from up to down.

We have tested the above 4 cases and found that there are problems that
the new primary port's MAC address didn't change to the bond device's
MAC address when running case 3 and 4. When current_primary_port
changes, the new primary port's MAC address should change at the same
time. We also need to call mac_address_slaves_update function to update
MAC addresses in case
3 and 4.

Bugzilla ID: 256
Fixes: 2efb58cbab6e ("bond: new link bonding library")

Signed-off-by: Chunsong Feng <fengchunsong at huawei.com>
Signed-off-by: Wei Hu (Xavier) <xavier.huwei at huawei.com>
---
 drivers/net/bonding/rte_eth_bond_api.c | 1 +
 drivers/net/bonding/rte_eth_bond_pmd.c | 3 ++-
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/bonding/rte_eth_bond_api.c b/drivers/net/bonding/rte_eth_bond_api.c
index e7cb086fb0..7bbe9724a0 100644
--- a/drivers/net/bonding/rte_eth_bond_api.c
+++ b/drivers/net/bonding/rte_eth_bond_api.c
@@ -680,4 +680,5 @@ __eth_bond_slave_remove_lock_free(uint16_t bonded_port_id,
 		else
 			internals->primary_port = 0;
+		mac_address_slaves_update(bonded_eth_dev);
 	}
 
diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c
index c1cbf6258b..d7fb9db0cc 100644
--- a/drivers/net/bonding/rte_eth_bond_pmd.c
+++ b/drivers/net/bonding/rte_eth_bond_pmd.c
@@ -1488,5 +1488,5 @@ mac_address_slaves_update(struct rte_eth_dev *bonded_eth_dev)
 					internals->current_primary_port) {
 				if (rte_eth_dev_default_mac_addr_set(
-						internals->primary_port,
+						internals->current_primary_port,
 						bonded_eth_dev->data->mac_addrs)) {
 					RTE_BOND_LOG(ERR, "Failed to update port Id %d MAC address",
@@ -2609,4 +2609,5 @@ bond_ethdev_lsc_event_callback(uint16_t port_id, enum rte_eth_event_type type,
 			else
 				internals->current_primary_port = internals->primary_port;
+			mac_address_slaves_update(bonded_eth_dev);
 		}
 	}
-- 
2.26.2

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2020-08-28 11:03:26.092949186 +0100
+++ 0005-net-bonding-fix-MAC-address-when-switching-active-po.patch	2020-08-28 11:03:25.899955276 +0100
@@ -1 +1 @@
-From edf6489ea43ec9c27d54dbe9e94adcdc43b70e04 Mon Sep 17 00:00:00 2001
+From 7d6cbe1df1614551e945ce8feb11313078ee6e2c Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit edf6489ea43ec9c27d54dbe9e94adcdc43b70e04 ]
+
@@ -41 +42,0 @@
-Cc: stable at dpdk.org
@@ -51 +52 @@
-index d77dc40963..97c667e007 100644
+index e7cb086fb0..7bbe9724a0 100644
@@ -54 +55 @@
-@@ -699,4 +699,5 @@ __eth_bond_slave_remove_lock_free(uint16_t bonded_port_id,
+@@ -680,4 +680,5 @@ __eth_bond_slave_remove_lock_free(uint16_t bonded_port_id,
@@ -61 +62 @@
-index 044a1cfbc3..6f361c7b2c 100644
+index c1cbf6258b..d7fb9db0cc 100644
@@ -64 +65 @@
-@@ -1534,5 +1534,5 @@ mac_address_slaves_update(struct rte_eth_dev *bonded_eth_dev)
+@@ -1488,5 +1488,5 @@ mac_address_slaves_update(struct rte_eth_dev *bonded_eth_dev)
@@ -71 +72 @@
-@@ -2874,4 +2874,5 @@ bond_ethdev_lsc_event_callback(uint16_t port_id, enum rte_eth_event_type type,
+@@ -2609,4 +2609,5 @@ bond_ethdev_lsc_event_callback(uint16_t port_id, enum rte_eth_event_type type,



More information about the stable mailing list