From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7700245FD0; Fri, 3 Jan 2025 07:06:26 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 12CA9402B4; Fri, 3 Jan 2025 07:06:26 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id 24E7B402B1 for ; Fri, 3 Jan 2025 07:06:24 +0100 (CET) Received: from pps.filterd (m0431383.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5034EwuT002821; Thu, 2 Jan 2025 22:06:18 -0800 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=2 ArhFyC7IaZjEKEOhnDMUy38JTYR0sHlA7DJ3x3Amr4=; b=R1rQzrtF55CiCu63U dIjdZrsXwZ8nX96r0m49nu28fUgTwLBTk8lD4edqLUfrK9VOQ/2y2mnrXjLvVa95 6bQsneaLQLrEE9pZghrMfVYxPHrni07jqZDvHinFfaZ8a2f7c74EUetcU5e8awTD CN+F6sYHIbsHSJImbmebZfQk/fI8cjOKMXpJim2wpJOwixekcx/D1Oo5YR4Q92pr tzNMsuoaPUBy52ojVGvDsC6gwbYT7Ote4CpPMh8NFDu5vmxSzxX5dDdtwtb0odjr Vi9pT6bdPFYDiJBJK8icNn6VC4PUFfD+w9fTmL0z9T33OLOWaFN2o0926Pnuzb8f +ZlLA== Received: from dc5-exch05.marvell.com ([199.233.59.128]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 43x8pr84w1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 02 Jan 2025 22:06:17 -0800 (PST) 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, 2 Jan 2025 22:06:16 -0800 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, 2 Jan 2025 22:06:16 -0800 Received: from cavium-PowerEdge-R640.. (unknown [10.28.36.207]) by maili.marvell.com (Postfix) with ESMTP id 23B6A3F7085; Thu, 2 Jan 2025 22:06:13 -0800 (PST) From: Nitin Saxena To: Jerin Jacob , Kiran Kumar K , Nithin Dabilpuram , Zhirun Yan , Robin Jarry , Christophe Fontaine CC: , Nitin Saxena Subject: [PATCH v6 0/4] add feature arc in rte_graph Date: Fri, 3 Jan 2025 11:36:03 +0530 Message-ID: <20250103060612.2671836-1-nsaxena@marvell.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241014143401.3135897-1-nsaxena@marvell.com> References: <20241014143401.3135897-1-nsaxena@marvell.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Proofpoint-GUID: Y8bucQONVnFmJCNGwMBYnG-zaFshiExA X-Proofpoint-ORIG-GUID: Y8bucQONVnFmJCNGwMBYnG-zaFshiExA X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.687,Hydra:6.0.235,FMLib:17.0.607.475 definitions=2020-10-13_15,2020-10-13_02,2020-04-07_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 Feature arc represents an ordered list of features/protocols at a given networking layer. It is a high level abstraction to connect various rte_graph nodes, as feature nodes, and allow packets steering across these nodes in a generic manner. Features (or feature nodes) are nodes which handles partial or complete handling of a protocol in fast path. Like ipv4-rewrite node, which adds rewrite data to an outgoing IPv4 packet. However in above example, outgoing interface(say "eth0") may have outbound IPsec policy enabled, hence packets must be steered from ipv4-rewrite node to ipsec-outbound-policy node for outbound IPsec policy lookup. On the other hand, packets routed to another interface (eth1) will not be sent to ipsec-outbound-policy node as IPsec feature is disabled on eth1. Feature-arc allows rte_graph applications to manage such constraints easily Feature arc abstraction allows rte_graph based application to 1. Seamlessly steer packets across feature nodes based on whether feature is enabled or disabled on an interface. Features enabled on one interface may not be enabled on another interface with in a same feature arc. 2. Allow enabling/disabling of features on an interface at runtime, so that if a feature is disabled, packets associated with that interface won't be steered to corresponding feature node. 3. Provides mechanism to hook custom/user-defined nodes to a feature node and allow packet steering from feature node to custom node without changing former's fast path function 4. Allow expressing features in a particular sequential order so that packets are steered in an ordered way across nodes in fast path. For eg: if IPsec and IPv4 features are enabled on an ingress interface, packets must be sent to IPsec inbound policy node first and then to ipv4 lookup node. This patch series adds feature arc library in rte_graph and also adds "ipv4-output" feature arc handling in "ipv4-rewrite" node. Changes in v6: - Rebased to latest main for DPDK-25.03 - Added constructor based feature arc/feature registration - Changed design to handle fast path synchronization via RCU mechanism when any feature is enabled or disabled - Added feature arc specific mbuf dynamic field to carry feature data across nodes - Added feature arc example in app/graph - Programming guide and functional test cases in future versions Nitin Saxena (4): graph: add API to override node process function graph: add feature arc abstraction ip4: add ip4 output feature arc app/graph: add custom feature nodes for ip4 output arc app/graph/commands.list | 6 + app/graph/feature.c | 141 ++ app/graph/feature.h | 13 + app/graph/graph.c | 4 + app/graph/ip4_output_hook.c | 169 ++ app/graph/main.c | 15 +- app/graph/meson.build | 2 + app/graph/module_api.h | 2 + doc/api/doxy-api-index.md | 2 + doc/guides/rel_notes/release_25_03.rst | 10 + lib/graph/graph_feature_arc.c | 1780 ++++++++++++++++++++++ lib/graph/graph_private.h | 15 + lib/graph/meson.build | 4 +- lib/graph/node.c | 23 + lib/graph/rte_graph_feature_arc.h | 552 +++++++ lib/graph/rte_graph_feature_arc_worker.h | 608 ++++++++ lib/graph/version.map | 20 + lib/node/ethdev_ctrl.c | 8 + lib/node/interface_tx_feature.c | 133 ++ lib/node/interface_tx_feature_priv.h | 33 + lib/node/ip4_rewrite.c | 298 +++- lib/node/meson.build | 1 + lib/node/node_private.h | 1 + lib/node/rte_node_ip4_api.h | 4 + 24 files changed, 3838 insertions(+), 6 deletions(-) create mode 100644 app/graph/feature.c create mode 100644 app/graph/feature.h create mode 100644 app/graph/ip4_output_hook.c create mode 100644 lib/graph/graph_feature_arc.c create mode 100644 lib/graph/rte_graph_feature_arc.h create mode 100644 lib/graph/rte_graph_feature_arc_worker.h create mode 100644 lib/node/interface_tx_feature.c create mode 100644 lib/node/interface_tx_feature_priv.h -- 2.43.0