[v2,1/2] ethdev: extend RSS offload types

Message ID 1569247539-101249-2-git-send-email-simei.su@intel.com (mailing list archive)
State Superseded, archived
Delegated to: Ferruh Yigit
Headers
Series extend RSS offload types |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK
ci/iol-dpdk_compile_ovs success Compile Testing PASS
ci/iol-dpdk_compile_spdk success Compile Testing PASS
ci/iol-dpdk_compile success Compile Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS

Commit Message

Simei Su Sept. 23, 2019, 2:05 p.m. UTC
  This patch cover two aspects:
  (1)decouple RTE_ETH_FLOW_* and ETH_RSS_*. Because both serve
     different purposes.

  (2)reserve several bits as input set selection from bottom
     of the 64 bits. It is combined with exisiting ETH_RSS_* to
     represent rss types.

  for example:
    ETH_RSS_IPV4 | ETH_RSS_L3_SRC_ONLY: hash on src ip address only
    ETH_RSS_IPV4_UDP | ETH_RSS_L4_DST_ONLY: hash on src/dst IP and
                                            dst UDP port
    ETH_RSS_L2_PAYLOAD | ETH_RSS_L2_DST_ONLY: hash on dst mac address

Signed-off-by: Simei Su <simei.su@intel.com>
---
 lib/librte_ethdev/rte_ethdev.h | 60 ++++++++++++++++++++++++------------------
 1 file changed, 35 insertions(+), 25 deletions(-)
  

Comments

Xiaolong Ye Sept. 25, 2019, 10:27 a.m. UTC | #1
On 09/23, Simei Su wrote:
>This patch cover two aspects:
>  (1)decouple RTE_ETH_FLOW_* and ETH_RSS_*. Because both serve
>     different purposes.

I saw in the comment of flow types definition 

"Note that the flow types are used to define RSS offload types".

We need to remove it if we do the decouple to avoid confusion.

