gso: support UDP/IPv4 fragmentation
authorJiayu Hu <jiayu.hu@intel.com>
Fri, 6 Jul 2018 01:02:22 +0000 (09:02 +0800)
committerThomas Monjalon <thomas@monjalon.net>
Wed, 11 Jul 2018 21:45:20 +0000 (23:45 +0200)
commitb166d4f30b667b054bdd8bd1cbf30610061f8cc0
treec6b1018f9138e12c61bf2ada31a55de7d75e4766
parentf28f3594ded2a55cf8ab15995ffc4f0b9e9eda55
gso: support UDP/IPv4 fragmentation

This patch adds GSO support for UDP/IPv4 packets. Supported packets
may include a single VLAN tag. UDP/IPv4 GSO doesn't check if input
packets have correct checksums, and doesn't update checksums for
output packets (the responsibility for this lies with the application).
Additionally, UDP/IPv4 GSO doesn't process IP fragmented packets.

UDP/IPv4 GSO uses two chained MBUFs, one direct MBUF and one indrect
MBUF, to organize an output packet. The direct MBUF stores the packet
header, while the indirect mbuf simply points to a location within the
original packet's payload. Consequently, use of UDP GSO requires
multi-segment MBUF support in the TX functions of the NIC driver.

If a packet is GSO'd, UDP/IPv4 GSO reduces its MBUF refcnt by 1. As a
result, when all of its GSOed segments are freed, the packet is freed
automatically.

Signed-off-by: Jiayu Hu <jiayu.hu@intel.com>
Acked-by: Xiao Wang <xiao.w.wang@intel.com>
lib/librte_gso/Makefile
lib/librte_gso/gso_common.h
lib/librte_gso/gso_udp4.c [new file with mode: 0644]
lib/librte_gso/gso_udp4.h [new file with mode: 0644]
lib/librte_gso/meson.build
lib/librte_gso/rte_gso.c
lib/librte_gso/rte_gso.h