Hi Jeff,
> -----Original Message----- > From: Jeff Guo <jia....@intel.com> > Sent: Tuesday, August 18, 2020 4:22 PM > To: Kiran Kumar Kokkilagadda <kirankum...@marvell.com>; Wenzhuo Lu > <wenzhuo...@intel.com>; Beilei Xing <beilei.x...@intel.com>; Bernard > Iremonger <bernard.iremon...@intel.com>; Thomas Monjalon > <tho...@monjalon.net>; Ferruh Yigit <ferruh.yi...@intel.com>; Andrew > Rybchenko <arybche...@solarflare.com> > Cc: dev@dpdk.org; Jerin Jacob Kollanukkaran <jer...@marvell.com>; > or...@mellanox.com; xuanziya...@huawei.com; > cloud.wangxiao...@huawei.com; zhouguoy...@huawei.com; > rosen...@intel.com; Rasesh Mody <rm...@marvell.com>; Shahed Shaikh > <shsha...@marvell.com>; Nithin Kumar Dabilpuram > <ndabilpu...@marvell.com>; qiming.y...@intel.com; qi.z.zh...@intel.com; > keith.wi...@intel.com; hemant.agra...@nxp.com; sachin.sax...@nxp.com; > wei.zh...@intel.com; johnd...@cisco.com; hyon...@cisco.com; > ch...@att.com; ma...@mellanox.com; shah...@mellanox.com; > viachesl...@mellanox.com; rahul.lakkire...@chelsio.com; gr...@u256.net; > Liron Himi <lir...@marvell.com>; jingjing...@intel.com; > xavier.hu...@huawei.com; humi...@huawei.com; > yisen.zhu...@huawei.com; ajit.khapa...@broadcom.com; > somnath.ko...@broadcom.com; jasvinder.si...@intel.com; > cristian.dumitre...@intel.com > Subject: [EXT] Re: [dpdk-dev][PATCH v4 1/2] ethdev: add level support for RSS > offload types > > External Email > > ---------------------------------------------------------------------- > hi, kiran > > On 8/18/2020 6:31 PM, 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> > > --- > > 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 }, > > { "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. > > > Why not define outermost layer to 0, and the inner layer is on the same > direction to increase? > > Do you think it would be good to default set outer hash? > Added Inner as default to keep it in sync with rte_flow_rss_action level. * - @p 0 requests the default behavior. Depending on the packet * type, it can mean outermost, innermost, anything in between or * even no RSS. * * It basically stands for the innermost encapsulation level RSS * can be performed on according to PMD and device capabilities. * * - @p 1 requests RSS to be performed on the outermost packet * encapsulation level. * * - @p 2 and subsequent values request RSS to be performed on the * specified inner packet encapsulation level, from outermost to * innermost (lower to higher values). * > > > + */ > > + > > +/** > > + * 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