X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=doc%2Fguides%2Fprog_guide%2Fgeneric_segmentation_offload_lib.rst;h=e605b863764221b452d71b9947572829cef73cb0;hb=6cc51b1293ceac4a77d4bf7ac91a8bbd59e1f78c;hp=0cfc1198cd45a1f5c8387727fd90423c0a2b7609;hpb=250c9eb3ca895127f21a729caf4a928eb2f04d2c;p=dpdk.git diff --git a/doc/guides/prog_guide/generic_segmentation_offload_lib.rst b/doc/guides/prog_guide/generic_segmentation_offload_lib.rst index 0cfc1198cd..e605b86376 100644 --- a/doc/guides/prog_guide/generic_segmentation_offload_lib.rst +++ b/doc/guides/prog_guide/generic_segmentation_offload_lib.rst @@ -25,8 +25,9 @@ Bearing that in mind, the GSO library enables DPDK applications to segment packets in software. Note however, that GSO is implemented as a standalone library, and not via a 'fallback' mechanism (i.e. for when TSO is unsupported in the underlying hardware); that is, applications must explicitly invoke the -GSO library to segment packets. The size of GSO segments ``(segsz)`` is -configurable by the application. +GSO library to segment packets, they also must call ``rte_pktmbuf_free()`` +to free mbuf GSO segments attached after calling ``rte_gso_segment()``. +The size of GSO segments (``segsz``) is configurable by the application. Limitations ----------- @@ -44,8 +45,8 @@ Limitations - TCP - UDP - - VxLAN - - GRE + - VXLAN + - GRE TCP See `Supported GSO Packet Types`_ for further details. @@ -156,14 +157,14 @@ does not modify it during segmentation. Therefore, after UDP GSO, only the first output packet has the original UDP header, and others just have l2 and l3 headers. -VxLAN GSO -~~~~~~~~~ -VxLAN packets GSO supports segmentation of suitably large VxLAN packets, -which contain an outer IPv4 header, inner TCP/IPv4 headers, and optional -inner and/or outer VLAN tag(s). +VXLAN IPv4 GSO +~~~~~~~~~~~~~~ +VXLAN packets GSO supports segmentation of suitably large VXLAN packets, +which contain an outer IPv4 header, inner TCP/IPv4 or UDP/IPv4 headers, and +optional inner and/or outer VLAN tag(s). -GRE GSO -~~~~~~~ +GRE TCP/IPv4 GSO +~~~~~~~~~~~~~~~~ GRE GSO supports segmentation of suitably large GRE packets, which contain an outer IPv4 header, inner TCP/IPv4 headers, and an optional VLAN tag. @@ -193,11 +194,11 @@ To segment an outgoing packet, an application must: - the bit mask of required GSO types. The GSO library uses the same macros as those that describe a physical device's TX offloading capabilities (i.e. - ``DEV_TX_OFFLOAD_*_TSO``) for gso_types. For example, if an application + ``RTE_ETH_TX_OFFLOAD_*_TSO``) for gso_types. For example, if an application wants to segment TCP/IPv4 packets, it should set gso_types to - ``DEV_TX_OFFLOAD_TCP_TSO``. The only other supported values currently - supported for gso_types are ``DEV_TX_OFFLOAD_VXLAN_TNL_TSO``, and - ``DEV_TX_OFFLOAD_GRE_TNL_TSO``; a combination of these macros is also + ``RTE_ETH_TX_OFFLOAD_TCP_TSO``. The only other supported values currently + supported for gso_types are ``RTE_ETH_TX_OFFLOAD_VXLAN_TNL_TSO``, and + ``RTE_ETH_TX_OFFLOAD_GRE_TNL_TSO``; a combination of these macros is also allowed. - a flag, that indicates whether the IPv4 headers of output segments should @@ -206,15 +207,15 @@ To segment an outgoing packet, an application must: 2. Set the appropriate ol_flags in the mbuf. - The GSO library use the value of an mbuf's ``ol_flags`` attribute to - to determine how a packet should be segmented. It is the application's + determine how a packet should be segmented. It is the application's responsibility to ensure that these flags are set. - For example, in order to segment TCP/IPv4 packets, the application should - add the ``PKT_TX_IPV4`` and ``PKT_TX_TCP_SEG`` flags to the mbuf's + add the ``RTE_MBUF_F_TX_IPV4`` and ``RTE_MBUF_F_TX_TCP_SEG`` flags to the mbuf's ol_flags. - If checksum calculation in hardware is required, the application should - also add the ``PKT_TX_TCP_CKSUM`` and ``PKT_TX_IP_CKSUM`` flags. + also add the ``RTE_MBUF_F_TX_TCP_CKSUM`` and ``RTE_MBUF_F_TX_IP_CKSUM`` flags. #. Check if the packet should be processed. Packets with one of the following properties are not processed and are returned immediately: @@ -233,8 +234,9 @@ To segment an outgoing packet, an application must: #. Invoke the GSO segmentation API, ``rte_gso_segment()``. +#. Call ``rte_pktmbuf_free()`` to free mbuf ``rte_gso_segment()`` segments. + #. If required, update the L3 and L4 checksums of the newly-created segments. For tunneled packets, the outer IPv4 headers' checksums should also be updated. Alternatively, the application may offload checksum calculation to HW. -