All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] app/testpmd: add ipv6 extension header parse
@ 2025-01-08  2:46 Jie Hai
  2025-01-08 17:02 ` Stephen Hemminger
                   ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: Jie Hai @ 2025-01-08  2:46 UTC (permalink / raw)
  To: dev, thomas, ferruh.yigit, Aman Singh
  Cc: lihuisong, fengcengwen, haijie1, huangdengdui

This patch support parse ipv6 extension header, and
support TSO for ipv6tcp packets with extension header.

Signed-off-by: Jie Hai <haijie1@huawei.com>
---
 app/test-pmd/csumonly.c | 47 ++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 46 insertions(+), 1 deletion(-)

diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c
index 2246c22e8e56..a7b11490fe27 100644
--- a/app/test-pmd/csumonly.c
+++ b/app/test-pmd/csumonly.c
@@ -124,14 +124,59 @@ parse_ipv4(struct rte_ipv4_hdr *ipv4_hdr, struct testpmd_offload_info *info)
 		info->l4_len = 0;
 }
 
+static uint16_t
+parse_ipv6_ext(struct rte_ipv6_hdr *ipv6_hdr, uint32_t *off)
+{
+	struct ext_hdr {
+		uint8_t next_hdr;
+		uint8_t len;
+	};
+	struct ext_hdr *xh;
+	uint16_t proto;
+	char *xh_fst;
+	uint16_t i;
+
+	proto = ipv6_hdr->proto;
+	xh_fst = (char *)ipv6_hdr + sizeof(*ipv6_hdr);
+#define MAX_EXT_HDRS 9
+	for (i = 0; i < MAX_EXT_HDRS; i++) {
+		switch (proto) {
+		case IPPROTO_HOPOPTS:
+		case IPPROTO_ROUTING:
+		case IPPROTO_DSTOPTS:
+			xh = (struct ext_hdr *)(xh_fst + *off);
+			*off += (xh->len + 1) * 8;
+			proto = xh->next_hdr;
+			break;
+		case IPPROTO_AH:
+			xh = (struct ext_hdr *)(xh_fst + *off);
+			*off += (xh->len + 2) * 4;
+			proto = xh->next_hdr;
+			break;
+		case IPPROTO_FRAGMENT:
+			xh = (struct ext_hdr *)(xh_fst + *off);
+			*off += 8;
+			proto = xh->next_hdr;
+			return proto; /* this is always the last ext hdr */
+		case IPPROTO_NONE:
+			return proto;
+		default:
+			return proto;
+		}
+	}
+	return proto;
+}
+
 /* Parse an IPv6 header to fill l3_len, l4_len, and l4_proto */
 static void
 parse_ipv6(struct rte_ipv6_hdr *ipv6_hdr, struct testpmd_offload_info *info)
 {
 	struct rte_tcp_hdr *tcp_hdr;
+	uint32_t off = 0;
 
 	info->l3_len = sizeof(struct rte_ipv6_hdr);
-	info->l4_proto = ipv6_hdr->proto;
+	info->l4_proto = parse_ipv6_ext(ipv6_hdr, &off);
+	info->l3_len += off;
 
 	/* only fill l4_len for TCP, it's useful for TSO */
 	if (info->l4_proto == IPPROTO_TCP) {
-- 
2.22.0


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

end of thread, other threads:[~2025-02-22  1:53 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-08  2:46 [PATCH] app/testpmd: add ipv6 extension header parse Jie Hai
2025-01-08 17:02 ` Stephen Hemminger
2025-01-14  2:05   ` Jie Hai
2025-01-14 11:24     ` Thomas Monjalon
2025-01-24  9:43 ` [PATCH v2 0/2] parse ptype for tunnel packets Jie Hai
2025-01-24  9:43   ` [PATCH v2 1/2] net: add ptype parse " Jie Hai
2025-01-30 18:26     ` Stephen Hemminger
2025-01-24  9:43   ` [PATCH v2 2/2] app/test-pmd: use ptype API parse packets Jie Hai
2025-02-14  1:56 ` [PATCH v3 0/2] app/testpmd: add ipv6 extension header parse Jie Hai
2025-02-14  1:56   ` [PATCH v3 1/2] net: add ptype parse for tunnel packets Jie Hai
2025-02-14 16:35     ` Stephen Hemminger
2025-02-22  1:53       ` Jie Hai
2025-02-14  1:56   ` [PATCH v3 2/2] app/test-pmd: use ptype API parse packets Jie Hai

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.