On 5/3/22 07:22, Pankaj Gupta wrote:
The packet type is set even if it is a fragmented packet
I'm wondering if is really IPv4/IPv6 fragmented packets or just scattered on Rx across many Rx buffers. I'm asking since fragmented sounds weird with TCP, since TCP spec forbids fragmentation.
Tested, using testpmd, for different hardware versions on ESXi 7.0 Update 2. Signed-off-by: Pankaj Gupta <pagu...@vmware.com> --- drivers/net/vmxnet3/vmxnet3_rxtx.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/drivers/net/vmxnet3/vmxnet3_rxtx.c b/drivers/net/vmxnet3/vmxnet3_rxtx.c index a6665fbf70..5e177400c0 100644 --- a/drivers/net/vmxnet3/vmxnet3_rxtx.c +++ b/drivers/net/vmxnet3/vmxnet3_rxtx.c @@ -759,6 +759,23 @@ vmxnet3_rx_offload(struct vmxnet3_hw *hw, const Vmxnet3_RxCompDesc *rcd, /* Check packet type, checksum errors, etc. */ if (rcd->cnc) { ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_UNKNOWN; + + if (rcd->v4) { + packet_type |= RTE_PTYPE_L3_IPV4_EXT_UNKNOWN; + if (rcd->tcp) + packet_type |= RTE_PTYPE_L4_TCP; + else if (rcd->udp) + packet_type |= RTE_PTYPE_L4_UDP; + } else if (rcd->v6) { + packet_type |= RTE_PTYPE_L3_IPV6_EXT_UNKNOWN; + if (rcd->tcp) + packet_type |= RTE_PTYPE_L4_TCP; + else if (rcd->udp) + packet_type |= RTE_PTYPE_L4_UDP; + } else { + packet_type |= RTE_PTYPE_UNKNOWN; + } + } else { if (rcd->v4) { packet_type |= RTE_PTYPE_L3_IPV4_EXT_UNKNOWN;