From patchwork Mon Jul 3 05:10:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Satheesh Paul Antonysamy X-Patchwork-Id: 129181 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 6870A42DBE; Mon, 3 Jul 2023 07:10:36 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3B78C40EF0; Mon, 3 Jul 2023 07:10:36 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id 69F4240156 for ; Mon, 3 Jul 2023 07:10:34 +0200 (CEST) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 362MenWS027554 for ; Sun, 2 Jul 2023 22:10:33 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : mime-version : content-transfer-encoding : content-type; s=pfpt0220; bh=xuQbFPvslia6Z3i3nR/d/rmefsalhPFP/LqaivvJoRc=; b=RV/LjVgVexkmpD+AS0eG1yJmXAJNB4s8tmx8eWfyCH2w/3/1yJBanq/nqr+K5/Vj+/Gp /oa93mnxCbRWQ0V0QgyDgZRTwsvb0tJcWsfWf7QvGAXeKom4QQe5iBNIJZuXOS8YeTRg LtbdrKGXII68XWMrDUwcS+yjikY+Md6feyCNQHrTegRdkEjyWUrai5jDk3zpC82i8wAK H0wnTYydTynhCfpdKuHctQ0n0WpGNMuPvL/nDT/kUGQYgZOAvuHFlp08oc4GPE7QyXq/ e6qSq98fQzcElcGKWYxLMk4vq5LbfOH969BgUb9snccS/1M64NGm3SHAh7FKYVSidNu7 0g== Received: from dc5-exch01.marvell.com ([199.233.59.181]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3rjknj3kag-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Sun, 02 Jul 2023 22:10:33 -0700 Received: from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Sun, 2 Jul 2023 22:10:31 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.48 via Frontend Transport; Sun, 2 Jul 2023 22:10:31 -0700 Received: from satheeshpaullabpc.. (unknown [10.28.34.33]) by maili.marvell.com (Postfix) with ESMTP id 5E63C3F7050; Sun, 2 Jul 2023 22:10:29 -0700 (PDT) From: To: Nithin Dabilpuram , Kiran Kumar K , Sunil Kumar Kori , Satha Rao CC: , Satheesh Paul , Jerin Jacob Subject: [dpdk-dev] [PATCH 1/2] common/cnxk: add IPv6 routing ext flow type for cnxk Date: Mon, 3 Jul 2023 10:40:25 +0530 Message-ID: <20230703051026.1843262-1-psatheesh@marvell.com> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 X-Proofpoint-GUID: 3huIWUdKt1rbbuAnCRQ4TW1ytTU4z02G X-Proofpoint-ORIG-GUID: 3huIWUdKt1rbbuAnCRQ4TW1ytTU4z02G X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.591,FMLib:17.11.176.26 definitions=2023-07-03_04,2023-06-30_01,2023-05-22_02 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Kiran Kumar K Adding support to parse IPV6 routing ext flow type for cnxk. Signed-off-by: Kiran Kumar K Reviewed-by: Satheesh Paul Tested-by: Jerin Jacob --- drivers/common/cnxk/roc_npc.h | 17 +++++++++++++++++ drivers/common/cnxk/roc_npc_mcam_dump.c | 3 +++ drivers/common/cnxk/roc_npc_parse.c | 15 +++++++++++++-- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/drivers/common/cnxk/roc_npc.h b/drivers/common/cnxk/roc_npc.h index 07e6634aa7..2ada774934 100644 --- a/drivers/common/cnxk/roc_npc.h +++ b/drivers/common/cnxk/roc_npc.h @@ -40,6 +40,7 @@ enum roc_npc_item_type { ROC_NPC_ITEM_TYPE_RAW, ROC_NPC_ITEM_TYPE_MARK, ROC_NPC_ITEM_TYPE_TX_QUEUE, + ROC_NPC_ITEM_TYPE_IPV6_ROUTING_EXT, ROC_NPC_ITEM_TYPE_END, }; @@ -131,6 +132,22 @@ struct roc_ipv6_fragment_ext { uint32_t id; /**< Packet ID */ } __plt_packed; +struct roc_ipv6_routing_ext { + uint8_t next_hdr; /**< Protocol, next header. */ + uint8_t hdr_len; /**< Header length. */ + uint8_t type; /**< Extension header type. */ + uint8_t segments_left; /**< Valid segments number. */ + union { + uint32_t flags; /**< Packet control data per type. */ + struct { + uint8_t last_entry; /**< The last_entry field of SRH */ + uint8_t flag; /**< Packet flag. */ + uint16_t tag; /**< Packet tag. */ + }; + }; + /* Next are 128-bit IPv6 address fields to describe segments. */ +} __plt_packed; + struct roc_flow_item_ipv6_ext { uint8_t next_hdr; /**< Next header. */ }; diff --git a/drivers/common/cnxk/roc_npc_mcam_dump.c b/drivers/common/cnxk/roc_npc_mcam_dump.c index a88e166fbe..01c4212567 100644 --- a/drivers/common/cnxk/roc_npc_mcam_dump.c +++ b/drivers/common/cnxk/roc_npc_mcam_dump.c @@ -645,6 +645,7 @@ npc_flow_hw_mcam_entry_dump(FILE *file, struct npc *npc, struct roc_npc_flow *fl struct nix_inl_dev *inl_dev = NULL; struct idev_cfg *idev; struct mbox *mbox; + uint8_t enabled; int rc = 0, i; idev = idev_get_cfg(); @@ -673,6 +674,7 @@ npc_flow_hw_mcam_entry_dump(FILE *file, struct npc *npc, struct roc_npc_flow *fl mbox_memcpy(mcam_data, mcam_read_rsp->entry_data.kw, sizeof(mcam_data)); mbox_memcpy(mcam_mask, mcam_read_rsp->entry_data.kw_mask, sizeof(mcam_data)); + enabled = mcam_read_rsp->enable; fprintf(file, "HW MCAM Data :\n"); @@ -680,6 +682,7 @@ npc_flow_hw_mcam_entry_dump(FILE *file, struct npc *npc, struct roc_npc_flow *fl fprintf(file, "\tDW%d :%016lX\n", i, mcam_data[i]); fprintf(file, "\tDW%d_Mask:%016lX\n", i, mcam_mask[i]); } + fprintf(file, "\tEnabled = 0x%x\n", enabled); fprintf(file, "\n"); mbox_put(mbox); diff --git a/drivers/common/cnxk/roc_npc_parse.c b/drivers/common/cnxk/roc_npc_parse.c index acaebaed21..ecd1b3e13b 100644 --- a/drivers/common/cnxk/roc_npc_parse.c +++ b/drivers/common/cnxk/roc_npc_parse.c @@ -719,8 +719,8 @@ npc_handle_ipv6ext_attr(const struct roc_npc_flow_item_ipv6 *ipv6_spec, static int npc_process_ipv6_item(struct npc_parse_state *pst) { - uint8_t ipv6_hdr_mask[sizeof(struct roc_ipv6_hdr) + sizeof(struct roc_ipv6_fragment_ext)]; - uint8_t ipv6_hdr_buf[sizeof(struct roc_ipv6_hdr) + sizeof(struct roc_ipv6_fragment_ext)]; + uint8_t ipv6_hdr_mask[2 * sizeof(struct roc_ipv6_hdr)]; + uint8_t ipv6_hdr_buf[2 * sizeof(struct roc_ipv6_hdr)]; const struct roc_npc_flow_item_ipv6 *ipv6_spec, *ipv6_mask; const struct roc_npc_item_info *pattern = pst->pattern; int offset = 0, rc = 0, lid, item_count = 0; @@ -804,6 +804,16 @@ npc_process_ipv6_item(struct npc_parse_state *pst) sizeof(struct roc_ipv6_fragment_ext)); break; + } else if (pattern->type == ROC_NPC_ITEM_TYPE_IPV6_ROUTING_EXT) { + item_count++; + ltype = NPC_LT_LC_IP6_EXT; + parse_info.len = sizeof(struct roc_ipv6_hdr) + pattern->size; + + if (pattern->spec) + memcpy(ipv6_hdr_buf + offset, pattern->spec, pattern->size); + if (pattern->mask) + memcpy(ipv6_hdr_mask + offset, pattern->mask, pattern->size); + break; } pattern++; @@ -867,6 +877,7 @@ npc_parse_lc(struct npc_parse_state *pst) case ROC_NPC_ITEM_TYPE_IPV6: case ROC_NPC_ITEM_TYPE_IPV6_EXT: case ROC_NPC_ITEM_TYPE_IPV6_FRAG_EXT: + case ROC_NPC_ITEM_TYPE_IPV6_ROUTING_EXT: return npc_process_ipv6_item(pst); case ROC_NPC_ITEM_TYPE_ARP_ETH_IPV4: lt = NPC_LT_LC_ARP;