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...@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 >