Currently PMD implementations default RSS on either tunnel outer or
inner fields. This patch introduced RSS level to allow user to specify
RSS hash field level of tunneled packets.

0: outer RSS.
1: inner RSS.
2-255: deep RSS level.

Please note that tunnels that tightly nested without IP/UDP/TCP layer
interlaced are deemed as one level. For example the following packet can
only use level 0 or 1:
        eth / ipv4 / GRE / MPLS / ipv4 / udp

Signed-off-by: Xueming Li <xuemi...@mellanox.com>
---
 lib/librte_ether/rte_ethdev.h | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
index 0361533..baaeb3c 100644
--- a/lib/librte_ether/rte_ethdev.h
+++ b/lib/librte_ether/rte_ethdev.h
@@ -398,6 +398,15 @@ struct rte_eth_rss_conf {
        uint8_t *rss_key;    /**< If not NULL, 40-byte hash key. */
        uint8_t rss_key_len; /**< hash key length in bytes. */
        uint64_t rss_hf;     /**< Hash functions to apply - see below. */
+       /**
+        * RSS hash calculation on tunnel level:
+        *  0: outer RSS, default.
+        *  1: inner RSS.
+        *  2-255: deep RSS level.
+        * Please note that tunnels not interlaced with [IP|TCP|UDP] are
+        * deemed as one level, such as MPLS over GRE.
+        */
+       uint8_t rss_level;
 };
 
 /*
-- 
1.8.3.1

Reply via email to