[v2,1/2] ethdev: extend RSS offload types
Checks
Commit Message
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
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
>
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
>
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
> >
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
> >
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
>> >
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
> -----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
> >> >
> -----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
@@ -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 | \