patches for DPDK stable branches
 help / color / mirror / Atom feed
From: christian.ehrhardt@canonical.com
To: Huisong Li <lihuisong@huawei.com>
Cc: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>,
	dpdk stable <stable@dpdk.org>
Subject: patch 'net/bonding: fix dropping valid MAC packets' has been queued to stable release 19.11.14
Date: Wed, 16 Nov 2022 11:39:57 +0100	[thread overview]
Message-ID: <20221116104012.2975036-2-christian.ehrhardt@canonical.com> (raw)
In-Reply-To: <20221116104012.2975036-1-christian.ehrhardt@canonical.com>

Hi,

FYI, your patch has been queued to stable release 19.11.14

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/23/22. 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/cpaelzer/dpdk-stable-queue

This queued commit can be viewed at:
https://github.com/cpaelzer/dpdk-stable-queue/commit/5473354785648341ee1a811d5dc3c6f6ba721a47

Thanks.

Christian Ehrhardt <christian.ehrhardt@canonical.com>

---
From 5473354785648341ee1a811d5dc3c6f6ba721a47 Mon Sep 17 00:00:00 2001
From: Huisong Li <lihuisong@huawei.com>
Date: Wed, 19 Oct 2022 11:32:31 +0800
Subject: [PATCH] net/bonding: fix dropping valid MAC packets

[ upstream commit 30bfba52cf356c03743b6f7deaeefce2f6cb39ed ]

Currently, by default, bond4 will first try to enable allmulti and
then enable promiscuous if fail to enable allmulti. On reception,
whether unicast and multicast packets should be dropped depends on
which mode has been enabled on the bonding interface.

In fact, if MAC address of packets in mac_addrs array of bonding
interface, these packets should not be dropped. However, now only
check the default MAC address, which will cause the packets with
MAC added by the '.mac_addr_add' are dropped.

Fixes: 68218b87c184 ("net/bonding: prefer allmulti to promiscuous for LACP")

Signed-off-by: Huisong Li <lihuisong@huawei.com>
Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
---
 drivers/net/bonding/rte_eth_bond_pmd.c | 33 +++++++++++++++++++-------
 1 file changed, 25 insertions(+), 8 deletions(-)

diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c
index c555d4640e..334a06cf73 100644
--- a/drivers/net/bonding/rte_eth_bond_pmd.c
+++ b/drivers/net/bonding/rte_eth_bond_pmd.c
@@ -271,6 +271,24 @@ bond_ethdev_8023ad_flow_set(struct rte_eth_dev *bond_dev, uint16_t slave_port) {
 	return 0;
 }
 
+static bool
+is_bond_mac_addr(const struct rte_ether_addr *ea,
+		 const struct rte_ether_addr *mac_addrs, uint32_t max_mac_addrs)
+{
+	uint32_t i;
+
+	for (i = 0; i < max_mac_addrs; i++) {
+		/* skip zero address */
+		if (rte_is_zero_ether_addr(&mac_addrs[i]))
+			continue;
+
+		if (rte_is_same_ether_addr(ea, &mac_addrs[i]))
+			return true;
+	}
+
+	return false;
+}
+
 static inline uint16_t
 rx_burst_8023ad(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts,
 		bool dedicated_rxq)
