From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 72D4AA04C7; Wed, 16 Sep 2020 08:16:56 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 51DAC1C1B2; Wed, 16 Sep 2020 08:16:56 +0200 (CEST) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 501CE1C1A2 for ; Wed, 16 Sep 2020 08:16:54 +0200 (CEST) IronPort-SDR: TbFlsxwdLBpyPsYD7XLRsXwdbpPY51WETFSI+gH5NVtDBHTvmfwT+ytal9UGuatzFzvVoBsHu1 OI5eBEdmuIYw== X-IronPort-AV: E=McAfee;i="6000,8403,9745"; a="177481512" X-IronPort-AV: E=Sophos;i="5.76,431,1592895600"; d="scan'208";a="177481512" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Sep 2020 23:16:53 -0700 IronPort-SDR: p+9RlzRCHBX+qHAH5Q5xiJS5RG2BCzvt7ORBSx037vovstWRNrzwHKgRVDLQC1ZpJR+nV3exzC BBcaqNiZHkPA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.76,431,1592895600"; d="scan'208";a="343783271" Received: from dpdk51.sh.intel.com ([10.67.111.142]) by FMSMGA003.fm.intel.com with ESMTP; 15 Sep 2020 23:16:51 -0700 From: Qi Zhang To: beilei.xing@intel.com Cc: dev@dpdk.org, junfeng.guo@intel.com, jia.guo@intel.com, Qi Zhang Date: Wed, 16 Sep 2020 14:20:49 +0800 Message-Id: <20200916062049.111046-1-qi.z.zhang@intel.com> X-Mailer: git-send-email 2.25.4 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH v4] net/iavf: reject floating RSS attribute X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" For RSS attribute don't have an associated RSS type, we need to reject it. Signed-off-by: Qi Zhang --- v4: - refine macros v3: - add missing floating l2 rss attribute check v2: - fix checkpatch warning. drivers/net/iavf/iavf_hash.c | 75 +++++++++++++++++++++++++----------- 1 file changed, 53 insertions(+), 22 deletions(-) diff --git a/drivers/net/iavf/iavf_hash.c b/drivers/net/iavf/iavf_hash.c index 61466c072..b95f393d0 100644 --- a/drivers/net/iavf/iavf_hash.c +++ b/drivers/net/iavf/iavf_hash.c @@ -766,6 +766,52 @@ static uint64_t invalid_rss_comb[] = { RTE_ETH_RSS_L3_PRE96 }; +struct rss_attr_type { + uint64_t attr; + uint64_t type; +}; + +#define VALID_RSS_IPV4 (ETH_RSS_IPV4 | \ + ETH_RSS_NONFRAG_IPV4_UDP | \ + ETH_RSS_NONFRAG_IPV4_TCP | \ + ETH_RSS_NONFRAG_IPV4_SCTP) + +#define VALID_RSS_IPV6 (ETH_RSS_IPV6 | \ + ETH_RSS_NONFRAG_IPV6_UDP | \ + ETH_RSS_NONFRAG_IPV6_TCP | \ + ETH_RSS_NONFRAG_IPV6_SCTP) + +#define VALID_RSS_IPV4_L4 (ETH_RSS_NONFRAG_IPV4_UDP | \ + ETH_RSS_NONFRAG_IPV4_TCP | \ + ETH_RSS_NONFRAG_IPV4_SCTP) + +#define VALID_RSS_IPV6_L4 (ETH_RSS_NONFRAG_IPV6_UDP | \ + ETH_RSS_NONFRAG_IPV6_TCP | \ + ETH_RSS_NONFRAG_IPV6_SCTP) + +#define VALID_RSS_ATTR (ETH_RSS_L3_SRC_ONLY | \ + ETH_RSS_L3_DST_ONLY | \ + ETH_RSS_L4_SRC_ONLY | \ + ETH_RSS_L4_DST_ONLY | \ + ETH_RSS_L2_SRC_ONLY | \ + ETH_RSS_L2_DST_ONLY | \ + RTE_ETH_RSS_L3_PRE64) + +#define INVALID_RSS_ATTR (RTE_ETH_RSS_L3_PRE32 | \ + RTE_ETH_RSS_L3_PRE40 | \ + RTE_ETH_RSS_L3_PRE48 | \ + RTE_ETH_RSS_L3_PRE56 | \ + RTE_ETH_RSS_L3_PRE96) + +static struct rss_attr_type rss_attr_to_valid_type[] = { + {ETH_RSS_L2_SRC_ONLY | ETH_RSS_L2_DST_ONLY, ETH_RSS_ETH}, + {ETH_RSS_L3_SRC_ONLY | ETH_RSS_L3_DST_ONLY, VALID_RSS_IPV4 | VALID_RSS_IPV6}, + {ETH_RSS_L4_SRC_ONLY | ETH_RSS_L4_DST_ONLY, VALID_RSS_IPV4_L4 | VALID_RSS_IPV6_L4}, + /* current ipv6 prefix only supports prefix 64 bits*/ + {RTE_ETH_RSS_L3_PRE64, VALID_RSS_IPV6}, + {INVALID_RSS_ATTR, 0} +}; + static bool iavf_any_invalid_rss_type(uint64_t rss_type, uint64_t allow_rss_type) { @@ -777,31 +823,16 @@ iavf_any_invalid_rss_type(uint64_t rss_type, uint64_t allow_rss_type) return true; } - /* current ipv6 prefix only supports prefix 64 bits*/ -#define _invalid_prefix_ (RTE_ETH_RSS_L3_PRE32 | \ - RTE_ETH_RSS_L3_PRE40 | \ - RTE_ETH_RSS_L3_PRE48 | \ - RTE_ETH_RSS_L3_PRE56 | \ - RTE_ETH_RSS_L3_PRE96) + /* check invalid RSS attribute */ + for (i = 0; i < RTE_DIM(rss_attr_to_valid_type); i++) { + struct rss_attr_type *rat = &rss_attr_to_valid_type[i]; - if (rss_type & _invalid_prefix_) - return true; + if (rat->attr & rss_type && !(rat->type & rss_type)) + return true; + } /* check not allowed RSS type */ -#define _RSS_ATTR_ (ETH_RSS_L3_SRC_ONLY | \ - ETH_RSS_L3_DST_ONLY | \ - ETH_RSS_L4_SRC_ONLY | \ - ETH_RSS_L4_DST_ONLY | \ - ETH_RSS_L2_SRC_ONLY | \ - ETH_RSS_L2_DST_ONLY | \ - RTE_ETH_RSS_L3_PRE32 | \ - RTE_ETH_RSS_L3_PRE40 | \ - RTE_ETH_RSS_L3_PRE48 | \ - RTE_ETH_RSS_L3_PRE56 | \ - RTE_ETH_RSS_L3_PRE64 | \ - RTE_ETH_RSS_L3_PRE96) - - rss_type &= ~_RSS_ATTR_; + rss_type &= ~VALID_RSS_ATTR; return ((rss_type & allow_rss_type) != rss_type); } -- 2.25.4