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

Ye Xiaolong xiaolong.ye at intel.com
Wed Sep 25 12:27:56 CEST 2019


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

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
>


More information about the dev mailing list