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 59AFAA09E9; Mon, 14 Dec 2020 07:53:26 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 7CDEBC9B6; Mon, 14 Dec 2020 07:51:59 +0100 (CET) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id 4F62FC99E for ; Mon, 14 Dec 2020 07:51:57 +0100 (CET) IronPort-SDR: QIDLxMz8EKoIefANzczt3vJieg2Yjcl0bWwprfnttb84NiEzFj1Qg5ZMSxftnpVByGWs/tgcXt HaXWqRkWxVNQ== X-IronPort-AV: E=McAfee;i="6000,8403,9834"; a="236251117" X-IronPort-AV: E=Sophos;i="5.78,417,1599548400"; d="scan'208";a="236251117" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Dec 2020 22:51:56 -0800 IronPort-SDR: xJvUeTkzzjgLs3EMjoZoSt4hUO0EsftpX/aN/VT9p8QFh/Z3LvZtHcra0xJJ+qq0aRq7dzkEnu bPJ7//9J1Q5w== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.78,417,1599548400"; d="scan'208";a="367141113" Received: from dpdk-junfengguo-v3.sh.intel.com ([10.67.119.146]) by orsmga008.jf.intel.com with ESMTP; 13 Dec 2020 22:51:54 -0800 From: Junfeng Guo To: qi.z.zhang@intel.com, jingjing.wu@intel.com, beilei.xing@intel.com Cc: dev@dpdk.org, junfeng.guo@intel.com, simei.su@intel.com, yahui.cao@intel.com Date: Mon, 14 Dec 2020 14:49:13 +0800 Message-Id: <20201214064913.2306802-6-junfeng.guo@intel.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20201214064913.2306802-1-junfeng.guo@intel.com> References: <20201214064913.2306802-1-junfeng.guo@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH 5/5] net/iavf: support eCPRI MSG TYPE 0 for RSS 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" From: Simei Su This patch enables eCPRI Message Type 0 with input set physical channel ID in rte_flow for RSS. Signed-off-by: Simei Su --- drivers/net/iavf/iavf_hash.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/drivers/net/iavf/iavf_hash.c b/drivers/net/iavf/iavf_hash.c index c4c73e6644..a20c33e7fb 100644 --- a/drivers/net/iavf/iavf_hash.c +++ b/drivers/net/iavf/iavf_hash.c @@ -152,6 +152,10 @@ iavf_hash_parse_pattern_action(struct iavf_adapter *ad, #define proto_hdr_gtpc { \ VIRTCHNL_PROTO_HDR_GTPC, 0, {BUFF_NOUSED} } +#define proto_hdr_ecpri { \ + VIRTCHNL_PROTO_HDR_ECPRI, \ + FIELD_SELECTOR(VIRTCHNL_PROTO_HDR_ECPRI_PC_RTC_ID), {BUFF_NOUSED} } + #define TUNNEL_LEVEL_OUTER 0 #define TUNNEL_LEVEL_INNER 1 @@ -288,6 +292,14 @@ struct virtchnl_proto_hdrs ipv6_udp_gtpc_tmplt = { TUNNEL_LEVEL_OUTER, 3, {proto_hdr_ipv6, proto_hdr_udp, proto_hdr_gtpc} }; +struct virtchnl_proto_hdrs eth_ecpri_tmplt = { + TUNNEL_LEVEL_OUTER, 2, {proto_hdr_eth, proto_hdr_ecpri} +}; + +struct virtchnl_proto_hdrs ipv4_ecpri_tmplt = { + TUNNEL_LEVEL_OUTER, 3, {proto_hdr_ipv4, proto_hdr_udp, proto_hdr_ecpri} +}; + /* rss type super set */ /* IPv4 outer */ @@ -399,6 +411,8 @@ static struct iavf_pattern_match_item iavf_hash_pattern_list[] = { {iavf_pattern_eth_ipv4_l2tpv3, IAVF_RSS_TYPE_IPV4_L2TPV3, &ipv4_l2tpv3_tmplt}, {iavf_pattern_eth_ipv4_pfcp, IAVF_RSS_TYPE_IPV4_PFCP, &ipv4_pfcp_tmplt}, {iavf_pattern_eth_ipv4_gtpc, ETH_RSS_IPV4, &ipv4_udp_gtpc_tmplt}, + {iavf_pattern_eth_ecpri, ETH_RSS_ECPRI, ð_ecpri_tmplt}, + {iavf_pattern_eth_ipv4_ecpri, ETH_RSS_ECPRI, &ipv4_ecpri_tmplt}, /* IPv6 */ {iavf_pattern_eth_ipv6, IAVF_RSS_TYPE_OUTER_IPV6, &outer_ipv6_tmplt}, {iavf_pattern_eth_ipv6_udp, IAVF_RSS_TYPE_OUTER_IPV6_UDP, &outer_ipv6_udp_tmplt}, @@ -525,6 +539,8 @@ iavf_hash_parse_pattern(const struct rte_flow_item pattern[], uint64_t *phint, { const struct rte_flow_item *item = pattern; const struct rte_flow_item_gtp_psc *psc; + const struct rte_flow_item_ecpri *ecpri; + struct rte_ecpri_common_hdr ecpri_common; for (item = pattern; item->type != RTE_FLOW_ITEM_TYPE_END; item++) { if (item->last) { @@ -556,6 +572,20 @@ iavf_hash_parse_pattern(const struct rte_flow_item pattern[], uint64_t *phint, else if (psc->pdu_type == IAVF_GTPU_EH_DWNLINK) *phint |= IAVF_PHINT_GTPU_EH_DWN; break; + case RTE_FLOW_ITEM_TYPE_ECPRI: + ecpri = item->spec; + ecpri_common.u32 = rte_be_to_cpu_32( + ecpri->hdr.common.u32); + if (!ecpri) + break; + else if (ecpri_common.type != + RTE_ECPRI_MSG_TYPE_IQ_DATA) { + rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_ITEM, item, + "Unsupported common type."); + return -rte_errno; + } + break; default: break; } @@ -711,6 +741,10 @@ iavf_refine_proto_hdrs_l234(struct virtchnl_proto_hdrs *proto_hdrs, if (!(rss_type & ETH_RSS_PFCP)) hdr->field_selector = 0; break; + case VIRTCHNL_PROTO_HDR_ECPRI: + if (!(rss_type & ETH_RSS_ECPRI)) + hdr->field_selector = 0; + break; default: break; } -- 2.25.1