17/10/2026 19:02, Morten Brørup: > Identifying packet types requires masking with the mask, not the value, > before comparing to the value. [...] > #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_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) && \
My AI is not happy: " The UDP checks introduce a regression. gro_udp4_reassemble() only processes IPv4 fragments, but the new comparison: (ptype & RTE_PTYPE_L4_MASK) == RTE_PTYPE_L4_UDP rejects packets marked RTE_PTYPE_L4_FRAG. The previous check accepted them because RTE_PTYPE_L4_FRAG is 0x300 and RTE_PTYPE_L4_UDP is 0x200. The same applies to IS_IPV4_VXLAN_UDP4_PKT(): requiring an exact match against RTE_PTYPE_INNER_L4_UDP excludes inner fragments, which are precisely what gro_vxlan_udp4_reassemble() processes. Could you preserve fragment handling in both UDP checks and add regression tests? "