@@ -331,8 +349,9 @@ rx_burst_8023ad(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts,
 			/* Remove packet from array if:
 			 * - it is slow packet but no dedicated rxq is present,
 			 * - slave is not in collecting state,
-			 * - bonding interface is not in promiscuous mode:
-			 *   - packet is unicast and address does not match,
+			 * - bonding interface is not in promiscuous mode and
+			 *   packet address isn't in mac_addrs array:
+			 *   - packet is unicast,
 			 *   - packet is multicast and bonding interface
 			 *     is not in allmulti,
 			 */
@@ -342,12 +361,10 @@ rx_burst_8023ad(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts,
 						 bufs[j])) ||
 				!collecting ||
 				(!promisc &&
-				 ((rte_is_unicast_ether_addr(&hdr->d_addr) &&
-				   !rte_is_same_ether_addr(bond_mac,
-						       &hdr->d_addr)) ||
-				  (!allmulti &&
-				   rte_is_multicast_ether_addr(&hdr->d_addr)))))) {
-
+				 !is_bond_mac_addr(&hdr->d_addr, bond_mac,
+						   BOND_MAX_MAC_ADDRS) &&
+				 (rte_is_unicast_ether_addr(&hdr->d_addr) ||
+				  !allmulti)))) {
 				if (hdr->ether_type == ether_type_slow_be) {
 					bond_mode_8023ad_handle_slow_pkt(
 					    internals, slaves[idx], bufs[j]);
-- 
2.38.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2022-11-16 11:36:50.509846616 +0100
+++ 0002-net-bonding-fix-dropping-valid-MAC-packets.patch	2022-11-16 11:36:50.392775327 +0100
@@ -1 +1 @@
-From 30bfba52cf356c03743b6f7deaeefce2f6cb39ed Mon Sep 17 00:00:00 2001
+From 5473354785648341ee1a811d5dc3c6f6ba721a47 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 30bfba52cf356c03743b6f7deaeefce2f6cb39ed ]
+
@@ -17 +18,0 @@
-Cc: stable@dpdk.org
@@ -26 +27 @@
-index 006e13838a..864e073db8 100644
+index c555d4640e..334a06cf73 100644
@@ -70 +71 @@
--				 ((rte_is_unicast_ether_addr(&hdr->dst_addr) &&
+-				 ((rte_is_unicast_ether_addr(&hdr->d_addr) &&
@@ -72 +73 @@
--						       &hdr->dst_addr)) ||
+-						       &hdr->d_addr)) ||
@@ -74 +75 @@
--				   rte_is_multicast_ether_addr(&hdr->dst_addr)))))) {
+-				   rte_is_multicast_ether_addr(&hdr->d_addr)))))) {
@@ -76 +77 @@
-+				 !is_bond_mac_addr(&hdr->dst_addr, bond_mac,
++				 !is_bond_mac_addr(&hdr->d_addr, bond_mac,
@@ -78 +79 @@
-+				 (rte_is_unicast_ether_addr(&hdr->dst_addr) ||
++				 (rte_is_unicast_ether_addr(&hdr->d_addr) ||

  reply	other threads:[~2022-11-16 10:40 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-16 10:39 patch 'net/bonding: set initial value of descriptor count alignment' " christian.ehrhardt
2022-11-16 10:39 ` christian.ehrhardt [this message]
2022-11-16 10:39 ` patch 'app/testpmd: make quit flag volatile' " christian.ehrhardt
2022-11-16 10:39 ` patch 'net/bonding: fix mbuf fast free handling' " christian.ehrhardt
2022-11-16 10:40 ` patch 'eal: fix doxygen comments for UUID' " christian.ehrhardt
2022-11-16 10:40 ` patch 'power: fix some doxygen comments' " christian.ehrhardt
2022-11-16 10:40 ` patch 'test/hash: remove dead code in extendable bucket test' " christian.ehrhardt
2022-11-16 10:40 ` patch 'net/mlx5: fix hairpin split with set VLAN VID action' " christian.ehrhardt
2022-11-16 10:40 ` patch 'net/ice/base: fix duplicate flow rules' " christian.ehrhardt
2022-11-16 10:40 ` patch 'net/ice: fix scalar Rx path segment' " christian.ehrhardt
2022-11-16 10:40 ` patch 'net/ice: fix scalar Tx " christian.ehrhardt
2022-11-16 10:40 ` patch 'examples/fips_validation: fix typo in error log' " christian.ehrhardt
2022-11-16 10:40 ` patch 'test/crypto: fix bitwise operator in a SNOW3G case' " christian.ehrhardt
2022-11-16 10:40 ` patch 'doc: fix typo depreciated instead of deprecated' " christian.ehrhardt
2022-11-16 10:40 ` patch 'drivers: fix typos found by Lintian' " christian.ehrhardt
2022-11-16 10:40 ` patch 'doc: fix net drivers ordering' " christian.ehrhardt
2022-11-16 10:40 ` patch 'ring: remove leftover comment about watermark' " christian.ehrhardt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221116104012.2975036-2-christian.ehrhardt@canonical.com \
    --to=christian.ehrhardt@canonical.com \
    --cc=andrew.rybchenko@oktetlabs.ru \
    --cc=lihuisong@huawei.com \
    --cc=stable@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).