gso: support VxLAN GSO
authorMark Kavanagh <mark.b.kavanagh@intel.com>
Sat, 7 Oct 2017 14:56:41 +0000 (22:56 +0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Thu, 12 Oct 2017 00:36:57 +0000 (01:36 +0100)
commitb058d92ea95d50c8ed3cde333c979cb367a97d15
tree82085bab17a68c52040ef345e4a508679ee7a912
parent119583797b6ae44990934d7b965e76463530ca7a
gso: support VxLAN GSO

This patch adds a framework that allows GSO on tunneled packets.
Furthermore, it leverages that framework to provide GSO support for
VxLAN-encapsulated packets.

Supported VxLAN packets must have an outer IPv4 header (prepended by an
optional VLAN tag), and contain an inner TCP/IPv4 packet (with an optional
inner VLAN tag).

VxLAN GSO doesn't check if input packets have correct checksums and
doesn't update checksums for output packets. Additionally, it doesn't
process IP fragmented packets.

As with TCP/IPv4 GSO, VxLAN GSO uses a two-segment MBUF to organize each
output packet, which mandates support for multi-segment mbufs in the TX
functions of the NIC driver. Also, if a packet is GSOed, VxLAN GSO
reduces its MBUF refcnt by 1. As a result, when all of its GSO'd segments
are freed, the packet is freed automatically.

Signed-off-by: Mark Kavanagh <mark.b.kavanagh@intel.com>
Signed-off-by: Jiayu Hu <jiayu.hu@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
doc/guides/rel_notes/release_17_11.rst
lib/librte_gso/Makefile
lib/librte_gso/gso_common.h
lib/librte_gso/gso_tunnel_tcp4.c [new file with mode: 0644]
lib/librte_gso/gso_tunnel_tcp4.h [new file with mode: 0644]
lib/librte_gso/rte_gso.c