>
>  (2)reserve several bits as input set selection from bottom
>     of the 64 bits. It is combined with exisiting ETH_RSS_* to
>     represent rss types.
>
>  for example:
>    ETH_RSS_IPV4 | ETH_RSS_L3_SRC_ONLY: hash on src ip address only
>    ETH_RSS_IPV4_UDP | ETH_RSS_L4_DST_ONLY: hash on src/dst IP and
>                                            dst UDP port
>    ETH_RSS_L2_PAYLOAD | ETH_RSS_L2_DST_ONLY: hash on dst mac address
>
>Signed-off-by: Simei Su <simei.su@intel.com>
>---
> lib/librte_ethdev/rte_ethdev.h | 60 ++++++++++++++++++++++++------------------
> 1 file changed, 35 insertions(+), 25 deletions(-)
>
>diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
>index d987178..7e6530d 100644
>--- a/lib/librte_ethdev/rte_ethdev.h
>+++ b/lib/librte_ethdev/rte_ethdev.h
>@@ -482,31 +482,41 @@ struct rte_eth_rss_conf {
> #define RTE_ETH_FLOW_MAX                23
> 
> /*
>- * The RSS offload types are defined based on flow types.
>- * Different NIC hardware may support different RSS offload
>- * types. The supported flow types or RSS offload types can be queried by
>- * rte_eth_dev_info_get().
>- */
>-#define ETH_RSS_IPV4               (1ULL << RTE_ETH_FLOW_IPV4)
>-#define ETH_RSS_FRAG_IPV4          (1ULL << RTE_ETH_FLOW_FRAG_IPV4)
>-#define ETH_RSS_NONFRAG_IPV4_TCP   (1ULL << RTE_ETH_FLOW_NONFRAG_IPV4_TCP)
>-#define ETH_RSS_NONFRAG_IPV4_UDP   (1ULL << RTE_ETH_FLOW_NONFRAG_IPV4_UDP)
>-#define ETH_RSS_NONFRAG_IPV4_SCTP  (1ULL << RTE_ETH_FLOW_NONFRAG_IPV4_SCTP)
>-#define ETH_RSS_NONFRAG_IPV4_OTHER (1ULL << RTE_ETH_FLOW_NONFRAG_IPV4_OTHER)
>-#define ETH_RSS_IPV6               (1ULL << RTE_ETH_FLOW_IPV6)
>-#define ETH_RSS_FRAG_IPV6          (1ULL << RTE_ETH_FLOW_FRAG_IPV6)
>-#define ETH_RSS_NONFRAG_IPV6_TCP   (1ULL << RTE_ETH_FLOW_NONFRAG_IPV6_TCP)
>-#define ETH_RSS_NONFRAG_IPV6_UDP   (1ULL << RTE_ETH_FLOW_NONFRAG_IPV6_UDP)
>-#define ETH_RSS_NONFRAG_IPV6_SCTP  (1ULL << RTE_ETH_FLOW_NONFRAG_IPV6_SCTP)
>-#define ETH_RSS_NONFRAG_IPV6_OTHER (1ULL << RTE_ETH_FLOW_NONFRAG_IPV6_OTHER)
>-#define ETH_RSS_L2_PAYLOAD         (1ULL << RTE_ETH_FLOW_L2_PAYLOAD)
>-#define ETH_RSS_IPV6_EX            (1ULL << RTE_ETH_FLOW_IPV6_EX)
>-#define ETH_RSS_IPV6_TCP_EX        (1ULL << RTE_ETH_FLOW_IPV6_TCP_EX)
>-#define ETH_RSS_IPV6_UDP_EX        (1ULL << RTE_ETH_FLOW_IPV6_UDP_EX)
>-#define ETH_RSS_PORT               (1ULL << RTE_ETH_FLOW_PORT)
>-#define ETH_RSS_VXLAN              (1ULL << RTE_ETH_FLOW_VXLAN)
>-#define ETH_RSS_GENEVE             (1ULL << RTE_ETH_FLOW_GENEVE)
>-#define ETH_RSS_NVGRE              (1ULL << RTE_ETH_FLOW_NVGRE)
>+ * Below macros are defined for RSS offload types, they can be used to
>+ * fill rte_eth_rss_conf.rss_hf or rte_flow_action_rss.types.
>+ */
>+#define ETH_RSS_IPV4               (1ULL << 2)
>+#define ETH_RSS_FRAG_IPV4          (1ULL << 3)
>+#define ETH_RSS_NONFRAG_IPV4_TCP   (1ULL << 4)
>+#define ETH_RSS_NONFRAG_IPV4_UDP   (1ULL << 5)
>+#define ETH_RSS_NONFRAG_IPV4_SCTP  (1ULL << 6)
>+#define ETH_RSS_NONFRAG_IPV4_OTHER (1ULL << 7)
>+#define ETH_RSS_IPV6               (1ULL << 8)
>+#define ETH_RSS_FRAG_IPV6          (1ULL << 9)
>+#define ETH_RSS_NONFRAG_IPV6_TCP   (1ULL << 10)
>+#define ETH_RSS_NONFRAG_IPV6_UDP   (1ULL << 11)
>+#define ETH_RSS_NONFRAG_IPV6_SCTP  (1ULL << 12)
>+#define ETH_RSS_NONFRAG_IPV6_OTHER (1ULL << 13)
>+#define ETH_RSS_L2_PAYLOAD         (1ULL << 14)
>+#define ETH_RSS_IPV6_EX            (1ULL << 15)
>+#define ETH_RSS_IPV6_TCP_EX        (1ULL << 16)
>+#define ETH_RSS_IPV6_UDP_EX        (1ULL << 17)
>+#define ETH_RSS_PORT               (1ULL << 18)
>+#define ETH_RSS_VXLAN              (1ULL << 19)
>+#define ETH_RSS_GENEVE             (1ULL << 20)
>+#define ETH_RSS_NVGRE              (1ULL << 21)
>+
>+/*
>+ * We use the following macros to combine with above ETH_RSS_* for
>+ * more specific input set selection. These bits are defined starting
>+ * from the bottom of the 64 bits.

s/bottom/high end/

>+ */
>+#define	ETH_RSS_L2_SRC_ONLY	   (1ULL << 63)
>+#define	ETH_RSS_L2_DST_ONLY	   (1ULL << 62)
>+#define	ETH_RSS_L3_SRC_ONLY	   (1ULL << 61)
>+#define	ETH_RSS_L3_DST_ONLY	   (1ULL << 60)
>+#define	ETH_RSS_L4_SRC_ONLY	   (1ULL << 59)
>+#define	ETH_RSS_L4_DST_ONLY	   (1ULL << 58)

Keep one space after #define to be aligned with other MACRO definition.

Thanks,
Xiaolong

> 
> #define ETH_RSS_IP ( \
> 	ETH_RSS_IPV4 | \
>-- 
>1.8.3.1
>
  
Xiaolong Ye Sept. 25, 2019, 10:49 a.m. UTC | #2
On 09/23, Simei Su wrote:
>This patch cover two aspects:
>  (1)decouple RTE_ETH_FLOW_* and ETH_RSS_*. Because both serve
>     different purposes.
>
>  (2)reserve several bits as input set selection from bottom
>     of the 64 bits. It is combined with exisiting ETH_RSS_* to
>     represent rss types.
>
>  for example:
>    ETH_RSS_IPV4 | ETH_RSS_L3_SRC_ONLY: hash on src ip address only
>    ETH_RSS_IPV4_UDP | ETH_RSS_L4_DST_ONLY: hash on src/dst IP and
>                                            dst UDP port
>    ETH_RSS_L2_PAYLOAD | ETH_RSS_L2_DST_ONLY: hash on dst mac address

We also need to document well about what happens if users just set ETH_RSS_IPV4,
both both src/dst ip still are taken into account, right? 

Thanks,
Xiaolong


>
>Signed-off-by: Simei Su <simei.su@intel.com>
>---
> lib/librte_ethdev/rte_ethdev.h | 60 ++++++++++++++++++++++++------------------
> 1 file changed, 35 insertions(+), 25 deletions(-)
>
>diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
>index d987178..7e6530d 100644
>--- a/lib/librte_ethdev/rte_ethdev.h
>+++ b/lib/librte_ethdev/rte_ethdev.h
>@@ -482,31 +482,41 @@ struct rte_eth_rss_conf {
> #define RTE_ETH_FLOW_MAX                23
> 
> /*
>- * The RSS offload types are defined based on flow types.
>- * Different NIC hardware may support different RSS offload
>- * types. The supported flow types or RSS offload types can be queried by
>- * rte_eth_dev_info_get().
>- */
>-#define ETH_RSS_IPV4               (1ULL << RTE_ETH_FLOW_IPV4)
>-#define ETH_RSS_FRAG_IPV4          (1ULL << RTE_ETH_FLOW_FRAG_IPV4)
>-#define ETH_RSS_NONFRAG_IPV4_TCP   (1ULL << RTE_ETH_FLOW_NONFRAG_IPV4_TCP)
>-#define ETH_RSS_NONFRAG_IPV4_UDP   (1ULL << RTE_ETH_FLOW_NONFRAG_IPV4_UDP)
>-#define ETH_RSS_NONFRAG_IPV4_SCTP  (1ULL << RTE_ETH_FLOW_NONFRAG_IPV4_SCTP)
>-#define ETH_RSS_NONFRAG_IPV4_OTHER (1ULL << RTE_ETH_FLOW_NONFRAG_IPV4_OTHER)
>-#define ETH_RSS_IPV6               (1ULL << RTE_ETH_FLOW_IPV6)
>-#define ETH_RSS_FRAG_IPV6          (1ULL << RTE_ETH_FLOW_FRAG_IPV6)
>-#define ETH_RSS_NONFRAG_IPV6_TCP   (1ULL << RTE_ETH_FLOW_NONFRAG_IPV6_TCP)
>-#define ETH_RSS_NONFRAG_IPV6_UDP   (1ULL << RTE_ETH_FLOW_NONFRAG_IPV6_UDP)
>-#define ETH_RSS_NONFRAG_IPV6_SCTP  (1ULL << RTE_ETH_FLOW_NONFRAG_IPV6_SCTP)
>-#define ETH_RSS_NONFRAG_IPV6_OTHER (1ULL << RTE_ETH_FLOW_NONFRAG_IPV6_OTHER)
>-#define ETH_RSS_L2_PAYLOAD         (1ULL << RTE_ETH_FLOW_L2_PAYLOAD)
>-#define ETH_RSS_IPV6_EX            (1ULL << RTE_ETH_FLOW_IPV6_EX)
>-#define ETH_RSS_IPV6_TCP_EX        (1ULL << RTE_ETH_FLOW_IPV6_TCP_EX)
>-#define ETH_RSS_IPV6_UDP_EX        (1ULL << RTE_ETH_FLOW_IPV6_UDP_EX)
>-#define ETH_RSS_PORT               (1ULL << RTE_ETH_FLOW_PORT)
>-#define ETH_RSS_VXLAN              (1ULL << RTE_ETH_FLOW_VXLAN)
>-#define ETH_RSS_GENEVE             (1ULL << RTE_ETH_FLOW_GENEVE)
>-#define ETH_RSS_NVGRE              (1ULL << RTE_ETH_FLOW_NVGRE)
>+ * Below macros are defined for RSS offload types, they can be used to
>+ * fill rte_eth_rss_conf.rss_hf or rte_flow_action_rss.types.
>+ */
>+#define ETH_RSS_IPV4               (1ULL << 2)
>+#define ETH_RSS_FRAG_IPV4          (1ULL << 3)
>+#define ETH_RSS_NONFRAG_IPV4_TCP   (1ULL << 4)
>+#define ETH_RSS_NONFRAG_IPV4_UDP   (1ULL << 5)
>+#define ETH_RSS_NONFRAG_IPV4_SCTP  (1ULL << 6)
>+#define ETH_RSS_NONFRAG_IPV4_OTHER (1ULL << 7)
>+#define ETH_RSS_IPV6               (1ULL << 8)
>+#define ETH_RSS_FRAG_IPV6          (1ULL << 9)
>+#define ETH_RSS_NONFRAG_IPV6_TCP   (1ULL << 10)
>+#define ETH_RSS_NONFRAG_IPV6_UDP   (1ULL << 11)
>+#define ETH_RSS_NONFRAG_IPV6_SCTP  (1ULL << 12)
>+#define ETH_RSS_NONFRAG_IPV6_OTHER (1ULL << 13)
>+#define ETH_RSS_L2_PAYLOAD         (1ULL << 14)
>+#define ETH_RSS_IPV6_EX            (1ULL << 15)
>+#define ETH_RSS_IPV6_TCP_EX        (1ULL << 16)
>+#define ETH_RSS_IPV6_UDP_EX        (1ULL << 17)
>+#define ETH_RSS_PORT               (1ULL << 18)
>+#define ETH_RSS_VXLAN              (1ULL << 19)
>+#define ETH_RSS_GENEVE             (1ULL << 20)
>+#define ETH_RSS_NVGRE              (1ULL << 21)
>+
>+/*
>+ * We use the following macros to combine with above ETH_RSS_* for
>+ * more specific input set selection. These bits are defined starting
>+ * from the bottom of the 64 bits.
>+ */
>+#define	ETH_RSS_L2_SRC_ONLY	   (1ULL << 63)
>+#define	ETH_RSS_L2_DST_ONLY	   (1ULL << 62)
>+#define	ETH_RSS_L3_SRC_ONLY	   (1ULL << 61)
>+#define	ETH_RSS_L3_DST_ONLY	   (1ULL << 60)
>+#define	ETH_RSS_L4_SRC_ONLY	   (1ULL << 59)
>+#define	ETH_RSS_L4_DST_ONLY	   (1ULL << 58)
> 
> #define ETH_RSS_IP ( \
> 	ETH_RSS_IPV4 | \
>-- 
>1.8.3.1
>
  
Simei Su Sept. 25, 2019, noon UTC | #3
Hi, xiaolong

> -----Original Message-----
> From: Ye, Xiaolong
> Sent: Wednesday, September 25, 2019 6:50 PM
> To: Su, Simei <simei.su@intel.com>
> Cc: Zhang, Qi Z <qi.z.zhang@intel.com>; Wu, Jingjing <jingjing.wu@intel.com>;
> dev@dpdk.org
> Subject: Re: [PATCH v2 1/2] ethdev: extend RSS offload types
> 
> On 09/23, Simei Su wrote:
> >This patch cover two aspects:
> >  (1)decouple RTE_ETH_FLOW_* and ETH_RSS_*. Because both serve
> >     different purposes.
> >
> >  (2)reserve several bits as input set selection from bottom
> >     of the 64 bits. It is combined with exisiting ETH_RSS_* to
> >     represent rss types.
> >
> >  for example:
> >    ETH_RSS_IPV4 | ETH_RSS_L3_SRC_ONLY: hash on src ip address only
> >    ETH_RSS_IPV4_UDP | ETH_RSS_L4_DST_ONLY: hash on src/dst IP and
> >                                            dst UDP port
> >    ETH_RSS_L2_PAYLOAD | ETH_RSS_L2_DST_ONLY: hash on dst mac
> address
> 
> We also need to document well about what happens if users just set
> ETH_RSS_IPV4, both both src/dst ip still are taken into account, right?
> 

  Yes, when users set ETH_RSS_IPV4, both src and dst ip are taken into account.
  I will add this example. Thanks!

> Thanks,
> Xiaolong
> 
> 
> >
> >Signed-off-by: Simei Su <simei.su@intel.com>
> >---
> > lib/librte_ethdev/rte_ethdev.h | 60
> >++++++++++++++++++++++++------------------
> > 1 file changed, 35 insertions(+), 25 deletions(-)
> >
> >diff --git a/lib/librte_ethdev/rte_ethdev.h
> >b/lib/librte_ethdev/rte_ethdev.h index d987178..7e6530d 100644
> >--- a/lib/librte_ethdev/rte_ethdev.h
> >+++ b/lib/librte_ethdev/rte_ethdev.h
> >@@ -482,31 +482,41 @@ struct rte_eth_rss_conf {
> > #define RTE_ETH_FLOW_MAX                23
> >
> > /*
> >- * The RSS offload types are defined based on flow types.
> >- * Different NIC hardware may support different RSS offload
> >- * types. The supported flow types or RSS offload types can be queried
> >by
> >- * rte_eth_dev_info_get().
> >- */
> >-#define ETH_RSS_IPV4               (1ULL << RTE_ETH_FLOW_IPV4)
> >-#define ETH_RSS_FRAG_IPV4          (1ULL <<
> RTE_ETH_FLOW_FRAG_IPV4)
> >-#define ETH_RSS_NONFRAG_IPV4_TCP   (1ULL <<
> RTE_ETH_FLOW_NONFRAG_IPV4_TCP)
> >-#define ETH_RSS_NONFRAG_IPV4_UDP   (1ULL <<
> RTE_ETH_FLOW_NONFRAG_IPV4_UDP)
> >-#define ETH_RSS_NONFRAG_IPV4_SCTP  (1ULL <<
> >RTE_ETH_FLOW_NONFRAG_IPV4_SCTP) -#define
> ETH_RSS_NONFRAG_IPV4_OTHER (1ULL <<
> RTE_ETH_FLOW_NONFRAG_IPV4_OTHER)
> >-#define ETH_RSS_IPV6               (1ULL << RTE_ETH_FLOW_IPV6)
> >-#define ETH_RSS_FRAG_IPV6          (1ULL <<
> RTE_ETH_FLOW_FRAG_IPV6)
> >-#define ETH_RSS_NONFRAG_IPV6_TCP   (1ULL <<
> RTE_ETH_FLOW_NONFRAG_IPV6_TCP)
> >-#define ETH_RSS_NONFRAG_IPV6_UDP   (1ULL <<
> RTE_ETH_FLOW_NONFRAG_IPV6_UDP)
> >-#define ETH_RSS_NONFRAG_IPV6_SCTP  (1ULL <<
> >RTE_ETH_FLOW_NONFRAG_IPV6_SCTP) -#define
> ETH_RSS_NONFRAG_IPV6_OTHER (1ULL <<
> RTE_ETH_FLOW_NONFRAG_IPV6_OTHER)
> >-#define ETH_RSS_L2_PAYLOAD         (1ULL <<
> RTE_ETH_FLOW_L2_PAYLOAD)
> >-#define ETH_RSS_IPV6_EX            (1ULL << RTE_ETH_FLOW_IPV6_EX)
> >-#define ETH_RSS_IPV6_TCP_EX        (1ULL <<
> RTE_ETH_FLOW_IPV6_TCP_EX)
> >-#define ETH_RSS_IPV6_UDP_EX        (1ULL <<
> RTE_ETH_FLOW_IPV6_UDP_EX)
> >-#define ETH_RSS_PORT               (1ULL << RTE_ETH_FLOW_PORT)
> >-#define ETH_RSS_VXLAN              (1ULL << RTE_ETH_FLOW_VXLAN)
> >-#define ETH_RSS_GENEVE             (1ULL << RTE_ETH_FLOW_GENEVE)
> >-#define ETH_RSS_NVGRE              (1ULL << RTE_ETH_FLOW_NVGRE)
> >+ * Below macros are defined for RSS offload types, they can be used to
> >+ * fill rte_eth_rss_conf.rss_hf or rte_flow_action_rss.types.
> >+ */
> >+#define ETH_RSS_IPV4               (1ULL << 2)
> >+#define ETH_RSS_FRAG_IPV4          (1ULL << 3)
> >+#define ETH_RSS_NONFRAG_IPV4_TCP   (1ULL << 4)
> >+#define ETH_RSS_NONFRAG_IPV4_UDP   (1ULL << 5)
> >+#define ETH_RSS_NONFRAG_IPV4_SCTP  (1ULL << 6) #define
> >+ETH_RSS_NONFRAG_IPV4_OTHER (1ULL << 7)
> >+#define ETH_RSS_IPV6               (1ULL << 8)
> >+#define ETH_RSS_FRAG_IPV6          (1ULL << 9)
> >+#define ETH_RSS_NONFRAG_IPV6_TCP   (1ULL << 10)
> >+#define ETH_RSS_NONFRAG_IPV6_UDP   (1ULL << 11)
> >+#define ETH_RSS_NONFRAG_IPV6_SCTP  (1ULL << 12) #define
> >+ETH_RSS_NONFRAG_IPV6_OTHER (1ULL << 13)
> >+#define ETH_RSS_L2_PAYLOAD         (1ULL << 14)
> >+#define ETH_RSS_IPV6_EX            (1ULL << 15)
> >+#define ETH_RSS_IPV6_TCP_EX        (1ULL << 16)
> >+#define ETH_RSS_IPV6_UDP_EX        (1ULL << 17)
> >+#define ETH_RSS_PORT               (1ULL << 18)
> >+#define ETH_RSS_VXLAN              (1ULL << 19)
> >+#define ETH_RSS_GENEVE             (1ULL << 20)
> >+#define ETH_RSS_NVGRE              (1ULL << 21)
> >+
> >+/*
> >+ * We use the following macros to combine with above ETH_RSS_* for
> >+ * more specific input set selection. These bits are defined starting
> >+ * from the bottom of the 64 bits.
> >+ */
> >+#define	ETH_RSS_L2_SRC_ONLY	   (1ULL << 63)
> >+#define	ETH_RSS_L2_DST_ONLY	   (1ULL << 62)
> >+#define	ETH_RSS_L3_SRC_ONLY	   (1ULL << 61)
> >+#define	ETH_RSS_L3_DST_ONLY	   (1ULL << 60)
> >+#define	ETH_RSS_L4_SRC_ONLY	   (1ULL << 59)
> >+#define	ETH_RSS_L4_DST_ONLY	   (1ULL << 58)
> >
> > #define ETH_RSS_IP ( \
> > 	ETH_RSS_IPV4 | \
> >--
> >1.8.3.1
> >
  
