[v3,29/29] port: make API's stable

Message ID 20231019165559.115742-30-stephen@networkplumber.org (mailing list archive)
State Superseded, archived
Delegated to: Thomas Monjalon
Headers
Series Promote experimental API's to stable. |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/loongarch-compilation success Compilation OK
ci/loongarch-unit-testing success Unit Testing PASS
ci/Intel-compilation fail Compilation issues
ci/github-robot: build fail github build: failed
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-broadcom-Performance success Performance Testing PASS
ci/iol-broadcom-Functional success Functional Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-compile-amd64-testing fail Testing issues
ci/iol-unit-amd64-testing success Testing PASS
ci/iol-unit-arm64-testing success Testing PASS
ci/iol-compile-arm64-testing fail Testing issues

Commit Message

Stephen Hemminger Oct. 19, 2023, 4:55 p.m. UTC
  Follow the guidelines already in deprecation.rst and
make the API's stable, even though they are marked as deprecated.

Note: this library never properly marked its experimental API's.
The API's were in the EXPERIMENTAL section but the macro
__rte_experimental was missing.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 doc/guides/rel_notes/deprecation.rst |   4 -
 lib/pipeline/rte_port_in_action.h    |   8 --
 lib/pipeline/rte_swx_ctl.h           |  57 -----------
 lib/pipeline/rte_swx_pipeline.h      |  29 ------
 lib/pipeline/rte_table_action.h      |  16 ---
 lib/pipeline/version.map             | 140 ++++++++++++---------------
 lib/port/version.map                 |  24 ++---
 7 files changed, 69 insertions(+), 209 deletions(-)
  

Patch

diff --git a/doc/guides/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst
index 2526040e44f9..601a9044e3d8 100644
--- a/doc/guides/rel_notes/deprecation.rst
+++ b/doc/guides/rel_notes/deprecation.rst
@@ -134,13 +134,9 @@  Deprecation Notices
 
 * pipeline: The pipeline library legacy API (functions rte_pipeline_*)
   will be deprecated and subsequently removed in DPDK 24.11 release.
-  Before this, the new pipeline library API (functions rte_swx_pipeline_*)
-  will gradually transition from experimental to stable status.
 
 * table: The table library legacy API (functions rte_table_*)
   will be deprecated and subsequently removed in DPDK 24.11 release.
 
 * port: The port library legacy API (functions rte_port_*)
   will be deprecated and subsequently removed in DPDK 24.11 release.
-  Before this, the new port library API (functions rte_swx_port_*)
-  will gradually transition from experimental to stable status.
diff --git a/lib/pipeline/rte_port_in_action.h b/lib/pipeline/rte_port_in_action.h
index ec2994599f61..884c45bbd683 100644
--- a/lib/pipeline/rte_port_in_action.h
+++ b/lib/pipeline/rte_port_in_action.h
@@ -172,7 +172,6 @@  struct rte_port_in_action_profile;
  * @return
  *   Input port action profile handle on success, NULL otherwise.
  */
-__rte_experimental
 struct rte_port_in_action_profile *
 rte_port_in_action_profile_create(uint32_t socket_id);
 
@@ -185,7 +184,6 @@  rte_port_in_action_profile_create(uint32_t socket_id);
  * @return
  *   Always zero.
  */
-__rte_experimental
 int
 rte_port_in_action_profile_free(struct rte_port_in_action_profile *profile);
 
