patch 'net/bnxt/tf_ulp: fix ICMP L3 protocol match' has been queued to stable release 24.11.9

luca.boccassi at gmail.com luca.boccassi at gmail.com
Tue Oct 27 12:51:09 CET 2026


Hi,

FYI, your patch has been queued to stable release 24.11.9

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 10/29/26. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Queued patches are on a temporary branch at:
https://github.com/bluca/dpdk-stable

This queued commit can be viewed at:
https://github.com/bluca/dpdk-stable/commit/8d6c6275498f1eb202d5b77dce6aa1845e7524a8

Thanks.

Luca Boccassi

---
>From 8d6c6275498f1eb202d5b77dce6aa1845e7524a8 Mon Sep 17 00:00:00 2001
From: Shahaji Bhosle <shahaji.bhosle at broadcom.com>
Date: Mon, 5 Oct 2026 10:17:36 -0500
Subject: [PATCH] net/bnxt/tf_ulp: fix ICMP L3 protocol match

[ upstream commit b20213f5bb5474acfc5f2dcc2ab1d7a49f909b0d ]

Update the L3 protocol computed field for ICMPv4/ICMPv6 as well,
for the case where the flow rule matches on the ICMP header but not
on an explicit IP protocol field.

Fixes: a4d4308ef105 ("net/bnxt: add ICMPv6 parser to ULP")

Signed-off-by: Shahaji Bhosle <shahaji.bhosle at broadcom.com>
Signed-off-by: Manish Kurup <manish.kurup at broadcom.com>
---
 drivers/net/bnxt/tf_ulp/ulp_rte_parser.c | 50 +++++++++++++++++++-----
 1 file changed, 41 insertions(+), 9 deletions(-)

diff --git a/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c b/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c
index dd5985cd7bd..37b3cb0e984 100644
--- a/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c
+++ b/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c
@@ -1927,6 +1927,35 @@ ulp_rte_item_any_handler(const struct rte_flow_item *item __rte_unused,
 	return BNXT_TF_RC_SUCCESS;
 }
 
