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?
"


Reply via email to