[dpdk-dev] [PATCH 4/6] ethdev: introduce TX common tunnel offloads
Xueming(Steven) Li
xuemingl at mellanox.com
Tue Jan 16 18:28:55 CET 2018
Hi Olivier,
Thanks for looking into this.
> -----Original Message-----
> From: Olivier Matz [mailto:olivier.matz at 6wind.com]
> Sent: Wednesday, January 17, 2018 1:10 AM
> To: Xueming(Steven) Li <xuemingl at mellanox.com>
> Cc: Thomas Monjalon <thomas at monjalon.net>; Jingjing Wu
> <jingjing.wu at intel.com>; Yongseok Koh <yskoh at mellanox.com>; Shahaf Shuler
> <shahafs at mellanox.com>; dev at dpdk.org
> Subject: Re: [PATCH 4/6] ethdev: introduce TX common tunnel offloads
>
> Hi Xueming,
>
> On Tue, Jan 09, 2018 at 10:11:08PM +0800, Xueming Li wrote:
> > This patch introduce new DEV_TX_OFFLOAD_GENERIC_TNL_CKSUM_TSO flag for
> > devices that support tunnel agnostic TX checksum and tso offloading.
> >
> > Checksum offset and TSO header length are calculated based on mbuf
> > inner length l*_len, outer_l*_len and tx offload flags PKT_TX_*,
> > tunnel header length is part of inner l2_len, so device HW do cheksum
> > and TSO calculation w/o knowledge of perticular tunnel type.
> >
> > When set application must guarantee that correct header types and
> > lengths for each inner and outer headers in mbuf header, no need to
> > specify tunnel type.
> >
> > Signed-off-by: Xueming Li <xuemingl at mellanox.com>
> > ---
> > lib/librte_ether/rte_ethdev.h | 9 +++++++++
> > 1 file changed, 9 insertions(+)
> >
> > diff --git a/lib/librte_ether/rte_ethdev.h
> > b/lib/librte_ether/rte_ethdev.h index 57b61ed41..8457d01be 100644
> > --- a/lib/librte_ether/rte_ethdev.h
> > +++ b/lib/librte_ether/rte_ethdev.h
> > @@ -1003,6 +1003,15 @@ struct rte_eth_conf {
> > * the same mempool and has refcnt = 1.
> > */
> > #define DEV_TX_OFFLOAD_SECURITY 0x00020000
> > +/**< Device supports arbitrary tunnel chksum and tso offloading w/o
> knowing
> > + * tunnel detail. Checksum and TSO are calculated based on mbuf
> fields:
> > + * l*_len, outer_l*_len
> > + * PKT_TX_OUTER_IPV6, PKT_TX_IPV6
> > + * PKT_TX_IP_CKSUM, PKT_TX_TCP_CKSUM, PKT_TX_UDP_CKSUM
> > + * When set application must guarantee correct header fields, no need
> to
> > + * specify tunnel type PKT_TX_TUNNEL_* for HW.
> > + */
> > +#define DEV_TX_OFFLOAD_GENERIC_TNL_CKSUM_TSO 0x00040000
> >
> > struct rte_pci_device;
> >
>
> I'd like to have more details about this flag and its meaning.
>
> Let's say we want to do TSO on the following vxlan packet:
> Ether / IP1 / UDP / VXLAN / Ether / IP2 / TCP / Data
>
> With the current API, we need to pass the tunnel type to the hardware with
> the flag PKT_TX_TUNNEL_VXLAN. Thanks to that, the driver can forward this
> information to the hardware so it knows that the
> ip1->length, udp->length and optionally the udp->chksum have to be
> updated for each generated segment.
>
> With your proposal, if I understand properly, it is not expected to pass
> the tunnel type in the mbuf. So how can the hardware know if some fields
> have to be updated in the outer header?
I'm not expert on hardware, the driver has to supply outer and inner
L3/L4 offsets, types and which field(s) to fill checksum, no length update
as far as I know.
More information about the dev
mailing list