In a couple of places in the memif driver [1][2] rte_pktmbuf_is_contiguous() [3] is being used to check whether there are more mbufs in the chain when sending packets. Problem is, rte_pktmbuf_is_contiguous() checks nb_segs in the mbuf, which, as far as I understand, is only set to the number of segments in the first mbuf in the chain. This results in truncated packets as usually, nb_segs is 1 in the mbufs other than the first. Replacing rte_pktmbuf_is_contiguous(mbuf) == 0 with mbuf->next != NULL fixes the issue. The problem has been observed while trying to use TRex traffic generator with VPP [4]. [1] http://code.dpdk.org/dpdk/v21.05/source/drivers/net/memif/rte_eth_memif.c#L660 [2] http://code.dpdk.org/dpdk/v21.05/source/drivers/net/memif/rte_eth_memif.c#L717 [3] http://code.dpdk.org/dpdk/v21.05/source/lib/mbuf/rte_mbuf.h#L1687 [4] https://github.com/cisco-system-traffic-generator/trex-core/issues/686
Downstream patch for TRex: https://github.com/cisco-system-traffic-generator/trex-core/pull/723
Hi Ivan, This patch makes sense to me, thanks for spotting it. Can you please submit it on the dev mailing list? +CC jgrajcia@cisco.com