Simei Su Sept. 25, 2019, 12:04 p.m. UTC | #4
Hi, xiaolong

> -----Original Message-----
> From: Ye, Xiaolong
> Sent: Wednesday, September 25, 2019 6:28 PM
> To: Su, Simei <simei.su@intel.com>
> Cc: Zhang, Qi Z <qi.z.zhang@intel.com>; Wu, Jingjing <jingjing.wu@intel.com>;
> dev@dpdk.org
> Subject: Re: [PATCH v2 1/2] ethdev: extend RSS offload types
> 
> On 09/23, Simei Su wrote:
> >This patch cover two aspects:
> >  (1)decouple RTE_ETH_FLOW_* and ETH_RSS_*. Because both serve
> >     different purposes.
> 
> I saw in the comment of flow types definition
> 
> "Note that the flow types are used to define RSS offload types".
> 
> We need to remove it if we do the decouple to avoid confusion.
> 
  Ok, I will remove it.

> >
> >  (2)reserve several bits as input set selection from bottom
> >     of the 64 bits. It is combined with exisiting ETH_RSS_* to
> >     represent rss types.
> >
> >  for example:
> >    ETH_RSS_IPV4 | ETH_RSS_L3_SRC_ONLY: hash on src ip address only
> >    ETH_RSS_IPV4_UDP | ETH_RSS_L4_DST_ONLY: hash on src/dst IP and
> >                                            dst UDP port
> >    ETH_RSS_L2_PAYLOAD | ETH_RSS_L2_DST_ONLY: hash on dst mac
> address
> >
> >Signed-off-by: Simei Su <simei.su@intel.com>
> >---
> > lib/librte_ethdev/rte_ethdev.h | 60
> >++++++++++++++++++++++++------------------
> > 1 file changed, 35 insertions(+), 25 deletions(-)
> >
> >diff --git a/lib/librte_ethdev/rte_ethdev.h
> >b/lib/librte_ethdev/rte_ethdev.h index d987178..7e6530d 100644
> >--- a/lib/librte_ethdev/rte_ethdev.h
> >+++ b/lib/librte_ethdev/rte_ethdev.h
> >@@ -482,31 +482,41 @@ struct rte_eth_rss_conf {
> > #define RTE_ETH_FLOW_MAX                23
> >
> > /*
> >- * The RSS offload types are defined based on flow types.
> >- * Different NIC hardware may support different RSS offload
> >- * types. The supported flow types or RSS offload types can be queried
> >by
> >- * rte_eth_dev_info_get().
> >- */
> >-#define ETH_RSS_IPV4               (1ULL << RTE_ETH_FLOW_IPV4)
> >-#define ETH_RSS_FRAG_IPV4          (1ULL <<
> RTE_ETH_FLOW_FRAG_IPV4)
> >-#define ETH_RSS_NONFRAG_IPV4_TCP   (1ULL <<
> RTE_ETH_FLOW_NONFRAG_IPV4_TCP)
> >-#define ETH_RSS_NONFRAG_IPV4_UDP   (1ULL <<
> RTE_ETH_FLOW_NONFRAG_IPV4_UDP)
> >-#define ETH_RSS_NONFRAG_IPV4_SCTP  (1ULL <<
> >RTE_ETH_FLOW_NONFRAG_IPV4_SCTP) -#define
> ETH_RSS_NONFRAG_IPV4_OTHER (1ULL <<
> RTE_ETH_FLOW_NONFRAG_IPV4_OTHER)
> >-#define ETH_RSS_IPV6               (1ULL << RTE_ETH_FLOW_IPV6)
> >-#define ETH_RSS_FRAG_IPV6          (1ULL <<
> RTE_ETH_FLOW_FRAG_IPV6)
> >-#define ETH_RSS_NONFRAG_IPV6_TCP   (1ULL <<
> RTE_ETH_FLOW_NONFRAG_IPV6_TCP)
> >-#define ETH_RSS_NONFRAG_IPV6_UDP   (1ULL <<
> RTE_ETH_FLOW_NONFRAG_IPV6_UDP)
> >-#define ETH_RSS_NONFRAG_IPV6_SCTP  (1ULL <<
> >RTE_ETH_FLOW_NONFRAG_IPV6_SCTP) -#define
> ETH_RSS_NONFRAG_IPV6_OTHER (1ULL <<
> RTE_ETH_FLOW_NONFRAG_IPV6_OTHER)
> >-#define ETH_RSS_L2_PAYLOAD         (1ULL <<
> RTE_ETH_FLOW_L2_PAYLOAD)
> >-#define ETH_RSS_IPV6_EX            (1ULL << RTE_ETH_FLOW_IPV6_EX)
> >-#define ETH_RSS_IPV6_TCP_EX        (1ULL <<
> RTE_ETH_FLOW_IPV6_TCP_EX)
> >-#define ETH_RSS_IPV6_UDP_EX        (1ULL <<
> RTE_ETH_FLOW_IPV6_UDP_EX)
> >-#define ETH_RSS_PORT               (1ULL << RTE_ETH_FLOW_PORT)
> >-#define ETH_RSS_VXLAN              (1ULL << RTE_ETH_FLOW_VXLAN)
> >-#define ETH_RSS_GENEVE             (1ULL << RTE_ETH_FLOW_GENEVE)
> >-#define ETH_RSS_NVGRE              (1ULL << RTE_ETH_FLOW_NVGRE)
> >+ * Below macros are defined for RSS offload types, they can be used to
> >+ * fill rte_eth_rss_conf.rss_hf or rte_flow_action_rss.types.
> >+ */
> >+#define ETH_RSS_IPV4               (1ULL << 2)
> >+#define ETH_RSS_FRAG_IPV4          (1ULL << 3)
> >+#define ETH_RSS_NONFRAG_IPV4_TCP   (1ULL << 4)
> >+#define ETH_RSS_NONFRAG_IPV4_UDP   (1ULL << 5)
> >+#define ETH_RSS_NONFRAG_IPV4_SCTP  (1ULL << 6) #define
> >+ETH_RSS_NONFRAG_IPV4_OTHER (1ULL << 7)
> >+#define ETH_RSS_IPV6               (1ULL << 8)
> >+#define ETH_RSS_FRAG_IPV6          (1ULL << 9)
> >+#define ETH_RSS_NONFRAG_IPV6_TCP   (1ULL << 10)
> >+#define ETH_RSS_NONFRAG_IPV6_UDP   (1ULL << 11)
> >+#define ETH_RSS_NONFRAG_IPV6_SCTP  (1ULL << 12) #define
> >+ETH_RSS_NONFRAG_IPV6_OTHER (1ULL << 13)
> >+#define ETH_RSS_L2_PAYLOAD         (1ULL << 14)
> >+#define ETH_RSS_IPV6_EX            (1ULL << 15)
> >+#define ETH_RSS_IPV6_TCP_EX        (1ULL << 16)
> >+#define ETH_RSS_IPV6_UDP_EX        (1ULL << 17)
> >+#define ETH_RSS_PORT               (1ULL << 18)
> >+#define ETH_RSS_VXLAN              (1ULL << 19)
> >+#define ETH_RSS_GENEVE             (1ULL << 20)
> >+#define ETH_RSS_NVGRE              (1ULL << 21)
> >+
> >+/*
> >+ * We use the following macros to combine with above ETH_RSS_* for
> >+ * more specific input set selection. These bits are defined starting
> >+ * from the bottom of the 64 bits.
> 
> s/bottom/high end/

 Sorry, what does it mean, I didn't understand it for "s/bottom/high end/".

> 
> >+ */
> >+#define	ETH_RSS_L2_SRC_ONLY	   (1ULL << 63)
> >+#define	ETH_RSS_L2_DST_ONLY	   (1ULL << 62)
> >+#define	ETH_RSS_L3_SRC_ONLY	   (1ULL << 61)
> >+#define	ETH_RSS_L3_DST_ONLY	   (1ULL << 60)
> >+#define	ETH_RSS_L4_SRC_ONLY	   (1ULL << 59)
> >+#define	ETH_RSS_L4_DST_ONLY	   (1ULL << 58)
> 
> Keep one space after #define to be aligned with other MACRO definition.
> 
  Ok, I will modify it.

