From patchwork Mon Jan 3 16:01:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akhil Goyal X-Patchwork-Id: 105587 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 C614CA04A3; Mon, 3 Jan 2022 17:02:41 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id DA3F841156; Mon, 3 Jan 2022 17:02:23 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id E5E2B4003C for ; Mon, 3 Jan 2022 17:02:21 +0100 (CET) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 203D4JO3005657; Mon, 3 Jan 2022 08:02:20 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=pfpt0220; bh=5gnabzA9OAN1OfDQWOS+3SxWoXakmEkMdsbb2G7rsQQ=; b=gKVaEYYCBg/0horcn+QIdFenojEF9NAomgbBXT4DFWC+1TbEu61zzjJkZf4b5qGEnLfk R0ngqxV5Uht+MqZe71deMM/SbwkceqVvOQG35Aglc5UM13RIyZlOenhQO8OvAa+i2sX3 QjDjJpigkLAUETzz8mHZCCeBaCUebw4gHsAVohW02WJPGhdn/fTke7j9pEzIES06YXRr XyXqyx+XYi4QpfS9iaF0I6+h1cLCcNxh+XUnlb+Igv8P1D8ZX9oylLJylBZZPdVSuA1T 0KwE6lIBgkoHlbtBNWEdvqavi3groTblmzsaH5uQsQYGCJ9IteT+GwaKqKNSwHt4gR63 aw== Received: from dc5-exch01.marvell.com ([199.233.59.181]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3dbmvswuwm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Mon, 03 Jan 2022 08:02:20 -0800 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.2; Mon, 3 Jan 2022 08:02:18 -0800 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.18 via Frontend Transport; Mon, 3 Jan 2022 08:02:18 -0800 Received: from localhost.localdomain (unknown [10.28.48.55]) by maili.marvell.com (Postfix) with ESMTP id CE9A35B6930; Mon, 3 Jan 2022 08:02:15 -0800 (PST) From: Akhil Goyal To: CC: , , , , , , , , Subject: [PATCH 3/5] net/cnxk: support IP reassembly mbuf dynfield Date: Mon, 3 Jan 2022 21:31:47 +0530 Message-ID: <20220103160149.1715058-4-gakhil@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220103160149.1715058-1-gakhil@marvell.com> References: <20220103160149.1715058-1-gakhil@marvell.com> MIME-Version: 1.0 X-Proofpoint-ORIG-GUID: al4gGLD9nCtq5tRgXtLyf-vKm2A5Np6a X-Proofpoint-GUID: al4gGLD9nCtq5tRgXtLyf-vKm2A5Np6a X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.790,Hydra:6.0.425,FMLib:17.11.62.513 definitions=2022-01-03_06,2022-01-01_01,2021-12-02_01 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: Vidya Sagar Velumuri Register the dynamic field for IPsec reassembly. Attach the fragments using the dynamic field in case of incomplete reassembly Signed-off-by: Vidya Sagar Velumuri --- drivers/net/cnxk/cn10k_ethdev_sec.c | 3 +++ drivers/net/cnxk/cn10k_rx.h | 38 +++++++++++++++++++++++------ 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/drivers/net/cnxk/cn10k_ethdev_sec.c b/drivers/net/cnxk/cn10k_ethdev_sec.c index 235c16840e..f20a111cd9 100644 --- a/drivers/net/cnxk/cn10k_ethdev_sec.c +++ b/drivers/net/cnxk/cn10k_ethdev_sec.c @@ -249,6 +249,9 @@ cn10k_eth_sec_session_create(void *device, if (rte_security_dynfield_register() < 0) return -ENOTSUP; + if (rte_eth_ip_reass_dynfield_register() < 0) + return -rte_errno; + if (rte_eal_process_type() == RTE_PROC_PRIMARY) roc_nix_inl_cb_register(cn10k_eth_sec_sso_work_cb, NULL); diff --git a/drivers/net/cnxk/cn10k_rx.h b/drivers/net/cnxk/cn10k_rx.h index 5c415634a9..0ba60ed22f 100644 --- a/drivers/net/cnxk/cn10k_rx.h +++ b/drivers/net/cnxk/cn10k_rx.h @@ -94,7 +94,7 @@ nix_sec_attach_frags(const struct cpt_parse_hdr_s *hdr, uint32_t offset = hdr->w2.fi_offset; union nix_rx_parse_u *frag_rx; struct cpt_frag_info_s *finfo; - struct rte_mbuf *head, *mbuf; + struct rte_mbuf *head, *mbuf, *mbuf_prev; uint64_t *frag_ptr; uint16_t frag_size; uint16_t rlen; @@ -115,10 +115,15 @@ nix_sec_attach_frags(const struct cpt_parse_hdr_s *hdr, mbuf = (struct rte_mbuf *)(wqe - sizeof(struct rte_mbuf)); mbuf->data_len = frag_size; mbuf->pkt_len = frag_size; + mbuf->ol_flags |= RTE_MBUF_F_RX_IPREASSEMBLY_INCOMPLETE; head = mbuf; + mbuf_prev = mbuf; /* Update dynamic field with userdata */ *rte_security_dynfield(mbuf) = (uint64_t)inb_priv->userdata; + rte_eth_ip_reass_dynfield(head)->nb_frags = hdr->w0.num_frags - 1; + rte_eth_ip_reass_dynfield(head)->next_frag = NULL; + /* Frag-1: */ if (hdr->w0.num_frags > 1) { wqe = (uint64_t *)(rte_be_to_cpu_64(hdr->frag1_wqe_ptr)); @@ -128,13 +133,19 @@ nix_sec_attach_frags(const struct cpt_parse_hdr_s *hdr, frag_size = rlen + frag_rx->lcptr - frag_rx->laptr; frag_rx->pkt_lenm1 = frag_size - 1; - mbuf->next = (struct rte_mbuf *)(wqe - sizeof(struct rte_mbuf)); - mbuf = mbuf->next; + mbuf = (struct rte_mbuf *)(wqe - sizeof(struct rte_mbuf)); mbuf->data_len = frag_size; mbuf->pkt_len = frag_size; + mbuf->ol_flags |= RTE_MBUF_F_RX_IPREASSEMBLY_INCOMPLETE; /* Update dynamic field with userdata */ *rte_security_dynfield(mbuf) = (uint64_t)inb_priv->userdata; + + rte_eth_ip_reass_dynfield(mbuf)->nb_frags = + hdr->w0.num_frags - 2; + rte_eth_ip_reass_dynfield(mbuf)->next_frag = NULL; + rte_eth_ip_reass_dynfield(mbuf_prev)->next_frag = mbuf; + mbuf_prev = mbuf; } /* Frag-2: */ @@ -147,13 +158,19 @@ nix_sec_attach_frags(const struct cpt_parse_hdr_s *hdr, frag_size = rlen + frag_rx->lcptr - frag_rx->laptr; frag_rx->pkt_lenm1 = frag_size - 1; - mbuf->next = (struct rte_mbuf *)(wqe - sizeof(struct rte_mbuf)); - mbuf = mbuf->next; + mbuf = (struct rte_mbuf *)(wqe - sizeof(struct rte_mbuf)); mbuf->data_len = frag_size; mbuf->pkt_len = frag_size; + mbuf->ol_flags |= RTE_MBUF_F_RX_IPREASSEMBLY_INCOMPLETE; /* Update dynamic field with userdata */ *rte_security_dynfield(mbuf) = (uint64_t)inb_priv->userdata; + + rte_eth_ip_reass_dynfield(mbuf)->nb_frags = + hdr->w0.num_frags - 3; + rte_eth_ip_reass_dynfield(mbuf)->next_frag = NULL; + rte_eth_ip_reass_dynfield(mbuf_prev)->next_frag = mbuf; + mbuf_prev = mbuf; } /* Frag-3: */ @@ -165,16 +182,21 @@ nix_sec_attach_frags(const struct cpt_parse_hdr_s *hdr, frag_size = rlen + frag_rx->lcptr - frag_rx->laptr; frag_rx->pkt_lenm1 = frag_size - 1; - mbuf->next = (struct rte_mbuf *)(wqe - sizeof(struct rte_mbuf)); - mbuf = mbuf->next; + mbuf = (struct rte_mbuf *)(wqe - sizeof(struct rte_mbuf)); mbuf->data_len = frag_size; mbuf->pkt_len = frag_size; + mbuf->ol_flags |= RTE_MBUF_F_RX_IPREASSEMBLY_INCOMPLETE; /* Update dynamic field with userdata */ *rte_security_dynfield(mbuf) = (uint64_t)inb_priv->userdata; + + rte_eth_ip_reass_dynfield(mbuf)->nb_frags = + hdr->w0.num_frags - 4; + rte_eth_ip_reass_dynfield(mbuf)->next_frag = NULL; + rte_eth_ip_reass_dynfield(mbuf_prev)->next_frag = mbuf; } + head->next = NULL; - mbuf->next = NULL; return head; }