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 784A6A00BE; Fri, 12 Jun 2020 04:24:33 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 98C244C89; Fri, 12 Jun 2020 04:24:14 +0200 (CEST) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id 81F4F374C for ; Fri, 12 Jun 2020 04:24:12 +0200 (CEST) IronPort-SDR: +OPv2Sei9tV3qKksS/EOMhZhvDdmi8VKdYO9v0H7QFZpAeWL/d0QhoCs4b8VREE6dJ5RtvEyzJ +h9JOFtO2yZQ== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Jun 2020 19:24:12 -0700 IronPort-SDR: uj/34SKwRu6gbQzUej3oGvb8t+vq7G/bFjPDzSzux/3e3o77q+ExRYnLKTJJumzdRTXKUkJJqK wVWu4uwKKU6Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,501,1583222400"; d="scan'208";a="275536711" Received: from npg-dpdk-cvl-simeisu-118d193.sh.intel.com ([10.67.110.178]) by orsmga006.jf.intel.com with ESMTP; 11 Jun 2020 19:24:10 -0700 From: Simei Su To: qi.z.zhang@intel.com, xiaolong.ye@intel.com, beilei.xing@intel.com Cc: dev@dpdk.org, jia.guo@intel.com, junfeng.guo@intel.com, simei.su@intel.com Date: Fri, 12 Jun 2020 10:20:07 +0800 Message-Id: <1591928407-314618-4-git-send-email-simei.su@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1591928407-314618-1-git-send-email-simei.su@intel.com> References: <1591928407-314618-1-git-send-email-simei.su@intel.com> Subject: [dpdk-dev] [PATCH 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"); -- 1.8.3.1