[PATCH] gro: fix packet type comparisons

Morten Brørup mb at smartsharesystems.com
Sat Oct 17 19:02:21 CEST 2026


Identifying packet types requires masking with the mask, not the value,
before comparing to the value.

Fixes: 0d2cbe59b719 ("lib/gro: support TCP/IPv4")
Fixes: 9e0b9d2ec0f4 ("gro: support VxLAN GRO")
Fixes: 1ca5e6740852 ("gro: support UDP/IPv4")
Fixes: e2d811063673 ("gro: support VXLAN UDP/IPv4")
Cc: stable at dpdk.org

Signed-off-by: Morten Brørup <mb at smartsharesystems.com>
---
 lib/gro/rte_gro.c | 21 +++++++++------------
 1 file changed, 9 insertions(+), 12 deletions(-)

diff --git a/lib/gro/rte_gro.c b/lib/gro/rte_gro.c
index 578cc9b801..4f50b59322 100644
--- a/lib/gro/rte_gro.c
+++ b/lib/gro/rte_gro.c
@@ -35,26 +35,23 @@ static gro_tbl_pkt_count_fn tbl_pkt_count_fn[RTE_GRO_TYPE_MAX_NUM] = {
 			NULL};
 
 #define IS_IPV4_TCP_PKT(ptype) (RTE_ETH_IS_IPV4_HDR(ptype) && \
-		((ptype & RTE_PTYPE_L4_TCP) == RTE_PTYPE_L4_TCP) && \
-		((ptype & RTE_PTYPE_L4_FRAG) != RTE_PTYPE_L4_FRAG) && \
+		((ptype & RTE_PTYPE_L4_MASK) == RTE_PTYPE_L4_TCP) && \
 		(RTE_ETH_IS_TUNNEL_PKT(ptype) == 0))
 
 /* GRO with extension headers is not supported */
 #define IS_IPV6_TCP_PKT(ptype) (RTE_ETH_IS_IPV6_HDR(ptype) && \
-		((ptype & RTE_PTYPE_L4_TCP) == RTE_PTYPE_L4_TCP) && \
-		((ptype & RTE_PTYPE_L4_FRAG) != RTE_PTYPE_L4_FRAG) && \
+		((ptype & RTE_PTYPE_L4_MASK) == RTE_PTYPE_L4_TCP) && \
 		(RTE_ETH_IS_TUNNEL_PKT(ptype) == 0))
 
 #define IS_IPV4_UDP_PKT(ptype) (RTE_ETH_IS_IPV4_HDR(ptype) && \
-		((ptype & RTE_PTYPE_L4_UDP) == RTE_PTYPE_L4_UDP) && \
+		((ptype & RTE_PTYPE_L4_MASK) == RTE_PTYPE_L4_UDP) && \
 		(RTE_ETH_IS_TUNNEL_PKT(ptype) == 0))
 
 #define IS_IPV4_VXLAN_TCP4_PKT(ptype) (RTE_ETH_IS_IPV4_HDR(ptype) && \
-		((ptype & RTE_PTYPE_L4_UDP) == RTE_PTYPE_L4_UDP) && \
-		((ptype & RTE_PTYPE_L4_FRAG) != RTE_PTYPE_L4_FRAG) && \
-		((ptype & RTE_PTYPE_TUNNEL_VXLAN) == \
+		((ptype & RTE_PTYPE_L4_MASK) == RTE_PTYPE_L4_UDP) && \
+		((ptype & RTE_PTYPE_TUNNEL_MASK) == \
 		 RTE_PTYPE_TUNNEL_VXLAN) && \
-		((ptype & RTE_PTYPE_INNER_L4_TCP) == \
+		((ptype & RTE_PTYPE_INNER_L4_MASK) == \
 		 RTE_PTYPE_INNER_L4_TCP) && \
 		(((ptype & RTE_PTYPE_INNER_L3_MASK) == \
 		  RTE_PTYPE_INNER_L3_IPV4) || \
@@ -64,10 +61,10 @@ static gro_tbl_pkt_count_fn tbl_pkt_count_fn[RTE_GRO_TYPE_MAX_NUM] = {
 		  RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN)))
 
 #define IS_IPV4_VXLAN_UDP4_PKT(ptype) (RTE_ETH_IS_IPV4_HDR(ptype) && \
-		((ptype & RTE_PTYPE_L4_UDP) == RTE_PTYPE_L4_UDP) && \
-		((ptype & RTE_PTYPE_TUNNEL_VXLAN) == \
+		((ptype & RTE_PTYPE_L4_MASK) == RTE_PTYPE_L4_UDP) && \
+		((ptype & RTE_PTYPE_TUNNEL_MASK) == \
 		 RTE_PTYPE_TUNNEL_VXLAN) && \
-		((ptype & RTE_PTYPE_INNER_L4_UDP) == \
+		((ptype & RTE_PTYPE_INNER_L4_MASK) == \
 		 RTE_PTYPE_INNER_L4_UDP) && \
 		(((ptype & RTE_PTYPE_INNER_L3_MASK) == \
 		  RTE_PTYPE_INNER_L3_IPV4) || \
-- 
2.43.0



More information about the dev mailing list