Skip to contentSkip to conversation

net/mlx5: fix MPLS tunnel outer layer overwrite

PATCH In review Dariusz Sosnowski 2 participants 2 messages Nov 17, 2021 Network drivers

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 net/mlx5: fix MPLS tunnel outer layer overwrite

mlx5 PMD incorrectly overwrote outer layer fields in MPLS tunnel rte_flow patterns using defaults for MPLS tunnels. This included overwriting UDP destination port in MPLSoUDP and GRE protocol field in MPLSoGRE.

This patch fixes this behavior. If application provides the values in flow pattern items preceding the MPLS flow item the provided values will be used, otherwise the defaults will be applied.

Fixes d1abe664ddde ("net/mlx5: add MPLS to Direct Verbs flow engine")
---
 drivers/net/mlx5/mlx5_flow_dv.c | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)
drivers/net/mlx5/mlx5_flow_dv.c +12 -6
index 1b4e15dff1..0ff495ed8d 100644
@@ -9282,16 +9282,22 @@ flow_dv_translate_item_mpls(void *matcher, void *key,
 
 	switch (prev_layer) {
 	case MLX5_FLOW_LAYER_OUTER_L4_UDP:
-		MLX5_SET(fte_match_set_lyr_2_4, headers_m, udp_dport, 0xffff);
-		MLX5_SET(fte_match_set_lyr_2_4, headers_v, udp_dport,
-			 MLX5_UDP_PORT_MPLS);
+		if (!MLX5_GET16(fte_match_set_lyr_2_4, headers_v, udp_dport)) {
+			MLX5_SET(fte_match_set_lyr_2_4, headers_m, udp_dport,
+				 0xffff);
+			MLX5_SET(fte_match_set_lyr_2_4, headers_v, udp_dport,
+				 MLX5_UDP_PORT_MPLS);
+		}
 		break;
 	case MLX5_FLOW_LAYER_GRE:
 		/* Fall-through. */
 	case MLX5_FLOW_LAYER_GRE_KEY:
-		MLX5_SET(fte_match_set_misc, misc_m, gre_protocol, 0xffff);
-		MLX5_SET(fte_match_set_misc, misc_v, gre_protocol,
-			 RTE_ETHER_TYPE_MPLS);
+		if (!MLX5_GET16(fte_match_set_misc, misc_v, gre_protocol)) {
+			MLX5_SET(fte_match_set_misc, misc_m, gre_protocol,
+				 0xffff);
+			MLX5_SET(fte_match_set_misc, misc_v, gre_protocol,
+				 RTE_ETHER_TYPE_MPLS);
+		}
 		break;
 	default:
 		break;
Signature · 1 line
2.25.1
#1 lore raw

Hi,

Quoted 16 lines

-----Original Message-----
From: Dariusz Sosnowski <[email protected]>
Sent: Wednesday, November 17, 2021 12:00 PM
To: Matan Azrad <[email protected]>; Slava Ovsiienko <[email protected]>
Cc: [email protected]; [email protected]
Subject: [PATCH] net/mlx5: fix MPLS tunnel outer layer overwrite

mlx5 PMD incorrectly overwrote outer layer fields in MPLS tunnel rte_flow patterns using defaults for MPLS tunnels. This included overwriting UDP destination port in MPLSoUDP and GRE protocol field in MPLSoGRE.

This patch fixes this behavior. If application provides the values in flow pattern items preceding the MPLS flow item the provided values will be used, otherwise the defaults will be applied.

Quoted 5 lines
Fixes d1abe664ddde ("net/mlx5: add MPLS to Direct Verbs flow engine")

Patch applied to next-net-mlx,

Kindest regards,
Raslan Darawsheh