Skip to contentSkip to conversation

net/mlx5: align PF and VF/SF MAC addresses handling

PATCH In review Gavin Li 3 participants 3 messages May 16, 2025 – May 22, 2025 Network drivers

lore
Share & tools
lore

Gavin Li

author
#0 lore raw

PATCH 1/1 net/mlx5: align PF and VF/SF MAC addresses handling

In the mlx5_dev_spawn function, the Virtual Function (VF) synchronizes MAC addresses from the kernel using netlink. It queries the netdev-configured MACs and populates the list in the PMD device data, including multicast MAC addresses. These addresses are later used for control flow creation, allowing traffic for the listed MACs to be received. However, the Physical Function (PF) does not synchronize with the kernel and thus does not add any multicast MAC address rules when enabling traffic. This discrepancy causes the IFF_ALLMULTI ioctl code to malfunction, as it fails to disable all multicast traffic, leaving the VF still able to see it.

To align PF and VF behavior, only unicast MAC address flows should be added.

Fixes 272733b5ebfd ("net/mlx5: use flow to enable unicast traffic")
---
 drivers/net/mlx5/linux/mlx5_os.c | 3 ++-
 drivers/net/mlx5/mlx5_trigger.c  | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)
drivers/net/mlx5/linux/mlx5_os.c +2 -1
index 573e846ed2..696a3e12c7 100644
@@ -1603,7 +1603,8 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev,
 	eth_dev->rx_queue_count = mlx5_rx_queue_count;
 	/* Register MAC address. */
 	claim_zero(mlx5_mac_addr_add(eth_dev, &mac, 0, 0));
-	if (sh->dev_cap.vf && sh->config.vf_nl_en)
+	/* Sync mac addresses for PF or VF/SF if vf_nl_en is true */
+	if ((!sh->dev_cap.vf && !sh->dev_cap.sf) || sh->config.vf_nl_en)
 		mlx5_nl_mac_addr_sync(priv->nl_socket_route,
 				      mlx5_ifindex(eth_dev),
 				      eth_dev->data->mac_addrs,
drivers/net/mlx5/mlx5_trigger.c +1 -1
index 8145ad4233..485984f9b0 100644
@@ -1714,7 +1714,7 @@ mlx5_traffic_enable(struct rte_eth_dev *dev)
 	for (i = 0; i != MLX5_MAX_MAC_ADDRESSES; ++i) {
 		struct rte_ether_addr *mac = &dev->data->mac_addrs[i];
 
-		if (!memcmp(mac, &cmp, sizeof(*mac)))
+		if (!memcmp(mac, &cmp, sizeof(*mac)) || rte_is_multicast_ether_addr(mac))
 			continue;
 		memcpy(&unicast.hdr.dst_addr.addr_bytes,
 		       mac->addr_bytes,
Signature · 1 line
2.34.1
Acked-by on v1 1/1
#1 lore raw
Quoted 23 lines

-----Original Message-----
From: Minggang(Gavin) Li <[email protected]>
Sent: Friday, May 16, 2025 10:11 AM
To: Matan Azrad <[email protected]>; Slava Ovsiienko <[email protected]>; Ori Kam <[email protected]>; NBU-Contact- Thomas Monjalon (EXTERNAL) <[email protected]>; Dariusz Sosnowski <[email protected]>; Bing Zhao <[email protected]>; Suanming Mou <[email protected]>; NBU-Contact-N?lio Laranjeiro (EXTERNAL) <[email protected]>; Yongseok Koh <[email protected]>
Cc: [email protected]; Raslan Darawsheh <[email protected]>; [email protected]
Subject: [PATCH] net/mlx5: align PF and VF/SF MAC addresses handling

In the mlx5_dev_spawn function, the Virtual Function (VF) synchronizes MAC addresses from the kernel using netlink. It queries the netdev- configured MACs and populates the list in the PMD device data, including multicast MAC addresses. These addresses are later used for control flow creation, allowing traffic for the listed MACs to be received. However, the Physical Function (PF) does not synchronize with the kernel and thus does not add any multicast MAC address rules when enabling traffic. This discrepancy causes the IFF_ALLMULTI ioctl code to malfunction, as it fails to disable all multicast traffic, leaving the VF still able to see it.

Quoted 6 lines

To align PF and VF behavior, only unicast MAC address flows should be added.

Fixes 272733b5ebfd ("net/mlx5: use flow to enable unicast traffic")
#2 lore raw
In reply to Gavin Li

Hi,

Quoted 10 lines · Gavin Li

In the mlx5_dev_spawn function, the Virtual Function (VF) synchronizes MAC addresses from the kernel using netlink. It queries the netdev-configured MACs and populates the list in the PMD device data, including multicast MAC addresses. These addresses are later used for control flow creation, allowing traffic for the listed MACs to be received. However, the Physical Function (PF) does not synchronize with the kernel and thus does not add any multicast MAC address rules when enabling traffic. This discrepancy causes the IFF_ALLMULTI ioctl code to malfunction, as it fails to disable all multicast traffic, leaving the VF still able to see it.

Quoted 7 lines

To align PF and VF behavior, only unicast MAC address flows should be added.

Fixes 272733b5ebfd ("net/mlx5: use flow to enable unicast traffic")

---

Patch applied to next-net-mlx,

Signature · 2 lines
Kindest regards
Raslan Darawsheh