+/* Function to handle the update of proto header based on field values */
+static void
+ulp_rte_icmp_proto_type_update(struct ulp_rte_parser_params *params,
+			       enum bnxt_ulp_hdr_bit hdr_bit, uint8_t l3_proto)
+{
+	switch (hdr_bit) {
+	case BNXT_ULP_HDR_BIT_I_ICMP:
+		ULP_BITMAP_SET(params->hdr_bitmap.bits, hdr_bit);
+		ULP_COMP_FLD_IDX_WR(params,
+				    BNXT_ULP_CF_IDX_I_L3_FB_PROTO_ID,
+				    1);
+		ULP_COMP_FLD_IDX_WR(params,
+				    BNXT_ULP_CF_IDX_I_L3_PROTO_ID,
+				    l3_proto);
+		break;
+	case BNXT_ULP_HDR_BIT_O_ICMP:
+		ULP_BITMAP_SET(params->hdr_bitmap.bits, hdr_bit);
+		ULP_COMP_FLD_IDX_WR(params,
+				    BNXT_ULP_CF_IDX_O_L3_FB_PROTO_ID,
+				    1);
+		ULP_COMP_FLD_IDX_WR(params,
+				    BNXT_ULP_CF_IDX_O_L3_PROTO_ID,
+				    l3_proto);
+		break;
+	default:
+		break;
+	}
+}
+
 /* Function to handle the parsing of RTE Flow item ICMP Header. */
 int32_t
 ulp_rte_icmp_hdr_handler(const struct rte_flow_item *item,
@@ -1934,7 +1963,7 @@ ulp_rte_icmp_hdr_handler(const struct rte_flow_item *item,
 {
 	const struct rte_flow_item_icmp *icmp_spec = item->spec;
 	const struct rte_flow_item_icmp *icmp_mask = item->mask;
-	struct ulp_rte_hdr_bitmap *hdr_bitmap = &params->hdr_bitmap;
+	enum bnxt_ulp_hdr_bit out_l4 = BNXT_ULP_HDR_BIT_O_ICMP;
 	uint32_t idx = 0;
 	uint32_t size;
 
@@ -1977,11 +2006,12 @@ ulp_rte_icmp_hdr_handler(const struct rte_flow_item *item,
 			      ulp_deference_struct(icmp_mask, hdr.icmp_seq_nb),
 			      ULP_PRSR_ACT_DEFAULT);
 
-	/* Update the hdr_bitmap with ICMP */
 	if (ULP_BITMAP_ISSET(params->cf_bitmap, BNXT_ULP_CF_BIT_IS_TUNNEL))
-		ULP_BITMAP_SET(hdr_bitmap->bits, BNXT_ULP_HDR_BIT_I_ICMP);
-	else
-		ULP_BITMAP_SET(hdr_bitmap->bits, BNXT_ULP_HDR_BIT_O_ICMP);
+		out_l4 = BNXT_ULP_HDR_BIT_I_ICMP;
+
+	/* Update the hdr_bitmap with ICMP */
+	ulp_rte_icmp_proto_type_update(params, out_l4, IPPROTO_ICMP);
+
 	return BNXT_TF_RC_SUCCESS;
 }
 
@@ -1993,6 +2023,7 @@ ulp_rte_icmp6_hdr_handler(const struct rte_flow_item *item,
 	const struct rte_flow_item_icmp6 *icmp_spec = item->spec;
 	const struct rte_flow_item_icmp6 *icmp_mask = item->mask;
 	struct ulp_rte_hdr_bitmap *hdr_bitmap = &params->hdr_bitmap;
+	enum bnxt_ulp_hdr_bit out_l4 = BNXT_ULP_HDR_BIT_O_ICMP;
 	uint32_t idx = 0;
 	uint32_t size;
 
@@ -2028,11 +2059,12 @@ ulp_rte_icmp6_hdr_handler(const struct rte_flow_item *item,
 		return BNXT_TF_RC_ERROR;
 	}
 
-	/* Update the hdr_bitmap with ICMP */
 	if (ULP_BITMAP_ISSET(params->cf_bitmap, BNXT_ULP_CF_BIT_IS_TUNNEL))
-		ULP_BITMAP_SET(hdr_bitmap->bits, BNXT_ULP_HDR_BIT_I_ICMP);
-	else
-		ULP_BITMAP_SET(hdr_bitmap->bits, BNXT_ULP_HDR_BIT_O_ICMP);
+		out_l4 = BNXT_ULP_HDR_BIT_I_ICMP;
+
+	/* Update the hdr_bitmap with ICMP */
+	ulp_rte_icmp_proto_type_update(params, out_l4, IPPROTO_ICMPV6);
+
 	return BNXT_TF_RC_SUCCESS;
 }
 
-- 
2.47.3

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2026-10-27 11:44:00.427889069 +0000
+++ 0175-net-bnxt-tf_ulp-fix-ICMP-L3-protocol-match.patch	2026-10-27 11:43:53.762067125 +0000
@@ -1 +1 @@
-From b20213f5bb5474acfc5f2dcc2ab1d7a49f909b0d Mon Sep 17 00:00:00 2001
+From 8d6c6275498f1eb202d5b77dce6aa1845e7524a8 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit b20213f5bb5474acfc5f2dcc2ab1d7a49f909b0d ]
+
@@ -11 +12,0 @@
-Cc: stable at dpdk.org
@@ -20 +21 @@
-index 442a795430..fb1dc3f60a 100644
+index dd5985cd7bd..37b3cb0e984 100644
@@ -23 +24 @@
-@@ -1976,6 +1976,35 @@ ulp_rte_item_any_handler(const struct rte_flow_item *item __rte_unused,
+@@ -1927,6 +1927,35 @@ ulp_rte_item_any_handler(const struct rte_flow_item *item __rte_unused,
@@ -59 +60 @@
-@@ -1983,7 +2012,7 @@ ulp_rte_icmp_hdr_handler(const struct rte_flow_item *item,
+@@ -1934,7 +1963,7 @@ ulp_rte_icmp_hdr_handler(const struct rte_flow_item *item,
@@ -68 +69 @@
-@@ -2026,11 +2055,12 @@ ulp_rte_icmp_hdr_handler(const struct rte_flow_item *item,
+@@ -1977,11 +2006,12 @@ ulp_rte_icmp_hdr_handler(const struct rte_flow_item *item,
@@ -85 +86 @@
-@@ -2042,6 +2072,7 @@ ulp_rte_icmp6_hdr_handler(const struct rte_flow_item *item,
+@@ -1993,6 +2023,7 @@ ulp_rte_icmp6_hdr_handler(const struct rte_flow_item *item,
@@ -93 +94 @@
-@@ -2077,11 +2108,12 @@ ulp_rte_icmp6_hdr_handler(const struct rte_flow_item *item,
+@@ -2028,11 +2059,12 @@ ulp_rte_icmp6_hdr_handler(const struct rte_flow_item *item,


More information about the stable mailing list