[dpdk-dev] [PATCH v2 1/2] ethdev: extend RSS offload types

Su, Simei simei.su at intel.com
Wed Sep 25 14:00:46 CEST 2019


Hi, xiaolong

> -----Original Message-----
> From: Ye, Xiaolong
> Sent: Wednesday, September 25, 2019 6:50 PM
> To: Su, Simei <simei.su at intel.com>
> Cc: Zhang, Qi Z <qi.z.zhang at intel.com>; Wu, Jingjing <jingjing.wu at intel.com>;
> dev at 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 at 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
> >


More information about the dev mailing list