[dpdk-dev,v5,1/2] ethdev: introduce generic IP/UDP tunnel checksum and TSO
Checks
Commit Message
This patch introduce new TX offload flags for device that supports
IP or UDP tunneled packet L3/L4 checksum and TSO offload.
It will be used for non-standard tunnels.
The support from the device is for inner and outer checksums on
IPV4/TCP/UDP and TSO for *any packet with the following format*:
<some headers> / [optional IPv4/IPv6] / [optional TCP/UDP] / <some
headers> / [optional inner IPv4/IPv6] / [optional TCP/UDP]
For example the following packets can use this feature:
1. eth / ipv4 / udp / VXLAN / ip / tcp
2. eth / ipv4 / GRE / MPLS / ipv4 / udp
Please note that specific tunnel headers that contain payload length,
sequence id or checksum will not be updated.
Signed-off-by: Xueming Li <xuemingl@mellanox.com>
Acked-by: Thomas Monjalon <thomas@monjalon.net>
---
lib/librte_ether/rte_ethdev.h | 12 ++++++++++++
lib/librte_mbuf/rte_mbuf.c | 6 ++++++
lib/librte_mbuf/rte_mbuf.h | 25 +++++++++++++++++++++++++
3 files changed, 43 insertions(+)
Comments
On 4/20/2018 2:06 PM, Xueming Li wrote:
> This patch introduce new TX offload flags for device that supports
> IP or UDP tunneled packet L3/L4 checksum and TSO offload.
> It will be used for non-standard tunnels.
>
> The support from the device is for inner and outer checksums on
> IPV4/TCP/UDP and TSO for *any packet with the following format*:
>
> <some headers> / [optional IPv4/IPv6] / [optional TCP/UDP] / <some
> headers> / [optional inner IPv4/IPv6] / [optional TCP/UDP]
>
> For example the following packets can use this feature:
>
> 1. eth / ipv4 / udp / VXLAN / ip / tcp
> 2. eth / ipv4 / GRE / MPLS / ipv4 / udp
>
> Please note that specific tunnel headers that contain payload length,
> sequence id or checksum will not be updated.
>
> Signed-off-by: Xueming Li <xuemingl@mellanox.com>
> Acked-by: Thomas Monjalon <thomas@monjalon.net>
It is getting messier! [1]
Hi Thomas,
Any suggestion on how to manage these rte_flow patches, we are late and they
aren't settle down yet. There are some level of dependency and there are some
uncertainty in some of the dependent patches because of ABI/API process.
It would be great to get them incremental or have a plan to how to proceed.
[1]
Previous version in this thread is following patches:
[PATCH v4 1/2] ethdev: add supported hash function check
[PATCH v4 2/2] app/testpmd: new parameter for port config all rss command
And this set is:
[PATCH v5 1/2] ethdev: introduce generic IP/UDP tunnel checksum and TSO
[PATCH v5 2/2] app/testpmd: testpmd support Tx generic tunnel offloads
But there is already v5 send for this set and in other thread there is v7 of it:
[PATCH v7 0/2] support Tx generic tunnel checksum and TSO
[PATCH v7 1/2] ethdev: introduce generic IP/UDP tunnel checksum and TSO
[PATCH v7 2/2] app/testpmd: testpmd support Tx generic tunnel offloads
Most probably you have intended to send another patchset here.
On 4/20/2018 2:48 PM, Ferruh Yigit wrote:
> On 4/20/2018 2:06 PM, Xueming Li wrote:
>> This patch introduce new TX offload flags for device that supports
>> IP or UDP tunneled packet L3/L4 checksum and TSO offload.
>> It will be used for non-standard tunnels.
>>
>> The support from the device is for inner and outer checksums on
>> IPV4/TCP/UDP and TSO for *any packet with the following format*:
>>
>> <some headers> / [optional IPv4/IPv6] / [optional TCP/UDP] / <some
>> headers> / [optional inner IPv4/IPv6] / [optional TCP/UDP]
>>
>> For example the following packets can use this feature:
>>
>> 1. eth / ipv4 / udp / VXLAN / ip / tcp
>> 2. eth / ipv4 / GRE / MPLS / ipv4 / udp
>>
>> Please note that specific tunnel headers that contain payload length,
>> sequence id or checksum will not be updated.
>>
>> Signed-off-by: Xueming Li <xuemingl@mellanox.com>
>> Acked-by: Thomas Monjalon <thomas@monjalon.net>
>
> It is getting messier! [1]
>
> Hi Thomas,
>
> Any suggestion on how to manage these rte_flow patches, we are late and they
> aren't settle down yet. There are some level of dependency and there are some
> uncertainty in some of the dependent patches because of ABI/API process.
>
> It would be great to get them incremental or have a plan to how to proceed.
Involved parties looks like following:
Xueming: Mellanox offloads for tunnel protocols.
Adrien: rte_flow improvements for rss?
Qi: rte_flow more protocol support?
Declan/Awal: TEP, port representor, using rte_flow?
Andrew: sfc PMD updates on top of rte_flow changes.
Gaetan: devargs, previously devargs dependency mentioned for some of above, not
sure that is still the case.
I am not clear of latest status above patches and their dependency with
eachother, are they in sync or not, it can be nice who know clarifies more.
>
>
> [1]
> Previous version in this thread is following patches:
> [PATCH v4 1/2] ethdev: add supported hash function check
> [PATCH v4 2/2] app/testpmd: new parameter for port config all rss command
>
> And this set is:
> [PATCH v5 1/2] ethdev: introduce generic IP/UDP tunnel checksum and TSO
> [PATCH v5 2/2] app/testpmd: testpmd support Tx generic tunnel offloads
>
> But there is already v5 send for this set and in other thread there is v7 of it:
> [PATCH v7 0/2] support Tx generic tunnel checksum and TSO
> [PATCH v7 1/2] ethdev: introduce generic IP/UDP tunnel checksum and TSO
> [PATCH v7 2/2] app/testpmd: testpmd support Tx generic tunnel offloads
>
> Most probably you have intended to send another patchset here.
>
Hi Ferruh,
> -----Original Message-----
> From: Ferruh Yigit <ferruh.yigit@intel.com>
> Sent: Friday, April 20, 2018 9:48 PM
> To: Xueming(Steven) Li <xuemingl@mellanox.com>; Shahaf Shuler <shahafs@mellanox.com>; Nelio Laranjeiro
> <notifications@github.com>; Wenzhuo Lu <wenzhuo.lu@intel.com>; Jingjing Wu <jingjing.wu@intel.com>;
> Thomas Monjalon <thomas@monjalon.net>; Adrien Mazarguil <adrien.mazarguil@6wind.com>
> Cc: dev@dpdk.org
> Subject: Re: [dpdk-dev] [PATCH v5 1/2] ethdev: introduce generic IP/UDP tunnel checksum and TSO
>
> On 4/20/2018 2:06 PM, Xueming Li wrote:
> > This patch introduce new TX offload flags for device that supports IP
> > or UDP tunneled packet L3/L4 checksum and TSO offload.
> > It will be used for non-standard tunnels.
> >
> > The support from the device is for inner and outer checksums on
> > IPV4/TCP/UDP and TSO for *any packet with the following format*:
> >
> > <some headers> / [optional IPv4/IPv6] / [optional TCP/UDP] / <some
> > headers> / [optional inner IPv4/IPv6] / [optional TCP/UDP]
> >
> > For example the following packets can use this feature:
> >
> > 1. eth / ipv4 / udp / VXLAN / ip / tcp 2. eth / ipv4 / GRE / MPLS /
> > ipv4 / udp
> >
> > Please note that specific tunnel headers that contain payload length,
> > sequence id or checksum will not be updated.
> >
> > Signed-off-by: Xueming Li <xuemingl@mellanox.com>
> > Acked-by: Thomas Monjalon <thomas@monjalon.net>
>
> It is getting messier! [1]
>
> Hi Thomas,
>
> Any suggestion on how to manage these rte_flow patches, we are late and they aren't settle down yet.
> There are some level of dependency and there are some uncertainty in some of the dependent patches
> because of ABI/API process.
>
> It would be great to get them incremental or have a plan to how to proceed.
>
>
> [1]
> Previous version in this thread is following patches:
> [PATCH v4 1/2] ethdev: add supported hash function check [PATCH v4 2/2] app/testpmd: new parameter for
> port config all rss command
>
> And this set is:
> [PATCH v5 1/2] ethdev: introduce generic IP/UDP tunnel checksum and TSO [PATCH v5 2/2] app/testpmd:
> testpmd support Tx generic tunnel offloads
My bad, I was using wrong branch to format v5 of this thread, will resend, sorry for confusion.
>
> But there is already v5 send for this set and in other thread there is v7 of it:
> [PATCH v7 0/2] support Tx generic tunnel checksum and TSO [PATCH v7 1/2] ethdev: introduce generic
> IP/UDP tunnel checksum and TSO [PATCH v7 2/2] app/testpmd: testpmd support Tx generic tunnel offloads
>
> Most probably you have intended to send another patchset here.
Correct.
@@ -980,6 +980,18 @@ struct rte_eth_conf {
* the same mempool and has refcnt = 1.
*/
#define DEV_TX_OFFLOAD_SECURITY 0x00020000
+/**
+ * Device supports generic UDP tunneled packet TSO.
+ * Application must set PKT_TX_TUNNEL_UDP and other mbuf fields required
+ * for tunnel TSO.
+ */
+#define DEV_TX_OFFLOAD_UDP_TNL_TSO 0x00040000
+/**
+ * Device supports generic IP tunneled packet TSO.
+ * Application must set PKT_TX_TUNNEL_IP and other mbuf fields required
+ * for tunnel TSO.
+ */
+#define DEV_TX_OFFLOAD_IP_TNL_TSO 0x00080000
/*
* If new Tx offload capabilities are defined, they also must be
@@ -390,6 +390,8 @@ const char *rte_get_tx_ol_flag_name(uint64_t mask)
case PKT_TX_TUNNEL_IPIP: return "PKT_TX_TUNNEL_IPIP";
case PKT_TX_TUNNEL_GENEVE: return "PKT_TX_TUNNEL_GENEVE";
case PKT_TX_TUNNEL_MPLSINUDP: return "PKT_TX_TUNNEL_MPLSINUDP";
+ case PKT_TX_TUNNEL_IP: return "PKT_TX_TUNNEL_IP";
+ case PKT_TX_TUNNEL_UDP: return "PKT_TX_TUNNEL_UDP";
case PKT_TX_MACSEC: return "PKT_TX_MACSEC";
case PKT_TX_SEC_OFFLOAD: return "PKT_TX_SEC_OFFLOAD";
default: return NULL;
@@ -424,6 +426,10 @@ rte_get_tx_ol_flag_list(uint64_t mask, char *buf, size_t buflen)
"PKT_TX_TUNNEL_NONE" },
{ PKT_TX_TUNNEL_MPLSINUDP, PKT_TX_TUNNEL_MASK,
"PKT_TX_TUNNEL_NONE" },
+ { PKT_TX_TUNNEL_IP, PKT_TX_TUNNEL_MASK,
+ "PKT_TX_TUNNEL_NONE" },
+ { PKT_TX_TUNNEL_UDP, PKT_TX_TUNNEL_MASK,
+ "PKT_TX_TUNNEL_NONE" },
{ PKT_TX_MACSEC, PKT_TX_MACSEC, NULL },
{ PKT_TX_SEC_OFFLOAD, PKT_TX_SEC_OFFLOAD, NULL },
};
@@ -210,6 +210,31 @@ extern "C" {
#define PKT_TX_TUNNEL_GENEVE (0x4ULL << 45)
/**< TX packet with MPLS-in-UDP RFC 7510 header. */
#define PKT_TX_TUNNEL_MPLSINUDP (0x5ULL << 45)
+/**
+ * Generic IP encapsulated tunnel type, used for TSO and checksum offload.
+ * It can be used for tunnels which are not standards or listed above.
+ * It is preferred to use specific tunnel flags like PKT_TX_TUNNEL_GRE
+ * or PKT_TX_TUNNEL_IPIP if possible.
+ * The ethdev must be configured with DEV_TX_OFFLOAD_IP_TNL_TSO.
+ * Outer and inner checksums are done according to the existing flags like
+ * PKT_TX_xxx_CKSUM.
+ * Specific tunnel headers that contain payload length, sequence id
+ * or checksum are not expected to be updated.
+ */
+#define PKT_TX_TUNNEL_IP (0xDULL << 45)
+/**
+ * Generic UDP encapsulated tunnel type, used for TSO and checksum offload.
+ * UDP tunnel type implies outer IP layer.
+ * It can be used for tunnels which are not standards or listed above.
+ * It is preferred to use specific tunnel flags like PKT_TX_TUNNEL_GRE
+ * or PKT_TX_TUNNEL_IPIP if possible.
+ * The ethdev must be configured with DEV_TX_OFFLOAD_UDP_TNL_TSO.
+ * Outer and inner checksums are done according to the existing flags like
+ * PKT_TX_xxx_CKSUM.
+ * Specific tunnel headers that contain payload length, sequence id
+ * or checksum are not expected to be updated.
+ */
+#define PKT_TX_TUNNEL_UDP (0xEULL << 45)
/* add new TX TUNNEL type here */
#define PKT_TX_TUNNEL_MASK (0xFULL << 45)