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