[dpdk-dev] [PATCH v3] i40: fix the VXLAN TSO issue
Tan, Jianfeng
jianfeng.tan at intel.com
Fri Jul 29 12:11:10 CEST 2016
> -----Original Message-----
> From: Ananyev, Konstantin
> Sent: Friday, July 29, 2016 4:46 PM
> To: Tan, Jianfeng; dev at dpdk.org
> Cc: Wu, Jingjing
> Subject: RE: [dpdk-dev] [PATCH v3] i40: fix the VXLAN TSO issue
>
> Hi Jianfeng,
>
> >
> > Hi,
> >
> > On 7/18/2016 7:56 PM, Zhe Tao wrote:
> > > Problem:
> > > When using the TSO + VXLAN feature in i40e, the outer UDP length
> > > fields in the multiple UDP segments which are TSOed by the i40e will
> > > have a wrong value.
> > >
> > > Fix this problem by adding the tunnel type field in the i40e
> > > descriptor which was missed before.
> > >
> > > Fixes: 77b8301733c3 ("i40e: VXLAN Tx checksum offload")
> > >
> > > Signed-off-by: Zhe Tao <zhe.tao at intel.com>
> > > ---
> > > v2: edited the comments
> > > v3: added external IP offload flag when TSO is enabled for tunnelling
> > > packets
> > >
> > > app/test-pmd/csumonly.c | 29 +++++++++++++++++++++--------
> > > drivers/net/i40e/i40e_rxtx.c | 12 +++++++++---
> > > lib/librte_mbuf/rte_mbuf.h | 16 +++++++++++++++-
> > > 3 files changed, 45 insertions(+), 12 deletions(-)
> > >
> > ...
> > > diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h
> > > index 15e3a10..90812ea 100644
> > > --- a/lib/librte_mbuf/rte_mbuf.h
> > > +++ b/lib/librte_mbuf/rte_mbuf.h
> > > @@ -133,6 +133,17 @@ extern "C" {
> > > /* add new TX flags here */
> > >
> > > /**
> > > + * Bits 45:48 used for the tunnel type.
> > > + * When doing Tx offload like TSO or checksum, the HW needs to
> > > +configure the
> > > + * tunnel type into the HW descriptors.
> > > + */
> > > +#define PKT_TX_TUNNEL_VXLAN (1ULL << 45)
> > > +#define PKT_TX_TUNNEL_GRE (2ULL << 45)
> > > +#define PKT_TX_TUNNEL_IPIP (3ULL << 45)
> > > +/* add new TX TUNNEL type here */
> > > +#define PKT_TX_TUNNEL_MASK (0xFULL << 45)
> > > +
> >
> > Above flag bits are added so that i40e driver can tell tunnel type of this
> packet (udp or gre or ipip), just interested to know how about just do
> > a simple analysis like below without introducing these flags?
> >
> > if outer_ether.proto == ipv4
> > l4_proto = ipv4_hdr->next_proto;
> > else outer_ether.proto == ipv6
> > l4_proto = ipv6_hdr->next_proto;
> >
> > switch (l4_proto)
> > case ipv4:
> > case ipv6:
> > tunnel_type = ipip;
> > break;
> > case udp:
> > tunnel_type = udp;
> > break;
> > case gre:
> > tunnel_type = gre;
> > break;
> > default:
> > error;
>
> Right now none of our PMDs reads/writes actual packet data,
> and I think it is better to keep it that way.
> It is an upper layer responsibility to specify which offload
> needs to be enabled and provide necessary information.
> Konstantin
Make sense. I'll send out v4 as the original way later.
Thanks,
Jianfeng
More information about the dev
mailing list