numam-dpdk/lib
Jiayu Hu ec51443cc9 gso: add Generic Segmentation Offload API framework
Generic Segmentation Offload (GSO) is a SW technique to split large
packets into small ones. Akin to TSO, GSO enables applications to
operate on large packets, thus reducing per-packet processing overhead.

To enable more flexibility to applications, DPDK GSO is implemented
as a standalone library. Applications explicitly use the GSO library
to segment packets. To segment a packet requires two steps. The first
is to set proper flags to mbuf->ol_flags, where the flags are the same
as that of TSO. The second is to call the segmentation API,
rte_gso_segment(). This patch introduces the GSO API framework to DPDK.

rte_gso_segment() splits an input packet into small ones in each
invocation. The GSO library refers to these small packets generated
by rte_gso_segment() as GSO segments. Each of the newly-created GSO
segments is organized as a two-segment MBUF, where the first segment is a
standard MBUF, which stores a copy of packet header, and the second is an
indirect MBUF which points to a section of data in the input packet.
rte_gso_segment() reduces the refcnt of the input packet by 1. Therefore,
when all GSO segments are freed, the input packet is freed automatically.
Additionally, since each GSO segment has multiple MBUFs (i.e. 2 MBUFs),
the driver of the interface which the GSO segments are sent to should
support to transmit multi-segment packets.

The GSO framework clears the PKT_TX_TCP_SEG flag for both the input
packet, and all produced GSO segments in the event of success, since
segmentation in hardware is no longer required at that point.

Signed-off-by: Jiayu Hu <jiayu.hu@intel.com>
Signed-off-by: Mark Kavanagh <mark.b.kavanagh@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
2017-10-12 01:36:57 +01:00
..
librte_acl lib: remove duplicate includes 2017-07-16 17:30:06 +02:00
librte_bitratestats ethdev: increase port id range 2017-10-06 18:23:25 +02:00
librte_cfgfile cfgfile: rework load function 2017-10-09 00:50:48 +02:00
librte_cmdline cmdline: fix compilation with -Og 2017-10-06 02:49:50 +02:00
librte_compat
librte_cryptodev cryptodev: fix C11 extensions in exported header 2017-08-05 01:18:21 +02:00
librte_distributor lib: remove duplicate includes 2017-07-16 17:30:06 +02:00
librte_eal bus: ignore scan and probe failures 2017-10-12 00:29:06 +02:00
librte_efd update Cavium Inc copyright headers 2017-07-08 17:43:49 +02:00
librte_ether xen: remove dependency in libraries 2017-10-09 01:52:08 +02:00
librte_eventdev eventdev: add eth Rx adapter implementation 2017-10-10 18:34:09 +02:00
librte_gro gro: fix typo in map file 2017-08-31 23:02:54 +02:00
librte_gso gso: add Generic Segmentation Offload API framework 2017-10-12 01:36:57 +01:00
librte_hash hash: optimize Toeplitz RSS computation 2017-10-07 13:50:43 +02:00
librte_ip_frag ip_frag: rename map file to standardized name 2017-08-31 23:02:57 +02:00
librte_jobstats jobstats: fix a doxygen comment 2017-10-08 22:22:08 +02:00
librte_kni ethdev: increase port id range 2017-10-06 18:23:25 +02:00
librte_kvargs
librte_latencystats ethdev: increase port id range 2017-10-06 18:23:25 +02:00
librte_lpm lib: remove duplicate includes 2017-07-16 17:30:06 +02:00
librte_mbuf eal: allow user to override default mempool driver 2017-10-06 20:48:22 +02:00
librte_member member: add AVX for HT mode 2017-10-09 00:02:45 +02:00
librte_mempool mem: remove API to get physical address in dom0 2017-10-09 01:52:37 +02:00
librte_meter
librte_metrics metrics: fix compilation with -Og 2017-10-06 02:49:50 +02:00
librte_net net: fix inner L2 length in packet type parser 2017-10-05 23:34:45 +02:00
librte_pdump ethdev: increase port id range 2017-10-06 18:23:25 +02:00
librte_pipeline
librte_port ethdev: increase port id range 2017-10-06 18:23:25 +02:00
librte_power power: add send channel msg function to map file 2017-10-12 00:46:11 +01:00
librte_reorder
librte_ring ring: increase maximum ring size 2017-10-05 23:23:12 +02:00
librte_sched
librte_table update Cavium Inc copyright headers 2017-07-08 17:43:49 +02:00
librte_timer timer: use 64-bit specific code on more platforms 2017-10-11 22:59:31 +02:00
librte_vhost vhost: fix false-positive warning from clang 5 2017-10-11 13:56:34 +02:00
Makefile gso: add Generic Segmentation Offload API framework 2017-10-12 01:36:57 +01:00