From patchwork Fri May 9 06:44:36 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ankur Dwivedi X-Patchwork-Id: 153370 X-Patchwork-Delegate: thomas@monjalon.net 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 1239C466FC; Fri, 9 May 2025 08:45:11 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 80926402E7; Fri, 9 May 2025 08:45:06 +0200 (CEST) Received: from mx0a-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id 8E2224026C for ; Fri, 9 May 2025 08:45:03 +0200 (CEST) Received: from pps.filterd (m0431384.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5492iIDH030900; Thu, 8 May 2025 23:45:02 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pfpt0220; bh=k 6BiDaaZgXoKkCnx1j8rFE+k5TarM/avmNwAL/f65EE=; b=Npbl1bnPlJv2Gv9QY Y1HeDlc/bla5aLuVv4jmI9dH+OYVpqhwWzaqmRC8CpFJHWyoyQaS3vmPlUwQxHOB SgRsYs7QQ91rDjawJP7XnSvVoh+0BL6kAP4kdqNfrs3xE+L21NhNU5gX201AL+SS q1dDzHLDmB1SVApeerO1JBm/PVWxd8MwoenfkKZygh00oQkAb+oujz86GGaen1pX xV/srC0e+E79X3yGnxvJ0ZLP61sWdr/8qJ0Jh0QwZ5N7kgbZAICrBVmVtyC2Dher mFcC142QaEzhUimMbkmIN9jEFzFMBcarsqA3div5s9Ed9xFHshPupw6O/I2cJVZM Sg4tg== Received: from dc5-exch05.marvell.com ([199.233.59.128]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 46h96c0cec-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 08 May 2025 23:45:02 -0700 (PDT) Received: from DC5-EXCH05.marvell.com (10.69.176.209) by DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 8 May 2025 23:45:02 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Thu, 8 May 2025 23:45:02 -0700 Received: from localhost.localdomain (unknown [10.28.36.185]) by maili.marvell.com (Postfix) with ESMTP id 026C43F7066; Thu, 8 May 2025 23:44:58 -0700 (PDT) From: Ankur Dwivedi To: CC: , , , , , , , Ankur Dwivedi Subject: [PATCH v2 01/13] fib: move macro to header file Date: Fri, 9 May 2025 12:14:36 +0530 Message-ID: <20250509064448.724019-2-adwivedi@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250509064448.724019-1-adwivedi@marvell.com> References: <20250415121052.1497155-1-adwivedi@marvell.com> <20250509064448.724019-1-adwivedi@marvell.com> MIME-Version: 1.0 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTA5MDA2MyBTYWx0ZWRfXxHJUEia0gFOA saLhS3l9qkrhhu2VhhyXWtRGMQzzVOKvIRZb4fe1DxV8HtBBH/S6T7T4zrO2ANUBnDJUVf0YS+n 6pi8ImJxhT55zCSm1x9fjAyFBTD73KsKlfeOXPm/xkAcCIF6JJIc8neWPTjqmx6wwJDF/lC+uNP qA88XZG5i8j1YRjmBCWBMS8sGVrDyy+FE/fvutIyc0vvFLkaDXTIBe0JQmTlNwHb4VZ3be7TB7+ 6KY9Qs5C0m4z6Yh7QZ4MwqkxCqRlf10jyYMAOv5ZOPuH0sY7lqM+/Usv/AKG/MRoCFXGe4udZ6M sYJfz/G4avPI17gInzJHJsZWj0Ovn5LxpzPKgQ1mzX/ErW8P2RdqVEDHIiApvYw6H3Ed9ewi/1f T0kwN5vohf9MqjzH6Pqrq+kdTIOKUH4WgPWjaKQdNj/geaWYd1bLKab4+C5MsKuJF+XmWhvl X-Proofpoint-GUID: siTFv3xNS08dT8SV2AzHe6t9Q-91onU1 X-Proofpoint-ORIG-GUID: siTFv3xNS08dT8SV2AzHe6t9Q-91onU1 X-Authority-Analysis: v=2.4 cv=dpXbC0g4 c=1 sm=1 tr=0 ts=681da46e cx=c_pps a=rEv8fa4AjpPjGxpoe8rlIQ==:117 a=rEv8fa4AjpPjGxpoe8rlIQ==:17 a=dt9VzEwgFbYA:10 a=M5GUcnROAAAA:8 a=vxp6wFEekYbuhhetsVcA:9 a=OBjm3rFKGHvpk9ecZwUJ:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-05-09_02,2025-05-08_04,2025-02-21_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 Moves RTE_FIB_NAMESIZE to header file, in order to use it outside the fib library. Signed-off-by: Ankur Dwivedi --- lib/fib/rte_fib.c | 3 --- lib/fib/rte_fib.h | 3 +++ 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/fib/rte_fib.c b/lib/fib/rte_fib.c index 2c05d46500..184210f380 100644 --- a/lib/fib/rte_fib.c +++ b/lib/fib/rte_fib.c @@ -28,9 +28,6 @@ static struct rte_tailq_elem rte_fib_tailq = { }; EAL_REGISTER_TAILQ(rte_fib_tailq) -/* Maximum length of a FIB name. */ -#define RTE_FIB_NAMESIZE 64 - #if defined(RTE_LIBRTE_FIB_DEBUG) #define FIB_RETURN_IF_TRUE(cond, retval) do { \ if (cond) \ diff --git a/lib/fib/rte_fib.h b/lib/fib/rte_fib.h index 53f04b8049..874bf1688b 100644 --- a/lib/fib/rte_fib.h +++ b/lib/fib/rte_fib.h @@ -27,6 +27,9 @@ extern "C" { struct rte_fib; struct rte_rib; +/* Maximum length of a FIB name. */ +#define RTE_FIB_NAMESIZE 64 + /** Maximum depth value possible for IPv4 FIB. */ #define RTE_FIB_MAXDEPTH 32 From patchwork Fri May 9 06:44:37 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ankur Dwivedi X-Patchwork-Id: 153371 X-Patchwork-Delegate: thomas@monjalon.net 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 B8B23466FC; Fri, 9 May 2025 08:45:17 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 75879402E6; Fri, 9 May 2025 08:45:11 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id EEDAB4026B for ; Fri, 9 May 2025 08:45:09 +0200 (CEST) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 548NIha1003978; Thu, 8 May 2025 23:45:09 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pfpt0220; bh=r 3h2IL19h1BaFwMZaMCE4ErGnLV0BMjRVjIai0lPhgk=; b=ehxttPsFGe4K3MUEs sYOUYmD81GNLeXdIXjTRgcNfacaSTNs+hTp8owsi+0sFF2hPXJN6iThgwTUoCd/V N9Hu1qmrLyOU3jRbl6M10YN4/RX0hBxPKsI03VAKSbqjbvDRMENvGY+259z2MK0+ QdezOiR2aqrGPlefIBuSuuATIBOpyqMW6eEBX0K21/U9x5vXJHq+D1EWmyMxLIes J4DcXkATYB60QJgDOQURvoZZqtaZQAm49G/0l5bazM+u5hBG81sS9bvSx8YivxDN pOmut05eCCJuQ1SkZ4e8WWg2b9Spte9HjP9JC2j3kUT55Jgad1yPgguVUXmul2w0 jtc8w== Received: from dc5-exch05.marvell.com ([199.233.59.128]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 46h65x0p91-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 08 May 2025 23:45:09 -0700 (PDT) Received: from DC5-EXCH05.marvell.com (10.69.176.209) by DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 8 May 2025 23:45:07 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Thu, 8 May 2025 23:45:07 -0700 Received: from localhost.localdomain (unknown [10.28.36.185]) by maili.marvell.com (Postfix) with ESMTP id E3FB83F704F; Thu, 8 May 2025 23:45:04 -0700 (PDT) From: Ankur Dwivedi To: CC: , , , , , , , Ankur Dwivedi Subject: [PATCH v2 02/13] node: add IP4 lookup FIB node Date: Fri, 9 May 2025 12:14:37 +0530 Message-ID: <20250509064448.724019-3-adwivedi@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250509064448.724019-1-adwivedi@marvell.com> References: <20250415121052.1497155-1-adwivedi@marvell.com> <20250509064448.724019-1-adwivedi@marvell.com> MIME-Version: 1.0 X-Authority-Analysis: v=2.4 cv=ZdsdNtVA c=1 sm=1 tr=0 ts=681da475 cx=c_pps a=rEv8fa4AjpPjGxpoe8rlIQ==:117 a=rEv8fa4AjpPjGxpoe8rlIQ==:17 a=dt9VzEwgFbYA:10 a=M5GUcnROAAAA:8 a=EON3tCc8ftYOkJwuPaQA:9 a=OBjm3rFKGHvpk9ecZwUJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTA5MDA2MyBTYWx0ZWRfXzJR3Ly4ZpN/G jdpnf3xueAO8D+KyghOxXr4cck3aUxWLa0/FYSI1y5lsZTOUwqJA3rEY07drFIbYY9J7IzHPGMT sPzrhZTfBk/kDMSFNjYrYQ074xiKegPJJBHRppDbP5XHN4Mm0erAo7Uo77ChubF4pMhUigkXo4D XZa4MZ6ABqqSqIfwxNbgxe6U7A9VfwW1oUzgGLzsqTCIJZ+kIax5F9H0xc+6QeqDhUdlAKgDpBg g4ahSU2Ww6kq4SLuJcQI2f+WVNr3tZF5dmjzjWMms4CPwIZ1EHYaIufsEF/4fPEirl8TwOD3T9B WhcrkmBH9Lwof3XwMNMAmvIfI11Wv8t7J2SmF1XoUkdyPAc9NTaMK+tlAjLt4x+5AY6qBugtS5j zhbYbmRZL7fUBZ92leCQIqg8x9NArA9qHr2cFKddd2uW81HpG8yTkkgRL6oVOzFcOwKC1Q8m X-Proofpoint-GUID: bpWwtRqktLgVdH8NZukRMOwcL-FP90v5 X-Proofpoint-ORIG-GUID: bpWwtRqktLgVdH8NZukRMOwcL-FP90v5 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-05-09_02,2025-05-08_04,2025-02-21_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 Adds a lookup FIB node for IP4. Adds a public function to do fib configuration from application. Signed-off-by: Ankur Dwivedi --- lib/node/ip4_lookup_fib.c | 141 ++++++++++++++++++++++++++++++++++++ lib/node/meson.build | 3 +- lib/node/rte_node_ip4_api.h | 15 ++++ 3 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 lib/node/ip4_lookup_fib.c diff --git a/lib/node/ip4_lookup_fib.c b/lib/node/ip4_lookup_fib.c new file mode 100644 index 0000000000..977d97b713 --- /dev/null +++ b/lib/node/ip4_lookup_fib.c @@ -0,0 +1,141 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(C) 2025 Marvell. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "rte_node_ip4_api.h" + +#include "node_private.h" + +/* IP4 Lookup global data struct */ +struct ip4_lookup_fib_node_main { + struct rte_fib *fib[RTE_MAX_NUMA_NODES]; +}; + +struct ip4_lookup_fib_node_ctx { + /* Socket's FIB */ + struct rte_fib *fib; + /* Dynamic offset to mbuf priv1 */ + int mbuf_priv1_off; +}; + +static struct ip4_lookup_fib_node_main ip4_lookup_fib_nm; + +#define FIB_DEFAULT_MAX_ROUTES (UINT16_MAX) +#define FIB_DEFAULT_NUM_TBL8 (UINT16_MAX / 2) +#define FIB_DEFAULT_NH (RTE_NODE_IP4_LOOKUP_NEXT_PKT_DROP << 16) + +#define IP4_LOOKUP_NODE_FIB(ctx) \ + (((struct ip4_lookup_fib_node_ctx *)ctx)->fib) + +#define IP4_LOOKUP_FIB_NODE_PRIV1_OFF(ctx) \ + (((struct ip4_lookup_fib_node_ctx *)ctx)->mbuf_priv1_off) + +RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_node_ip4_fib_create, 25.07) +int +rte_node_ip4_fib_create(int socket, struct rte_fib_conf *conf) +{ + struct ip4_lookup_fib_node_main *nm = &ip4_lookup_fib_nm; + char s[RTE_FIB_NAMESIZE]; + + /* One fib per socket */ + if (nm->fib[socket]) + return 0; + + conf->default_nh = FIB_DEFAULT_NH; + snprintf(s, sizeof(s), "IPV4_LOOKUP_FIB_%d", socket); + nm->fib[socket] = rte_fib_create(s, socket, conf); + if (nm->fib[socket] == NULL) + return -rte_errno; + + return 0; +} + +static int +setup_fib(int socket) +{ + struct ip4_lookup_fib_node_main *nm = &ip4_lookup_fib_nm; + struct rte_fib_conf conf; + char s[RTE_FIB_NAMESIZE]; + + /* One fib per socket */ + if (nm->fib[socket]) + return 0; + + conf.type = RTE_FIB_DIR24_8; + conf.default_nh = FIB_DEFAULT_NH; + conf.max_routes = FIB_DEFAULT_MAX_ROUTES; + conf.rib_ext_sz = 0; + conf.dir24_8.nh_sz = RTE_FIB_DIR24_8_4B; + conf.dir24_8.num_tbl8 = FIB_DEFAULT_NUM_TBL8; + conf.flags = 0; + snprintf(s, sizeof(s), "IPV4_LOOKUP_FIB_%d", socket); + nm->fib[socket] = rte_fib_create(s, socket, &conf); + if (nm->fib[socket] == NULL) + return -rte_errno; + + return 0; +} + +static int +ip4_lookup_fib_node_init(const struct rte_graph *graph, struct rte_node *node) +{ + static uint8_t init_once; + int rc; + + RTE_BUILD_BUG_ON(sizeof(struct ip4_lookup_fib_node_ctx) > RTE_NODE_CTX_SZ); + + if (!init_once) { + node_mbuf_priv1_dynfield_offset = rte_mbuf_dynfield_register( + &node_mbuf_priv1_dynfield_desc); + if (node_mbuf_priv1_dynfield_offset < 0) + return -rte_errno; + + init_once = 1; + } + + rc = setup_fib(graph->socket); + if (rc) { + node_err("ip4_lookup_fib", "Failed to setup fib for sock %u, rc=%d", + graph->socket, rc); + return rc; + } + + /* Update socket's FIB and mbuf dyn priv1 offset in node ctx */ + IP4_LOOKUP_NODE_FIB(node->ctx) = ip4_lookup_fib_nm.fib[graph->socket]; + IP4_LOOKUP_FIB_NODE_PRIV1_OFF(node->ctx) = node_mbuf_priv1_dynfield_offset; + + node_dbg("ip4_lookup_fib", "Initialized ip4_lookup_fib node"); + + return 0; +} + +static struct rte_node_xstats ip4_lookup_fib_xstats = { + .nb_xstats = 1, + .xstat_desc = { + [0] = "ip4_lookup_fib_error", + }, +}; + +static struct rte_node_register ip4_lookup_fib_node = { + .name = "ip4_lookup_fib", + + .init = ip4_lookup_fib_node_init, + .xstats = &ip4_lookup_fib_xstats, + + .nb_edges = RTE_NODE_IP4_LOOKUP_NEXT_PKT_DROP + 1, + .next_nodes = { + [RTE_NODE_IP4_LOOKUP_NEXT_IP4_LOCAL] = "ip4_local", + [RTE_NODE_IP4_LOOKUP_NEXT_REWRITE] = "ip4_rewrite", + [RTE_NODE_IP4_LOOKUP_NEXT_PKT_DROP] = "pkt_drop", + }, +}; + +RTE_NODE_REGISTER(ip4_lookup_fib_node); diff --git a/lib/node/meson.build b/lib/node/meson.build index 0bed97a96c..d2011c8f56 100644 --- a/lib/node/meson.build +++ b/lib/node/meson.build @@ -13,6 +13,7 @@ sources = files( 'ethdev_tx.c', 'ip4_local.c', 'ip4_lookup.c', + 'ip4_lookup_fib.c', 'ip4_reassembly.c', 'ip4_rewrite.c', 'ip6_lookup.c', @@ -34,4 +35,4 @@ headers = files( # Strict-aliasing rules are violated by uint8_t[] to context size casts. cflags += '-fno-strict-aliasing' -deps += ['graph', 'mbuf', 'lpm', 'ethdev', 'mempool', 'cryptodev', 'ip_frag'] +deps += ['graph', 'mbuf', 'lpm', 'ethdev', 'mempool', 'cryptodev', 'ip_frag', 'fib'] diff --git a/lib/node/rte_node_ip4_api.h b/lib/node/rte_node_ip4_api.h index 950751a525..1dac7a4936 100644 --- a/lib/node/rte_node_ip4_api.h +++ b/lib/node/rte_node_ip4_api.h @@ -18,6 +18,7 @@ #include #include +#include #include #ifdef __cplusplus @@ -117,6 +118,20 @@ int rte_node_ip4_rewrite_add(uint16_t next_hop, uint8_t *rewrite_data, __rte_experimental int rte_node_ip4_reassembly_configure(struct rte_node_ip4_reassembly_cfg *cfg, uint16_t cnt); +/** + * Create ipv4 FIB. + * + * @param socket + * NUMA socket for FIB memory allocation. + * @param conf + * Structure containing FIB configuration. + * + * @return + * 0 on success, negative otherwise. + */ +__rte_experimental +int rte_node_ip4_fib_create(int socket, struct rte_fib_conf *conf); + #ifdef __cplusplus } #endif From patchwork Fri May 9 06:44:38 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ankur Dwivedi X-Patchwork-Id: 153372 X-Patchwork-Delegate: thomas@monjalon.net 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 65342466FC; Fri, 9 May 2025 08:45:26 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A116D4060A; Fri, 9 May 2025 08:45:18 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id 392464060B for ; Fri, 9 May 2025 08:45:17 +0200 (CEST) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5496XpX2031222; Thu, 8 May 2025 23:45:16 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pfpt0220; bh=j zN7ydV2H6iCMt2rBh8hjF76qjt2fAhPPLxX8AlwEtE=; b=Kltip1bX24PhWKgGC 3r5MSAhi7p0cQCpenQt2MwbPVjbTcsR0zMc4bGvriQPt5U157t8Mdots5K5oX5vy i1sCSjDsusp+cqvobkDR0I4BTuH0V42th39EHJ4trVXXOJGF9++IyT/lI5075CQJ Xo7E8ylVSgrYshBIbb3GmJADs5c2NmVPdsOV3MJkReN0q7+DDPF+wz/G3F13vKrO ZMexv1fplwi53ZvV6Oiyb+Dp2935bia5PTayiFSbyfpsokHB/qEppQQMg5hYzvqH e4vKCnZFeUa+0lo0vyAxfxGE0vF87dkycybLd9UsonWezd44phu7j8lnbrl9MT3j k01xA== Received: from dc6wp-exch02.marvell.com ([4.21.29.225]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 46hcg080s9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 08 May 2025 23:45:16 -0700 (PDT) Received: from DC6WP-EXCH02.marvell.com (10.76.176.209) by DC6WP-EXCH02.marvell.com (10.76.176.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 8 May 2025 23:45:14 -0700 Received: from maili.marvell.com (10.69.176.80) by DC6WP-EXCH02.marvell.com (10.76.176.209) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Thu, 8 May 2025 23:45:14 -0700 Received: from localhost.localdomain (unknown [10.28.36.185]) by maili.marvell.com (Postfix) with ESMTP id A308A3F7063; Thu, 8 May 2025 23:45:11 -0700 (PDT) From: Ankur Dwivedi To: CC: , , , , , , , Ankur Dwivedi Subject: [PATCH v2 03/13] node: add IP4 FIB route add Date: Fri, 9 May 2025 12:14:38 +0530 Message-ID: <20250509064448.724019-4-adwivedi@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250509064448.724019-1-adwivedi@marvell.com> References: <20250415121052.1497155-1-adwivedi@marvell.com> <20250509064448.724019-1-adwivedi@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: pNuucOrohzppOweoaN8x3_w1-c_MUfLG X-Proofpoint-ORIG-GUID: pNuucOrohzppOweoaN8x3_w1-c_MUfLG X-Authority-Analysis: v=2.4 cv=BaPY0qt2 c=1 sm=1 tr=0 ts=681da47c cx=c_pps a=gIfcoYsirJbf48DBMSPrZA==:117 a=gIfcoYsirJbf48DBMSPrZA==:17 a=dt9VzEwgFbYA:10 a=M5GUcnROAAAA:8 a=KWxuKWQm0HYJUTJt3pUA:9 a=OBjm3rFKGHvpk9ecZwUJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTA5MDA2MyBTYWx0ZWRfX1OHGDYRMt7lK yQORr1xSKf7FPcjo3oVtwnmSMKYWsi9blEnLBoOsJsQk2dEcm6eIQh2y4JA1+CcIloUotThZcn1 gT1b9v7otjngBwg1jKgIhbL0z7HUQ7RKGLgFGbv11hZohowtw9B1YQNhto7GrYuB6jzTLfWOWlX 1yfgPASf0JBiqEbh5Vyb+yvTgkatwNXLs7Q2Ayysmn6JEDBZ9/87JElKDClOA10Wkk8mVFVjmb7 zSjqlmg8ws3aBZU0IfJzEBu/PNq6gj1hDeWYqlqFyjbsp4Q7YMRoki7KwadayOBXCGQg8XMPt4j aAEOr/qSWHjgNUyHmaZVY/Oi3DbgjwL8zIqoU9koxLtbWomxYeW+UNYzmR1R+lODh4RExjM3H8J avOgJADdoUn37LUxfn+ZeTlzqmBlW5IJW5X2A+5n+62M5usMedir3wlE4fsk0UMQgjGZmhKJ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-05-09_02,2025-05-08_04,2025-02-21_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 Adds a public function to add IP4 route to FIB. The applications should call this function to add IP4 routes to FIB. Signed-off-by: Ankur Dwivedi --- lib/node/ip4_lookup_fib.c | 37 +++++++++++++++++++++++++++++++++++++ lib/node/rte_node_ip4_api.h | 19 +++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/lib/node/ip4_lookup_fib.c b/lib/node/ip4_lookup_fib.c index 977d97b713..f300266c00 100644 --- a/lib/node/ip4_lookup_fib.c +++ b/lib/node/ip4_lookup_fib.c @@ -2,6 +2,8 @@ * Copyright(C) 2025 Marvell. */ +#include + #include #include #include @@ -58,6 +60,41 @@ rte_node_ip4_fib_create(int socket, struct rte_fib_conf *conf) return 0; } +RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_node_ip4_fib_route_add, 25.07) +int +rte_node_ip4_fib_route_add(uint32_t ip, uint8_t depth, uint16_t next_hop, + enum rte_node_ip4_lookup_next next_node) +{ + char abuf[INET6_ADDRSTRLEN]; + unsigned int nb_sockets; + struct in_addr in; + uint8_t socket; + uint32_t val; + int ret; + + nb_sockets = rte_socket_count(); + in.s_addr = htonl(ip); + inet_ntop(AF_INET, &in, abuf, sizeof(abuf)); + /* Embedded next node id into 24 bit next hop */ + val = ((next_node << 16) | next_hop) & ((1ull << 24) - 1); + node_dbg("ip4_lookup_fib", "FIB: Adding route %s / %d nh (0x%x)", abuf, depth, val); + + for (socket = 0; socket < nb_sockets; socket++) { + if (!ip4_lookup_fib_nm.fib[socket]) + continue; + + ret = rte_fib_add(ip4_lookup_fib_nm.fib[socket], ip, depth, val); + if (ret < 0) { + node_err("ip4_lookup_fib", + "Unable to add entry %s / %d nh (%x) to FIB on sock %d, rc=%d", + abuf, depth, val, socket, ret); + return ret; + } + } + + return 0; +} + static int setup_fib(int socket) { diff --git a/lib/node/rte_node_ip4_api.h b/lib/node/rte_node_ip4_api.h index 1dac7a4936..4d75c5f874 100644 --- a/lib/node/rte_node_ip4_api.h +++ b/lib/node/rte_node_ip4_api.h @@ -132,6 +132,25 @@ int rte_node_ip4_reassembly_configure(struct rte_node_ip4_reassembly_cfg *cfg, u __rte_experimental int rte_node_ip4_fib_create(int socket, struct rte_fib_conf *conf); +/** + * Add ipv4 route to FIB. + * + * @param ip + * IP address of route to be added. + * @param depth + * Depth of the rule to be added. + * @param next_hop + * Next hop id of the rule result to be added. + * @param next_node + * Next node to redirect traffic to. + * + * @return + * 0 on success, negative otherwise. + */ +__rte_experimental +int rte_node_ip4_fib_route_add(uint32_t ip, uint8_t depth, uint16_t next_hop, + enum rte_node_ip4_lookup_next next_node); + #ifdef __cplusplus } #endif From patchwork Fri May 9 06:44:39 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ankur Dwivedi X-Patchwork-Id: 153373 X-Patchwork-Delegate: thomas@monjalon.net 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 C0220466FC; Fri, 9 May 2025 08:45:32 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B692540608; Fri, 9 May 2025 08:45:24 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id EB7B4402E2 for ; Fri, 9 May 2025 08:45:22 +0200 (CEST) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 548NIYKP003775; Thu, 8 May 2025 23:45:22 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pfpt0220; bh=B wcCesHYb591No8TpfnNncmZkKK4MEvVnVMp0vZwji8=; b=Y8rkbIrfYuZmPUME2 E0s36DjecS96hzDUXUXx3w2d2nvyGFrw9KYuXvfNTCwkvUALbrstw3Vk2Z4hLuIx NpZ25Ok9rEzQOBOUG4VBHNpLFhVVMm+vz9tq2fvePfDFcA9h14umVLn2WZIpRFSv +XVMQRlqX/rgXrygZFXY93YP/c5RN+MLgaN88DcI91pC/zeH1tQjGqK+zdoLN/aI 9J/3WNbnnxztfJFivT6AxULcnqOjdybuShp2faQYZrNZGrmLJmOxFRMBbhfneu6A ZjJoLAjlzbGCgpX9mQ9/o61IkqIKrxIcJNCvgW5pIFn+IYn2QYCCEkXgyXWS0ttD MSmSg== Received: from dc5-exch05.marvell.com ([199.233.59.128]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 46h65x0p9b-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 08 May 2025 23:45:22 -0700 (PDT) Received: from DC5-EXCH05.marvell.com (10.69.176.209) by DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 8 May 2025 23:45:20 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Thu, 8 May 2025 23:45:20 -0700 Received: from localhost.localdomain (unknown [10.28.36.185]) by maili.marvell.com (Postfix) with ESMTP id DFD043F704F; Thu, 8 May 2025 23:45:17 -0700 (PDT) From: Ankur Dwivedi To: CC: , , , , , , , Ankur Dwivedi Subject: [PATCH v2 04/13] node: add process callback for IP4 FIB Date: Fri, 9 May 2025 12:14:39 +0530 Message-ID: <20250509064448.724019-5-adwivedi@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250509064448.724019-1-adwivedi@marvell.com> References: <20250415121052.1497155-1-adwivedi@marvell.com> <20250509064448.724019-1-adwivedi@marvell.com> MIME-Version: 1.0 X-Authority-Analysis: v=2.4 cv=ZdsdNtVA c=1 sm=1 tr=0 ts=681da482 cx=c_pps a=rEv8fa4AjpPjGxpoe8rlIQ==:117 a=rEv8fa4AjpPjGxpoe8rlIQ==:17 a=dt9VzEwgFbYA:10 a=M5GUcnROAAAA:8 a=qYUj2gt9vubUHnbZ9DIA:9 a=OBjm3rFKGHvpk9ecZwUJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTA5MDA2MyBTYWx0ZWRfX84ShKFaha1q3 qvUvEDUMx8KJlmIex7U3DzM6QXgDd8t0inFQ2Qzykh+W7ZW9wke9HTASJRtr3R6aKlBBOZg7fuy VO9DlA9BrNbkatu1DXiwj4itIa2Nv+8REZabJDklivsoAr6IT+OMfFlCwh164Gemjtjl2OERLVB k4SRAcsDNHZWZdgtxCaIiR4NBsNRQQasE8tlMe2HCzXnnnBBe41qGt03bp9fNuRHiRgDIHA+QQ/ JfhlVTPMRF6gXDC+T5wJoiiAUEChPwWitlzINmzDOsDat1lggDa/AOwcgjbv4AI08TFma07sQ1E W4Dm5fd5XXR7ZtsOzh2+DBxWS8NnW8g0zlOvyURSp35szCA5/4U+r9DADyghjqTK7Xlwbt+Vwzc l3ockKZ657JDv5025clDhnfBsG+W0jR5rre9b0+odwbVpFnbvaK5NzpPApO3jvZM1zxuX6rq X-Proofpoint-GUID: DK1SRrMMfTtwjr9_a2g8_ECK_4uSM_SF X-Proofpoint-ORIG-GUID: DK1SRrMMfTtwjr9_a2g8_ECK_4uSM_SF X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-05-09_02,2025-05-08_04,2025-02-21_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 Adds the process callback function for ip4_lookup_fib node. Signed-off-by: Ankur Dwivedi --- lib/node/ip4_lookup_fib.c | 154 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) diff --git a/lib/node/ip4_lookup_fib.c b/lib/node/ip4_lookup_fib.c index f300266c00..f9a5c5aa5a 100644 --- a/lib/node/ip4_lookup_fib.c +++ b/lib/node/ip4_lookup_fib.c @@ -40,6 +40,159 @@ static struct ip4_lookup_fib_node_main ip4_lookup_fib_nm; #define IP4_LOOKUP_FIB_NODE_PRIV1_OFF(ctx) \ (((struct ip4_lookup_fib_node_ctx *)ctx)->mbuf_priv1_off) +static uint16_t +ip4_lookup_fib_node_process(struct rte_graph *graph, struct rte_node *node, void **objs, + uint16_t nb_objs) +{ + struct rte_mbuf *mbuf0, *mbuf1, *mbuf2, *mbuf3, **pkts; + const int dyn = IP4_LOOKUP_FIB_NODE_PRIV1_OFF(node->ctx); + struct rte_fib *fib = IP4_LOOKUP_NODE_FIB(node->ctx); + uint64_t next_hop[RTE_GRAPH_BURST_SIZE]; + uint32_t ip[RTE_GRAPH_BURST_SIZE]; + struct rte_ipv4_hdr *ipv4_hdr; + uint16_t lookup_err = 0; + void **to_next, **from; + uint16_t last_spec = 0; + rte_edge_t next_index; + uint16_t n_left_from; + uint16_t held = 0; + uint16_t next; + int i; + + /* Speculative next */ + next_index = RTE_NODE_IP4_LOOKUP_NEXT_REWRITE; + + pkts = (struct rte_mbuf **)objs; + from = objs; + n_left_from = nb_objs; + + /* Get stream for the speculated next node */ + to_next = rte_node_next_stream_get(graph, node, next_index, nb_objs); + + for (i = 0; i < 4 && i < n_left_from; i++) + rte_prefetch0(rte_pktmbuf_mtod_offset(pkts[i], void *, + sizeof(struct rte_ether_hdr))); + + i = 0; + while (n_left_from >= 4) { + if (likely(n_left_from > 7)) { + + /* Prefetch next-next mbufs */ + if (likely(n_left_from > 11)) { + rte_prefetch0(pkts[8]); + rte_prefetch0(pkts[9]); + rte_prefetch0(pkts[10]); + rte_prefetch0(pkts[11]); + } + + /* Prefetch next mbuf data */ + rte_prefetch0(rte_pktmbuf_mtod_offset(pkts[4], void *, + sizeof(struct rte_ether_hdr))); + rte_prefetch0(rte_pktmbuf_mtod_offset(pkts[5], void *, + sizeof(struct rte_ether_hdr))); + rte_prefetch0(rte_pktmbuf_mtod_offset(pkts[6], void *, + sizeof(struct rte_ether_hdr))); + rte_prefetch0(rte_pktmbuf_mtod_offset(pkts[7], void *, + sizeof(struct rte_ether_hdr))); + } + + mbuf0 = pkts[0]; + mbuf1 = pkts[1]; + mbuf2 = pkts[2]; + mbuf3 = pkts[3]; + pkts += 4; + n_left_from -= 4; + /* Extract DIP of mbuf0 */ + ipv4_hdr = rte_pktmbuf_mtod_offset(mbuf0, struct rte_ipv4_hdr *, + sizeof(struct rte_ether_hdr)); + /* Extract cksum, ttl as ipv4 hdr is in cache */ + node_mbuf_priv1(mbuf0, dyn)->cksum = ipv4_hdr->hdr_checksum; + node_mbuf_priv1(mbuf0, dyn)->ttl = ipv4_hdr->time_to_live; + + ip[i++] = rte_be_to_cpu_32(ipv4_hdr->dst_addr); + + /* Extract DIP of mbuf1 */ + ipv4_hdr = rte_pktmbuf_mtod_offset(mbuf1, struct rte_ipv4_hdr *, + sizeof(struct rte_ether_hdr)); + /* Extract cksum, ttl as ipv4 hdr is in cache */ + node_mbuf_priv1(mbuf1, dyn)->cksum = ipv4_hdr->hdr_checksum; + node_mbuf_priv1(mbuf1, dyn)->ttl = ipv4_hdr->time_to_live; + + ip[i++] = rte_be_to_cpu_32(ipv4_hdr->dst_addr); + + /* Extract DIP of mbuf2 */ + ipv4_hdr = rte_pktmbuf_mtod_offset(mbuf2, struct rte_ipv4_hdr *, + sizeof(struct rte_ether_hdr)); + /* Extract cksum, ttl as ipv4 hdr is in cache */ + node_mbuf_priv1(mbuf2, dyn)->cksum = ipv4_hdr->hdr_checksum; + node_mbuf_priv1(mbuf2, dyn)->ttl = ipv4_hdr->time_to_live; + + ip[i++] = rte_be_to_cpu_32(ipv4_hdr->dst_addr); + + /* Extract DIP of mbuf3 */ + ipv4_hdr = rte_pktmbuf_mtod_offset(mbuf3, struct rte_ipv4_hdr *, + sizeof(struct rte_ether_hdr)); + + /* Extract cksum, ttl as ipv4 hdr is in cache */ + node_mbuf_priv1(mbuf3, dyn)->cksum = ipv4_hdr->hdr_checksum; + node_mbuf_priv1(mbuf3, dyn)->ttl = ipv4_hdr->time_to_live; + + ip[i++] = rte_be_to_cpu_32(ipv4_hdr->dst_addr); + } + while (n_left_from > 0) { + mbuf0 = pkts[0]; + pkts += 1; + n_left_from -= 1; + + /* Extract DIP of mbuf0 */ + ipv4_hdr = rte_pktmbuf_mtod_offset(mbuf0, struct rte_ipv4_hdr *, + sizeof(struct rte_ether_hdr)); + /* Extract cksum, ttl as ipv4 hdr is in cache */ + node_mbuf_priv1(mbuf0, dyn)->cksum = ipv4_hdr->hdr_checksum; + node_mbuf_priv1(mbuf0, dyn)->ttl = ipv4_hdr->time_to_live; + + ip[i++] = rte_be_to_cpu_32(ipv4_hdr->dst_addr); + } + + rte_fib_lookup_bulk(fib, ip, next_hop, nb_objs); + + for (i = 0; i < nb_objs; i++) { + mbuf0 = (struct rte_mbuf *)objs[i]; + node_mbuf_priv1(mbuf0, dyn)->nh = (uint16_t)next_hop[i]; + next = (uint16_t)(next_hop[i] >> 16); + + if (unlikely(next_index ^ next)) { + /* Copy things successfully speculated till now */ + rte_memcpy(to_next, from, last_spec * sizeof(from[0])); + from += last_spec; + to_next += last_spec; + held += last_spec; + last_spec = 0; + + rte_node_enqueue_x1(graph, node, next, from[0]); + from += 1; + } else { + last_spec += 1; + } + + if (unlikely(next_hop[i] == FIB_DEFAULT_NH)) + lookup_err += 1; + } + + /* !!! Home run !!! */ + if (likely(last_spec == nb_objs)) { + rte_node_next_stream_move(graph, node, next_index); + return nb_objs; + } + + NODE_INCREMENT_XSTAT_ID(node, 0, lookup_err != 0, lookup_err); + held += last_spec; + rte_memcpy(to_next, from, last_spec * sizeof(from[0])); + rte_node_next_stream_put(graph, node, next_index, held); + + return nb_objs; +} + RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_node_ip4_fib_create, 25.07) int rte_node_ip4_fib_create(int socket, struct rte_fib_conf *conf) @@ -162,6 +315,7 @@ static struct rte_node_xstats ip4_lookup_fib_xstats = { }; static struct rte_node_register ip4_lookup_fib_node = { + .process = ip4_lookup_fib_node_process, .name = "ip4_lookup_fib", .init = ip4_lookup_fib_node_init, From patchwork Fri May 9 06:44:40 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ankur Dwivedi X-Patchwork-Id: 153374 X-Patchwork-Delegate: thomas@monjalon.net 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 00E68466FC; Fri, 9 May 2025 08:45:40 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A854740656; Fri, 9 May 2025 08:45:30 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id D86FA40657 for ; Fri, 9 May 2025 08:45:28 +0200 (CEST) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5496TOq3022506; Thu, 8 May 2025 23:45:28 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pfpt0220; bh=k a2cmyQjYPxCqnjOPswCFiYaRA/4jNCc3Tnt+XMxHUc=; b=ff6SJ4lbXIb807kZq 306NRLBBeATbsIFuOVS5egtCoygQuriWoL5mYaym1vKiOgQyQewWZWcwas9yI6bg KHrWeZuclzKx3AIZXr0QFCLaTOQgi02X8LOV+MFDlPs7g6Hw77xD5TkND3XJEJmQ Lk+5a8LPbTZhD/1phfp2H8fpLVRhDI7wo9t9O+gVsDsA5Gon+4YmtIrQfB6dCLRd KEXytWh4OVF2tevfqcW3F0PaXr/VoVwyBplG3qew2OAyawiJ8JJxjcEVlY8saEWv uSvZdp/Wk3i/bpdxkgTqT0JY3DRK5c044frU8ylE5lpCj3IYb54wa/OuBDpk8h46 IXVhA== Received: from dc6wp-exch02.marvell.com ([4.21.29.225]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 46hcg080uc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 08 May 2025 23:45:27 -0700 (PDT) Received: from DC6WP-EXCH02.marvell.com (10.76.176.209) by DC6WP-EXCH02.marvell.com (10.76.176.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 8 May 2025 23:45:26 -0700 Received: from maili.marvell.com (10.69.176.80) by DC6WP-EXCH02.marvell.com (10.76.176.209) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Thu, 8 May 2025 23:45:26 -0700 Received: from localhost.localdomain (unknown [10.28.36.185]) by maili.marvell.com (Postfix) with ESMTP id 9D5FE3F704F; Thu, 8 May 2025 23:45:23 -0700 (PDT) From: Ankur Dwivedi To: CC: , , , , , , , Ankur Dwivedi Subject: [PATCH v2 05/13] node: move next nodes to public header file Date: Fri, 9 May 2025 12:14:40 +0530 Message-ID: <20250509064448.724019-6-adwivedi@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250509064448.724019-1-adwivedi@marvell.com> References: <20250415121052.1497155-1-adwivedi@marvell.com> <20250509064448.724019-1-adwivedi@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: 25uvYnU3k4c42UODnRnmTcRvAeHfpbvM X-Proofpoint-ORIG-GUID: 25uvYnU3k4c42UODnRnmTcRvAeHfpbvM X-Authority-Analysis: v=2.4 cv=BaPY0qt2 c=1 sm=1 tr=0 ts=681da488 cx=c_pps a=gIfcoYsirJbf48DBMSPrZA==:117 a=gIfcoYsirJbf48DBMSPrZA==:17 a=dt9VzEwgFbYA:10 a=M5GUcnROAAAA:8 a=_h17C9ndNxRnRaLl5U8A:9 a=OBjm3rFKGHvpk9ecZwUJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTA5MDA2MyBTYWx0ZWRfXycMho5s2R+aR 6YAvMJ74YkcUNJtCqCKFbHge5P1WssSdaHm+1roXkZLbcdC05fqVUAjK6H/1GWGEH2s+sp+lkYY xHwfT0IejlP8KQlxDnjSyu7wvYZzN2KDmVYh4ZWVj5OAVCqL9tVAFhG6Fokw4CDCPRV/xK2LWO7 iEs27HT2G7mhKhuUs99Xylx6YHL1f4Dit/YSZiQNKhuskR9IFYBmPtYUBfJiN9WvwrtEtTEeDwJ upx5qz7wNRNh4ZASV/aMUsRcMgvzdXPyfdGJ97qEP+NXDhgLZYVQPR9M3dNITTKqtbPq5EkggaR lbTySapJ2gwy5KPru9mfxqYpDoLiph77UkK6/N/MfQHXInJ7/YADmxsVodwyKS2HlkKtDBCYA7J /1ckT2pZ7+DrWGpYdo9MsmsWGVtv7URvxtCudTRhuLyX78ipIrO2E3AErOfOFjvwKhRVNGbv X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-05-09_02,2025-05-08_04,2025-02-21_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 Moves the next nodes of packet classification node to a public header files, so that it can be used from applications. Signed-off-by: Ankur Dwivedi --- lib/node/meson.build | 1 + lib/node/pkt_cls.c | 33 +++++++++++++++-------------- lib/node/pkt_cls_priv.h | 7 ------- lib/node/rte_node_pkt_cls_api.h | 37 +++++++++++++++++++++++++++++++++ 4 files changed, 55 insertions(+), 23 deletions(-) create mode 100644 lib/node/rte_node_pkt_cls_api.h diff --git a/lib/node/meson.build b/lib/node/meson.build index d2011c8f56..8112cf7f5b 100644 --- a/lib/node/meson.build +++ b/lib/node/meson.build @@ -30,6 +30,7 @@ headers = files( 'rte_node_eth_api.h', 'rte_node_ip4_api.h', 'rte_node_ip6_api.h', + 'rte_node_pkt_cls_api.h', 'rte_node_udp4_input_api.h', ) diff --git a/lib/node/pkt_cls.c b/lib/node/pkt_cls.c index 9d21b7f307..5d6409fdbf 100644 --- a/lib/node/pkt_cls.c +++ b/lib/node/pkt_cls.c @@ -9,36 +9,37 @@ #include "pkt_cls_priv.h" #include "node_private.h" +#include "rte_node_pkt_cls_api.h" /* Next node for each ptype, default is '0' is "pkt_drop" */ static const alignas(RTE_CACHE_LINE_SIZE) uint8_t p_nxt[256] = { - [RTE_PTYPE_L3_IPV4] = PKT_CLS_NEXT_IP4_LOOKUP, + [RTE_PTYPE_L3_IPV4] = RTE_NODE_PKT_CLS_NEXT_IP4_LOOKUP, - [RTE_PTYPE_L3_IPV4_EXT] = PKT_CLS_NEXT_IP4_LOOKUP, + [RTE_PTYPE_L3_IPV4_EXT] = RTE_NODE_PKT_CLS_NEXT_IP4_LOOKUP, - [RTE_PTYPE_L3_IPV4_EXT_UNKNOWN] = PKT_CLS_NEXT_IP4_LOOKUP, + [RTE_PTYPE_L3_IPV4_EXT_UNKNOWN] = RTE_NODE_PKT_CLS_NEXT_IP4_LOOKUP, [RTE_PTYPE_L3_IPV4 | RTE_PTYPE_L2_ETHER] = - PKT_CLS_NEXT_IP4_LOOKUP, + RTE_NODE_PKT_CLS_NEXT_IP4_LOOKUP, [RTE_PTYPE_L3_IPV4_EXT | RTE_PTYPE_L2_ETHER] = - PKT_CLS_NEXT_IP4_LOOKUP, + RTE_NODE_PKT_CLS_NEXT_IP4_LOOKUP, [RTE_PTYPE_L3_IPV4_EXT_UNKNOWN | RTE_PTYPE_L2_ETHER] = - PKT_CLS_NEXT_IP4_LOOKUP, + RTE_NODE_PKT_CLS_NEXT_IP4_LOOKUP, - [RTE_PTYPE_L3_IPV6] = PKT_CLS_NEXT_IP6_LOOKUP, + [RTE_PTYPE_L3_IPV6] = RTE_NODE_PKT_CLS_NEXT_IP6_LOOKUP, - [RTE_PTYPE_L3_IPV6_EXT] = PKT_CLS_NEXT_IP6_LOOKUP, + [RTE_PTYPE_L3_IPV6_EXT] = RTE_NODE_PKT_CLS_NEXT_IP6_LOOKUP, - [RTE_PTYPE_L3_IPV6_EXT_UNKNOWN] = PKT_CLS_NEXT_IP6_LOOKUP, + [RTE_PTYPE_L3_IPV6_EXT_UNKNOWN] = RTE_NODE_PKT_CLS_NEXT_IP6_LOOKUP, - [RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L2_ETHER] = PKT_CLS_NEXT_IP6_LOOKUP, + [RTE_PTYPE_L3_IPV6 | RTE_PTYPE_L2_ETHER] = RTE_NODE_PKT_CLS_NEXT_IP6_LOOKUP, - [RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L2_ETHER] = PKT_CLS_NEXT_IP6_LOOKUP, + [RTE_PTYPE_L3_IPV6_EXT | RTE_PTYPE_L2_ETHER] = RTE_NODE_PKT_CLS_NEXT_IP6_LOOKUP, [RTE_PTYPE_L3_IPV6_EXT_UNKNOWN | RTE_PTYPE_L2_ETHER] = - PKT_CLS_NEXT_IP6_LOOKUP, + RTE_NODE_PKT_CLS_NEXT_IP6_LOOKUP, }; static uint16_t @@ -226,12 +227,12 @@ struct rte_node_register pkt_cls_node = { .process = pkt_cls_node_process, .name = "pkt_cls", - .nb_edges = PKT_CLS_NEXT_MAX, + .nb_edges = RTE_NODE_PKT_CLS_NEXT_MAX, .next_nodes = { /* Pkt drop node starts at '0' */ - [PKT_CLS_NEXT_PKT_DROP] = "pkt_drop", - [PKT_CLS_NEXT_IP4_LOOKUP] = "ip4_lookup", - [PKT_CLS_NEXT_IP6_LOOKUP] = "ip6_lookup", + [RTE_NODE_PKT_CLS_NEXT_PKT_DROP] = "pkt_drop", + [RTE_NODE_PKT_CLS_NEXT_IP4_LOOKUP] = "ip4_lookup", + [RTE_NODE_PKT_CLS_NEXT_IP6_LOOKUP] = "ip6_lookup", }, }; RTE_NODE_REGISTER(pkt_cls_node); diff --git a/lib/node/pkt_cls_priv.h b/lib/node/pkt_cls_priv.h index 16135807a1..63c26cae2a 100644 --- a/lib/node/pkt_cls_priv.h +++ b/lib/node/pkt_cls_priv.h @@ -10,11 +10,4 @@ struct pkt_cls_node_ctx { uint16_t l2l3_type; }; -enum pkt_cls_next_nodes { - PKT_CLS_NEXT_PKT_DROP, - PKT_CLS_NEXT_IP4_LOOKUP, - PKT_CLS_NEXT_IP6_LOOKUP, - PKT_CLS_NEXT_MAX, -}; - #endif /* __INCLUDE_PKT_CLS_PRIV_H__ */ diff --git a/lib/node/rte_node_pkt_cls_api.h b/lib/node/rte_node_pkt_cls_api.h new file mode 100644 index 0000000000..36276db63c --- /dev/null +++ b/lib/node/rte_node_pkt_cls_api.h @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(C) 2025 Marvell. + */ + +#ifndef __INCLUDE_RTE_NODE_PKT_CLS_API_H__ +#define __INCLUDE_RTE_NODE_PKT_CLS_API_H__ + +/** + * @file rte_node_pkt_cls_api.h + * + * @warning + * @b EXPERIMENTAL: + * All functions in this file may be changed or removed without prior notice. + * + * This API allows to do control path functions of pkt_cls node. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Packet classification (pkt_cls) next nodes. + */ + +enum rte_node_pkt_cls_next { + RTE_NODE_PKT_CLS_NEXT_PKT_DROP, + RTE_NODE_PKT_CLS_NEXT_IP4_LOOKUP, + RTE_NODE_PKT_CLS_NEXT_IP6_LOOKUP, + RTE_NODE_PKT_CLS_NEXT_MAX, +}; + +#ifdef __cplusplus +} +#endif + +#endif /* __INCLUDE_RTE_NODE_PKT_CLS_API_H__ */ From patchwork Fri May 9 06:44:41 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ankur Dwivedi X-Patchwork-Id: 153375 X-Patchwork-Delegate: thomas@monjalon.net 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 D5396466FC; Fri, 9 May 2025 08:45:46 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id AF6DC40654; Fri, 9 May 2025 08:45:35 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id 2E4B44065B for ; Fri, 9 May 2025 08:45:34 +0200 (CEST) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5496UnLM024731; Thu, 8 May 2025 23:45:33 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pfpt0220; bh=i EMM2O136aLoVpQIXkoG7R1tuTn+wq8j811VzS5Ao7M=; b=RCWZKY74LDCtOO3B1 8KHFQrd/vzFuT34ihS2EdfeMSDYHdiGW5BcxkftOiaRKFMLqmB1BfdNQaLEimNUK vuLCOynmPTJoUcjNUjG8a2C34/V+aQNG5ZVCCJwxflBPrQzSp0zzEqIlQIEOY9yO drtCv/tYoo+qZW9lcBwICNwcoRtwRsyRldyOq2y+kC0DA2XfUhvVA2iLURJfIt3G Ejv0r3Es+DAimOawBbTjruEqQyjag0Rym8dW72Wrg4U18nb1B4/Wx5Qrkvz0AVKX Fojz0pFd33myyaM6DXc0a5kkBnIkMmj6ouV2N48j3LJ53D12JCVPR8Ans+GNIbor gJXEQ== Received: from dc5-exch05.marvell.com ([199.233.59.128]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 46hcg080un-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 08 May 2025 23:45:33 -0700 (PDT) Received: from DC5-EXCH05.marvell.com (10.69.176.209) by DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 8 May 2025 23:45:32 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Thu, 8 May 2025 23:45:32 -0700 Received: from localhost.localdomain (unknown [10.28.36.185]) by maili.marvell.com (Postfix) with ESMTP id 9E5B63F704F; Thu, 8 May 2025 23:45:29 -0700 (PDT) From: Ankur Dwivedi To: CC: , , , , , , , Ankur Dwivedi Subject: [PATCH v2 06/13] node: add next node in packet classification Date: Fri, 9 May 2025 12:14:41 +0530 Message-ID: <20250509064448.724019-7-adwivedi@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250509064448.724019-1-adwivedi@marvell.com> References: <20250415121052.1497155-1-adwivedi@marvell.com> <20250509064448.724019-1-adwivedi@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: 5oPL5WCmBz6ZDtW28bJDBB49YeRCwI7t X-Proofpoint-ORIG-GUID: 5oPL5WCmBz6ZDtW28bJDBB49YeRCwI7t X-Authority-Analysis: v=2.4 cv=BaPY0qt2 c=1 sm=1 tr=0 ts=681da48d cx=c_pps a=rEv8fa4AjpPjGxpoe8rlIQ==:117 a=rEv8fa4AjpPjGxpoe8rlIQ==:17 a=dt9VzEwgFbYA:10 a=M5GUcnROAAAA:8 a=CLRsz27iqT3RNSdrtEwA:9 a=OBjm3rFKGHvpk9ecZwUJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTA5MDA2MyBTYWx0ZWRfX6DAk1IbPCEp/ mFh7xnu1jFjWt4KEIwQNqe1d8+dXL/uz+W41wuVgm7NEE9saREjrUQjbzcH1sS8PS+5n20Z+wSJ 6vtKLBvska5otLWCHvPLcGFnJdra6oDFbFvnNm67R7zxWQgV8SQb2j/b+r0YmpOwmj5LZD7oScC DlIZz6hXBwOVw/8NTDQZavgjcFMCKN0gWHX4srRfCtXIA78APl+f5CtVqZ0XwQXlVNT1DkFbjRl WHjLScSVUOEblA4RuJ06+5P+xEYOErwMjN4C7k2ANmYecyJerXz+jAwh9OKv2z38Aznhm9F3YYc T05LhaRqqSztvB6/LEM81FXnPIQVWeWpRGAMlJJhj8ePNFDlXgs7IWSvvzQWkVGmEOtScY8cjdC rC4gf9PWjfL7L2N6MgLvW/Jk0qJTSWZbR7h+3xAKcllMjGoJB/4+6QPNSjQAkMEr016HQwk0 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-05-09_02,2025-05-08_04,2025-02-21_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 The ip4_lookup_fib is added as next node in packet classification. Signed-off-by: Ankur Dwivedi --- lib/node/pkt_cls.c | 1 + lib/node/rte_node_pkt_cls_api.h | 1 + 2 files changed, 2 insertions(+) diff --git a/lib/node/pkt_cls.c b/lib/node/pkt_cls.c index 5d6409fdbf..f6e76989bc 100644 --- a/lib/node/pkt_cls.c +++ b/lib/node/pkt_cls.c @@ -233,6 +233,7 @@ struct rte_node_register pkt_cls_node = { [RTE_NODE_PKT_CLS_NEXT_PKT_DROP] = "pkt_drop", [RTE_NODE_PKT_CLS_NEXT_IP4_LOOKUP] = "ip4_lookup", [RTE_NODE_PKT_CLS_NEXT_IP6_LOOKUP] = "ip6_lookup", + [RTE_NODE_PKT_CLS_NEXT_IP4_LOOKUP_FIB] = "ip4_lookup_fib", }, }; RTE_NODE_REGISTER(pkt_cls_node); diff --git a/lib/node/rte_node_pkt_cls_api.h b/lib/node/rte_node_pkt_cls_api.h index 36276db63c..8f935bebbe 100644 --- a/lib/node/rte_node_pkt_cls_api.h +++ b/lib/node/rte_node_pkt_cls_api.h @@ -27,6 +27,7 @@ enum rte_node_pkt_cls_next { RTE_NODE_PKT_CLS_NEXT_PKT_DROP, RTE_NODE_PKT_CLS_NEXT_IP4_LOOKUP, RTE_NODE_PKT_CLS_NEXT_IP6_LOOKUP, + RTE_NODE_PKT_CLS_NEXT_IP4_LOOKUP_FIB, RTE_NODE_PKT_CLS_NEXT_MAX, }; From patchwork Fri May 9 06:44:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ankur Dwivedi X-Patchwork-Id: 153376 X-Patchwork-Delegate: thomas@monjalon.net 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 A104B466FC; Fri, 9 May 2025 08:45:56 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2D5AD40647; Fri, 9 May 2025 08:45:42 +0200 (CEST) Received: from mx0a-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id 25A4540662 for ; Fri, 9 May 2025 08:45:41 +0200 (CEST) Received: from pps.filterd (m0431384.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5492j6Sc032571; Thu, 8 May 2025 23:45:40 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pfpt0220; bh=6 5PWOkDJA5pHSccK6n+w3y7k95TfCvOXaC886bXGymk=; b=aZ/TSKydqv3+Kkm8L qeXGCexpqE87HbXTq6RKPdkAxYabzE/lNHISRzG4lfzsnTV5E21I+Sa0qJuTlV8B AiMwUe+CRxpcvy+3/3HusxnyIZorbQNlC2Nh8ru/+1ueR0vbTJfKLdovAk5fWEUz 1WRilKvXaVCddHW708C2xMEhSZ2CGdajuf4FwJp5S4u8ia5O8woq/o/TGmZHbpf6 OHXhVeqgyO0RdEBv2UWsOqeFqRGXS34f1p1ZY82Sl3PM3Zi0Gee/LwAHcWX9RCee x3hpfXbzCOTvR1UuyEjrLyKGTjI5b59kttapn8ZJQu2VlBayom2HPpN+3mf+Oo03 uBL3w== Received: from dc6wp-exch02.marvell.com ([4.21.29.225]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 46h96c0che-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 08 May 2025 23:45:40 -0700 (PDT) Received: from DC6WP-EXCH02.marvell.com (10.76.176.209) by DC6WP-EXCH02.marvell.com (10.76.176.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 8 May 2025 23:45:39 -0700 Received: from maili.marvell.com (10.69.176.80) by DC6WP-EXCH02.marvell.com (10.76.176.209) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Thu, 8 May 2025 23:45:38 -0700 Received: from localhost.localdomain (unknown [10.28.36.185]) by maili.marvell.com (Postfix) with ESMTP id D23DC3F704F; Thu, 8 May 2025 23:45:35 -0700 (PDT) From: Ankur Dwivedi To: CC: , , , , , , , Ankur Dwivedi Subject: [PATCH v2 07/13] app/graph: add IP4 lookup mode command Date: Fri, 9 May 2025 12:14:42 +0530 Message-ID: <20250509064448.724019-8-adwivedi@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250509064448.724019-1-adwivedi@marvell.com> References: <20250415121052.1497155-1-adwivedi@marvell.com> <20250509064448.724019-1-adwivedi@marvell.com> MIME-Version: 1.0 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTA5MDA2MyBTYWx0ZWRfX/I48NFCLUL/R RkQLFS6Cp2j3byidJRMF8SuAaTz4jNnHkiVESu+nNeU8fZaMuLn4KSjIWlEXEi/YjYsW29IFqs2 F3dS15pVktFkN9KVDNuxHB2tKCnTkP0RwZhxhk8XQ7NTWVn1BU2NrNCGpDbg/G6OOF92GcGTHrk +L3BcRvbEpDfUCuAYmIs/5ECm0J4mwVw2Rg3wh1JsZr0mAJXCgS9E5qCiLIl09rjXJXRBxJoL9E dYmcNbnpw0vqoydUM0vIwSnZBD2Xd6anVvnel18uIHe/yvU/AHltQG2FRKnCwSz5kS1//FC8VKm wBIM7rKgqnLgrfNIH8RR95SZNfDcqWzfxUy3tXTnXvjIGYyO6DyikmAGIXJQ6oZYnuqJ3X+1kEG c+9H/6Kp95ByXyQs9+19KhOjXHbwSBRMXI1kwMoNYkz1we2fsezbIOUNMdL6QL+SHPk/db8j X-Proofpoint-GUID: OHc-RxEgeAOvYkE_QhJwRxWR9RGF1bIt X-Proofpoint-ORIG-GUID: OHc-RxEgeAOvYkE_QhJwRxWR9RGF1bIt X-Authority-Analysis: v=2.4 cv=dpXbC0g4 c=1 sm=1 tr=0 ts=681da494 cx=c_pps a=gIfcoYsirJbf48DBMSPrZA==:117 a=gIfcoYsirJbf48DBMSPrZA==:17 a=dt9VzEwgFbYA:10 a=M5GUcnROAAAA:8 a=uxt5wEsAh8ZO_iMQKQYA:9 a=OBjm3rFKGHvpk9ecZwUJ:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-05-09_02,2025-05-08_04,2025-02-21_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 Adds a command to setup lookup mode for IP4 packets. By default the LPM mode is used. FIB can be given as a lookup mode by specifying the mode in CLI file. When FIB is given as lookup mode, the next node of packet classification node is updated to use IP4 lookup fib node. Signed-off-by: Ankur Dwivedi --- app/graph/commands.list | 1 + app/graph/ip4_route.c | 34 ++++++++++++++++++++++++++++++---- app/graph/l3fwd.c | 36 ++++++++++++++++++++++++++++++++++++ app/graph/module_api.h | 7 +++++++ doc/guides/tools/graph.rst | 12 ++++++++---- 5 files changed, 82 insertions(+), 8 deletions(-) diff --git a/app/graph/commands.list b/app/graph/commands.list index c027f73b0e..7a1bf0c708 100644 --- a/app/graph/commands.list +++ b/app/graph/commands.list @@ -23,6 +23,7 @@ ethdev_rx map port dev queue qid core core_id # Port-Que help ethdev_rx # Print help on ethdev_rx commands ipv4_lookup route add ipv4 ip netmask mask via via_ip # Add IPv4 route to LPM table +ipv4_lookup mode lkup_mode # Set IPv4 lookup mode help ipv4_lookup # Print help on ipv4_lookup commands ipv6_lookup route add ipv6 ip netmask mask via via_ip # Add IPv6 route to LPM6 table diff --git a/app/graph/ip4_route.c b/app/graph/ip4_route.c index 48ea912597..9af2c26078 100644 --- a/app/graph/ip4_route.c +++ b/app/graph/ip4_route.c @@ -18,8 +18,13 @@ static const char cmd_ipv4_lookup_help[] = "ipv4_lookup route add ipv4 netmask via "; +static const char +cmd_ipv4_lookup_mode_help[] = "ipv4_lookup mode "; + struct ip4_route route4 = TAILQ_HEAD_INITIALIZER(route4); +enum ip4_lookup_mode ip4_lookup_m = IP4_LOOKUP_LPM; + void route_ip4_list_clean(void) { @@ -62,6 +67,7 @@ route4_rewirte_table_update(struct route_ipv4_config *ipv4route) { uint8_t depth; int portid; + int rc; portid = ethdev_portid_by_ip4(ipv4route->via, ipv4route->netmask); if (portid < 0) { @@ -71,8 +77,14 @@ route4_rewirte_table_update(struct route_ipv4_config *ipv4route) depth = convert_netmask_to_depth(ipv4route->netmask); - return rte_node_ip4_route_add(ipv4route->ip, depth, portid, - RTE_NODE_IP4_LOOKUP_NEXT_REWRITE); + if (ip4_lookup_m == IP4_LOOKUP_FIB) + rc = rte_node_ip4_fib_route_add(ipv4route->ip, depth, portid, + RTE_NODE_IP4_LOOKUP_NEXT_REWRITE); + else + rc = rte_node_ip4_route_add(ipv4route->ip, depth, portid, + RTE_NODE_IP4_LOOKUP_NEXT_REWRITE); + + return rc; } static int @@ -134,9 +146,9 @@ cmd_help_ipv4_lookup_parsed(__rte_unused void *parsed_result, __rte_unused struc len = strlen(conn->msg_out); conn->msg_out += len; - snprintf(conn->msg_out, conn->msg_out_len_max, "\n%s\n%s\n", + snprintf(conn->msg_out, conn->msg_out_len_max, "\n%s\n%s\n%s\n", "--------------------------- ipv4_lookup command help ---------------------------", - cmd_ipv4_lookup_help); + cmd_ipv4_lookup_help, cmd_ipv4_lookup_mode_help); len = strlen(conn->msg_out); conn->msg_out_len_max -= len; @@ -158,3 +170,17 @@ cmd_ipv4_lookup_route_add_ipv4_parsed(void *parsed_result, __rte_unused struct c if (rc < 0) printf(MSG_CMD_FAIL, res->ipv4_lookup); } + +void +cmd_ipv4_lookup_mode_parsed(void *parsed_result, __rte_unused struct cmdline *cl, + void *data __rte_unused) +{ + struct cmd_ipv4_lookup_mode_result *res = parsed_result; + + if (!strcmp(res->lkup_mode, "lpm")) + ip4_lookup_m = IP4_LOOKUP_LPM; + else if (!strcmp(res->lkup_mode, "fib")) + ip4_lookup_m = IP4_LOOKUP_FIB; + else + printf(MSG_CMD_FAIL, res->ipv4_lookup); +} diff --git a/app/graph/l3fwd.c b/app/graph/l3fwd.c index a2648df27d..48dff9fa07 100644 --- a/app/graph/l3fwd.c +++ b/app/graph/l3fwd.c @@ -15,9 +15,28 @@ #include #include #include +#include +#include #include "module_api.h" +static int +setup_fib(int socket) +{ + struct rte_fib_conf conf; + +#define FIB_MAX_ROUTES (UINT16_MAX) +#define FIB_NUM_TBL8 (UINT16_MAX / 2) + conf.type = RTE_FIB_DIR24_8; + conf.max_routes = FIB_MAX_ROUTES; + conf.rib_ext_sz = 0; + conf.dir24_8.nh_sz = RTE_FIB_DIR24_8_4B; + conf.dir24_8.num_tbl8 = FIB_NUM_TBL8; + conf.flags = 0; + + return rte_node_ip4_fib_create(socket, &conf); +} + static int l3fwd_pattern_configure(void) { @@ -53,6 +72,16 @@ l3fwd_pattern_configure(void) graph_conf.num_pkt_to_capture = pcap_pkts_count; graph_conf.pcap_filename = strdup(pcap_file); + if (ip4_lookup_m == IP4_LOOKUP_FIB) { + const char *fib_n = "ip4_lookup_fib"; + const char *lpm_n = "ip4_lookup"; + rte_node_t pkt_cls; + + pkt_cls = rte_node_from_name("pkt_cls"); + rte_node_edge_update(pkt_cls, RTE_NODE_PKT_CLS_NEXT_IP4_LOOKUP, &fib_n, 1); + rte_node_edge_update(pkt_cls, RTE_NODE_PKT_CLS_NEXT_IP4_LOOKUP_FIB, &lpm_n, 1); + } + for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id++) { rte_graph_t graph_id; rte_edge_t i; @@ -78,6 +107,13 @@ l3fwd_pattern_configure(void) snprintf(qconf->name, sizeof(qconf->name), "worker_%u", lcore_id); + if (ip4_lookup_m == IP4_LOOKUP_FIB) { + rc = setup_fib(graph_conf.socket_id); + if (rc < 0) + rte_exit(EXIT_FAILURE, "Unable to setup fib for socket %u\n", + graph_conf.socket_id); + } + graph_id = rte_graph_create(qconf->name, &graph_conf); if (graph_id == RTE_GRAPH_ID_INVALID) rte_exit(EXIT_FAILURE, diff --git a/app/graph/module_api.h b/app/graph/module_api.h index b872872dc1..b8188d30d5 100644 --- a/app/graph/module_api.h +++ b/app/graph/module_api.h @@ -27,6 +27,13 @@ extern volatile bool force_quit; extern struct conn *conn; +enum ip4_lookup_mode { + IP4_LOOKUP_LPM, + IP4_LOOKUP_FIB +}; + +extern enum ip4_lookup_mode ip4_lookup_m; + bool app_graph_stats_enabled(void); bool app_graph_exit(void); diff --git a/doc/guides/tools/graph.rst b/doc/guides/tools/graph.rst index d8c147d73e..2caf441591 100644 --- a/doc/guides/tools/graph.rst +++ b/doc/guides/tools/graph.rst @@ -235,10 +235,14 @@ file to express the requested use case configuration. | | | message. | | | +--------------------------------------+-----------------------------------+-------------------+----------+ | | ipv4_lookup route add ipv4 | | Command to add a route into | :ref:`3 ` | Yes | - | | netmask via | | ``ipv4_lookup`` LPM table. It is| | | - | | | needed if user wishes to route | | | - | | | the packets based on LPM lookup | | | - | | | table. | | | + | | netmask via | | ``ipv4_lookup`` LPM table or | | | + | | | FIB. It is needed if user wishes| | | + | | | to route the packets based on | | | + | | | LPM lookup table or FIB. | | | + +--------------------------------------+-----------------------------------+-------------------+----------+ + | | ipv4_lookup mode | | Command to set ipv4 lookup mode | :ref:`1 ` | Yes | + | | | to either LPM or FIB. By default| | | + | | | the lookup mode is LPM. | | | +--------------------------------------+-----------------------------------+-------------------+----------+ | help ipv4_lookup | | Command to dump ``ipv4_lookup`` | :ref:`2 ` | Yes | | | | help message. | | | From patchwork Fri May 9 06:44:43 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ankur Dwivedi X-Patchwork-Id: 153377 X-Patchwork-Delegate: thomas@monjalon.net 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 627F6466FC; Fri, 9 May 2025 08:46:04 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4416D4026C; Fri, 9 May 2025 08:45:48 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id 326654026C for ; Fri, 9 May 2025 08:45:47 +0200 (CEST) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 548NIYKQ003775; Thu, 8 May 2025 23:45:46 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pfpt0220; bh=+ dO1JhTyf0T6H3W8m0XjbrpCL1CWpYjk4ee/N2Ph7ac=; b=doxey1E6MEjg+KkRR I8eefz9mW4rV0kaPUw2yDv8qfFo9y5KyipvL0YuCTDMtwdk59C0wqvQv46go79B9 6LB7TKgf9eyR2dB4hzy/uRUh508b7NXdhO0d516ueEs7xWebqG+PXHoLM2kTtLiW PgWi6mA5t+rw6NkxZUymG70EFnnyZAewarSd7797dCj+wksuusMzxoDv5ZnuUUOg 6BwRzcu2m66qputtmN+KN+D8rtzo9O65fI3wIaQ91hi0ACwnrE5WfHl7jJryjyED gXVoHglNGAGNF0zcuk0kQDDJwMr+zHr5OGJ+uxKN0nYKd9wm0efYK997+Xvuz691 3nC0Q== Received: from dc5-exch05.marvell.com ([199.233.59.128]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 46h65x0pa1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 08 May 2025 23:45:46 -0700 (PDT) Received: from DC5-EXCH05.marvell.com (10.69.176.209) by DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 8 May 2025 23:45:45 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Thu, 8 May 2025 23:45:45 -0700 Received: from localhost.localdomain (unknown [10.28.36.185]) by maili.marvell.com (Postfix) with ESMTP id 313E33F704F; Thu, 8 May 2025 23:45:41 -0700 (PDT) From: Ankur Dwivedi To: CC: , , , , , , , Ankur Dwivedi Subject: [PATCH v2 08/13] fib: move macro to header file Date: Fri, 9 May 2025 12:14:43 +0530 Message-ID: <20250509064448.724019-9-adwivedi@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250509064448.724019-1-adwivedi@marvell.com> References: <20250415121052.1497155-1-adwivedi@marvell.com> <20250509064448.724019-1-adwivedi@marvell.com> MIME-Version: 1.0 X-Authority-Analysis: v=2.4 cv=ZdsdNtVA c=1 sm=1 tr=0 ts=681da49a cx=c_pps a=rEv8fa4AjpPjGxpoe8rlIQ==:117 a=rEv8fa4AjpPjGxpoe8rlIQ==:17 a=dt9VzEwgFbYA:10 a=M5GUcnROAAAA:8 a=iWd_wJcLHtG8fJjlCTcA:9 a=OBjm3rFKGHvpk9ecZwUJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTA5MDA2MyBTYWx0ZWRfXy96I4rsj/1gs a5TG/OWWjPN3YUQ9cH5cdAWF4dpOt2k6cYyaV5FQfgNwa8I0S4tl/UAg5nKf2SoE2DsGHhe7L8K tc65q8U/GFCbHkd2EIfADKOjpU4xLcG62zHlQKDoE6kvHUWOyY0g6ZS655p7lsTXKP/wSFw9SlE bzB4F+e0UheqR/UsTxXtqebwd6EunagmcOXSQC8ih4ioWTg882jGABG5vqM8C6igj9bqyjpVHrz lDE7dAebbTFPV6W2uxvboR3WHyPabrLPtEKCS7fBvLaF361tjbwAuHUlykwPpPPjvCp/tdhf7sg +CHofTLaE4ALpGPzYUv7WTHqzIzUEw3uz7LijFwmg/FOgMNDQZEYO1Og6RSz6Ip7Wx2rSx7FJQG HKYJDc/fVC3gRZWgdMq3dvhQxOUveLXjBsD3hnS7QaPz8Pe9eEZa608e+KdNPEXOBs3J6TUQ X-Proofpoint-GUID: XFjG9wskhD2I6ea2YN1Kk2GnqUc3M0SV X-Proofpoint-ORIG-GUID: XFjG9wskhD2I6ea2YN1Kk2GnqUc3M0SV X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-05-09_02,2025-05-08_04,2025-02-21_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 Moves the macro FIB6_NAMESIZE to header file and rename it to RTE_FIB6_NAMESIZE. Signed-off-by: Ankur Dwivedi --- lib/fib/rte_fib6.c | 11 ++++------- lib/fib/rte_fib6.h | 3 +++ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/fib/rte_fib6.c b/lib/fib/rte_fib6.c index 00647bdfa4..93a1c7197b 100644 --- a/lib/fib/rte_fib6.c +++ b/lib/fib/rte_fib6.c @@ -28,9 +28,6 @@ static struct rte_tailq_elem rte_fib6_tailq = { }; EAL_REGISTER_TAILQ(rte_fib6_tailq) -/* Maximum length of a FIB name. */ -#define FIB6_NAMESIZE 64 - #if defined(RTE_LIBRTE_FIB_DEBUG) #define FIB6_RETURN_IF_TRUE(cond, retval) do { \ if (cond) \ @@ -41,7 +38,7 @@ EAL_REGISTER_TAILQ(rte_fib6_tailq) #endif struct rte_fib6 { - char name[FIB6_NAMESIZE]; + char name[RTE_FIB6_NAMESIZE]; enum rte_fib6_type type; /**< Type of FIB struct */ struct rte_rib6 *rib; /**< RIB helper datastructure */ void *dp; /**< pointer to the dataplane struct*/ @@ -157,7 +154,7 @@ RTE_EXPORT_SYMBOL(rte_fib6_create) struct rte_fib6 * rte_fib6_create(const char *name, int socket_id, struct rte_fib6_conf *conf) { - char mem_name[FIB6_NAMESIZE]; + char mem_name[RTE_FIB6_NAMESIZE]; int ret; struct rte_fib6 *fib = NULL; struct rte_rib6 *rib = NULL; @@ -190,7 +187,7 @@ rte_fib6_create(const char *name, int socket_id, struct rte_fib6_conf *conf) /* guarantee there's no existing */ TAILQ_FOREACH(te, fib_list, next) { fib = (struct rte_fib6 *)te->data; - if (strncmp(name, fib->name, FIB6_NAMESIZE) == 0) + if (strncmp(name, fib->name, RTE_FIB6_NAMESIZE) == 0) break; } fib = NULL; @@ -261,7 +258,7 @@ rte_fib6_find_existing(const char *name) rte_mcfg_tailq_read_lock(); TAILQ_FOREACH(te, fib_list, next) { fib = (struct rte_fib6 *) te->data; - if (strncmp(name, fib->name, FIB6_NAMESIZE) == 0) + if (strncmp(name, fib->name, RTE_FIB6_NAMESIZE) == 0) break; } rte_mcfg_tailq_read_unlock(); diff --git a/lib/fib/rte_fib6.h b/lib/fib/rte_fib6.h index 42e6138708..625df1fa6b 100644 --- a/lib/fib/rte_fib6.h +++ b/lib/fib/rte_fib6.h @@ -28,6 +28,9 @@ extern "C" { /** Maximum depth value possible for IPv6 FIB. */ #define RTE_FIB6_MAXDEPTH (RTE_DEPRECATED(RTE_FIB6_MAXDEPTH) RTE_IPV6_MAX_DEPTH) +/* Maximum length of a FIB name. */ +#define RTE_FIB6_NAMESIZE 64 + struct rte_fib6; struct rte_rib6; From patchwork Fri May 9 06:44:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ankur Dwivedi X-Patchwork-Id: 153378 X-Patchwork-Delegate: thomas@monjalon.net 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 18540466FC; Fri, 9 May 2025 08:46:12 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3E76B40430; Fri, 9 May 2025 08:45:54 +0200 (CEST) Received: from mx0a-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id 48A0A402E7 for ; Fri, 9 May 2025 08:45:53 +0200 (CEST) Received: from pps.filterd (m0431384.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5492iIDW030900; Thu, 8 May 2025 23:45:52 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pfpt0220; bh=c 5s4YLCdtcINaujq3EZxw0hdavoh2JBLx+iLCQq1Qak=; b=G3YabzhKy2Ibldg2j Hj6iOYJjREzMqB+OKAbQGxP0JOtK2XRA0v2UOr2rU2QjGSshPII6A+h+aBw3pTXJ Jz8TZoP3viiRfZFyqWonpSJcpKnm6T9I+D6iOVJN1UK+1BEZn+l38rtEXZicBWJl qptPhdSR5cSKVCcEOSPmfJ4RyGQrfS3JhIGPAKYMZKEceavzIXgX7Zw1j6Ybsz/9 lKDQFtLa0oQSzZzeIOHisJaTh6SZB6Gn08PKVwewTGMDRiEfrT9Q1KMeVB4Re8Eh HUXMHzqLHVR9NsG9N0cAVBk9PO5vm7/qF/PURCA99N5mBPs2ws5Mz+mxzqfzN5c1 gtKSg== Received: from dc5-exch05.marvell.com ([199.233.59.128]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 46h96c0cjj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 08 May 2025 23:45:52 -0700 (PDT) Received: from DC5-EXCH05.marvell.com (10.69.176.209) by DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 8 May 2025 23:45:51 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Thu, 8 May 2025 23:45:51 -0700 Received: from localhost.localdomain (unknown [10.28.36.185]) by maili.marvell.com (Postfix) with ESMTP id 9BD033F704F; Thu, 8 May 2025 23:45:48 -0700 (PDT) From: Ankur Dwivedi To: CC: , , , , , , , Ankur Dwivedi Subject: [PATCH v2 09/13] node: add IP6 lookup FIB node Date: Fri, 9 May 2025 12:14:44 +0530 Message-ID: <20250509064448.724019-10-adwivedi@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250509064448.724019-1-adwivedi@marvell.com> References: <20250415121052.1497155-1-adwivedi@marvell.com> <20250509064448.724019-1-adwivedi@marvell.com> MIME-Version: 1.0 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTA5MDA2MyBTYWx0ZWRfX9erZ5i7zpGCH cSLhsPWeXXKD+E7jTaKWtWTYb4V3YMr5DTcy/W8CIXtBQMu1CT5tcaC2bcl2tbqmt9EYAeyI22P ap2cf1Nt4w/PxGjjuuP1+mpJQ9NAjy9U1WA8YBxSBBOb2C6QCyQR3wwdtIb/F6suUZoPvf/ol/G h+eeE15KikWVk+UzuNam538LhKkD52Rj7TFf+toQjNZ4+7MfaU7KibbP/fvD3ZX9cndjgQ2iF6z 3zt0VMAko8OMUWfetNLFbITnA5Xr3Dqgxb/hKWcJR/j69/ePghXKbielVyPs3UZXf7BDYGkspXL qWzFFvi1H37cuxxxV4xKG1jPJgJfjCO2tVPFQF6hk6obX1WcW/XTJ780uUFiRktczPkjHXI/y2S n7fZoSJKffzDqINgxwFUxFlAU14O0JeqGIph0U1Fmbx+A/qAsEo5PuIGWSTBxulrTWzkPS9M X-Proofpoint-GUID: wmkROy34pNR2HcxSEN_kwCD1dSO3rVvm X-Proofpoint-ORIG-GUID: wmkROy34pNR2HcxSEN_kwCD1dSO3rVvm X-Authority-Analysis: v=2.4 cv=dpXbC0g4 c=1 sm=1 tr=0 ts=681da4a0 cx=c_pps a=rEv8fa4AjpPjGxpoe8rlIQ==:117 a=rEv8fa4AjpPjGxpoe8rlIQ==:17 a=dt9VzEwgFbYA:10 a=M5GUcnROAAAA:8 a=MTiQbDV8bN19jQCZShcA:9 a=OBjm3rFKGHvpk9ecZwUJ:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-05-09_02,2025-05-08_04,2025-02-21_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 Adds a lookup FIB node for IP6. Adds a public function to do fib configuration from application. Signed-off-by: Ankur Dwivedi --- lib/node/ip6_lookup_fib.c | 139 ++++++++++++++++++++++++++++++++++++ lib/node/meson.build | 1 + lib/node/rte_node_ip6_api.h | 15 ++++ 3 files changed, 155 insertions(+) create mode 100644 lib/node/ip6_lookup_fib.c diff --git a/lib/node/ip6_lookup_fib.c b/lib/node/ip6_lookup_fib.c new file mode 100644 index 0000000000..a4f9f53644 --- /dev/null +++ b/lib/node/ip6_lookup_fib.c @@ -0,0 +1,139 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(C) 2025 Marvell. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "rte_node_ip6_api.h" + +#include "node_private.h" + +/* IP6 Lookup FIB global data struct */ +struct ip6_lookup_fib_node_main { + struct rte_fib6 *fib6[RTE_MAX_NUMA_NODES]; +}; + +struct ip6_lookup_fib_node_ctx { + /* Socket's FIB6 */ + struct rte_fib6 *fib6; + /* Dynamic offset to mbuf priv1 */ + int mbuf_priv1_off; +}; + +static struct ip6_lookup_fib_node_main ip6_lookup_fib_nm; + +#define FIB6_DEFAULT_MAX_ROUTES (UINT16_MAX) +#define FIB6_DEFAULT_NUM_TBL8 (UINT16_MAX / 2) +#define FIB6_DEFAULT_NH (RTE_NODE_IP6_LOOKUP_NEXT_PKT_DROP << 16) + +#define IP6_LOOKUP_FIB_NODE(ctx) \ + (((struct ip6_lookup_fib_node_ctx *)ctx)->fib6) + +#define IP6_LOOKUP_FIB_NODE_PRIV1_OFF(ctx) \ + (((struct ip6_lookup_fib_node_ctx *)ctx)->mbuf_priv1_off) + +RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_node_ip6_fib_create, 25.07) +int +rte_node_ip6_fib_create(int socket, struct rte_fib6_conf *conf) +{ + struct ip6_lookup_fib_node_main *nm = &ip6_lookup_fib_nm; + char s[RTE_FIB6_NAMESIZE]; + + /* One fib6 per socket */ + if (nm->fib6[socket]) + return 0; + + conf->default_nh = FIB6_DEFAULT_NH; + snprintf(s, sizeof(s), "IPV6_LOOKUP_FIB_%u", socket); + nm->fib6[socket] = rte_fib6_create(s, socket, conf); + if (nm->fib6[socket] == NULL) + return -rte_errno; + + return 0; +} + +static int +setup_fib6(int socket) +{ + struct ip6_lookup_fib_node_main *nm = &ip6_lookup_fib_nm; + struct rte_fib6_conf conf; + char s[RTE_FIB6_NAMESIZE]; + + /* One fib6 per socket */ + if (nm->fib6[socket]) + return 0; + + conf.type = RTE_FIB6_TRIE; + conf.default_nh = FIB6_DEFAULT_NH; + conf.max_routes = FIB6_DEFAULT_MAX_ROUTES; + conf.rib_ext_sz = 0; + conf.trie.nh_sz = RTE_FIB6_TRIE_4B; + conf.trie.num_tbl8 = FIB6_DEFAULT_NUM_TBL8; + snprintf(s, sizeof(s), "IPV6_LOOKUP_FIB_%u", socket); + nm->fib6[socket] = rte_fib6_create(s, socket, &conf); + if (nm->fib6[socket] == NULL) + return -rte_errno; + + return 0; +} + +static int +ip6_lookup_fib_node_init(const struct rte_graph *graph, struct rte_node *node) +{ + static uint8_t init_once; + int rc; + + RTE_BUILD_BUG_ON(sizeof(struct ip6_lookup_fib_node_ctx) > RTE_NODE_CTX_SZ); + + if (!init_once) { + node_mbuf_priv1_dynfield_offset = rte_mbuf_dynfield_register( + &node_mbuf_priv1_dynfield_desc); + if (node_mbuf_priv1_dynfield_offset < 0) + return -rte_errno; + + init_once = 1; + } + + rc = setup_fib6(graph->socket); + if (rc) { + node_err("ip6_lookup_fib", "Failed to setup fib6 for sock %u, rc=%d", + graph->socket, rc); + return rc; + } + + /* Update socket's FIB and mbuf dyn priv1 offset in node ctx */ + IP6_LOOKUP_FIB_NODE(node->ctx) = ip6_lookup_fib_nm.fib6[graph->socket]; + IP6_LOOKUP_FIB_NODE_PRIV1_OFF(node->ctx) = node_mbuf_priv1_dynfield_offset; + + node_dbg("ip6_lookup_fib", "Initialized ip6_lookup_fib node"); + + return 0; +} + +static struct rte_node_xstats ip6_lookup_fib_xstats = { + .nb_xstats = 1, + .xstat_desc = { + [0] = "ip6_lookup_fib_error", + }, +}; + +static struct rte_node_register ip6_lookup_fib_node = { + .name = "ip6_lookup_fib", + + .init = ip6_lookup_fib_node_init, + .xstats = &ip6_lookup_fib_xstats, + + .nb_edges = RTE_NODE_IP6_LOOKUP_NEXT_PKT_DROP + 1, + .next_nodes = { + [RTE_NODE_IP6_LOOKUP_NEXT_REWRITE] = "ip6_rewrite", + [RTE_NODE_IP6_LOOKUP_NEXT_PKT_DROP] = "pkt_drop", + }, +}; + +RTE_NODE_REGISTER(ip6_lookup_fib_node); diff --git a/lib/node/meson.build b/lib/node/meson.build index 8112cf7f5b..5ff52a2c44 100644 --- a/lib/node/meson.build +++ b/lib/node/meson.build @@ -17,6 +17,7 @@ sources = files( 'ip4_reassembly.c', 'ip4_rewrite.c', 'ip6_lookup.c', + 'ip6_lookup_fib.c', 'ip6_rewrite.c', 'kernel_rx.c', 'kernel_tx.c', diff --git a/lib/node/rte_node_ip6_api.h b/lib/node/rte_node_ip6_api.h index 2875bc981a..1d2b190724 100644 --- a/lib/node/rte_node_ip6_api.h +++ b/lib/node/rte_node_ip6_api.h @@ -17,6 +17,7 @@ */ #include #include +#include #include #ifdef __cplusplus @@ -71,6 +72,20 @@ __rte_experimental int rte_node_ip6_rewrite_add(uint16_t next_hop, uint8_t *rewrite_data, uint8_t rewrite_len, uint16_t dst_port); +/** + * Create ipv6 FIB. + * + * @param socket + * NUMA socket for FIB memory allocation. + * @param conf + * Structure containing FIB configuration. + * + * @return + * 0 on success, negative otherwise. + */ +__rte_experimental +int rte_node_ip6_fib_create(int socket, struct rte_fib6_conf *conf); + #ifdef __cplusplus } #endif From patchwork Fri May 9 06:44:45 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ankur Dwivedi X-Patchwork-Id: 153379 X-Patchwork-Delegate: thomas@monjalon.net 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 64B70466FC; Fri, 9 May 2025 08:46:18 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4F88340665; Fri, 9 May 2025 08:46:00 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id 6372F40659 for ; Fri, 9 May 2025 08:45:59 +0200 (CEST) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 548NIha4003978; Thu, 8 May 2025 23:45:58 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pfpt0220; bh=b vCEz1DgB2/SfzLOr4mk51Or0qbIv/1O63+2uWKuYmA=; b=CEvZvz/o/oJtkMFIU 9VMZ4GAviaj3J+JDiLq5csbmH28m3B7sKAvFaY3rwOCbPAdOwH9A8JSVtRkv28v5 ecM5ugrQaJAmjdOOcZKAJne5ZVXtfFBJV93g9wPkn7xrDPrrX77E4Hpolf6Ix6VJ TReJ9CzVSe6dP8cAObcBrz1b/7toiaO8WFlrhidfEjjKd9SJNOwaM0a6wiNEwXHb mZCwCves3H66pg9DNJhJTAgdXNqB44rhDa2w1oaLcsa4G6BEgDpIWKFvqQkCNm9Y aQOKyaB9w+yG5wHIKC71UiIyMkeD0pkP08gBJzN8gBdBYhaV5rmIXFQv39UGX6tb Uo4+w== Received: from dc5-exch05.marvell.com ([199.233.59.128]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 46h65x0pat-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 08 May 2025 23:45:58 -0700 (PDT) Received: from DC5-EXCH05.marvell.com (10.69.176.209) by DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 8 May 2025 23:45:57 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Thu, 8 May 2025 23:45:57 -0700 Received: from localhost.localdomain (unknown [10.28.36.185]) by maili.marvell.com (Postfix) with ESMTP id CD68C3F704F; Thu, 8 May 2025 23:45:54 -0700 (PDT) From: Ankur Dwivedi To: CC: , , , , , , , Ankur Dwivedi Subject: [PATCH v2 10/13] node: add IP6 FIB route add Date: Fri, 9 May 2025 12:14:45 +0530 Message-ID: <20250509064448.724019-11-adwivedi@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250509064448.724019-1-adwivedi@marvell.com> References: <20250415121052.1497155-1-adwivedi@marvell.com> <20250509064448.724019-1-adwivedi@marvell.com> MIME-Version: 1.0 X-Authority-Analysis: v=2.4 cv=ZdsdNtVA c=1 sm=1 tr=0 ts=681da4a6 cx=c_pps a=rEv8fa4AjpPjGxpoe8rlIQ==:117 a=rEv8fa4AjpPjGxpoe8rlIQ==:17 a=dt9VzEwgFbYA:10 a=M5GUcnROAAAA:8 a=KWxuKWQm0HYJUTJt3pUA:9 a=OBjm3rFKGHvpk9ecZwUJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTA5MDA2MyBTYWx0ZWRfXySto042AY+85 CNIUOAWgPiNeyZ/G/xs4wlD2fLhiCdePCwD3DNjQu5Tfxhk7YVp1Nzup9tF5k03vtxziiz/8N9z ipmWKnu2s7H8Tb5u8MsdmoWpOWYK3Qim9UT7AZNVnydGGuCj1n+QKqLtv6iChTGfA7+OHHXvetd PVGrO+QytJEUBxzhnlDTOT7vt9KdGispAcPgY/a8cXCCP95Q6whtL8Ad+wSVtsn1KcGGFhPOzZm /N5xprqH6A3d1nNI2Rv2lpVrmpHNsBJsxE09fVSnSNERkWMOwUJqpTu69y4q7wnz6uQEYpwXUNF 7Nv1I5E39kvMFyfcYgHvsm2h/p98PSnKWCevdOqmXJ/5FZaIBAmPDtgecZbTiP9/K1dminSKzOO OHJGrYRwrs5GjrygMiLWfVBMKPz1niyJY7VZtwo9+ABMEg7qO+nTZIHG15D4Uuk2ZMZcdTJ3 X-Proofpoint-GUID: fyX11oVGSojxeRkzhBWk377Pf3EdVM-J X-Proofpoint-ORIG-GUID: fyX11oVGSojxeRkzhBWk377Pf3EdVM-J X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-05-09_02,2025-05-08_04,2025-02-21_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 Adds a public function to add IP6 route to FIB. The applications should call this function to add IP6 routes to FIB. Signed-off-by: Ankur Dwivedi --- lib/node/ip6_lookup_fib.c | 35 +++++++++++++++++++++++++++++++++++ lib/node/rte_node_ip6_api.h | 19 +++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/lib/node/ip6_lookup_fib.c b/lib/node/ip6_lookup_fib.c index a4f9f53644..b510452ad8 100644 --- a/lib/node/ip6_lookup_fib.c +++ b/lib/node/ip6_lookup_fib.c @@ -2,6 +2,8 @@ * Copyright(C) 2025 Marvell. */ +#include + #include #include #include @@ -58,6 +60,39 @@ rte_node_ip6_fib_create(int socket, struct rte_fib6_conf *conf) return 0; } +RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_node_ip6_fib_route_add, 25.07) +int +rte_node_ip6_fib_route_add(const struct rte_ipv6_addr *ip, uint8_t depth, uint16_t next_hop, + enum rte_node_ip6_lookup_next next_node) +{ + char abuf[INET6_ADDRSTRLEN]; + unsigned int nb_sockets; + uint8_t socket; + uint32_t val; + int ret; + + nb_sockets = rte_socket_count(); + inet_ntop(AF_INET6, ip, abuf, sizeof(abuf)); + /* Embedded next node id into 24 bit next hop */ + val = ((next_node << 16) | next_hop) & ((1ull << 24) - 1); + node_dbg("ip6_lookup_fib", "FIB6: Adding route %s / %d nh (0x%x)", abuf, depth, val); + + for (socket = 0; socket < nb_sockets; socket++) { + if (!ip6_lookup_fib_nm.fib6[socket]) + continue; + + ret = rte_fib6_add(ip6_lookup_fib_nm.fib6[socket], ip, depth, val); + if (ret < 0) { + node_err("ip6_lookup_fib", + "Unable to add entry %s / %d nh (%x) to FIB on sock %d, rc=%d", + abuf, depth, val, socket, ret); + return ret; + } + } + + return 0; +} + static int setup_fib6(int socket) { diff --git a/lib/node/rte_node_ip6_api.h b/lib/node/rte_node_ip6_api.h index 1d2b190724..31089b35fc 100644 --- a/lib/node/rte_node_ip6_api.h +++ b/lib/node/rte_node_ip6_api.h @@ -86,6 +86,25 @@ int rte_node_ip6_rewrite_add(uint16_t next_hop, uint8_t *rewrite_data, __rte_experimental int rte_node_ip6_fib_create(int socket, struct rte_fib6_conf *conf); +/** + * Add IPv6 route to FIB. + * + * @param ip + * IPv6 address of route to be added. + * @param depth + * Depth of the rule to be added. + * @param next_hop + * Next hop id of the rule result to be added. + * @param next_node + * Next node to redirect traffic to. + * + * @return + * 0 on success, negative otherwise. + */ +__rte_experimental +int rte_node_ip6_fib_route_add(const struct rte_ipv6_addr *ip, uint8_t depth, uint16_t next_hop, + enum rte_node_ip6_lookup_next next_node); + #ifdef __cplusplus } #endif From patchwork Fri May 9 06:44:46 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ankur Dwivedi X-Patchwork-Id: 153380 X-Patchwork-Delegate: thomas@monjalon.net 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 E7254466FC; Fri, 9 May 2025 08:46:26 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id CE6454060A; Fri, 9 May 2025 08:46:07 +0200 (CEST) Received: from mx0a-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id 071CB4065C for ; Fri, 9 May 2025 08:46:05 +0200 (CEST) Received: from pps.filterd (m0431384.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5492iUaa030980; Thu, 8 May 2025 23:46:05 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pfpt0220; bh=Z fyE3uuSbhwxlY15Wlw5aPbWQpf1ZHJhXj7OEptQIrU=; b=X7NdcqxuUvpfPF05d Y+Rp1CMz4tC7EldGBBDurjmnKbj1LxxoJGvahb5MASiMnAzWLtv1U9lxnXawYI4/ aQSpvMdXpsjHDrs74UaNRQ16G6FfSDTofqC0xuAyP1jzCHIBqZ4DOoJmuzx1p2Ct jQBRaLStTRYOkgANwBGJln15xHs10QGspz5YDW6ChKFVCW1qOub3Dx6uldHUI941 4r+6WyTb5VZUmDM1dYfiPE/7LvJUr7yCq2+gDxW6SbjetnFVWtQOoQsvWvaNTlCm mpNbToro6QT4PndzD8iZ9cQzZhHvVXn/UXp4wttInR7O8MevrEPZ2Jue9E2C5XFi 9zojg== Received: from dc5-exch05.marvell.com ([199.233.59.128]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 46h96c0cke-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 08 May 2025 23:46:05 -0700 (PDT) Received: from DC5-EXCH05.marvell.com (10.69.176.209) by DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 8 May 2025 23:46:04 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Thu, 8 May 2025 23:46:04 -0700 Received: from localhost.localdomain (unknown [10.28.36.185]) by maili.marvell.com (Postfix) with ESMTP id 5A9183F7066; Thu, 8 May 2025 23:46:01 -0700 (PDT) From: Ankur Dwivedi To: CC: , , , , , , , Ankur Dwivedi Subject: [PATCH v2 11/13] node: add process callback for IP6 FIB Date: Fri, 9 May 2025 12:14:46 +0530 Message-ID: <20250509064448.724019-12-adwivedi@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250509064448.724019-1-adwivedi@marvell.com> References: <20250415121052.1497155-1-adwivedi@marvell.com> <20250509064448.724019-1-adwivedi@marvell.com> MIME-Version: 1.0 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTA5MDA2MyBTYWx0ZWRfX1MZpzF2yqrYN to69A9U55uzJ2uHKt83f14j+6t92a5v0iQ2sPB2BBuYnLJReY/qM96xcpGSHiG58HqEshB5Xh+Z GFiMYQ8Gpuu9mFpNyqKmJ18Q64IsDhhW0LYZelakQ0fAoId21OyOdgJJX145Ux9EyBGhHdWPD9I oFhUYX8laAGHPFkoSR/ZtThNIMUhoJHoEZMsIO2x3DDY0MSdG3Ez6HGAsur2KeNTZjkcVuV+MVM a4vgG0951WR84/9G64kf2RrkZ/NHWKx0JpXF438gaXSB3JpH0KOIsmxZ12PDrlNe60s9kYUuRFQ yTPpMUkY3q/X0XrIfEv5r35N35RqQFFqB4nepzVVpU/OffnhchVN/ahIQl0kxmu3aXCgkmWWxwV itJC9z97EkilnShYwISCmml4mZC7iTYVceXmspb4mbDtt51JEAOYwgEbIHAbbKQXxL8LkJW/ X-Proofpoint-GUID: O-cMIeuIOkGWUxwXX024NaDOi_8HVSFv X-Proofpoint-ORIG-GUID: O-cMIeuIOkGWUxwXX024NaDOi_8HVSFv X-Authority-Analysis: v=2.4 cv=dpXbC0g4 c=1 sm=1 tr=0 ts=681da4ad cx=c_pps a=rEv8fa4AjpPjGxpoe8rlIQ==:117 a=rEv8fa4AjpPjGxpoe8rlIQ==:17 a=dt9VzEwgFbYA:10 a=M5GUcnROAAAA:8 a=HgU-b89uhFXLxWSzcvEA:9 a=OBjm3rFKGHvpk9ecZwUJ:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-05-09_02,2025-05-08_04,2025-02-21_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 Adds the process callback function for ip6_lookup_fib node. Signed-off-by: Ankur Dwivedi --- lib/node/ip6_lookup_fib.c | 148 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) diff --git a/lib/node/ip6_lookup_fib.c b/lib/node/ip6_lookup_fib.c index b510452ad8..3df61890e9 100644 --- a/lib/node/ip6_lookup_fib.c +++ b/lib/node/ip6_lookup_fib.c @@ -40,6 +40,153 @@ static struct ip6_lookup_fib_node_main ip6_lookup_fib_nm; #define IP6_LOOKUP_FIB_NODE_PRIV1_OFF(ctx) \ (((struct ip6_lookup_fib_node_ctx *)ctx)->mbuf_priv1_off) +static uint16_t +ip6_lookup_fib_node_process(struct rte_graph *graph, struct rte_node *node, void **objs, + uint16_t nb_objs) +{ + struct rte_mbuf *mbuf0, *mbuf1, *mbuf2, *mbuf3, **pkts; + const int dyn = IP6_LOOKUP_FIB_NODE_PRIV1_OFF(node->ctx); + struct rte_fib6 *fib = IP6_LOOKUP_FIB_NODE(node->ctx); + struct rte_ipv6_addr ip[RTE_GRAPH_BURST_SIZE] = { 0 }; + uint64_t next_hop[RTE_GRAPH_BURST_SIZE]; + struct rte_ipv6_hdr *ipv6_hdr; + uint16_t lookup_err = 0; + void **to_next, **from; + uint16_t last_spec = 0; + rte_edge_t next_index; + uint16_t n_left_from; + uint16_t held = 0; + uint16_t next; + int i; + + /* Speculative next */ + next_index = RTE_NODE_IP6_LOOKUP_NEXT_REWRITE; + + pkts = (struct rte_mbuf **)objs; + from = objs; + n_left_from = nb_objs; + + /* Get stream for the speculated next node */ + to_next = rte_node_next_stream_get(graph, node, next_index, nb_objs); + + for (i = 0; i < 4 && i < n_left_from; i++) + rte_prefetch0(rte_pktmbuf_mtod_offset(pkts[i], void *, + sizeof(struct rte_ether_hdr))); + + i = 0; + while (n_left_from >= 4) { + if (likely(n_left_from > 7)) { + + /* Prefetch next-next mbufs */ + if (likely(n_left_from > 11)) { + rte_prefetch0(pkts[8]); + rte_prefetch0(pkts[9]); + rte_prefetch0(pkts[10]); + rte_prefetch0(pkts[11]); + } + + /* Prefetch next mbuf data */ + rte_prefetch0(rte_pktmbuf_mtod_offset(pkts[4], void *, + sizeof(struct rte_ether_hdr))); + rte_prefetch0(rte_pktmbuf_mtod_offset(pkts[5], void *, + sizeof(struct rte_ether_hdr))); + rte_prefetch0(rte_pktmbuf_mtod_offset(pkts[6], void *, + sizeof(struct rte_ether_hdr))); + rte_prefetch0(rte_pktmbuf_mtod_offset(pkts[7], void *, + sizeof(struct rte_ether_hdr))); + } + + mbuf0 = pkts[0]; + mbuf1 = pkts[1]; + mbuf2 = pkts[2]; + mbuf3 = pkts[3]; + pkts += 4; + n_left_from -= 4; + /* Extract DIP of mbuf0 */ + ipv6_hdr = rte_pktmbuf_mtod_offset(mbuf0, struct rte_ipv6_hdr *, + sizeof(struct rte_ether_hdr)); + /* Extract hop_limits as ipv6 hdr is in cache */ + node_mbuf_priv1(mbuf0, dyn)->ttl = ipv6_hdr->hop_limits; + + ip[i++] = ipv6_hdr->dst_addr; + + /* Extract DIP of mbuf1 */ + ipv6_hdr = rte_pktmbuf_mtod_offset(mbuf1, struct rte_ipv6_hdr *, + sizeof(struct rte_ether_hdr)); + /* Extract hop_limits as ipv6 hdr is in cache */ + node_mbuf_priv1(mbuf1, dyn)->ttl = ipv6_hdr->hop_limits; + + ip[i++] = ipv6_hdr->dst_addr; + + /* Extract DIP of mbuf2 */ + ipv6_hdr = rte_pktmbuf_mtod_offset(mbuf2, struct rte_ipv6_hdr *, + sizeof(struct rte_ether_hdr)); + /* Extract hop_limits as ipv6 hdr is in cache */ + node_mbuf_priv1(mbuf2, dyn)->ttl = ipv6_hdr->hop_limits; + + ip[i++] = ipv6_hdr->dst_addr; + + /* Extract DIP of mbuf3 */ + ipv6_hdr = rte_pktmbuf_mtod_offset(mbuf3, struct rte_ipv6_hdr *, + sizeof(struct rte_ether_hdr)); + /* Extract hop_limits as ipv6 hdr is in cache */ + node_mbuf_priv1(mbuf3, dyn)->ttl = ipv6_hdr->hop_limits; + + ip[i++] = ipv6_hdr->dst_addr; + } + while (n_left_from > 0) { + mbuf0 = pkts[0]; + pkts += 1; + n_left_from -= 1; + + /* Extract DIP of mbuf0 */ + ipv6_hdr = rte_pktmbuf_mtod_offset(mbuf0, struct rte_ipv6_hdr *, + sizeof(struct rte_ether_hdr)); + /* Extract hop_limits as ipv6 hdr is in cache */ + node_mbuf_priv1(mbuf0, dyn)->ttl = ipv6_hdr->hop_limits; + + ip[i++] = ipv6_hdr->dst_addr; + } + + rte_fib6_lookup_bulk(fib, ip, next_hop, nb_objs); + + for (i = 0; i < nb_objs; i++) { + mbuf0 = (struct rte_mbuf *)objs[i]; + node_mbuf_priv1(mbuf0, dyn)->nh = (uint16_t)next_hop[i]; + next = (uint16_t)(next_hop[i] >> 16); + + if (unlikely(next_index ^ next)) { + /* Copy things successfully speculated till now */ + rte_memcpy(to_next, from, last_spec * sizeof(from[0])); + from += last_spec; + to_next += last_spec; + held += last_spec; + last_spec = 0; + + rte_node_enqueue_x1(graph, node, next, from[0]); + from += 1; + } else { + last_spec += 1; + } + + if (unlikely(next_hop[i] == FIB6_DEFAULT_NH)) + lookup_err += 1; + } + + /* !!! Home run !!! */ + if (likely(last_spec == nb_objs)) { + rte_node_next_stream_move(graph, node, next_index); + return nb_objs; + } + + NODE_INCREMENT_XSTAT_ID(node, 0, lookup_err != 0, lookup_err); + held += last_spec; + rte_memcpy(to_next, from, last_spec * sizeof(from[0])); + rte_node_next_stream_put(graph, node, next_index, held); + + return nb_objs; +} + RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_node_ip6_fib_create, 25.07) int rte_node_ip6_fib_create(int socket, struct rte_fib6_conf *conf) @@ -159,6 +306,7 @@ static struct rte_node_xstats ip6_lookup_fib_xstats = { }; static struct rte_node_register ip6_lookup_fib_node = { + .process = ip6_lookup_fib_node_process, .name = "ip6_lookup_fib", .init = ip6_lookup_fib_node_init, From patchwork Fri May 9 06:44:47 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ankur Dwivedi X-Patchwork-Id: 153381 X-Patchwork-Delegate: thomas@monjalon.net 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 9929F466FC; Fri, 9 May 2025 08:46:32 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A5ACF4064F; Fri, 9 May 2025 08:46:15 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id 2AE3D4064F for ; Fri, 9 May 2025 08:46:14 +0200 (CEST) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5496TZS5022602; Thu, 8 May 2025 23:46:13 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pfpt0220; bh=d BmPdIglKPzQ9nv6QauDDxgnDLV0vQbX879EnC0ko0I=; b=k0S86d/q3eQAlAf+W pPVGjapU2B0Px+YH0Td/IgTmrotFbcDH8C1mEEPgSloseE0DVzQnR5dnC/nker9T j0w54RXxp7kAo/KpZRAFpyMgsF4xT1eFp9m2abEzW0JpBnF4wv7UwBQ6beaS7WZc O7a5oO5S3MDEubfqnwN/izDQy/UDzOYYPuRV1NDrmUZWb05qaUyi7IcPjSwyJDG0 d4Yom55QfoLfXU5MIKV68C4My+KBNSwF6q3MXCo9FX0225ehVscf8KieKNYpvLRJ 2T+EDgDuv0C3zRehkjheEA+FH9BJW6y+NBibgbAtKi3y7+cDkz0uqmCrkwYOOVnQ fHs5g== Received: from dc6wp-exch02.marvell.com ([4.21.29.225]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 46hcg080y9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 08 May 2025 23:46:12 -0700 (PDT) Received: from DC6WP-EXCH02.marvell.com (10.76.176.209) by DC6WP-EXCH02.marvell.com (10.76.176.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 8 May 2025 23:46:11 -0700 Received: from maili.marvell.com (10.69.176.80) by DC6WP-EXCH02.marvell.com (10.76.176.209) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Thu, 8 May 2025 23:46:11 -0700 Received: from localhost.localdomain (unknown [10.28.36.185]) by maili.marvell.com (Postfix) with ESMTP id 92A5F3F704F; Thu, 8 May 2025 23:46:08 -0700 (PDT) From: Ankur Dwivedi To: CC: , , , , , , , Ankur Dwivedi Subject: [PATCH v2 12/13] node: add next node in packet classification Date: Fri, 9 May 2025 12:14:47 +0530 Message-ID: <20250509064448.724019-13-adwivedi@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250509064448.724019-1-adwivedi@marvell.com> References: <20250415121052.1497155-1-adwivedi@marvell.com> <20250509064448.724019-1-adwivedi@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: CPX-wmMKR6UnypcCiAjn3Wviz_U3BZ_B X-Proofpoint-ORIG-GUID: CPX-wmMKR6UnypcCiAjn3Wviz_U3BZ_B X-Authority-Analysis: v=2.4 cv=BaPY0qt2 c=1 sm=1 tr=0 ts=681da4b4 cx=c_pps a=gIfcoYsirJbf48DBMSPrZA==:117 a=gIfcoYsirJbf48DBMSPrZA==:17 a=dt9VzEwgFbYA:10 a=M5GUcnROAAAA:8 a=aoojJjtGkrQehFeo5SAA:9 a=0bXxn9q0MV6snEgNplNhOjQmxlI=:19 a=OBjm3rFKGHvpk9ecZwUJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTA5MDA2MyBTYWx0ZWRfX2nKcvWWBmM1X R3oqLQuj8UkWME6EAmyXL/1/z8J1zNfTPdAJZUJZNgxze7gGRKBRzYP5uNDfOM/Lhob1pHmAA6A dMhJ70PqSqtcTeS+WJbRLimfBfSudY1puOAy0AfgsC6+ibSVJUMNSVZ7o2BAElRxKSWZPxszVe4 XTw6JhXPduTzYPha9O+d0HdayPQEW1jzqilujLPDp6S/O3jd/qQ/i+udYbsKDGzZrwUPkwOKsLJ nqo/Vpa5RJrsmvaYs5svbnjEQ9qxiD77oYNE8RALklC9J3pHdKB5cPa57HM+lfUmsSZAbjnIZB5 6q98fp1hQmEPe+DOYh1/4337/Wufni7CFFTdKDnns+4zth9h0TrNcyfSu9KQ4O3/jeBZcZ4thiE LCaEDPPcunw0kG4j9XXck53OjNZq2pA8a89Q4CbIWOss2jyxEAFMpAxNhuGbQ3jsFa1kJMRC X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-05-09_02,2025-05-08_04,2025-02-21_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 The ip6_lookup_fib is added as next node in packet classification. Signed-off-by: Ankur Dwivedi --- lib/node/pkt_cls.c | 1 + lib/node/rte_node_pkt_cls_api.h | 1 + 2 files changed, 2 insertions(+) diff --git a/lib/node/pkt_cls.c b/lib/node/pkt_cls.c index f6e76989bc..ca323ea573 100644 --- a/lib/node/pkt_cls.c +++ b/lib/node/pkt_cls.c @@ -234,6 +234,7 @@ struct rte_node_register pkt_cls_node = { [RTE_NODE_PKT_CLS_NEXT_IP4_LOOKUP] = "ip4_lookup", [RTE_NODE_PKT_CLS_NEXT_IP6_LOOKUP] = "ip6_lookup", [RTE_NODE_PKT_CLS_NEXT_IP4_LOOKUP_FIB] = "ip4_lookup_fib", + [RTE_NODE_PKT_CLS_NEXT_IP6_LOOKUP_FIB] = "ip6_lookup_fib", }, }; RTE_NODE_REGISTER(pkt_cls_node); diff --git a/lib/node/rte_node_pkt_cls_api.h b/lib/node/rte_node_pkt_cls_api.h index 8f935bebbe..cf617d6985 100644 --- a/lib/node/rte_node_pkt_cls_api.h +++ b/lib/node/rte_node_pkt_cls_api.h @@ -28,6 +28,7 @@ enum rte_node_pkt_cls_next { RTE_NODE_PKT_CLS_NEXT_IP4_LOOKUP, RTE_NODE_PKT_CLS_NEXT_IP6_LOOKUP, RTE_NODE_PKT_CLS_NEXT_IP4_LOOKUP_FIB, + RTE_NODE_PKT_CLS_NEXT_IP6_LOOKUP_FIB, RTE_NODE_PKT_CLS_NEXT_MAX, }; From patchwork Fri May 9 06:44:48 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ankur Dwivedi X-Patchwork-Id: 153382 X-Patchwork-Delegate: thomas@monjalon.net 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 20D16466FC; Fri, 9 May 2025 08:46:38 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A15B840674; Fri, 9 May 2025 08:46:21 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id F086E402F1 for ; Fri, 9 May 2025 08:46:19 +0200 (CEST) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 548NIha9003978; Thu, 8 May 2025 23:46:19 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pfpt0220; bh=h FAxVoEnRFB36upzobp2yMK7hcPeEL8zByJ+Rmk32tE=; b=XxE0gar4J/VXOoPHs WqOQB+7Ncsg1cD/4tx5LDEKcjMFSzAFyjCNY77VjcPQOxSBnUt5xsvJw2LXBSr5i 1Of2EzUXV8/523gIeGV2y5a+KfJnMf3v6//VlXDTSO1XlZWY26hdShs+I4rdmQmp MxT14TbQdBHvLZUm5CYafUDSPkl3Qz59kppeAJr4ZJKddjPfbv5w9R2cebJaKNk8 HuMDqe/d2mkRfWe0q2wt8WfAeWVs90eYVGw70/8foVdQLXbfeJGoKZDbFXfz3doR Pwg5ZnIRQFXLj2nG0LWQrtsbl7T+PdKV5Fgvc0Z/yPfARnW35l8zQ/qX3NbPYvU7 9PvLg== Received: from dc5-exch05.marvell.com ([199.233.59.128]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 46h65x0pc7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 08 May 2025 23:46:19 -0700 (PDT) Received: from DC5-EXCH05.marvell.com (10.69.176.209) by DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 8 May 2025 23:46:18 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Thu, 8 May 2025 23:46:18 -0700 Received: from localhost.localdomain (unknown [10.28.36.185]) by maili.marvell.com (Postfix) with ESMTP id 15CB13F7063; Thu, 8 May 2025 23:46:14 -0700 (PDT) From: Ankur Dwivedi To: CC: , , , , , , , Ankur Dwivedi Subject: [PATCH v2 13/13] app/graph: add IP6 lookup mode command Date: Fri, 9 May 2025 12:14:48 +0530 Message-ID: <20250509064448.724019-14-adwivedi@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250509064448.724019-1-adwivedi@marvell.com> References: <20250415121052.1497155-1-adwivedi@marvell.com> <20250509064448.724019-1-adwivedi@marvell.com> MIME-Version: 1.0 X-Authority-Analysis: v=2.4 cv=ZdsdNtVA c=1 sm=1 tr=0 ts=681da4bb cx=c_pps a=rEv8fa4AjpPjGxpoe8rlIQ==:117 a=rEv8fa4AjpPjGxpoe8rlIQ==:17 a=dt9VzEwgFbYA:10 a=M5GUcnROAAAA:8 a=uxt5wEsAh8ZO_iMQKQYA:9 a=OBjm3rFKGHvpk9ecZwUJ:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTA5MDA2MyBTYWx0ZWRfX6v92b9t/lNC7 5iXYzmrGPjnUv2p0cDvVJ2+1jO/HI8VUfoWL0wsmyNf888PVLAeey2zI8oKd3yTrhjOAqd0gyyO jgqRbcveouo2uFV5BKVsBwWBQ7BueOBJIngqkik94FFNyqfHy+E3BiwHr9/FoTWaDvzi6jdfmLB iFfZWQA51NAJQEexZ5DtybfMY7hUeuRMZ1GTHL0yhQUuuRXeiTh/ANlFgx///Dyax4LqGf5GZA4 JPk3VQEZmoB9aaDcQ8jHSffevjVaf/tujKePaop3t6BPkuDTYn+cqNdl4U4QxBvd4Pk9hx7uqzP oUv/f10VTr9CVZriGYKNApHQ1SV1VVSkCyRSRolwtxd0prWQLa5SluURcLn6WdpIgO0cWLDAbd5 Vf1YBfkjYU0eF/218bUx4iTSxcuDOIDvIIjwBvYDK94BvnCH0bb8mcTO6SMARgO4sQVsf3OB X-Proofpoint-GUID: 4bpS6QOZsThoME4dTngY_rZZ5cFRCz0T X-Proofpoint-ORIG-GUID: 4bpS6QOZsThoME4dTngY_rZZ5cFRCz0T X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-05-09_02,2025-05-08_04,2025-02-21_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 Adds a command to setup lookup mode for IP6 packets. By default LPM mode is used. FIB can be given as a lookup mode by specifying the mode in CLI file. When FIB is given as lookup mode, the next node of packet classification node is updated to use IP6 lookup fib node. Signed-off-by: Ankur Dwivedi --- app/graph/commands.list | 1 + app/graph/ip6_route.c | 33 +++++++++++++++++++++++++++++---- app/graph/l3fwd.c | 34 ++++++++++++++++++++++++++++++++++ app/graph/module_api.h | 6 ++++++ doc/guides/tools/graph.rst | 12 ++++++++---- 5 files changed, 78 insertions(+), 8 deletions(-) diff --git a/app/graph/commands.list b/app/graph/commands.list index 7a1bf0c708..ffdab4fc97 100644 --- a/app/graph/commands.list +++ b/app/graph/commands.list @@ -27,6 +27,7 @@ ipv4_lookup mode lkup_mode # Set IPv4 lookup mode help ipv4_lookup # Print help on ipv4_lookup commands ipv6_lookup route add ipv6 ip netmask mask via via_ip # Add IPv6 route to LPM6 table +ipv6_lookup mode lkup_mode # Set IPv6 lookup mode help ipv6_lookup # Print help on ipv6_lookup commands neigh add ipv4 ip mac # Add static neighbour for IPv4 diff --git a/app/graph/ip6_route.c b/app/graph/ip6_route.c index ec53239b06..14c0c83638 100644 --- a/app/graph/ip6_route.c +++ b/app/graph/ip6_route.c @@ -19,8 +19,13 @@ static const char cmd_ipv6_lookup_help[] = "ipv6_lookup route add ipv6 netmask via "; +static const char +cmd_ipv6_lookup_mode_help[] = "ipv6_lookup mode "; + struct ip6_route route6 = TAILQ_HEAD_INITIALIZER(route6); +enum ip6_lookup_mode ip6_lookup_m = IP6_LOOKUP_LPM; + void route_ip6_list_clean(void) { @@ -49,6 +54,7 @@ route6_rewirte_table_update(struct route_ipv6_config *ipv6route) { uint8_t depth; int portid; + int rc; portid = ethdev_portid_by_ip6(&ipv6route->gateway, &ipv6route->mask); if (portid < 0) { @@ -57,9 +63,14 @@ route6_rewirte_table_update(struct route_ipv6_config *ipv6route) } depth = rte_ipv6_mask_depth(&ipv6route->mask); - return rte_node_ip6_route_add(&ipv6route->ip, depth, portid, - RTE_NODE_IP6_LOOKUP_NEXT_REWRITE); + if (ip6_lookup_m == IP6_LOOKUP_FIB) + rc = rte_node_ip6_fib_route_add(&ipv6route->ip, depth, portid, + RTE_NODE_IP6_LOOKUP_NEXT_REWRITE); + else + rc = rte_node_ip6_route_add(&ipv6route->ip, depth, portid, + RTE_NODE_IP6_LOOKUP_NEXT_REWRITE); + return rc; } static int @@ -120,9 +131,9 @@ cmd_help_ipv6_lookup_parsed(__rte_unused void *parsed_result, __rte_unused struc len = strlen(conn->msg_out); conn->msg_out += len; - snprintf(conn->msg_out, conn->msg_out_len_max, "\n%s\n%s\n", + snprintf(conn->msg_out, conn->msg_out_len_max, "\n%s\n%s\n%s\n", "--------------------------- ipv6_lookup command help ---------------------------", - cmd_ipv6_lookup_help); + cmd_ipv6_lookup_help, cmd_ipv6_lookup_mode_help); len = strlen(conn->msg_out); conn->msg_out_len_max -= len; @@ -144,3 +155,17 @@ cmd_ipv6_lookup_route_add_ipv6_parsed(void *parsed_result, __rte_unused struct c if (rc) printf(MSG_CMD_FAIL, res->ipv6_lookup); } + +void +cmd_ipv6_lookup_mode_parsed(void *parsed_result, __rte_unused struct cmdline *cl, + void *data __rte_unused) +{ + struct cmd_ipv6_lookup_mode_result *res = parsed_result; + + if (!strcmp(res->lkup_mode, "lpm")) + ip6_lookup_m = IP6_LOOKUP_LPM; + else if (!strcmp(res->lkup_mode, "fib")) + ip6_lookup_m = IP6_LOOKUP_FIB; + else + printf(MSG_CMD_FAIL, res->ipv6_lookup); +} diff --git a/app/graph/l3fwd.c b/app/graph/l3fwd.c index 48dff9fa07..fe25e43da8 100644 --- a/app/graph/l3fwd.c +++ b/app/graph/l3fwd.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include "module_api.h" @@ -37,6 +38,22 @@ setup_fib(int socket) return rte_node_ip4_fib_create(socket, &conf); } +static int +setup_fib6(int socket) +{ + struct rte_fib6_conf conf; + +#define FIB6_MAX_ROUTES (UINT16_MAX) +#define FIB6_NUM_TBL8 (UINT16_MAX / 2) + conf.type = RTE_FIB6_TRIE; + conf.max_routes = FIB6_MAX_ROUTES; + conf.rib_ext_sz = 0; + conf.trie.nh_sz = RTE_FIB6_TRIE_4B; + conf.trie.num_tbl8 = FIB6_NUM_TBL8; + + return rte_node_ip6_fib_create(socket, &conf); +} + static int l3fwd_pattern_configure(void) { @@ -82,6 +99,16 @@ l3fwd_pattern_configure(void) rte_node_edge_update(pkt_cls, RTE_NODE_PKT_CLS_NEXT_IP4_LOOKUP_FIB, &lpm_n, 1); } + if (ip6_lookup_m == IP6_LOOKUP_FIB) { + const char *fib6_n = "ip6_lookup_fib"; + const char *lpm6_n = "ip6_lookup"; + rte_node_t pkt_cls; + + pkt_cls = rte_node_from_name("pkt_cls"); + rte_node_edge_update(pkt_cls, RTE_NODE_PKT_CLS_NEXT_IP6_LOOKUP, &fib6_n, 1); + rte_node_edge_update(pkt_cls, RTE_NODE_PKT_CLS_NEXT_IP6_LOOKUP_FIB, &lpm6_n, 1); + } + for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id++) { rte_graph_t graph_id; rte_edge_t i; @@ -114,6 +141,13 @@ l3fwd_pattern_configure(void) graph_conf.socket_id); } + if (ip6_lookup_m == IP6_LOOKUP_FIB) { + rc = setup_fib6(graph_conf.socket_id); + if (rc < 0) + rte_exit(EXIT_FAILURE, "Unable to setup fib6 for socket %u\n", + graph_conf.socket_id); + } + graph_id = rte_graph_create(qconf->name, &graph_conf); if (graph_id == RTE_GRAPH_ID_INVALID) rte_exit(EXIT_FAILURE, diff --git a/app/graph/module_api.h b/app/graph/module_api.h index b8188d30d5..5e3a384cb0 100644 --- a/app/graph/module_api.h +++ b/app/graph/module_api.h @@ -32,7 +32,13 @@ enum ip4_lookup_mode { IP4_LOOKUP_FIB }; +enum ip6_lookup_mode { + IP6_LOOKUP_LPM, + IP6_LOOKUP_FIB +}; + extern enum ip4_lookup_mode ip4_lookup_m; +extern enum ip6_lookup_mode ip6_lookup_m; bool app_graph_stats_enabled(void); bool app_graph_exit(void); diff --git a/doc/guides/tools/graph.rst b/doc/guides/tools/graph.rst index 2caf441591..dd525f6037 100644 --- a/doc/guides/tools/graph.rst +++ b/doc/guides/tools/graph.rst @@ -248,10 +248,14 @@ file to express the requested use case configuration. | | | help message. | | | +--------------------------------------+-----------------------------------+-------------------+----------+ | | ipv6_lookup route add ipv6 | | Command to add a route into | :ref:`3 ` | Yes | - | | netmask via | | ``ipv6_lookup`` LPM table. It is| | | - | | | needed if user wishes to route | | | - | | | the packets based on LPM6 lookup| | | - | | | table. | | | + | | netmask via | | ``ipv6_lookup`` LPM table or. | | | + | | | FIB. It is needed if user wishes| | | + | | | to route the packets based on | | | + | | | LPM6 lookup table or FIB. | | | + +--------------------------------------+-----------------------------------+-------------------+----------+ + | | ipv6_lookup mode | | Command to set ipv6 lookup mode | :ref:`1 ` | Yes | + | | | to either LPM or FIB. By default| | | + | | | the lookup mode is LPM. | | | +--------------------------------------+-----------------------------------+-------------------+----------+ | help ipv6_lookup | | Command to dump ``ipv6_lookup`` | :ref:`2 ` | Yes | | | | help message. | | |