> Thanks,
> Xiaolong
> 
> >
> > #define ETH_RSS_IP ( \
> > 	ETH_RSS_IPV4 | \
> >--
> >1.8.3.1
> >
  
Xiaolong Ye Sept. 25, 2019, 12:22 p.m. UTC | #5
On 09/25, Su, Simei wrote:
>Hi, xiaolong
>
>> -----Original Message-----
>> From: Ye, Xiaolong
>> Sent: Wednesday, September 25, 2019 6:50 PM
>> To: Su, Simei <simei.su@intel.com>
>> Cc: Zhang, Qi Z <qi.z.zhang@intel.com>; Wu, Jingjing <jingjing.wu@intel.com>;
>> dev@dpdk.org
>> Subject: Re: [PATCH v2 1/2] ethdev: extend RSS offload types
>> 
>> On 09/23, Simei Su wrote:
>> >This patch cover two aspects:
>> >  (1)decouple RTE_ETH_FLOW_* and ETH_RSS_*. Because both serve
>> >     different purposes.
>> >
>> >  (2)reserve several bits as input set selection from bottom
>> >     of the 64 bits. It is combined with exisiting ETH_RSS_* to
>> >     represent rss types.
>> >
>> >  for example:
>> >    ETH_RSS_IPV4 | ETH_RSS_L3_SRC_ONLY: hash on src ip address only
>> >    ETH_RSS_IPV4_UDP | ETH_RSS_L4_DST_ONLY: hash on src/dst IP and
>> >                                            dst UDP port
>> >    ETH_RSS_L2_PAYLOAD | ETH_RSS_L2_DST_ONLY: hash on dst mac
>> address
>> 
>> We also need to document well about what happens if users just set
>> ETH_RSS_IPV4, both both src/dst ip still are taken into account, right?
>> 
>
>  Yes, when users set ETH_RSS_IPV4, both src and dst ip are taken into account.
>  I will add this example. Thanks!

