Re: [dpdk-dev] [PATCH v3] ethdev: add IPv4 and L4 checksum RSS offload types
From: Zhang, Qi Z <hidden>
Date: 2021-06-16 15:18:13
-----Original Message----- From: Jerin Jacob <redacted> Sent: Tuesday, June 15, 2021 4:26 PM To: Zhang, AlvinX <redacted> Cc: Zhang, Qi Z <redacted>; Andrew Rybchenko [off-list ref]; Ajit Khaparde [off-list ref]; dpdk-dev [off-list ref] Subject: Re: [dpdk-dev] [PATCH v3] ethdev: add IPv4 and L4 checksum RSS offload types On Tue, Jun 15, 2021 at 1:50 PM Alvin Zhang [off-list ref] wrote:quoted
This patch defines new RSS offload types for IPv4 and L4 checksum, which are required when users want to distribute packets based on the IPv4 or L4 checksum field.What is the usecase for distribution based on L4/IPv4 checksum? Is it something like HW has the feature so expose it or there is some real use case for this application?
This is for real use case, some research by using TCP checksum for FDIR on ixgbe. https://hsadok.com/papers/sprayer-hotnets18.pdf and we are looking for similar solution in ice, and checksum RSS is the feature we need to have.
quoted
For example "flow create 0 ingress pattern eth / ipv4 / end actions rss types ipv4-chksum end queues end / end", this flow causes all matching packets to be distributed to queues on basis of IPv4 checksum. Signed-off-by: Alvin Zhang <redacted> Reviewed-by: Andrew Rybchenko <redacted> Acked-by: Ajit Khaparde <ajit.khaparde@broadcom.com> --- v3: Add L4 checksum RSS offload type --- app/test-pmd/cmdline.c | 4 ++++ app/test-pmd/config.c | 2 ++ lib/ethdev/rte_ethdev.h | 2 ++ 3 files changed, 8 insertions(+)diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index0268b18..6148d84 100644--- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c@@ -2254,6 +2254,10 @@ struct cmd_config_rss { rss_conf.rss_hf = ETH_RSS_ECPRI; else if (!strcmp(res->value, "mpls")) rss_conf.rss_hf = ETH_RSS_MPLS; + else if (!strcmp(res->value, "ipv4-chksum")) + rss_conf.rss_hf = ETH_RSS_IPV4_CHKSUM; + else if (!strcmp(res->value, "l4-chksum")) + rss_conf.rss_hf = ETH_RSS_L4_CHKSUM; else if (!strcmp(res->value, "none")) rss_conf.rss_hf = 0; else if (!strcmp(res->value, "level-default")) { diff --gita/app/test-pmd/config.c b/app/test-pmd/config.c index 43c79b5..14968bf 100644--- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c@@ -140,6 +140,8 @@ { "gtpu", ETH_RSS_GTPU }, { "ecpri", ETH_RSS_ECPRI }, { "mpls", ETH_RSS_MPLS }, + { "ipv4-chksum", ETH_RSS_IPV4_CHKSUM }, + { "l4-chksum", ETH_RSS_L4_CHKSUM }, { NULL, 0 }, };diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h indexfaf3bd9..1268729 100644--- a/lib/ethdev/rte_ethdev.h +++ b/lib/ethdev/rte_ethdev.h@@ -537,6 +537,8 @@ struct rte_eth_rss_conf { #define ETH_RSS_PPPOE (1ULL << 31) #define ETH_RSS_ECPRI (1ULL << 32) #define ETH_RSS_MPLS (1ULL << 33) +#define ETH_RSS_IPV4_CHKSUM (1ULL << 34) +#define ETH_RSS_L4_CHKSUM (1ULL << 35) /* * We use the following macros to combine with above ETH_RSS_* for --1.8.3.1