patches for DPDK stable branches
 help / color / mirror / Atom feed
* [PATCH 1/2] app/testpmd: revert L4 protocol retrieval from L3 header
       [not found] <20251105024724.830304-1-mingjinx.ye@intel.com>
@ 2025-11-05  2:47 ` Mingjin Ye
  2025-11-05  2:47 ` [PATCH 2/2] app/testpmd: fix the IPv6 extension offset Mingjin Ye
  1 sibling, 0 replies; 2+ messages in thread
From: Mingjin Ye @ 2025-11-05  2:47 UTC (permalink / raw)
  To: dev; +Cc: Mingjin Ye, stable, Aman Singh

This reverts commit 496159613ffc7b6ba592432a1ba4d1a38f6935de.

When the TX IP checksum offload feature is enabled, it may result in
internal UDP checksum errors in VXLAN tunnel packets.

Fixes: 496159613ffc ("app/testpmd: fix L4 protocol retrieval from L3 header")
Cc: stable@dpdk.org

Signed-off-by: Mingjin Ye <mingjinx.ye@intel.com>
---
 app/test-pmd/csumonly.c | 39 +++++++++++++++++++++++----------------
 1 file changed, 23 insertions(+), 16 deletions(-)

diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c
index a6e872e5a4..d355dbd8c0 100644
--- a/app/test-pmd/csumonly.c
+++ b/app/test-pmd/csumonly.c
@@ -525,8 +525,20 @@ get_tunnel_ol_flags_by_ptype(uint32_t ptype)
 	}
 }
 
+static void
+parse_inner_l4_proto(void *outer_l3_hdr,
+			struct testpmd_offload_info *info)
+{
+	struct rte_ipv4_hdr *ipv4_hdr = outer_l3_hdr;
+	struct rte_ipv6_hdr *ipv6_hdr = outer_l3_hdr;
+	if (info->ethertype == _htons(RTE_ETHER_TYPE_IPV4))
+		info->l4_proto = ipv4_hdr->next_proto_id;
+	else
+		info->l4_proto = ipv6_hdr->proto;
+}
+
 static uint8_t
-parse_l4_proto(const struct rte_mbuf *m, uint32_t off, uint32_t ptype, bool parse_inner)
+parse_l4_proto(const struct rte_mbuf *m, uint32_t off, uint32_t ptype)
 {
 	int frag = 0, ret;
 
@@ -545,19 +557,16 @@ parse_l4_proto(const struct rte_mbuf *m, uint32_t off, uint32_t ptype, bool pars
 		if (unlikely(ip6h == NULL))
 			return 0;
 
-		if (!parse_inner && (ptype & RTE_PTYPE_L3_MASK) != RTE_PTYPE_L3_IPV6_EXT)
-			return ip6h->proto;
-
-		if (parse_inner && (ptype & RTE_PTYPE_INNER_L3_MASK) != RTE_PTYPE_INNER_L3_IPV6_EXT)
-			return ip6h->proto;
+		if ((ptype & RTE_PTYPE_INNER_L3_MASK) ==
+				RTE_PTYPE_INNER_L3_IPV6_EXT) {
+			ret = rte_net_skip_ip6_ext(ip6h->proto, m, &off, &frag);
+			if (ret < 0)
+				return 0;
+			return ret;
+		}
 
-		off += sizeof(struct rte_ipv6_hdr);
-		ret = rte_net_skip_ip6_ext(ip6h->proto, m, &off, &frag);
-		if (ret < 0)
-			return 0;
-		return ret;
+		return ip6h->proto;
 	}
-
 	return 0;
 }
 
@@ -696,7 +705,7 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)
 		info.l4_len = hdr_lens.l4_len;
 		info.ethertype = get_ethertype_by_ptype(eth_hdr,
 					ptype & RTE_PTYPE_L3_MASK);
-		info.l4_proto = parse_l4_proto(m, info.l2_len, ptype, false);
+		info.l4_proto = parse_l4_proto(m, info.l2_len, ptype);
 
 		l3_hdr = (char *)eth_hdr + info.l2_len;
 		/* check if it's a supported tunnel */
@@ -714,11 +723,9 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)
 		}
 		/* update l3_hdr and outer_l3_hdr if a tunnel was parsed */
 		if (info.is_tunnel) {
-			uint16_t l3_off = info.outer_l2_len +  info.outer_l3_len + info.l2_len;
-
 			outer_l3_hdr = l3_hdr;
 			l3_hdr = (char *)l3_hdr + info.outer_l3_len + info.l2_len;
-			info.l4_proto = parse_l4_proto(m, l3_off, ptype, true);
+			parse_inner_l4_proto(l3_hdr, &info);
 		}
 		/* step 2: depending on user command line configuration,
 		 * recompute checksum either in software or flag the
-- 
2.25.1


^ permalink raw reply	[flat|nested] 2+ messages in thread

* [PATCH 2/2] app/testpmd: fix the IPv6 extension offset
       [not found] <20251105024724.830304-1-mingjinx.ye@intel.com>
  2025-11-05  2:47 ` [PATCH 1/2] app/testpmd: revert L4 protocol retrieval from L3 header Mingjin Ye
@ 2025-11-05  2:47 ` Mingjin Ye
  1 sibling, 0 replies; 2+ messages in thread
From: Mingjin Ye @ 2025-11-05  2:47 UTC (permalink / raw)
  To: dev; +Cc: Mingjin Ye, stable, Aman Singh

The skip ipv6 extension must be offset after the IPv6 header.

Fixes: 76730c7b9b5a ("app/testpmd: use packet type parsing API")
Cc: stable@dpdk.org

Signed-off-by: Mingjin Ye <mingjinx.ye@intel.com>
---
 app/test-pmd/csumonly.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c
index d355dbd8c0..4b24bde190 100644
--- a/app/test-pmd/csumonly.c
+++ b/app/test-pmd/csumonly.c
@@ -559,6 +559,7 @@ parse_l4_proto(const struct rte_mbuf *m, uint32_t off, uint32_t ptype)
 
 		if ((ptype & RTE_PTYPE_INNER_L3_MASK) ==
 				RTE_PTYPE_INNER_L3_IPV6_EXT) {
+			off += sizeof(struct rte_ipv6_hdr);
 			ret = rte_net_skip_ip6_ext(ip6h->proto, m, &off, &frag);
 			if (ret < 0)
 				return 0;
-- 
2.25.1


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2025-11-05  3:20 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <20251105024724.830304-1-mingjinx.ye@intel.com>
2025-11-05  2:47 ` [PATCH 1/2] app/testpmd: revert L4 protocol retrieval from L3 header Mingjin Ye
2025-11-05  2:47 ` [PATCH 2/2] app/testpmd: fix the IPv6 extension offset Mingjin Ye

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).