We have recently upgraded to DPDK 18.08 version. After upgrading to the latest version observing issue with UDP packets transmission errors for few packets ( UDP size 736 bytes) .With older version of DPDK we never faced this issue.
Attaching the filtered tcpdump which shows "Bad UDP length > IP payload length" for one such packet.
No issue observed while transferring UDP packets with size 28 bytes and 48 bytes. I tried to print the packet length calculation in my program just before sending it out to the Kernel using rte_kni_tx_burst. The packet length calculation seems correct to me.
1.) size_udp:48 sizeof(struct udp_hdr):8 size_ApplMsg:40 udphdr->dgram_len:12288 m->data_len:82 size_ip:68 l2_data_shift:14
2.) size_udp:28 sizeof(struct udp_hdr):8 size_ApplMsg:20 udphdr->dgram_len:7168 m->data_len:62 ip->total_length:12288 size_ip:48 l2_data_shift:14
*** Packets with UDP size 736 are not getting transmitted to the receiving end and getting dropped.
3.) size_udp:736 sizeof(struct udp_hdr):8 size_ApplMsg:728 udphdr->dgram_len:57346 m->data_len:770 size_ip:756 l2_data_shift:14
Also MTU is set to 1500 in my program. So it shouldn't be an issue to transfer 736 bytes UDP data which is less than 1500 bytes MTU.
Looks like the kernel is dropping this packet.
So I tried to increase the kernel buffer size but that didn't help.
netstat -su -> output shows 0 send/receive buffer errors.
What has changed in DPDK 18.08 with respect to UDP packets? Please suggest if I need to consider tuning udp ( using new DPDK API ) , offloading udp traffic(new offload flags) to resolve this issue.