On Tue, Aug 18, 2020 at 12:22 AM <kirankum...@marvell.com> wrote: > From: Kiran Kumar K <kirankum...@marvell.com> > > This patch reserves 2 bits as input selection to select Inner and > outer layers for RSS computation. It is combined with existing > ETH_RSS_* to choose Inner or outer layers for L2, L3 and L4. > This functionality already exists in rte_flow through level parameter in > RSS action configuration rte_flow_action_rss. > > Signed-off-by: Kiran Kumar K <kirankum...@marvell.com> > --- > V3 Changes: > * Added testpmd support. > > app/test-pmd/parameters.c | 6 ++++++ > lib/librte_ethdev/rte_ethdev.h | 27 +++++++++++++++++++++++++++ > 2 files changed, 33 insertions(+) > > diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c > index 7cb0e3d6e..5f669ff24 100644 > --- a/app/test-pmd/parameters.c > +++ b/app/test-pmd/parameters.c > @@ -632,6 +632,8 @@ launch_args_parse(int argc, char** argv) > { "forward-mode", 1, 0, 0 }, > { "rss-ip", 0, 0, 0 }, > { "rss-udp", 0, 0, 0 }, > + { "rss-outer", 0, 0, 0 }, > + { "rss-inner-outer", 0, 0, 0 }, > If we don't specify any of these two, it is inner RSS? If I configure rss-outer, how do I switch to inner RSS?
Thanks > { "rxq", 1, 0, 0 }, > { "txq", 1, 0, 0 }, > { "rxd", 1, 0, 0 }, > @@ -1051,6 +1053,10 @@ launch_args_parse(int argc, char** argv) > rss_hf = ETH_RSS_IP; > if (!strcmp(lgopts[opt_idx].name, "rss-udp")) > rss_hf = ETH_RSS_UDP; > + if (!strcmp(lgopts[opt_idx].name, "rss-outer")) > + rss_hf |= ETH_RSS_LEVEL_OUTER; > + if (!strcmp(lgopts[opt_idx].name, > "rss-inner-outer")) > + rss_hf |= ETH_RSS_LEVEL_INNER_OUTER; > if (!strcmp(lgopts[opt_idx].name, "rxq")) { > n = atoi(optarg); > if (n >= 0 && check_nb_rxq((queueid_t)n) > == 0) > diff --git a/lib/librte_ethdev/rte_ethdev.h > b/lib/librte_ethdev/rte_ethdev.h > index d29930fd8..28184cc85 100644 > --- a/lib/librte_ethdev/rte_ethdev.h > +++ b/lib/librte_ethdev/rte_ethdev.h > @@ -552,6 +552,33 @@ struct rte_eth_rss_conf { > #define RTE_ETH_RSS_L3_PRE64 (1ULL << 53) > #define RTE_ETH_RSS_L3_PRE96 (1ULL << 52) > > +/* > + * We use the following macros to combine with the above layers to choose > + * inner and outer layers or both for RSS computation. > + * Note: Default is 0: inner layers, 1: outer layers, 2: both > + * bit 50 and 51 are reserved for this. > + */ > + > +/** > + * Level 0, It basically stands for the innermost encapsulation level RSS > + * can be performed on according to PMD and device capabilities. > + */ > +#define ETH_RSS_LEVEL_INNER (0ULL << 50) > +/** > + * Level 1, It basically stands for the outermost encapsulation level RSS > + * can be performed on according to PMD and device capabilities. > + */ > +#define ETH_RSS_LEVEL_OUTER (1ULL << 50) > +/** > + * Level 2, It basically stands for the both inner and outermost > + * encapsulation level RSS can be performed on according to PMD and > + * device capabilities. > + */ > +#define ETH_RSS_LEVEL_INNER_OUTER (2ULL << 50) > +#define ETH_RSS_LEVEL_MASK (3ULL << 50) > + > +#define ETH_RSS_LEVEL(rss_hf) ((rss_hf & ETH_RSS_LEVEL_MASK) >> 50) > + > /** > * For input set change of hash filter, if SRC_ONLY and DST_ONLY of > * the same level are used simultaneously, it is the same case as > -- > 2.25.1 > >