Please add it in the code comments or doc rather than the commit log.

Thanks,
Xiaolong

>
>> Thanks,
>> Xiaolong
>> 
>> 
>> >
>> >Signed-off-by: Simei Su <simei.su@intel.com>
>> >---
>> > lib/librte_ethdev/rte_ethdev.h | 60
>> >++++++++++++++++++++++++------------------
>> > 1 file changed, 35 insertions(+), 25 deletions(-)
>> >
>> >diff --git a/lib/librte_ethdev/rte_ethdev.h
>> >b/lib/librte_ethdev/rte_ethdev.h index d987178..7e6530d 100644
>> >--- a/lib/librte_ethdev/rte_ethdev.h
>> >+++ b/lib/librte_ethdev/rte_ethdev.h
>> >@@ -482,31 +482,41 @@ struct rte_eth_rss_conf {
>> > #define RTE_ETH_FLOW_MAX                23
>> >
>> > /*
>> >- * The RSS offload types are defined based on flow types.
>> >- * Different NIC hardware may support different RSS offload
>> >- * types. The supported flow types or RSS offload types can be queried
>> >by
>> >- * rte_eth_dev_info_get().
>> >- */
>> >-#define ETH_RSS_IPV4               (1ULL << RTE_ETH_FLOW_IPV4)
>> >-#define ETH_RSS_FRAG_IPV4          (1ULL <<
>> RTE_ETH_FLOW_FRAG_IPV4)
>> >-#define ETH_RSS_NONFRAG_IPV4_TCP   (1ULL <<
>> RTE_ETH_FLOW_NONFRAG_IPV4_TCP)
>> >-#define ETH_RSS_NONFRAG_IPV4_UDP   (1ULL <<
>> RTE_ETH_FLOW_NONFRAG_IPV4_UDP)
>> >-#define ETH_RSS_NONFRAG_IPV4_SCTP  (1ULL <<
>> >RTE_ETH_FLOW_NONFRAG_IPV4_SCTP) -#define
>> ETH_RSS_NONFRAG_IPV4_OTHER (1ULL <<
>> RTE_ETH_FLOW_NONFRAG_IPV4_OTHER)
>> >-#define ETH_RSS_IPV6               (1ULL << RTE_ETH_FLOW_IPV6)
>> >-#define ETH_RSS_FRAG_IPV6          (1ULL <<
>> RTE_ETH_FLOW_FRAG_IPV6)
>> >-#define ETH_RSS_NONFRAG_IPV6_TCP   (1ULL <<
>> RTE_ETH_FLOW_NONFRAG_IPV6_TCP)
>> >-#define ETH_RSS_NONFRAG_IPV6_UDP   (1ULL <<
>> RTE_ETH_FLOW_NONFRAG_IPV6_UDP)
>> >-#define ETH_RSS_NONFRAG_IPV6_SCTP  (1ULL <<
>> >RTE_ETH_FLOW_NONFRAG_IPV6_SCTP) -#define
>> ETH_RSS_NONFRAG_IPV6_OTHER (1ULL <<
>> RTE_ETH_FLOW_NONFRAG_IPV6_OTHER)
>> >-#define ETH_RSS_L2_PAYLOAD         (1ULL <<
>> RTE_ETH_FLOW_L2_PAYLOAD)
>> >-#define ETH_RSS_IPV6_EX            (1ULL << RTE_ETH_FLOW_IPV6_EX)
>> >-#define ETH_RSS_IPV6_TCP_EX        (1ULL <<
>> RTE_ETH_FLOW_IPV6_TCP_EX)
>> >-#define ETH_RSS_IPV6_UDP_EX        (1ULL <<
>> RTE_ETH_FLOW_IPV6_UDP_EX)
>> >-#define ETH_RSS_PORT               (1ULL << RTE_ETH_FLOW_PORT)
>> >-#define ETH_RSS_VXLAN              (1ULL << RTE_ETH_FLOW_VXLAN)
>> >-#define ETH_RSS_GENEVE             (1ULL << RTE_ETH_FLOW_GENEVE)
>> >-#define ETH_RSS_NVGRE              (1ULL << RTE_ETH_FLOW_NVGRE)
>> >+ * Below macros are defined for RSS offload types, they can be used to
>> >+ * fill rte_eth_rss_conf.rss_hf or rte_flow_action_rss.types.
>> >+ */
>> >+#define ETH_RSS_IPV4               (1ULL << 2)
>> >+#define ETH_RSS_FRAG_IPV4          (1ULL << 3)
>> >+#define ETH_RSS_NONFRAG_IPV4_TCP   (1ULL << 4)
>> >+#define ETH_RSS_NONFRAG_IPV4_UDP   (1ULL << 5)
>> >+#define ETH_RSS_NONFRAG_IPV4_SCTP  (1ULL << 6) #define
>> >+ETH_RSS_NONFRAG_IPV4_OTHER (1ULL << 7)
>> >+#define ETH_RSS_IPV6               (1ULL << 8)
>> >+#define ETH_RSS_FRAG_IPV6          (1ULL << 9)
>> >+#define ETH_RSS_NONFRAG_IPV6_TCP   (1ULL << 10)
>> >+#define ETH_RSS_NONFRAG_IPV6_UDP   (1ULL << 11)
>> >+#define ETH_RSS_NONFRAG_IPV6_SCTP  (1ULL << 12) #define
>> >+ETH_RSS_NONFRAG_IPV6_OTHER (1ULL << 13)
>> >+#define ETH_RSS_L2_PAYLOAD         (1ULL << 14)
>> >+#define ETH_RSS_IPV6_EX            (1ULL << 15)
>> >+#define ETH_RSS_IPV6_TCP_EX        (1ULL << 16)
>> >+#define ETH_RSS_IPV6_UDP_EX        (1ULL << 17)
>> >+#define ETH_RSS_PORT               (1ULL << 18)
>> >+#define ETH_RSS_VXLAN              (1ULL << 19)
>> >+#define ETH_RSS_GENEVE             (1ULL << 20)
>> >+#define ETH_RSS_NVGRE              (1ULL << 21)
>> >+
>> >+/*
>> >+ * We use the following macros to combine with above ETH_RSS_* for
>> >+ * more specific input set selection. These bits are defined starting
>> >+ * from the bottom of the 64 bits.
>> >+ */
>> >+#define	ETH_RSS_L2_SRC_ONLY	   (1ULL << 63)
>> >+#define	ETH_RSS_L2_DST_ONLY	   (1ULL << 62)
>> >+#define	ETH_RSS_L3_SRC_ONLY	   (1ULL << 61)
>> >+#define	ETH_RSS_L3_DST_ONLY	   (1ULL << 60)
>> >+#define	ETH_RSS_L4_SRC_ONLY	   (1ULL << 59)
>> >+#define	ETH_RSS_L4_DST_ONLY	   (1ULL << 58)
>> >
>> > #define ETH_RSS_IP ( \
>> > 	ETH_RSS_IPV4 | \
>> >--
>> >1.8.3.1
>> >
  
