DPDK patches and discussions
 help / color / mirror / Atom feed
* [PATCH] net/bonding: fix bond4 drop valid MAC packets
@ 2022-10-19  3:32 Huisong Li
  2022-11-06 11:01 ` Andrew Rybchenko
  0 siblings, 1 reply; 2+ messages in thread
From: Huisong Li @ 2022-10-19  3:32 UTC (permalink / raw)
  To: dev, 3chas3, humin29
  Cc: david.marchand, andrew.rybchenko, fengchengwen, huangdaode,
	liudongdong3, lihuisong

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")
Cc: stable@dpdk.org

Signed-off-by: Huisong Li <lihuisong@huawei.com>
---
 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 27005c747c..e2326883de 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->dst_addr) &&
-				   !rte_is_same_ether_addr(bond_mac,
-						       &hdr->dst_addr)) ||
-				  (!allmulti &&
-				   rte_is_multicast_ether_addr(&hdr->dst_addr)))))) {
-
+				 !is_bond_mac_addr(&hdr->dst_addr, bond_mac,
+						   BOND_MAX_MAC_ADDRS) &&
+				 (rte_is_unicast_ether_addr(&hdr->dst_addr) ||
+				  !allmulti)))) {
 				if (hdr->ether_type == ether_type_slow_be) {
 					bond_mode_8023ad_handle_slow_pkt(
 					    internals, slaves[idx], bufs[j]);
-- 
2.33.0


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] net/bonding: fix bond4 drop valid MAC packets
  2022-10-19  3:32 [PATCH] net/bonding: fix bond4 drop valid MAC packets Huisong Li
@ 2022-11-06 11:01 ` Andrew Rybchenko
  0 siblings, 0 replies; 2+ messages in thread
From: Andrew Rybchenko @ 2022-11-06 11:01 UTC (permalink / raw)
  To: Huisong Li, dev, 3chas3, humin29
  Cc: david.marchand, fengchengwen, huangdaode, liudongdong3

On 10/19/22 06:32, Huisong Li wrote:
> 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")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Huisong Li <lihuisong@huawei.com>

Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>

Applied to dpdk-next-net/main, thanks.



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-11-06 11:01 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-19  3:32 [PATCH] net/bonding: fix bond4 drop valid MAC packets Huisong Li
2022-11-06 11:01 ` Andrew Rybchenko

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).