@@ -204,7 +202,6 @@  rte_port_in_action_profile_free(struct rte_port_in_action_profile *profile);
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-__rte_experimental
 int
 rte_port_in_action_profile_action_register(
 	struct rte_port_in_action_profile *profile,
@@ -227,7 +224,6 @@  rte_port_in_action_profile_action_register(
  *
  * @see rte_port_in_action_create()
  */
-__rte_experimental
 int
 rte_port_in_action_profile_freeze(struct rte_port_in_action_profile *profile);
 
@@ -250,7 +246,6 @@  struct rte_port_in_action;
  * @return
  *   Handle to input port action object on success, NULL on error.
  */
-__rte_experimental
 struct rte_port_in_action *
 rte_port_in_action_create(struct rte_port_in_action_profile *profile,
 	uint32_t socket_id);
@@ -264,7 +259,6 @@  rte_port_in_action_create(struct rte_port_in_action_profile *profile,
  * @return
  *   Always zero.
  */
-__rte_experimental
 int
 rte_port_in_action_free(struct rte_port_in_action *action);
 
@@ -278,7 +272,6 @@  rte_port_in_action_free(struct rte_port_in_action *action);
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-__rte_experimental
 int
 rte_port_in_action_params_get(struct rte_port_in_action *action,
 	struct rte_pipeline_port_in_params *params);
@@ -298,7 +291,6 @@  rte_port_in_action_params_get(struct rte_port_in_action *action,
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-__rte_experimental
 int
 rte_port_in_action_apply(struct rte_port_in_action *action,
 	enum rte_port_in_action_type type,
diff --git a/lib/pipeline/rte_swx_ctl.h b/lib/pipeline/rte_swx_ctl.h
index 6ef2551ab534..28b68d48e753 100644
--- a/lib/pipeline/rte_swx_ctl.h
+++ b/lib/pipeline/rte_swx_ctl.h
@@ -83,7 +83,6 @@  struct rte_swx_ctl_pipeline_info {
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_pipeline_info_get(struct rte_swx_pipeline *p,
 			      struct rte_swx_ctl_pipeline_info *pipeline);
@@ -99,7 +98,6 @@  rte_swx_ctl_pipeline_info_get(struct rte_swx_pipeline *p,
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_pipeline_numa_node_get(struct rte_swx_pipeline *p,
 				   int *numa_node);
@@ -121,7 +119,6 @@  rte_swx_ctl_pipeline_numa_node_get(struct rte_swx_pipeline *p,
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_pipeline_port_in_stats_read(struct rte_swx_pipeline *p,
 					uint32_t port_id,
@@ -140,7 +137,6 @@  rte_swx_ctl_pipeline_port_in_stats_read(struct rte_swx_pipeline *p,
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_pipeline_port_out_stats_read(struct rte_swx_pipeline *p,
 					 uint32_t port_id,
@@ -172,7 +168,6 @@  struct rte_swx_ctl_action_info {
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_action_info_get(struct rte_swx_pipeline *p,
 			    uint32_t action_id,
@@ -208,7 +203,6 @@  struct rte_swx_ctl_action_arg_info {
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_action_arg_info_get(struct rte_swx_pipeline *p,
 				uint32_t action_id,
@@ -259,7 +253,6 @@  struct rte_swx_ctl_table_info {
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_table_info_get(struct rte_swx_pipeline *p,
 			   uint32_t table_id,
@@ -303,7 +296,6 @@  struct rte_swx_ctl_table_match_field_info {
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_table_match_field_info_get(struct rte_swx_pipeline *p,
 	uint32_t table_id,
@@ -340,7 +332,6 @@  struct rte_swx_ctl_table_action_info {
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_table_action_info_get(struct rte_swx_pipeline *p,
 	uint32_t table_id,
@@ -366,7 +357,6 @@  rte_swx_ctl_table_action_info_get(struct rte_swx_pipeline *p,
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_table_ops_get(struct rte_swx_pipeline *p,
 			  uint32_t table_id,
@@ -405,7 +395,6 @@  struct rte_swx_table_stats {
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_pipeline_table_stats_read(struct rte_swx_pipeline *p,
 				      const char *table_name,
@@ -443,7 +432,6 @@  struct rte_swx_ctl_selector_info {
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_selector_info_get(struct rte_swx_pipeline *p,
 			      uint32_t selector_id,
@@ -462,7 +450,6 @@  rte_swx_ctl_selector_info_get(struct rte_swx_pipeline *p,
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_selector_group_id_field_info_get(struct rte_swx_pipeline *p,
 					     uint32_t selector_id,
@@ -483,7 +470,6 @@  rte_swx_ctl_selector_group_id_field_info_get(struct rte_swx_pipeline *p,
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_selector_field_info_get(struct rte_swx_pipeline *p,
 				    uint32_t selector_id,
@@ -503,7 +489,6 @@  rte_swx_ctl_selector_field_info_get(struct rte_swx_pipeline *p,
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_selector_member_id_field_info_get(struct rte_swx_pipeline *p,
 					      uint32_t selector_id,
@@ -528,7 +513,6 @@  struct rte_swx_pipeline_selector_stats {
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_pipeline_selector_stats_read(struct rte_swx_pipeline *p,
 					 const char *selector_name,
@@ -575,7 +559,6 @@  struct rte_swx_ctl_learner_info {
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_learner_info_get(struct rte_swx_pipeline *p,
 			     uint32_t learner_id,
@@ -596,7 +579,6 @@  rte_swx_ctl_learner_info_get(struct rte_swx_pipeline *p,
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_learner_match_field_info_get(struct rte_swx_pipeline *p,
 					 uint32_t learner_id,
@@ -620,7 +602,6 @@  rte_swx_ctl_learner_match_field_info_get(struct rte_swx_pipeline *p,
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_learner_action_info_get(struct rte_swx_pipeline *p,
 				    uint32_t learner_id,
@@ -642,7 +623,6 @@  rte_swx_ctl_learner_action_info_get(struct rte_swx_pipeline *p,
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_pipeline_learner_timeout_get(struct rte_swx_pipeline *p,
 					 uint32_t learner_id,
@@ -664,7 +644,6 @@  rte_swx_ctl_pipeline_learner_timeout_get(struct rte_swx_pipeline *p,
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_pipeline_learner_timeout_set(struct rte_swx_pipeline *p,
 					 uint32_t learner_id,
@@ -714,7 +693,6 @@  struct rte_swx_learner_stats {
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_pipeline_learner_stats_read(struct rte_swx_pipeline *p,
 				      const char *learner_name,
@@ -750,7 +728,6 @@  struct rte_swx_pipeline_mirroring_session_params {
  *   -EINVAL: Invalid argument;
  *   -EEXIST: Pipeline was already built successfully.
  */
-__rte_experimental
 int
 rte_swx_ctl_pipeline_mirroring_session_set(struct rte_swx_pipeline *p,
 	uint32_t session_id,
@@ -790,7 +767,6 @@  struct rte_swx_table_state {
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_pipeline_table_state_get(struct rte_swx_pipeline *p,
 				 struct rte_swx_table_state **table_state);
@@ -809,7 +785,6 @@  rte_swx_pipeline_table_state_get(struct rte_swx_pipeline *p,
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_pipeline_table_state_set(struct rte_swx_pipeline *p,
 				 struct rte_swx_table_state *table_state);
@@ -829,7 +804,6 @@  struct rte_swx_ctl_pipeline;
  * @return
  *   Valid pipeline control handle if found or NULL otherwise.
  */
-__rte_experimental
 struct rte_swx_ctl_pipeline *
 rte_swx_ctl_pipeline_find(const char *name);
 
@@ -841,7 +815,6 @@  rte_swx_ctl_pipeline_find(const char *name);
  * @return
  *   Pipeline control handle, on success, or NULL, on error.
  */
-__rte_experimental
 struct rte_swx_ctl_pipeline *
 rte_swx_ctl_pipeline_create(struct rte_swx_pipeline *p);
 
@@ -861,7 +834,6 @@  rte_swx_ctl_pipeline_create(struct rte_swx_pipeline *p);
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_pipeline_table_entry_add(struct rte_swx_ctl_pipeline *ctl,
 				     const char *table_name,
@@ -883,7 +855,6 @@  rte_swx_ctl_pipeline_table_entry_add(struct rte_swx_ctl_pipeline *ctl,
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_pipeline_table_default_entry_add(struct rte_swx_ctl_pipeline *ctl,
 					     const char *table_name,
@@ -906,7 +877,6 @@  rte_swx_ctl_pipeline_table_default_entry_add(struct rte_swx_ctl_pipeline *ctl,
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_pipeline_table_entry_delete(struct rte_swx_ctl_pipeline *ctl,
 					const char *table_name,
@@ -931,7 +901,6 @@  rte_swx_ctl_pipeline_table_entry_delete(struct rte_swx_ctl_pipeline *ctl,
  *   -EINVAL: Invalid argument;
  *   -ENOSPC: All groups are currently in use, no group available.
  */
-__rte_experimental
 int
 rte_swx_ctl_pipeline_selector_group_add(struct rte_swx_ctl_pipeline *ctl,
 					const char *selector_name,
@@ -954,7 +923,6 @@  rte_swx_ctl_pipeline_selector_group_add(struct rte_swx_ctl_pipeline *ctl,
  *   -EINVAL: Invalid argument;
  *   -ENOMEM: Not enough memory.
  */
-__rte_experimental
 int
 rte_swx_ctl_pipeline_selector_group_delete(struct rte_swx_ctl_pipeline *ctl,
 					   const char *selector_name,
@@ -984,7 +952,6 @@  rte_swx_ctl_pipeline_selector_group_delete(struct rte_swx_ctl_pipeline *ctl,
  *   -ENOMEM: Not enough memory;
  *   -ENOSPC: The group is full.
  */
-__rte_experimental
 int
 rte_swx_ctl_pipeline_selector_group_member_add(struct rte_swx_ctl_pipeline *ctl,
 					       const char *selector_name,
@@ -1010,7 +977,6 @@  rte_swx_ctl_pipeline_selector_group_member_add(struct rte_swx_ctl_pipeline *ctl,
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_pipeline_selector_group_member_delete(struct rte_swx_ctl_pipeline *ctl,
 						  const char *selector_name,
@@ -1032,7 +998,6 @@  rte_swx_ctl_pipeline_selector_group_member_delete(struct rte_swx_ctl_pipeline *c
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_pipeline_learner_default_entry_add(struct rte_swx_ctl_pipeline *ctl,
 					       const char *learner_name,
@@ -1053,7 +1018,6 @@  rte_swx_ctl_pipeline_learner_default_entry_add(struct rte_swx_ctl_pipeline *ctl,
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_pipeline_commit(struct rte_swx_ctl_pipeline *ctl,
 			    int abort_on_fail);
@@ -1066,7 +1030,6 @@  rte_swx_ctl_pipeline_commit(struct rte_swx_ctl_pipeline *ctl,
  * @param[in] ctl
  *   Pipeline control handle.
  */
-__rte_experimental
 void
 rte_swx_ctl_pipeline_abort(struct rte_swx_ctl_pipeline *ctl);
 
@@ -1089,7 +1052,6 @@  rte_swx_ctl_pipeline_abort(struct rte_swx_ctl_pipeline *ctl);
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 struct rte_swx_table_entry *
 rte_swx_ctl_pipeline_table_entry_read(struct rte_swx_ctl_pipeline *ctl,
 				      const char *table_name,
@@ -1115,7 +1077,6 @@  rte_swx_ctl_pipeline_table_entry_read(struct rte_swx_ctl_pipeline *ctl,
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 struct rte_swx_table_entry *
 rte_swx_ctl_pipeline_learner_default_entry_read(struct rte_swx_ctl_pipeline *ctl,
 						const char *learner_name,
@@ -1137,7 +1098,6 @@  rte_swx_ctl_pipeline_learner_default_entry_read(struct rte_swx_ctl_pipeline *ctl
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_pipeline_table_fprintf(FILE *f,
 				   struct rte_swx_ctl_pipeline *ctl,
@@ -1158,7 +1118,6 @@  rte_swx_ctl_pipeline_table_fprintf(FILE *f,
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_pipeline_selector_fprintf(FILE *f,
 				      struct rte_swx_ctl_pipeline *ctl,
@@ -1190,7 +1149,6 @@  struct rte_swx_ctl_regarray_info {
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_regarray_info_get(struct rte_swx_pipeline *p,
 			      uint32_t regarray_id,
@@ -1211,7 +1169,6 @@  rte_swx_ctl_regarray_info_get(struct rte_swx_pipeline *p,
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_pipeline_regarray_read(struct rte_swx_pipeline *p,
 				   const char *regarray_name,
@@ -1233,7 +1190,6 @@  rte_swx_ctl_pipeline_regarray_read(struct rte_swx_pipeline *p,
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_pipeline_regarray_write(struct rte_swx_pipeline *p,
 				   const char *regarray_name,
@@ -1258,7 +1214,6 @@  rte_swx_ctl_pipeline_regarray_write(struct rte_swx_pipeline *p,
  *   -EINVAL: Invalid argument;
  *   -ENOMEM: Not enough memory.
  */
-__rte_experimental
 int
 rte_swx_ctl_pipeline_regarray_read_with_key(struct rte_swx_pipeline *p,
 					    const char *regarray_name,
@@ -1284,7 +1239,6 @@  rte_swx_ctl_pipeline_regarray_read_with_key(struct rte_swx_pipeline *p,
  *   -EINVAL: Invalid argument;
  *   -ENOMEM: Not enough memory.
  */
-__rte_experimental
 int
 rte_swx_ctl_pipeline_regarray_write_with_key(struct rte_swx_pipeline *p,
 					     const char *regarray_name,
@@ -1318,7 +1272,6 @@  struct rte_swx_ctl_metarray_info {
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_metarray_info_get(struct rte_swx_pipeline *p,
 			      uint32_t metarray_id,
@@ -1339,7 +1292,6 @@  rte_swx_ctl_metarray_info_get(struct rte_swx_pipeline *p,
  *   -ENOMEM: Not enough space/cannot allocate memory;
  *   -EEXIST: Meter profile with this name already exists.
  */
-__rte_experimental
 int
 rte_swx_ctl_meter_profile_add(struct rte_swx_pipeline *p,
 			      const char *name,
@@ -1357,7 +1309,6 @@  rte_swx_ctl_meter_profile_add(struct rte_swx_pipeline *p,
  *   -EINVAL: Invalid argument;
  *   -EBUSY: Meter profile is currently in use.
  */
-__rte_experimental
 int
 rte_swx_ctl_meter_profile_delete(struct rte_swx_pipeline *p,
 				 const char *name);
@@ -1380,7 +1331,6 @@  rte_swx_ctl_meter_profile_delete(struct rte_swx_pipeline *p,
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_meter_reset(struct rte_swx_pipeline *p,
 			const char *metarray_name,
@@ -1405,7 +1355,6 @@  rte_swx_ctl_meter_reset(struct rte_swx_pipeline *p,
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_meter_set(struct rte_swx_pipeline *p,
 		      const char *metarray_name,
@@ -1436,7 +1385,6 @@  struct rte_swx_ctl_meter_stats {
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_meter_stats_read(struct rte_swx_pipeline *p,
 			     const char *metarray_name,
@@ -1463,7 +1411,6 @@  rte_swx_ctl_meter_stats_read(struct rte_swx_pipeline *p,
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_meter_reset_with_key(struct rte_swx_pipeline *p,
 				 const char *metarray_name,
@@ -1491,7 +1438,6 @@  rte_swx_ctl_meter_reset_with_key(struct rte_swx_pipeline *p,
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_meter_set_with_key(struct rte_swx_pipeline *p,
 			       const char *metarray_name,
@@ -1516,7 +1462,6 @@  rte_swx_ctl_meter_set_with_key(struct rte_swx_pipeline *p,
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_ctl_meter_stats_read_with_key(struct rte_swx_pipeline *p,
 				      const char *metarray_name,
@@ -1612,7 +1557,6 @@  rte_swx_ctl_pipeline_rss_key_write(struct rte_swx_pipeline *p,
 				   const char *rss_obj_name,
 				   uint32_t key_size,
 				   uint8_t *key);
-
 /**
  * Pipeline control free
  *
@@ -1620,7 +1564,6 @@  rte_swx_ctl_pipeline_rss_key_write(struct rte_swx_pipeline *p,
  *   Pipeline control handle.
  *   If ctl is NULL, no operation is performed.
  */
-__rte_experimental
 void
 rte_swx_ctl_pipeline_free(struct rte_swx_ctl_pipeline *ctl);
 
diff --git a/lib/pipeline/rte_swx_pipeline.h b/lib/pipeline/rte_swx_pipeline.h
index 25df042d3bd8..898e883dd0d1 100644
--- a/lib/pipeline/rte_swx_pipeline.h
+++ b/lib/pipeline/rte_swx_pipeline.h
@@ -52,7 +52,6 @@  struct rte_swx_pipeline;
  * @return
  *   Valid pipeline handle if found or NULL otherwise.
  */
-__rte_experimental
 struct rte_swx_pipeline *
 rte_swx_pipeline_find(const char *name);
 
@@ -72,7 +71,6 @@  rte_swx_pipeline_find(const char *name);
  *   -ENOMEM: Not enough space/cannot allocate memory;
  *   -EEXIST: Pipeline with this name already exists.
  */
-__rte_experimental
 int
 rte_swx_pipeline_config(struct rte_swx_pipeline **p,
 			const char *name,
@@ -97,7 +95,6 @@  rte_swx_pipeline_config(struct rte_swx_pipeline **p,
  *   -ENOMEM: Not enough space/cannot allocate memory;
  *   -EEXIST: Input port type with this name already exists.
  */
-__rte_experimental
 int
 rte_swx_pipeline_port_in_type_register(struct rte_swx_pipeline *p,
 				       const char *name,
@@ -120,7 +117,6 @@  rte_swx_pipeline_port_in_type_register(struct rte_swx_pipeline *p,
  *   -ENOMEM: Not enough space/cannot allocate memory;
  *   -ENODEV: Input port object creation error.
  */
-__rte_experimental
 int
 rte_swx_pipeline_port_in_config(struct rte_swx_pipeline *p,
 				uint32_t port_id,
@@ -146,7 +142,6 @@  rte_swx_pipeline_port_in_config(struct rte_swx_pipeline *p,
  *   -ENOMEM: Not enough space/cannot allocate memory;
  *   -EEXIST: Output port type with this name already exists.
  */
-__rte_experimental
 int
 rte_swx_pipeline_port_out_type_register(struct rte_swx_pipeline *p,
 					const char *name,
@@ -169,7 +164,6 @@  rte_swx_pipeline_port_out_type_register(struct rte_swx_pipeline *p,
  *   -ENOMEM: Not enough space/cannot allocate memory;
  *   -ENODEV: Output port object creation error.
  */
-__rte_experimental
 int
 rte_swx_pipeline_port_out_config(struct rte_swx_pipeline *p,
 				 uint32_t port_id,
@@ -211,7 +205,6 @@  struct rte_swx_pipeline_mirroring_params {
  *   -ENOMEM: Not enough memory;
  *   -EEXIST: Pipeline was already built successfully.
  */
-__rte_experimental
 int
 rte_swx_pipeline_mirroring_config(struct rte_swx_pipeline *p,
 				  struct rte_swx_pipeline_mirroring_params *params);
@@ -242,7 +235,6 @@  rte_swx_pipeline_mirroring_config(struct rte_swx_pipeline *p,
  *   -ENOMEM: Not enough space/cannot allocate memory;
  *   -EEXIST: Extern type with this name already exists.
  */
-__rte_experimental
 int
 rte_swx_pipeline_extern_type_register(struct rte_swx_pipeline *p,
 	const char *name,
@@ -268,7 +260,6 @@  rte_swx_pipeline_extern_type_register(struct rte_swx_pipeline *p,
  *   -EEXIST: Member function with this name already exists for this type;
  *   -ENOSPC: Maximum number of member functions reached for this type.
  */
-__rte_experimental
 int
 rte_swx_pipeline_extern_type_member_func_register(struct rte_swx_pipeline *p,
 	const char *extern_type_name,
@@ -295,7 +286,6 @@  rte_swx_pipeline_extern_type_member_func_register(struct rte_swx_pipeline *p,
  *   -EEXIST: Extern object with this name already exists;
  *   -ENODEV: Extern object constructor error.
  */
-__rte_experimental
 int
 rte_swx_pipeline_extern_object_config(struct rte_swx_pipeline *p,
 				      const char *extern_type_name,
@@ -321,7 +311,6 @@  rte_swx_pipeline_extern_object_config(struct rte_swx_pipeline *p,
  *   -ENOMEM: Not enough space/cannot allocate memory;
  *   -EEXIST: Extern function with this name already exists.
  */
-__rte_experimental
 int
 rte_swx_pipeline_extern_func_register(struct rte_swx_pipeline *p,
 				      const char *name,
@@ -346,7 +335,6 @@  rte_swx_pipeline_extern_func_register(struct rte_swx_pipeline *p,
  *   -ENOMEM: Not enough space/cannot allocate memory;
  *   -EEXIST: Hash function with this name already exists.
  */
-__rte_experimental
 int
 rte_swx_pipeline_hash_func_register(struct rte_swx_pipeline *p,
 				    const char *name,
@@ -425,7 +413,6 @@  struct rte_swx_field_params {
  *   -ENOMEM: Not enough space/cannot allocate memory;
  *   -EEXIST: Struct type with this name already exists.
  */
-__rte_experimental
 int
 rte_swx_pipeline_struct_type_register(struct rte_swx_pipeline *p,
 				      const char *name,
@@ -449,7 +436,6 @@  rte_swx_pipeline_struct_type_register(struct rte_swx_pipeline *p,
  *   -EEXIST: Header with this name already exists;
  *   -ENOSPC: Maximum number of headers reached for the pipeline.
  */
-__rte_experimental
 int
 rte_swx_pipeline_packet_header_register(struct rte_swx_pipeline *p,
 					const char *name,
@@ -466,7 +452,6 @@  rte_swx_pipeline_packet_header_register(struct rte_swx_pipeline *p,
  *   0 on success or the following error codes otherwise:
  *   -EINVAL: Invalid argument.
  */
-__rte_experimental
 int
 rte_swx_pipeline_packet_metadata_register(struct rte_swx_pipeline *p,
 					  const char *struct_type_name);
@@ -601,7 +586,6 @@  rte_swx_pipeline_packet_metadata_register(struct rte_swx_pipeline *p,
  *   -ENOMEM: Not enough space/cannot allocate memory;
  *   -EEXIST: Action with this name already exists.
  */
-__rte_experimental
 int
 rte_swx_pipeline_action_config(struct rte_swx_pipeline *p,
 			       const char *name,
@@ -630,7 +614,6 @@  rte_swx_pipeline_action_config(struct rte_swx_pipeline *p,
  *   -ENOMEM: Not enough space/cannot allocate memory;
  *   -EEXIST: Table type with this name already exists.
  */
-__rte_experimental
 int
 rte_swx_pipeline_table_type_register(struct rte_swx_pipeline *p,
 				     const char *name,
@@ -739,7 +722,6 @@  struct rte_swx_pipeline_table_params {
  *   -EEXIST: Table with this name already exists;
  *   -ENODEV: Table creation error.
  */
-__rte_experimental
 int
 rte_swx_pipeline_table_config(struct rte_swx_pipeline *p,
 			      const char *name,
@@ -793,7 +775,6 @@  struct rte_swx_pipeline_selector_params {
  *   -EEXIST: Selector table with this name already exists;
  *   -ENODEV: Selector table creation error.
  */
-__rte_experimental
 int
 rte_swx_pipeline_selector_config(struct rte_swx_pipeline *p,
 				 const char *name,
@@ -881,7 +862,6 @@  struct rte_swx_pipeline_learner_params {
  *   -EEXIST: Learner table with this name already exists;
  *   -ENODEV: Learner table creation error.
  */
-__rte_experimental
 int
 rte_swx_pipeline_learner_config(struct rte_swx_pipeline *p,
 				const char *name,
@@ -907,7 +887,6 @@  rte_swx_pipeline_learner_config(struct rte_swx_pipeline *p,
  *   -ENOMEM: Not enough space/cannot allocate memory;
  *   -EEXIST: Register array with this name already exists.
  */
-__rte_experimental
 int
 rte_swx_pipeline_regarray_config(struct rte_swx_pipeline *p,
 				 const char *name,
@@ -930,7 +909,6 @@  rte_swx_pipeline_regarray_config(struct rte_swx_pipeline *p,
  *   -ENOMEM: Not enough space/cannot allocate memory;
  *   -EEXIST: Meter array with this name already exists.
  */
-__rte_experimental
 int
 rte_swx_pipeline_metarray_config(struct rte_swx_pipeline *p,
 				 const char *name,
@@ -950,7 +928,6 @@  rte_swx_pipeline_metarray_config(struct rte_swx_pipeline *p,
  *   -EINVAL: Invalid argument;
  *   -ENOMEM: Not enough space/cannot allocate memory.
  */
-__rte_experimental
 int
 rte_swx_pipeline_instructions_config(struct rte_swx_pipeline *p,
 				     const char **instructions,
@@ -971,7 +948,6 @@  rte_swx_pipeline_instructions_config(struct rte_swx_pipeline *p,
  *   -ENOMEM: Not enough space/cannot allocate memory;
  *   -EEXIST: Pipeline was already built successfully.
  */
-__rte_experimental
 int
 rte_swx_pipeline_build(struct rte_swx_pipeline *p);
 
@@ -993,7 +969,6 @@  rte_swx_pipeline_build(struct rte_swx_pipeline *p);
  *   -ENOMEM: Not enough space/cannot allocate memory;
  *   -EEXIST: Resource with the same name already exists.
  */
-__rte_experimental
 int
 rte_swx_pipeline_codegen(FILE *spec_file,
 			 FILE *code_file,
@@ -1026,7 +1001,6 @@  rte_swx_pipeline_codegen(FILE *spec_file,
  *   -EEXIST: Pipeline with this name already exists;
  *   -ENODEV: Extern object or table creation error.
  */
-__rte_experimental
 int
 rte_swx_pipeline_build_from_lib(struct rte_swx_pipeline **p,
 				const char *name,
@@ -1042,7 +1016,6 @@  rte_swx_pipeline_build_from_lib(struct rte_swx_pipeline **p,
  * @param[in] n_instructions
  *   Number of instructions to execute.
  */
-__rte_experimental
 void
 rte_swx_pipeline_run(struct rte_swx_pipeline *p,
 		     uint32_t n_instructions);
@@ -1056,7 +1029,6 @@  rte_swx_pipeline_run(struct rte_swx_pipeline *p,
  *   Pipeline handle.
  *   If p is NULL, no operation is performed.
  */
-__rte_experimental
 void
 rte_swx_pipeline_flush(struct rte_swx_pipeline *p);
 
@@ -1066,7 +1038,6 @@  rte_swx_pipeline_flush(struct rte_swx_pipeline *p);
  * @param[in] p
  *   Pipeline handle.
  */
-__rte_experimental
 void
 rte_swx_pipeline_free(struct rte_swx_pipeline *p);
 
diff --git a/lib/pipeline/rte_table_action.h b/lib/pipeline/rte_table_action.h
index 5dffbeb70031..3f9fd8696c8b 100644
--- a/lib/pipeline/rte_table_action.h
+++ b/lib/pipeline/rte_table_action.h
@@ -819,7 +819,6 @@  struct rte_table_action_profile;
  * @return
  *   Table action profile handle on success, NULL otherwise.
  */
-__rte_experimental
 struct rte_table_action_profile *
 rte_table_action_profile_create(struct rte_table_action_common_config *common);
 
@@ -831,7 +830,6 @@  rte_table_action_profile_create(struct rte_table_action_common_config *common);
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-__rte_experimental
 int
 rte_table_action_profile_free(struct rte_table_action_profile *profile);
 
@@ -850,7 +848,6 @@  rte_table_action_profile_free(struct rte_table_action_profile *profile);
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-__rte_experimental
 int
 rte_table_action_profile_action_register(struct rte_table_action_profile *profile,
 	enum rte_table_action_type type,
@@ -871,7 +868,6 @@  rte_table_action_profile_action_register(struct rte_table_action_profile *profil
  *
  * @see rte_table_action_create()
  */
-__rte_experimental
 int
 rte_table_action_profile_freeze(struct rte_table_action_profile *profile);
 
@@ -895,7 +891,6 @@  struct rte_table_action;
  *
  * @see rte_table_action_create()
  */
-__rte_experimental
 struct rte_table_action *
 rte_table_action_create(struct rte_table_action_profile *profile,
 	uint32_t socket_id);
@@ -908,7 +903,6 @@  rte_table_action_create(struct rte_table_action_profile *profile,
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-__rte_experimental
 int
 rte_table_action_free(struct rte_table_action *action);
 
@@ -922,7 +916,6 @@  rte_table_action_free(struct rte_table_action *action);
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-__rte_experimental
 int
 rte_table_action_table_params_get(struct rte_table_action *action,
 	struct rte_pipeline_table_params *params);
@@ -945,7 +938,6 @@  rte_table_action_table_params_get(struct rte_table_action *action,
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-__rte_experimental
 int
 rte_table_action_apply(struct rte_table_action *action,
 	void *data,
@@ -965,7 +957,6 @@  rte_table_action_apply(struct rte_table_action *action,
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-__rte_experimental
 int
 rte_table_action_dscp_table_update(struct rte_table_action *action,
 	uint64_t dscp_mask,
@@ -985,7 +976,6 @@  rte_table_action_dscp_table_update(struct rte_table_action *action,
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-__rte_experimental
 int
 rte_table_action_meter_profile_add(struct rte_table_action *action,
 	uint32_t meter_profile_id,
@@ -1002,7 +992,6 @@  rte_table_action_meter_profile_add(struct rte_table_action *action,
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-__rte_experimental
 int
 rte_table_action_meter_profile_delete(struct rte_table_action *action,
 	uint32_t meter_profile_id);
@@ -1034,7 +1023,6 @@  rte_table_action_meter_profile_delete(struct rte_table_action *action,
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-__rte_experimental
 int
 rte_table_action_meter_read(struct rte_table_action *action,
 	void *data,
@@ -1061,7 +1049,6 @@  rte_table_action_meter_read(struct rte_table_action *action,
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-__rte_experimental
 int
 rte_table_action_ttl_read(struct rte_table_action *action,
 	void *data,
@@ -1087,7 +1074,6 @@  rte_table_action_ttl_read(struct rte_table_action *action,
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-__rte_experimental
 int
 rte_table_action_stats_read(struct rte_table_action *action,
 	void *data,
@@ -1108,7 +1094,6 @@  rte_table_action_stats_read(struct rte_table_action *action,
  * @return
  *   Zero on success, non-zero error code otherwise.
  */
-__rte_experimental
 int
 rte_table_action_time_read(struct rte_table_action *action,
 	void *data,
@@ -1124,7 +1109,6 @@  rte_table_action_time_read(struct rte_table_action *action,
  * @return
  *   The pointer to the session on success, NULL otherwise.
  */
-__rte_experimental
 struct rte_cryptodev_sym_session *
 rte_table_action_crypto_sym_session_get(struct rte_table_action *action,
 	void *data);
diff --git a/lib/pipeline/version.map b/lib/pipeline/version.map
index 6997b69340ef..64bc0f1183ed 100644
--- a/lib/pipeline/version.map
+++ b/lib/pipeline/version.map
@@ -24,14 +24,6 @@  DPDK_24 {
 	rte_pipeline_table_entry_delete;
 	rte_pipeline_table_entry_delete_bulk;
 	rte_pipeline_table_stats_read;
-
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 18.05
 	rte_port_in_action_apply;
 	rte_port_in_action_create;
 	rte_port_in_action_free;
@@ -40,56 +32,76 @@  EXPERIMENTAL {
 	rte_port_in_action_profile_create;
 	rte_port_in_action_profile_free;
 	rte_port_in_action_profile_freeze;
-	rte_table_action_apply;
-	rte_table_action_create;
-	rte_table_action_dscp_table_update;
-	rte_table_action_free;
-	rte_table_action_meter_profile_add;
-	rte_table_action_meter_profile_delete;
-	rte_table_action_meter_read;
-	rte_table_action_profile_action_register;
-	rte_table_action_profile_create;
-	rte_table_action_profile_free;
-	rte_table_action_profile_freeze;
-	rte_table_action_stats_read;
-	rte_table_action_table_params_get;
-	rte_table_action_time_read;
-	rte_table_action_ttl_read;
-
-	# added in 18.11
-	rte_table_action_crypto_sym_session_get;
-
-	# added in 20.11
 	rte_swx_ctl_action_arg_info_get;
 	rte_swx_ctl_action_info_get;
+	rte_swx_ctl_learner_action_info_get;
+	rte_swx_ctl_learner_info_get;
+	rte_swx_ctl_learner_match_field_info_get;
+	rte_swx_ctl_metarray_info_get;
+	rte_swx_ctl_meter_profile_add;
+	rte_swx_ctl_meter_profile_delete;
+	rte_swx_ctl_meter_reset;
+	rte_swx_ctl_meter_reset_with_key;
+	rte_swx_ctl_meter_set;
+	rte_swx_ctl_meter_set_with_key;
+	rte_swx_ctl_meter_stats_read;
+	rte_swx_ctl_meter_stats_read_with_key;
 	rte_swx_ctl_pipeline_abort;
 	rte_swx_ctl_pipeline_commit;
 	rte_swx_ctl_pipeline_create;
+	rte_swx_ctl_pipeline_find;
 	rte_swx_ctl_pipeline_free;
 	rte_swx_ctl_pipeline_info_get;
+	rte_swx_ctl_pipeline_learner_default_entry_add;
+	rte_swx_ctl_pipeline_learner_default_entry_read;
+	rte_swx_ctl_pipeline_learner_stats_read;
+	rte_swx_ctl_pipeline_learner_timeout_get;
+	rte_swx_ctl_pipeline_learner_timeout_set;
 	rte_swx_ctl_pipeline_mirroring_session_set;
 	rte_swx_ctl_pipeline_numa_node_get;
 	rte_swx_ctl_pipeline_port_in_stats_read;
 	rte_swx_ctl_pipeline_port_out_stats_read;
+	rte_swx_ctl_pipeline_regarray_read;
+	rte_swx_ctl_pipeline_regarray_read_with_key;
+	rte_swx_ctl_pipeline_regarray_write;
+	rte_swx_ctl_pipeline_regarray_write_with_key;
+	rte_swx_ctl_pipeline_selector_fprintf;
+	rte_swx_ctl_pipeline_selector_group_add;
+	rte_swx_ctl_pipeline_selector_group_delete;
+	rte_swx_ctl_pipeline_selector_group_member_add;
+	rte_swx_ctl_pipeline_selector_group_member_delete;
+	rte_swx_ctl_pipeline_selector_stats_read;
 	rte_swx_ctl_pipeline_table_default_entry_add;
 	rte_swx_ctl_pipeline_table_entry_add;
 	rte_swx_ctl_pipeline_table_entry_delete;
 	rte_swx_ctl_pipeline_table_entry_read;
 	rte_swx_ctl_pipeline_table_fprintf;
+	rte_swx_ctl_pipeline_table_stats_read;
+	rte_swx_ctl_regarray_info_get;
+	rte_swx_ctl_selector_field_info_get;
+	rte_swx_ctl_selector_group_id_field_info_get;
+	rte_swx_ctl_selector_info_get;
+	rte_swx_ctl_selector_member_id_field_info_get;
 	rte_swx_ctl_table_action_info_get;
 	rte_swx_ctl_table_info_get;
 	rte_swx_ctl_table_match_field_info_get;
 	rte_swx_ctl_table_ops_get;
 	rte_swx_pipeline_action_config;
 	rte_swx_pipeline_build;
+	rte_swx_pipeline_build_from_lib;
+	rte_swx_pipeline_codegen;
 	rte_swx_pipeline_config;
 	rte_swx_pipeline_extern_func_register;
 	rte_swx_pipeline_extern_object_config;
 	rte_swx_pipeline_extern_type_member_func_register;
 	rte_swx_pipeline_extern_type_register;
+	rte_swx_pipeline_find;
 	rte_swx_pipeline_flush;
 	rte_swx_pipeline_free;
+	rte_swx_pipeline_hash_func_register;
 	rte_swx_pipeline_instructions_config;
+	rte_swx_pipeline_learner_config;
+	rte_swx_pipeline_metarray_config;
 	rte_swx_pipeline_mirroring_config;
 	rte_swx_pipeline_packet_header_register;
 	rte_swx_pipeline_packet_metadata_register;
@@ -97,64 +109,36 @@  EXPERIMENTAL {
 	rte_swx_pipeline_port_in_type_register;
 	rte_swx_pipeline_port_out_config;
 	rte_swx_pipeline_port_out_type_register;
+	rte_swx_pipeline_regarray_config;
 	rte_swx_pipeline_run;
+	rte_swx_pipeline_selector_config;
 	rte_swx_pipeline_struct_type_register;
 	rte_swx_pipeline_table_config;
 	rte_swx_pipeline_table_state_get;
 	rte_swx_pipeline_table_state_set;
 	rte_swx_pipeline_table_type_register;
+	rte_table_action_apply;
+	rte_table_action_create;
+	rte_table_action_crypto_sym_session_get;
+	rte_table_action_dscp_table_update;
+	rte_table_action_free;
+	rte_table_action_meter_profile_add;
+	rte_table_action_meter_profile_delete;
+	rte_table_action_meter_read;
+	rte_table_action_profile_action_register;
+	rte_table_action_profile_create;
+	rte_table_action_profile_free;
+	rte_table_action_profile_freeze;
+	rte_table_action_stats_read;
+	rte_table_action_table_params_get;
+	rte_table_action_time_read;
+	rte_table_action_ttl_read;
 
-	# added in 21.05
-	rte_swx_ctl_metarray_info_get;
-	rte_swx_ctl_meter_profile_add;
-	rte_swx_ctl_meter_profile_delete;
-	rte_swx_ctl_meter_reset;
-	rte_swx_ctl_meter_set;
-	rte_swx_ctl_meter_stats_read;
-	rte_swx_ctl_pipeline_regarray_read;
-	rte_swx_ctl_pipeline_regarray_write;
-	rte_swx_ctl_pipeline_table_stats_read;
-	rte_swx_ctl_regarray_info_get;
-	rte_swx_pipeline_metarray_config;
-	rte_swx_pipeline_regarray_config;
-
-	# added in 21.08
-	rte_swx_pipeline_selector_config;
-	rte_swx_ctl_pipeline_selector_fprintf;
-	rte_swx_ctl_pipeline_selector_group_add;
-	rte_swx_ctl_pipeline_selector_group_delete;
-	rte_swx_ctl_pipeline_selector_group_member_add;
-	rte_swx_ctl_pipeline_selector_group_member_delete;
-	rte_swx_ctl_pipeline_selector_stats_read;
-	rte_swx_ctl_selector_info_get;
-	rte_swx_ctl_selector_field_info_get;
-	rte_swx_ctl_selector_group_id_field_info_get;
-	rte_swx_ctl_selector_member_id_field_info_get;
-
-	# added in 21.11
-	rte_swx_ctl_pipeline_learner_default_entry_add;
-	rte_swx_ctl_pipeline_learner_default_entry_read;
-	rte_swx_ctl_pipeline_learner_stats_read;
-	rte_swx_ctl_learner_action_info_get;
-	rte_swx_ctl_learner_info_get;
-	rte_swx_ctl_learner_match_field_info_get;
-	rte_swx_pipeline_learner_config;
-
-	# added in 22.07
-	rte_swx_ctl_pipeline_learner_timeout_get;
-	rte_swx_ctl_pipeline_learner_timeout_set;
-	rte_swx_pipeline_hash_func_register;
+	local: *;
+};
 
-	# added in 22.11
-	rte_swx_ctl_meter_reset_with_key;
-	rte_swx_ctl_meter_set_with_key;
-	rte_swx_ctl_meter_stats_read_with_key;
-	rte_swx_ctl_pipeline_find;
-	rte_swx_ctl_pipeline_regarray_read_with_key;
-	rte_swx_ctl_pipeline_regarray_write_with_key;
-	rte_swx_pipeline_build_from_lib;
-	rte_swx_pipeline_codegen;
-	rte_swx_pipeline_find;
+EXPERIMENTAL {
+	global:
 
 	# added in 23.03
 	rte_swx_ctl_pipeline_rss_key_read;
diff --git a/lib/port/version.map b/lib/port/version.map
index fefcf29063f6..1ca6dfb22a5e 100644
--- a/lib/port/version.map
+++ b/lib/port/version.map
@@ -4,6 +4,9 @@  DPDK_24 {
 	rte_port_ethdev_reader_ops;
 	rte_port_ethdev_writer_nodrop_ops;
 	rte_port_ethdev_writer_ops;
+	rte_port_eventdev_reader_ops;
+	rte_port_eventdev_writer_nodrop_ops;
+	rte_port_eventdev_writer_ops;
 	rte_port_fd_reader_ops;
 	rte_port_fd_writer_nodrop_ops;
 	rte_port_fd_writer_ops;
@@ -24,27 +27,14 @@  DPDK_24 {
 	rte_port_sym_crypto_reader_ops;
 	rte_port_sym_crypto_writer_nodrop_ops;
 	rte_port_sym_crypto_writer_ops;
-
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 19.11
-	rte_port_eventdev_reader_ops;
-	rte_port_eventdev_writer_nodrop_ops;
-	rte_port_eventdev_writer_ops;
-
-	# added in 20.11
 	rte_swx_port_ethdev_reader_ops;
 	rte_swx_port_ethdev_writer_ops;
-	rte_swx_port_sink_ops;
-	rte_swx_port_source_ops;
-
-	# added in 21.05
 	rte_swx_port_fd_reader_ops;
 	rte_swx_port_fd_writer_ops;
 	rte_swx_port_ring_reader_ops;
 	rte_swx_port_ring_writer_ops;
+	rte_swx_port_sink_ops;
+	rte_swx_port_source_ops;
+
+	local: *;
 };