Hi Param, > -----Original Message----- > From: Thomas Monjalon <tho...@monjalon.net> > Sent: Thursday, June 9, 2022 4:11 PM > To: Hu, Jiayu <jiayu...@intel.com> > Cc: dev@dpdk.org; olivier.m...@6wind.com; krag...@vmware.com; > kumaraparameshwaran rathinavel <kumaraparames...@gmail.com> > Subject: Re: UDP-GRO not working > > Jiayu, please could you comment the explanation below? > > > 10/03/2022 13:52, kumaraparameshwaran rathinavel: > > Hi , > > > > I tried using the UDP GRO feature in DPDK recently and it did not see > > working. I understand the GRO for UDP is applicable only for > > fragmented packets, there is the following check in gro_udp4.c > > /* > > * Don't process non-fragment packet. > > */ > > if (!is_ipv4_fragment(ipv4_hdr)) > > return -1; > > > > > > There looks to be some conflict in the definition of RTE_PTYPE in > > rte_mbuf_ptype.h and the usage of this in GRO layer, rte_gro.c > > > > The below are the definitions, > > > > #define RTE_PTYPE_L4_TCP 0x00000100 > > #define RTE_PTYPE_L4_UDP 0x00000200 > > #define RTE_PTYPE_L4_FRAG 0x00000300 > > > > Below is the check in GRO layer, > > > > #define IS_IPV4_TCP_PKT(ptype) (RTE_ETH_IS_IPV4_HDR(ptype) && \ > > ((ptype & RTE_PTYPE_L4_TCP) == 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) && \ > > (RTE_ETH_IS_TUNNEL_PKT(ptype) == 0)) > > > > So, for a fragmented UDP packet both RTE_PTYPE_L4_TCP & > > RTE_PTYPE_L4_UDP would be set and the GRO layer would be unable to > > interpret the packet type correctly.
Yes, it's an issue. IS_IPV4_TCP_PKT will recognize a UDP/IPv4 fragment as a TCP/IPv4 packet, and the packet will not go into any UDP based gro function. Thanks for pointing that out. Thanks, Jiayu > > > > I am using rte_net_get_ptype API before the packet is being sent to > > the GRO subsystem as the DPDK PMD for the NIC I am using would not set > > the packet types as required by the GRO subsystem. > > > > I would like to contribute a patch for this bug if this indeed is an > > issue, I was thinking if the GRO subsystem is L4 fragmented then in > > the GRO layer invoked the appropriate handler, either > > gro_tcp4_reassemble or gro_ud4_reassemble. > > > > Please let me know if I am missing something here. > > > > Thanks, > > Param. > > > > > >