[dpdk-stable] [PATCH] net/mlx5: fix matching for UDP tunnels with verbs

Raslan Darawsheh rasland at mellanox.com
Tue May 5 11:42:18 CEST 2020


When creating flow rule with zero specs it will cause
matching all UDP packets like following:
 eth / ipv4 / udp / vxlan / end
Such rule will match all udp packets.

This change the behavior to match the dv flow engine
which will automatically set the match on relative
outer UDP port if the user didn't specify any.

Fixes: 84c406e74524 ("net/mlx5: add flow translate function")
Cc: stable at dpdk.org

Signed-off-by: Raslan Darawsheh <rasland at mellanox.com>
---
 drivers/net/mlx5/mlx5_flow_verbs.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/drivers/net/mlx5/mlx5_flow_verbs.c b/drivers/net/mlx5/mlx5_flow_verbs.c
index 7efd97f54..9094fb70b 100644
--- a/drivers/net/mlx5/mlx5_flow_verbs.c
+++ b/drivers/net/mlx5/mlx5_flow_verbs.c
@@ -680,6 +680,26 @@ flow_verbs_translate_item_udp(struct mlx5_flow *dev_flow,
 		udp.val.src_port &= udp.mask.src_port;
 		udp.val.dst_port &= udp.mask.dst_port;
 	}
+
+	if ((item + 1) != NULL && !(udp.val.dst_port & udp.mask.dst_port)) {
+		switch((item + 1)->type) {
+			case RTE_FLOW_ITEM_TYPE_VXLAN:
+				udp.val.dst_port = htons(MLX5_UDP_PORT_VXLAN);
+				udp.mask.dst_port = 0xffff;
+				break;
+			case RTE_FLOW_ITEM_TYPE_VXLAN_GPE:
+				udp.val.dst_port = htons(MLX5_UDP_PORT_VXLAN_GPE);
+				udp.mask.dst_port = 0xffff;
+				break;
+			case RTE_FLOW_ITEM_TYPE_MPLS:
+				udp.val.dst_port = htons(MLX5_UDP_PORT_MPLS);
+				udp.mask.dst_port = 0xffff;
+				break;
+			default:
+				break;
+		}
+	}
+
 	flow_verbs_spec_add(&dev_flow->verbs, &udp, size);
 }
 
-- 
2.26.0



More information about the stable mailing list