[dpdk-users] order of 'segmented' UDP packets

Sofia Baran sofia.baran at gmx.net
Wed Sep 26 10:25:07 CEST 2018


when creating an UDP packet, I need to use two mbufs - one containing 
the UDP header (hdr) and another holding the payload (pay):

struct rte_mbuf* hdr = rte_pktmbuf_alloc(hdrmp);
struct rte_mbuf* pay = rte_pktmbuf_alloc(paymp);

// filling ether, IP, UDP header
ip_hdr->version_ihl = 0x40 | 0x05; // (*) without 0x05 order it ok

// setting sizes and linkage
hdr->data_len   = sizeof(struct ether_hdr) + sizeof(struct ipv4_hdr) + 
sizeof(struct udp_hdr);
pay->data_len   = payloadSize;

hdr->pkt_len    = hdr->data_len + pay->data_len;
pay->pkt_len    = hdr->pkt_len;

hdr->next       = pay;
hdr->nb_segs    = 2;

When sending plenty of such UDP packets using rte_eth_tx_burst(), all of 
them were sent correctly, but the sending order seems to be random. When 
using just a single mbuf for an UDP packet, the sending order is always 
the order of the packets in the tx array - which is what I expect. Using 
the header-payload-separation approach and omitting the IP header size 
info in the ip_hdr field - resulting in a wrong IP packet - the sending 
order gets ok.
I'm using the mlx5 PMD. Could it be some offload mechanisms, influencing 
the sending order? Maybe someone can help.

Thanks and best regards
Sofia Baran

More information about the users mailing list