Xiaolong Ye Sept. 25, 2019, 12:23 p.m. UTC | #6
On 09/25, Su, Simei wrote:
>> >+/*
>> >+ * We use the following macros to combine with above ETH_RSS_* for
>> >+ * more specific input set selection. These bits are defined starting
>> >+ * from the bottom of the 64 bits.
>> 
>> s/bottom/high end/
>
> Sorry, what does it mean, I didn't understand it for "s/bottom/high end/".
>

I mean change "the bottom of the 64 bits" to "the high end of the 64 bits", what
do you think?

Thanks,
Xiaolong
  
Simei Su Sept. 25, 2019, 12:38 p.m. UTC | #7
> -----Original Message-----
> From: Ye, Xiaolong
> Sent: Wednesday, September 25, 2019 8:23 PM
> To: Su, Simei <simei.su@intel.com>
> Cc: Zhang, Qi Z <qi.z.zhang@intel.com>; Wu, Jingjing <jingjing.wu@intel.com>;
> dev@dpdk.org
> Subject: Re: [PATCH v2 1/2] ethdev: extend RSS offload types
> 
> On 09/25, Su, Simei wrote:
> >Hi, xiaolong
> >
> >> -----Original Message-----
> >> From: Ye, Xiaolong
> >> Sent: Wednesday, September 25, 2019 6:50 PM
> >> To: Su, Simei <simei.su@intel.com>
> >> Cc: Zhang, Qi Z <qi.z.zhang@intel.com>; Wu, Jingjing
> >> <jingjing.wu@intel.com>; dev@dpdk.org
> >> Subject: Re: [PATCH v2 1/2] ethdev: extend RSS offload types
> >>
> >> On 09/23, Simei Su wrote:
> >> >This patch cover two aspects:
> >> >  (1)decouple RTE_ETH_FLOW_* and ETH_RSS_*. Because both serve
> >> >     different purposes.
> >> >
> >> >  (2)reserve several bits as input set selection from bottom
> >> >     of the 64 bits. It is combined with exisiting ETH_RSS_* to
> >> >     represent rss types.
> >> >
> >> >  for example:
> >> >    ETH_RSS_IPV4 | ETH_RSS_L3_SRC_ONLY: hash on src ip address only
> >> >    ETH_RSS_IPV4_UDP | ETH_RSS_L4_DST_ONLY: hash on src/dst IP and
> >> >                                            dst UDP port
> >> >    ETH_RSS_L2_PAYLOAD | ETH_RSS_L2_DST_ONLY: hash on dst mac
> >> address
> >>
> >> We also need to document well about what happens if users just set
> >> ETH_RSS_IPV4, both both src/dst ip still are taken into account, right?
> >>
> >
> >  Yes, when users set ETH_RSS_IPV4, both src and dst ip are taken into
> account.
> >  I will add this example. Thanks!
> 
> Please add it in the code comments or doc rather than the commit log.
> 
  Ok, I will add it in the code comments.

> Thanks,
> Xiaolong
> 
> >
> >> Thanks,
> >> Xiaolong
> >>
> >>
> >> >
> >> >Signed-off-by: Simei Su <simei.su@intel.com>
> >> >---
> >> > lib/librte_ethdev/rte_ethdev.h | 60
> >> >++++++++++++++++++++++++------------------
> >> > 1 file changed, 35 insertions(+), 25 deletions(-)
> >> >
> >> >diff --git a/lib/librte_ethdev/rte_ethdev.h
> >> >b/lib/librte_ethdev/rte_ethdev.h index d987178..7e6530d 100644
> >> >--- a/lib/librte_ethdev/rte_ethdev.h
> >> >+++ b/lib/librte_ethdev/rte_ethdev.h
> >> >@@ -482,31 +482,41 @@ struct rte_eth_rss_conf {
> >> > #define RTE_ETH_FLOW_MAX                23
> >> >
> >> > /*
> >> >- * The RSS offload types are defined based on flow types.
> >> >- * Different NIC hardware may support different RSS offload
> >> >- * types. The supported flow types or RSS offload types can be
> >> >queried by
> >> >- * rte_eth_dev_info_get().
> >> >- */
> >> >-#define ETH_RSS_IPV4               (1ULL << RTE_ETH_FLOW_IPV4)
> >> >-#define ETH_RSS_FRAG_IPV4          (1ULL <<
> >> RTE_ETH_FLOW_FRAG_IPV4)
> >> >-#define ETH_RSS_NONFRAG_IPV4_TCP   (1ULL <<
> >> RTE_ETH_FLOW_NONFRAG_IPV4_TCP)
> >> >-#define ETH_RSS_NONFRAG_IPV4_UDP   (1ULL <<
> >> RTE_ETH_FLOW_NONFRAG_IPV4_UDP)
> >> >-#define ETH_RSS_NONFRAG_IPV4_SCTP  (1ULL <<
> >> >RTE_ETH_FLOW_NONFRAG_IPV4_SCTP) -#define
> >> ETH_RSS_NONFRAG_IPV4_OTHER (1ULL <<
> >> RTE_ETH_FLOW_NONFRAG_IPV4_OTHER)
> >> >-#define ETH_RSS_IPV6               (1ULL << RTE_ETH_FLOW_IPV6)
> >> >-#define ETH_RSS_FRAG_IPV6          (1ULL <<
> >> RTE_ETH_FLOW_FRAG_IPV6)
> >> >-#define ETH_RSS_NONFRAG_IPV6_TCP   (1ULL <<
> >> RTE_ETH_FLOW_NONFRAG_IPV6_TCP)
> >> >-#define ETH_RSS_NONFRAG_IPV6_UDP   (1ULL <<
> >> RTE_ETH_FLOW_NONFRAG_IPV6_UDP)
> >> >-#define ETH_RSS_NONFRAG_IPV6_SCTP  (1ULL <<
> >> >RTE_ETH_FLOW_NONFRAG_IPV6_SCTP) -#define
> >> ETH_RSS_NONFRAG_IPV6_OTHER (1ULL <<
> >> RTE_ETH_FLOW_NONFRAG_IPV6_OTHER)
> >> >-#define ETH_RSS_L2_PAYLOAD         (1ULL <<
> >> RTE_ETH_FLOW_L2_PAYLOAD)
> >> >-#define ETH_RSS_IPV6_EX            (1ULL <<
> RTE_ETH_FLOW_IPV6_EX)
> >> >-#define ETH_RSS_IPV6_TCP_EX        (1ULL <<
> >> RTE_ETH_FLOW_IPV6_TCP_EX)
> >> >-#define ETH_RSS_IPV6_UDP_EX        (1ULL <<
> >> RTE_ETH_FLOW_IPV6_UDP_EX)
> >> >-#define ETH_RSS_PORT               (1ULL << RTE_ETH_FLOW_PORT)
> >> >-#define ETH_RSS_VXLAN              (1ULL <<
> RTE_ETH_FLOW_VXLAN)
> >> >-#define ETH_RSS_GENEVE             (1ULL <<
> RTE_ETH_FLOW_GENEVE)
> >> >-#define ETH_RSS_NVGRE              (1ULL <<
> RTE_ETH_FLOW_NVGRE)
> >> >+ * Below macros are defined for RSS offload types, they can be used
> >> >+to
> >> >+ * fill rte_eth_rss_conf.rss_hf or rte_flow_action_rss.types.
> >> >+ */
> >> >+#define ETH_RSS_IPV4               (1ULL << 2)
> >> >+#define ETH_RSS_FRAG_IPV4          (1ULL << 3)
> >> >+#define ETH_RSS_NONFRAG_IPV4_TCP   (1ULL << 4)
> >> >+#define ETH_RSS_NONFRAG_IPV4_UDP   (1ULL << 5)
> >> >+#define ETH_RSS_NONFRAG_IPV4_SCTP  (1ULL << 6) #define
> >> >+ETH_RSS_NONFRAG_IPV4_OTHER (1ULL << 7)
> >> >+#define ETH_RSS_IPV6               (1ULL << 8)
> >> >+#define ETH_RSS_FRAG_IPV6          (1ULL << 9)
> >> >+#define ETH_RSS_NONFRAG_IPV6_TCP   (1ULL << 10)
> >> >+#define ETH_RSS_NONFRAG_IPV6_UDP   (1ULL << 11)
> >> >+#define ETH_RSS_NONFRAG_IPV6_SCTP  (1ULL << 12) #define
> >> >+ETH_RSS_NONFRAG_IPV6_OTHER (1ULL << 13)
> >> >+#define ETH_RSS_L2_PAYLOAD         (1ULL << 14)
> >> >+#define ETH_RSS_IPV6_EX            (1ULL << 15)
> >> >+#define ETH_RSS_IPV6_TCP_EX        (1ULL << 16)
> >> >+#define ETH_RSS_IPV6_UDP_EX        (1ULL << 17)
> >> >+#define ETH_RSS_PORT               (1ULL << 18)
> >> >+#define ETH_RSS_VXLAN              (1ULL << 19)
> >> >+#define ETH_RSS_GENEVE             (1ULL << 20)
> >> >+#define ETH_RSS_NVGRE              (1ULL << 21)
> >> >+
> >> >+/*
> >> >+ * We use the following macros to combine with above ETH_RSS_* for
> >> >+ * more specific input set selection. These bits are defined
> >> >+starting
> >> >+ * from the bottom of the 64 bits.
> >> >+ */
> >> >+#define	ETH_RSS_L2_SRC_ONLY	   (1ULL << 63)
> >> >+#define	ETH_RSS_L2_DST_ONLY	   (1ULL << 62)
> >> >+#define	ETH_RSS_L3_SRC_ONLY	   (1ULL << 61)
> >> >+#define	ETH_RSS_L3_DST_ONLY	   (1ULL << 60)
> >> >+#define	ETH_RSS_L4_SRC_ONLY	   (1ULL << 59)
> >> >+#define	ETH_RSS_L4_DST_ONLY	   (1ULL << 58)
> >> >
> >> > #define ETH_RSS_IP ( \
> >> > 	ETH_RSS_IPV4 | \
> >> >--
> >> >1.8.3.1
> >> >
  
