From patchwork Thu Jul 2 05:11:50 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simei Su X-Patchwork-Id: 72776 X-Patchwork-Delegate: qi.z.zhang@intel.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id A6471A0523; Thu, 2 Jul 2020 07:12:47 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 899A01D8F3; Thu, 2 Jul 2020 07:12:26 +0200 (CEST) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 469431D8F3 for ; Thu, 2 Jul 2020 07:12:24 +0200 (CEST) IronPort-SDR: ybb0u+5fLtSpgDyzm/gJBDvu7AERbi4evQd54hMkEYhAPUjXG+FYCZx1Slzqgdnitjl5eTk9L8 WYVniYzxbHXA== X-IronPort-AV: E=McAfee;i="6000,8403,9669"; a="164851026" X-IronPort-AV: E=Sophos;i="5.75,302,1589266800"; d="scan'208";a="164851026" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Jul 2020 22:12:23 -0700 IronPort-SDR: 82ZFHY9YwULhh3DEwbCO8My3++qmYuVzkV7n5fZ985ZHkK6bfNUM5kv7U9wsGc0bVemh8sA9YA kgwo2Vsv1ibw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,302,1589266800"; d="scan'208";a="278003330" Received: from npg-dpdk-cvl-simeisu-118d193.sh.intel.com ([10.67.110.178]) by orsmga003.jf.intel.com with ESMTP; 01 Jul 2020 22:12:22 -0700 From: Simei Su To: qi.z.zhang@intel.com, beilei.xing@intel.com Cc: dev@dpdk.org, jia.guo@intel.com, junfeng.guo@intel.com, Simei Su Date: Thu, 2 Jul 2020 13:11:50 +0800 Message-Id: <1593666710-343445-4-git-send-email-simei.su@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1593666710-343445-1-git-send-email-simei.su@intel.com> References: <1591928407-314618-1-git-send-email-simei.su@intel.com> <1593666710-343445-1-git-send-email-simei.su@intel.com> Subject: [dpdk-dev] [PATCH v2 3/3] net/ice: add RSS support for PPPoE 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" This patch enables PPPoE control packets with src mac and session id and PPPoE data packets with ip address and L4 port in rte_flow. Signed-off-by: Simei Su --- drivers/net/ice/ice_hash.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/drivers/net/ice/ice_hash.c b/drivers/net/ice/ice_hash.c index 3d58b71..eaf6a35 100644 --- a/drivers/net/ice/ice_hash.c +++ b/drivers/net/ice/ice_hash.c @@ -114,6 +114,16 @@ struct rss_type_match_hdr hint_14 = { ICE_FLOW_SEG_HDR_GTPU_EH, ETH_RSS_NONFRAG_IPV4_UDP}; struct rss_type_match_hdr hint_15 = { ICE_FLOW_SEG_HDR_GTPU_EH, ETH_RSS_NONFRAG_IPV4_TCP}; +struct rss_type_match_hdr hint_16 = { + ICE_FLOW_SEG_HDR_PPPOE, ETH_RSS_IPV6}; +struct rss_type_match_hdr hint_17 = { + ICE_FLOW_SEG_HDR_PPPOE, ETH_RSS_NONFRAG_IPV6_UDP}; +struct rss_type_match_hdr hint_18 = { + ICE_FLOW_SEG_HDR_PPPOE, ETH_RSS_NONFRAG_IPV6_TCP}; +struct rss_type_match_hdr hint_19 = { + ICE_FLOW_SEG_HDR_PPPOE, ETH_RSS_NONFRAG_IPV6_SCTP}; +struct rss_type_match_hdr hint_20 = { + ICE_FLOW_SEG_HDR_PPPOE, ETH_RSS_ETH | ETH_RSS_PPPOE}; /* Supported pattern for os default package. */ static struct ice_pattern_match_item ice_hash_pattern_list_os[] = { @@ -146,6 +156,11 @@ struct rss_type_match_hdr hint_15 = { {pattern_eth_pppoes_ipv4_udp, ICE_INSET_NONE, &hint_11}, {pattern_eth_pppoes_ipv4_tcp, ICE_INSET_NONE, &hint_12}, {pattern_eth_pppoes_ipv4_sctp, ICE_INSET_NONE, &hint_13}, + {pattern_eth_pppoes_ipv6, ICE_INSET_NONE, &hint_16}, + {pattern_eth_pppoes_ipv6_udp, ICE_INSET_NONE, &hint_17}, + {pattern_eth_pppoes_ipv6_tcp, ICE_INSET_NONE, &hint_18}, + {pattern_eth_pppoes_ipv6_sctp, ICE_INSET_NONE, &hint_19}, + {pattern_eth_pppoes, ICE_INSET_NONE, &hint_20}, }; /** @@ -213,6 +228,9 @@ struct ice_hash_match_type ice_hash_type_list[] = { {ETH_RSS_NONFRAG_IPV6_SCTP | ETH_RSS_L4_SRC_ONLY, BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_SRC_PORT)}, {ETH_RSS_NONFRAG_IPV6_SCTP | ETH_RSS_L4_DST_ONLY, BIT_ULL(ICE_FLOW_FIELD_IDX_SCTP_DST_PORT)}, {ETH_RSS_NONFRAG_IPV6_SCTP, ICE_HASH_SCTP_IPV6}, + {ETH_RSS_ETH | ETH_RSS_L2_SRC_ONLY, BIT_ULL(ICE_FLOW_FIELD_IDX_ETH_SA)}, + {ETH_RSS_PPPOE, ICE_FLOW_HASH_PPPOE_SESS_ID}, + {ETH_RSS_ETH | ETH_RSS_PPPOE | ETH_RSS_L2_SRC_ONLY, ICE_FLOW_HASH_PPPOE_SESS_ID | BIT_ULL(ICE_FLOW_FIELD_IDX_ETH_SA)}, }; static struct ice_flow_engine ice_hash_engine = { @@ -331,6 +349,13 @@ struct ice_hash_match_type ice_hash_type_list[] = { RTE_FLOW_ERROR_TYPE_ACTION, action, "Not supported flow"); + if ((rss_hf & ETH_RSS_ETH) && (rss_hf & ~ETH_RSS_PPPOE)) + m->eth_rss_hint = ETH_RSS_ETH; + else if ((rss_hf & ETH_RSS_PPPOE) && (rss_hf & ~ETH_RSS_ETH)) + m->eth_rss_hint = ETH_RSS_PPPOE; + else if ((rss_hf & ETH_RSS_ETH) && (rss_hf & ETH_RSS_PPPOE)) + m->eth_rss_hint = ETH_RSS_ETH | ETH_RSS_PPPOE; + /* Check if rss types match pattern. */ if (rss->func != RTE_ETH_HASH_FUNCTION_SIMPLE_XOR) { if (((rss_hf & ETH_RSS_IPV4) != m->eth_rss_hint) && @@ -340,7 +365,11 @@ struct ice_hash_match_type ice_hash_type_list[] = { ((rss_hf & ETH_RSS_IPV6) != m->eth_rss_hint) && ((rss_hf & ETH_RSS_NONFRAG_IPV6_UDP) != m->eth_rss_hint) && ((rss_hf & ETH_RSS_NONFRAG_IPV6_TCP) != m->eth_rss_hint) && - ((rss_hf & ETH_RSS_NONFRAG_IPV6_SCTP) != m->eth_rss_hint)) + ((rss_hf & ETH_RSS_NONFRAG_IPV6_SCTP) != m->eth_rss_hint) && + ((rss_hf & ETH_RSS_ETH) != m->eth_rss_hint) && + ((rss_hf & ETH_RSS_PPPOE) != m->eth_rss_hint) && + (((rss_hf & (ETH_RSS_ETH | ETH_RSS_PPPOE)) != + m->eth_rss_hint))) return rte_flow_error_set(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ACTION, action, "Not supported RSS types");