<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Hi Alex,</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Thanks for your help to backport, patch applied to 23.11.1 LTS release candidate queue.</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Alex Vesker <valex@nvidia.com><br>
<b>Sent:</b> Tuesday, April 30, 2024 1:55 PM<br>
<b>To:</b> Xueming Li <xuemingl@nvidia.com>; stable@dpdk.org <stable@dpdk.org>; Alex Vesker <valex@nvidia.com><br>
<b>Subject:</b> [PATCH 23.11] net/mlx5/hws: fix tunnel protocol checks</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">[ upstream commit 28e69588f4170f29b73a04fc3bffba2596305782 ]<br>
<br>
Align GRE, GTPU and VXLAN tunnel protocols to fail<br>
in case the packet is already tunneled. Also use local<br>
defines for protocol UDP ports for better layering of<br>
mlx5dr API.<br>
<br>
Signed-off-by: Alex Vesker <valex@nvidia.com><br>
Acked-by: Suanming Mou <suanmingm@nvidia.com><br>
---<br>
drivers/net/mlx5/hws/mlx5dr_definer.c | 39 +++++++++++++--------------<br>
1 file changed, 19 insertions(+), 20 deletions(-)<br>
<br>
diff --git a/drivers/net/mlx5/hws/mlx5dr_definer.c b/drivers/net/mlx5/hws/mlx5dr_definer.c<br>
index c6918ef4f3..3391b3d32a 100644<br>
--- a/drivers/net/mlx5/hws/mlx5dr_definer.c<br>
+++ b/drivers/net/mlx5/hws/mlx5dr_definer.c<br>
@@ -8,8 +8,9 @@<br>
#define BAD_PORT 0xBAD<br>
#define ETH_TYPE_IPV4_VXLAN 0x0800<br>
#define ETH_TYPE_IPV6_VXLAN 0x86DD<br>
-#define ETH_VXLAN_DEFAULT_PORT 4789<br>
-#define IP_UDP_PORT_MPLS 6635<br>
+#define UDP_GTPU_PORT 2152<br>
+#define UDP_VXLAN_PORT 4789<br>
+#define UDP_PORT_MPLS 6635<br>
#define UDP_ROCEV2_PORT 4791<br>
#define DR_FLOW_LAYER_TUNNEL_NO_MPLS (MLX5_FLOW_LAYER_TUNNEL & ~MLX5_FLOW_LAYER_MPLS)<br>
<br>
@@ -162,7 +163,7 @@ struct mlx5dr_definer_conv_data {<br>
X(SET, tcp_protocol, STE_TCP, rte_flow_item_tcp) \<br>
X(SET_BE16, tcp_src_port, v->hdr.src_port, rte_flow_item_tcp) \<br>
X(SET_BE16, tcp_dst_port, v->hdr.dst_port, rte_flow_item_tcp) \<br>
- X(SET, gtp_udp_port, RTE_GTPU_UDP_PORT, rte_flow_item_gtp) \<br>
+ X(SET, gtp_udp_port, UDP_GTPU_PORT, rte_flow_item_gtp) \<br>
X(SET_BE32, gtp_teid, v->hdr.teid, rte_flow_item_gtp) \<br>
X(SET, gtp_msg_type, v->hdr.msg_type, rte_flow_item_gtp) \<br>
X(SET, gtp_ext_flag, !!v->hdr.gtp_hdr_info, rte_flow_item_gtp) \<br>
@@ -170,8 +171,8 @@ struct mlx5dr_definer_conv_data {<br>
X(SET, gtp_ext_hdr_pdu, v->hdr.type, rte_flow_item_gtp_psc) \<br>
X(SET, gtp_ext_hdr_qfi, v->hdr.qfi, rte_flow_item_gtp_psc) \<br>
X(SET, vxlan_flags, v->flags, rte_flow_item_vxlan) \<br>
- X(SET, vxlan_udp_port, ETH_VXLAN_DEFAULT_PORT, rte_flow_item_vxlan) \<br>
- X(SET, mpls_udp_port, IP_UDP_PORT_MPLS, rte_flow_item_mpls) \<br>
+ X(SET, vxlan_udp_port, UDP_VXLAN_PORT, rte_flow_item_vxlan) \<br>
+ X(SET, mpls_udp_port, UDP_PORT_MPLS, rte_flow_item_mpls) \<br>
X(SET, source_qp, v->queue, mlx5_rte_flow_item_sq) \<br>
X(SET, tag, v->data, rte_flow_item_tag) \<br>
X(SET, metadata, v->data, rte_flow_item_meta) \<br>
@@ -1184,6 +1185,12 @@ mlx5dr_definer_conv_item_gtp(struct mlx5dr_definer_conv_data *cd,<br>
const struct rte_flow_item_gtp *m = item->mask;<br>
struct mlx5dr_definer_fc *fc;<br>
<br>
+ if (cd->tunnel) {<br>
+ DR_LOG(ERR, "Inner GTPU item not supported");<br>
+ rte_errno = ENOTSUP;<br>
+ return rte_errno;<br>
+ }<br>
+<br>
/* Overwrite GTPU dest port if not present */<br>
fc = &cd->fc[DR_CALC_FNAME(L4_DPORT, false)];<br>
if (!fc->tag_set && !cd->relaxed) {<br>
@@ -1358,9 +1365,13 @@ mlx5dr_definer_conv_item_vxlan(struct mlx5dr_definer_conv_data *cd,<br>
struct mlx5dr_definer_fc *fc;<br>
bool inner = cd->tunnel;<br>
<br>
- /* In order to match on VXLAN we must match on ether_type, ip_protocol<br>
- * and l4_dport.<br>
- */<br>
+ if (inner) {<br>
+ DR_LOG(ERR, "Inner VXLAN item not supported");<br>
+ rte_errno = ENOTSUP;<br>
+ return rte_errno;<br>
+ }<br>
+<br>
+ /* In order to match on VXLAN we must match on ip_protocol and l4_dport */<br>
if (m && (m->rsvd0[0] != 0 || m->rsvd0[1] != 0 || m->rsvd0[2] != 0 ||<br>
m->rsvd1 != 0)) {<br>
DR_LOG(ERR, "reserved fields are not supported");<br>
@@ -1390,12 +1401,6 @@ mlx5dr_definer_conv_item_vxlan(struct mlx5dr_definer_conv_data *cd,<br>
return 0;<br>
<br>
if (m->flags) {<br>
- if (inner) {<br>
- DR_LOG(ERR, "Inner VXLAN flags item not supported");<br>
- rte_errno = ENOTSUP;<br>
- return rte_errno;<br>
- }<br>
-<br>
fc = &cd->fc[MLX5DR_DEFINER_FNAME_VXLAN_FLAGS];<br>
fc->item_idx = item_idx;<br>
fc->tag_set = &mlx5dr_definer_vxlan_flags_set;<br>
@@ -1405,12 +1410,6 @@ mlx5dr_definer_conv_item_vxlan(struct mlx5dr_definer_conv_data *cd,<br>
}<br>
<br>
if (!is_mem_zero(m->vni, 3)) {<br>
- if (inner) {<br>
- DR_LOG(ERR, "Inner VXLAN vni item not supported");<br>
- rte_errno = ENOTSUP;<br>
- return rte_errno;<br>
- }<br>
-<br>
fc = &cd->fc[MLX5DR_DEFINER_FNAME_VXLAN_VNI];<br>
fc->item_idx = item_idx;<br>
fc->tag_set = &mlx5dr_definer_vxlan_vni_set;<br>
-- <br>
2.18.1<br>
<br>
</div>
</span></font></div>
</body>
</html>