Simei Su Sept. 25, 2019, 12:42 p.m. UTC | #8
> -----Original Message-----
> From: Ye, Xiaolong
> Sent: Wednesday, September 25, 2019 8:24 PM
> To: Su, Simei <simei.su@intel.com>
> Cc: Zhang, Qi Z <qi.z.zhang@intel.com>; Wu, Jingjing <jingjing.wu@intel.com>;
> dev@dpdk.org
> Subject: Re: [PATCH v2 1/2] ethdev: extend RSS offload types
> 
> On 09/25, Su, Simei wrote:
> >> >+/*
> >> >+ * We use the following macros to combine with above ETH_RSS_* for
> >> >+ * more specific input set selection. These bits are defined
> >> >+starting
> >> >+ * from the bottom of the 64 bits.
> >>
> >> s/bottom/high end/
> >
> > Sorry, what does it mean, I didn't understand it for "s/bottom/high end/".
> >
> 
> I mean change "the bottom of the 64 bits" to "the high end of the 64 bits", what
> do you think?
> 
 Yes, "the high end of the 64 bits" seems better to avoid confusion. I will modify it in v3. Thanks!

> Thanks,
> Xiaolong
  

Patch

diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
index d987178..7e6530d 100644
--- a/lib/librte_ethdev/rte_ethdev.h
+++ b/lib/librte_ethdev/rte_ethdev.h
@@ -482,31 +482,41 @@  struct rte_eth_rss_conf {
 #define RTE_ETH_FLOW_MAX                23
 
 /*
- * The RSS offload types are defined based on flow types.
- * Different NIC hardware may support different RSS offload
- * types. The supported flow types or RSS offload types can be queried by
- * rte_eth_dev_info_get().
- */
-#define ETH_RSS_IPV4               (1ULL << RTE_ETH_FLOW_IPV4)
-#define ETH_RSS_FRAG_IPV4          (1ULL << RTE_ETH_FLOW_FRAG_IPV4)
-#define ETH_RSS_NONFRAG_IPV4_TCP   (1ULL << RTE_ETH_FLOW_NONFRAG_IPV4_TCP)
-#define ETH_RSS_NONFRAG_IPV4_UDP   (1ULL << RTE_ETH_FLOW_NONFRAG_IPV4_UDP)
-#define ETH_RSS_NONFRAG_IPV4_SCTP  (1ULL << RTE_ETH_FLOW_NONFRAG_IPV4_SCTP)
-#define ETH_RSS_NONFRAG_IPV4_OTHER (1ULL << RTE_ETH_FLOW_NONFRAG_IPV4_OTHER)
-#define ETH_RSS_IPV6               (1ULL << RTE_ETH_FLOW_IPV6)
-#define ETH_RSS_FRAG_IPV6          (1ULL << RTE_ETH_FLOW_FRAG_IPV6)
-#define ETH_RSS_NONFRAG_IPV6_TCP   (1ULL << RTE_ETH_FLOW_NONFRAG_IPV6_TCP)
-#define ETH_RSS_NONFRAG_IPV6_UDP   (1ULL << RTE_ETH_FLOW_NONFRAG_IPV6_UDP)
-#define ETH_RSS_NONFRAG_IPV6_SCTP  (1ULL << RTE_ETH_FLOW_NONFRAG_IPV6_SCTP)
-#define ETH_RSS_NONFRAG_IPV6_OTHER (1ULL << RTE_ETH_FLOW_NONFRAG_IPV6_OTHER)
-#define ETH_RSS_L2_PAYLOAD         (1ULL << RTE_ETH_FLOW_L2_PAYLOAD)
-#define ETH_RSS_IPV6_EX            (1ULL << RTE_ETH_FLOW_IPV6_EX)
-#define ETH_RSS_IPV6_TCP_EX        (1ULL << RTE_ETH_FLOW_IPV6_TCP_EX)
-#define ETH_RSS_IPV6_UDP_EX        (1ULL << RTE_ETH_FLOW_IPV6_UDP_EX)
-#define ETH_RSS_PORT               (1ULL << RTE_ETH_FLOW_PORT)
-#define ETH_RSS_VXLAN              (1ULL << RTE_ETH_FLOW_VXLAN)
-#define ETH_RSS_GENEVE             (1ULL << RTE_ETH_FLOW_GENEVE)
-#define ETH_RSS_NVGRE              (1ULL << RTE_ETH_FLOW_NVGRE)
+ * Below macros are defined for RSS offload types, they can be used to
+ * fill rte_eth_rss_conf.rss_hf or rte_flow_action_rss.types.
+ */
+#define ETH_RSS_IPV4               (1ULL << 2)
+#define ETH_RSS_FRAG_IPV4          (1ULL << 3)
+#define ETH_RSS_NONFRAG_IPV4_TCP   (1ULL << 4)
+#define ETH_RSS_NONFRAG_IPV4_UDP   (1ULL << 5)
+#define ETH_RSS_NONFRAG_IPV4_SCTP  (1ULL << 6)
+#define ETH_RSS_NONFRAG_IPV4_OTHER (1ULL << 7)
+#define ETH_RSS_IPV6               (1ULL << 8)
+#define ETH_RSS_FRAG_IPV6          (1ULL << 9)
+#define ETH_RSS_NONFRAG_IPV6_TCP   (1ULL << 10)
+#define ETH_RSS_NONFRAG_IPV6_UDP   (1ULL << 11)
+#define ETH_RSS_NONFRAG_IPV6_SCTP  (1ULL << 12)
+#define ETH_RSS_NONFRAG_IPV6_OTHER (1ULL << 13)
+#define ETH_RSS_L2_PAYLOAD         (1ULL << 14)
+#define ETH_RSS_IPV6_EX            (1ULL << 15)
+#define ETH_RSS_IPV6_TCP_EX        (1ULL << 16)
+#define ETH_RSS_IPV6_UDP_EX        (1ULL << 17)
+#define ETH_RSS_PORT               (1ULL << 18)
+#define ETH_RSS_VXLAN              (1ULL << 19)
+#define ETH_RSS_GENEVE             (1ULL << 20)
+#define ETH_RSS_NVGRE              (1ULL << 21)
+
+/*
+ * We use the following macros to combine with above ETH_RSS_* for
+ * more specific input set selection. These bits are defined starting
+ * from the bottom of the 64 bits.
+ */
+#define	ETH_RSS_L2_SRC_ONLY	   (1ULL << 63)
+#define	ETH_RSS_L2_DST_ONLY	   (1ULL << 62)
+#define	ETH_RSS_L3_SRC_ONLY	   (1ULL << 61)
+#define	ETH_RSS_L3_DST_ONLY	   (1ULL << 60)
+#define	ETH_RSS_L4_SRC_ONLY	   (1ULL << 59)
+#define	ETH_RSS_L4_DST_ONLY	   (1ULL << 58)
 
 #define ETH_RSS_IP ( \
 	ETH_RSS_IPV4 | \