* [PATCH 00/22] ethdev: convert experimental symbols etc
@ 2026-09-01 20:22 Stephen Hemminger
2026-09-01 20:23 ` [PATCH 01/22] ethdev: promote meter API to stable Stephen Hemminger
` (21 more replies)
0 siblings, 22 replies; 24+ messages in thread
From: Stephen Hemminger @ 2026-09-01 20:22 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger
The DPDK policy is that experimental status should be short term
with the expectation that it will be removed after one or two releases.
A large part of the ethdev API has been left marked experimental long past that point.
Several API's have stayed experimental as far back as 17.11.
This series promotes 119 ethdev symbols introduced in 24.11 or earlier.
It also cleans up comments warnings on structures and inline functions.
The trace point symbols are left experimental on purpose;
trace infrastructure is intended to stay unstable.
Stephen Hemminger (22):
ethdev: promote meter API to stable
ethdev: promote module EEPROM API to stable
ethdev: promote rte_flow_conv to stable
ethdev: promote hairpin API to stable
ethdev: promote read clock and flow dump to stable
ethdev: promote FEC API to stable
ethdev: promote link speed helpers to stable
ethdev: promote flow tunnel offload API to stable
ethdev: promote aged flow query to stable
ethdev: promote indirect action API to stable
ethdev: promote asynchronous flow API to stable
ethdev: promote flex item API to stable
ethdev: promote remaining aged flow helpers to stable
ethdev: promote congestion management API to stable
ethdev: promote IP reassembly offload API to stable
ethdev: promote per-queue priority flow control to stable
ethdev: promote device info and dump helpers to stable
ethdev: promote speed lanes API to stable
ethdev: promote queue helpers and aggregated ports to stable
ethdev: promote remaining aged symbols to stable
ethdev: promote fast path inline helpers to stable
ethdev: promote experimental structures to stable
doc/guides/rel_notes/release_26_11.rst | 67 +++++
lib/ethdev/rte_ethdev.c | 84 +++---
lib/ethdev/rte_ethdev.h | 228 ---------------
lib/ethdev/rte_ethdev_cman.c | 8 +-
lib/ethdev/rte_flow.c | 102 +++----
lib/ethdev/rte_flow.h | 370 +------------------------
lib/ethdev/rte_mtr.c | 42 +--
lib/ethdev/rte_mtr.h | 24 --
lib/ethdev/rte_tm.c | 2 +-
lib/ethdev/rte_tm.h | 1 -
10 files changed, 189 insertions(+), 739 deletions(-)
--
2.53.0
^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH 01/22] ethdev: promote meter API to stable
2026-09-01 20:22 [PATCH 00/22] ethdev: convert experimental symbols etc Stephen Hemminger
@ 2026-09-01 20:23 ` Stephen Hemminger
2026-09-01 20:23 ` [PATCH 02/22] ethdev: promote module EEPROM " Stephen Hemminger
` (20 subsequent siblings)
21 siblings, 0 replies; 24+ messages in thread
From: Stephen Hemminger @ 2026-09-01 20:23 UTC (permalink / raw)
To: dev
Cc: Stephen Hemminger, Cristian Dumitrescu, Thomas Monjalon,
Andrew Rybchenko
The traffic metering and policing (MTR) API was introduced in v17.11
and has carried the experimental tag ever since. The core of the
interface - profile and object management, statistics and the meter
enable/disable controls - has not changed since it was added.
Later additions to the same API are promoted together with it, since
they are all long past the two-release probation:
17.11 profile add/delete/update, create, destroy, meter
enable/disable, dscp table update, capabilities get,
stats read/update
21.05 meter policy validate/add/delete/update
22.07 meter vlan table update, color in protocol set/get,
color in protocol priority get
22.11 meter profile get, meter policy get
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
doc/guides/rel_notes/release_26_11.rst | 4 +++
lib/ethdev/rte_mtr.c | 42 +++++++++++++-------------
lib/ethdev/rte_mtr.h | 24 ---------------
3 files changed, 25 insertions(+), 45 deletions(-)
diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst
index 87c7e81bde..03d4eaba40 100644
--- a/doc/guides/rel_notes/release_26_11.rst
+++ b/doc/guides/rel_notes/release_26_11.rst
@@ -95,6 +95,10 @@ API Changes
Also, make sure to start the actual text at the margin.
=======================================================
+* ethdev: Promoted the following API from experimental to stable:
+
+ * meter (MTR) and policing: ``rte_mtr_*``
+
ABI Changes
-----------
diff --git a/lib/ethdev/rte_mtr.c b/lib/ethdev/rte_mtr.c
index c6f0698ed3..4654ed83e9 100644
--- a/lib/ethdev/rte_mtr.c
+++ b/lib/ethdev/rte_mtr.c
@@ -78,7 +78,7 @@ __extension__ ({ \
})
/* MTR capabilities get */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_capabilities_get, 17.11)
+RTE_EXPORT_SYMBOL(rte_mtr_capabilities_get)
int
rte_mtr_capabilities_get(uint16_t port_id,
struct rte_mtr_capabilities *cap,
@@ -95,7 +95,7 @@ rte_mtr_capabilities_get(uint16_t port_id,
}
/* MTR meter profile add */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_profile_add, 17.11)
+RTE_EXPORT_SYMBOL(rte_mtr_meter_profile_add)
int
rte_mtr_meter_profile_add(uint16_t port_id,
uint32_t meter_profile_id,
@@ -114,7 +114,7 @@ rte_mtr_meter_profile_add(uint16_t port_id,
}
/** MTR meter profile delete */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_profile_delete, 17.11)
+RTE_EXPORT_SYMBOL(rte_mtr_meter_profile_delete)
int
rte_mtr_meter_profile_delete(uint16_t port_id,
uint32_t meter_profile_id,
@@ -131,7 +131,7 @@ rte_mtr_meter_profile_delete(uint16_t port_id,
}
/** MTR meter profile get */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_profile_get, 22.11)
+RTE_EXPORT_SYMBOL(rte_mtr_meter_profile_get)
struct rte_flow_meter_profile *
rte_mtr_meter_profile_get(uint16_t port_id,
uint32_t meter_profile_id,
@@ -148,7 +148,7 @@ rte_mtr_meter_profile_get(uint16_t port_id,
}
/* MTR meter policy validate */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_policy_validate, 21.05)
+RTE_EXPORT_SYMBOL(rte_mtr_meter_policy_validate)
int
rte_mtr_meter_policy_validate(uint16_t port_id,
struct rte_mtr_meter_policy_params *policy,
@@ -165,7 +165,7 @@ rte_mtr_meter_policy_validate(uint16_t port_id,
}
/* MTR meter policy add */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_policy_add, 21.05)
+RTE_EXPORT_SYMBOL(rte_mtr_meter_policy_add)
int
rte_mtr_meter_policy_add(uint16_t port_id,
uint32_t policy_id,
@@ -183,7 +183,7 @@ rte_mtr_meter_policy_add(uint16_t port_id,
}
/** MTR meter policy delete */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_policy_delete, 21.05)
+RTE_EXPORT_SYMBOL(rte_mtr_meter_policy_delete)
int
rte_mtr_meter_policy_delete(uint16_t port_id,
uint32_t policy_id,
@@ -200,7 +200,7 @@ rte_mtr_meter_policy_delete(uint16_t port_id,
}
/** MTR meter policy get */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_policy_get, 22.11)
+RTE_EXPORT_SYMBOL(rte_mtr_meter_policy_get)
struct rte_flow_meter_policy *
rte_mtr_meter_policy_get(uint16_t port_id,
uint32_t policy_id,
@@ -217,7 +217,7 @@ rte_mtr_meter_policy_get(uint16_t port_id,
}
/** MTR object create */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_create, 17.11)
+RTE_EXPORT_SYMBOL(rte_mtr_create)
int
rte_mtr_create(uint16_t port_id,
uint32_t mtr_id,
@@ -236,7 +236,7 @@ rte_mtr_create(uint16_t port_id,
}
/** MTR object destroy */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_destroy, 17.11)
+RTE_EXPORT_SYMBOL(rte_mtr_destroy)
int
rte_mtr_destroy(uint16_t port_id,
uint32_t mtr_id,
@@ -253,7 +253,7 @@ rte_mtr_destroy(uint16_t port_id,
}
/** MTR object meter enable */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_enable, 17.11)
+RTE_EXPORT_SYMBOL(rte_mtr_meter_enable)
int
rte_mtr_meter_enable(uint16_t port_id,
uint32_t mtr_id,
@@ -270,7 +270,7 @@ rte_mtr_meter_enable(uint16_t port_id,
}
/** MTR object meter disable */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_disable, 17.11)
+RTE_EXPORT_SYMBOL(rte_mtr_meter_disable)
int
rte_mtr_meter_disable(uint16_t port_id,
uint32_t mtr_id,
@@ -287,7 +287,7 @@ rte_mtr_meter_disable(uint16_t port_id,
}
/** MTR object meter profile update */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_profile_update, 17.11)
+RTE_EXPORT_SYMBOL(rte_mtr_meter_profile_update)
int
rte_mtr_meter_profile_update(uint16_t port_id,
uint32_t mtr_id,
@@ -305,7 +305,7 @@ rte_mtr_meter_profile_update(uint16_t port_id,
}
/** MTR object meter policy update */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_policy_update, 21.05)
+RTE_EXPORT_SYMBOL(rte_mtr_meter_policy_update)
int
rte_mtr_meter_policy_update(uint16_t port_id,
uint32_t mtr_id,
@@ -323,7 +323,7 @@ rte_mtr_meter_policy_update(uint16_t port_id,
}
/** MTR object meter DSCP table update */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_dscp_table_update, 17.11)
+RTE_EXPORT_SYMBOL(rte_mtr_meter_dscp_table_update)
int
rte_mtr_meter_dscp_table_update(uint16_t port_id,
uint32_t mtr_id, enum rte_mtr_color_in_protocol proto,
@@ -341,7 +341,7 @@ rte_mtr_meter_dscp_table_update(uint16_t port_id,
}
/** MTR object meter VLAN table update */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_vlan_table_update, 22.07)
+RTE_EXPORT_SYMBOL(rte_mtr_meter_vlan_table_update)
int
rte_mtr_meter_vlan_table_update(uint16_t port_id,
uint32_t mtr_id, enum rte_mtr_color_in_protocol proto,
@@ -359,7 +359,7 @@ rte_mtr_meter_vlan_table_update(uint16_t port_id,
}
/** Set the input color protocol on MTR object */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_color_in_protocol_set, 22.07)
+RTE_EXPORT_SYMBOL(rte_mtr_color_in_protocol_set)
int
rte_mtr_color_in_protocol_set(uint16_t port_id,
uint32_t mtr_id,
@@ -378,7 +378,7 @@ rte_mtr_color_in_protocol_set(uint16_t port_id,
}
/** Get input color protocols of MTR object */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_color_in_protocol_get, 22.07)
+RTE_EXPORT_SYMBOL(rte_mtr_color_in_protocol_get)
int
rte_mtr_color_in_protocol_get(uint16_t port_id,
uint32_t mtr_id,
@@ -396,7 +396,7 @@ rte_mtr_color_in_protocol_get(uint16_t port_id,
}
/** Get input color protocol priority of MTR object */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_color_in_protocol_priority_get, 22.07)
+RTE_EXPORT_SYMBOL(rte_mtr_color_in_protocol_priority_get)
int
rte_mtr_color_in_protocol_priority_get(uint16_t port_id,
uint32_t mtr_id,
@@ -415,7 +415,7 @@ rte_mtr_color_in_protocol_priority_get(uint16_t port_id,
}
/** MTR object enabled stats update */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_stats_update, 17.11)
+RTE_EXPORT_SYMBOL(rte_mtr_stats_update)
int
rte_mtr_stats_update(uint16_t port_id,
uint32_t mtr_id,
@@ -433,7 +433,7 @@ rte_mtr_stats_update(uint16_t port_id,
}
/** MTR object stats read */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_stats_read, 17.11)
+RTE_EXPORT_SYMBOL(rte_mtr_stats_read)
int
rte_mtr_stats_read(uint16_t port_id,
uint32_t mtr_id,
diff --git a/lib/ethdev/rte_mtr.h b/lib/ethdev/rte_mtr.h
index 30e6c6b12e..0a7782d4a3 100644
--- a/lib/ethdev/rte_mtr.h
+++ b/lib/ethdev/rte_mtr.h
@@ -41,9 +41,6 @@
* A) Whether an MTR object is private to a flow or potentially shared by
* several flows has to be specified at creation time.
* B) Several meter actions can be potentially registered for the same flow.
- *
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice
*/
#include <stdint.h>
#include <rte_compat.h>
@@ -569,7 +566,6 @@ struct rte_mtr_error {
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_capabilities_get(uint16_t port_id,
struct rte_mtr_capabilities *cap,
@@ -593,7 +589,6 @@ rte_mtr_capabilities_get(uint16_t port_id,
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_meter_profile_add(uint16_t port_id,
uint32_t meter_profile_id,
@@ -615,7 +610,6 @@ rte_mtr_meter_profile_add(uint16_t port_id,
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_meter_profile_delete(uint16_t port_id,
uint32_t meter_profile_id,
@@ -635,7 +629,6 @@ rte_mtr_meter_profile_delete(uint16_t port_id,
* @return
* A valid handle in case of success, NULL otherwise.
*/
-__rte_experimental
struct rte_flow_meter_profile *
rte_mtr_meter_profile_get(uint16_t port_id,
uint32_t meter_profile_id,
@@ -663,7 +656,6 @@ rte_mtr_meter_profile_get(uint16_t port_id,
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_meter_policy_validate(uint16_t port_id,
struct rte_mtr_meter_policy_params *policy,
@@ -690,7 +682,6 @@ rte_mtr_meter_policy_validate(uint16_t port_id,
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_meter_policy_add(uint16_t port_id,
uint32_t policy_id,
@@ -711,7 +702,6 @@ rte_mtr_meter_policy_add(uint16_t port_id,
* @return
* A valid handle in case of success, NULL otherwise.
*/
-__rte_experimental
struct rte_flow_meter_policy *
rte_mtr_meter_policy_get(uint16_t port_id,
uint32_t policy_id,
@@ -793,7 +783,6 @@ struct rte_mtr_meter_policy_params policy = \
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_meter_policy_delete(uint16_t port_id,
uint32_t policy_id,
@@ -822,7 +811,6 @@ rte_mtr_meter_policy_delete(uint16_t port_id,
*
* @see enum rte_flow_action_type::RTE_FLOW_ACTION_TYPE_METER
*/
-__rte_experimental
int
rte_mtr_create(uint16_t port_id,
uint32_t mtr_id,
@@ -846,7 +834,6 @@ rte_mtr_create(uint16_t port_id,
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_destroy(uint16_t port_id,
uint32_t mtr_id,
@@ -874,7 +861,6 @@ rte_mtr_destroy(uint16_t port_id,
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_meter_disable(uint16_t port_id,
uint32_t mtr_id,
@@ -896,7 +882,6 @@ rte_mtr_meter_disable(uint16_t port_id,
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_meter_enable(uint16_t port_id,
uint32_t mtr_id,
@@ -916,7 +901,6 @@ rte_mtr_meter_enable(uint16_t port_id,
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_meter_profile_update(uint16_t port_id,
uint32_t mtr_id,
@@ -937,7 +921,6 @@ rte_mtr_meter_profile_update(uint16_t port_id,
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_meter_policy_update(uint16_t port_id,
uint32_t mtr_id,
@@ -964,7 +947,6 @@ rte_mtr_meter_policy_update(uint16_t port_id,
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_meter_dscp_table_update(uint16_t port_id,
uint32_t mtr_id, enum rte_mtr_color_in_protocol proto,
@@ -991,7 +973,6 @@ rte_mtr_meter_dscp_table_update(uint16_t port_id,
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_meter_vlan_table_update(uint16_t port_id, uint32_t mtr_id,
enum rte_mtr_color_in_protocol proto,
@@ -1022,7 +1003,6 @@ rte_mtr_meter_vlan_table_update(uint16_t port_id, uint32_t mtr_id,
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_color_in_protocol_set(uint16_t port_id, uint32_t mtr_id,
enum rte_mtr_color_in_protocol proto, uint32_t priority,
@@ -1042,7 +1022,6 @@ rte_mtr_color_in_protocol_set(uint16_t port_id, uint32_t mtr_id,
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_color_in_protocol_get(uint16_t port_id, uint32_t mtr_id,
uint64_t *proto_mask,
@@ -1064,7 +1043,6 @@ rte_mtr_color_in_protocol_get(uint16_t port_id, uint32_t mtr_id,
* @return
* 0 on success, non-zero error code otherwise.
*/
-__rte_experimental
int
rte_mtr_color_in_protocol_priority_get(uint16_t port_id, uint32_t mtr_id,
enum rte_mtr_color_in_protocol proto, uint32_t *priority,
@@ -1088,7 +1066,6 @@ rte_mtr_color_in_protocol_priority_get(uint16_t port_id, uint32_t mtr_id,
*
* @see enum rte_mtr_stats_type
*/
-__rte_experimental
int
rte_mtr_stats_update(uint16_t port_id,
uint32_t mtr_id,
@@ -1120,7 +1097,6 @@ rte_mtr_stats_update(uint16_t port_id,
*
* @see enum rte_mtr_stats_type
*/
-__rte_experimental
int
rte_mtr_stats_read(uint16_t port_id,
uint32_t mtr_id,
--
2.53.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 02/22] ethdev: promote module EEPROM API to stable
2026-09-01 20:22 [PATCH 00/22] ethdev: convert experimental symbols etc Stephen Hemminger
2026-09-01 20:23 ` [PATCH 01/22] ethdev: promote meter API to stable Stephen Hemminger
@ 2026-09-01 20:23 ` Stephen Hemminger
2026-09-01 20:23 ` [PATCH 03/22] ethdev: promote rte_flow_conv " Stephen Hemminger
` (19 subsequent siblings)
21 siblings, 0 replies; 24+ messages in thread
From: Stephen Hemminger @ 2026-09-01 20:23 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Thomas Monjalon, Andrew Rybchenko
rte_eth_dev_get_module_info() and rte_eth_dev_get_module_eeprom()
were added in v18.05 to report SFF module identification and dump
the module EEPROM. Both are widely implemented by PMDs and their
signatures have not changed since they were introduced.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
doc/guides/rel_notes/release_26_11.rst | 1 +
lib/ethdev/rte_ethdev.c | 4 ++--
lib/ethdev/rte_ethdev.h | 8 --------
3 files changed, 3 insertions(+), 10 deletions(-)
diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst
index 03d4eaba40..8c533d87e8 100644
--- a/doc/guides/rel_notes/release_26_11.rst
+++ b/doc/guides/rel_notes/release_26_11.rst
@@ -98,6 +98,7 @@ API Changes
* ethdev: Promoted the following API from experimental to stable:
* meter (MTR) and policing: ``rte_mtr_*``
+ * SFF: ``rte_eth_dev_get_module_info`` and ``rte_eth_dev_get_module_eeprom``
ABI Changes
diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index 9efeaf77cb..78ad12c2c0 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -6952,7 +6952,7 @@ rte_eth_dev_set_eeprom(uint16_t port_id, struct rte_dev_eeprom_info *info)
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_dev_get_module_info, 18.05)
+RTE_EXPORT_SYMBOL(rte_eth_dev_get_module_info)
int
rte_eth_dev_get_module_info(uint16_t port_id,
struct rte_eth_dev_module_info *modinfo)
@@ -6979,7 +6979,7 @@ rte_eth_dev_get_module_info(uint16_t port_id,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_dev_get_module_eeprom, 18.05)
+RTE_EXPORT_SYMBOL(rte_eth_dev_get_module_eeprom)
int
rte_eth_dev_get_module_eeprom(uint16_t port_id,
struct rte_dev_eeprom_info *info)
diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
index ee400b386f..7f0333cbd1 100644
--- a/lib/ethdev/rte_ethdev.h
+++ b/lib/ethdev/rte_ethdev.h
@@ -5392,9 +5392,6 @@ int rte_eth_dev_get_eeprom(uint16_t port_id, struct rte_dev_eeprom_info *info);
int rte_eth_dev_set_eeprom(uint16_t port_id, struct rte_dev_eeprom_info *info);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Retrieve the type and size of plugin module EEPROM
*
* @param port_id
@@ -5409,15 +5406,11 @@ int rte_eth_dev_set_eeprom(uint16_t port_id, struct rte_dev_eeprom_info *info);
* - (-EIO) if device is removed.
* - others depends on the specific operations implementation.
*/
-__rte_experimental
int
rte_eth_dev_get_module_info(uint16_t port_id, struct rte_eth_dev_module_info *modinfo)
__rte_warn_unused_result;
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Retrieve the data of plugin module EEPROM
*
* @param port_id
@@ -5433,7 +5426,6 @@ rte_eth_dev_get_module_info(uint16_t port_id, struct rte_eth_dev_module_info *mo
* - (-EIO) if device is removed.
* - others depends on the specific operations implementation.
*/
-__rte_experimental
int
rte_eth_dev_get_module_eeprom(uint16_t port_id, struct rte_dev_eeprom_info *info)
__rte_warn_unused_result;
--
2.53.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 03/22] ethdev: promote rte_flow_conv to stable
2026-09-01 20:22 [PATCH 00/22] ethdev: convert experimental symbols etc Stephen Hemminger
2026-09-01 20:23 ` [PATCH 01/22] ethdev: promote meter API to stable Stephen Hemminger
2026-09-01 20:23 ` [PATCH 02/22] ethdev: promote module EEPROM " Stephen Hemminger
@ 2026-09-01 20:23 ` Stephen Hemminger
2026-09-01 20:23 ` [PATCH 04/22] ethdev: promote hairpin API " Stephen Hemminger
` (18 subsequent siblings)
21 siblings, 0 replies; 24+ messages in thread
From: Stephen Hemminger @ 2026-09-01 20:23 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Ori Kam, Thomas Monjalon, Andrew Rybchenko
rte_flow_conv() was added in v18.11 as the generic helper to copy
and convert flow API objects (items, actions, attributes, rules).
Its prototype and the rte_flow_conv_op enum have been unchanged
since, and it is used by drivers and applications alike.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
doc/guides/rel_notes/release_26_11.rst | 1 +
lib/ethdev/rte_flow.c | 2 +-
lib/ethdev/rte_flow.h | 1 -
3 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst
index 8c533d87e8..77ee3380f9 100644
--- a/doc/guides/rel_notes/release_26_11.rst
+++ b/doc/guides/rel_notes/release_26_11.rst
@@ -99,6 +99,7 @@ API Changes
* meter (MTR) and policing: ``rte_mtr_*``
* SFF: ``rte_eth_dev_get_module_info`` and ``rte_eth_dev_get_module_eeprom``
+ * flow conversion: ``rte_flow_conv``
ABI Changes
diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c
index 60c9a3d06f..db4eb515f3 100644
--- a/lib/ethdev/rte_flow.c
+++ b/lib/ethdev/rte_flow.c
@@ -1119,7 +1119,7 @@ rte_flow_conv_name(int is_action,
}
/** Helper function to convert flow API objects. */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_conv, 18.11)
+RTE_EXPORT_SYMBOL(rte_flow_conv)
int
rte_flow_conv(enum rte_flow_conv_op op,
void *dst,
diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h
index b495409406..1b247a36c9 100644
--- a/lib/ethdev/rte_flow.h
+++ b/lib/ethdev/rte_flow.h
@@ -4949,7 +4949,6 @@ rte_flow_copy(struct rte_flow_desc *fd, size_t len,
*
* @see rte_flow_conv_op
*/
-__rte_experimental
int
rte_flow_conv(enum rte_flow_conv_op op,
void *dst,
--
2.53.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 04/22] ethdev: promote hairpin API to stable
2026-09-01 20:22 [PATCH 00/22] ethdev: convert experimental symbols etc Stephen Hemminger
` (2 preceding siblings ...)
2026-09-01 20:23 ` [PATCH 03/22] ethdev: promote rte_flow_conv " Stephen Hemminger
@ 2026-09-01 20:23 ` Stephen Hemminger
2026-09-01 20:23 ` [PATCH 05/22] ethdev: promote read clock and flow dump " Stephen Hemminger
` (17 subsequent siblings)
21 siblings, 0 replies; 24+ messages in thread
From: Stephen Hemminger @ 2026-09-01 20:23 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Thomas Monjalon, Andrew Rybchenko
Hairpin support was introduced in v19.11 with the queue setup and
capability query functions, and completed in v20.11 with the
explicit bind/unbind and peer port query functions:
19.11 rte_eth_rx_hairpin_queue_setup
rte_eth_tx_hairpin_queue_setup
rte_eth_dev_hairpin_capability_get
20.11 rte_eth_hairpin_bind
rte_eth_hairpin_unbind
rte_eth_hairpin_get_peer_ports
The interface has been unchanged since and is implemented by
several PMDs, so promote the feature as a whole.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
doc/guides/rel_notes/release_26_11.rst | 6 +++++
lib/ethdev/rte_ethdev.c | 12 ++++-----
lib/ethdev/rte_ethdev.h | 36 --------------------------
3 files changed, 12 insertions(+), 42 deletions(-)
diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst
index 77ee3380f9..8a60d21a1d 100644
--- a/doc/guides/rel_notes/release_26_11.rst
+++ b/doc/guides/rel_notes/release_26_11.rst
@@ -100,6 +100,12 @@ API Changes
* meter (MTR) and policing: ``rte_mtr_*``
* SFF: ``rte_eth_dev_get_module_info`` and ``rte_eth_dev_get_module_eeprom``
* flow conversion: ``rte_flow_conv``
+ * hairpin queue: ``rte_eth_rx_hairpin_queue_setup``,
+ ``rte_eth_tx_hairpin_queue_setup``,
+ ``rte_eth_dev_hairpin_capability_get``,
+ ``rte_eth_hairpin_bind``,
+ ``rte_eth_hairpin_unbind``,
+ ``rte_eth_hairpin_get_peer_ports``
ABI Changes
diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index 78ad12c2c0..f27f698406 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -2506,7 +2506,7 @@ rte_eth_rx_queue_setup(uint16_t port_id, uint16_t rx_queue_id,
return eth_err(port_id, ret);
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_rx_hairpin_queue_setup, 19.11)
+RTE_EXPORT_SYMBOL(rte_eth_rx_hairpin_queue_setup)
int
rte_eth_rx_hairpin_queue_setup(uint16_t port_id, uint16_t rx_queue_id,
uint16_t nb_rx_desc,
@@ -2724,7 +2724,7 @@ rte_eth_tx_queue_setup(uint16_t port_id, uint16_t tx_queue_id,
tx_queue_id, nb_tx_desc, socket_id, &local_conf));
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_tx_hairpin_queue_setup, 19.11)
+RTE_EXPORT_SYMBOL(rte_eth_tx_hairpin_queue_setup)
int
rte_eth_tx_hairpin_queue_setup(uint16_t port_id, uint16_t tx_queue_id,
uint16_t nb_tx_desc,
@@ -2824,7 +2824,7 @@ rte_eth_tx_hairpin_queue_setup(uint16_t port_id, uint16_t tx_queue_id,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_hairpin_bind, 20.11)
+RTE_EXPORT_SYMBOL(rte_eth_hairpin_bind)
int
rte_eth_hairpin_bind(uint16_t tx_port, uint16_t rx_port)
{
@@ -2852,7 +2852,7 @@ rte_eth_hairpin_bind(uint16_t tx_port, uint16_t rx_port)
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_hairpin_unbind, 20.11)
+RTE_EXPORT_SYMBOL(rte_eth_hairpin_unbind)
int
rte_eth_hairpin_unbind(uint16_t tx_port, uint16_t rx_port)
{
@@ -2880,7 +2880,7 @@ rte_eth_hairpin_unbind(uint16_t tx_port, uint16_t rx_port)
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_hairpin_get_peer_ports, 20.11)
+RTE_EXPORT_SYMBOL(rte_eth_hairpin_get_peer_ports)
int
rte_eth_hairpin_get_peer_ports(uint16_t port_id, uint16_t *peer_ports,
size_t len, uint32_t direction)
@@ -7094,7 +7094,7 @@ rte_eth_dev_adjust_nb_rx_tx_desc(uint16_t port_id,
return 0;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_dev_hairpin_capability_get, 19.11)
+RTE_EXPORT_SYMBOL(rte_eth_dev_hairpin_capability_get)
int
rte_eth_dev_hairpin_capability_get(uint16_t port_id,
struct rte_eth_hairpin_cap *cap)
diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
index 7f0333cbd1..33ec81792d 100644
--- a/lib/ethdev/rte_ethdev.h
+++ b/lib/ethdev/rte_ethdev.h
@@ -1240,9 +1240,6 @@ struct rte_eth_txconf {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
- *
* A structure used to return the Tx or Rx hairpin queue capabilities.
*/
struct rte_eth_hairpin_queue_cap {
@@ -1262,9 +1259,6 @@ struct rte_eth_hairpin_queue_cap {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
- *
* A structure used to return the hairpin capabilities that are supported.
*/
struct rte_eth_hairpin_cap {
@@ -1282,9 +1276,6 @@ struct rte_eth_hairpin_cap {
#define RTE_ETH_MAX_HAIRPIN_PEERS 32
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
- *
* A structure used to hold hairpin peer data.
*/
struct rte_eth_hairpin_peer {
@@ -1293,9 +1284,6 @@ struct rte_eth_hairpin_peer {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
- *
* A structure used to configure hairpin binding.
*/
struct rte_eth_hairpin_conf {
@@ -2531,9 +2519,6 @@ int rte_eth_rx_queue_setup(uint16_t port_id, uint16_t rx_queue_id,
struct rte_mempool *mb_pool);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
- *
* Allocate and set up a hairpin receive queue for an Ethernet device.
*
* The function set up the selected queue to be used in hairpin.
@@ -2557,7 +2542,6 @@ int rte_eth_rx_queue_setup(uint16_t port_id, uint16_t rx_queue_id,
* - (-EINVAL) if bad parameter.
* - (-ENOMEM) if unable to allocate the resources.
*/
-__rte_experimental
int rte_eth_rx_hairpin_queue_setup
(uint16_t port_id, uint16_t rx_queue_id, uint16_t nb_rx_desc,
const struct rte_eth_hairpin_conf *conf);
@@ -2615,9 +2599,6 @@ int rte_eth_tx_queue_setup(uint16_t port_id, uint16_t tx_queue_id,
const struct rte_eth_txconf *tx_conf);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
- *
* Allocate and set up a transmit hairpin queue for an Ethernet device.
*
* @param port_id
@@ -2639,15 +2620,11 @@ int rte_eth_tx_queue_setup(uint16_t port_id, uint16_t tx_queue_id,
* - (-EINVAL) if bad parameter.
* - (-ENOMEM) if unable to allocate the resources.
*/
-__rte_experimental
int rte_eth_tx_hairpin_queue_setup
(uint16_t port_id, uint16_t tx_queue_id, uint16_t nb_tx_desc,
const struct rte_eth_hairpin_conf *conf);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
- *
* Get all the hairpin peer Rx / Tx ports of the current port.
* The caller should ensure that the array is large enough to save the ports
* list.
@@ -2670,14 +2647,10 @@ int rte_eth_tx_hairpin_queue_setup
* - (-ENOTSUP) if hardware doesn't support.
* - Others detailed errors from PMDs.
*/
-__rte_experimental
int rte_eth_hairpin_get_peer_ports(uint16_t port_id, uint16_t *peer_ports,
size_t len, uint32_t direction);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
- *
* Bind all hairpin Tx queues of one port to the Rx queues of the peer port.
* It is only allowed to call this function after all hairpin queues are
* configured properly and the devices are in started state.
@@ -2696,13 +2669,9 @@ int rte_eth_hairpin_get_peer_ports(uint16_t port_id, uint16_t *peer_ports,
* - (-ENOTSUP) if hardware doesn't support.
* - Others detailed errors from PMDs.
*/
-__rte_experimental
int rte_eth_hairpin_bind(uint16_t tx_port, uint16_t rx_port);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
- *
* Unbind all hairpin Tx queues of one port from the Rx queues of the peer port.
* This should be called before closing the Tx or Rx devices, if the bind
* function is called before.
@@ -2723,7 +2692,6 @@ int rte_eth_hairpin_bind(uint16_t tx_port, uint16_t rx_port);
* - (-ENOTSUP) if hardware doesn't support.
* - Others detailed errors from PMDs.
*/
-__rte_experimental
int rte_eth_hairpin_unbind(uint16_t tx_port, uint16_t rx_port);
/**
@@ -5755,9 +5723,6 @@ void *
rte_eth_dev_get_sec_ctx(uint16_t port_id);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
- *
* Query the device hairpin capabilities.
*
* @param port_id
@@ -5769,7 +5734,6 @@ rte_eth_dev_get_sec_ctx(uint16_t port_id);
* - (-ENOTSUP) if hardware doesn't support.
* - (-EINVAL) if bad parameter.
*/
-__rte_experimental
int rte_eth_dev_hairpin_capability_get(uint16_t port_id,
struct rte_eth_hairpin_cap *cap);
--
2.53.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 05/22] ethdev: promote read clock and flow dump to stable
2026-09-01 20:22 [PATCH 00/22] ethdev: convert experimental symbols etc Stephen Hemminger
` (3 preceding siblings ...)
2026-09-01 20:23 ` [PATCH 04/22] ethdev: promote hairpin API " Stephen Hemminger
@ 2026-09-01 20:23 ` Stephen Hemminger
2026-09-01 20:23 ` [PATCH 06/22] ethdev: promote FEC API " Stephen Hemminger
` (16 subsequent siblings)
21 siblings, 0 replies; 24+ messages in thread
From: Stephen Hemminger @ 2026-09-01 20:23 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Thomas Monjalon, Andrew Rybchenko, Ori Kam
Two long-standing ethdev helpers graduate here:
19.08 rte_eth_read_clock, to read the device clock counter
20.02 rte_flow_dev_dump, to dump the internal flow representation
Neither has changed since it was added.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
doc/guides/rel_notes/release_26_11.rst | 2 ++
lib/ethdev/rte_ethdev.c | 2 +-
lib/ethdev/rte_ethdev.h | 4 ----
lib/ethdev/rte_flow.c | 2 +-
lib/ethdev/rte_flow.h | 4 ----
5 files changed, 4 insertions(+), 10 deletions(-)
diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst
index 8a60d21a1d..57a47ec5f2 100644
--- a/doc/guides/rel_notes/release_26_11.rst
+++ b/doc/guides/rel_notes/release_26_11.rst
@@ -106,6 +106,8 @@ API Changes
``rte_eth_hairpin_bind``,
``rte_eth_hairpin_unbind``,
``rte_eth_hairpin_get_peer_ports``
+ * clock: ``rte_eth_read_clock``
+ * flow dump: ``rte_flow_dev_dump``
ABI Changes
diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index f27f698406..ce1779ba44 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -6789,7 +6789,7 @@ rte_eth_timesync_write_time(uint16_t port_id, const struct timespec *timestamp)
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_read_clock, 19.08)
+RTE_EXPORT_SYMBOL(rte_eth_read_clock)
int
rte_eth_read_clock(uint16_t port_id, uint64_t *clock)
{
diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
index 33ec81792d..7905e01658 100644
--- a/lib/ethdev/rte_ethdev.h
+++ b/lib/ethdev/rte_ethdev.h
@@ -5588,9 +5588,6 @@ int rte_eth_timesync_read_time(uint16_t port_id, struct timespec *time);
int rte_eth_timesync_write_time(uint16_t port_id, const struct timespec *time);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Read the current clock counter of an Ethernet device
*
* This returns the current raw clock value of an Ethernet device. It is
@@ -5632,7 +5629,6 @@ int rte_eth_timesync_write_time(uint16_t port_id, const struct timespec *time);
* - -ENOTSUP: The function is not supported by the Ethernet driver.
* - -EINVAL: if bad parameter.
*/
-__rte_experimental
int
rte_eth_read_clock(uint16_t port_id, uint64_t *clock);
diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c
index db4eb515f3..827305385f 100644
--- a/lib/ethdev/rte_flow.c
+++ b/lib/ethdev/rte_flow.c
@@ -1246,7 +1246,7 @@ rte_flow_copy(struct rte_flow_desc *desc, size_t len,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_dev_dump, 20.02)
+RTE_EXPORT_SYMBOL(rte_flow_dev_dump)
int
rte_flow_dev_dump(uint16_t port_id, struct rte_flow *flow,
FILE *file, struct rte_flow_error *error)
diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h
index 1b247a36c9..15ad58f699 100644
--- a/lib/ethdev/rte_flow.h
+++ b/lib/ethdev/rte_flow.h
@@ -4559,9 +4559,6 @@ enum rte_flow_conv_op {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Dump hardware internal representation information of
* rte flow to file.
*
@@ -4577,7 +4574,6 @@ enum rte_flow_conv_op {
* @return
* 0 on success, a negative value otherwise.
*/
-__rte_experimental
int
rte_flow_dev_dump(uint16_t port_id, struct rte_flow *flow,
FILE *file, struct rte_flow_error *error);
--
2.53.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 06/22] ethdev: promote FEC API to stable
2026-09-01 20:22 [PATCH 00/22] ethdev: convert experimental symbols etc Stephen Hemminger
` (4 preceding siblings ...)
2026-09-01 20:23 ` [PATCH 05/22] ethdev: promote read clock and flow dump " Stephen Hemminger
@ 2026-09-01 20:23 ` Stephen Hemminger
2026-09-01 20:23 ` [PATCH 07/22] ethdev: promote link speed helpers " Stephen Hemminger
` (15 subsequent siblings)
21 siblings, 0 replies; 24+ messages in thread
From: Stephen Hemminger @ 2026-09-01 20:23 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Thomas Monjalon, Andrew Rybchenko
The forward error correction API was added in v20.11 to query the
supported FEC modes of a port and to get and set the current mode.
The three functions have kept their prototypes since, and are
implemented by several PMDs.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
doc/guides/rel_notes/release_26_11.rst | 1 +
lib/ethdev/rte_ethdev.c | 6 +++---
lib/ethdev/rte_ethdev.h | 12 ------------
3 files changed, 4 insertions(+), 15 deletions(-)
diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst
index 57a47ec5f2..c4a9053b59 100644
--- a/doc/guides/rel_notes/release_26_11.rst
+++ b/doc/guides/rel_notes/release_26_11.rst
@@ -108,6 +108,7 @@ API Changes
``rte_eth_hairpin_get_peer_ports``
* clock: ``rte_eth_read_clock``
* flow dump: ``rte_flow_dev_dump``
+ * FEC: ``rte_eth_fec_get_capability``, ``rte_eth_fec_get`` and ``rte_eth_fec_set``
ABI Changes
diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index ce1779ba44..d814ee55f9 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -5288,7 +5288,7 @@ rte_eth_led_off(uint16_t port_id)
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_fec_get_capability, 20.11)
+RTE_EXPORT_SYMBOL(rte_eth_fec_get_capability)
int
rte_eth_fec_get_capability(uint16_t port_id,
struct rte_eth_fec_capa *speed_fec_capa,
@@ -5316,7 +5316,7 @@ rte_eth_fec_get_capability(uint16_t port_id,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_fec_get, 20.11)
+RTE_EXPORT_SYMBOL(rte_eth_fec_get)
int
rte_eth_fec_get(uint16_t port_id, uint32_t *fec_capa)
{
@@ -5342,7 +5342,7 @@ rte_eth_fec_get(uint16_t port_id, uint32_t *fec_capa)
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_fec_set, 20.11)
+RTE_EXPORT_SYMBOL(rte_eth_fec_set)
int
rte_eth_fec_set(uint16_t port_id, uint32_t fec_capa)
{
diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
index 7905e01658..41a744059c 100644
--- a/lib/ethdev/rte_ethdev.h
+++ b/lib/ethdev/rte_ethdev.h
@@ -4455,9 +4455,6 @@ int rte_eth_led_on(uint16_t port_id);
int rte_eth_led_off(uint16_t port_id);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
- *
* Get Forward Error Correction(FEC) capability.
*
* @param port_id
@@ -4482,15 +4479,11 @@ int rte_eth_led_off(uint16_t port_id);
* - (-ENODEV) if *port_id* invalid.
* - (-EINVAL) if *num* or *speed_fec_capa* invalid
*/
-__rte_experimental
int rte_eth_fec_get_capability(uint16_t port_id,
struct rte_eth_fec_capa *speed_fec_capa,
unsigned int num);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
- *
* Get current Forward Error Correction(FEC) mode.
* If link is down and AUTO is enabled, AUTO is returned, otherwise,
* configured FEC mode is returned.
@@ -4507,13 +4500,9 @@ int rte_eth_fec_get_capability(uint16_t port_id,
* - (-EIO) if device is removed.
* - (-ENODEV) if *port_id* invalid.
*/
-__rte_experimental
int rte_eth_fec_get(uint16_t port_id, uint32_t *fec_capa);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
- *
* Set Forward Error Correction(FEC) mode.
*
* @param port_id
@@ -4533,7 +4522,6 @@ int rte_eth_fec_get(uint16_t port_id, uint32_t *fec_capa);
* - (-EIO) if device is removed.
* - (-ENODEV) if *port_id* invalid.
*/
-__rte_experimental
int rte_eth_fec_set(uint16_t port_id, uint32_t fec_capa);
/**
--
2.53.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 07/22] ethdev: promote link speed helpers to stable
2026-09-01 20:22 [PATCH 00/22] ethdev: convert experimental symbols etc Stephen Hemminger
` (5 preceding siblings ...)
2026-09-01 20:23 ` [PATCH 06/22] ethdev: promote FEC API " Stephen Hemminger
@ 2026-09-01 20:23 ` Stephen Hemminger
2026-09-02 8:05 ` Bruce Richardson
2026-09-01 20:23 ` [PATCH 08/22] ethdev: promote flow tunnel offload API " Stephen Hemminger
` (14 subsequent siblings)
21 siblings, 1 reply; 24+ messages in thread
From: Stephen Hemminger @ 2026-09-01 20:23 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Thomas Monjalon, Andrew Rybchenko
rte_eth_link_speed_to_str() and rte_eth_link_to_str() were added in
v20.11 to give applications a common way to format link information
instead of open coding it. Both are unchanged since.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
doc/guides/rel_notes/release_26_11.rst | 1 +
lib/ethdev/rte_ethdev.c | 4 ++--
lib/ethdev/rte_ethdev.h | 8 --------
3 files changed, 3 insertions(+), 10 deletions(-)
diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst
index c4a9053b59..9b5e3cf902 100644
--- a/doc/guides/rel_notes/release_26_11.rst
+++ b/doc/guides/rel_notes/release_26_11.rst
@@ -109,6 +109,7 @@ API Changes
* clock: ``rte_eth_read_clock``
* flow dump: ``rte_flow_dev_dump``
* FEC: ``rte_eth_fec_get_capability``, ``rte_eth_fec_get`` and ``rte_eth_fec_set``
+ * link speed: ``rte_eth_link_speed_to_str`` and ``rte_eth_link_to_str``
ABI Changes
diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index d814ee55f9..6fda1468f9 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -3208,7 +3208,7 @@ rte_eth_link_get_nowait(uint16_t port_id, struct rte_eth_link *eth_link)
return 0;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_link_speed_to_str, 20.11)
+RTE_EXPORT_SYMBOL(rte_eth_link_speed_to_str)
const char *
rte_eth_link_speed_to_str(uint32_t link_speed)
{
@@ -3275,7 +3275,7 @@ rte_eth_link_speed_to_str(uint32_t link_speed)
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_link_to_str, 20.11)
+RTE_EXPORT_SYMBOL(rte_eth_link_to_str)
int
rte_eth_link_to_str(char *str, size_t len, const struct rte_eth_link *eth_link)
{
diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
index 41a744059c..2a694130ea 100644
--- a/lib/ethdev/rte_ethdev.h
+++ b/lib/ethdev/rte_ethdev.h
@@ -3110,9 +3110,6 @@ int rte_eth_link_get_nowait(uint16_t port_id, struct rte_eth_link *link)
__rte_warn_unused_result;
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* The function converts a link_speed to a string. It handles all special
* values like unknown or none speed.
*
@@ -3122,7 +3119,6 @@ int rte_eth_link_get_nowait(uint16_t port_id, struct rte_eth_link *link)
* Link speed in textual format. It's pointer to immutable memory.
* No free is required.
*/
-__rte_experimental
const char *rte_eth_link_speed_to_str(uint32_t link_speed);
/**
@@ -3140,9 +3136,6 @@ __rte_experimental
const char *rte_eth_link_connector_to_str(enum rte_eth_link_connector link_connector);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* The function converts a rte_eth_link struct representing a link status to
* a string.
*
@@ -3157,7 +3150,6 @@ const char *rte_eth_link_connector_to_str(enum rte_eth_link_connector link_conne
* @return
* Number of bytes written to str array or -EINVAL if bad parameter.
*/
-__rte_experimental
int rte_eth_link_to_str(char *str, size_t len,
const struct rte_eth_link *eth_link);
--
2.53.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 08/22] ethdev: promote flow tunnel offload API to stable
2026-09-01 20:22 [PATCH 00/22] ethdev: convert experimental symbols etc Stephen Hemminger
` (6 preceding siblings ...)
2026-09-01 20:23 ` [PATCH 07/22] ethdev: promote link speed helpers " Stephen Hemminger
@ 2026-09-01 20:23 ` Stephen Hemminger
2026-09-01 20:23 ` [PATCH 09/22] ethdev: promote aged flow query " Stephen Hemminger
` (13 subsequent siblings)
21 siblings, 0 replies; 24+ messages in thread
From: Stephen Hemminger @ 2026-09-01 20:23 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Ori Kam, Thomas Monjalon, Andrew Rybchenko
The tunnel offload model was added in v20.11 to let PMDs split
tunnel handling between the match and the decap stages and to let
applications recover the missed packet state.
The only change since was in v23.06, when flow restore was made
discoverable through an mbuf dynamic flag; the function prototypes
were not touched. The API is implemented by several PMDs
(mlx5, sfc, bnxt, cnxk, nfp), so promote it as one unit.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
doc/guides/rel_notes/release_26_11.rst | 4 ++++
lib/ethdev/rte_flow.c | 10 +++++-----
lib/ethdev/rte_flow.h | 5 -----
3 files changed, 9 insertions(+), 10 deletions(-)
diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst
index 9b5e3cf902..fe76ffa7ad 100644
--- a/doc/guides/rel_notes/release_26_11.rst
+++ b/doc/guides/rel_notes/release_26_11.rst
@@ -110,6 +110,10 @@ API Changes
* flow dump: ``rte_flow_dev_dump``
* FEC: ``rte_eth_fec_get_capability``, ``rte_eth_fec_get`` and ``rte_eth_fec_set``
* link speed: ``rte_eth_link_speed_to_str`` and ``rte_eth_link_to_str``
+ * flow tunnel: ``rte_flow_tunnel_decap_set``, ``rte_flow_tunnel_match``,
+ ``rte_flow_tunnel_item_release``,
+ ``rte_flow_tunnel_action_decap_release`` and
+ ``rte_flow_get_restore_info``
ABI Changes
diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c
index 827305385f..6223096278 100644
--- a/lib/ethdev/rte_flow.c
+++ b/lib/ethdev/rte_flow.c
@@ -1424,7 +1424,7 @@ rte_flow_action_handle_query(uint16_t port_id,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_tunnel_decap_set, 20.11)
+RTE_EXPORT_SYMBOL(rte_flow_tunnel_decap_set)
int
rte_flow_tunnel_decap_set(uint16_t port_id,
struct rte_flow_tunnel *tunnel,
@@ -1454,7 +1454,7 @@ rte_flow_tunnel_decap_set(uint16_t port_id,
NULL, rte_strerror(ENOTSUP));
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_tunnel_match, 20.11)
+RTE_EXPORT_SYMBOL(rte_flow_tunnel_match)
int
rte_flow_tunnel_match(uint16_t port_id,
struct rte_flow_tunnel *tunnel,
@@ -1484,7 +1484,7 @@ rte_flow_tunnel_match(uint16_t port_id,
NULL, rte_strerror(ENOTSUP));
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_get_restore_info, 20.11)
+RTE_EXPORT_SYMBOL(rte_flow_get_restore_info)
int
rte_flow_get_restore_info(uint16_t port_id,
struct rte_mbuf *m,
@@ -1540,7 +1540,7 @@ rte_flow_restore_info_dynflag_register(void)
return 0;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_tunnel_action_decap_release, 20.11)
+RTE_EXPORT_SYMBOL(rte_flow_tunnel_action_decap_release)
int
rte_flow_tunnel_action_decap_release(uint16_t port_id,
struct rte_flow_action *actions,
@@ -1570,7 +1570,7 @@ rte_flow_tunnel_action_decap_release(uint16_t port_id,
NULL, rte_strerror(ENOTSUP));
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_tunnel_item_release, 20.11)
+RTE_EXPORT_SYMBOL(rte_flow_tunnel_item_release)
int
rte_flow_tunnel_item_release(uint16_t port_id,
struct rte_flow_item *items,
diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h
index 15ad58f699..2fe9d6ca12 100644
--- a/lib/ethdev/rte_flow.h
+++ b/lib/ethdev/rte_flow.h
@@ -5270,7 +5270,6 @@ struct rte_flow_restore_info {
* @return
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
-__rte_experimental
int
rte_flow_tunnel_decap_set(uint16_t port_id,
struct rte_flow_tunnel *tunnel,
@@ -5301,7 +5300,6 @@ rte_flow_tunnel_decap_set(uint16_t port_id,
* @return
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
-__rte_experimental
int
rte_flow_tunnel_match(uint16_t port_id,
struct rte_flow_tunnel *tunnel,
@@ -5345,7 +5343,6 @@ rte_flow_restore_info_dynflag(void);
* @return
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
-__rte_experimental
int
rte_flow_get_restore_info(uint16_t port_id,
struct rte_mbuf *m,
@@ -5368,7 +5365,6 @@ rte_flow_get_restore_info(uint16_t port_id,
* @return
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
-__rte_experimental
int
rte_flow_tunnel_action_decap_release(uint16_t port_id,
struct rte_flow_action *actions,
@@ -5391,7 +5387,6 @@ rte_flow_tunnel_action_decap_release(uint16_t port_id,
* @return
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
-__rte_experimental
int
rte_flow_tunnel_item_release(uint16_t port_id,
struct rte_flow_item *items,
--
2.53.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 09/22] ethdev: promote aged flow query to stable
2026-09-01 20:22 [PATCH 00/22] ethdev: convert experimental symbols etc Stephen Hemminger
` (7 preceding siblings ...)
2026-09-01 20:23 ` [PATCH 08/22] ethdev: promote flow tunnel offload API " Stephen Hemminger
@ 2026-09-01 20:23 ` Stephen Hemminger
2026-09-01 20:23 ` [PATCH 10/22] ethdev: promote indirect action API " Stephen Hemminger
` (12 subsequent siblings)
21 siblings, 0 replies; 24+ messages in thread
From: Stephen Hemminger @ 2026-09-01 20:23 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Ori Kam, Thomas Monjalon, Andrew Rybchenko
rte_flow_get_aged_flows() was added in v20.05 to retrieve the flows
that hit their age action timeout, and rte_flow_get_q_aged_flows()
in v22.11 for the same purpose on a template table queue.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
doc/guides/rel_notes/release_26_11.rst | 1 +
lib/ethdev/rte_flow.c | 4 ++--
lib/ethdev/rte_flow.h | 5 -----
3 files changed, 3 insertions(+), 7 deletions(-)
diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst
index fe76ffa7ad..6956417ad9 100644
--- a/doc/guides/rel_notes/release_26_11.rst
+++ b/doc/guides/rel_notes/release_26_11.rst
@@ -114,6 +114,7 @@ API Changes
``rte_flow_tunnel_item_release``,
``rte_flow_tunnel_action_decap_release`` and
``rte_flow_get_restore_info``
+ * flow age: ``rte_flow_get_aged_flows`` and ``rte_flow_get_q_aged_flows``
ABI Changes
diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c
index 6223096278..e90f93ebcd 100644
--- a/lib/ethdev/rte_flow.c
+++ b/lib/ethdev/rte_flow.c
@@ -1268,7 +1268,7 @@ rte_flow_dev_dump(uint16_t port_id, struct rte_flow *flow,
NULL, rte_strerror(ENOSYS));
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_get_aged_flows, 20.05)
+RTE_EXPORT_SYMBOL(rte_flow_get_aged_flows)
int
rte_flow_get_aged_flows(uint16_t port_id, void **contexts,
uint32_t nb_contexts, struct rte_flow_error *error)
@@ -1294,7 +1294,7 @@ rte_flow_get_aged_flows(uint16_t port_id, void **contexts,
NULL, rte_strerror(ENOTSUP));
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_get_q_aged_flows, 22.11)
+RTE_EXPORT_SYMBOL(rte_flow_get_q_aged_flows)
int
rte_flow_get_q_aged_flows(uint16_t port_id, uint32_t queue_id, void **contexts,
uint32_t nb_contexts, struct rte_flow_error *error)
diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h
index 2fe9d6ca12..c8194199d6 100644
--- a/lib/ethdev/rte_flow.h
+++ b/lib/ethdev/rte_flow.h
@@ -4980,15 +4980,11 @@ rte_flow_conv(enum rte_flow_conv_op op,
* @see rte_flow_action_age
* @see RTE_ETH_EVENT_FLOW_AGED
*/
-__rte_experimental
int
rte_flow_get_aged_flows(uint16_t port_id, void **contexts,
uint32_t nb_contexts, struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Get aged-out flows of a given port on the given flow queue.
*
* If application configure port attribute with RTE_FLOW_PORT_FLAG_STRICT_QUEUE,
@@ -5024,7 +5020,6 @@ rte_flow_get_aged_flows(uint16_t port_id, void **contexts,
* @see RTE_ETH_EVENT_FLOW_AGED
* @see rte_flow_port_flag
*/
-__rte_experimental
int
rte_flow_get_q_aged_flows(uint16_t port_id, uint32_t queue_id, void **contexts,
uint32_t nb_contexts, struct rte_flow_error *error);
--
2.53.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 10/22] ethdev: promote indirect action API to stable
2026-09-01 20:22 [PATCH 00/22] ethdev: convert experimental symbols etc Stephen Hemminger
` (8 preceding siblings ...)
2026-09-01 20:23 ` [PATCH 09/22] ethdev: promote aged flow query " Stephen Hemminger
@ 2026-09-01 20:23 ` Stephen Hemminger
2026-09-01 20:23 ` [PATCH 11/22] ethdev: promote asynchronous flow " Stephen Hemminger
` (11 subsequent siblings)
21 siblings, 0 replies; 24+ messages in thread
From: Stephen Hemminger @ 2026-09-01 20:23 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Ori Kam, Thomas Monjalon, Andrew Rybchenko
Indirect (shared) flow actions were introduced in v21.05 and have
been extended twice since, without any change to the original
prototypes:
21.05 rte_flow_action_handle_create, _destroy, _update, _query
23.03 rte_flow_action_handle_query_update
23.07 rte_flow_action_list_handle_create, _destroy,
_query_update
The synchronous side of the interface is promoted here; the
matching rte_flow_async_action_handle_* calls belong to the async
flow API and are promoted with it.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
doc/guides/rel_notes/release_26_11.rst | 1 +
lib/ethdev/rte_flow.c | 16 ++++++------
lib/ethdev/rte_flow.h | 35 --------------------------
3 files changed, 9 insertions(+), 43 deletions(-)
diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst
index 6956417ad9..bc33582126 100644
--- a/doc/guides/rel_notes/release_26_11.rst
+++ b/doc/guides/rel_notes/release_26_11.rst
@@ -115,6 +115,7 @@ API Changes
``rte_flow_tunnel_action_decap_release`` and
``rte_flow_get_restore_info``
* flow age: ``rte_flow_get_aged_flows`` and ``rte_flow_get_q_aged_flows``
+ * flow action: ``rte_flow_action_handle_*`` and ``rte_flow_action_list_handle_*``
ABI Changes
diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c
index e90f93ebcd..aa6f198b65 100644
--- a/lib/ethdev/rte_flow.c
+++ b/lib/ethdev/rte_flow.c
@@ -1322,7 +1322,7 @@ rte_flow_get_q_aged_flows(uint16_t port_id, uint32_t queue_id, void **contexts,
NULL, rte_strerror(ENOTSUP));
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_action_handle_create, 21.05)
+RTE_EXPORT_SYMBOL(rte_flow_action_handle_create)
struct rte_flow_action_handle *
rte_flow_action_handle_create(uint16_t port_id,
const struct rte_flow_indir_action_conf *conf,
@@ -1350,7 +1350,7 @@ rte_flow_action_handle_create(uint16_t port_id,
return handle;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_action_handle_destroy, 21.05)
+RTE_EXPORT_SYMBOL(rte_flow_action_handle_destroy)
int
rte_flow_action_handle_destroy(uint16_t port_id,
struct rte_flow_action_handle *handle,
@@ -1374,7 +1374,7 @@ rte_flow_action_handle_destroy(uint16_t port_id,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_action_handle_update, 21.05)
+RTE_EXPORT_SYMBOL(rte_flow_action_handle_update)
int
rte_flow_action_handle_update(uint16_t port_id,
struct rte_flow_action_handle *handle,
@@ -1399,7 +1399,7 @@ rte_flow_action_handle_update(uint16_t port_id,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_action_handle_query, 21.05)
+RTE_EXPORT_SYMBOL(rte_flow_action_handle_query)
int
rte_flow_action_handle_query(uint16_t port_id,
const struct rte_flow_action_handle *handle,
@@ -2460,7 +2460,7 @@ rte_flow_async_action_handle_query(uint16_t port_id,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_action_handle_query_update, 23.03)
+RTE_EXPORT_SYMBOL(rte_flow_action_handle_query_update)
int
rte_flow_action_handle_query_update(uint16_t port_id,
struct rte_flow_action_handle *handle,
@@ -2513,7 +2513,7 @@ rte_flow_async_action_handle_query_update(uint16_t port_id, uint32_t queue_id,
user_data, error);
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_action_list_handle_create, 23.07)
+RTE_EXPORT_SYMBOL(rte_flow_action_list_handle_create)
struct rte_flow_action_list_handle *
rte_flow_action_list_handle_create(uint16_t port_id,
const
@@ -2541,7 +2541,7 @@ rte_flow_action_list_handle_create(uint16_t port_id,
return handle;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_action_list_handle_destroy, 23.07)
+RTE_EXPORT_SYMBOL(rte_flow_action_list_handle_destroy)
int
rte_flow_action_list_handle_destroy(uint16_t port_id,
struct rte_flow_action_list_handle *handle,
@@ -2629,7 +2629,7 @@ rte_flow_async_action_list_handle_destroy(uint16_t port_id, uint32_t queue_id,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_action_list_handle_query_update, 23.07)
+RTE_EXPORT_SYMBOL(rte_flow_action_list_handle_query_update)
int
rte_flow_action_list_handle_query_update(uint16_t port_id,
const struct rte_flow_action_list_handle *handle,
diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h
index c8194199d6..924005ad4b 100644
--- a/lib/ethdev/rte_flow.h
+++ b/lib/ethdev/rte_flow.h
@@ -5046,9 +5046,6 @@ struct rte_flow_indir_action_conf {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Create an indirect action object that can be used in flow rules
* via its handle.
* The created object handle has single state and configuration
@@ -5072,7 +5069,6 @@ struct rte_flow_indir_action_conf {
* - (EINVAL) if *action* invalid.
* - (ENOTSUP) if *action* valid but unsupported.
*/
-__rte_experimental
struct rte_flow_action_handle *
rte_flow_action_handle_create(uint16_t port_id,
const struct rte_flow_indir_action_conf *conf,
@@ -5080,9 +5076,6 @@ rte_flow_action_handle_create(uint16_t port_id,
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Destroy indirect action by handle.
*
* @param[in] port_id
@@ -5101,16 +5094,12 @@ rte_flow_action_handle_create(uint16_t port_id,
* - (-EBUSY) if action pointed by *action* handle still used by some rules
* rte_errno is also set.
*/
-__rte_experimental
int
rte_flow_action_handle_destroy(uint16_t port_id,
struct rte_flow_action_handle *handle,
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Update in-place the action configuration and / or state pointed
* by action *handle* with the configuration provided as *update* argument.
* The update of the action configuration effects all flow rules reusing
@@ -5140,7 +5129,6 @@ rte_flow_action_handle_destroy(uint16_t port_id,
* - (-ENOENT) if indirect action object pointed by *handle* was not found.
* rte_errno is also set.
*/
-__rte_experimental
int
rte_flow_action_handle_update(uint16_t port_id,
struct rte_flow_action_handle *handle,
@@ -5148,9 +5136,6 @@ rte_flow_action_handle_update(uint16_t port_id,
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Query the direct action by corresponding indirect action object handle.
*
* Retrieve action-specific data such as counters.
@@ -5172,7 +5157,6 @@ rte_flow_action_handle_update(uint16_t port_id,
* @return
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
-__rte_experimental
int
rte_flow_action_handle_query(uint16_t port_id,
const struct rte_flow_action_handle *handle,
@@ -6562,9 +6546,6 @@ rte_flow_async_action_handle_query(uint16_t port_id,
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Query and update operational mode.
*
* @see rte_flow_action_handle_query_update()
@@ -6576,9 +6557,6 @@ enum rte_flow_query_update_mode {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Query and/or update indirect flow action.
* If both query and update not NULL, the function atomically
* queries and updates indirect action. Query and update are carried in order
@@ -6608,7 +6586,6 @@ enum rte_flow_query_update_mode {
* - (-EINVAL) if *handle* or *mode* invalid or
* both *query* and *update* are NULL.
*/
-__rte_experimental
int
rte_flow_action_handle_query_update(uint16_t port_id,
struct rte_flow_action_handle *handle,
@@ -6686,9 +6663,6 @@ struct rte_flow_action_indirect_list {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Create an indirect flow action object from flow actions list.
* The object is identified by a unique handle.
* The handle has single state and configuration
@@ -6712,7 +6686,6 @@ struct rte_flow_action_indirect_list {
* - (-EINVAL) if *actions* list invalid.
* - (-ENOTSUP) if *action* list element valid but unsupported.
*/
-__rte_experimental
struct rte_flow_action_list_handle *
rte_flow_action_list_handle_create(uint16_t port_id,
const
@@ -6764,9 +6737,6 @@ rte_flow_async_action_list_handle_create(uint16_t port_id, uint32_t queue_id,
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Destroy indirect actions list by handle.
*
* @param[in] port_id
@@ -6784,7 +6754,6 @@ rte_flow_async_action_list_handle_create(uint16_t port_id, uint32_t queue_id,
* - (-ENOENT) if actions list pointed by *action* handle was not found.
* - (-EBUSY) if actions list pointed by *action* handle still used
*/
-__rte_experimental
int
rte_flow_action_list_handle_destroy(uint16_t port_id,
struct rte_flow_action_list_handle *handle,
@@ -6829,9 +6798,6 @@ rte_flow_async_action_list_handle_destroy
void *user_data, struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Query and/or update indirect flow actions list.
* If both query and update not NULL, the function atomically
* queries and updates indirect action. Query and update are carried in order
@@ -6864,7 +6830,6 @@ rte_flow_async_action_list_handle_destroy
* - (-EINVAL) if *handle* or *mode* invalid or
* both *query* and *update* are NULL.
*/
-__rte_experimental
int
rte_flow_action_list_handle_query_update(uint16_t port_id,
const struct rte_flow_action_list_handle *handle,
--
2.53.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 11/22] ethdev: promote asynchronous flow API to stable
2026-09-01 20:22 [PATCH 00/22] ethdev: convert experimental symbols etc Stephen Hemminger
` (9 preceding siblings ...)
2026-09-01 20:23 ` [PATCH 10/22] ethdev: promote indirect action API " Stephen Hemminger
@ 2026-09-01 20:23 ` Stephen Hemminger
2026-09-01 20:23 ` [PATCH 12/22] ethdev: promote flex item " Stephen Hemminger
` (10 subsequent siblings)
21 siblings, 0 replies; 24+ messages in thread
From: Stephen Hemminger @ 2026-09-01 20:23 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Ori Kam, Thomas Monjalon, Andrew Rybchenko
The template based, queue oriented flow API was introduced in v22.03
and completed over the following releases:
22.03 rte_flow_configure, rte_flow_info_get,
rte_flow_pattern_template_create/destroy,
rte_flow_actions_template_create/destroy,
rte_flow_template_table_create/destroy,
rte_flow_async_create, rte_flow_async_destroy,
rte_flow_push, rte_flow_pull,
rte_flow_async_action_handle_create/destroy/update
22.11 rte_flow_async_action_handle_query
23.03 rte_flow_async_action_handle_query_update,
rte_flow_async_create_by_index
23.07 rte_flow_async_actions_update,
rte_flow_async_action_list_handle_create/destroy/
query_update
24.03 rte_flow_template_table_resizable/resize/resize_complete,
rte_flow_async_update_resized
24.11 rte_flow_async_create_by_index_with_pattern
No new symbol has been added to this API since 24.11 and no
prototype has changed, so the interface has settled. It is
implemented by mlx5 and several other PMDs and is the recommended
flow offload path, so promote it as one unit.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
doc/guides/rel_notes/release_26_11.rst | 7 ++
lib/ethdev/rte_flow.c | 54 +++++------
lib/ethdev/rte_flow.h | 129 -------------------------
3 files changed, 34 insertions(+), 156 deletions(-)
diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst
index bc33582126..0f819b7013 100644
--- a/doc/guides/rel_notes/release_26_11.rst
+++ b/doc/guides/rel_notes/release_26_11.rst
@@ -116,6 +116,13 @@ API Changes
``rte_flow_get_restore_info``
* flow age: ``rte_flow_get_aged_flows`` and ``rte_flow_get_q_aged_flows``
* flow action: ``rte_flow_action_handle_*`` and ``rte_flow_action_list_handle_*``
+ * flow template:
+ ``rte_flow_configure``, ``rte_flow_info_get``,
+ ``rte_flow_pattern_*``,
+ ``rte_flow_actions_*``,
+ ``rte_flow_template_*``,
+ ``rte_flow_async_*``,
+ ``rte_flow_push``, ``rte_flow_pull``
ABI Changes
diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c
index aa6f198b65..edbf8a8bce 100644
--- a/lib/ethdev/rte_flow.c
+++ b/lib/ethdev/rte_flow.c
@@ -1675,7 +1675,7 @@ rte_flow_flex_item_release(uint16_t port_id,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_info_get, 22.03)
+RTE_EXPORT_SYMBOL(rte_flow_info_get)
int
rte_flow_info_get(uint16_t port_id,
struct rte_flow_port_info *port_info,
@@ -1712,7 +1712,7 @@ rte_flow_info_get(uint16_t port_id,
NULL, rte_strerror(ENOTSUP));
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_configure, 22.03)
+RTE_EXPORT_SYMBOL(rte_flow_configure)
int
rte_flow_configure(uint16_t port_id,
const struct rte_flow_port_attr *port_attr,
@@ -1771,7 +1771,7 @@ rte_flow_configure(uint16_t port_id,
NULL, rte_strerror(EINVAL));
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_pattern_template_create, 22.03)
+RTE_EXPORT_SYMBOL(rte_flow_pattern_template_create)
struct rte_flow_pattern_template *
rte_flow_pattern_template_create(uint16_t port_id,
const struct rte_flow_pattern_template_attr *template_attr,
@@ -1828,7 +1828,7 @@ rte_flow_pattern_template_create(uint16_t port_id,
return NULL;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_pattern_template_destroy, 22.03)
+RTE_EXPORT_SYMBOL(rte_flow_pattern_template_destroy)
int
rte_flow_pattern_template_destroy(uint16_t port_id,
struct rte_flow_pattern_template *pattern_template,
@@ -1859,7 +1859,7 @@ rte_flow_pattern_template_destroy(uint16_t port_id,
NULL, rte_strerror(ENOTSUP));
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_actions_template_create, 22.03)
+RTE_EXPORT_SYMBOL(rte_flow_actions_template_create)
struct rte_flow_actions_template *
rte_flow_actions_template_create(uint16_t port_id,
const struct rte_flow_actions_template_attr *template_attr,
@@ -1926,7 +1926,7 @@ rte_flow_actions_template_create(uint16_t port_id,
return NULL;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_actions_template_destroy, 22.03)
+RTE_EXPORT_SYMBOL(rte_flow_actions_template_destroy)
int
rte_flow_actions_template_destroy(uint16_t port_id,
struct rte_flow_actions_template *actions_template,
@@ -1957,7 +1957,7 @@ rte_flow_actions_template_destroy(uint16_t port_id,
NULL, rte_strerror(ENOTSUP));
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_template_table_create, 22.03)
+RTE_EXPORT_SYMBOL(rte_flow_template_table_create)
struct rte_flow_template_table *
rte_flow_template_table_create(uint16_t port_id,
const struct rte_flow_template_table_attr *table_attr,
@@ -2031,7 +2031,7 @@ rte_flow_template_table_create(uint16_t port_id,
return NULL;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_template_table_destroy, 22.03)
+RTE_EXPORT_SYMBOL(rte_flow_template_table_destroy)
int
rte_flow_template_table_destroy(uint16_t port_id,
struct rte_flow_template_table *template_table,
@@ -2085,7 +2085,7 @@ rte_flow_group_set_miss_actions(uint16_t port_id,
NULL, rte_strerror(ENOTSUP));
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_async_create, 22.03)
+RTE_EXPORT_SYMBOL(rte_flow_async_create)
struct rte_flow *
rte_flow_async_create(uint16_t port_id,
uint32_t queue_id,
@@ -2127,7 +2127,7 @@ rte_flow_async_create(uint16_t port_id,
return flow;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_async_create_by_index, 23.03)
+RTE_EXPORT_SYMBOL(rte_flow_async_create_by_index)
struct rte_flow *
rte_flow_async_create_by_index(uint16_t port_id,
uint32_t queue_id,
@@ -2166,7 +2166,7 @@ rte_flow_async_create_by_index(uint16_t port_id,
return flow;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_async_create_by_index_with_pattern, 24.11)
+RTE_EXPORT_SYMBOL(rte_flow_async_create_by_index_with_pattern)
struct rte_flow *
rte_flow_async_create_by_index_with_pattern(uint16_t port_id,
uint32_t queue_id,
@@ -2211,7 +2211,7 @@ rte_flow_async_create_by_index_with_pattern(uint16_t port_id,
return flow;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_async_destroy, 22.03)
+RTE_EXPORT_SYMBOL(rte_flow_async_destroy)
int
rte_flow_async_destroy(uint16_t port_id,
uint32_t queue_id,
@@ -2242,7 +2242,7 @@ rte_flow_async_destroy(uint16_t port_id,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_async_actions_update, 23.07)
+RTE_EXPORT_SYMBOL(rte_flow_async_actions_update)
int
rte_flow_async_actions_update(uint16_t port_id,
uint32_t queue_id,
@@ -2277,7 +2277,7 @@ rte_flow_async_actions_update(uint16_t port_id,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_push, 22.03)
+RTE_EXPORT_SYMBOL(rte_flow_push)
int
rte_flow_push(uint16_t port_id,
uint32_t queue_id,
@@ -2302,7 +2302,7 @@ rte_flow_push(uint16_t port_id,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_pull, 22.03)
+RTE_EXPORT_SYMBOL(rte_flow_pull)
int
rte_flow_pull(uint16_t port_id,
uint32_t queue_id,
@@ -2329,7 +2329,7 @@ rte_flow_pull(uint16_t port_id,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_async_action_handle_create, 22.03)
+RTE_EXPORT_SYMBOL(rte_flow_async_action_handle_create)
struct rte_flow_action_handle *
rte_flow_async_action_handle_create(uint16_t port_id,
uint32_t queue_id,
@@ -2366,7 +2366,7 @@ rte_flow_async_action_handle_create(uint16_t port_id,
return handle;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_async_action_handle_destroy, 22.03)
+RTE_EXPORT_SYMBOL(rte_flow_async_action_handle_destroy)
int
rte_flow_async_action_handle_destroy(uint16_t port_id,
uint32_t queue_id,
@@ -2396,7 +2396,7 @@ rte_flow_async_action_handle_destroy(uint16_t port_id,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_async_action_handle_update, 22.03)
+RTE_EXPORT_SYMBOL(rte_flow_async_action_handle_update)
int
rte_flow_async_action_handle_update(uint16_t port_id,
uint32_t queue_id,
@@ -2428,7 +2428,7 @@ rte_flow_async_action_handle_update(uint16_t port_id,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_async_action_handle_query, 22.11)
+RTE_EXPORT_SYMBOL(rte_flow_async_action_handle_query)
int
rte_flow_async_action_handle_query(uint16_t port_id,
uint32_t queue_id,
@@ -2486,7 +2486,7 @@ rte_flow_action_handle_query_update(uint16_t port_id,
return flow_err(port_id, ret, error);
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_async_action_handle_query_update, 23.03)
+RTE_EXPORT_SYMBOL(rte_flow_async_action_handle_query_update)
int
rte_flow_async_action_handle_query_update(uint16_t port_id, uint32_t queue_id,
const struct rte_flow_op_attr *attr,
@@ -2564,7 +2564,7 @@ rte_flow_action_list_handle_destroy(uint16_t port_id,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_async_action_list_handle_create, 23.07)
+RTE_EXPORT_SYMBOL(rte_flow_async_action_list_handle_create)
struct rte_flow_action_list_handle *
rte_flow_async_action_list_handle_create(uint16_t port_id, uint32_t queue_id,
const struct rte_flow_op_attr *attr,
@@ -2601,7 +2601,7 @@ rte_flow_async_action_list_handle_create(uint16_t port_id, uint32_t queue_id,
return handle;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_async_action_list_handle_destroy, 23.07)
+RTE_EXPORT_SYMBOL(rte_flow_async_action_list_handle_destroy)
int
rte_flow_async_action_list_handle_destroy(uint16_t port_id, uint32_t queue_id,
const struct rte_flow_op_attr *op_attr,
@@ -2656,7 +2656,7 @@ rte_flow_action_list_handle_query_update(uint16_t port_id,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_async_action_list_handle_query_update, 23.07)
+RTE_EXPORT_SYMBOL(rte_flow_async_action_list_handle_query_update)
int
rte_flow_async_action_list_handle_query_update(uint16_t port_id, uint32_t queue_id,
const struct rte_flow_op_attr *attr,
@@ -2743,7 +2743,7 @@ rte_flow_calc_encap_hash(uint16_t port_id, const struct rte_flow_item pattern[],
return flow_err(port_id, ret, error);
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_template_table_resizable, 24.03)
+RTE_EXPORT_SYMBOL(rte_flow_template_table_resizable)
bool
rte_flow_template_table_resizable(__rte_unused uint16_t port_id,
const struct rte_flow_template_table_attr *tbl_attr)
@@ -2752,7 +2752,7 @@ rte_flow_template_table_resizable(__rte_unused uint16_t port_id,
RTE_FLOW_TABLE_SPECIALIZE_RESIZABLE) != 0;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_template_table_resize, 24.03)
+RTE_EXPORT_SYMBOL(rte_flow_template_table_resize)
int
rte_flow_template_table_resize(uint16_t port_id,
struct rte_flow_template_table *table,
@@ -2776,7 +2776,7 @@ rte_flow_template_table_resize(uint16_t port_id,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_async_update_resized, 24.03)
+RTE_EXPORT_SYMBOL(rte_flow_async_update_resized)
int
rte_flow_async_update_resized(uint16_t port_id, uint32_t queue,
const struct rte_flow_op_attr *attr,
@@ -2801,7 +2801,7 @@ rte_flow_async_update_resized(uint16_t port_id, uint32_t queue,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_template_table_resize_complete, 24.03)
+RTE_EXPORT_SYMBOL(rte_flow_template_table_resize_complete)
int
rte_flow_template_table_resize_complete(uint16_t port_id,
struct rte_flow_template_table *table,
diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h
index 924005ad4b..16645207c3 100644
--- a/lib/ethdev/rte_flow.h
+++ b/lib/ethdev/rte_flow.h
@@ -5459,9 +5459,6 @@ rte_flow_flex_item_release(uint16_t port_id,
#define RTE_FLOW_PORT_FLAG_SHARE_INDIRECT RTE_BIT32(1)
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Information about flow engine resources.
* The zero value means a resource is not supported.
*/
@@ -5502,9 +5499,6 @@ struct rte_flow_port_info {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Information about flow engine asynchronous queues.
* The value only valid if @p port_attr.max_nb_queues is not zero.
*/
@@ -5516,9 +5510,6 @@ struct rte_flow_queue_info {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Get information about flow engine resources.
*
* @param port_id
@@ -5536,7 +5527,6 @@ struct rte_flow_queue_info {
* @return
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
-__rte_experimental
int
rte_flow_info_get(uint16_t port_id,
struct rte_flow_port_info *port_info,
@@ -5544,9 +5534,6 @@ rte_flow_info_get(uint16_t port_id,
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Flow engine resources settings.
* The zero value means on demand resource allocations only.
*/
@@ -5587,9 +5574,6 @@ struct rte_flow_port_attr {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Flow engine asynchronous queues settings.
* The value means default value picked by PMD.
*/
@@ -5601,9 +5585,6 @@ struct rte_flow_queue_attr {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Configure the port's flow API engine.
*
* This API can only be invoked before the application
@@ -5631,7 +5612,6 @@ struct rte_flow_queue_attr {
* @return
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
-__rte_experimental
int
rte_flow_configure(uint16_t port_id,
const struct rte_flow_port_attr *port_attr,
@@ -5674,9 +5654,6 @@ struct rte_flow_pattern_template_attr {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Create flow pattern template.
*
* The pattern template defines common matching fields without values.
@@ -5700,7 +5677,6 @@ struct rte_flow_pattern_template_attr {
* @return
* Handle on success, NULL otherwise and rte_errno is set.
*/
-__rte_experimental
struct rte_flow_pattern_template *
rte_flow_pattern_template_create(uint16_t port_id,
const struct rte_flow_pattern_template_attr *template_attr,
@@ -5708,9 +5684,6 @@ rte_flow_pattern_template_create(uint16_t port_id,
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Destroy flow pattern template.
*
* This function may be called only when
@@ -5727,7 +5700,6 @@ rte_flow_pattern_template_create(uint16_t port_id,
* @return
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
-__rte_experimental
int
rte_flow_pattern_template_destroy(uint16_t port_id,
struct rte_flow_pattern_template *pattern_template,
@@ -5760,9 +5732,6 @@ struct rte_flow_actions_template_attr {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Create flow actions template.
*
* The actions template holds a list of action types without values.
@@ -5794,7 +5763,6 @@ struct rte_flow_actions_template_attr {
* @return
* Handle on success, NULL otherwise and rte_errno is set.
*/
-__rte_experimental
struct rte_flow_actions_template *
rte_flow_actions_template_create(uint16_t port_id,
const struct rte_flow_actions_template_attr *template_attr,
@@ -5803,9 +5771,6 @@ rte_flow_actions_template_create(uint16_t port_id,
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Destroy flow actions template.
*
* This function may be called only when
@@ -5822,7 +5787,6 @@ rte_flow_actions_template_create(uint16_t port_id,
* @return
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
-__rte_experimental
int
rte_flow_actions_template_destroy(uint16_t port_id,
struct rte_flow_actions_template *actions_template,
@@ -5863,9 +5827,6 @@ struct rte_flow_template_table;
/**@}*/
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Template table flow rules insertion type.
*/
enum rte_flow_table_insertion_type {
@@ -5884,9 +5845,6 @@ enum rte_flow_table_insertion_type {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Template table hash index calculation function.
*/
enum rte_flow_table_hash_func {
@@ -5909,9 +5867,6 @@ enum rte_flow_table_hash_func {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Table attributes.
*/
struct rte_flow_template_table_attr {
@@ -5943,9 +5898,6 @@ struct rte_flow_template_table_attr {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Query whether a table can be resized.
*
* @param port_id
@@ -5956,15 +5908,11 @@ struct rte_flow_template_table_attr {
* @return
* True if the table can be resized.
*/
-__rte_experimental
bool
rte_flow_template_table_resizable(__rte_unused uint16_t port_id,
const struct rte_flow_template_table_attr *tbl_attr);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Create flow template table.
*
* A template table consists of multiple pattern templates and actions
@@ -5993,7 +5941,6 @@ rte_flow_template_table_resizable(__rte_unused uint16_t port_id,
* @return
* Handle on success, NULL otherwise and rte_errno is set.
*/
-__rte_experimental
struct rte_flow_template_table *
rte_flow_template_table_create(uint16_t port_id,
const struct rte_flow_template_table_attr *table_attr,
@@ -6004,9 +5951,6 @@ rte_flow_template_table_create(uint16_t port_id,
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Destroy flow template table.
*
* This function may be called only when
@@ -6023,7 +5967,6 @@ rte_flow_template_table_create(uint16_t port_id,
* @return
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
-__rte_experimental
int
rte_flow_template_table_destroy(uint16_t port_id,
struct rte_flow_template_table *template_table,
@@ -6074,9 +6017,6 @@ struct rte_flow_op_attr {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Enqueue rule creation operation.
*
* @param port_id
@@ -6109,7 +6049,6 @@ struct rte_flow_op_attr {
* The rule handle doesn't mean that the rule has been populated.
* Only completion result indicates that if there was success or failure.
*/
-__rte_experimental
struct rte_flow *
rte_flow_async_create(uint16_t port_id,
uint32_t queue_id,
@@ -6123,9 +6062,6 @@ rte_flow_async_create(uint16_t port_id,
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Enqueue rule creation operation.
*
* @param port_id
@@ -6154,7 +6090,6 @@ rte_flow_async_create(uint16_t port_id,
* The rule handle doesn't mean that the rule has been populated.
* Only completion result indicates that if there was success or failure.
*/
-__rte_experimental
struct rte_flow *
rte_flow_async_create_by_index(uint16_t port_id,
uint32_t queue_id,
@@ -6167,9 +6102,6 @@ rte_flow_async_create_by_index(uint16_t port_id,
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Enqueue rule creation by index with pattern operation.
* Packets are only matched if there is a rule inserted at the index.
*
@@ -6206,7 +6138,6 @@ rte_flow_async_create_by_index(uint16_t port_id,
* The rule handle doesn't mean that the rule has been populated.
* Only completion result indicates that if there was success or failure.
*/
-__rte_experimental
struct rte_flow *
rte_flow_async_create_by_index_with_pattern(uint16_t port_id,
uint32_t queue_id,
@@ -6221,9 +6152,6 @@ rte_flow_async_create_by_index_with_pattern(uint16_t port_id,
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Enqueue rule destruction operation.
*
* This function enqueues a destruction operation on the queue.
@@ -6249,7 +6177,6 @@ rte_flow_async_create_by_index_with_pattern(uint16_t port_id,
* @return
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
-__rte_experimental
int
rte_flow_async_destroy(uint16_t port_id,
uint32_t queue_id,
@@ -6259,9 +6186,6 @@ rte_flow_async_destroy(uint16_t port_id,
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Enqueue rule update operation.
*
* @param port_id
@@ -6286,7 +6210,6 @@ rte_flow_async_destroy(uint16_t port_id,
* @return
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
-__rte_experimental
int
rte_flow_async_actions_update(uint16_t port_id,
uint32_t queue_id,
@@ -6298,9 +6221,6 @@ rte_flow_async_actions_update(uint16_t port_id,
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Push all internally stored rules to the HW.
* Postponed rules are rules that were inserted with the postpone flag set.
* Can be used to notify the HW about batch of rules prepared by the SW to
@@ -6317,7 +6237,6 @@ rte_flow_async_actions_update(uint16_t port_id,
* @return
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
-__rte_experimental
int
rte_flow_push(uint16_t port_id,
uint32_t queue_id,
@@ -6359,9 +6278,6 @@ struct rte_flow_op_result {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Pull a rte flow operation.
* The application must invoke this function in order to complete
* the flow rule offloading and to retrieve the flow rule operation status.
@@ -6383,7 +6299,6 @@ struct rte_flow_op_result {
* Number of results that were pulled,
* a negative errno value otherwise and rte_errno is set.
*/
-__rte_experimental
int
rte_flow_pull(uint16_t port_id,
uint32_t queue_id,
@@ -6392,9 +6307,6 @@ rte_flow_pull(uint16_t port_id,
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Enqueue indirect action creation operation.
* @see rte_flow_action_handle_create
*
@@ -6417,7 +6329,6 @@ rte_flow_pull(uint16_t port_id,
* @return
* A valid handle in case of success, NULL otherwise and rte_errno is set.
*/
-__rte_experimental
struct rte_flow_action_handle *
rte_flow_async_action_handle_create(uint16_t port_id,
uint32_t queue_id,
@@ -6428,9 +6339,6 @@ rte_flow_async_action_handle_create(uint16_t port_id,
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Enqueue indirect action destruction operation.
* The destroy queue must be the same
* as the queue on which the action was created.
@@ -6452,7 +6360,6 @@ rte_flow_async_action_handle_create(uint16_t port_id,
* @return
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
-__rte_experimental
int
rte_flow_async_action_handle_destroy(uint16_t port_id,
uint32_t queue_id,
@@ -6462,9 +6369,6 @@ rte_flow_async_action_handle_destroy(uint16_t port_id,
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Enqueue indirect action update operation.
* @see rte_flow_action_handle_create
*
@@ -6491,7 +6395,6 @@ rte_flow_async_action_handle_destroy(uint16_t port_id,
* @return
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
-__rte_experimental
int
rte_flow_async_action_handle_update(uint16_t port_id,
uint32_t queue_id,
@@ -6502,9 +6405,6 @@ rte_flow_async_action_handle_update(uint16_t port_id,
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Enqueue indirect action query operation.
*
* Retrieve action-specific data such as counters.
@@ -6535,7 +6435,6 @@ rte_flow_async_action_handle_update(uint16_t port_id,
* @return
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
-__rte_experimental
int
rte_flow_async_action_handle_query(uint16_t port_id,
uint32_t queue_id,
@@ -6594,9 +6493,6 @@ rte_flow_action_handle_query_update(uint16_t port_id,
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Enqueue async indirect flow action query and/or update
*
* @param port_id
@@ -6628,7 +6524,6 @@ rte_flow_action_handle_query_update(uint16_t port_id,
* - (-EINVAL) if *handle* or *mode* invalid or
* both *update* and *query* are NULL.
*/
-__rte_experimental
int
rte_flow_async_action_handle_query_update(uint16_t port_id, uint32_t queue_id,
const struct rte_flow_op_attr *attr,
@@ -6694,9 +6589,6 @@ rte_flow_action_list_handle_create(uint16_t port_id,
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Async function call to create an indirect flow action object
* from flow actions list.
* The object is identified by a unique handle.
@@ -6727,7 +6619,6 @@ rte_flow_action_list_handle_create(uint16_t port_id,
* - (-EINVAL) if *actions* list invalid.
* - (-ENOTSUP) if *action* list element valid but unsupported.
*/
-__rte_experimental
struct rte_flow_action_list_handle *
rte_flow_async_action_list_handle_create(uint16_t port_id, uint32_t queue_id,
const struct rte_flow_op_attr *attr,
@@ -6760,9 +6651,6 @@ rte_flow_action_list_handle_destroy(uint16_t port_id,
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Enqueue indirect action list destruction operation.
* The destroy queue must be the same
* as the queue on which the action was created.
@@ -6789,7 +6677,6 @@ rte_flow_action_list_handle_destroy(uint16_t port_id,
* - (-ENOENT) if actions list pointed by *action* handle was not found.
* - (-EBUSY) if actions list pointed by *action* handle still used
*/
-__rte_experimental
int
rte_flow_async_action_list_handle_destroy
(uint16_t port_id, uint32_t queue_id,
@@ -6838,9 +6725,6 @@ rte_flow_action_list_handle_query_update(uint16_t port_id,
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Enqueue async indirect flow actions list query and/or update
* If both query and update not NULL, the function atomically
* queries and updates indirect action. Query and update are carried in order
@@ -6880,7 +6764,6 @@ rte_flow_action_list_handle_query_update(uint16_t port_id,
* - (-EINVAL) if *handle* or *mode* invalid or
* both *update* and *query* are NULL.
*/
-__rte_experimental
int
rte_flow_async_action_list_handle_query_update(uint16_t port_id, uint32_t queue_id,
const struct rte_flow_op_attr *attr,
@@ -6976,9 +6859,6 @@ rte_flow_calc_encap_hash(uint16_t port_id, const struct rte_flow_item pattern[],
uint8_t *hash, struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Update template table for new flow rules capacity.
*
* @param port_id
@@ -6999,16 +6879,12 @@ rte_flow_calc_encap_hash(uint16_t port_id, const struct rte_flow_item pattern[],
* *table* resize to *nb_rules* is not supported or
* unrecoverable *table* error.
*/
-__rte_experimental
int
rte_flow_template_table_resize(uint16_t port_id,
struct rte_flow_template_table *table,
uint32_t nb_rules,
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Update *rule* for the new *table* configuration after table resize.
* Must be called for each *rule* created before *table* resize.
* If called for *rule* created after *table* resize returns success.
@@ -7035,7 +6911,6 @@ rte_flow_template_table_resize(uint16_t port_id,
* If *rule* cannot be updated after *table* resize,
* unrecoverable *table* error.
*/
-__rte_experimental
int
rte_flow_async_update_resized(uint16_t port_id, uint32_t queue,
const struct rte_flow_op_attr *attr,
@@ -7043,9 +6918,6 @@ rte_flow_async_update_resized(uint16_t port_id, uint32_t queue,
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Resume normal operational mode after table was resized and
* table rules were updated for the new table configuration.
*
@@ -7065,7 +6937,6 @@ rte_flow_async_update_resized(uint16_t port_id, uint32_t queue,
* - (-EINVAL) if *table* cannot complete table resize,
* unrecoverable error.
*/
-__rte_experimental
int
rte_flow_template_table_resize_complete(uint16_t port_id,
struct rte_flow_template_table *table,
--
2.53.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 12/22] ethdev: promote flex item API to stable
2026-09-01 20:22 [PATCH 00/22] ethdev: convert experimental symbols etc Stephen Hemminger
` (10 preceding siblings ...)
2026-09-01 20:23 ` [PATCH 11/22] ethdev: promote asynchronous flow " Stephen Hemminger
@ 2026-09-01 20:23 ` Stephen Hemminger
2026-09-01 20:23 ` [PATCH 13/22] ethdev: promote remaining aged flow helpers " Stephen Hemminger
` (9 subsequent siblings)
21 siblings, 0 replies; 24+ messages in thread
From: Stephen Hemminger @ 2026-09-01 20:23 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Ori Kam, Thomas Monjalon, Andrew Rybchenko
rte_flow_flex_item_create() and rte_flow_flex_item_release() were
added in v21.11 to let applications describe vendor specific or
otherwise unsupported protocol headers for matching. Both are
unchanged since.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
doc/guides/rel_notes/release_26_11.rst | 1 +
lib/ethdev/rte_flow.c | 4 ++--
lib/ethdev/rte_flow.h | 9 ---------
3 files changed, 3 insertions(+), 11 deletions(-)
diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst
index 0f819b7013..141ad134b0 100644
--- a/doc/guides/rel_notes/release_26_11.rst
+++ b/doc/guides/rel_notes/release_26_11.rst
@@ -123,6 +123,7 @@ API Changes
``rte_flow_template_*``,
``rte_flow_async_*``,
``rte_flow_push``, ``rte_flow_pull``
+ * flow flex: ``rte_flow_flex_item_create`` and ``rte_flow_flex_item_release``
ABI Changes
diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c
index edbf8a8bce..75e3e1f10f 100644
--- a/lib/ethdev/rte_flow.c
+++ b/lib/ethdev/rte_flow.c
@@ -1626,7 +1626,7 @@ rte_flow_pick_transfer_proxy(uint16_t port_id, uint16_t *proxy_port_id,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_flex_item_create, 21.11)
+RTE_EXPORT_SYMBOL(rte_flow_flex_item_create)
struct rte_flow_item_flex_handle *
rte_flow_flex_item_create(uint16_t port_id,
const struct rte_flow_item_flex_conf *conf,
@@ -1653,7 +1653,7 @@ rte_flow_flex_item_create(uint16_t port_id,
return handle;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_flex_item_release, 21.11)
+RTE_EXPORT_SYMBOL(rte_flow_flex_item_release)
int
rte_flow_flex_item_release(uint16_t port_id,
const struct rte_flow_item_flex_handle *handle,
diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h
index 16645207c3..6fc6f750f1 100644
--- a/lib/ethdev/rte_flow.h
+++ b/lib/ethdev/rte_flow.h
@@ -2252,10 +2252,6 @@ struct rte_flow_item_flex_link {
uint32_t next;
};
-/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- */
struct rte_flow_item_flex_conf {
/**
* Specifies the flex item and tunnel relations and tells the PMD
@@ -5402,9 +5398,6 @@ rte_flow_pick_transfer_proxy(uint16_t port_id, uint16_t *proxy_port_id,
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Create the flex item with specified configuration over
* the Ethernet device.
*
@@ -5419,7 +5412,6 @@ rte_flow_pick_transfer_proxy(uint16_t port_id, uint16_t *proxy_port_id,
* @return
* Non-NULL opaque pointer on success, NULL otherwise and rte_errno is set.
*/
-__rte_experimental
struct rte_flow_item_flex_handle *
rte_flow_flex_item_create(uint16_t port_id,
const struct rte_flow_item_flex_conf *conf,
@@ -5439,7 +5431,6 @@ rte_flow_flex_item_create(uint16_t port_id,
* @return
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
-__rte_experimental
int
rte_flow_flex_item_release(uint16_t port_id,
const struct rte_flow_item_flex_handle *handle,
--
2.53.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 13/22] ethdev: promote remaining aged flow helpers to stable
2026-09-01 20:22 [PATCH 00/22] ethdev: convert experimental symbols etc Stephen Hemminger
` (11 preceding siblings ...)
2026-09-01 20:23 ` [PATCH 12/22] ethdev: promote flex item " Stephen Hemminger
@ 2026-09-01 20:23 ` Stephen Hemminger
2026-09-01 20:23 ` [PATCH 14/22] ethdev: promote congestion management API " Stephen Hemminger
` (8 subsequent siblings)
21 siblings, 0 replies; 24+ messages in thread
From: Stephen Hemminger @ 2026-09-01 20:23 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Ori Kam, Thomas Monjalon, Andrew Rybchenko
The last aged experimental symbols of rte_flow:
23.07 rte_flow_actions_update, rte_flow_restore_info_dynflag
23.11 rte_flow_calc_table_hash, rte_flow_group_set_miss_actions
24.03 rte_flow_calc_encap_hash
With this rte_flow.c has no experimental symbol left.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
doc/guides/rel_notes/release_26_11.rst | 3 +++
lib/ethdev/rte_flow.c | 10 +++++-----
lib/ethdev/rte_flow.h | 17 -----------------
3 files changed, 8 insertions(+), 22 deletions(-)
diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst
index 141ad134b0..6649a847ff 100644
--- a/doc/guides/rel_notes/release_26_11.rst
+++ b/doc/guides/rel_notes/release_26_11.rst
@@ -124,6 +124,9 @@ API Changes
``rte_flow_async_*``,
``rte_flow_push``, ``rte_flow_pull``
* flow flex: ``rte_flow_flex_item_create`` and ``rte_flow_flex_item_release``
+ * remaining flow helpers: ``rte_flow_actions_update``, ``rte_flow_restore_info_dynflag``,
+ ``rte_flow_calc_table_hash``, ``rte_flow_group_set_miss_actions``,
+ and ``rte_flow_calc_encap_hash``
ABI Changes
diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c
index 75e3e1f10f..1056cfd2c5 100644
--- a/lib/ethdev/rte_flow.c
+++ b/lib/ethdev/rte_flow.c
@@ -466,7 +466,7 @@ rte_flow_destroy(uint16_t port_id,
NULL, rte_strerror(ENOSYS));
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_actions_update, 23.07)
+RTE_EXPORT_SYMBOL(rte_flow_actions_update)
int
rte_flow_actions_update(uint16_t port_id,
struct rte_flow *flow,
@@ -1519,7 +1519,7 @@ static struct {
.desc = { .name = "RTE_MBUF_F_RX_RESTORE_INFO", },
};
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_restore_info_dynflag, 23.07)
+RTE_EXPORT_SYMBOL(rte_flow_restore_info_dynflag)
uint64_t
rte_flow_restore_info_dynflag(void)
{
@@ -2062,7 +2062,7 @@ rte_flow_template_table_destroy(uint16_t port_id,
NULL, rte_strerror(ENOTSUP));
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_group_set_miss_actions, 23.11)
+RTE_EXPORT_SYMBOL(rte_flow_group_set_miss_actions)
int
rte_flow_group_set_miss_actions(uint16_t port_id,
uint32_t group_id,
@@ -2691,7 +2691,7 @@ rte_flow_async_action_list_handle_query_update(uint16_t port_id, uint32_t queue_
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_calc_table_hash, 23.11)
+RTE_EXPORT_SYMBOL(rte_flow_calc_table_hash)
int
rte_flow_calc_table_hash(uint16_t port_id, const struct rte_flow_template_table *table,
const struct rte_flow_item pattern[], uint8_t pattern_template_index,
@@ -2713,7 +2713,7 @@ rte_flow_calc_table_hash(uint16_t port_id, const struct rte_flow_template_table
return flow_err(port_id, ret, error);
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_calc_encap_hash, 24.03)
+RTE_EXPORT_SYMBOL(rte_flow_calc_encap_hash)
int
rte_flow_calc_encap_hash(uint16_t port_id, const struct rte_flow_item pattern[],
enum rte_flow_encap_hash_field dest_field, uint8_t hash_len,
diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h
index 6fc6f750f1..f7523bdf8f 100644
--- a/lib/ethdev/rte_flow.h
+++ b/lib/ethdev/rte_flow.h
@@ -4726,7 +4726,6 @@ rte_flow_destroy(uint16_t port_id,
* @return
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
-__rte_experimental
int
rte_flow_actions_update(uint16_t port_id,
struct rte_flow *flow,
@@ -5293,7 +5292,6 @@ rte_flow_tunnel_match(uint16_t port_id,
* @return
* The offload flag indicating rte_flow_get_restore_info() must be called.
*/
-__rte_experimental
uint64_t
rte_flow_restore_info_dynflag(void);
@@ -5964,9 +5962,6 @@ rte_flow_template_table_destroy(uint16_t port_id,
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Set group miss actions.
*
* @param port_id
@@ -5984,7 +5979,6 @@ rte_flow_template_table_destroy(uint16_t port_id,
* @return
* 0 on success, a negative errno value otherwise and rte_errno is set.
*/
-__rte_experimental
int
rte_flow_group_set_miss_actions(uint16_t port_id,
uint32_t group_id,
@@ -6765,9 +6759,6 @@ rte_flow_async_action_list_handle_query_update(uint16_t port_id, uint32_t queue_
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Calculate the hash for a given pattern in a given table as
* calculated by the HW.
*
@@ -6790,16 +6781,12 @@ rte_flow_async_action_list_handle_query_update(uint16_t port_id, uint32_t queue_
* - (-ENODEV) if *port_id* invalid.
* - (-ENOTSUP) if underlying device does not support this functionality.
*/
-__rte_experimental
int
rte_flow_calc_table_hash(uint16_t port_id, const struct rte_flow_template_table *table,
const struct rte_flow_item pattern[], uint8_t pattern_template_index,
uint32_t *hash, struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Destination field type for the hash calculation, when encap action is used.
* The encap field implies the size, meaning XXX_SRC_PORT hash len is 2 bytes,
* while XXX_NVGRE_FLOW_ID hash len is 1 byte.
@@ -6814,9 +6801,6 @@ enum rte_flow_encap_hash_field {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Simulate HW hash calculation that is done when an encap action is being used.
* This hash can be stored in tunnel outer header to improve packet distribution.
*
@@ -6843,7 +6827,6 @@ enum rte_flow_encap_hash_field {
* - (-EINVAL) if *pattern* doesn't hold enough information to calculate the hash
* or the dest is not supported.
*/
-__rte_experimental
int
rte_flow_calc_encap_hash(uint16_t port_id, const struct rte_flow_item pattern[],
enum rte_flow_encap_hash_field dest_field, uint8_t hash_len,
--
2.53.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 14/22] ethdev: promote congestion management API to stable
2026-09-01 20:22 [PATCH 00/22] ethdev: convert experimental symbols etc Stephen Hemminger
` (12 preceding siblings ...)
2026-09-01 20:23 ` [PATCH 13/22] ethdev: promote remaining aged flow helpers " Stephen Hemminger
@ 2026-09-01 20:23 ` Stephen Hemminger
2026-09-01 20:23 ` [PATCH 15/22] ethdev: promote IP reassembly offload " Stephen Hemminger
` (7 subsequent siblings)
21 siblings, 0 replies; 24+ messages in thread
From: Stephen Hemminger @ 2026-09-01 20:23 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Thomas Monjalon, Andrew Rybchenko
The congestion management interface was added in v22.11 and its four
functions have not changed since. With this rte_ethdev_cman.c has no
experimental symbol left.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
doc/guides/rel_notes/release_26_11.rst | 3 +++
lib/ethdev/rte_ethdev.h | 22 ----------------------
lib/ethdev/rte_ethdev_cman.c | 8 ++++----
3 files changed, 7 insertions(+), 26 deletions(-)
diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst
index 6649a847ff..477139a2a1 100644
--- a/doc/guides/rel_notes/release_26_11.rst
+++ b/doc/guides/rel_notes/release_26_11.rst
@@ -127,6 +127,9 @@ API Changes
* remaining flow helpers: ``rte_flow_actions_update``, ``rte_flow_restore_info_dynflag``,
``rte_flow_calc_table_hash``, ``rte_flow_group_set_miss_actions``,
and ``rte_flow_calc_encap_hash``
+ * congestion management:
+ ``rte_eth_cman_config_init``, ``rte_eth_cman_config_set``,
+ ``rte_eth_cman_config_get`` and ``rte_eth_cman_info_get``
ABI Changes
diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
index 2a694130ea..2b40340004 100644
--- a/lib/ethdev/rte_ethdev.h
+++ b/lib/ethdev/rte_ethdev.h
@@ -6040,9 +6040,6 @@ enum rte_eth_cman_obj {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change, or be removed, without prior notice
- *
* A structure used to retrieve information of ethdev congestion management.
*/
struct rte_eth_cman_info {
@@ -6064,9 +6061,6 @@ struct rte_eth_cman_info {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change, or be removed, without prior notice
- *
* A structure used to configure the ethdev congestion management.
*/
struct rte_eth_cman_config {
@@ -6108,9 +6102,6 @@ struct rte_eth_cman_config {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
- *
* Retrieve the information for ethdev congestion management
*
* @param port_id
@@ -6124,13 +6115,9 @@ struct rte_eth_cman_config {
* - (-ENODEV) if *port_id* invalid.
* - (-EINVAL) if bad parameter.
*/
-__rte_experimental
int rte_eth_cman_info_get(uint16_t port_id, struct rte_eth_cman_info *info);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
- *
* Initialize the ethdev congestion management configuration structure with default values.
*
* @param port_id
@@ -6144,13 +6131,9 @@ int rte_eth_cman_info_get(uint16_t port_id, struct rte_eth_cman_info *info);
* - (-ENODEV) if *port_id* invalid.
* - (-EINVAL) if bad parameter.
*/
-__rte_experimental
int rte_eth_cman_config_init(uint16_t port_id, struct rte_eth_cman_config *config);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
- *
* Configure ethdev congestion management
*
* @param port_id
@@ -6163,13 +6146,9 @@ int rte_eth_cman_config_init(uint16_t port_id, struct rte_eth_cman_config *confi
* - (-ENODEV) if *port_id* invalid.
* - (-EINVAL) if bad parameter.
*/
-__rte_experimental
int rte_eth_cman_config_set(uint16_t port_id, const struct rte_eth_cman_config *config);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
- *
* Retrieve the applied ethdev congestion management parameters for the given port.
*
* @param port_id
@@ -6186,7 +6165,6 @@ int rte_eth_cman_config_set(uint16_t port_id, const struct rte_eth_cman_config *
* - (-ENODEV) if *port_id* invalid.
* - (-EINVAL) if bad parameter.
*/
-__rte_experimental
int rte_eth_cman_config_get(uint16_t port_id, struct rte_eth_cman_config *config);
#ifdef __cplusplus
diff --git a/lib/ethdev/rte_ethdev_cman.c b/lib/ethdev/rte_ethdev_cman.c
index a8460e6977..3a62432bf0 100644
--- a/lib/ethdev/rte_ethdev_cman.c
+++ b/lib/ethdev/rte_ethdev_cman.c
@@ -12,7 +12,7 @@
#include "ethdev_trace.h"
/* Get congestion management information for a port */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_cman_info_get, 22.11)
+RTE_EXPORT_SYMBOL(rte_eth_cman_info_get)
int
rte_eth_cman_info_get(uint16_t port_id, struct rte_eth_cman_info *info)
{
@@ -41,7 +41,7 @@ rte_eth_cman_info_get(uint16_t port_id, struct rte_eth_cman_info *info)
}
/* Initialize congestion management structure with default values */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_cman_config_init, 22.11)
+RTE_EXPORT_SYMBOL(rte_eth_cman_config_init)
int
rte_eth_cman_config_init(uint16_t port_id, struct rte_eth_cman_config *config)
{
@@ -70,7 +70,7 @@ rte_eth_cman_config_init(uint16_t port_id, struct rte_eth_cman_config *config)
}
/* Configure congestion management on a port */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_cman_config_set, 22.11)
+RTE_EXPORT_SYMBOL(rte_eth_cman_config_set)
int
rte_eth_cman_config_set(uint16_t port_id, const struct rte_eth_cman_config *config)
{
@@ -98,7 +98,7 @@ rte_eth_cman_config_set(uint16_t port_id, const struct rte_eth_cman_config *conf
}
/* Retrieve congestion management configuration of a port */
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_cman_config_get, 22.11)
+RTE_EXPORT_SYMBOL(rte_eth_cman_config_get)
int
rte_eth_cman_config_get(uint16_t port_id, struct rte_eth_cman_config *config)
{
--
2.53.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 15/22] ethdev: promote IP reassembly offload API to stable
2026-09-01 20:22 [PATCH 00/22] ethdev: convert experimental symbols etc Stephen Hemminger
` (13 preceding siblings ...)
2026-09-01 20:23 ` [PATCH 14/22] ethdev: promote congestion management API " Stephen Hemminger
@ 2026-09-01 20:23 ` Stephen Hemminger
2026-09-01 20:23 ` [PATCH 16/22] ethdev: promote per-queue priority flow control " Stephen Hemminger
` (6 subsequent siblings)
21 siblings, 0 replies; 24+ messages in thread
From: Stephen Hemminger @ 2026-09-01 20:23 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Thomas Monjalon, Andrew Rybchenko
The IP reassembly offload configuration was added in v22.03 and the
three functions are unchanged since.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
doc/guides/rel_notes/release_26_11.rst | 3 +++
lib/ethdev/rte_ethdev.c | 6 +++---
lib/ethdev/rte_ethdev.h | 12 ------------
3 files changed, 6 insertions(+), 15 deletions(-)
diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst
index 477139a2a1..7d36e10794 100644
--- a/doc/guides/rel_notes/release_26_11.rst
+++ b/doc/guides/rel_notes/release_26_11.rst
@@ -130,6 +130,9 @@ API Changes
* congestion management:
``rte_eth_cman_config_init``, ``rte_eth_cman_config_set``,
``rte_eth_cman_config_get`` and ``rte_eth_cman_info_get``
+ * ip reassembly:
+ ``rte_eth_ip_reassembly_capability_get``, ``rte_eth_ip_reassembly_conf_get`` and
+ ``rte_eth_ip_reassembly_conf_set``
ABI Changes
diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index 6fda1468f9..337babe793 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -7205,7 +7205,7 @@ rte_eth_rx_metadata_negotiate(uint16_t port_id, uint64_t *features)
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_ip_reassembly_capability_get, 22.03)
+RTE_EXPORT_SYMBOL(rte_eth_ip_reassembly_capability_get)
int
rte_eth_ip_reassembly_capability_get(uint16_t port_id,
struct rte_eth_ip_reassembly_params *reassembly_capa)
@@ -7241,7 +7241,7 @@ rte_eth_ip_reassembly_capability_get(uint16_t port_id,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_ip_reassembly_conf_get, 22.03)
+RTE_EXPORT_SYMBOL(rte_eth_ip_reassembly_conf_get)
int
rte_eth_ip_reassembly_conf_get(uint16_t port_id,
struct rte_eth_ip_reassembly_params *conf)
@@ -7275,7 +7275,7 @@ rte_eth_ip_reassembly_conf_get(uint16_t port_id,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_ip_reassembly_conf_set, 22.03)
+RTE_EXPORT_SYMBOL(rte_eth_ip_reassembly_conf_set)
int
rte_eth_ip_reassembly_conf_set(uint16_t port_id,
const struct rte_eth_ip_reassembly_params *conf)
diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
index 2b40340004..d67a3bbe28 100644
--- a/lib/ethdev/rte_ethdev.h
+++ b/lib/ethdev/rte_ethdev.h
@@ -5850,9 +5850,6 @@ struct rte_eth_ip_reassembly_params {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice
- *
* Get IP reassembly capabilities supported by the PMD. This is the first API
* to be called for enabling the IP reassembly offload feature. PMD will return
* the maximum values of parameters that PMD can support and user can call
@@ -5869,14 +5866,10 @@ struct rte_eth_ip_reassembly_params {
* - (-EINVAL) if device is not configured or *capa* passed is NULL.
* - (0) on success.
*/
-__rte_experimental
int rte_eth_ip_reassembly_capability_get(uint16_t port_id,
struct rte_eth_ip_reassembly_params *capa);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice
- *
* Get IP reassembly configuration parameters currently set in PMD.
* The API will return error if the configuration is not already
* set using rte_eth_ip_reassembly_conf_set() before calling this API or if
@@ -5894,14 +5887,10 @@ int rte_eth_ip_reassembly_capability_get(uint16_t port_id,
* configuration is not set using rte_eth_ip_reassembly_conf_set().
* - (0) on success.
*/
-__rte_experimental
int rte_eth_ip_reassembly_conf_get(uint16_t port_id,
struct rte_eth_ip_reassembly_params *conf);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice
- *
* Set IP reassembly configuration parameters if the PMD supports IP reassembly
* offload. User should first call rte_eth_ip_reassembly_capability_get() to
* check the maximum values supported by the PMD before setting the
@@ -5927,7 +5916,6 @@ int rte_eth_ip_reassembly_conf_get(uint16_t port_id,
* successfully by the PMD.
* - (0) on success.
*/
-__rte_experimental
int rte_eth_ip_reassembly_conf_set(uint16_t port_id,
const struct rte_eth_ip_reassembly_params *conf);
--
2.53.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 16/22] ethdev: promote per-queue priority flow control to stable
2026-09-01 20:22 [PATCH 00/22] ethdev: convert experimental symbols etc Stephen Hemminger
` (14 preceding siblings ...)
2026-09-01 20:23 ` [PATCH 15/22] ethdev: promote IP reassembly offload " Stephen Hemminger
@ 2026-09-01 20:23 ` Stephen Hemminger
2026-09-01 20:23 ` [PATCH 17/22] ethdev: promote device info and dump helpers " Stephen Hemminger
` (5 subsequent siblings)
21 siblings, 0 replies; 24+ messages in thread
From: Stephen Hemminger @ 2026-09-01 20:23 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Thomas Monjalon, Andrew Rybchenko
rte_eth_dev_priority_flow_ctrl_queue_configure() and
rte_eth_dev_priority_flow_ctrl_queue_info_get() were added in v22.03
to configure PFC on a per queue basis. Neither has changed since.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
doc/guides/rel_notes/release_26_11.rst | 3 +++
lib/ethdev/rte_ethdev.c | 4 ++--
lib/ethdev/rte_ethdev.h | 14 --------------
3 files changed, 5 insertions(+), 16 deletions(-)
diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst
index 7d36e10794..e0c8afdb04 100644
--- a/doc/guides/rel_notes/release_26_11.rst
+++ b/doc/guides/rel_notes/release_26_11.rst
@@ -133,6 +133,9 @@ API Changes
* ip reassembly:
``rte_eth_ip_reassembly_capability_get``, ``rte_eth_ip_reassembly_conf_get`` and
``rte_eth_ip_reassembly_conf_set``
+ * priority flow:
+ ``rte_eth_dev_priority_flow_ctrl_queue_configure`` and
+ ``rte_eth_dev_priority_flow_ctrl_queue_info_get``
ABI Changes
diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index 337babe793..b4f36a9b1b 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -4813,7 +4813,7 @@ validate_tx_pause_config(struct rte_eth_dev_info *dev_info, uint8_t tc_max,
return 0;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_dev_priority_flow_ctrl_queue_info_get, 22.03)
+RTE_EXPORT_SYMBOL(rte_eth_dev_priority_flow_ctrl_queue_info_get)
int
rte_eth_dev_priority_flow_ctrl_queue_info_get(uint16_t port_id,
struct rte_eth_pfc_queue_info *pfc_queue_info)
@@ -4841,7 +4841,7 @@ rte_eth_dev_priority_flow_ctrl_queue_info_get(uint16_t port_id,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_dev_priority_flow_ctrl_queue_configure, 22.03)
+RTE_EXPORT_SYMBOL(rte_eth_dev_priority_flow_ctrl_queue_configure)
int
rte_eth_dev_priority_flow_ctrl_queue_configure(uint16_t port_id,
struct rte_eth_pfc_queue_conf *pfc_queue_conf)
diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
index d67a3bbe28..4eea5b990d 100644
--- a/lib/ethdev/rte_ethdev.h
+++ b/lib/ethdev/rte_ethdev.h
@@ -1424,9 +1424,6 @@ struct rte_eth_pfc_conf {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
- *
* A structure used to retrieve information of queue based PFC.
*/
struct rte_eth_pfc_queue_info {
@@ -1439,9 +1436,6 @@ struct rte_eth_pfc_queue_info {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
- *
* A structure used to configure Ethernet priority flow control parameters for
* ethdev queues.
*
@@ -4590,9 +4584,6 @@ int rte_eth_dev_mac_addr_add(uint16_t port_id, struct rte_ether_addr *mac_addr,
uint32_t pool);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Retrieve the information for queue based PFC.
*
* @param port_id
@@ -4606,14 +4597,10 @@ int rte_eth_dev_mac_addr_add(uint16_t port_id, struct rte_ether_addr *mac_addr,
* - (-ENODEV) if *port_id* invalid.
* - (-EINVAL) if bad parameter.
*/
-__rte_experimental
int rte_eth_dev_priority_flow_ctrl_queue_info_get(uint16_t port_id,
struct rte_eth_pfc_queue_info *pfc_queue_info);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Configure the queue based priority flow control for a given queue
* for Ethernet device.
*
@@ -4633,7 +4620,6 @@ int rte_eth_dev_priority_flow_ctrl_queue_info_get(uint16_t port_id,
* - (-EINVAL) if bad parameter
* - (-EIO) if flow control setup queue failure
*/
-__rte_experimental
int rte_eth_dev_priority_flow_ctrl_queue_configure(uint16_t port_id,
struct rte_eth_pfc_queue_conf *pfc_queue_conf);
--
2.53.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 17/22] ethdev: promote device info and dump helpers to stable
2026-09-01 20:22 [PATCH 00/22] ethdev: convert experimental symbols etc Stephen Hemminger
` (15 preceding siblings ...)
2026-09-01 20:23 ` [PATCH 16/22] ethdev: promote per-queue priority flow control " Stephen Hemminger
@ 2026-09-01 20:23 ` Stephen Hemminger
2026-09-01 20:23 ` [PATCH 18/22] ethdev: promote speed lanes API " Stephen Hemminger
` (4 subsequent siblings)
21 siblings, 0 replies; 24+ messages in thread
From: Stephen Hemminger @ 2026-09-01 20:23 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Thomas Monjalon, Andrew Rybchenko
A set of introspection helpers that have been stable for years:
21.11 rte_eth_dev_capability_name, rte_eth_dev_conf_get,
rte_eth_macaddrs_get
22.03 rte_eth_dev_priv_dump
22.11 rte_eth_rx_descriptor_dump, rte_eth_tx_descriptor_dump
23.11 rte_eth_dev_rss_algo_name
24.03 rte_eth_find_rss_algo
24.11 rte_eth_dev_get_reg_info_ext
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
doc/guides/rel_notes/release_26_11.rst | 6 +++++
lib/ethdev/rte_ethdev.c | 18 +++++++-------
lib/ethdev/rte_ethdev.h | 33 --------------------------
3 files changed, 15 insertions(+), 42 deletions(-)
diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst
index e0c8afdb04..2b085dcd51 100644
--- a/doc/guides/rel_notes/release_26_11.rst
+++ b/doc/guides/rel_notes/release_26_11.rst
@@ -136,6 +136,12 @@ API Changes
* priority flow:
``rte_eth_dev_priority_flow_ctrl_queue_configure`` and
``rte_eth_dev_priority_flow_ctrl_queue_info_get``
+ * device info:
+ ``rte_eth_dev_capability_name``, ``rte_eth_dev_conf_get``,
+ ``rte_eth_macaddrs_get``, ``rte_eth_dev_priv_dump``,
+ ``rte_eth_rx_descriptor_dump``, ``rte_eth_tx_descriptor_dump``,
+ ``rte_eth_dev_rss_algo_name``, ``rte_eth_find_rss_algo`` and
+ ``rte_eth_dev_get_reg_info_ext``
ABI Changes
diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index b4f36a9b1b..0dc7e3b5d2 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -1171,7 +1171,7 @@ eth_dev_offload_names(uint64_t bitmask, char *buf, size_t size,
return buf;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_dev_capability_name, 21.11)
+RTE_EXPORT_SYMBOL(rte_eth_dev_capability_name)
const char *
rte_eth_dev_capability_name(uint64_t capability)
{
@@ -4153,7 +4153,7 @@ rte_eth_dev_info_get(uint16_t port_id, struct rte_eth_dev_info *dev_info)
return 0;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_dev_conf_get, 21.11)
+RTE_EXPORT_SYMBOL(rte_eth_dev_conf_get)
int
rte_eth_dev_conf_get(uint16_t port_id, struct rte_eth_conf *dev_conf)
{
@@ -4314,7 +4314,7 @@ rte_eth_dev_set_ptypes(uint16_t port_id, uint32_t ptype_mask,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_macaddrs_get, 21.11)
+RTE_EXPORT_SYMBOL(rte_eth_macaddrs_get)
int
rte_eth_macaddrs_get(uint16_t port_id, struct rte_ether_addr *ma,
unsigned int num)
@@ -5155,7 +5155,7 @@ rte_eth_dev_rss_hash_conf_get(uint16_t port_id,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_dev_rss_algo_name, 23.11)
+RTE_EXPORT_SYMBOL(rte_eth_dev_rss_algo_name)
const char *
rte_eth_dev_rss_algo_name(enum rte_eth_hash_function rss_algo)
{
@@ -5170,7 +5170,7 @@ rte_eth_dev_rss_algo_name(enum rte_eth_hash_function rss_algo)
return name;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_find_rss_algo, 24.03)
+RTE_EXPORT_SYMBOL(rte_eth_find_rss_algo)
int
rte_eth_find_rss_algo(const char *name, uint32_t *algo)
{
@@ -6845,7 +6845,7 @@ rte_eth_dev_get_reg_info(uint16_t port_id, struct rte_dev_reg_info *info)
return 0;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_dev_get_reg_info_ext, 24.11)
+RTE_EXPORT_SYMBOL(rte_eth_dev_get_reg_info_ext)
int
rte_eth_dev_get_reg_info_ext(uint16_t port_id, struct rte_dev_reg_info *info)
{
@@ -7316,7 +7316,7 @@ rte_eth_ip_reassembly_conf_set(uint16_t port_id,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_dev_priv_dump, 22.03)
+RTE_EXPORT_SYMBOL(rte_eth_dev_priv_dump)
int
rte_eth_dev_priv_dump(uint16_t port_id, FILE *file)
{
@@ -7335,7 +7335,7 @@ rte_eth_dev_priv_dump(uint16_t port_id, FILE *file)
return eth_err(port_id, dev->dev_ops->eth_dev_priv_dump(dev, file));
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_rx_descriptor_dump, 22.11)
+RTE_EXPORT_SYMBOL(rte_eth_rx_descriptor_dump)
int
rte_eth_rx_descriptor_dump(uint16_t port_id, uint16_t queue_id,
uint16_t offset, uint16_t num, FILE *file)
@@ -7362,7 +7362,7 @@ rte_eth_rx_descriptor_dump(uint16_t port_id, uint16_t queue_id,
dev->dev_ops->eth_rx_descriptor_dump(dev, queue_id, offset, num, file));
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_tx_descriptor_dump, 22.11)
+RTE_EXPORT_SYMBOL(rte_eth_tx_descriptor_dump)
int
rte_eth_tx_descriptor_dump(uint16_t port_id, uint16_t queue_id,
uint16_t offset, uint16_t num, FILE *file)
diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
index 4eea5b990d..b75cd072d9 100644
--- a/lib/ethdev/rte_ethdev.h
+++ b/lib/ethdev/rte_ethdev.h
@@ -2379,9 +2379,6 @@ const char *rte_eth_dev_rx_offload_name(uint64_t offload);
const char *rte_eth_dev_tx_offload_name(uint64_t offload);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Get RTE_ETH_DEV_CAPA_* flag name.
*
* @param capability
@@ -2389,7 +2386,6 @@ const char *rte_eth_dev_tx_offload_name(uint64_t offload);
* @return
* Capability name or 'UNKNOWN' if the flag cannot be recognized.
*/
-__rte_experimental
const char *rte_eth_dev_capability_name(uint64_t capability);
/**
@@ -3506,9 +3502,6 @@ int rte_eth_dev_set_rx_queue_stats_mapping(uint16_t port_id,
int rte_eth_macaddr_get(uint16_t port_id, struct rte_ether_addr *mac_addr);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice
- *
* Retrieve the Ethernet addresses of an Ethernet device.
*
* @param port_id
@@ -3525,7 +3518,6 @@ int rte_eth_macaddr_get(uint16_t port_id, struct rte_ether_addr *mac_addr);
* - (-ENODEV) if *port_id* invalid.
* - (-EINVAL) if bad parameter.
*/
-__rte_experimental
int rte_eth_macaddrs_get(uint16_t port_id, struct rte_ether_addr *ma,
unsigned int num);
@@ -3552,9 +3544,6 @@ int rte_eth_dev_info_get(uint16_t port_id, struct rte_eth_dev_info *dev_info)
__rte_warn_unused_result;
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Retrieve the configuration of an Ethernet device.
*
* @param port_id
@@ -3566,7 +3555,6 @@ int rte_eth_dev_info_get(uint16_t port_id, struct rte_eth_dev_info *dev_info)
* - (-ENODEV) if *port_id* invalid.
* - (-EINVAL) if bad parameter.
*/
-__rte_experimental
int rte_eth_dev_conf_get(uint16_t port_id, struct rte_eth_conf *dev_conf)
__rte_warn_unused_result;
@@ -4825,9 +4813,6 @@ rte_eth_dev_rss_hash_conf_get(uint16_t port_id,
struct rte_eth_rss_conf *rss_conf);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice.
- *
* Get the name of RSS hash algorithm.
*
* @param rss_algo
@@ -4836,14 +4821,10 @@ rte_eth_dev_rss_hash_conf_get(uint16_t port_id,
* @return
* Hash algorithm name or 'UNKNOWN' if the rss_algo cannot be recognized.
*/
-__rte_experimental
const char *
rte_eth_dev_rss_algo_name(enum rte_eth_hash_function rss_algo);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice.
- *
* Get RSS hash algorithm by its name.
*
* @param name
@@ -4856,7 +4837,6 @@ rte_eth_dev_rss_algo_name(enum rte_eth_hash_function rss_algo);
* - (0) if successful.
* - (-EINVAL) if not found.
*/
-__rte_experimental
int
rte_eth_find_rss_algo(const char *name, uint32_t *algo);
@@ -5251,7 +5231,6 @@ int rte_eth_get_monitor_addr(uint16_t port_id, uint16_t queue_id,
* - (-EIO) if device is removed.
* - others depends on the specific operations implementation.
*/
-__rte_experimental
int rte_eth_dev_get_reg_info_ext(uint16_t port_id, struct rte_dev_reg_info *info);
/**
@@ -5925,9 +5904,6 @@ typedef struct {
} rte_eth_ip_reassembly_dynfield_t;
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
- *
* Dump private info from device to a file. Provided data and the order depends
* on the PMD.
*
@@ -5942,13 +5918,9 @@ typedef struct {
* - (-ENOTSUP) if the device does not support this function.
* - (-EIO) if device is removed.
*/
-__rte_experimental
int rte_eth_dev_priv_dump(uint16_t port_id, FILE *file);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
- *
* Dump ethdev Rx descriptor info to a file.
*
* This API is used for debugging, not a dataplane API.
@@ -5968,14 +5940,10 @@ int rte_eth_dev_priv_dump(uint16_t port_id, FILE *file);
* - On success, zero.
* - On failure, a negative value.
*/
-__rte_experimental
int rte_eth_rx_descriptor_dump(uint16_t port_id, uint16_t queue_id,
uint16_t offset, uint16_t num, FILE *file);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
- *
* Dump ethdev Tx descriptor info to a file.
*
* This API is used for debugging, not a dataplane API.
@@ -5995,7 +5963,6 @@ int rte_eth_rx_descriptor_dump(uint16_t port_id, uint16_t queue_id,
* - On success, zero.
* - On failure, a negative value.
*/
-__rte_experimental
int rte_eth_tx_descriptor_dump(uint16_t port_id, uint16_t queue_id,
uint16_t offset, uint16_t num, FILE *file);
--
2.53.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 18/22] ethdev: promote speed lanes API to stable
2026-09-01 20:22 [PATCH 00/22] ethdev: convert experimental symbols etc Stephen Hemminger
` (16 preceding siblings ...)
2026-09-01 20:23 ` [PATCH 17/22] ethdev: promote device info and dump helpers " Stephen Hemminger
@ 2026-09-01 20:23 ` Stephen Hemminger
2026-09-01 20:23 ` [PATCH 19/22] ethdev: promote queue helpers and aggregated ports " Stephen Hemminger
` (3 subsequent siblings)
21 siblings, 0 replies; 24+ messages in thread
From: Stephen Hemminger @ 2026-09-01 20:23 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Thomas Monjalon, Andrew Rybchenko
The speed lanes configuration was added in v24.11 to query and set
the number of lanes used by a link. The three functions are
unchanged since.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
doc/guides/rel_notes/release_26_11.rst | 3 +++
lib/ethdev/rte_ethdev.c | 6 +++---
lib/ethdev/rte_ethdev.h | 12 ------------
3 files changed, 6 insertions(+), 15 deletions(-)
diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst
index 2b085dcd51..01030cefe5 100644
--- a/doc/guides/rel_notes/release_26_11.rst
+++ b/doc/guides/rel_notes/release_26_11.rst
@@ -142,6 +142,9 @@ API Changes
``rte_eth_rx_descriptor_dump``, ``rte_eth_tx_descriptor_dump``,
``rte_eth_dev_rss_algo_name``, ``rte_eth_find_rss_algo`` and
``rte_eth_dev_get_reg_info_ext``
+ * speed lanes:
+ ``rte_eth_speed_lanes_get``, ``rte_eth_speed_lanes_set`` and
+ ``rte_eth_speed_lanes_get_capability``
ABI Changes
diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index 0dc7e3b5d2..783fb817c2 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -1929,7 +1929,7 @@ rte_eth_dev_set_link_down(uint16_t port_id)
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_speed_lanes_get, 24.11)
+RTE_EXPORT_SYMBOL(rte_eth_speed_lanes_get)
int
rte_eth_speed_lanes_get(uint16_t port_id, uint32_t *lane)
{
@@ -1943,7 +1943,7 @@ rte_eth_speed_lanes_get(uint16_t port_id, uint32_t *lane)
return eth_err(port_id, dev->dev_ops->speed_lanes_get(dev, lane));
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_speed_lanes_get_capability, 24.11)
+RTE_EXPORT_SYMBOL(rte_eth_speed_lanes_get_capability)
int
rte_eth_speed_lanes_get_capability(uint16_t port_id,
struct rte_eth_speed_lanes_capa *speed_lanes_capa,
@@ -1970,7 +1970,7 @@ rte_eth_speed_lanes_get_capability(uint16_t port_id,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_speed_lanes_set, 24.11)
+RTE_EXPORT_SYMBOL(rte_eth_speed_lanes_set)
int
rte_eth_speed_lanes_set(uint16_t port_id, uint32_t speed_lanes_capa)
{
diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
index b75cd072d9..dfb9cfd614 100644
--- a/lib/ethdev/rte_ethdev.h
+++ b/lib/ethdev/rte_ethdev.h
@@ -3144,9 +3144,6 @@ int rte_eth_link_to_str(char *str, size_t len,
const struct rte_eth_link *eth_link);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
- *
* Get Active lanes.
*
* @param port_id
@@ -3163,13 +3160,9 @@ int rte_eth_link_to_str(char *str, size_t len,
* - (-EIO) if device is removed.
* - (-ENODEV) if *port_id* invalid.
*/
-__rte_experimental
int rte_eth_speed_lanes_get(uint16_t port_id, uint32_t *lanes);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
- *
* Set speed lanes supported by the NIC.
*
* @param port_id
@@ -3187,13 +3180,9 @@ int rte_eth_speed_lanes_get(uint16_t port_id, uint32_t *lanes);
* - (-ENODEV) if *port_id* invalid.
* - (-EINVAL) if *lanes* count not in speeds capability list.
*/
-__rte_experimental
int rte_eth_speed_lanes_set(uint16_t port_id, uint32_t speed_lanes);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
- *
* Get speed lanes supported by the NIC.
*
* @param port_id
@@ -3212,7 +3201,6 @@ int rte_eth_speed_lanes_set(uint16_t port_id, uint32_t speed_lanes);
* - (-ENODEV) if *port_id* invalid.
* - (-EINVAL) if *speed_lanes* invalid
*/
-__rte_experimental
int rte_eth_speed_lanes_get_capability(uint16_t port_id,
struct rte_eth_speed_lanes_capa *speed_lanes_capa,
unsigned int num);
--
2.53.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 19/22] ethdev: promote queue helpers and aggregated ports to stable
2026-09-01 20:22 [PATCH 00/22] ethdev: convert experimental symbols etc Stephen Hemminger
` (17 preceding siblings ...)
2026-09-01 20:23 ` [PATCH 18/22] ethdev: promote speed lanes API " Stephen Hemminger
@ 2026-09-01 20:23 ` Stephen Hemminger
2026-09-01 20:23 ` [PATCH 20/22] ethdev: promote remaining aged symbols " Stephen Hemminger
` (2 subsequent siblings)
21 siblings, 0 replies; 24+ messages in thread
From: Stephen Hemminger @ 2026-09-01 20:23 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Thomas Monjalon, Andrew Rybchenko
22.07 rte_eth_rx_avail_thresh_set, rte_eth_rx_avail_thresh_query
23.03 rte_eth_dev_count_aggr_ports,
rte_eth_dev_map_aggr_tx_affinity
23.07 rte_eth_rx_queue_is_valid, rte_eth_tx_queue_is_valid
23.11 rte_eth_recycle_rx_queue_info_get
None of these has changed since it was introduced.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
doc/guides/rel_notes/release_26_11.rst | 6 +++++
lib/ethdev/rte_ethdev.c | 14 ++++++------
lib/ethdev/rte_ethdev.h | 31 --------------------------
3 files changed, 13 insertions(+), 38 deletions(-)
diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst
index 01030cefe5..b23ffa6cb0 100644
--- a/doc/guides/rel_notes/release_26_11.rst
+++ b/doc/guides/rel_notes/release_26_11.rst
@@ -145,6 +145,12 @@ API Changes
* speed lanes:
``rte_eth_speed_lanes_get``, ``rte_eth_speed_lanes_set`` and
``rte_eth_speed_lanes_get_capability``
+ * queue helpers:
+ ``rte_eth_rx_queue_is_valid``, ``rte_eth_tx_queue_is_valid``,
+ ``rte_eth_rx_avail_thresh_set``, ``rte_eth_rx_avail_thresh_query``,
+ ``rte_eth_recycle_rx_queue_info_get``,
+ ``rte_eth_dev_count_aggr_ports`` and
+ ``rte_eth_dev_map_aggr_tx_affinity``
ABI Changes
diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index 783fb817c2..4c675f1f22 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -839,7 +839,7 @@ eth_dev_validate_tx_queue(const struct rte_eth_dev *dev, uint16_t tx_queue_id)
return 0;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_rx_queue_is_valid, 23.07)
+RTE_EXPORT_SYMBOL(rte_eth_rx_queue_is_valid)
int
rte_eth_rx_queue_is_valid(uint16_t port_id, uint16_t queue_id)
{
@@ -851,7 +851,7 @@ rte_eth_rx_queue_is_valid(uint16_t port_id, uint16_t queue_id)
return eth_dev_validate_rx_queue(dev, queue_id);
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_tx_queue_is_valid, 23.07)
+RTE_EXPORT_SYMBOL(rte_eth_tx_queue_is_valid)
int
rte_eth_tx_queue_is_valid(uint16_t port_id, uint16_t queue_id)
{
@@ -5737,7 +5737,7 @@ int rte_eth_get_queue_rate_limit(uint16_t port_id, uint16_t queue_idx,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_rx_avail_thresh_set, 22.07)
+RTE_EXPORT_SYMBOL(rte_eth_rx_avail_thresh_set)
int rte_eth_rx_avail_thresh_set(uint16_t port_id, uint16_t queue_id,
uint8_t avail_thresh)
{
@@ -5770,7 +5770,7 @@ int rte_eth_rx_avail_thresh_set(uint16_t port_id, uint16_t queue_id,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_rx_avail_thresh_query, 22.07)
+RTE_EXPORT_SYMBOL(rte_eth_rx_avail_thresh_query)
int rte_eth_rx_avail_thresh_query(uint16_t port_id, uint16_t *queue_id,
uint8_t *avail_thresh)
{
@@ -6456,7 +6456,7 @@ rte_eth_tx_queue_info_get(uint16_t port_id, uint16_t queue_id,
return 0;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_recycle_rx_queue_info_get, 23.11)
+RTE_EXPORT_SYMBOL(rte_eth_recycle_rx_queue_info_get)
int
rte_eth_recycle_rx_queue_info_get(uint16_t port_id, uint16_t queue_id,
struct rte_eth_recycle_rxq_info *recycle_rxq_info)
@@ -7429,7 +7429,7 @@ rte_eth_buffer_split_get_supported_hdr_ptypes(uint16_t port_id, uint32_t *ptypes
return j;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_dev_count_aggr_ports, 23.03)
+RTE_EXPORT_SYMBOL(rte_eth_dev_count_aggr_ports)
int rte_eth_dev_count_aggr_ports(uint16_t port_id)
{
struct rte_eth_dev *dev;
@@ -7447,7 +7447,7 @@ int rte_eth_dev_count_aggr_ports(uint16_t port_id)
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_dev_map_aggr_tx_affinity, 23.03)
+RTE_EXPORT_SYMBOL(rte_eth_dev_map_aggr_tx_affinity)
int rte_eth_dev_map_aggr_tx_affinity(uint16_t port_id, uint16_t tx_queue_id,
uint8_t affinity)
{
diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
index dfb9cfd614..d18afa20c6 100644
--- a/lib/ethdev/rte_ethdev.h
+++ b/lib/ethdev/rte_ethdev.h
@@ -1913,9 +1913,6 @@ struct __rte_cache_min_aligned rte_eth_txq_info {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice.
- *
* Ethernet device Rx queue information structure for recycling mbufs.
* Used to retrieve Rx queue information when Tx queue reusing mbufs and moving
* them into Rx mbuf ring.
@@ -2685,9 +2682,6 @@ int rte_eth_hairpin_bind(uint16_t tx_port, uint16_t rx_port);
int rte_eth_hairpin_unbind(uint16_t tx_port, uint16_t rx_port);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Get the number of aggregated ports of the DPDK port (specified with port_id).
* It is used when multiple ports are aggregated into a single one.
*
@@ -2699,13 +2693,9 @@ int rte_eth_hairpin_unbind(uint16_t tx_port, uint16_t rx_port);
* @return
* - (>=0) the number of aggregated port if success.
*/
-__rte_experimental
int rte_eth_dev_count_aggr_ports(uint16_t port_id);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Map a Tx queue with an aggregated port of the DPDK port (specified with port_id).
* When multiple ports are aggregated into a single one,
* it allows choosing which port to use for Tx via a queue.
@@ -2729,7 +2719,6 @@ int rte_eth_dev_count_aggr_ports(uint16_t port_id);
* @return
* Zero if successful. Non-zero otherwise.
*/
-__rte_experimental
int rte_eth_dev_map_aggr_tx_affinity(uint16_t port_id, uint16_t tx_queue_id,
uint8_t affinity);
@@ -2759,9 +2748,6 @@ int rte_eth_dev_socket_id(uint16_t port_id);
int rte_eth_dev_is_valid_port(uint16_t port_id);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice.
- *
* Check if Rx queue is valid.
* If the queue has been setup, it is considered valid.
*
@@ -2774,13 +2760,9 @@ int rte_eth_dev_is_valid_port(uint16_t port_id);
* - -EINVAL: if queue_id is out of range or queue has not been setup.
* - 0 if Rx queue is valid.
*/
-__rte_experimental
int rte_eth_rx_queue_is_valid(uint16_t port_id, uint16_t queue_id);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice.
- *
* Check if Tx queue is valid.
* If the queue has been setup, it is considered valid.
*
@@ -2793,7 +2775,6 @@ int rte_eth_rx_queue_is_valid(uint16_t port_id, uint16_t queue_id);
* - -EINVAL: if queue_id is out of range or queue has not been setup.
* - 0 if Tx queue is valid.
*/
-__rte_experimental
int rte_eth_tx_queue_is_valid(uint16_t port_id, uint16_t queue_id);
/**
@@ -3791,9 +3772,6 @@ int rte_eth_dev_get_vlan_offload(uint16_t port_id);
int rte_eth_dev_set_vlan_pvid(uint16_t port_id, uint16_t pvid, int on);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Set Rx queue available descriptors threshold.
*
* @param port_id
@@ -3815,14 +3793,10 @@ int rte_eth_dev_set_vlan_pvid(uint16_t port_id, uint16_t pvid, int on);
* - (-ENOTSUP) if available Rx descriptors threshold is not supported.
* - (-EIO) if device is removed.
*/
-__rte_experimental
int rte_eth_rx_avail_thresh_set(uint16_t port_id, uint16_t queue_id,
uint8_t avail_thresh);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Find Rx queue with RTE_ETH_EVENT_RX_AVAIL_THRESH event pending.
*
* @param port_id
@@ -3845,7 +3819,6 @@ int rte_eth_rx_avail_thresh_set(uint16_t port_id, uint16_t queue_id,
* - (-ENOTSUP) if operation is not supported.
* - (-EIO) if device is removed.
*/
-__rte_experimental
int rte_eth_rx_avail_thresh_query(uint16_t port_id, uint16_t *queue_id,
uint8_t *avail_thresh);
@@ -5103,9 +5076,6 @@ int rte_eth_tx_queue_info_get(uint16_t port_id, uint16_t queue_id,
struct rte_eth_txq_info *qinfo);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
- *
* Retrieve information about given ports's Rx queue for recycling mbufs.
*
* @param port_id
@@ -5122,7 +5092,6 @@ int rte_eth_tx_queue_info_get(uint16_t port_id, uint16_t queue_id,
* - -ENOTSUP: routine is not supported by the device PMD.
* - -EINVAL: The queue_id is out of range.
*/
-__rte_experimental
int rte_eth_recycle_rx_queue_info_get(uint16_t port_id,
uint16_t queue_id,
struct rte_eth_recycle_rxq_info *recycle_rxq_info);
--
2.53.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 20/22] ethdev: promote remaining aged symbols to stable
2026-09-01 20:22 [PATCH 00/22] ethdev: convert experimental symbols etc Stephen Hemminger
` (18 preceding siblings ...)
2026-09-01 20:23 ` [PATCH 19/22] ethdev: promote queue helpers and aggregated ports " Stephen Hemminger
@ 2026-09-01 20:23 ` Stephen Hemminger
2026-09-01 20:23 ` [PATCH 21/22] ethdev: promote fast path inline helpers " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 22/22] ethdev: promote experimental structures " Stephen Hemminger
21 siblings, 0 replies; 24+ messages in thread
From: Stephen Hemminger @ 2026-09-01 20:23 UTC (permalink / raw)
To: dev
Cc: Stephen Hemminger, Thomas Monjalon, Andrew Rybchenko,
Cristian Dumitrescu
The last ethdev symbols that are at least two years old:
21.02 rte_eth_get_monitor_addr
21.05 rte_eth_representor_info_get
22.11 rte_eth_buffer_split_get_supported_hdr_ptypes
24.11 rte_eth_timesync_adjust_freq
24.11 rte_tm_node_query
With this the only exported, non-inline experimental symbols left in
ethdev are from 25.03 and later. The inline helpers
rte_eth_recycle_mbufs() and rte_eth_tx_queue_count(), and the trace
point symbols, keep the experimental tag and are left for later.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
doc/guides/rel_notes/release_26_11.rst | 4 ++++
lib/ethdev/rte_ethdev.c | 8 ++++----
lib/ethdev/rte_ethdev.h | 16 ----------------
lib/ethdev/rte_tm.c | 2 +-
lib/ethdev/rte_tm.h | 1 -
5 files changed, 9 insertions(+), 22 deletions(-)
diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst
index b23ffa6cb0..7254ef585c 100644
--- a/doc/guides/rel_notes/release_26_11.rst
+++ b/doc/guides/rel_notes/release_26_11.rst
@@ -151,6 +151,10 @@ API Changes
``rte_eth_recycle_rx_queue_info_get``,
``rte_eth_dev_count_aggr_ports`` and
``rte_eth_dev_map_aggr_tx_affinity``
+ * utility funcs:
+ ``rte_eth_get_monitor_addr``, ``rte_eth_representor_info_get``,
+ ``rte_eth_buffer_split_get_supported_hdr_ptypes``,
+ ``rte_eth_timesync_adjust_freq`` and ``rte_tm_node_query``
ABI Changes
diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index 4c675f1f22..62e2c0dd07 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -6547,7 +6547,7 @@ rte_eth_tx_burst_mode_get(uint16_t port_id, uint16_t queue_id,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_get_monitor_addr, 21.02)
+RTE_EXPORT_SYMBOL(rte_eth_get_monitor_addr)
int
rte_eth_get_monitor_addr(uint16_t port_id, uint16_t queue_id,
struct rte_power_monitor_cond *pmc)
@@ -6718,7 +6718,7 @@ rte_eth_timesync_adjust_time(uint16_t port_id, int64_t delta)
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_timesync_adjust_freq, 24.11)
+RTE_EXPORT_SYMBOL(rte_eth_timesync_adjust_freq)
int
rte_eth_timesync_adjust_freq(uint16_t port_id, int64_t ppm)
{
@@ -7149,7 +7149,7 @@ rte_eth_dev_pool_ops_supported(uint16_t port_id, const char *pool)
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_representor_info_get, 21.05)
+RTE_EXPORT_SYMBOL(rte_eth_representor_info_get)
int
rte_eth_representor_info_get(uint16_t port_id,
struct rte_eth_representor_info *info)
@@ -7389,7 +7389,7 @@ rte_eth_tx_descriptor_dump(uint16_t port_id, uint16_t queue_id,
dev->dev_ops->eth_tx_descriptor_dump(dev, queue_id, offset, num, file));
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_buffer_split_get_supported_hdr_ptypes, 22.11)
+RTE_EXPORT_SYMBOL(rte_eth_buffer_split_get_supported_hdr_ptypes)
int
rte_eth_buffer_split_get_supported_hdr_ptypes(uint16_t port_id, uint32_t *ptypes, int num)
{
diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
index d18afa20c6..6f18878bc5 100644
--- a/lib/ethdev/rte_ethdev.h
+++ b/lib/ethdev/rte_ethdev.h
@@ -5139,9 +5139,6 @@ int rte_eth_tx_burst_mode_get(uint16_t port_id, uint16_t queue_id,
struct rte_eth_burst_mode *mode);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Retrieve the monitor condition for a given receive queue.
*
* @param port_id
@@ -5158,7 +5155,6 @@ int rte_eth_tx_burst_mode_get(uint16_t port_id, uint16_t queue_id,
* -EINVAL: Invalid parameters.
* -ENODEV: Invalid port ID.
*/
-__rte_experimental
int rte_eth_get_monitor_addr(uint16_t port_id, uint16_t queue_id,
struct rte_power_monitor_cond *pmc);
@@ -5449,7 +5445,6 @@ int rte_eth_timesync_adjust_time(uint16_t port_id, int64_t delta);
* - -EIO: if device is removed.
* - -ENOTSUP: The function is not supported by the Ethernet driver.
*/
-__rte_experimental
int rte_eth_timesync_adjust_freq(uint16_t port_id, int64_t ppm);
/**
@@ -5636,9 +5631,6 @@ int rte_eth_dev_hairpin_capability_get(uint16_t port_id,
struct rte_eth_hairpin_cap *cap);
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice.
- *
* Ethernet device representor ID range entry
*/
struct rte_eth_representor_range {
@@ -5656,9 +5648,6 @@ struct rte_eth_representor_range {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice.
- *
* Ethernet device representor information
*/
struct rte_eth_representor_info {
@@ -5692,7 +5681,6 @@ struct rte_eth_representor_info {
* - (-EIO) if device is removed.
* - (>=0) number of available representor range entries.
*/
-__rte_experimental
int rte_eth_representor_info_get(uint16_t port_id,
struct rte_eth_representor_info *info);
@@ -6921,9 +6909,6 @@ rte_eth_recycle_mbufs(uint16_t rx_port_id, uint16_t rx_queue_id,
}
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice
- *
* Get supported header protocols to split on Rx.
*
* When a packet type is announced to be split,
@@ -6948,7 +6933,6 @@ rte_eth_recycle_mbufs(uint16_t rx_port_id, uint16_t rx_queue_id,
* - (-ENODEV) if *port_id* invalid.
* - (-EINVAL) if bad parameter.
*/
-__rte_experimental
int rte_eth_buffer_split_get_supported_hdr_ptypes(uint16_t port_id, uint32_t *ptypes, int num)
__rte_warn_unused_result;
diff --git a/lib/ethdev/rte_tm.c b/lib/ethdev/rte_tm.c
index 66b8934c3b..675d6e146d 100644
--- a/lib/ethdev/rte_tm.c
+++ b/lib/ethdev/rte_tm.c
@@ -316,7 +316,7 @@ int rte_tm_node_add(uint16_t port_id,
return ret;
}
-RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_tm_node_query, 24.11)
+RTE_EXPORT_SYMBOL(rte_tm_node_query)
int rte_tm_node_query(uint16_t port_id,
uint32_t node_id,
uint32_t *parent_node_id,
diff --git a/lib/ethdev/rte_tm.h b/lib/ethdev/rte_tm.h
index c9dd760858..c393b86b3b 100644
--- a/lib/ethdev/rte_tm.h
+++ b/lib/ethdev/rte_tm.h
@@ -1638,7 +1638,6 @@ rte_tm_node_add(uint16_t port_id,
* -EINVAL - port or node id value is invalid
* -ENOENT - no node exists with the provided id on the provided port
*/
-__rte_experimental
int
rte_tm_node_query(uint16_t port_id,
uint32_t node_id,
--
2.53.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 21/22] ethdev: promote fast path inline helpers to stable
2026-09-01 20:22 [PATCH 00/22] ethdev: convert experimental symbols etc Stephen Hemminger
` (19 preceding siblings ...)
2026-09-01 20:23 ` [PATCH 20/22] ethdev: promote remaining aged symbols " Stephen Hemminger
@ 2026-09-01 20:23 ` Stephen Hemminger
2026-09-01 20:23 ` [PATCH 22/22] ethdev: promote experimental structures " Stephen Hemminger
21 siblings, 0 replies; 24+ messages in thread
From: Stephen Hemminger @ 2026-09-01 20:23 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Thomas Monjalon, Andrew Rybchenko
The two remaining experimental fast path inline helpers are both at
least two years old:
23.11 rte_eth_recycle_mbufs
24.03 rte_eth_tx_queue_count
The trace point symbols these call are deliberately left experimental.
Trace infrastructure is intended to stay unstable, and promoting it
would add an ABI contract that is not wanted.
This does not affect users of the inline functions.
RTE_EXPORT_EXPERIMENTAL_SYMBOL only places the symbol in the
EXPERIMENTAL version node; it is not a __rte_experimental attribute on
the declaration, so it does not warn in application code built without
ALLOW_EXPERIMENTAL_API.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
doc/guides/rel_notes/release_26_11.rst | 2 ++
lib/ethdev/rte_ethdev.h | 8 --------
2 files changed, 2 insertions(+), 8 deletions(-)
diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst
index 7254ef585c..bf31d0dc6d 100644
--- a/doc/guides/rel_notes/release_26_11.rst
+++ b/doc/guides/rel_notes/release_26_11.rst
@@ -155,6 +155,8 @@ API Changes
``rte_eth_get_monitor_addr``, ``rte_eth_representor_info_get``,
``rte_eth_buffer_split_get_supported_hdr_ptypes``,
``rte_eth_timesync_adjust_freq`` and ``rte_tm_node_query``
+ * fast path inline funcs:
+ ``rte_eth_recycle_mbufs`` and ``rte_eth_tx_queue_count``
ABI Changes
diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
index 6f18878bc5..ed350ae1bd 100644
--- a/lib/ethdev/rte_ethdev.h
+++ b/lib/ethdev/rte_ethdev.h
@@ -6782,9 +6782,6 @@ rte_eth_tx_buffer(uint16_t port_id, uint16_t queue_id,
}
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice
- *
* Recycle used mbufs from a transmit queue of an Ethernet device, and move
* these mbufs into a mbuf ring for a receive queue of an Ethernet device.
* This can bypass mempool path to save CPU cycles.
@@ -6834,7 +6831,6 @@ rte_eth_tx_buffer(uint16_t port_id, uint16_t queue_id,
* @return
* The number of recycling mbufs.
*/
-__rte_experimental
static inline uint16_t
rte_eth_recycle_mbufs(uint16_t rx_port_id, uint16_t rx_queue_id,
uint16_t tx_port_id, uint16_t tx_queue_id,
@@ -6937,9 +6933,6 @@ int rte_eth_buffer_split_get_supported_hdr_ptypes(uint16_t port_id, uint32_t *pt
__rte_warn_unused_result;
/**
- * @warning
- * @b EXPERIMENTAL: this API may change, or be removed, without prior notice.
- *
* Get the number of used descriptors of a Tx queue.
*
* This function retrieves the number of used descriptors of a transmit queue.
@@ -6970,7 +6963,6 @@ int rte_eth_buffer_split_get_supported_hdr_ptypes(uint16_t port_id, uint32_t *pt
* If the use case only involves checking the status of a specific descriptor slot,
* opt for rte_eth_tx_descriptor_status() instead.
*/
-__rte_experimental
static inline int
rte_eth_tx_queue_count(uint16_t port_id, uint16_t queue_id)
{
--
2.53.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 22/22] ethdev: promote experimental structures to stable
2026-09-01 20:22 [PATCH 00/22] ethdev: convert experimental symbols etc Stephen Hemminger
` (20 preceding siblings ...)
2026-09-01 20:23 ` [PATCH 21/22] ethdev: promote fast path inline helpers " Stephen Hemminger
@ 2026-09-01 20:23 ` Stephen Hemminger
21 siblings, 0 replies; 24+ messages in thread
From: Stephen Hemminger @ 2026-09-01 20:23 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Thomas Monjalon, Andrew Rybchenko, Ori Kam
The doxygen EXPERIMENTAL warnings on structures and enumerations were
never cleaned up along with the functions that use them. All of the
remaining ones in ethdev are at least two years old:
21.05 rte_eth_rxseg_split, rte_eth_rxseg, rte_eth_rxseg_capa
22.11 rte_eth_err_handle_mode
and in rte_flow every remaining item, action, template and async
operation structure, the oldest from 21.05 and the newest
rte_flow_action_jump_to_table_index from 24.11.
These are only documentation comments; the structures themselves are
already part of the ABI because they are embedded in stable API
signatures.
Two flex item structures had no description other than the warning
itself, so give them one instead of leaving an empty comment block.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
doc/guides/rel_notes/release_26_11.rst | 4 +
lib/ethdev/rte_ethdev.h | 12 --
lib/ethdev/rte_flow.h | 169 +------------------------
3 files changed, 9 insertions(+), 176 deletions(-)
diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst
index bf31d0dc6d..760f49c496 100644
--- a/doc/guides/rel_notes/release_26_11.rst
+++ b/doc/guides/rel_notes/release_26_11.rst
@@ -157,6 +157,10 @@ API Changes
``rte_eth_timesync_adjust_freq`` and ``rte_tm_node_query``
* fast path inline funcs:
``rte_eth_recycle_mbufs`` and ``rte_eth_tx_queue_count``
+ * buffer split and error handling types:
+ ``rte_eth_rxseg_split``, ``rte_eth_rxseg``, ``rte_eth_rxseg_capa``
+ and ``rte_eth_err_handle_mode``
+ * all remaining ``rte_flow`` item, action and async operation structures
ABI Changes
diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
index ed350ae1bd..a1b0eebbe2 100644
--- a/lib/ethdev/rte_ethdev.h
+++ b/lib/ethdev/rte_ethdev.h
@@ -1061,9 +1061,6 @@ struct rte_eth_txmode {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice.
- *
* A structure used to configure an Rx packet segment to split.
*
* If RTE_ETH_RX_OFFLOAD_BUFFER_SPLIT flag is set in offloads field,
@@ -1149,9 +1146,6 @@ struct rte_eth_rxseg_split {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice.
- *
* A common structure used to describe Rx packet segment properties.
*/
union rte_eth_rxseg {
@@ -1740,9 +1734,6 @@ struct rte_eth_switch_info {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice.
- *
* Ethernet device Rx buffer segmentation capabilities.
*
* @see rte_eth_rxseg_split
@@ -1772,9 +1763,6 @@ enum rte_eth_representor_type {
};
/**
- * @warning
- * @b EXPERIMENTAL: this enumeration may change without prior notice.
- *
* Ethernet device error handling mode.
*/
enum rte_eth_err_handle_mode {
diff --git a/lib/ethdev/rte_flow.h b/lib/ethdev/rte_flow.h
index f7523bdf8f..1bfe1b3f61 100644
--- a/lib/ethdev/rte_flow.h
+++ b/lib/ethdev/rte_flow.h
@@ -727,9 +727,6 @@ enum rte_flow_item_type {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* QUOTA state.
*
* @see struct rte_flow_item_quota
@@ -1012,9 +1009,6 @@ static const struct rte_flow_item_ipv6 rte_flow_item_ipv6_mask = {
#endif
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice.
- *
* RTE_FLOW_ITEM_TYPE_IPV6_ROUTING_EXT.
*
* Matches an IPv6 routing extension header.
@@ -1687,9 +1681,6 @@ rte_flow_item_pppoe_proto_id_mask = {
#endif
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ITEM_TYPE_TAG
*
* Matches a specified tag value at the specified index.
@@ -1725,9 +1716,6 @@ static const struct rte_flow_item_l2tpv3oip rte_flow_item_l2tpv3oip_mask = {
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ITEM_TYPE_MARK
*
* Matches an arbitrary integer value which was set using the ``MARK`` action
@@ -1754,9 +1742,6 @@ static const struct rte_flow_item_mark rte_flow_item_mark_mask = {
#endif
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ITEM_TYPE_NSH
*
* Match network service header (NSH), RFC 8300
@@ -1785,9 +1770,6 @@ static const struct rte_flow_item_nsh rte_flow_item_nsh_mask = {
#endif
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ITEM_TYPE_IGMP
*
* Match Internet Group Management Protocol (IGMP), RFC 2236
@@ -1807,9 +1789,6 @@ static const struct rte_flow_item_igmp rte_flow_item_igmp_mask = {
#endif
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ITEM_TYPE_AH
*
* Match IP Authentication Header (AH), RFC 4302
@@ -1830,9 +1809,6 @@ static const struct rte_flow_item_ah rte_flow_item_ah_mask = {
#endif
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ITEM_TYPE_PFCP
*
* Match PFCP Header
@@ -1853,9 +1829,6 @@ static const struct rte_flow_item_pfcp rte_flow_item_pfcp_mask = {
#endif
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ITEM_TYPE_ECPRI
*
* Match eCPRI Header
@@ -1896,9 +1869,6 @@ rte_flow_item_geneve_opt_mask = {
#endif
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ITEM_TYPE_INTEGRITY
*
* Match on packet integrity check result.
@@ -1966,9 +1936,6 @@ rte_flow_item_integrity_mask = {
#define RTE_FLOW_CONNTRACK_PKT_STATE_BAD RTE_BIT32(4)
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ITEM_TYPE_CONNTRACK
*
* Matches the state of a packet after it passed the connection tracking
@@ -2003,9 +1970,6 @@ static const struct rte_flow_item_ethdev rte_flow_item_ethdev_mask = {
#endif
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ITEM_TYPE_L2TPV2
*
* Matches L2TPv2 Header
@@ -2031,9 +1995,6 @@ static const struct rte_flow_item_l2tpv2 rte_flow_item_l2tpv2_mask = {
#endif
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ITEM_TYPE_PPP
*
* Matches PPP Header
@@ -2073,9 +2034,6 @@ static const struct rte_flow_item_ib_bth rte_flow_item_ib_bth_mask = {
#endif
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice.
- *
* RTE_FLOW_ITEM_TYPE_RANDOM
*
* Matches a random value.
@@ -2132,9 +2090,6 @@ struct rte_flow_item {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ITEM_TYPE_FLEX
*
* Matches a specified set of fields within the network protocol
@@ -2217,9 +2172,7 @@ enum rte_flow_item_flex_tunnel_mode {
};
/**
- *
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
+ * Description of a single field of a flex item.
*/
__extension__
struct rte_flow_item_flex_field {
@@ -2235,8 +2188,7 @@ struct rte_flow_item_flex_field {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
+ * Description of a link between a flex item and its neighbour headers.
*/
struct rte_flow_item_flex_link {
/**
@@ -2252,6 +2204,9 @@ struct rte_flow_item_flex_link {
uint32_t next;
};
+/**
+ * Flex item configuration: field descriptions and neighbour links.
+ */
struct rte_flow_item_flex_conf {
/**
* Specifies the flex item and tunnel relations and tells the PMD
@@ -2315,9 +2270,6 @@ static const struct rte_flow_item_meter_color rte_flow_item_meter_color_mask = {
#endif
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ITEM_TYPE_AGGR_AFFINITY
*
* For multiple ports aggregated to a single DPDK port,
@@ -2436,9 +2388,6 @@ enum rte_flow_field_id {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice.
- *
* Packet header field descriptions, used by RTE_FLOW_ACTION_TYPE_MODIFY_FIELD
* and RTE_FLOW_ITEM_TYPE_COMPARE.
*/
@@ -3262,9 +3211,6 @@ enum rte_flow_action_type {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* QUOTA operational mode.
*
* @see struct rte_flow_action_quota
@@ -3276,9 +3222,6 @@ enum rte_flow_quota_mode {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Create QUOTA action.
*
* @see RTE_FLOW_ACTION_TYPE_QUOTA
@@ -3289,9 +3232,6 @@ struct rte_flow_action_quota {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Query indirect QUOTA action.
*
* @see RTE_FLOW_ACTION_TYPE_QUOTA
@@ -3301,9 +3241,6 @@ struct rte_flow_query_quota {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Indirect QUOTA update operations.
*
* @see struct rte_flow_update_quota
@@ -3314,9 +3251,6 @@ enum rte_flow_update_quota_op {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* @see RTE_FLOW_ACTION_TYPE_QUOTA
*
* Update indirect QUOTA action.
@@ -3341,9 +3275,6 @@ struct rte_flow_action_mark {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ACTION_TYPE_JUMP
*
* Redirects packets to a group on the current device.
@@ -3366,9 +3297,6 @@ struct rte_flow_action_queue {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ACTION_TYPE_AGE
*
* Report flow as aged-out if timeout passed without any matching
@@ -3400,9 +3328,6 @@ struct rte_flow_query_age {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ACTION_TYPE_AGE
*
* Update indirect AGE action attributes:
@@ -3427,9 +3352,6 @@ struct rte_flow_update_age {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ACTION_TYPE_COUNT
*
* Adds a counter action to a matched flow.
@@ -3606,9 +3528,6 @@ enum rte_flow_nat64_type {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice.
- *
* RTE_FLOW_ACTION_TYPE_NAT64
*
* Specify the NAT64 translation type.
@@ -3668,9 +3587,6 @@ struct rte_flow_action_of_push_mpls {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ACTION_TYPE_VXLAN_ENCAP
*
* VXLAN tunnel end-point encapsulation data definition
@@ -3702,9 +3618,6 @@ struct rte_flow_action_vxlan_encap {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ACTION_TYPE_NVGRE_ENCAP
*
* NVGRE tunnel end-point encapsulation data definition
@@ -3735,9 +3648,6 @@ struct rte_flow_action_nvgre_encap {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ACTION_TYPE_RAW_ENCAP
*
* Raw tunnel end-point encapsulation data definition.
@@ -3760,9 +3670,6 @@ struct rte_flow_action_raw_encap {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ACTION_TYPE_RAW_DECAP
*
* Raw tunnel end-point decapsulation data definition.
@@ -3780,9 +3687,6 @@ struct rte_flow_action_raw_decap {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ACTION_TYPE_SET_IPV4_SRC
* RTE_FLOW_ACTION_TYPE_SET_IPV4_DST
*
@@ -3795,9 +3699,6 @@ struct rte_flow_action_set_ipv4 {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ACTION_TYPE_SET_IPV6_SRC
* RTE_FLOW_ACTION_TYPE_SET_IPV6_DST
*
@@ -3810,9 +3711,6 @@ struct rte_flow_action_set_ipv6 {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice.
- *
* RTE_FLOW_ACTION_TYPE_IPV6_EXT_PUSH
*
* Valid flow definition for RTE_FLOW_ACTION_TYPE_IPV6_EXT_PUSH include:
@@ -3828,9 +3726,6 @@ struct rte_flow_action_ipv6_ext_push {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice.
- *
* RTE_FLOW_ACTION_TYPE_IPV6_EXT_REMOVE
*
* Valid flow definition for RTE_FLOW_ACTION_TYPE_IPV6_EXT_REMOVE include:
@@ -3842,9 +3737,6 @@ struct rte_flow_action_ipv6_ext_remove {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ACTION_TYPE_SET_TP_SRC
* RTE_FLOW_ACTION_TYPE_SET_TP_DST
*
@@ -3875,9 +3767,6 @@ struct rte_flow_action_set_mac {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ACTION_TYPE_SET_TAG
*
* Set a tag which is a transient data used during flow matching. This is not
@@ -3890,9 +3779,6 @@ struct rte_flow_action_set_tag {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ACTION_TYPE_SET_META
*
* Set metadata. Metadata set by mbuf metadata dynamic field with
@@ -3925,9 +3811,6 @@ struct rte_flow_action_set_dscp {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ACTION_TYPE_INDIRECT
*
* Opaque type returned after successfully creating an indirect action object.
@@ -3974,9 +3857,6 @@ enum rte_flow_conntrack_tcp_last_index {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* Configuration parameters for each direction of a TCP connection.
* All fields should be in host byte order.
* If needed, driver should convert all fields to network byte order
@@ -4011,9 +3891,6 @@ struct rte_flow_tcp_dir_param {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ACTION_TYPE_CONNTRACK
*
* Configuration and initial state for the connection tracking module.
@@ -4092,9 +3969,6 @@ struct rte_flow_modify_conntrack {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ACTION_TYPE_METER_COLOR
*
* The meter color should be set in the packet meta-data
@@ -4123,9 +3997,6 @@ enum rte_flow_modify_op {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ACTION_TYPE_MODIFY_FIELD
*
* Modify a destination header field according to the specified
@@ -4194,9 +4065,6 @@ struct rte_flow_indirect_update_flow_meter_mark {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice.
- *
* Program action argument configuration parameters.
*
* For each action argument, its *size* must be non-zero and its *value* must
@@ -4214,9 +4082,6 @@ struct rte_flow_action_prog_argument {
};
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice.
- *
* RTE_FLOW_ACTION_TYPE_PROG
*
* Program action configuration parameters.
@@ -4262,9 +4127,6 @@ rte_flow_dynf_metadata_set(struct rte_mbuf *m, uint32_t v)
}
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ACTION_TYPE_JUMP_TO_TABLE_INDEX
*
* Redirects packets to a particular index in a flow table.
@@ -4309,9 +4171,6 @@ struct rte_flow_meter_profile;
struct rte_flow_meter_policy;
/**
- * @warning
- * @b EXPERIMENTAL: this structure may change without prior notice
- *
* RTE_FLOW_ACTION_TYPE_SAMPLE
*
* Adds a sample action to a matched flow.
@@ -5615,9 +5474,6 @@ rte_flow_configure(uint16_t port_id,
struct rte_flow_pattern_template;
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Flow pattern template attributes.
*/
__extension__
@@ -5701,9 +5557,6 @@ rte_flow_pattern_template_destroy(uint16_t port_id,
struct rte_flow_actions_template;
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Flow actions template attributes.
*/
__extension__
@@ -5987,9 +5840,6 @@ rte_flow_group_set_miss_actions(uint16_t port_id,
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Asynchronous operation attributes.
*/
__extension__
@@ -6228,9 +6078,6 @@ rte_flow_push(uint16_t port_id,
struct rte_flow_error *error);
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Asynchronous operation status.
*/
enum rte_flow_op_status {
@@ -6245,9 +6092,6 @@ enum rte_flow_op_status {
};
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Asynchronous operation result.
*/
__extension__
@@ -6521,9 +6365,6 @@ rte_flow_async_action_handle_query_update(uint16_t port_id, uint32_t queue_id,
struct rte_flow_action_list_handle;
/**
- * @warning
- * @b EXPERIMENTAL: this API may change without prior notice.
- *
* Configure INDIRECT_LIST flow action.
*
* @see RTE_FLOW_ACTION_TYPE_INDIRECT_LIST
--
2.53.0
^ permalink raw reply related [flat|nested] 24+ messages in thread
* Re: [PATCH 07/22] ethdev: promote link speed helpers to stable
2026-09-01 20:23 ` [PATCH 07/22] ethdev: promote link speed helpers " Stephen Hemminger
@ 2026-09-02 8:05 ` Bruce Richardson
0 siblings, 0 replies; 24+ messages in thread
From: Bruce Richardson @ 2026-09-02 8:05 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: dev, Thomas Monjalon, Andrew Rybchenko
On Tue, Sep 01, 2026 at 01:23:06PM -0700, Stephen Hemminger wrote:
> rte_eth_link_speed_to_str() and rte_eth_link_to_str() were added in
> v20.11 to give applications a common way to format link information
> instead of open coding it. Both are unchanged since.
>
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
> ---
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
^ permalink raw reply [flat|nested] 24+ messages in thread
end of thread, other threads:[~2026-09-02 8:06 UTC | newest]
Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-01 20:22 [PATCH 00/22] ethdev: convert experimental symbols etc Stephen Hemminger
2026-09-01 20:23 ` [PATCH 01/22] ethdev: promote meter API to stable Stephen Hemminger
2026-09-01 20:23 ` [PATCH 02/22] ethdev: promote module EEPROM " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 03/22] ethdev: promote rte_flow_conv " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 04/22] ethdev: promote hairpin API " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 05/22] ethdev: promote read clock and flow dump " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 06/22] ethdev: promote FEC API " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 07/22] ethdev: promote link speed helpers " Stephen Hemminger
2026-09-02 8:05 ` Bruce Richardson
2026-09-01 20:23 ` [PATCH 08/22] ethdev: promote flow tunnel offload API " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 09/22] ethdev: promote aged flow query " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 10/22] ethdev: promote indirect action API " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 11/22] ethdev: promote asynchronous flow " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 12/22] ethdev: promote flex item " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 13/22] ethdev: promote remaining aged flow helpers " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 14/22] ethdev: promote congestion management API " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 15/22] ethdev: promote IP reassembly offload " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 16/22] ethdev: promote per-queue priority flow control " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 17/22] ethdev: promote device info and dump helpers " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 18/22] ethdev: promote speed lanes API " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 19/22] ethdev: promote queue helpers and aggregated ports " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 20/22] ethdev: promote remaining aged symbols " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 21/22] ethdev: promote fast path inline helpers " Stephen Hemminger
2026-09-01 20:23 ` [PATCH 22/22] ethdev: promote experimental structures " Stephen Hemminger
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).