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