From: Stephen Hemminger <stephen@networkplumber.org>
To: dev@dpdk.org
Cc: Stephen Hemminger <stephen@networkplumber.org>,
Nithin Dabilpuram <ndabilpuram@marvell.com>,
Pavan Nikhilesh <pbhagavatula@marvell.com>
Subject: [PATCH 16/20] node: promote API to stable
Date: Wed, 7 Oct 2026 14:39:46 -0700 [thread overview]
Message-ID: <20261007214115.3092715-17-stephen@networkplumber.org> (raw)
In-Reply-To: <20261007214115.3092715-1-stephen@networkplumber.org>
The node control path functions were added between 23.07 and 25.07 and
none of the prototypes have changed. They are used by the graph
application and the l3fwd-graph example.
Most of the node headers carried a file level warning claiming that all
functions in the file may be changed or removed. That warning was
already wrong, since rte_node_ip4_route_add() and friends have been
stable for years while sitting under it.
Promote the whole library and drop those warnings. An API that cannot
be declared stable after several releases of use is not useful to
applications and should be removed instead.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
doc/guides/rel_notes/release_26_11.rst | 4 ++++
lib/node/ethdev_ctrl.c | 2 +-
lib/node/ip4_lookup_fib.c | 4 ++--
lib/node/ip4_reassembly.c | 2 +-
lib/node/ip6_lookup.c | 2 +-
lib/node/ip6_lookup_fib.c | 4 ++--
lib/node/ip6_rewrite.c | 2 +-
lib/node/node_mbuf_dynfield.c | 2 +-
lib/node/rte_node_eth_api.h | 6 ------
lib/node/rte_node_ip4_api.h | 9 ---------
lib/node/rte_node_ip6_api.h | 9 ---------
lib/node/rte_node_mbuf_dynfield.h | 6 ------
lib/node/rte_node_pkt_cls_api.h | 4 ----
lib/node/rte_node_udp4_input_api.h | 8 --------
lib/node/udp4_input.c | 4 ++--
15 files changed, 15 insertions(+), 53 deletions(-)
diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst
index afe28eb754..009db40708 100644
--- a/doc/guides/rel_notes/release_26_11.rst
+++ b/doc/guides/rel_notes/release_26_11.rst
@@ -349,6 +349,10 @@ API Changes
``rte_event_port_profile_links_get`` and
``rte_event_port_profile_unlink``
+* node: Promoted the whole library API from experimental to stable.
+ The ``rte_node_*`` control path functions date from 23.07 to 25.07 and
+ are used by the graph application and the l3fwd-graph example.
+
* pipeline: Promoted the SWX API from experimental to stable:
the ``rte_swx_pipeline_*``, ``rte_swx_ctl_*`` and ``rte_swx_ipsec_*``
functions in pipeline, the ``rte_swx_table_*`` symbols in table and
diff --git a/lib/node/ethdev_ctrl.c b/lib/node/ethdev_ctrl.c
index f717903731..3018920c79 100644
--- a/lib/node/ethdev_ctrl.c
+++ b/lib/node/ethdev_ctrl.c
@@ -141,7 +141,7 @@ rte_node_eth_config(struct rte_node_ethdev_config *conf, uint16_t nb_confs,
return 0;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_node_ethdev_rx_next_update, 24.03)
+RTE_EXPORT_SYMBOL(rte_node_ethdev_rx_next_update)
int
rte_node_ethdev_rx_next_update(rte_node_t id, const char *edge_name)
{
diff --git a/lib/node/ip4_lookup_fib.c b/lib/node/ip4_lookup_fib.c
index 0857d889fc..3757c2880f 100644
--- a/lib/node/ip4_lookup_fib.c
+++ b/lib/node/ip4_lookup_fib.c
@@ -193,7 +193,7 @@ ip4_lookup_fib_node_process(struct rte_graph *graph, struct rte_node *node, void
return nb_objs;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_node_ip4_fib_create, 25.07)
+RTE_EXPORT_SYMBOL(rte_node_ip4_fib_create)
int
rte_node_ip4_fib_create(int socket, struct rte_fib_conf *conf)
{
@@ -213,7 +213,7 @@ 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)
+RTE_EXPORT_SYMBOL(rte_node_ip4_fib_route_add)
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)
diff --git a/lib/node/ip4_reassembly.c b/lib/node/ip4_reassembly.c
index b61ddfd7d1..f6d858bc70 100644
--- a/lib/node/ip4_reassembly.c
+++ b/lib/node/ip4_reassembly.c
@@ -128,7 +128,7 @@ ip4_reassembly_node_process(struct rte_graph *graph, struct rte_node *node, void
return idx;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_node_ip4_reassembly_configure, 23.11)
+RTE_EXPORT_SYMBOL(rte_node_ip4_reassembly_configure)
int
rte_node_ip4_reassembly_configure(struct rte_node_ip4_reassembly_cfg *cfg, uint16_t cnt)
{
diff --git a/lib/node/ip6_lookup.c b/lib/node/ip6_lookup.c
index 83c0500c76..679405bc53 100644
--- a/lib/node/ip6_lookup.c
+++ b/lib/node/ip6_lookup.c
@@ -258,7 +258,7 @@ ip6_lookup_node_process_scalar(struct rte_graph *graph, struct rte_node *node,
return nb_objs;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_node_ip6_route_add, 23.07)
+RTE_EXPORT_SYMBOL(rte_node_ip6_route_add)
int
rte_node_ip6_route_add(const struct rte_ipv6_addr *ip, uint8_t depth, uint16_t next_hop,
enum rte_node_ip6_lookup_next next_node)
diff --git a/lib/node/ip6_lookup_fib.c b/lib/node/ip6_lookup_fib.c
index 40c5c753df..74e1127b32 100644
--- a/lib/node/ip6_lookup_fib.c
+++ b/lib/node/ip6_lookup_fib.c
@@ -187,7 +187,7 @@ ip6_lookup_fib_node_process(struct rte_graph *graph, struct rte_node *node, void
return nb_objs;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_node_ip6_fib_create, 25.07)
+RTE_EXPORT_SYMBOL(rte_node_ip6_fib_create)
int
rte_node_ip6_fib_create(int socket, struct rte_fib6_conf *conf)
{
@@ -207,7 +207,7 @@ 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)
+RTE_EXPORT_SYMBOL(rte_node_ip6_fib_route_add)
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)
diff --git a/lib/node/ip6_rewrite.c b/lib/node/ip6_rewrite.c
index d5488e7fa3..2f43cbefe5 100644
--- a/lib/node/ip6_rewrite.c
+++ b/lib/node/ip6_rewrite.c
@@ -273,7 +273,7 @@ ip6_rewrite_set_next(uint16_t port_id, uint16_t next_index)
return 0;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_node_ip6_rewrite_add, 23.07)
+RTE_EXPORT_SYMBOL(rte_node_ip6_rewrite_add)
int
rte_node_ip6_rewrite_add(uint16_t next_hop, uint8_t *rewrite_data,
uint8_t rewrite_len, uint16_t dst_port)
diff --git a/lib/node/node_mbuf_dynfield.c b/lib/node/node_mbuf_dynfield.c
index 9dbc80f7e5..a018a66b38 100644
--- a/lib/node/node_mbuf_dynfield.c
+++ b/lib/node/node_mbuf_dynfield.c
@@ -20,7 +20,7 @@ static const struct rte_mbuf_dynfield node_mbuf_dynfield_desc = {
.align = alignof(rte_node_mbuf_dynfield_t),
};
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_node_mbuf_dynfield_register, 25.07);
+RTE_EXPORT_SYMBOL(rte_node_mbuf_dynfield_register)
int rte_node_mbuf_dynfield_register(void)
{
struct node_mbuf_dynfield_mz *f = NULL;
diff --git a/lib/node/rte_node_eth_api.h b/lib/node/rte_node_eth_api.h
index e9221d113b..1b74706ad9 100644
--- a/lib/node/rte_node_eth_api.h
+++ b/lib/node/rte_node_eth_api.h
@@ -8,15 +8,10 @@
/**
* @file rte_node_eth_api.h
*
- * @warning
- * @b EXPERIMENTAL:
- * All functions in this file may be changed or removed without prior notice.
- *
* This API allows setting up ethdev_rx and ethdev_tx nodes
* and its queue associations.
*/
-#include <rte_compat.h>
#include <rte_common.h>
#include <rte_graph.h>
#include <rte_mempool.h>
@@ -72,7 +67,6 @@ int rte_node_eth_config(struct rte_node_ethdev_config *cfg,
* - ENOMEM: If memory allocation failed
* - 0 on successful initialization.
*/
-__rte_experimental
int rte_node_ethdev_rx_next_update(rte_node_t id, const char *edge_name);
#ifdef __cplusplus
diff --git a/lib/node/rte_node_ip4_api.h b/lib/node/rte_node_ip4_api.h
index b7bb9216b1..5c1d9013d4 100644
--- a/lib/node/rte_node_ip4_api.h
+++ b/lib/node/rte_node_ip4_api.h
@@ -8,16 +8,10 @@
/**
* @file rte_node_ip4_api.h
*
- * @warning
- * @b EXPERIMENTAL:
- * All functions in this file may be changed or removed without prior notice.
- *
* This API allows performing control path functions of ip4_* nodes
* like ip4_lookup, ip4_rewrite.
*/
#include <rte_common.h>
-#include <rte_compat.h>
-
#include <rte_fib.h>
#include <rte_graph.h>
@@ -119,7 +113,6 @@ int rte_node_ip4_rewrite_add(uint16_t next_hop, uint8_t *rewrite_data,
* @return
* 0 on success, negative otherwise.
*/
-__rte_experimental
int rte_node_ip4_reassembly_configure(struct rte_node_ip4_reassembly_cfg *cfg, uint16_t cnt);
/**
@@ -133,7 +126,6 @@ int rte_node_ip4_reassembly_configure(struct rte_node_ip4_reassembly_cfg *cfg, u
* @return
* 0 on success, negative otherwise.
*/
-__rte_experimental
int rte_node_ip4_fib_create(int socket, struct rte_fib_conf *conf);
/**
@@ -151,7 +143,6 @@ int rte_node_ip4_fib_create(int socket, struct rte_fib_conf *conf);
* @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);
diff --git a/lib/node/rte_node_ip6_api.h b/lib/node/rte_node_ip6_api.h
index c0cdc3926a..0be90c93de 100644
--- a/lib/node/rte_node_ip6_api.h
+++ b/lib/node/rte_node_ip6_api.h
@@ -8,15 +8,10 @@
/**
* @file rte_node_ip6_api.h
*
- * @warning
- * @b EXPERIMENTAL:
- * All functions in this file may be changed or removed without prior notice.
- *
* This API allows performing control path functions of ip6_* nodes
* like ip6_lookup, ip6_rewrite.
*/
#include <rte_common.h>
-#include <rte_compat.h>
#include <rte_fib6.h>
#include <rte_ip6.h>
@@ -49,7 +44,6 @@ enum rte_node_ip6_lookup_next {
* @return
* 0 on success, negative otherwise.
*/
-__rte_experimental
int rte_node_ip6_route_add(const struct rte_ipv6_addr *ip, uint8_t depth, uint16_t next_hop,
enum rte_node_ip6_lookup_next next_node);
@@ -68,7 +62,6 @@ int rte_node_ip6_route_add(const struct rte_ipv6_addr *ip, uint8_t depth, uint16
* @return
* 0 on success, negative otherwise.
*/
-__rte_experimental
int rte_node_ip6_rewrite_add(uint16_t next_hop, uint8_t *rewrite_data,
uint8_t rewrite_len, uint16_t dst_port);
@@ -83,7 +76,6 @@ int rte_node_ip6_rewrite_add(uint16_t next_hop, uint8_t *rewrite_data,
* @return
* 0 on success, negative otherwise.
*/
-__rte_experimental
int rte_node_ip6_fib_create(int socket, struct rte_fib6_conf *conf);
/**
@@ -101,7 +93,6 @@ int rte_node_ip6_fib_create(int socket, struct rte_fib6_conf *conf);
* @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);
diff --git a/lib/node/rte_node_mbuf_dynfield.h b/lib/node/rte_node_mbuf_dynfield.h
index 09254c585a..f9edaee8c2 100644
--- a/lib/node/rte_node_mbuf_dynfield.h
+++ b/lib/node/rte_node_mbuf_dynfield.h
@@ -12,9 +12,6 @@
/**
* @file: rte_node_mbuf_dynfield.h
*
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Defines rte_node specific mbuf dynamic field region [rte_node_mbuf_dynfield_t]
* which can be used by both DPDK built-in and out-of-tree nodes
* for storing per-mbuf fields for graph walk.
@@ -102,7 +99,6 @@ typedef struct rte_node_mbuf_dynfield {
* @return
* Pointer to node specific mbuf dynamic field structure
*/
-__rte_experimental
static __rte_always_inline rte_node_mbuf_dynfield_t *
rte_node_mbuf_dynfield_get(struct rte_mbuf *m, const int offset)
{
@@ -120,7 +116,6 @@ rte_node_mbuf_dynfield_get(struct rte_mbuf *m, const int offset)
* @return
* Pointer to node mbuf overloadable fields
*/
-__rte_experimental
static __rte_always_inline rte_node_mbuf_overload_fields_t *
rte_node_mbuf_overload_fields_get(struct rte_mbuf *m, const int offset)
{
@@ -148,7 +143,6 @@ rte_node_mbuf_overload_fields_get(struct rte_mbuf *m, const int offset)
* - ENOMEM - no memory
* >=0 on success: dynamic field offset
*/
-__rte_experimental
int rte_node_mbuf_dynfield_register(void);
#ifdef __cplusplus
diff --git a/lib/node/rte_node_pkt_cls_api.h b/lib/node/rte_node_pkt_cls_api.h
index 6f824b4f1f..6785626d11 100644
--- a/lib/node/rte_node_pkt_cls_api.h
+++ b/lib/node/rte_node_pkt_cls_api.h
@@ -8,10 +8,6 @@
/**
* @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 performing control path functions of pkt_cls node.
*/
diff --git a/lib/node/rte_node_udp4_input_api.h b/lib/node/rte_node_udp4_input_api.h
index 50f37b8bd9..72cb188721 100644
--- a/lib/node/rte_node_udp4_input_api.h
+++ b/lib/node/rte_node_udp4_input_api.h
@@ -8,16 +8,10 @@
/**
* @file rte_node_udp4_input_api.h
*
- * @warning
- * @b EXPERIMENTAL:
- * All functions in this file may be changed or removed without prior notice.
- *
* This API allows performing control path functions of udp4_* nodes
* like udp4_input.
*/
#include <rte_common.h>
-#include <rte_compat.h>
-
#include "rte_graph.h"
#ifdef __cplusplus
@@ -37,7 +31,6 @@ enum rte_node_udp4_input_next {
* @param usr_node
* Node registered by user to receive data.
*/
-__rte_experimental
int rte_node_udp4_usr_node_add(const char *usr_node);
/**
@@ -50,7 +43,6 @@ int rte_node_udp4_usr_node_add(const char *usr_node);
* @return
* 0 on success, negative otherwise.
*/
-__rte_experimental
int rte_node_udp4_dst_port_add(uint32_t dst_port, rte_edge_t next_node);
#ifdef __cplusplus
diff --git a/lib/node/udp4_input.c b/lib/node/udp4_input.c
index 5a74e28c85..2dc0c7a6da 100644
--- a/lib/node/udp4_input.c
+++ b/lib/node/udp4_input.c
@@ -56,7 +56,7 @@ static struct rte_hash_parameters udp4_params = {
.socket_id = 0,
};
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_node_udp4_dst_port_add, 23.11)
+RTE_EXPORT_SYMBOL(rte_node_udp4_dst_port_add)
int
rte_node_udp4_dst_port_add(uint32_t dst_port, rte_edge_t next_node)
{
@@ -78,7 +78,7 @@ rte_node_udp4_dst_port_add(uint32_t dst_port, rte_edge_t next_node)
return 0;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_node_udp4_usr_node_add, 23.11)
+RTE_EXPORT_SYMBOL(rte_node_udp4_usr_node_add)
int
rte_node_udp4_usr_node_add(const char *usr_node)
{
--
2.53.0
next prev parent reply other threads:[~2026-10-07 21:42 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-07 21:39 [PATCH 00/20] promote long standing experimental API to stable Stephen Hemminger
2026-10-07 21:39 ` [PATCH 01/20] eal: add missing export for rte_basename Stephen Hemminger
2026-10-08 9:56 ` Bruce Richardson
2026-10-07 21:39 ` [PATCH 02/20] eal: promote rte_basename to stable Stephen Hemminger
2026-10-08 9:56 ` Bruce Richardson
2026-10-07 21:39 ` [PATCH 03/20] eal: promote explicit zero and sensitive free " Stephen Hemminger
2026-10-08 10:01 ` Bruce Richardson
2026-10-07 21:39 ` [PATCH 04/20] eal: promote rte_size_to_str " Stephen Hemminger
2026-10-08 10:01 ` Bruce Richardson
2026-10-07 21:39 ` [PATCH 05/20] eal: promote lcore variables API " Stephen Hemminger
2026-10-08 10:04 ` Bruce Richardson
2026-10-07 21:39 ` [PATCH 06/20] cmdline: promote bool token ops " Stephen Hemminger
2026-10-08 10:05 ` Bruce Richardson
2026-10-07 21:39 ` [PATCH 07/20] ethdev: promote link connector to string " Stephen Hemminger
2026-10-07 21:39 ` [PATCH 08/20] port: promote SWX port API " Stephen Hemminger
2026-10-07 21:39 ` [PATCH 09/20] table: promote SWX table " Stephen Hemminger
2026-10-07 21:39 ` [PATCH 10/20] pipeline: promote SWX IPsec " Stephen Hemminger
2026-10-07 21:39 ` [PATCH 11/20] pipeline: promote SWX pipeline and control " Stephen Hemminger
2026-10-07 21:39 ` [PATCH 12/20] power: promote PM QoS and uncore " Stephen Hemminger
2026-10-07 21:39 ` [PATCH 13/20] ring: promote soring " Stephen Hemminger
2026-10-07 21:39 ` [PATCH 14/20] dispatcher: promote " Stephen Hemminger
2026-10-07 21:39 ` [PATCH 15/20] argparse: " Stephen Hemminger
2026-10-08 10:15 ` Bruce Richardson
2026-10-07 21:39 ` Stephen Hemminger [this message]
2026-10-07 21:39 ` [PATCH 17/20] hash: promote RCU reclaim and thash key generation " Stephen Hemminger
2026-10-08 10:16 ` Bruce Richardson
2026-10-07 21:39 ` [PATCH 18/20] cryptodev: promote algorithm helpers " Stephen Hemminger
2026-10-07 21:39 ` [PATCH 19/20] pdcp: promote API " Stephen Hemminger
2026-10-07 21:39 ` [PATCH 20/20] mempool: promote memory range and alignment " Stephen Hemminger
2026-10-08 7:19 ` Morten Brørup
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261007214115.3092715-17-stephen@networkplumber.org \
--to=stephen@networkplumber.org \
--cc=dev@dpdk.org \
--cc=ndabilpuram@marvell.com \
--cc=pbhagavatula@marvell.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.