DPDK patches and discussions
 help / color / mirror / Atom feed
* [RFC] eal: add new function versioning macros
@ 2025-03-05 21:23 David Marchand
  2025-03-06  2:57 ` Patrick Robb
                   ` (3 more replies)
  0 siblings, 4 replies; 17+ messages in thread
From: David Marchand @ 2025-03-05 21:23 UTC (permalink / raw)
  To: dev; +Cc: thomas, andremue, Tyler Retzlaff, Jasvinder Singh

For versioning symbols:
- MSVC uses pragmas on the function symbol,
- GNU linker uses special asm directives,

To accommodate both GNU linker and MSVC linker, introduce new macros for
versioning functions that will surround the whole function.

This has the advantage of hiding all the ugly details in the macros.
Now versioning a function is just a call to a single macro:
- VERSION_FUNCTION (resp. VERSION_FUNCTION_EXPERIMENTAL), for keeping an
  old implementation code under a versioned function,
- DEFAULT_FUNCTION, for declaring the new default versioned function,
  and handling the static link special case, instead of
  BIND_DEFAULT_SYMBOL + MAP_STATIC_SYMBOL,

Documentation has been updated though it needs some polishing.
The experimental macro has not been tested.

Signed-off-by: David Marchand <david.marchand@redhat.com>
---
 doc/guides/contributing/abi_versioning.rst | 133 ++++-----------------
 lib/eal/include/rte_function_versioning.h  |  27 +++++
 lib/net/rte_net_crc.c                      |  41 +++----
 3 files changed, 69 insertions(+), 132 deletions(-)

diff --git a/doc/guides/contributing/abi_versioning.rst b/doc/guides/contributing/abi_versioning.rst
index 7afd1c1886..b83383fd0b 100644
--- a/doc/guides/contributing/abi_versioning.rst
+++ b/doc/guides/contributing/abi_versioning.rst
@@ -277,86 +277,52 @@ list of exported symbols when DPDK is compiled as a shared library.
 
 Next, we need to specify in the code which function maps to the rte_acl_create
 symbol at which versions.  First, at the site of the initial symbol definition,
-we need to update the function so that it is uniquely named, and not in conflict
-with the public symbol name
+we wrap the function with ``VERSION_FUNCTION``, passing the current ABI version,
+the function return type, and the function name, then the full implementation of the
+function.
 
 .. code-block:: c
 
  -struct rte_acl_ctx *
  -rte_acl_create(const struct rte_acl_param *param)
- +struct rte_acl_ctx * __vsym
- +rte_acl_create_v21(const struct rte_acl_param *param)
+ +VERSION_FUNCTION(21,
+ +struct rte_acl_ctx *,
+ +rte_acl_create, (const struct rte_acl_param *param)
  {
         size_t sz;
         struct rte_acl_ctx *ctx;
         ...
-
-Note that the base name of the symbol was kept intact, as this is conducive to
-the macros used for versioning symbols and we have annotated the function as
-``__vsym``, an implementation of a versioned symbol . That is our next step,
-mapping this new symbol name to the initial symbol name at version node 21.
-Immediately after the function, we add the VERSION_SYMBOL macro.
-
-.. code-block:: c
-
-   #include <rte_function_versioning.h>
-
-   ...
-   VERSION_SYMBOL(rte_acl_create, _v21, 21);
+ -}
+ +})
 
 Remembering to also add the rte_function_versioning.h header to the requisite c
 file where these changes are being made. The macro instructs the linker to
 create a new symbol ``rte_acl_create@DPDK_21``, which matches the symbol created
-in older builds, but now points to the above newly named function. We have now
-mapped the original rte_acl_create symbol to the original function (but with a
-new name).
+in older builds, but now points to the above newly named function ``rte_acl_create_v21``.
+We have now mapped the original rte_acl_create symbol to the original function
+(but with a new name).
 
 Please see the section :ref:`Enabling versioning macros
 <enabling_versioning_macros>` to enable this macro in the meson/ninja build.
-Next, we need to create the new ``v22`` version of the symbol. We create a new
-function name, with the ``v22`` suffix, and implement it appropriately.
+Next, we need to create the new version of the symbol. We create a new
+function name and implement it appropriately, then wrap it in a call to ``DEFAULT_FUNCTION``.
 
 .. code-block:: c
 
-   struct rte_acl_ctx * __vsym
-   rte_acl_create_v22(const struct rte_acl_param *param, int debug);
+   DEFAULT_FUNCTION(22,
+   struct rte_acl_ctx *,
+   rte_acl_create, (const struct rte_acl_param *param, int debug);
    {
         struct rte_acl_ctx *ctx = rte_acl_create_v21(param);
 
         ctx->debug = debug;
 
         return ctx;
-   }
-
-This code serves as our new API call. Its the same as our old call, but adds the
-new parameter in place. Next we need to map this function to the new default
-symbol ``rte_acl_create@DPDK_22``. To do this, immediately after the function,
-we add the BIND_DEFAULT_SYMBOL macro.
-
-.. code-block:: c
-
-   #include <rte_function_versioning.h>
-
-   ...
-   BIND_DEFAULT_SYMBOL(rte_acl_create, _v22, 22);
+   })
 
 The macro instructs the linker to create the new default symbol
-``rte_acl_create@DPDK_22``, which points to the above newly named function.
-
-We finally modify the prototype of the call in the public header file,
-such that it contains both versions of the symbol and the public API.
-
-.. code-block:: c
-
-   struct rte_acl_ctx *
-   rte_acl_create(const struct rte_acl_param *param);
-
-   struct rte_acl_ctx * __vsym
-   rte_acl_create_v21(const struct rte_acl_param *param);
-
-   struct rte_acl_ctx * __vsym
-   rte_acl_create_v22(const struct rte_acl_param *param, int debug);
-
+``rte_acl_create@DPDK_22``, which points to the function named ``rte_acl_create_v22``
+(declared by the macro).
 
 And that's it, on the next shared library rebuild, there will be two versions of
 rte_acl_create, an old DPDK_21 version, used by previously built applications,
@@ -365,43 +331,10 @@ and a new DPDK_22 version, used by future built applications.
 .. note::
 
    **Before you leave**, please take care reviewing the sections on
-   :ref:`mapping static symbols <mapping_static_symbols>`,
    :ref:`enabling versioning macros <enabling_versioning_macros>`,
    and :ref:`ABI deprecation <abi_deprecation>`.
 
 
-.. _mapping_static_symbols:
-
-Mapping static symbols
-______________________
-
-Now we've taken what was a public symbol, and duplicated it into two uniquely
-and differently named symbols. We've then mapped each of those back to the
-public symbol ``rte_acl_create`` with different version tags. This only applies
-to dynamic linking, as static linking has no notion of versioning. That leaves
-this code in a position of no longer having a symbol simply named
-``rte_acl_create`` and a static build will fail on that missing symbol.
-
-To correct this, we can simply map a function of our choosing back to the public
-symbol in the static build with the ``MAP_STATIC_SYMBOL`` macro.  Generally the
-assumption is that the most recent version of the symbol is the one you want to
-map.  So, back in the C file where, immediately after ``rte_acl_create_v22`` is
-defined, we add this
-
-
-.. code-block:: c
-
-   struct rte_acl_ctx * __vsym
-   rte_acl_create_v22(const struct rte_acl_param *param, int debug)
-   {
-        ...
-   }
-   MAP_STATIC_SYMBOL(struct rte_acl_ctx *rte_acl_create(const struct rte_acl_param *param, int debug), rte_acl_create_v22);
-
-That tells the compiler that, when building a static library, any calls to the
-symbol ``rte_acl_create`` should be linked to ``rte_acl_create_v22``
-
-
 .. _enabling_versioning_macros:
 
 Enabling versioning macros
@@ -519,26 +452,19 @@ and ``DPDK_22`` version nodes.
     * Create an acl context object for apps to
     * manipulate
     */
-   struct rte_acl_ctx *
-   rte_acl_create(const struct rte_acl_param *param)
+   DEFAULT_FUNCTION(22,
+   struct rte_acl_ctx *,
+   rte_acl_create, (const struct rte_acl_param *param)
    {
    ...
-   }
-
-   __rte_experimental
-   struct rte_acl_ctx *
-   rte_acl_create_e(const struct rte_acl_param *param)
-   {
-      return rte_acl_create(param);
-   }
-   VERSION_SYMBOL_EXPERIMENTAL(rte_acl_create, _e);
+   })
 
+   VERSION_FUNCTION_EXPERIMENTAL(
    struct rte_acl_ctx *
-   rte_acl_create_v22(const struct rte_acl_param *param)
+   rte_acl_create, (const struct rte_acl_param *param)
    {
       return rte_acl_create(param);
-   }
-   BIND_DEFAULT_SYMBOL(rte_acl_create, _v22, 22);
+   })
 
 In the map file, we map the symbol to both the ``EXPERIMENTAL``
 and ``DPDK_22`` version nodes.
@@ -564,13 +490,6 @@ and ``DPDK_22`` version nodes.
         rte_acl_create;
    };
 
-.. note::
-
-   Please note, similar to :ref:`symbol versioning <example_abi_macro_usage>`,
-   when aliasing to experimental you will also need to take care of
-   :ref:`mapping static symbols <mapping_static_symbols>`.
-
-
 .. _abi_deprecation:
 
 Deprecating part of a public API
diff --git a/lib/eal/include/rte_function_versioning.h b/lib/eal/include/rte_function_versioning.h
index eb6dd2bc17..7a33a45928 100644
--- a/lib/eal/include/rte_function_versioning.h
+++ b/lib/eal/include/rte_function_versioning.h
@@ -96,4 +96,31 @@
  */
 #endif
 
+#ifdef RTE_BUILD_SHARED_LIB
+
+#define VERSION_FUNCTION(ver, type, name, ...) \
+__rte_used type name ## _v ## ver __VA_ARGS__ \
+__asm__(".symver " RTE_STR(name) "_v" RTE_STR(ver) ", " RTE_STR(name) "@DPDK_" RTE_STR(ver));
+
+#define VERSION_FUNCTION_EXPERIMENTAL(type, name, ...) \
+__rte_used type name ## _exp __VA_ARGS__ \
+__asm__(".symver " RTE_STR(name) "_exp, " RTE_STR(name) "@EXPERIMENTAL")
+
+#define DEFAULT_FUNCTION(ver, type, name, ...) \
+__rte_used type name ## _v ## ver __VA_ARGS__ \
+__asm__(".symver " RTE_STR(name) "_v" RTE_STR(ver) ", " RTE_STR(name) "@@DPDK_" RTE_STR(ver));
+
+#else /* !RTE_BUILD_SHARED_LIB */
+
+#define VERSION_FUNCTION(ver, type, name, ...) \
+type name ## _v ## ver __VA_ARGS__
+
+#define VERSION_FUNCTION_EXPERIMENTAL(type, name, ...) \
+type name ## _exp __VA_ARGS__
+
+#define DEFAULT_FUNCTION(ver, type, name, ...) \
+type name __VA_ARGS__
+
+#endif /* RTE_BUILD_SHARED_LIB */
+
 #endif /* _RTE_FUNCTION_VERSIONING_H_ */
diff --git a/lib/net/rte_net_crc.c b/lib/net/rte_net_crc.c
index 2fb3eec231..a1c17e0735 100644
--- a/lib/net/rte_net_crc.c
+++ b/lib/net/rte_net_crc.c
@@ -345,8 +345,9 @@ handlers_init(enum rte_net_crc_alg alg)
 
 /* Public API */
 
-void
-rte_net_crc_set_alg_v25(enum rte_net_crc_alg alg)
+VERSION_FUNCTION(25,
+void,
+rte_net_crc_set_alg, (enum rte_net_crc_alg alg)
 {
 	handlers = NULL;
 	if (max_simd_bitwidth == 0)
@@ -372,11 +373,11 @@ rte_net_crc_set_alg_v25(enum rte_net_crc_alg alg)
 
 	if (handlers == NULL)
 		handlers = handlers_scalar;
-}
-VERSION_SYMBOL(rte_net_crc_set_alg, _v25, 25);
+})
 
-struct rte_net_crc *rte_net_crc_set_alg_v26(enum rte_net_crc_alg alg,
-	enum rte_net_crc_type type)
+DEFAULT_FUNCTION(26,
+struct rte_net_crc *,
+rte_net_crc_set_alg, (enum rte_net_crc_alg alg, enum rte_net_crc_type type)
 {
 	uint16_t max_simd_bitwidth;
 	struct rte_net_crc *crc;
@@ -413,21 +414,16 @@ struct rte_net_crc *rte_net_crc_set_alg_v26(enum rte_net_crc_alg alg,
 		break;
 	}
 	return crc;
-}
-BIND_DEFAULT_SYMBOL(rte_net_crc_set_alg, _v26, 26);
-MAP_STATIC_SYMBOL(struct rte_net_crc *rte_net_crc_set_alg(
-	enum rte_net_crc_alg alg, enum rte_net_crc_type type),
-	rte_net_crc_set_alg_v26);
+})
 
 void rte_net_crc_free(struct rte_net_crc *crc)
 {
 	rte_free(crc);
 }
 
-uint32_t
-rte_net_crc_calc_v25(const void *data,
-	uint32_t data_len,
-	enum rte_net_crc_type type)
+VERSION_FUNCTION(25,
+uint32_t,
+rte_net_crc_calc, (const void *data, uint32_t data_len, enum rte_net_crc_type type)
 {
 	uint32_t ret;
 	rte_net_crc_handler f_handle;
@@ -436,19 +432,14 @@ rte_net_crc_calc_v25(const void *data,
 	ret = f_handle(data, data_len);
 
 	return ret;
-}
-VERSION_SYMBOL(rte_net_crc_calc, _v25, 25);
+})
 
-uint32_t
-rte_net_crc_calc_v26(const struct rte_net_crc *ctx,
-	const void *data, const uint32_t data_len)
+DEFAULT_FUNCTION(26,
+uint32_t,
+rte_net_crc_calc, (const struct rte_net_crc *ctx, const void *data, const uint32_t data_len)
 {
 	return handlers_dpdk26[ctx->alg].f[ctx->type](data, data_len);
-}
-BIND_DEFAULT_SYMBOL(rte_net_crc_calc, _v26, 26);
-MAP_STATIC_SYMBOL(uint32_t rte_net_crc_calc(const struct rte_net_crc *ctx,
-	const void *data, const uint32_t data_len),
-	rte_net_crc_calc_v26);
+})
 
 /* Call initialisation helpers for all crc algorithm handlers */
 RTE_INIT(rte_net_crc_init)
-- 
2.48.1


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [RFC] eal: add new function versioning macros
  2025-03-05 21:23 [RFC] eal: add new function versioning macros David Marchand
@ 2025-03-06  2:57 ` Patrick Robb
  2025-03-06 10:23 ` Bruce Richardson
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 17+ messages in thread
From: Patrick Robb @ 2025-03-06  2:57 UTC (permalink / raw)
  To: David Marchand; +Cc: dev, thomas, andremue, Tyler Retzlaff, Jasvinder Singh

[-- Attachment #1: Type: text/plain, Size: 166 bytes --]

Recheck-request: iol-intel-Performance

There was an infra failure with the Arm Grace server about 12 hours ago
which caused this failure - sending a retest request.

[-- Attachment #2: Type: text/html, Size: 204 bytes --]

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [RFC] eal: add new function versioning macros
  2025-03-05 21:23 [RFC] eal: add new function versioning macros David Marchand
  2025-03-06  2:57 ` Patrick Robb
@ 2025-03-06 10:23 ` Bruce Richardson
  2025-03-06 12:50 ` [RFC v2 1/2] " David Marchand
  2025-03-11  9:55 ` [RFC v3 0/8] Symbol versioning and export rework David Marchand
  3 siblings, 0 replies; 17+ messages in thread
From: Bruce Richardson @ 2025-03-06 10:23 UTC (permalink / raw)
  To: David Marchand; +Cc: dev, thomas, andremue, Tyler Retzlaff, Jasvinder Singh

On Wed, Mar 05, 2025 at 10:23:49PM +0100, David Marchand wrote:
> For versioning symbols:
> - MSVC uses pragmas on the function symbol,
> - GNU linker uses special asm directives,
> 
> To accommodate both GNU linker and MSVC linker, introduce new macros for
> versioning functions that will surround the whole function.
> 
> This has the advantage of hiding all the ugly details in the macros.
> Now versioning a function is just a call to a single macro:
> - VERSION_FUNCTION (resp. VERSION_FUNCTION_EXPERIMENTAL), for keeping an
>   old implementation code under a versioned function,
> - DEFAULT_FUNCTION, for declaring the new default versioned function,
>   and handling the static link special case, instead of
>   BIND_DEFAULT_SYMBOL + MAP_STATIC_SYMBOL,
> 
> Documentation has been updated though it needs some polishing.
> The experimental macro has not been tested.
> 
> Signed-off-by: David Marchand <david.marchand@redhat.com>
> ---
This looks a nice improvement to me, thanks.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [RFC v2 1/2] eal: add new function versioning macros
  2025-03-05 21:23 [RFC] eal: add new function versioning macros David Marchand
  2025-03-06  2:57 ` Patrick Robb
  2025-03-06 10:23 ` Bruce Richardson
@ 2025-03-06 12:50 ` David Marchand
  2025-03-06 12:50   ` [RFC v2 2/2] build: generate symbol maps David Marchand
  2025-03-06 15:45   ` [RFC v2 1/2] eal: add new function versioning macros Andre Muezerie
  2025-03-11  9:55 ` [RFC v3 0/8] Symbol versioning and export rework David Marchand
  3 siblings, 2 replies; 17+ messages in thread
From: David Marchand @ 2025-03-06 12:50 UTC (permalink / raw)
  To: dev; +Cc: thomas, bruce.richardson, andremue, Tyler Retzlaff, Jasvinder Singh

For versioning symbols:
- MSVC uses pragmas on the symbol,
- GNU linker uses special asm directives,

To accommodate both GNU linker and MSVC linker, introduce new macros for
exporting and versioning symbols that will surround the whole function.

This has the advantage of hiding all the ugly details in the macros.
Now versioning a symbol is just a call to a single macro:
- RTE_VERSION_SYMBOL (resp. RTE_VERSION_EXPERIMENTAL_SYMBOL), for
  keeping an old implementation code under a versioned function (resp.
  experimental function),
- RTE_DEFAULT_SYMBOL, for declaring the new default versioned function,
  and handling the static link special case, instead of
  BIND_DEFAULT_SYMBOL + MAP_STATIC_SYMBOL,

Documentation has been updated though it needs some polishing.
The experimental macro has not been tested.

Signed-off-by: David Marchand <david.marchand@redhat.com>
---
Changes since RFC v1:
- renamed and prefixed macros,
- reindented in prevision of second patch,

---
 doc/guides/contributing/abi_versioning.rst | 130 ++++-----------------
 lib/eal/include/rte_function_versioning.h  |  27 +++++
 lib/net/rte_net_crc.c                      |  30 ++---
 3 files changed, 57 insertions(+), 130 deletions(-)

diff --git a/doc/guides/contributing/abi_versioning.rst b/doc/guides/contributing/abi_versioning.rst
index 7afd1c1886..c4baf6433a 100644
--- a/doc/guides/contributing/abi_versioning.rst
+++ b/doc/guides/contributing/abi_versioning.rst
@@ -277,86 +277,49 @@ list of exported symbols when DPDK is compiled as a shared library.
 
 Next, we need to specify in the code which function maps to the rte_acl_create
 symbol at which versions.  First, at the site of the initial symbol definition,
-we need to update the function so that it is uniquely named, and not in conflict
-with the public symbol name
+we wrap the function with ``RTE_VERSION_SYMBOL``, passing the current ABI version,
+the function return type, and the function name, then the full implementation of the
+function.
 
 .. code-block:: c
 
  -struct rte_acl_ctx *
  -rte_acl_create(const struct rte_acl_param *param)
- +struct rte_acl_ctx * __vsym
- +rte_acl_create_v21(const struct rte_acl_param *param)
+ +RTE_VERSION_SYMBOL(21, struct rte_acl_ctx *, rte_acl_create, (const struct rte_acl_param *param)
  {
         size_t sz;
         struct rte_acl_ctx *ctx;
         ...
-
-Note that the base name of the symbol was kept intact, as this is conducive to
-the macros used for versioning symbols and we have annotated the function as
-``__vsym``, an implementation of a versioned symbol . That is our next step,
-mapping this new symbol name to the initial symbol name at version node 21.
-Immediately after the function, we add the VERSION_SYMBOL macro.
-
-.. code-block:: c
-
-   #include <rte_function_versioning.h>
-
-   ...
-   VERSION_SYMBOL(rte_acl_create, _v21, 21);
+ -}
+ +})
 
 Remembering to also add the rte_function_versioning.h header to the requisite c
 file where these changes are being made. The macro instructs the linker to
 create a new symbol ``rte_acl_create@DPDK_21``, which matches the symbol created
-in older builds, but now points to the above newly named function. We have now
-mapped the original rte_acl_create symbol to the original function (but with a
-new name).
+in older builds, but now points to the above newly named function ``rte_acl_create_v21``.
+We have now mapped the original rte_acl_create symbol to the original function
+(but with a new name).
 
 Please see the section :ref:`Enabling versioning macros
 <enabling_versioning_macros>` to enable this macro in the meson/ninja build.
-Next, we need to create the new ``v22`` version of the symbol. We create a new
-function name, with the ``v22`` suffix, and implement it appropriately.
+Next, we need to create the new version of the symbol. We create a new
+function name and implement it appropriately, then wrap it in a call to ``RTE_DEFAULT_SYMBOL``.
 
 .. code-block:: c
 
-   struct rte_acl_ctx * __vsym
-   rte_acl_create_v22(const struct rte_acl_param *param, int debug);
+   RTE_DEFAULT_SYMBOL(22, struct rte_acl_ctx *, rte_acl_create, (const struct rte_acl_param *param,
+        int debug);
    {
         struct rte_acl_ctx *ctx = rte_acl_create_v21(param);
 
         ctx->debug = debug;
 
         return ctx;
-   }
-
-This code serves as our new API call. Its the same as our old call, but adds the
-new parameter in place. Next we need to map this function to the new default
-symbol ``rte_acl_create@DPDK_22``. To do this, immediately after the function,
-we add the BIND_DEFAULT_SYMBOL macro.
-
-.. code-block:: c
-
-   #include <rte_function_versioning.h>
-
-   ...
-   BIND_DEFAULT_SYMBOL(rte_acl_create, _v22, 22);
+   })
 
 The macro instructs the linker to create the new default symbol
-``rte_acl_create@DPDK_22``, which points to the above newly named function.
-
-We finally modify the prototype of the call in the public header file,
-such that it contains both versions of the symbol and the public API.
-
-.. code-block:: c
-
-   struct rte_acl_ctx *
-   rte_acl_create(const struct rte_acl_param *param);
-
-   struct rte_acl_ctx * __vsym
-   rte_acl_create_v21(const struct rte_acl_param *param);
-
-   struct rte_acl_ctx * __vsym
-   rte_acl_create_v22(const struct rte_acl_param *param, int debug);
-
+``rte_acl_create@DPDK_22``, which points to the function named ``rte_acl_create_v22``
+(declared by the macro).
 
 And that's it, on the next shared library rebuild, there will be two versions of
 rte_acl_create, an old DPDK_21 version, used by previously built applications,
@@ -365,43 +328,10 @@ and a new DPDK_22 version, used by future built applications.
 .. note::
 
    **Before you leave**, please take care reviewing the sections on
-   :ref:`mapping static symbols <mapping_static_symbols>`,
    :ref:`enabling versioning macros <enabling_versioning_macros>`,
    and :ref:`ABI deprecation <abi_deprecation>`.
 
 
-.. _mapping_static_symbols:
-
-Mapping static symbols
-______________________
-
-Now we've taken what was a public symbol, and duplicated it into two uniquely
-and differently named symbols. We've then mapped each of those back to the
-public symbol ``rte_acl_create`` with different version tags. This only applies
-to dynamic linking, as static linking has no notion of versioning. That leaves
-this code in a position of no longer having a symbol simply named
-``rte_acl_create`` and a static build will fail on that missing symbol.
-
-To correct this, we can simply map a function of our choosing back to the public
-symbol in the static build with the ``MAP_STATIC_SYMBOL`` macro.  Generally the
-assumption is that the most recent version of the symbol is the one you want to
-map.  So, back in the C file where, immediately after ``rte_acl_create_v22`` is
-defined, we add this
-
-
-.. code-block:: c
-
-   struct rte_acl_ctx * __vsym
-   rte_acl_create_v22(const struct rte_acl_param *param, int debug)
-   {
-        ...
-   }
-   MAP_STATIC_SYMBOL(struct rte_acl_ctx *rte_acl_create(const struct rte_acl_param *param, int debug), rte_acl_create_v22);
-
-That tells the compiler that, when building a static library, any calls to the
-symbol ``rte_acl_create`` should be linked to ``rte_acl_create_v22``
-
-
 .. _enabling_versioning_macros:
 
 Enabling versioning macros
@@ -519,26 +449,17 @@ and ``DPDK_22`` version nodes.
     * Create an acl context object for apps to
     * manipulate
     */
-   struct rte_acl_ctx *
-   rte_acl_create(const struct rte_acl_param *param)
+   RTE_DEFAULT_SYMBOL(22, struct rte_acl_ctx *, rte_acl_create,
+        (const struct rte_acl_param *param)
    {
    ...
-   }
+   })
 
-   __rte_experimental
-   struct rte_acl_ctx *
-   rte_acl_create_e(const struct rte_acl_param *param)
-   {
-      return rte_acl_create(param);
-   }
-   VERSION_SYMBOL_EXPERIMENTAL(rte_acl_create, _e);
-
-   struct rte_acl_ctx *
-   rte_acl_create_v22(const struct rte_acl_param *param)
+   RTE_VERSION_EXPERIMENTAL_SYMBOL(struct rte_acl_ctx *, rte_acl_create,
+        (const struct rte_acl_param *param)
    {
       return rte_acl_create(param);
-   }
-   BIND_DEFAULT_SYMBOL(rte_acl_create, _v22, 22);
+   })
 
 In the map file, we map the symbol to both the ``EXPERIMENTAL``
 and ``DPDK_22`` version nodes.
@@ -564,13 +485,6 @@ and ``DPDK_22`` version nodes.
         rte_acl_create;
    };
 
-.. note::
-
-   Please note, similar to :ref:`symbol versioning <example_abi_macro_usage>`,
-   when aliasing to experimental you will also need to take care of
-   :ref:`mapping static symbols <mapping_static_symbols>`.
-
-
 .. _abi_deprecation:
 
 Deprecating part of a public API
diff --git a/lib/eal/include/rte_function_versioning.h b/lib/eal/include/rte_function_versioning.h
index eb6dd2bc17..259b960ef5 100644
--- a/lib/eal/include/rte_function_versioning.h
+++ b/lib/eal/include/rte_function_versioning.h
@@ -96,4 +96,31 @@
  */
 #endif
 
+#ifdef RTE_BUILD_SHARED_LIB
+
+#define RTE_VERSION_SYMBOL(ver, type, name, ...) \
+__rte_used type name ## _v ## ver __VA_ARGS__ \
+__asm__(".symver " RTE_STR(name) "_v" RTE_STR(ver) ", " RTE_STR(name) "@DPDK_" RTE_STR(ver));
+
+#define RTE_VERSION_EXPERIMENTAL_SYMBOL(type, name, ...) \
+__rte_used type name ## _exp __VA_ARGS__ \
+__asm__(".symver " RTE_STR(name) "_exp, " RTE_STR(name) "@EXPERIMENTAL")
+
+#define RTE_DEFAULT_SYMBOL(ver, type, name, ...) \
+__rte_used type name ## _v ## ver __VA_ARGS__ \
+__asm__(".symver " RTE_STR(name) "_v" RTE_STR(ver) ", " RTE_STR(name) "@@DPDK_" RTE_STR(ver));
+
+#else /* !RTE_BUILD_SHARED_LIB */
+
+#define RTE_VERSION_SYMBOL(ver, type, name, ...) \
+type name ## _v ## ver __VA_ARGS__
+
+#define RTE_VERSION_EXPERIMENTAL_SYMBOL(type, name, ...) \
+type name ## _exp __VA_ARGS__
+
+#define RTE_DEFAULT_SYMBOL(ver, type, name, ...) \
+type name __VA_ARGS__
+
+#endif /* RTE_BUILD_SHARED_LIB */
+
 #endif /* _RTE_FUNCTION_VERSIONING_H_ */
diff --git a/lib/net/rte_net_crc.c b/lib/net/rte_net_crc.c
index 2fb3eec231..dd93d43c2e 100644
--- a/lib/net/rte_net_crc.c
+++ b/lib/net/rte_net_crc.c
@@ -345,8 +345,7 @@ handlers_init(enum rte_net_crc_alg alg)
 
 /* Public API */
 
-void
-rte_net_crc_set_alg_v25(enum rte_net_crc_alg alg)
+RTE_VERSION_SYMBOL(25, void, rte_net_crc_set_alg, (enum rte_net_crc_alg alg)
 {
 	handlers = NULL;
 	if (max_simd_bitwidth == 0)
@@ -372,10 +371,9 @@ rte_net_crc_set_alg_v25(enum rte_net_crc_alg alg)
 
 	if (handlers == NULL)
 		handlers = handlers_scalar;
-}
-VERSION_SYMBOL(rte_net_crc_set_alg, _v25, 25);
+})
 
-struct rte_net_crc *rte_net_crc_set_alg_v26(enum rte_net_crc_alg alg,
+RTE_DEFAULT_SYMBOL(26, struct rte_net_crc *, rte_net_crc_set_alg, (enum rte_net_crc_alg alg,
 	enum rte_net_crc_type type)
 {
 	uint16_t max_simd_bitwidth;
@@ -413,20 +411,14 @@ struct rte_net_crc *rte_net_crc_set_alg_v26(enum rte_net_crc_alg alg,
 		break;
 	}
 	return crc;
-}
-BIND_DEFAULT_SYMBOL(rte_net_crc_set_alg, _v26, 26);
-MAP_STATIC_SYMBOL(struct rte_net_crc *rte_net_crc_set_alg(
-	enum rte_net_crc_alg alg, enum rte_net_crc_type type),
-	rte_net_crc_set_alg_v26);
+})
 
 void rte_net_crc_free(struct rte_net_crc *crc)
 {
 	rte_free(crc);
 }
 
-uint32_t
-rte_net_crc_calc_v25(const void *data,
-	uint32_t data_len,
+RTE_VERSION_SYMBOL(25, uint32_t, rte_net_crc_calc, (const void *data, uint32_t data_len,
 	enum rte_net_crc_type type)
 {
 	uint32_t ret;
@@ -436,19 +428,13 @@ rte_net_crc_calc_v25(const void *data,
 	ret = f_handle(data, data_len);
 
 	return ret;
-}
-VERSION_SYMBOL(rte_net_crc_calc, _v25, 25);
+})
 
-uint32_t
-rte_net_crc_calc_v26(const struct rte_net_crc *ctx,
+RTE_DEFAULT_SYMBOL(26, uint32_t, rte_net_crc_calc, (const struct rte_net_crc *ctx,
 	const void *data, const uint32_t data_len)
 {
 	return handlers_dpdk26[ctx->alg].f[ctx->type](data, data_len);
-}
-BIND_DEFAULT_SYMBOL(rte_net_crc_calc, _v26, 26);
-MAP_STATIC_SYMBOL(uint32_t rte_net_crc_calc(const struct rte_net_crc *ctx,
-	const void *data, const uint32_t data_len),
-	rte_net_crc_calc_v26);
+})
 
 /* Call initialisation helpers for all crc algorithm handlers */
 RTE_INIT(rte_net_crc_init)
-- 
2.48.1


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [RFC v2 2/2] build: generate symbol maps
  2025-03-06 12:50 ` [RFC v2 1/2] " David Marchand
@ 2025-03-06 12:50   ` David Marchand
  2025-03-06 15:45   ` [RFC v2 1/2] eal: add new function versioning macros Andre Muezerie
  1 sibling, 0 replies; 17+ messages in thread
From: David Marchand @ 2025-03-06 12:50 UTC (permalink / raw)
  To: dev; +Cc: thomas, bruce.richardson, andremue, Jasvinder Singh

Rather than maintain a file in parallel of the code, symbols to be
exported can be marked with a token.
The build framework then generates map files in a format that can satisfy
GNU linker.

Apply those macros to lib/net as an example.

Documentation is missing.
Converting from .map to Windows export file is not done.
Checks on map files are left in place, though they could be removed once
the whole tree is converted.
Experimental and internal symbol types are not handled.
Probably something else is missing, but this patch is still at RFC level.

Signed-off-by: David Marchand <david.marchand@redhat.com>
---
 buildtools/gen-version-map.py | 65 +++++++++++++++++++++++++++++++++++
 buildtools/meson.build        |  1 +
 drivers/meson.build           |  2 --
 lib/meson.build               | 19 ++++++++--
 lib/net/rte_arp.c             |  1 +
 lib/net/rte_ether.c           |  3 ++
 lib/net/rte_net.c             |  2 ++
 lib/net/rte_net_crc.c         |  1 +
 lib/net/version.map           | 23 -------------
 meson.build                   |  3 +-
 10 files changed, 91 insertions(+), 29 deletions(-)
 create mode 100755 buildtools/gen-version-map.py
 delete mode 100644 lib/net/version.map

diff --git a/buildtools/gen-version-map.py b/buildtools/gen-version-map.py
new file mode 100755
index 0000000000..2b03f328ea
--- /dev/null
+++ b/buildtools/gen-version-map.py
@@ -0,0 +1,65 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright (c) 2024 Red Hat, Inc.
+
+"""Generate a version map file used by GNU linker."""
+
+import re
+import sys
+
+# From meson.build
+sym_export_regexp = re.compile(r"^RTE_EXPORT_SYMBOL\(([^,]+)\)$")
+# From rte_function_versioning.h
+sym_ver_regexp = re.compile(r"^RTE_VERSION_SYMBOL\(([^,]+), [^,]+, ([^,]+),")
+sym_default_regexp = re.compile(r"^RTE_DEFAULT_SYMBOL\(([^,]+), [^,]+, ([^,]+),")
+
+with open("../ABI_VERSION") as f:
+    abi = re.match("([0-9]+).[0-9]", f.readline()).group(1)
+
+symbols = {}
+
+for file in sys.argv[2:]:
+    with open(file, encoding="utf-8") as f:
+        for ln in f.readlines():
+            node = None
+            symbol = None
+            if sym_export_regexp.match(ln):
+                symbol = sym_export_regexp.match(ln).group(1)
+            elif sym_ver_regexp.match(ln):
+                node = sym_ver_regexp.match(ln).group(1)
+                symbol = sym_ver_regexp.match(ln).group(2)
+            elif sym_default_regexp.match(ln):
+                node = sym_default_regexp.match(ln).group(1)
+                symbol = sym_default_regexp.match(ln).group(2)
+
+            if not symbol:
+                continue
+
+            if not node:
+                node = abi
+            if node not in symbols:
+                symbols[node] = []
+            symbols[node].append(symbol)
+
+with open(sys.argv[1], "w") as outfile:
+    local_token = False
+    if abi in symbols:
+        outfile.writelines(f"DPDK_{abi} {{\n\tglobal:\n\n")
+        for symbol in sorted(symbols[abi]):
+            outfile.writelines(f"\t{symbol};\n")
+        outfile.writelines("\n")
+        if not local_token:
+            outfile.writelines("\tlocal: *;\n")
+            local_token = True
+        outfile.writelines("};\n")
+        del symbols[abi]
+    for key in sorted(symbols.keys()):
+        outfile.writelines(f"DPDK_{key} {{\n\tglobal:\n\n")
+        for symbol in sorted(symbols[key]):
+            outfile.writelines(f"\t{symbol};\n")
+        outfile.writelines("\n")
+        if not local_token:
+            outfile.writelines("\tlocal: *;\n")
+            local_token = True
+        outfile.writelines(f"}} DPDK_{abi};\n")
+        del symbols[key]
diff --git a/buildtools/meson.build b/buildtools/meson.build
index 4e2c1217a2..b745e9afa4 100644
--- a/buildtools/meson.build
+++ b/buildtools/meson.build
@@ -16,6 +16,7 @@ else
     py3 = ['meson', 'runpython']
 endif
 echo = py3 + ['-c', 'import sys; print(*sys.argv[1:])']
+gen_version_map = py3 + files('gen-version-map.py')
 list_dir_globs = py3 + files('list-dir-globs.py')
 map_to_win_cmd = py3 + files('map_to_win.py')
 sphinx_wrapper = py3 + files('call-sphinx-build.py')
diff --git a/drivers/meson.build b/drivers/meson.build
index 05391a575d..d5fe3749c4 100644
--- a/drivers/meson.build
+++ b/drivers/meson.build
@@ -5,8 +5,6 @@ if is_ms_compiler
     subdir_done()
 endif
 
-fs = import('fs')
-
 # Defines the order of dependencies evaluation
 subdirs = [
         'common',
diff --git a/lib/meson.build b/lib/meson.build
index ce92cb5537..4db1864241 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -110,6 +110,7 @@ endif
 default_cflags = machine_args
 default_cflags += ['-DALLOW_EXPERIMENTAL_API']
 default_cflags += ['-DALLOW_INTERNAL_API']
+default_cflags += ['-DRTE_EXPORT_SYMBOL(a)=']
 
 if cc.has_argument('-Wno-format-truncation')
     default_cflags += '-Wno-format-truncation'
@@ -254,6 +255,9 @@ foreach l:libraries
             include_directories: includes,
             dependencies: static_deps)
 
+    version_map = '@0@/@1@/version.map'.format(meson.current_source_dir(), l)
+    lk_deps = []
+
     if not use_function_versioning or is_windows
         # use pre-build objects to build shared lib
         sources = []
@@ -262,10 +266,19 @@ foreach l:libraries
         # for compat we need to rebuild with
         # RTE_BUILD_SHARED_LIB defined
         cflags += '-DRTE_BUILD_SHARED_LIB'
-    endif
 
-    version_map = '@0@/@1@/version.map'.format(meson.current_source_dir(), l)
-    lk_deps = [version_map]
+        # POC: generate version.map if absent.
+        if not fs.is_file(version_map)
+            map_file = custom_target(libname + '_map',
+                    command: [gen_version_map, '@OUTPUT@', '@INPUT@'],
+                    input: sources,
+                    output: '@0@_version.map'.format(libname))
+            version_map = map_file.full_path()
+            lk_deps += [map_file]
+        else
+            lk_deps += [version_map]
+        endif
+    endif
 
     if is_ms_linker
         def_file = custom_target(libname + '_def',
diff --git a/lib/net/rte_arp.c b/lib/net/rte_arp.c
index 22af519586..cd0f49a7a9 100644
--- a/lib/net/rte_arp.c
+++ b/lib/net/rte_arp.c
@@ -47,3 +47,4 @@ rte_net_make_rarp_packet(struct rte_mempool *mpool,
 
 	return mbuf;
 }
+RTE_EXPORT_SYMBOL(rte_net_make_rarp_packet)
diff --git a/lib/net/rte_ether.c b/lib/net/rte_ether.c
index f59c20289d..9d02db1676 100644
--- a/lib/net/rte_ether.c
+++ b/lib/net/rte_ether.c
@@ -17,6 +17,7 @@ rte_eth_random_addr(uint8_t *addr)
 	addr[0] &= (uint8_t)~RTE_ETHER_GROUP_ADDR;	/* clear multicast bit */
 	addr[0] |= RTE_ETHER_LOCAL_ADMIN_ADDR;	/* set local assignment bit */
 }
+RTE_EXPORT_SYMBOL(rte_eth_random_addr)
 
 void
 rte_ether_format_addr(char *buf, uint16_t size,
@@ -25,6 +26,7 @@ rte_ether_format_addr(char *buf, uint16_t size,
 	snprintf(buf, size, RTE_ETHER_ADDR_PRT_FMT,
 		RTE_ETHER_ADDR_BYTES(eth_addr));
 }
+RTE_EXPORT_SYMBOL(rte_ether_format_addr)
 
 static int8_t get_xdigit(char ch)
 {
@@ -153,3 +155,4 @@ rte_ether_unformat_addr(const char *s, struct rte_ether_addr *ea)
 	rte_errno = EINVAL;
 	return -1;
 }
+RTE_EXPORT_SYMBOL(rte_ether_unformat_addr)
diff --git a/lib/net/rte_net.c b/lib/net/rte_net.c
index 0c32e78a13..9a1bc3fb7d 100644
--- a/lib/net/rte_net.c
+++ b/lib/net/rte_net.c
@@ -306,6 +306,7 @@ rte_net_skip_ip6_ext(uint16_t proto, const struct rte_mbuf *m, uint32_t *off,
 	}
 	return -1;
 }
+RTE_EXPORT_SYMBOL(rte_net_skip_ip6_ext)
 
 /* parse mbuf data to get packet type */
 uint32_t rte_net_get_ptype(const struct rte_mbuf *m,
@@ -601,3 +602,4 @@ uint32_t rte_net_get_ptype(const struct rte_mbuf *m,
 
 	return pkt_type;
 }
+RTE_EXPORT_SYMBOL(rte_net_get_ptype)
diff --git a/lib/net/rte_net_crc.c b/lib/net/rte_net_crc.c
index dd93d43c2e..03be816509 100644
--- a/lib/net/rte_net_crc.c
+++ b/lib/net/rte_net_crc.c
@@ -417,6 +417,7 @@ void rte_net_crc_free(struct rte_net_crc *crc)
 {
 	rte_free(crc);
 }
+RTE_EXPORT_SYMBOL(rte_net_crc_free)
 
 RTE_VERSION_SYMBOL(25, uint32_t, rte_net_crc_calc, (const void *data, uint32_t data_len,
 	enum rte_net_crc_type type)
diff --git a/lib/net/version.map b/lib/net/version.map
deleted file mode 100644
index f4dd673fa3..0000000000
--- a/lib/net/version.map
+++ /dev/null
@@ -1,23 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_eth_random_addr;
-	rte_ether_format_addr;
-	rte_ether_unformat_addr;
-	rte_net_crc_calc;
-	rte_net_crc_free;
-	rte_net_crc_set_alg;
-	rte_net_get_ptype;
-	rte_net_make_rarp_packet;
-	rte_net_skip_ip6_ext;
-
-	local: *;
-};
-
-DPDK_26 {
-	global:
-
-	rte_net_crc_calc;
-	rte_net_crc_set_alg;
-
-} DPDK_25;
diff --git a/meson.build b/meson.build
index 8436d1dff8..dfb4cb3aee 100644
--- a/meson.build
+++ b/meson.build
@@ -13,10 +13,11 @@ project('DPDK', 'c',
         meson_version: '>= 0.57'
 )
 
+fs = import('fs')
+
 # check for developer mode
 developer_mode = false
 if get_option('developer_mode').auto()
-    fs = import('fs')
     developer_mode = fs.exists('.git')
 else
     developer_mode = get_option('developer_mode').enabled()
-- 
2.48.1


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [RFC v2 1/2] eal: add new function versioning macros
  2025-03-06 12:50 ` [RFC v2 1/2] " David Marchand
  2025-03-06 12:50   ` [RFC v2 2/2] build: generate symbol maps David Marchand
@ 2025-03-06 15:45   ` Andre Muezerie
  1 sibling, 0 replies; 17+ messages in thread
From: Andre Muezerie @ 2025-03-06 15:45 UTC (permalink / raw)
  To: David Marchand
  Cc: dev, thomas, bruce.richardson, Tyler Retzlaff, Jasvinder Singh

On Thu, Mar 06, 2025 at 01:50:20PM +0100, David Marchand wrote:
> For versioning symbols:
> - MSVC uses pragmas on the symbol,
> - GNU linker uses special asm directives,
> 
> To accommodate both GNU linker and MSVC linker, introduce new macros for
> exporting and versioning symbols that will surround the whole function.
> 
> This has the advantage of hiding all the ugly details in the macros.
> Now versioning a symbol is just a call to a single macro:
> - RTE_VERSION_SYMBOL (resp. RTE_VERSION_EXPERIMENTAL_SYMBOL), for
>   keeping an old implementation code under a versioned function (resp.
>   experimental function),
> - RTE_DEFAULT_SYMBOL, for declaring the new default versioned function,
>   and handling the static link special case, instead of
>   BIND_DEFAULT_SYMBOL + MAP_STATIC_SYMBOL,
> 
> Documentation has been updated though it needs some polishing.
> The experimental macro has not been tested.
> 
> Signed-off-by: David Marchand <david.marchand@redhat.com>
> ---
> Changes since RFC v1:
> - renamed and prefixed macros,
> - reindented in prevision of second patch,
> 
> ---
>  doc/guides/contributing/abi_versioning.rst | 130 ++++-----------------
>  lib/eal/include/rte_function_versioning.h  |  27 +++++
>  lib/net/rte_net_crc.c                      |  30 ++---
>  3 files changed, 57 insertions(+), 130 deletions(-)
> 

I like the proposal. Having a single macro able to handle different linkers
is clearly a good step forward.

Acked-by: Andre Muezerie <andremue@linux.microsoft.com>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [RFC v3 0/8] Symbol versioning and export rework
  2025-03-05 21:23 [RFC] eal: add new function versioning macros David Marchand
                   ` (2 preceding siblings ...)
  2025-03-06 12:50 ` [RFC v2 1/2] " David Marchand
@ 2025-03-11  9:55 ` David Marchand
  2025-03-11  9:55   ` [RFC v3 1/8] lib: remove incorrect exported symbols David Marchand
                     ` (8 more replies)
  3 siblings, 9 replies; 17+ messages in thread
From: David Marchand @ 2025-03-11  9:55 UTC (permalink / raw)
  To: dev; +Cc: thomas, bruce.richardson, andremue

So far, each DPDK library (or driver) exposing symbols in an ABI had to
maintain a version.map and use some macros for symbol versioning,
specially crafted with the GNU linker in mind.

This series proposes to rework the whole principle, and instead rely on
marking the symbol exports in the source code itself, then let it to the
build framework to produce a version script adapted to the linker in use
(think GNU linker vs MSVC linker).

This greatly simplifies versioning symbols: a developer does not need to
know anything about version.map, or that a versioned symbol must be
renamed with _v26, annotated with __vsym, exported in a header etc...

Checking symbol maps becomes unnecessary since generated by the build
framework.

Updating to a new ABI is just a matter of bumping the value in
ABI_VERSION.


Comments please.


-- 
David Marchand

Changes since RFC v2:
- updated RTE_VERSION_SYMBOL() (and friends) so that only the fonction
  signature is enclosed in the macro,
- dropped invalid exports for some dead symbols or inline helpers,
- updated documentation and tooling,
- converted the whole tree (via a local script of mine),

David Marchand (8):
  lib: remove incorrect exported symbols
  drivers: remove incorrect exported symbols
  eal: rework function versioning macros
  buildtools: display version when listing symbols
  build: generate symbol maps
  build: mark exported symbols
  build: use dynamically generated version maps
  build: remove static version maps

 .github/workflows/build.yml                   |   1 -
 MAINTAINERS                                   |   9 +-
 buildtools/check-symbols.sh                   |  33 +-
 buildtools/gen-version-map.py                 | 111 ++++
 buildtools/map-list-symbol.sh                 |  15 +-
 buildtools/map_to_win.py                      |  41 --
 buildtools/meson.build                        |   2 +-
 config/meson.build                            |   2 +
 config/rte_export.h                           |  16 +
 devtools/check-symbol-change.py               |  90 +++
 devtools/check-symbol-change.sh               | 186 ------
 devtools/check-symbol-maps.sh                 | 115 ----
 devtools/checkpatches.sh                      |   4 +-
 devtools/update-abi.sh                        |  46 --
 devtools/update_version_map_abi.py            | 210 -------
 doc/guides/contributing/abi_policy.rst        |  21 +-
 doc/guides/contributing/abi_versioning.rst    | 385 ++----------
 doc/guides/contributing/coding_style.rst      |   7 -
 .../contributing/img/patch_cheatsheet.svg     | 303 +++++----
 doc/guides/contributing/patches.rst           |   6 +-
 drivers/baseband/acc/rte_acc100_pmd.c         |   1 +
 drivers/baseband/acc/version.map              |  10 -
 .../fpga_5gnr_fec/rte_fpga_5gnr_fec.c         |   1 +
 drivers/baseband/fpga_5gnr_fec/version.map    |  11 -
 drivers/baseband/fpga_lte_fec/fpga_lte_fec.c  |   1 +
 drivers/baseband/fpga_lte_fec/version.map     |  10 -
 drivers/bus/auxiliary/auxiliary_common.c      |   2 +
 drivers/bus/auxiliary/version.map             |   8 -
 drivers/bus/cdx/cdx.c                         |   4 +
 drivers/bus/cdx/cdx_vfio.c                    |   4 +
 drivers/bus/cdx/version.map                   |  14 -
 drivers/bus/dpaa/dpaa_bus.c                   | 104 ++++
 drivers/bus/dpaa/version.map                  | 109 ----
 drivers/bus/fslmc/fslmc_bus.c                 |   4 +
 drivers/bus/fslmc/fslmc_vfio.c                |  12 +
 drivers/bus/fslmc/mc/dpbp.c                   |   6 +
 drivers/bus/fslmc/mc/dpci.c                   |   3 +
 drivers/bus/fslmc/mc/dpcon.c                  |   6 +
 drivers/bus/fslmc/mc/dpdmai.c                 |   8 +
 drivers/bus/fslmc/mc/dpio.c                   |  13 +
 drivers/bus/fslmc/mc/dpmng.c                  |   2 +
 drivers/bus/fslmc/mc/mc_sys.c                 |   1 +
 drivers/bus/fslmc/portal/dpaa2_hw_dpbp.c      |   3 +
 drivers/bus/fslmc/portal/dpaa2_hw_dpci.c      |   2 +
 drivers/bus/fslmc/portal/dpaa2_hw_dpio.c      |  11 +
 drivers/bus/fslmc/qbman/qbman_debug.c         |   2 +
 drivers/bus/fslmc/qbman/qbman_portal.c        |  41 ++
 drivers/bus/fslmc/version.map                 | 129 ----
 drivers/bus/ifpga/ifpga_bus.c                 |   3 +
 drivers/bus/ifpga/version.map                 |   9 -
 drivers/bus/pci/bsd/pci.c                     |  10 +
 drivers/bus/pci/linux/pci.c                   |  10 +
 drivers/bus/pci/pci_common.c                  |  10 +
 drivers/bus/pci/version.map                   |  43 --
 drivers/bus/pci/windows/pci.c                 |  10 +
 drivers/bus/platform/platform.c               |   2 +
 drivers/bus/platform/version.map              |  10 -
 drivers/bus/uacce/uacce.c                     |   9 +
 drivers/bus/uacce/version.map                 |  15 -
 drivers/bus/vdev/vdev.c                       |   6 +
 drivers/bus/vdev/version.map                  |  17 -
 drivers/bus/vmbus/linux/vmbus_bus.c           |   6 +
 drivers/bus/vmbus/version.map                 |  33 -
 drivers/bus/vmbus/vmbus_channel.c             |  13 +
 drivers/bus/vmbus/vmbus_common.c              |   3 +
 drivers/common/cnxk/cnxk_security.c           |  12 +
 drivers/common/cnxk/cnxk_utils.c              |   1 +
 drivers/common/cnxk/roc_platform.c            | 559 +++++++++++++++++
 drivers/common/cnxk/roc_se.h                  |   1 -
 drivers/common/cnxk/version.map               | 578 ------------------
 drivers/common/cpt/cpt_fpm_tables.c           |   2 +
 drivers/common/cpt/cpt_pmd_ops_helper.c       |   3 +
 drivers/common/cpt/version.map                |  11 -
 drivers/common/dpaax/caamflib.c               |   1 +
 drivers/common/dpaax/dpaa_of.c                |  12 +
 drivers/common/dpaax/dpaax_iova_table.c       |   6 +
 drivers/common/dpaax/version.map              |  25 -
 drivers/common/ionic/ionic_common_uio.c       |   4 +
 drivers/common/ionic/version.map              |  10 -
 .../common/mlx5/linux/mlx5_common_auxiliary.c |   1 +
 drivers/common/mlx5/linux/mlx5_common_os.c    |   9 +
 drivers/common/mlx5/linux/mlx5_common_verbs.c |   3 +
 drivers/common/mlx5/linux/mlx5_glue.c         |   1 +
 drivers/common/mlx5/linux/mlx5_nl.c           |  21 +
 drivers/common/mlx5/mlx5_common.c             |   9 +
 drivers/common/mlx5/mlx5_common_devx.c        |   9 +
 drivers/common/mlx5/mlx5_common_mp.c          |   8 +
 drivers/common/mlx5/mlx5_common_mr.c          |  11 +
 drivers/common/mlx5/mlx5_common_pci.c         |   2 +
 drivers/common/mlx5/mlx5_common_utils.c       |  11 +
 drivers/common/mlx5/mlx5_devx_cmds.c          |  51 ++
 drivers/common/mlx5/mlx5_malloc.c             |   4 +
 drivers/common/mlx5/version.map               | 174 ------
 drivers/common/mlx5/windows/mlx5_common_os.c  |   5 +
 drivers/common/mlx5/windows/mlx5_glue.c       |   3 +-
 drivers/common/mvep/mvep_common.c             |   2 +
 drivers/common/mvep/version.map               |   8 -
 drivers/common/nfp/nfp_common.c               |   7 +
 drivers/common/nfp/nfp_common_pci.c           |   1 +
 drivers/common/nfp/nfp_dev.c                  |   1 +
 drivers/common/nfp/version.map                |  16 -
 drivers/common/nitrox/nitrox_device.c         |   1 +
 drivers/common/nitrox/nitrox_logs.c           |   1 +
 drivers/common/nitrox/nitrox_qp.c             |   2 +
 drivers/common/nitrox/version.map             |  10 -
 drivers/common/octeontx/octeontx_mbox.c       |   6 +
 drivers/common/octeontx/version.map           |  12 -
 drivers/common/sfc_efx/sfc_efx.c              | 273 +++++++++
 drivers/common/sfc_efx/sfc_efx_mcdi.c         |   2 +
 drivers/common/sfc_efx/version.map            | 302 ---------
 drivers/crypto/cnxk/cn10k_cryptodev_ops.c     |   7 +
 drivers/crypto/cnxk/cn9k_cryptodev_ops.c      |   2 +
 drivers/crypto/cnxk/cnxk_cryptodev_ops.c      |   7 +
 drivers/crypto/cnxk/version.map               |  30 -
 drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c   |   2 +
 drivers/crypto/dpaa2_sec/version.map          |   8 -
 drivers/crypto/dpaa_sec/dpaa_sec.c            |   2 +
 drivers/crypto/dpaa_sec/version.map           |   8 -
 drivers/crypto/octeontx/otx_cryptodev_ops.c   |   2 +
 drivers/crypto/octeontx/version.map           |  12 -
 .../scheduler/rte_cryptodev_scheduler.c       |  10 +
 drivers/crypto/scheduler/version.map          |  16 -
 drivers/dma/cnxk/cnxk_dmadev_fp.c             |   4 +
 drivers/dma/cnxk/version.map                  |  10 -
 drivers/event/cnxk/cnxk_worker.c              |   2 +
 drivers/event/cnxk/version.map                |  11 -
 drivers/event/dlb2/rte_pmd_dlb2.c             |   1 +
 drivers/event/dlb2/version.map                |  10 -
 drivers/mempool/cnxk/cn10k_hwpool_ops.c       |   3 +
 drivers/mempool/cnxk/version.map              |  12 -
 drivers/mempool/dpaa/dpaa_mempool.c           |   2 +
 drivers/mempool/dpaa/version.map              |   8 -
 drivers/mempool/dpaa2/dpaa2_hw_mempool.c      |   5 +
 drivers/mempool/dpaa2/version.map             |  16 -
 drivers/meson.build                           |  72 +--
 drivers/net/atlantic/rte_pmd_atlantic.c       |   6 +
 drivers/net/atlantic/version.map              |  15 -
 drivers/net/bnxt/rte_pmd_bnxt.c               |  16 +
 drivers/net/bnxt/version.map                  |  22 -
 drivers/net/bonding/rte_eth_bond_8023ad.c     |  12 +
 drivers/net/bonding/rte_eth_bond_api.c        |  15 +
 drivers/net/bonding/version.map               |  33 -
 drivers/net/cnxk/cnxk_ethdev.c                |   3 +
 drivers/net/cnxk/cnxk_ethdev_sec.c            |   9 +
 drivers/net/cnxk/version.map                  |  27 -
 drivers/net/dpaa/dpaa_ethdev.c                |   3 +
 drivers/net/dpaa/version.map                  |  14 -
 drivers/net/dpaa2/dpaa2_ethdev.c              |  11 +
 drivers/net/dpaa2/dpaa2_mux.c                 |   3 +
 drivers/net/dpaa2/dpaa2_rxtx.c                |   1 +
 drivers/net/dpaa2/version.map                 |  35 --
 drivers/net/intel/i40e/rte_pmd_i40e.c         |  39 ++
 drivers/net/intel/i40e/version.map            |  55 --
 drivers/net/intel/iavf/iavf_ethdev.c          |   9 +
 drivers/net/intel/iavf/iavf_rxtx.c            |   8 +
 drivers/net/intel/iavf/version.map            |  33 -
 drivers/net/intel/ice/ice_diagnose.c          |   3 +
 drivers/net/intel/ice/version.map             |  16 -
 drivers/net/intel/idpf/idpf_common_device.c   |  10 +
 drivers/net/intel/idpf/idpf_common_rxtx.c     |  33 +
 drivers/net/intel/idpf/idpf_common_virtchnl.c |  29 +
 drivers/net/intel/idpf/version.map            |  80 ---
 drivers/net/intel/ipn3ke/ipn3ke_ethdev.c      |   1 +
 drivers/net/intel/ipn3ke/version.map          |   9 -
 drivers/net/intel/ixgbe/rte_pmd_ixgbe.c       |  37 ++
 drivers/net/intel/ixgbe/version.map           |  49 --
 drivers/net/mlx5/mlx5.c                       |   1 +
 drivers/net/mlx5/mlx5_flow.c                  |   4 +
 drivers/net/mlx5/mlx5_rx.c                    |   2 +
 drivers/net/mlx5/mlx5_rxq.c                   |   2 +
 drivers/net/mlx5/mlx5_tx.c                    |   1 +
 drivers/net/mlx5/mlx5_txq.c                   |   3 +
 drivers/net/mlx5/version.map                  |  28 -
 drivers/net/octeontx/octeontx_ethdev.c        |   1 +
 drivers/net/octeontx/version.map              |   7 -
 drivers/net/ring/rte_eth_ring.c               |   2 +
 drivers/net/ring/version.map                  |   8 -
 drivers/net/softnic/rte_eth_softnic.c         |   1 +
 drivers/net/softnic/rte_eth_softnic_thread.c  |   1 +
 drivers/net/softnic/version.map               |   8 -
 drivers/net/vhost/rte_eth_vhost.c             |   2 +
 drivers/net/vhost/version.map                 |   8 -
 drivers/power/kvm_vm/guest_channel.c          |   2 +
 drivers/power/kvm_vm/version.map              |   8 -
 drivers/raw/cnxk_rvu_lf/cnxk_rvu_lf.c         |  10 +
 drivers/raw/cnxk_rvu_lf/version.map           |  16 -
 drivers/raw/ifpga/rte_pmd_ifpga.c             |  11 +
 drivers/raw/ifpga/version.map                 |  17 -
 drivers/version.map                           |   3 -
 lib/acl/acl_bld.c                             |   1 +
 lib/acl/acl_run_scalar.c                      |   1 +
 lib/acl/rte_acl.c                             |  11 +
 lib/acl/version.map                           |  19 -
 lib/argparse/rte_argparse.c                   |   2 +
 lib/argparse/version.map                      |   9 -
 lib/bbdev/bbdev_trace_points.c                |   2 +
 lib/bbdev/rte_bbdev.c                         |  31 +
 lib/bbdev/version.map                         |  47 --
 lib/bitratestats/rte_bitrate.c                |   4 +
 lib/bitratestats/version.map                  |  10 -
 lib/bpf/bpf.c                                 |   2 +
 lib/bpf/bpf_convert.c                         |   1 +
 lib/bpf/bpf_dump.c                            |   1 +
 lib/bpf/bpf_exec.c                            |   2 +
 lib/bpf/bpf_load.c                            |   1 +
 lib/bpf/bpf_load_elf.c                        |   1 +
 lib/bpf/bpf_pkt.c                             |   4 +
 lib/bpf/bpf_stub.c                            |   2 +
 lib/bpf/version.map                           |  18 -
 lib/cfgfile/rte_cfgfile.c                     |  17 +
 lib/cfgfile/version.map                       |  23 -
 lib/cmdline/cmdline.c                         |   9 +
 lib/cmdline/cmdline_cirbuf.c                  |  19 +
 lib/cmdline/cmdline_parse.c                   |   4 +
 lib/cmdline/cmdline_parse_bool.c              |   1 +
 lib/cmdline/cmdline_parse_etheraddr.c         |   3 +
 lib/cmdline/cmdline_parse_ipaddr.c            |   3 +
 lib/cmdline/cmdline_parse_num.c               |   3 +
 lib/cmdline/cmdline_parse_portlist.c          |   3 +
 lib/cmdline/cmdline_parse_string.c            |   5 +
 lib/cmdline/cmdline_rdline.c                  |  15 +
 lib/cmdline/cmdline_socket.c                  |   3 +
 lib/cmdline/cmdline_vt100.c                   |   2 +
 lib/cmdline/version.map                       |  82 ---
 lib/compressdev/rte_comp.c                    |   6 +
 lib/compressdev/rte_compressdev.c             |  25 +
 lib/compressdev/rte_compressdev_pmd.c         |   3 +
 lib/compressdev/version.map                   |  40 --
 lib/cryptodev/cryptodev_pmd.c                 |   7 +
 lib/cryptodev/cryptodev_trace_points.c        |   3 +
 lib/cryptodev/rte_cryptodev.c                 |  83 +++
 lib/cryptodev/version.map                     | 114 ----
 lib/dispatcher/rte_dispatcher.c               |  13 +
 lib/dispatcher/version.map                    |  20 -
 lib/distributor/rte_distributor.c             |   9 +
 lib/distributor/version.map                   |  15 -
 lib/dmadev/rte_dmadev.c                       |  19 +
 lib/dmadev/rte_dmadev_trace_points.c          |   7 +
 lib/dmadev/version.map                        |  47 --
 lib/eal/arm/rte_cpuflags.c                    |   3 +
 lib/eal/arm/rte_hypervisor.c                  |   1 +
 lib/eal/arm/rte_power_intrinsics.c            |   4 +
 lib/eal/common/eal_common_bus.c               |  10 +
 lib/eal/common/eal_common_class.c             |   4 +
 lib/eal/common/eal_common_config.c            |   7 +
 lib/eal/common/eal_common_cpuflags.c          |   1 +
 lib/eal/common/eal_common_debug.c             |   2 +
 lib/eal/common/eal_common_dev.c               |  19 +
 lib/eal/common/eal_common_devargs.c           |   9 +
 lib/eal/common/eal_common_errno.c             |   2 +
 lib/eal/common/eal_common_fbarray.c           |  26 +
 lib/eal/common/eal_common_hexdump.c           |   2 +
 lib/eal/common/eal_common_hypervisor.c        |   1 +
 lib/eal/common/eal_common_interrupts.c        |  27 +
 lib/eal/common/eal_common_launch.c            |   5 +
 lib/eal/common/eal_common_lcore.c             |  17 +
 lib/eal/common/eal_common_lcore_var.c         |   1 +
 lib/eal/common/eal_common_mcfg.c              |  20 +
 lib/eal/common/eal_common_memory.c            |  29 +
 lib/eal/common/eal_common_memzone.c           |   9 +
 lib/eal/common/eal_common_options.c           |   4 +
 lib/eal/common/eal_common_proc.c              |   8 +
 lib/eal/common/eal_common_string_fns.c        |   3 +
 lib/eal/common/eal_common_tailqs.c            |   3 +
 lib/eal/common/eal_common_thread.c            |  14 +
 lib/eal/common/eal_common_timer.c             |   4 +
 lib/eal/common/eal_common_trace.c             |  15 +
 lib/eal/common/eal_common_trace_ctf.c         |   1 +
 lib/eal/common/eal_common_trace_points.c      |  18 +
 lib/eal/common/eal_common_trace_utils.c       |   1 +
 lib/eal/common/eal_common_uuid.c              |   4 +
 lib/eal/common/rte_bitset.c                   |   1 +
 lib/eal/common/rte_keepalive.c                |   6 +
 lib/eal/common/rte_malloc.c                   |  22 +
 lib/eal/common/rte_random.c                   |   4 +
 lib/eal/common/rte_reciprocal.c               |   2 +
 lib/eal/common/rte_service.c                  |  31 +
 lib/eal/common/rte_version.c                  |   7 +
 lib/eal/freebsd/eal.c                         |  22 +
 lib/eal/freebsd/eal_alarm.c                   |   2 +
 lib/eal/freebsd/eal_dev.c                     |   4 +
 lib/eal/freebsd/eal_interrupts.c              |  19 +
 lib/eal/freebsd/eal_memory.c                  |   3 +
 lib/eal/freebsd/eal_thread.c                  |   2 +
 lib/eal/freebsd/eal_timer.c                   |   1 +
 lib/eal/include/rte_function_versioning.h     |  96 ++-
 lib/eal/linux/eal.c                           |   7 +
 lib/eal/linux/eal_alarm.c                     |   2 +
 lib/eal/linux/eal_dev.c                       |   4 +
 lib/eal/linux/eal_interrupts.c                |  19 +
 lib/eal/linux/eal_memory.c                    |   3 +
 lib/eal/linux/eal_thread.c                    |   2 +
 lib/eal/linux/eal_timer.c                     |   4 +
 lib/eal/linux/eal_vfio.c                      |  16 +
 lib/eal/loongarch/rte_cpuflags.c              |   3 +
 lib/eal/loongarch/rte_hypervisor.c            |   1 +
 lib/eal/loongarch/rte_power_intrinsics.c      |   4 +
 lib/eal/ppc/rte_cpuflags.c                    |   3 +
 lib/eal/ppc/rte_hypervisor.c                  |   1 +
 lib/eal/ppc/rte_power_intrinsics.c            |   4 +
 lib/eal/riscv/rte_cpuflags.c                  |   3 +
 lib/eal/riscv/rte_hypervisor.c                |   1 +
 lib/eal/riscv/rte_power_intrinsics.c          |   4 +
 lib/eal/unix/eal_debug.c                      |   2 +
 lib/eal/unix/eal_filesystem.c                 |   1 +
 lib/eal/unix/eal_firmware.c                   |   1 +
 lib/eal/unix/eal_unix_memory.c                |   4 +
 lib/eal/unix/eal_unix_timer.c                 |   1 +
 lib/eal/unix/rte_thread.c                     |  13 +
 lib/eal/version.map                           | 451 --------------
 lib/eal/windows/eal.c                         |  11 +
 lib/eal/windows/eal_alarm.c                   |   2 +
 lib/eal/windows/eal_debug.c                   |   1 +
 lib/eal/windows/eal_dev.c                     |   4 +
 lib/eal/windows/eal_interrupts.c              |  19 +
 lib/eal/windows/eal_memory.c                  |   7 +
 lib/eal/windows/eal_mp.c                      |   6 +
 lib/eal/windows/eal_thread.c                  |   1 +
 lib/eal/windows/eal_timer.c                   |   1 +
 lib/eal/windows/rte_thread.c                  |  14 +
 lib/eal/x86/rte_cpuflags.c                    |   3 +
 lib/eal/x86/rte_hypervisor.c                  |   1 +
 lib/eal/x86/rte_power_intrinsics.c            |   4 +
 lib/eal/x86/rte_spinlock.c                    |   1 +
 lib/efd/rte_efd.c                             |   7 +
 lib/efd/version.map                           |  13 -
 lib/ethdev/ethdev_driver.c                    |  24 +
 lib/ethdev/ethdev_linux_ethtool.c             |   3 +
 lib/ethdev/ethdev_private.c                   |   2 +
 lib/ethdev/ethdev_trace_points.c              |   6 +
 lib/ethdev/rte_ethdev.c                       | 168 +++++
 lib/ethdev/rte_ethdev_cman.c                  |   4 +
 lib/ethdev/rte_flow.c                         |  64 ++
 lib/ethdev/rte_mtr.c                          |  21 +
 lib/ethdev/rte_tm.c                           |  31 +
 lib/ethdev/version.map                        | 378 ------------
 lib/eventdev/eventdev_private.c               |   2 +
 lib/eventdev/eventdev_trace_points.c          |  11 +
 lib/eventdev/rte_event_crypto_adapter.c       |  15 +
 lib/eventdev/rte_event_dma_adapter.c          |  15 +
 lib/eventdev/rte_event_eth_rx_adapter.c       |  23 +
 lib/eventdev/rte_event_eth_tx_adapter.c       |  17 +
 lib/eventdev/rte_event_ring.c                 |   4 +
 lib/eventdev/rte_event_timer_adapter.c        |  11 +
 lib/eventdev/rte_eventdev.c                   |  46 ++
 lib/eventdev/version.map                      | 179 ------
 lib/fib/rte_fib.c                             |  10 +
 lib/fib/rte_fib6.c                            |   9 +
 lib/fib/version.map                           |  31 -
 lib/gpudev/gpudev.c                           |  32 +
 lib/gpudev/version.map                        |  44 --
 lib/graph/graph.c                             |  16 +
 lib/graph/graph_debug.c                       |   1 +
 lib/graph/graph_stats.c                       |   4 +
 lib/graph/node.c                              |  11 +
 lib/graph/rte_graph_model_mcore_dispatch.c    |   3 +
 lib/graph/rte_graph_worker.c                  |   3 +
 lib/graph/version.map                         |  61 --
 lib/gro/rte_gro.c                             |   6 +
 lib/gro/version.map                           |  12 -
 lib/gso/rte_gso.c                             |   1 +
 lib/gso/version.map                           |   7 -
 lib/hash/rte_cuckoo_hash.c                    |  27 +
 lib/hash/rte_fbk_hash.c                       |   3 +
 lib/hash/rte_hash_crc.c                       |   2 +
 lib/hash/rte_thash.c                          |  12 +
 lib/hash/rte_thash_gf2_poly_math.c            |   1 +
 lib/hash/rte_thash_gfni.c                     |   2 +
 lib/hash/version.map                          |  66 --
 lib/ip_frag/rte_ip_frag_common.c              |   5 +
 lib/ip_frag/rte_ipv4_fragmentation.c          |   2 +
 lib/ip_frag/rte_ipv4_reassembly.c             |   1 +
 lib/ip_frag/rte_ipv6_fragmentation.c          |   1 +
 lib/ip_frag/rte_ipv6_reassembly.c             |   1 +
 lib/ip_frag/version.map                       |  16 -
 lib/ipsec/ipsec_sad.c                         |   6 +
 lib/ipsec/ipsec_telemetry.c                   |   2 +
 lib/ipsec/sa.c                                |   4 +
 lib/ipsec/ses.c                               |   1 +
 lib/ipsec/version.map                         |  23 -
 lib/jobstats/rte_jobstats.c                   |  14 +
 lib/jobstats/version.map                      |  20 -
 lib/kvargs/rte_kvargs.c                       |   8 +
 lib/kvargs/version.map                        |  14 -
 lib/latencystats/rte_latencystats.c           |   5 +
 lib/latencystats/version.map                  |  11 -
 lib/log/log.c                                 |  22 +
 lib/log/log_color.c                           |   1 +
 lib/log/log_internal.h                        |   3 -
 lib/log/log_syslog.c                          |   1 +
 lib/log/log_timestamp.c                       |   1 +
 lib/log/version.map                           |  37 --
 lib/lpm/rte_lpm.c                             |   8 +
 lib/lpm/rte_lpm6.c                            |  10 +
 lib/lpm/version.map                           |  24 -
 lib/mbuf/rte_mbuf.c                           |  17 +
 lib/mbuf/rte_mbuf_dyn.c                       |   9 +
 lib/mbuf/rte_mbuf_pool_ops.c                  |   5 +
 lib/mbuf/rte_mbuf_ptype.c                     |   8 +
 lib/mbuf/version.map                          |  45 --
 lib/member/rte_member.c                       |  13 +
 lib/member/version.map                        |  19 -
 lib/mempool/mempool_trace_points.c            |  10 +
 lib/mempool/rte_mempool.c                     |  27 +
 lib/mempool/rte_mempool_ops.c                 |   4 +
 lib/mempool/rte_mempool_ops_default.c         |   4 +
 lib/mempool/version.map                       |  65 --
 lib/meson.build                               |  56 +-
 lib/meter/rte_meter.c                         |   6 +
 lib/meter/version.map                         |  12 -
 lib/metrics/rte_metrics.c                     |   8 +
 lib/metrics/rte_metrics_telemetry.c           |  11 +
 lib/metrics/version.map                       |  26 -
 lib/mldev/mldev_utils.c                       |   2 +
 lib/mldev/mldev_utils_neon.c                  |  18 +
 lib/mldev/mldev_utils_neon_bfloat16.c         |   2 +
 lib/mldev/mldev_utils_scalar.c                |  18 +
 lib/mldev/mldev_utils_scalar_bfloat16.c       |   2 +
 lib/mldev/rte_mldev.c                         |  37 ++
 lib/mldev/rte_mldev_pmd.c                     |   2 +
 lib/mldev/version.map                         |  74 ---
 lib/net/net_crc.h                             |  15 -
 lib/net/rte_arp.c                             |   1 +
 lib/net/rte_ether.c                           |   3 +
 lib/net/rte_net.c                             |   2 +
 lib/net/rte_net_crc.c                         |  29 +-
 lib/net/version.map                           |  23 -
 lib/node/ethdev_ctrl.c                        |   2 +
 lib/node/ip4_lookup.c                         |   1 +
 lib/node/ip4_reassembly.c                     |   1 +
 lib/node/ip4_rewrite.c                        |   1 +
 lib/node/ip6_lookup.c                         |   1 +
 lib/node/ip6_rewrite.c                        |   1 +
 lib/node/udp4_input.c                         |   2 +
 lib/node/version.map                          |  25 -
 lib/pcapng/rte_pcapng.c                       |   7 +
 lib/pcapng/version.map                        |  13 -
 lib/pci/rte_pci.c                             |   3 +
 lib/pci/version.map                           |   9 -
 lib/pdcp/rte_pdcp.c                           |   5 +
 lib/pdcp/version.map                          |  16 -
 lib/pdump/rte_pdump.c                         |   9 +
 lib/pdump/version.map                         |  15 -
 lib/pipeline/rte_pipeline.c                   |  23 +
 lib/pipeline/rte_port_in_action.c             |   8 +
 lib/pipeline/rte_swx_ctl.c                    |  17 +
 lib/pipeline/rte_swx_ipsec.c                  |   7 +
 lib/pipeline/rte_swx_pipeline.c               |  73 +++
 lib/pipeline/rte_table_action.c               |  16 +
 lib/pipeline/version.map                      | 172 ------
 lib/port/rte_port_ethdev.c                    |   3 +
 lib/port/rte_port_eventdev.c                  |   3 +
 lib/port/rte_port_fd.c                        |   3 +
 lib/port/rte_port_frag.c                      |   2 +
 lib/port/rte_port_ras.c                       |   2 +
 lib/port/rte_port_ring.c                      |   6 +
 lib/port/rte_port_sched.c                     |   2 +
 lib/port/rte_port_source_sink.c               |   2 +
 lib/port/rte_port_sym_crypto.c                |   3 +
 lib/port/rte_swx_port_ethdev.c                |   2 +
 lib/port/rte_swx_port_fd.c                    |   2 +
 lib/port/rte_swx_port_ring.c                  |   2 +
 lib/port/rte_swx_port_source_sink.c           |   3 +
 lib/port/version.map                          |  50 --
 lib/power/power_common.c                      |   8 +
 lib/power/rte_power_cpufreq.c                 |  18 +
 lib/power/rte_power_pmd_mgmt.c                |  10 +
 lib/power/rte_power_qos.c                     |   2 +
 lib/power/rte_power_uncore.c                  |  14 +
 lib/power/version.map                         |  71 ---
 lib/rawdev/rte_rawdev.c                       |  30 +
 lib/rawdev/version.map                        |  36 --
 lib/rcu/rte_rcu_qsbr.c                        |  11 +
 lib/rcu/version.map                           |  17 -
 lib/regexdev/rte_regexdev.c                   |  26 +
 lib/regexdev/version.map                      |  40 --
 lib/reorder/rte_reorder.c                     |  11 +
 lib/reorder/version.map                       |  27 -
 lib/rib/rte_rib.c                             |  14 +
 lib/rib/rte_rib6.c                            |  14 +
 lib/rib/version.map                           |  34 --
 lib/ring/rte_ring.c                           |  11 +
 lib/ring/rte_soring.c                         |   3 +
 lib/ring/soring.c                             |  16 +
 lib/ring/version.map                          |  42 --
 lib/sched/rte_approx.c                        |   1 +
 lib/sched/rte_pie.c                           |   2 +
 lib/sched/rte_red.c                           |   6 +
 lib/sched/rte_sched.c                         |  15 +
 lib/sched/version.map                         |  30 -
 lib/security/rte_security.c                   |  20 +
 lib/security/version.map                      |  37 --
 lib/stack/rte_stack.c                         |   3 +
 lib/stack/version.map                         |   9 -
 lib/table/rte_swx_table_em.c                  |   2 +
 lib/table/rte_swx_table_learner.c             |  10 +
 lib/table/rte_swx_table_selector.c            |   6 +
 lib/table/rte_swx_table_wm.c                  |   1 +
 lib/table/rte_table_acl.c                     |   1 +
 lib/table/rte_table_array.c                   |   1 +
 lib/table/rte_table_hash_cuckoo.c             |   1 +
 lib/table/rte_table_hash_ext.c                |   1 +
 lib/table/rte_table_hash_key16.c              |   2 +
 lib/table/rte_table_hash_key32.c              |   2 +
 lib/table/rte_table_hash_key8.c               |   2 +
 lib/table/rte_table_hash_lru.c                |   1 +
 lib/table/rte_table_lpm.c                     |   1 +
 lib/table/rte_table_lpm_ipv6.c                |   1 +
 lib/table/rte_table_stub.c                    |   1 +
 lib/table/version.map                         |  53 --
 lib/telemetry/telemetry.c                     |   3 +
 lib/telemetry/telemetry_data.c                |  17 +
 lib/telemetry/telemetry_legacy.c              |   1 +
 lib/telemetry/version.map                     |  40 --
 lib/timer/rte_timer.c                         |  18 +
 lib/timer/version.map                         |  24 -
 lib/vhost/socket.c                            |  16 +
 lib/vhost/vdpa.c                              |  11 +
 lib/vhost/version.map                         | 111 ----
 lib/vhost/vhost.c                             |  41 ++
 lib/vhost/vhost_crypto.c                      |   6 +
 lib/vhost/vhost_user.c                        |   2 +
 lib/vhost/virtio_net.c                        |   7 +
 523 files changed, 4654 insertions(+), 6507 deletions(-)
 create mode 100755 buildtools/gen-version-map.py
 delete mode 100644 buildtools/map_to_win.py
 create mode 100644 config/rte_export.h
 create mode 100755 devtools/check-symbol-change.py
 delete mode 100755 devtools/check-symbol-change.sh
 delete mode 100755 devtools/check-symbol-maps.sh
 delete mode 100755 devtools/update-abi.sh
 delete mode 100755 devtools/update_version_map_abi.py
 delete mode 100644 drivers/baseband/acc/version.map
 delete mode 100644 drivers/baseband/fpga_5gnr_fec/version.map
 delete mode 100644 drivers/baseband/fpga_lte_fec/version.map
 delete mode 100644 drivers/bus/auxiliary/version.map
 delete mode 100644 drivers/bus/cdx/version.map
 delete mode 100644 drivers/bus/dpaa/version.map
 delete mode 100644 drivers/bus/fslmc/version.map
 delete mode 100644 drivers/bus/ifpga/version.map
 delete mode 100644 drivers/bus/pci/version.map
 delete mode 100644 drivers/bus/platform/version.map
 delete mode 100644 drivers/bus/uacce/version.map
 delete mode 100644 drivers/bus/vdev/version.map
 delete mode 100644 drivers/bus/vmbus/version.map
 delete mode 100644 drivers/common/cnxk/version.map
 delete mode 100644 drivers/common/cpt/version.map
 delete mode 100644 drivers/common/dpaax/version.map
 delete mode 100644 drivers/common/ionic/version.map
 delete mode 100644 drivers/common/mlx5/version.map
 delete mode 100644 drivers/common/mvep/version.map
 delete mode 100644 drivers/common/nfp/version.map
 delete mode 100644 drivers/common/nitrox/version.map
 delete mode 100644 drivers/common/octeontx/version.map
 delete mode 100644 drivers/common/sfc_efx/version.map
 delete mode 100644 drivers/crypto/cnxk/version.map
 delete mode 100644 drivers/crypto/dpaa2_sec/version.map
 delete mode 100644 drivers/crypto/dpaa_sec/version.map
 delete mode 100644 drivers/crypto/octeontx/version.map
 delete mode 100644 drivers/crypto/scheduler/version.map
 delete mode 100644 drivers/dma/cnxk/version.map
 delete mode 100644 drivers/event/cnxk/version.map
 delete mode 100644 drivers/event/dlb2/version.map
 delete mode 100644 drivers/mempool/cnxk/version.map
 delete mode 100644 drivers/mempool/dpaa/version.map
 delete mode 100644 drivers/mempool/dpaa2/version.map
 delete mode 100644 drivers/net/atlantic/version.map
 delete mode 100644 drivers/net/bnxt/version.map
 delete mode 100644 drivers/net/bonding/version.map
 delete mode 100644 drivers/net/cnxk/version.map
 delete mode 100644 drivers/net/dpaa/version.map
 delete mode 100644 drivers/net/dpaa2/version.map
 delete mode 100644 drivers/net/intel/i40e/version.map
 delete mode 100644 drivers/net/intel/iavf/version.map
 delete mode 100644 drivers/net/intel/ice/version.map
 delete mode 100644 drivers/net/intel/idpf/version.map
 delete mode 100644 drivers/net/intel/ipn3ke/version.map
 delete mode 100644 drivers/net/intel/ixgbe/version.map
 delete mode 100644 drivers/net/mlx5/version.map
 delete mode 100644 drivers/net/octeontx/version.map
 delete mode 100644 drivers/net/ring/version.map
 delete mode 100644 drivers/net/softnic/version.map
 delete mode 100644 drivers/net/vhost/version.map
 delete mode 100644 drivers/power/kvm_vm/version.map
 delete mode 100644 drivers/raw/cnxk_rvu_lf/version.map
 delete mode 100644 drivers/raw/ifpga/version.map
 delete mode 100644 drivers/version.map
 delete mode 100644 lib/acl/version.map
 delete mode 100644 lib/argparse/version.map
 delete mode 100644 lib/bbdev/version.map
 delete mode 100644 lib/bitratestats/version.map
 delete mode 100644 lib/bpf/version.map
 delete mode 100644 lib/cfgfile/version.map
 delete mode 100644 lib/cmdline/version.map
 delete mode 100644 lib/compressdev/version.map
 delete mode 100644 lib/cryptodev/version.map
 delete mode 100644 lib/dispatcher/version.map
 delete mode 100644 lib/distributor/version.map
 delete mode 100644 lib/dmadev/version.map
 delete mode 100644 lib/eal/version.map
 delete mode 100644 lib/efd/version.map
 delete mode 100644 lib/ethdev/version.map
 delete mode 100644 lib/eventdev/version.map
 delete mode 100644 lib/fib/version.map
 delete mode 100644 lib/gpudev/version.map
 delete mode 100644 lib/graph/version.map
 delete mode 100644 lib/gro/version.map
 delete mode 100644 lib/gso/version.map
 delete mode 100644 lib/hash/version.map
 delete mode 100644 lib/ip_frag/version.map
 delete mode 100644 lib/ipsec/version.map
 delete mode 100644 lib/jobstats/version.map
 delete mode 100644 lib/kvargs/version.map
 delete mode 100644 lib/latencystats/version.map
 delete mode 100644 lib/log/version.map
 delete mode 100644 lib/lpm/version.map
 delete mode 100644 lib/mbuf/version.map
 delete mode 100644 lib/member/version.map
 delete mode 100644 lib/mempool/version.map
 delete mode 100644 lib/meter/version.map
 delete mode 100644 lib/metrics/version.map
 delete mode 100644 lib/mldev/version.map
 delete mode 100644 lib/net/version.map
 delete mode 100644 lib/node/version.map
 delete mode 100644 lib/pcapng/version.map
 delete mode 100644 lib/pci/version.map
 delete mode 100644 lib/pdcp/version.map
 delete mode 100644 lib/pdump/version.map
 delete mode 100644 lib/pipeline/version.map
 delete mode 100644 lib/port/version.map
 delete mode 100644 lib/power/version.map
 delete mode 100644 lib/rawdev/version.map
 delete mode 100644 lib/rcu/version.map
 delete mode 100644 lib/regexdev/version.map
 delete mode 100644 lib/reorder/version.map
 delete mode 100644 lib/rib/version.map
 delete mode 100644 lib/ring/version.map
 delete mode 100644 lib/sched/version.map
 delete mode 100644 lib/security/version.map
 delete mode 100644 lib/stack/version.map
 delete mode 100644 lib/table/version.map
 delete mode 100644 lib/telemetry/version.map
 delete mode 100644 lib/timer/version.map
 delete mode 100644 lib/vhost/version.map

-- 
2.48.1


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [RFC v3 1/8] lib: remove incorrect exported symbols
  2025-03-11  9:55 ` [RFC v3 0/8] Symbol versioning and export rework David Marchand
@ 2025-03-11  9:55   ` David Marchand
  2025-03-11  9:56   ` [RFC v3 2/8] drivers: " David Marchand
                     ` (7 subsequent siblings)
  8 siblings, 0 replies; 17+ messages in thread
From: David Marchand @ 2025-03-11  9:55 UTC (permalink / raw)
  To: dev
  Cc: thomas, bruce.richardson, andremue, Jerin Jacob, Kiran Kumar K,
	Nithin Dabilpuram, Zhirun Yan, Konstantin Ananyev,
	Vladimir Medvedkin, Stephen Hemminger, Anoob Joseph,
	Volodymyr Fialko, Ori Kam, Maxime Coquelin, Chenbo Xia

Declaring inline helpers in version.map is unnecessary.
There is no exported symbol and this will probably be treated as an
error by MSVC linker.

eal_log_journal has no implementation and can be removed.

Signed-off-by: David Marchand <david.marchand@redhat.com>
---
 lib/eventdev/version.map | 12 ------------
 lib/graph/version.map    | 17 -----------------
 lib/ipsec/version.map    |  4 ----
 lib/log/log_internal.h   |  3 ---
 lib/log/version.map      |  1 -
 lib/pdcp/version.map     |  4 ----
 lib/regexdev/version.map |  2 --
 lib/vhost/version.map    |  1 -
 8 files changed, 44 deletions(-)

diff --git a/lib/eventdev/version.map b/lib/eventdev/version.map
index 44687255cb..bff08d6a62 100644
--- a/lib/eventdev/version.map
+++ b/lib/eventdev/version.map
@@ -102,9 +102,6 @@ DPDK_25 {
 	rte_event_timer_adapter_stats_get;
 	rte_event_timer_adapter_stats_reset;
 	rte_event_timer_adapter_stop;
-	rte_event_timer_arm_burst;
-	rte_event_timer_arm_tmo_tick_burst;
-	rte_event_timer_cancel_burst;
 	rte_event_vector_pool_create;
 
 	local: *;
@@ -149,9 +146,7 @@ EXPERIMENTAL {
 	__rte_eventdev_trace_port_profile_switch;
 
 	# added in 24.11
-	rte_event_port_preschedule_modify;
 	__rte_eventdev_trace_port_preschedule_modify;
-	rte_event_port_preschedule;
 	__rte_eventdev_trace_port_preschedule;
 
 	# added in 25.03
@@ -166,14 +161,7 @@ INTERNAL {
 	event_dev_probing_finish;
 	rte_event_logtype;
 	rte_event_pmd_allocate;
-	rte_event_pmd_get_named_dev;
-	rte_event_pmd_is_valid_dev;
-	rte_event_pmd_pci_probe;
-	rte_event_pmd_pci_probe_named;
-	rte_event_pmd_pci_remove;
 	rte_event_pmd_release;
 	rte_event_pmd_selftest_seqn_dynfield_offset;
-	rte_event_pmd_vdev_init;
-	rte_event_pmd_vdev_uninit;
 	rte_eventdevs;
 };
diff --git a/lib/graph/version.map b/lib/graph/version.map
index 44fadc00fd..d03d44434d 100644
--- a/lib/graph/version.map
+++ b/lib/graph/version.map
@@ -27,9 +27,7 @@ DPDK_25 {
 	rte_graph_node_get;
 	rte_graph_node_get_by_name;
 	rte_graph_obj_dump;
-	rte_graph_walk;
 	rte_graph_worker_model_get;
-	rte_graph_worker_model_no_check_get;
 	rte_graph_worker_model_set;
 	rte_node_clone;
 	rte_node_dump;
@@ -37,25 +35,10 @@ DPDK_25 {
 	rte_node_edge_get;
 	rte_node_edge_shrink;
 	rte_node_edge_update;
-	rte_node_enqueue;
-	rte_node_enqueue_next;
-	rte_node_enqueue_x1;
-	rte_node_enqueue_x2;
-	rte_node_enqueue_x4;
 	rte_node_from_name;
 	rte_node_id_to_name;
 	rte_node_list_dump;
 	rte_node_max_count;
-	rte_node_next_stream_get;
-	rte_node_next_stream_move;
-	rte_node_next_stream_put;
 
 	local: *;
 };
-
-EXPERIMENTAL {
-	global:
-
-	# added in 24.11
-	rte_node_xstat_increment;
-};
diff --git a/lib/ipsec/version.map b/lib/ipsec/version.map
index 308f9d2e0d..47e3df5bb6 100644
--- a/lib/ipsec/version.map
+++ b/lib/ipsec/version.map
@@ -1,9 +1,6 @@
 DPDK_25 {
 	global:
 
-	rte_ipsec_pkt_crypto_group;
-	rte_ipsec_pkt_crypto_prepare;
-	rte_ipsec_pkt_process;
 	rte_ipsec_sa_fini;
 	rte_ipsec_sa_init;
 	rte_ipsec_sa_size;
@@ -14,7 +11,6 @@ DPDK_25 {
 	rte_ipsec_sad_destroy;
 	rte_ipsec_sad_find_existing;
 	rte_ipsec_sad_lookup;
-	rte_ipsec_ses_from_crypto;
 	rte_ipsec_session_prepare;
 	rte_ipsec_telemetry_sa_add;
 	rte_ipsec_telemetry_sa_del;
diff --git a/lib/log/log_internal.h b/lib/log/log_internal.h
index bba7041ea3..525e1397fd 100644
--- a/lib/log/log_internal.h
+++ b/lib/log/log_internal.h
@@ -29,9 +29,6 @@ int eal_log_save_pattern(const char *pattern, uint32_t level);
 __rte_internal
 int eal_log_syslog(const char *name);
 
-__rte_internal
-int eal_log_journal(const char *opt);
-
 /*
  * Convert log level to string.
  */
diff --git a/lib/log/version.map b/lib/log/version.map
index 09d8a4289b..603be493b3 100644
--- a/lib/log/version.map
+++ b/lib/log/version.map
@@ -27,7 +27,6 @@ INTERNAL {
 
 	eal_log_color;
 	eal_log_init;
-	eal_log_journal; # WINDOWS_NO_EXPORT
 	eal_log_level2str;
 	eal_log_save_pattern;
 	eal_log_save_regexp;
diff --git a/lib/pdcp/version.map b/lib/pdcp/version.map
index 9c02303c45..72b2d4729b 100644
--- a/lib/pdcp/version.map
+++ b/lib/pdcp/version.map
@@ -3,13 +3,9 @@ EXPERIMENTAL {
 
 	# added in 23.07
 	rte_pdcp_control_pdu_create;
-	rte_pdcp_en_from_cop;
 	rte_pdcp_entity_establish;
 	rte_pdcp_entity_release;
 	rte_pdcp_entity_suspend;
-	rte_pdcp_pkt_post_process;
-	rte_pdcp_pkt_pre_process;
-	rte_pdcp_pkt_crypto_group;
 	rte_pdcp_t_reordering_expiry_handle;
 
 	local: *;
diff --git a/lib/regexdev/version.map b/lib/regexdev/version.map
index 4c0435180c..713a800ca4 100644
--- a/lib/regexdev/version.map
+++ b/lib/regexdev/version.map
@@ -7,9 +7,7 @@ EXPERIMENTAL {
 	rte_regexdev_close;
 	rte_regexdev_configure;
 	rte_regexdev_count;
-	rte_regexdev_dequeue_burst;
 	rte_regexdev_dump;
-	rte_regexdev_enqueue_burst;
 	rte_regexdev_get_dev_id;
 	rte_regexdev_info_get;
 	rte_regexdev_queue_pair_setup;
diff --git a/lib/vhost/version.map b/lib/vhost/version.map
index 8333e100ed..c044bb714e 100644
--- a/lib/vhost/version.map
+++ b/lib/vhost/version.map
@@ -61,7 +61,6 @@ DPDK_25 {
 	rte_vhost_set_last_inflight_io_packed;
 	rte_vhost_set_last_inflight_io_split;
 	rte_vhost_set_vring_base;
-	rte_vhost_va_from_guest_pa;
 	rte_vhost_vring_call;
 	rte_vhost_vring_call_nonblock;
 	rte_vhost_vring_stats_get;
-- 
2.48.1


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [RFC v3 2/8] drivers: remove incorrect exported symbols
  2025-03-11  9:55 ` [RFC v3 0/8] Symbol versioning and export rework David Marchand
  2025-03-11  9:55   ` [RFC v3 1/8] lib: remove incorrect exported symbols David Marchand
@ 2025-03-11  9:56   ` David Marchand
  2025-03-11  9:56   ` [RFC v3 3/8] eal: rework function versioning macros David Marchand
                     ` (6 subsequent siblings)
  8 siblings, 0 replies; 17+ messages in thread
From: David Marchand @ 2025-03-11  9:56 UTC (permalink / raw)
  To: dev
  Cc: thomas, bruce.richardson, andremue, Hemant Agrawal,
	Sachin Saxena, Nithin Dabilpuram, Kiran Kumar K,
	Sunil Kumar Kori, Satha Rao, Harman Kalra

Declaring inline helpers in version.map is unnecessary.
There is no exported symbol and this will probably be treated as an
error by MSVC linker.

rte_dpaa2_dev_type is an enum token.
roc_se_ctx_swap has no implementation (leftover from a previous rework)
and can be removed.

Signed-off-by: David Marchand <david.marchand@redhat.com>
---
 drivers/bus/dpaa/version.map    | 1 -
 drivers/bus/fslmc/version.map   | 2 --
 drivers/common/cnxk/roc_se.h    | 1 -
 drivers/common/cnxk/version.map | 2 --
 4 files changed, 6 deletions(-)

diff --git a/drivers/bus/dpaa/version.map b/drivers/bus/dpaa/version.map
index a17d57632e..8f09b72757 100644
--- a/drivers/bus/dpaa/version.map
+++ b/drivers/bus/dpaa/version.map
@@ -18,7 +18,6 @@ INTERNAL {
 	dpaa_update_link_speed;
 	dpaa_intr_disable;
 	dpaa_intr_enable;
-	dpaa_seqn;
 	dpaa_svr_family;
 	dpaa_update_link_status;
 	fman_dealloc_bufs_mask_hi;
diff --git a/drivers/bus/fslmc/version.map b/drivers/bus/fslmc/version.map
index 2c36895285..ba3c7f36e3 100644
--- a/drivers/bus/fslmc/version.map
+++ b/drivers/bus/fslmc/version.map
@@ -22,7 +22,6 @@ INTERNAL {
 	dpaa2_get_mcp_ptr;
 	dpaa2_io_portal;
 	dpaa2_seqn_dynfield_offset;
-	dpaa2_seqn;
 	dpaa2_svr_family;
 	dpbp_disable;
 	dpbp_enable;
@@ -108,7 +107,6 @@ INTERNAL {
 	qbman_swp_push_set;
 	qbman_swp_release;
 	rte_dpaa2_alloc_dpci_dev;
-	rte_dpaa2_dev_type;
 	rte_dpaa2_free_dpci_dev;
 	rte_dpaa2_intr_disable;
 	rte_dpaa2_intr_enable;
diff --git a/drivers/common/cnxk/roc_se.h b/drivers/common/cnxk/roc_se.h
index ede8d69c0e..f2c4056169 100644
--- a/drivers/common/cnxk/roc_se.h
+++ b/drivers/common/cnxk/roc_se.h
@@ -405,7 +405,6 @@ int __roc_api roc_se_auth_key_set(struct roc_se_ctx *se_ctx, roc_se_auth_type ty
 int __roc_api roc_se_ciph_key_set(struct roc_se_ctx *se_ctx, roc_se_cipher_type type,
 				  const uint8_t *key, uint16_t key_len);
 
-void __roc_api roc_se_ctx_swap(struct roc_se_ctx *se_ctx);
 void __roc_api roc_se_ctx_init(struct roc_se_ctx *se_ctx);
 
 void __roc_api roc_se_hmac_opad_ipad_gen(roc_se_auth_type auth_type, const uint8_t *key,
diff --git a/drivers/common/cnxk/version.map b/drivers/common/cnxk/version.map
index cdbfc1d39a..7f40dcced2 100644
--- a/drivers/common/cnxk/version.map
+++ b/drivers/common/cnxk/version.map
@@ -164,7 +164,6 @@ INTERNAL {
 	roc_mcs_custom_tag_cfg_get;
 	roc_mcs_dev_init;
 	roc_mcs_dev_fini;
-	roc_mcs_dev_get;
 	roc_mcs_event_cb_register;
 	roc_mcs_event_cb_unregister;
 	roc_mcs_flowid_entry_enable;
@@ -546,7 +545,6 @@ INTERNAL {
 	roc_tim_lf_enable;
 	roc_tim_lf_free;
 	roc_tim_lf_interval;
-	roc_se_ctx_swap;
 	roc_ree_af_reg_read;
 	roc_ree_af_reg_write;
 	roc_ree_config_lf;
-- 
2.48.1


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [RFC v3 3/8] eal: rework function versioning macros
  2025-03-11  9:55 ` [RFC v3 0/8] Symbol versioning and export rework David Marchand
  2025-03-11  9:55   ` [RFC v3 1/8] lib: remove incorrect exported symbols David Marchand
  2025-03-11  9:56   ` [RFC v3 2/8] drivers: " David Marchand
@ 2025-03-11  9:56   ` David Marchand
  2025-03-11  9:56   ` [RFC v3 4/8] buildtools: display version when listing symbols David Marchand
                     ` (5 subsequent siblings)
  8 siblings, 0 replies; 17+ messages in thread
From: David Marchand @ 2025-03-11  9:56 UTC (permalink / raw)
  To: dev; +Cc: thomas, bruce.richardson, andremue, Tyler Retzlaff, Jasvinder Singh

For versioning symbols:
- MSVC uses pragmas on the symbol,
- GNU linker uses special asm directives,

To accommodate both GNU linker and MSVC linker, introduce new macros for
exporting and versioning symbols that will surround the whole function.

This has the advantage of hiding all the ugly details in the macros.
Now versioning a symbol is just a call to a single macro:
- RTE_VERSION_SYMBOL (resp. RTE_VERSION_EXPERIMENTAL_SYMBOL), for
  keeping an old implementation code under a versioned function (resp.
  experimental function),
- RTE_DEFAULT_SYMBOL, for declaring the new default versioned function,
  and handling the static link special case, instead of
  BIND_DEFAULT_SYMBOL + MAP_STATIC_SYMBOL,

Update lib/net accordingly.

Signed-off-by: David Marchand <david.marchand@redhat.com>
---
Changes since RFC v2:

Changes since RFC v1:
- renamed and prefixed macros,
- reindented in prevision of second patch,

---
 doc/guides/contributing/abi_versioning.rst | 165 +++++----------------
 lib/eal/include/rte_function_versioning.h  |  96 +++++-------
 lib/net/net_crc.h                          |  15 --
 lib/net/rte_net_crc.c                      |  28 +---
 4 files changed, 77 insertions(+), 227 deletions(-)

diff --git a/doc/guides/contributing/abi_versioning.rst b/doc/guides/contributing/abi_versioning.rst
index 7afd1c1886..88dd776b4c 100644
--- a/doc/guides/contributing/abi_versioning.rst
+++ b/doc/guides/contributing/abi_versioning.rst
@@ -138,27 +138,20 @@ macros are used in conjunction with the ``version.map`` file for
 a given library to allow multiple versions of a symbol to exist in a shared
 library so that older binaries need not be immediately recompiled.
 
-The macros exported are:
+The macros are:
 
-* ``VERSION_SYMBOL(b, e, n)``: Creates a symbol version table entry binding
-  versioned symbol ``b@DPDK_n`` to the internal function ``be``.
+* ``RTE_VERSION_SYMBOL(ver, type, name, args``: Creates a symbol version table
+  entry binding symbol ``<name>@DPDK_<ver>`` to the internal function name
+  ``<name>_v<ver>``.
 
-* ``BIND_DEFAULT_SYMBOL(b, e, n)``: Creates a symbol version entry instructing
-  the linker to bind references to symbol ``b`` to the internal symbol
-  ``be``.
+* ``RTE_DEFAULT_SYMBO(ver, type, name, args)``: Creates a symbol version entry
+  instructing the linker to bind references to symbol ``<name>`` to the internal
+  symbol ``<name>_v<ver>``.
 
-* ``MAP_STATIC_SYMBOL(f, p)``: Declare the prototype ``f``, and map it to the
-  fully qualified function ``p``, so that if a symbol becomes versioned, it
-  can still be mapped back to the public symbol name.
-
-* ``__vsym``:  Annotation to be used in a declaration of the internal symbol
-  ``be`` to signal that it is being used as an implementation of a particular
-  version of symbol ``b``.
-
-* ``VERSION_SYMBOL_EXPERIMENTAL(b, e)``: Creates a symbol version table entry
-  binding versioned symbol ``b@EXPERIMENTAL`` to the internal function ``be``.
-  The macro is used when a symbol matures to become part of the stable ABI, to
-  provide an alias to experimental until the next major ABI version.
+* ``RTE_VERSION_EXPERIMENTAL_SYMBOL(type, name, args)``:  Similar to RTE_VERSION_SYMBOL
+  but for experimental API symbols. The macro is used when a symbol matures
+  to become part of the stable ABI, to provide an alias to experimental
+  until the next major ABI version.
 
 .. _example_abi_macro_usage:
 
@@ -277,49 +270,36 @@ list of exported symbols when DPDK is compiled as a shared library.
 
 Next, we need to specify in the code which function maps to the rte_acl_create
 symbol at which versions.  First, at the site of the initial symbol definition,
-we need to update the function so that it is uniquely named, and not in conflict
-with the public symbol name
+we wrap the function with ``RTE_VERSION_SYMBOL``, passing the current ABI version,
+the function return type, and the function name and its arguments.
 
 .. code-block:: c
 
  -struct rte_acl_ctx *
  -rte_acl_create(const struct rte_acl_param *param)
- +struct rte_acl_ctx * __vsym
- +rte_acl_create_v21(const struct rte_acl_param *param)
+ +RTE_VERSION_SYMBOL(21, struct rte_acl_ctx *, rte_acl_create, (const struct rte_acl_param *param))
  {
         size_t sz;
         struct rte_acl_ctx *ctx;
         ...
-
-Note that the base name of the symbol was kept intact, as this is conducive to
-the macros used for versioning symbols and we have annotated the function as
-``__vsym``, an implementation of a versioned symbol . That is our next step,
-mapping this new symbol name to the initial symbol name at version node 21.
-Immediately after the function, we add the VERSION_SYMBOL macro.
-
-.. code-block:: c
-
-   #include <rte_function_versioning.h>
-
-   ...
-   VERSION_SYMBOL(rte_acl_create, _v21, 21);
+ }
 
 Remembering to also add the rte_function_versioning.h header to the requisite c
 file where these changes are being made. The macro instructs the linker to
 create a new symbol ``rte_acl_create@DPDK_21``, which matches the symbol created
-in older builds, but now points to the above newly named function. We have now
-mapped the original rte_acl_create symbol to the original function (but with a
-new name).
+in older builds, but now points to the above newly named function ``rte_acl_create_v21``.
+We have now mapped the original rte_acl_create symbol to the original function
+(but with a new name).
 
 Please see the section :ref:`Enabling versioning macros
 <enabling_versioning_macros>` to enable this macro in the meson/ninja build.
-Next, we need to create the new ``v22`` version of the symbol. We create a new
-function name, with the ``v22`` suffix, and implement it appropriately.
+Next, we need to create the new version of the symbol. We create a new
+function name and implement it appropriately, then wrap it in a call to ``RTE_DEFAULT_SYMBOL``.
 
 .. code-block:: c
 
-   struct rte_acl_ctx * __vsym
-   rte_acl_create_v22(const struct rte_acl_param *param, int debug);
+   RTE_DEFAULT_SYMBOL(22, struct rte_acl_ctx *, rte_acl_create, (const struct rte_acl_param *param,
+        int debug))
    {
         struct rte_acl_ctx *ctx = rte_acl_create_v21(param);
 
@@ -328,35 +308,9 @@ function name, with the ``v22`` suffix, and implement it appropriately.
         return ctx;
    }
 
-This code serves as our new API call. Its the same as our old call, but adds the
-new parameter in place. Next we need to map this function to the new default
-symbol ``rte_acl_create@DPDK_22``. To do this, immediately after the function,
-we add the BIND_DEFAULT_SYMBOL macro.
-
-.. code-block:: c
-
-   #include <rte_function_versioning.h>
-
-   ...
-   BIND_DEFAULT_SYMBOL(rte_acl_create, _v22, 22);
-
 The macro instructs the linker to create the new default symbol
-``rte_acl_create@DPDK_22``, which points to the above newly named function.
-
-We finally modify the prototype of the call in the public header file,
-such that it contains both versions of the symbol and the public API.
-
-.. code-block:: c
-
-   struct rte_acl_ctx *
-   rte_acl_create(const struct rte_acl_param *param);
-
-   struct rte_acl_ctx * __vsym
-   rte_acl_create_v21(const struct rte_acl_param *param);
-
-   struct rte_acl_ctx * __vsym
-   rte_acl_create_v22(const struct rte_acl_param *param, int debug);
-
+``rte_acl_create@DPDK_22``, which points to the function named ``rte_acl_create_v22``
+(declared by the macro).
 
 And that's it, on the next shared library rebuild, there will be two versions of
 rte_acl_create, an old DPDK_21 version, used by previously built applications,
@@ -365,43 +319,10 @@ and a new DPDK_22 version, used by future built applications.
 .. note::
 
    **Before you leave**, please take care reviewing the sections on
-   :ref:`mapping static symbols <mapping_static_symbols>`,
    :ref:`enabling versioning macros <enabling_versioning_macros>`,
    and :ref:`ABI deprecation <abi_deprecation>`.
 
 
-.. _mapping_static_symbols:
-
-Mapping static symbols
-______________________
-
-Now we've taken what was a public symbol, and duplicated it into two uniquely
-and differently named symbols. We've then mapped each of those back to the
-public symbol ``rte_acl_create`` with different version tags. This only applies
-to dynamic linking, as static linking has no notion of versioning. That leaves
-this code in a position of no longer having a symbol simply named
-``rte_acl_create`` and a static build will fail on that missing symbol.
-
-To correct this, we can simply map a function of our choosing back to the public
-symbol in the static build with the ``MAP_STATIC_SYMBOL`` macro.  Generally the
-assumption is that the most recent version of the symbol is the one you want to
-map.  So, back in the C file where, immediately after ``rte_acl_create_v22`` is
-defined, we add this
-
-
-.. code-block:: c
-
-   struct rte_acl_ctx * __vsym
-   rte_acl_create_v22(const struct rte_acl_param *param, int debug)
-   {
-        ...
-   }
-   MAP_STATIC_SYMBOL(struct rte_acl_ctx *rte_acl_create(const struct rte_acl_param *param, int debug), rte_acl_create_v22);
-
-That tells the compiler that, when building a static library, any calls to the
-symbol ``rte_acl_create`` should be linked to ``rte_acl_create_v22``
-
-
 .. _enabling_versioning_macros:
 
 Enabling versioning macros
@@ -519,26 +440,17 @@ and ``DPDK_22`` version nodes.
     * Create an acl context object for apps to
     * manipulate
     */
-   struct rte_acl_ctx *
-   rte_acl_create(const struct rte_acl_param *param)
+   RTE_DEFAULT_SYMBOL(22, struct rte_acl_ctx *, rte_acl_create,
+        (const struct rte_acl_param *param))
    {
    ...
    }
 
-   __rte_experimental
-   struct rte_acl_ctx *
-   rte_acl_create_e(const struct rte_acl_param *param)
-   {
-      return rte_acl_create(param);
-   }
-   VERSION_SYMBOL_EXPERIMENTAL(rte_acl_create, _e);
-
-   struct rte_acl_ctx *
-   rte_acl_create_v22(const struct rte_acl_param *param)
+   RTE_VERSION_EXPERIMENTAL_SYMBOL(struct rte_acl_ctx *, rte_acl_create,
+        (const struct rte_acl_param *param))
    {
       return rte_acl_create(param);
    }
-   BIND_DEFAULT_SYMBOL(rte_acl_create, _v22, 22);
 
 In the map file, we map the symbol to both the ``EXPERIMENTAL``
 and ``DPDK_22`` version nodes.
@@ -564,13 +476,6 @@ and ``DPDK_22`` version nodes.
         rte_acl_create;
    };
 
-.. note::
-
-   Please note, similar to :ref:`symbol versioning <example_abi_macro_usage>`,
-   when aliasing to experimental you will also need to take care of
-   :ref:`mapping static symbols <mapping_static_symbols>`.
-
-
 .. _abi_deprecation:
 
 Deprecating part of a public API
@@ -616,10 +521,10 @@ Next remove the corresponding versioned export.
 
 .. code-block:: c
 
- -VERSION_SYMBOL(rte_acl_create, _v21, 21);
+ -RTE_VERSION_SYMBOL(21, struct rte_acl_ctx *, rte_acl_create, (const struct rte_acl_param *param))
 
 
-Note that the internal function definition could also be removed, but its used
+Note that the internal function definition must also be removed, but its used
 in our example by the newer version ``v22``, so we leave it in place and declare
 it as static. This is a coding style choice.
 
@@ -663,16 +568,18 @@ In the case of our map above, it would transform to look as follows
         local: *;
  };
 
-Then any uses of BIND_DEFAULT_SYMBOL that pointed to the old node should be
+Then any uses of RTE_DEFAULT_SYMBOL that pointed to the old node should be
 updated to point to the new version node in any header files for all affected
 symbols.
 
 .. code-block:: c
 
- -BIND_DEFAULT_SYMBOL(rte_acl_create, _v21, 21);
- +BIND_DEFAULT_SYMBOL(rte_acl_create, _v22, 22);
+ -RTE_DEFAULT_SYMBOL(21, struct rte_acl_ctx *, rte_acl_create, (const struct rte_acl_param *param,
+        int debug))
+ -RTE_DEFAULT_SYMBOL(22, struct rte_acl_ctx *, rte_acl_create, (const struct rte_acl_param *param,
+        int debug))
 
-Lastly, any VERSION_SYMBOL macros that point to the old version nodes
+Lastly, any RTE_VERSION_SYMBOL macros that point to the old version nodes
 should be removed, taking care to preserve any code that is shared
 with the new version node.
 
diff --git a/lib/eal/include/rte_function_versioning.h b/lib/eal/include/rte_function_versioning.h
index eb6dd2bc17..0020ce4885 100644
--- a/lib/eal/include/rte_function_versioning.h
+++ b/lib/eal/include/rte_function_versioning.h
@@ -11,8 +11,6 @@
 #error Use of function versioning disabled, is "use_function_versioning=true" in meson.build?
 #endif
 
-#ifdef RTE_BUILD_SHARED_LIB
-
 /*
  * Provides backwards compatibility when updating exported functions.
  * When a symbol is exported from a library to provide an API, it also provides a
@@ -20,80 +18,54 @@
  * arguments, etc.  On occasion that function may need to change to accommodate
  * new functionality, behavior, etc.  When that occurs, it is desirable to
  * allow for backwards compatibility for a time with older binaries that are
- * dynamically linked to the dpdk.  To support that, the __vsym and
- * VERSION_SYMBOL macros are created.  They, in conjunction with the
- * version.map file for a given library allow for multiple versions of
- * a symbol to exist in a shared library so that older binaries need not be
- * immediately recompiled.
- *
- * Refer to the guidelines document in the docs subdirectory for details on the
- * use of these macros
+ * dynamically linked to the dpdk.
  */
 
-/*
- * Macro Parameters:
- * b - function base name
- * e - function version extension, to be concatenated with base name
- * n - function symbol version string to be applied
- * f - function prototype
- * p - full function symbol name
- */
+#ifdef RTE_BUILD_SHARED_LIB
 
 /*
- * VERSION_SYMBOL
- * Creates a symbol version table entry binding symbol <b>@DPDK_<n> to the internal
- * function name <b><e>
+ * RTE_VERSION_SYMBOL
+ * Creates a symbol version table entry binding symbol <name>@DPDK_<ver> to the internal
+ * function name <name>_v<ver>.
  */
-#define VERSION_SYMBOL(b, e, n) __asm__(".symver " RTE_STR(b) RTE_STR(e) ", " RTE_STR(b) "@DPDK_" RTE_STR(n))
+#define RTE_VERSION_SYMBOL(ver, type, name, args) \
+__asm__(".symver " RTE_STR(name) "_v" RTE_STR(ver) ", " RTE_STR(name) "@DPDK_" RTE_STR(ver)); \
+__rte_used type name ## _v ## ver args; \
+type name ## _v ## ver args
 
 /*
- * VERSION_SYMBOL_EXPERIMENTAL
- * Creates a symbol version table entry binding the symbol <b>@EXPERIMENTAL to the internal
- * function name <b><e>. The macro is used when a symbol matures to become part of the stable ABI,
- * to provide an alias to experimental for some time.
+ * RTE_VERSION_EXPERIMENTAL_SYMBOL
+ * Similar to RTE_VERSION_SYMBOL but for experimental API symbols.
+ * This is mainly used for keeping compatibility for symbols that get promoted to stable ABI.
  */
-#define VERSION_SYMBOL_EXPERIMENTAL(b, e) __asm__(".symver " RTE_STR(b) RTE_STR(e) ", " RTE_STR(b) "@EXPERIMENTAL")
+#define RTE_VERSION_EXPERIMENTAL_SYMBOL(type, name, args) \
+__asm__(".symver " RTE_STR(name) "_exp, " RTE_STR(name) "@EXPERIMENTAL") \
+__rte_used type name ## _exp args; \
+type name ## _exp args
 
 /*
- * BIND_DEFAULT_SYMBOL
+ * RTE_DEFAULT_SYMBOL
  * Creates a symbol version entry instructing the linker to bind references to
- * symbol <b> to the internal symbol <b><e>
+ * symbol <name> to the internal symbol <name>_v<ver>.
  */
-#define BIND_DEFAULT_SYMBOL(b, e, n) __asm__(".symver " RTE_STR(b) RTE_STR(e) ", " RTE_STR(b) "@@DPDK_" RTE_STR(n))
+#define RTE_DEFAULT_SYMBOL(ver, type, name, args) \
+__asm__(".symver " RTE_STR(name) "_v" RTE_STR(ver) ", " RTE_STR(name) "@@DPDK_" RTE_STR(ver)); \
+__rte_used type name ## _v ## ver args; \
+type name ## _v ## ver args
 
-/*
- * __vsym
- * Annotation to be used in declaration of the internal symbol <b><e> to signal
- * that it is being used as an implementation of a particular version of symbol
- * <b>.
- */
-#define __vsym __rte_used
+#else /* !RTE_BUILD_SHARED_LIB */
 
-/*
- * MAP_STATIC_SYMBOL
- * If a function has been bifurcated into multiple versions, none of which
- * are defined as the exported symbol name in the map file, this macro can be
- * used to alias a specific version of the symbol to its exported name.  For
- * example, if you have 2 versions of a function foo_v1 and foo_v2, where the
- * former is mapped to foo@DPDK_1 and the latter is mapped to foo@DPDK_2 when
- * building a shared library, this macro can be used to map either foo_v1 or
- * foo_v2 to the symbol foo when building a static library, e.g.:
- * MAP_STATIC_SYMBOL(void foo(), foo_v2);
- */
-#define MAP_STATIC_SYMBOL(f, p)
+#define RTE_VERSION_SYMBOL(ver, type, name, args) \
+type name ## _v ## ver args; \
+type name ## _v ## ver args
 
-#else
-/*
- * No symbol versioning in use
- */
-#define VERSION_SYMBOL(b, e, n)
-#define VERSION_SYMBOL_EXPERIMENTAL(b, e)
-#define __vsym
-#define BIND_DEFAULT_SYMBOL(b, e, n)
-#define MAP_STATIC_SYMBOL(f, p) f __attribute__((alias(RTE_STR(p))))
-/*
- * RTE_BUILD_SHARED_LIB=n
- */
-#endif
+#define RTE_VERSION_EXPERIMENTAL_SYMBOL(type, name, args) \
+type name ## _exp args; \
+type name ## _exp args
+
+#define RTE_DEFAULT_SYMBOL(ver, type, name, args) \
+type name args
+
+#endif /* RTE_BUILD_SHARED_LIB */
 
 #endif /* _RTE_FUNCTION_VERSIONING_H_ */
diff --git a/lib/net/net_crc.h b/lib/net/net_crc.h
index 4930e2f0b3..320b0edca8 100644
--- a/lib/net/net_crc.h
+++ b/lib/net/net_crc.h
@@ -7,21 +7,6 @@
 
 #include "rte_net_crc.h"
 
-void
-rte_net_crc_set_alg_v25(enum rte_net_crc_alg alg);
-
-struct rte_net_crc *
-rte_net_crc_set_alg_v26(enum rte_net_crc_alg alg,
-	enum rte_net_crc_type type);
-
-uint32_t
-rte_net_crc_calc_v25(const void *data,
-	uint32_t data_len, enum rte_net_crc_type type);
-
-uint32_t
-rte_net_crc_calc_v26(const struct rte_net_crc *ctx,
-	const void *data, const uint32_t data_len);
-
 /*
  * Different implementations of CRC
  */
diff --git a/lib/net/rte_net_crc.c b/lib/net/rte_net_crc.c
index 2fb3eec231..1943d46295 100644
--- a/lib/net/rte_net_crc.c
+++ b/lib/net/rte_net_crc.c
@@ -345,8 +345,7 @@ handlers_init(enum rte_net_crc_alg alg)
 
 /* Public API */
 
-void
-rte_net_crc_set_alg_v25(enum rte_net_crc_alg alg)
+RTE_VERSION_SYMBOL(25, void, rte_net_crc_set_alg, (enum rte_net_crc_alg alg))
 {
 	handlers = NULL;
 	if (max_simd_bitwidth == 0)
@@ -373,10 +372,9 @@ rte_net_crc_set_alg_v25(enum rte_net_crc_alg alg)
 	if (handlers == NULL)
 		handlers = handlers_scalar;
 }
-VERSION_SYMBOL(rte_net_crc_set_alg, _v25, 25);
 
-struct rte_net_crc *rte_net_crc_set_alg_v26(enum rte_net_crc_alg alg,
-	enum rte_net_crc_type type)
+RTE_DEFAULT_SYMBOL(26, struct rte_net_crc *, rte_net_crc_set_alg, (enum rte_net_crc_alg alg,
+	enum rte_net_crc_type type))
 {
 	uint16_t max_simd_bitwidth;
 	struct rte_net_crc *crc;
@@ -414,20 +412,14 @@ struct rte_net_crc *rte_net_crc_set_alg_v26(enum rte_net_crc_alg alg,
 	}
 	return crc;
 }
-BIND_DEFAULT_SYMBOL(rte_net_crc_set_alg, _v26, 26);
-MAP_STATIC_SYMBOL(struct rte_net_crc *rte_net_crc_set_alg(
-	enum rte_net_crc_alg alg, enum rte_net_crc_type type),
-	rte_net_crc_set_alg_v26);
 
 void rte_net_crc_free(struct rte_net_crc *crc)
 {
 	rte_free(crc);
 }
 
-uint32_t
-rte_net_crc_calc_v25(const void *data,
-	uint32_t data_len,
-	enum rte_net_crc_type type)
+RTE_VERSION_SYMBOL(25, uint32_t, rte_net_crc_calc, (const void *data, uint32_t data_len,
+	enum rte_net_crc_type type))
 {
 	uint32_t ret;
 	rte_net_crc_handler f_handle;
@@ -437,18 +429,12 @@ rte_net_crc_calc_v25(const void *data,
 
 	return ret;
 }
-VERSION_SYMBOL(rte_net_crc_calc, _v25, 25);
 
-uint32_t
-rte_net_crc_calc_v26(const struct rte_net_crc *ctx,
-	const void *data, const uint32_t data_len)
+RTE_DEFAULT_SYMBOL(26, uint32_t, rte_net_crc_calc, (const struct rte_net_crc *ctx,
+	const void *data, const uint32_t data_len))
 {
 	return handlers_dpdk26[ctx->alg].f[ctx->type](data, data_len);
 }
-BIND_DEFAULT_SYMBOL(rte_net_crc_calc, _v26, 26);
-MAP_STATIC_SYMBOL(uint32_t rte_net_crc_calc(const struct rte_net_crc *ctx,
-	const void *data, const uint32_t data_len),
-	rte_net_crc_calc_v26);
 
 /* Call initialisation helpers for all crc algorithm handlers */
 RTE_INIT(rte_net_crc_init)
-- 
2.48.1


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [RFC v3 4/8] buildtools: display version when listing symbols
  2025-03-11  9:55 ` [RFC v3 0/8] Symbol versioning and export rework David Marchand
                     ` (2 preceding siblings ...)
  2025-03-11  9:56   ` [RFC v3 3/8] eal: rework function versioning macros David Marchand
@ 2025-03-11  9:56   ` David Marchand
  2025-03-11  9:56   ` [RFC v3 5/8] build: generate symbol maps David Marchand
                     ` (4 subsequent siblings)
  8 siblings, 0 replies; 17+ messages in thread
From: David Marchand @ 2025-03-11  9:56 UTC (permalink / raw)
  To: dev; +Cc: thomas, bruce.richardson, andremue

Display the version when a symbol was introduced.
This is needed for scripting the conversion from static to dynamically
generated version maps.
It is also useful when listing experimental symbols.

Signed-off-by: David Marchand <david.marchand@redhat.com>
---
 buildtools/map-list-symbol.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/buildtools/map-list-symbol.sh b/buildtools/map-list-symbol.sh
index 43f276c05f..eb98451d8e 100755
--- a/buildtools/map-list-symbol.sh
+++ b/buildtools/map-list-symbol.sh
@@ -73,7 +73,7 @@ for file in $@; do
 		if ("'$symbol'" == "all" || $1 == "'$symbol'") {
 			ret = 0;
 			if ("'$quiet'" == "") {
-				print "'$file' "current_section" "$1;
+				print "'$file' "current_section" "$1" "current_version;
 			}
 			if ("'$symbol'" != "all") {
 				exit 0;
-- 
2.48.1


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [RFC v3 5/8] build: generate symbol maps
  2025-03-11  9:55 ` [RFC v3 0/8] Symbol versioning and export rework David Marchand
                     ` (3 preceding siblings ...)
  2025-03-11  9:56   ` [RFC v3 4/8] buildtools: display version when listing symbols David Marchand
@ 2025-03-11  9:56   ` David Marchand
  2025-03-11  9:56   ` [RFC v3 6/8] build: mark exported symbols David Marchand
                     ` (3 subsequent siblings)
  8 siblings, 0 replies; 17+ messages in thread
From: David Marchand @ 2025-03-11  9:56 UTC (permalink / raw)
  To: dev; +Cc: thomas, bruce.richardson, andremue

Rather than maintain a file in parallel of the code, symbols to be
exported can be marked with a token RTE_EXPORT_*SYMBOL.

From those marks, the build framework generates map files only for
symbols actually compiled (which means that the WINDOWS_NO_EXPORT hack
becomes unnecessary).

The build framework directly creates a map file in the format that the
linker expects (rather than converting from GNU linker to MSVC linker).

Empty maps are allowed again as a replacement for drivers/version.map.

The symbol check is updated to only support the new format.

Signed-off-by: David Marchand <david.marchand@redhat.com>
---
Changes since RFC v2:
- because of MSVC limitations wrt macro passed via cmdline,
  used an internal header for defining RTE_EXPORT_* macros,
- updated documentation and tooling,

---
 MAINTAINERS                                |   2 +
 buildtools/gen-version-map.py              | 111 ++++++++++
 buildtools/map-list-symbol.sh              |  10 +-
 buildtools/meson.build                     |   1 +
 config/meson.build                         |   2 +
 config/rte_export.h                        |  16 ++
 devtools/check-symbol-change.py            |  90 +++++++++
 devtools/check-symbol-maps.sh              |  14 --
 devtools/checkpatches.sh                   |   2 +-
 doc/guides/contributing/abi_versioning.rst | 224 ++-------------------
 drivers/meson.build                        |  94 +++++----
 drivers/version.map                        |   3 -
 lib/meson.build                            |  91 ++++++---
 13 files changed, 371 insertions(+), 289 deletions(-)
 create mode 100755 buildtools/gen-version-map.py
 create mode 100644 config/rte_export.h
 create mode 100755 devtools/check-symbol-change.py
 delete mode 100644 drivers/version.map

diff --git a/MAINTAINERS b/MAINTAINERS
index 312e6fcee5..04772951d3 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -95,6 +95,7 @@ F: devtools/check-maintainers.sh
 F: devtools/check-forbidden-tokens.awk
 F: devtools/check-git-log.sh
 F: devtools/check-spdx-tag.sh
+F: devtools/check-symbol-change.py
 F: devtools/check-symbol-change.sh
 F: devtools/check-symbol-maps.sh
 F: devtools/checkpatches.sh
@@ -127,6 +128,7 @@ F: config/
 F: buildtools/check-symbols.sh
 F: buildtools/chkincs/
 F: buildtools/call-sphinx-build.py
+F: buildtools/gen-version-map.py
 F: buildtools/get-cpu-count.py
 F: buildtools/get-numa-count.py
 F: buildtools/list-dir-globs.py
diff --git a/buildtools/gen-version-map.py b/buildtools/gen-version-map.py
new file mode 100755
index 0000000000..b160aa828b
--- /dev/null
+++ b/buildtools/gen-version-map.py
@@ -0,0 +1,111 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright (c) 2024 Red Hat, Inc.
+
+"""Generate a version map file used by GNU or MSVC linker."""
+
+import re
+import sys
+
+# From rte_export.h
+export_exp_sym_regexp = re.compile(r"^RTE_EXPORT_EXPERIMENTAL_SYMBOL\(([^,]+), ([0-9]+.[0-9]+)\)")
+export_int_sym_regexp = re.compile(r"^RTE_EXPORT_INTERNAL_SYMBOL\(([^)]+)\)")
+export_sym_regexp = re.compile(r"^RTE_EXPORT_SYMBOL\(([^)]+)\)")
+# From rte_function_versioning.h
+ver_sym_regexp = re.compile(r"^RTE_VERSION_SYMBOL\(([^,]+), [^,]+, ([^,]+),")
+ver_exp_sym_regexp = re.compile(r"^RTE_VERSION_EXPERIMENTAL_SYMBOL\([^,]+, ([^,]+),")
+default_sym_regexp = re.compile(r"^RTE_DEFAULT_SYMBOL\(([^,]+), [^,]+, ([^,]+),")
+
+with open(sys.argv[2]) as f:
+    abi = 'DPDK_{}'.format(re.match("([0-9]+).[0-9]", f.readline()).group(1))
+
+symbols = {}
+
+for file in sys.argv[4:]:
+    with open(file, encoding="utf-8") as f:
+        for ln in f.readlines():
+            node = None
+            symbol = None
+            comment = None
+            if export_exp_sym_regexp.match(ln):
+                node = 'EXPERIMENTAL'
+                symbol = export_exp_sym_regexp.match(ln).group(1)
+                comment = ' # added in {}'.format(export_exp_sym_regexp.match(ln).group(2))
+            elif export_int_sym_regexp.match(ln):
+                node = 'INTERNAL'
+                symbol = export_int_sym_regexp.match(ln).group(1)
+            elif export_sym_regexp.match(ln):
+                node = abi
+                symbol = export_sym_regexp.match(ln).group(1)
+            elif ver_sym_regexp.match(ln):
+                node = 'DPDK_{}'.format(ver_sym_regexp.match(ln).group(1))
+                symbol = ver_sym_regexp.match(ln).group(2)
+            elif ver_exp_sym_regexp.match(ln):
+                node = 'EXPERIMENTAL'
+                symbol = ver_exp_sym_regexp.match(ln).group(1)
+            elif default_sym_regexp.match(ln):
+                node = 'DPDK_{}'.format(default_sym_regexp.match(ln).group(1))
+                symbol = default_sym_regexp.match(ln).group(2)
+
+            if not symbol:
+                continue
+
+            if node not in symbols:
+                symbols[node] = {}
+            symbols[node][symbol] = comment
+
+if sys.argv[1] == 'msvc':
+    with open(sys.argv[3], "w") as outfile:
+        outfile.writelines(f"EXPORTS\n")
+        for key in (abi, 'EXPERIMENTAL', 'INTERNAL'):
+            if key not in symbols:
+                continue
+            for symbol in sorted(symbols[key].keys()):
+                outfile.writelines(f"\t{symbol}\n")
+            del symbols[key]
+else:
+    with open(sys.argv[3], "w") as outfile:
+        local_token = False
+        for key in (abi, 'EXPERIMENTAL', 'INTERNAL'):
+            if key not in symbols:
+                continue
+            outfile.writelines(f"{key} {{\n\tglobal:\n\n")
+            for symbol in sorted(symbols[key].keys()):
+                if sys.argv[1] == 'mingw' and symbol.startswith('per_lcore'):
+                    prefix = '__emutls_v.'
+                else:
+                    prefix = ''
+                outfile.writelines(f"\t{prefix}{symbol};")
+                comment = symbols[key][symbol]
+                if comment:
+                    outfile.writelines(f"{comment}")
+                outfile.writelines("\n")
+            outfile.writelines("\n")
+            if not local_token:
+                outfile.writelines("\tlocal: *;\n")
+                local_token = True
+            outfile.writelines("};\n")
+            del symbols[key]
+        for key in sorted(symbols.keys()):
+            outfile.writelines(f"{key} {{\n\tglobal:\n\n")
+            for symbol in sorted(symbols[key].keys()):
+                if sys.argv[1] == 'mingw' and symbol.startswith('per_lcore'):
+                    prefix = '__emutls_v.'
+                else:
+                    prefix = ''
+                outfile.writelines(f"\t{prefix}{symbol};")
+                comment = symbols[key][symbol]
+                if comment:
+                    outfile.writelines(f"{comment}")
+                outfile.writelines("\n")
+            outfile.writelines(f"}} {abi};\n")
+            if not local_token:
+                outfile.writelines("\tlocal: *;\n")
+                local_token = True
+            del symbols[key]
+        # No exported symbol, add a catch all
+        if not local_token:
+            outfile.writelines(f"{abi} {{\n")
+            outfile.writelines("\tlocal: *;\n")
+            local_token = True
+            outfile.writelines("};\n")
diff --git a/buildtools/map-list-symbol.sh b/buildtools/map-list-symbol.sh
index eb98451d8e..0829df4be5 100755
--- a/buildtools/map-list-symbol.sh
+++ b/buildtools/map-list-symbol.sh
@@ -62,10 +62,14 @@ for file in $@; do
 		if (current_section == "") {
 			next;
 		}
+		symbol_version = current_version
+		if (/^[^}].*[^:*]; # added in /) {
+			symbol_version = $5
+		}
 		if ("'$version'" != "") {
-			if ("'$version'" == "unset" && current_version != "") {
+			if ("'$version'" == "unset" && symbol_version != "") {
 				next;
-			} else if ("'$version'" != "unset" && "'$version'" != current_version) {
+			} else if ("'$version'" != "unset" && "'$version'" != symbol_version) {
 				next;
 			}
 		}
@@ -73,7 +77,7 @@ for file in $@; do
 		if ("'$symbol'" == "all" || $1 == "'$symbol'") {
 			ret = 0;
 			if ("'$quiet'" == "") {
-				print "'$file' "current_section" "$1" "current_version;
+				print "'$file' "current_section" "$1" "symbol_version;
 			}
 			if ("'$symbol'" != "all") {
 				exit 0;
diff --git a/buildtools/meson.build b/buildtools/meson.build
index 4e2c1217a2..b745e9afa4 100644
--- a/buildtools/meson.build
+++ b/buildtools/meson.build
@@ -16,6 +16,7 @@ else
     py3 = ['meson', 'runpython']
 endif
 echo = py3 + ['-c', 'import sys; print(*sys.argv[1:])']
+gen_version_map = py3 + files('gen-version-map.py')
 list_dir_globs = py3 + files('list-dir-globs.py')
 map_to_win_cmd = py3 + files('map_to_win.py')
 sphinx_wrapper = py3 + files('call-sphinx-build.py')
diff --git a/config/meson.build b/config/meson.build
index f31fef216c..54657055fb 100644
--- a/config/meson.build
+++ b/config/meson.build
@@ -303,8 +303,10 @@ endif
 # add -include rte_config to cflags
 if is_ms_compiler
     add_project_arguments('/FI', 'rte_config.h', language: 'c')
+    add_project_arguments('/FI', 'rte_export.h', language: 'c')
 else
     add_project_arguments('-include', 'rte_config.h', language: 'c')
+    add_project_arguments('-include', 'rte_export.h', language: 'c')
 endif
 
 # enable extra warnings and disable any unwanted warnings
diff --git a/config/rte_export.h b/config/rte_export.h
new file mode 100644
index 0000000000..83d871fe11
--- /dev/null
+++ b/config/rte_export.h
@@ -0,0 +1,16 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (c) 2025 Red Hat, Inc.
+ */
+
+#ifndef RTE_EXPORT_H
+#define RTE_EXPORT_H
+
+/* *Internal* macros for exporting symbols, used by the build system.
+ * For RTE_EXPORT_EXPERIMENTAL_SYMBOL, ver indicates the
+ * version this symbol was introduced in.
+ */
+#define RTE_EXPORT_EXPERIMENTAL_SYMBOL(a, ver)
+#define RTE_EXPORT_INTERNAL_SYMBOL(a)
+#define RTE_EXPORT_SYMBOL(a)
+
+#endif /* RTE_EXPORT_H */
diff --git a/devtools/check-symbol-change.py b/devtools/check-symbol-change.py
new file mode 100755
index 0000000000..09709e4f06
--- /dev/null
+++ b/devtools/check-symbol-change.py
@@ -0,0 +1,90 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright (c) 2025 Red Hat, Inc.
+
+"""Check exported symbols change in a patch."""
+
+import re
+import sys
+
+file_header_regexp = re.compile(r"^(\-\-\-|\+\+\+) [ab]/(lib|drivers)/([^/]+)/([^/]+)")
+# From rte_export.h
+export_exp_sym_regexp = re.compile(r"^.RTE_EXPORT_EXPERIMENTAL_SYMBOL\(([^,]+),")
+export_int_sym_regexp = re.compile(r"^.RTE_EXPORT_INTERNAL_SYMBOL\(([^)]+)\)")
+export_sym_regexp = re.compile(r"^.RTE_EXPORT_SYMBOL\(([^)]+)\)")
+# TODO, handle versioned symbols from rte_function_versioning.h
+# ver_sym_regexp = re.compile(r"^.RTE_VERSION_SYMBOL\(([^,]+), [^,]+, ([^,]+),")
+# ver_exp_sym_regexp = re.compile(r"^.RTE_VERSION_EXPERIMENTAL_SYMBOL\([^,]+, ([^,]+),")
+# default_sym_regexp = re.compile(r"^.RTE_DEFAULT_SYMBOL\(([^,]+), [^,]+, ([^,]+),")
+
+symbols = {}
+
+for file in sys.argv[1:]:
+    with open(file, encoding="utf-8") as f:
+        for ln in f.readlines():
+            if file_header_regexp.match(ln):
+                if file_header_regexp.match(ln).group(2) == "lib":
+                    lib = '/'.join(file_header_regexp.match(ln).group(2, 3))
+                elif file_header_regexp.match(ln).group(3) == "intel":
+                    lib = '/'.join(file_header_regexp.match(ln).group(2, 3, 4))
+                else:
+                    lib = '/'.join(file_header_regexp.match(ln).group(2, 3))
+
+                if lib not in symbols:
+                    symbols[lib] = {}
+                continue
+
+            if export_exp_sym_regexp.match(ln):
+                symbol = export_exp_sym_regexp.match(ln).group(1)
+                node = 'EXPERIMENTAL'
+            elif export_int_sym_regexp.match(ln):
+                node = 'INTERNAL'
+                symbol = export_int_sym_regexp.match(ln).group(1)
+            elif export_sym_regexp.match(ln):
+                symbol = export_sym_regexp.match(ln).group(1)
+                node = 'stable'
+            else:
+                continue
+
+            if symbol not in symbols[lib]:
+                symbols[lib][symbol] = {}
+            added = ln[0] == '+'
+            if added and 'added' in symbols[lib][symbol] and node != symbols[lib][symbol]['added']:
+                print(f"{symbol} in {lib} was found in multiple ABI, please check.")
+            if not added and 'removed' in symbols[lib][symbol] and node != symbols[lib][symbol]['removed']:
+                print(f"{symbol} in {lib} was found in multiple ABI, please check.")
+            if added:
+                symbols[lib][symbol]['added'] = node
+            else:
+                symbols[lib][symbol]['removed'] = node
+
+    for lib in sorted(symbols.keys()):
+        error = False
+        for symbol in sorted(symbols[lib].keys()):
+            if 'removed' not in symbols[lib][symbol]:
+                # Symbol addition
+                node = symbols[lib][symbol]['added']
+                if node == 'stable':
+                    print(f"ERROR: {symbol} in {lib} has been added directly to stable ABI.")
+                    error = True
+                else:
+                    print(f"INFO: {symbol} in {lib} has been added to {node} ABI.")
+                continue
+
+            if 'added' not in symbols[lib][symbol]:
+                # Symbol removal
+                node = symbols[lib][symbol]['added']
+                if node == 'stable':
+                    print(f"INFO: {symbol} in {lib} has been removed from stable ABI.")
+                    print(f"Please check it has gone though the deprecation process.")
+                continue
+
+            if symbols[lib][symbol]['added'] == symbols[lib][symbol]['removed']:
+                # Symbol was moved around
+                continue
+
+            # Symbol modifications
+            added = symbols[lib][symbol]['added']
+            removed = symbols[lib][symbol]['removed']
+            print(f"INFO: {symbol} in {lib} is moving from {removed} to {added}")
+            print(f"Please check it has gone though the deprecation process.")
diff --git a/devtools/check-symbol-maps.sh b/devtools/check-symbol-maps.sh
index 6121f78ec6..fcd3931e5d 100755
--- a/devtools/check-symbol-maps.sh
+++ b/devtools/check-symbol-maps.sh
@@ -60,20 +60,6 @@ if [ -n "$local_miss_maps" ] ; then
     ret=1
 fi
 
-find_empty_maps ()
-{
-    for map in $@ ; do
-        [ $(buildtools/map-list-symbol.sh $map | wc -l) != '0' ] || echo $map
-    done
-}
-
-empty_maps=$(find_empty_maps $@)
-if [ -n "$empty_maps" ] ; then
-    echo "Found empty maps:"
-    echo "$empty_maps"
-    ret=1
-fi
-
 find_bad_format_maps ()
 {
     abi_version=$(cut -d'.' -f 1 ABI_VERSION)
diff --git a/devtools/checkpatches.sh b/devtools/checkpatches.sh
index 003bb49e04..7dcac7c8c9 100755
--- a/devtools/checkpatches.sh
+++ b/devtools/checkpatches.sh
@@ -33,7 +33,7 @@ VOLATILE,PREFER_PACKED,PREFER_ALIGNED,PREFER_PRINTF,STRLCPY,\
 PREFER_KERNEL_TYPES,PREFER_FALLTHROUGH,BIT_MACRO,CONST_STRUCT,\
 SPLIT_STRING,LONG_LINE_STRING,C99_COMMENT_TOLERANCE,\
 LINE_SPACING,PARENTHESIS_ALIGNMENT,NETWORKING_BLOCK_COMMENT_STYLE,\
-NEW_TYPEDEFS,COMPARISON_TO_NULL,AVOID_BUG"
+NEW_TYPEDEFS,COMPARISON_TO_NULL,AVOID_BUG,EXPORT_SYMBOL"
 options="$options $DPDK_CHECKPATCH_OPTIONS"
 
 print_usage () {
diff --git a/doc/guides/contributing/abi_versioning.rst b/doc/guides/contributing/abi_versioning.rst
index 88dd776b4c..addbb24b9e 100644
--- a/doc/guides/contributing/abi_versioning.rst
+++ b/doc/guides/contributing/abi_versioning.rst
@@ -58,12 +58,12 @@ persists over multiple releases.
 
 .. code-block:: none
 
- $ head ./lib/acl/version.map
+ $ head ./build/lib/librte_acl_exports.map
  DPDK_21 {
         global:
  ...
 
- $ head ./lib/eal/version.map
+ $ head ./build/lib/librte_eal_exports.map
  DPDK_21 {
         global:
  ...
@@ -77,7 +77,7 @@ that library.
 
 .. code-block:: none
 
- $ head ./lib/acl/version.map
+ $ head ./build/lib/librte_acl_exports.map
  DPDK_21 {
         global:
  ...
@@ -88,7 +88,7 @@ that library.
  } DPDK_21;
  ...
 
- $ head ./lib/eal/version.map
+ $ head ./build/lib/librte_eal_exports.map
  DPDK_21 {
         global:
  ...
@@ -100,12 +100,12 @@ how this may be done.
 
 .. code-block:: none
 
- $ head ./lib/acl/version.map
+ $ head ./build/lib/librte_acl_exports.map
  DPDK_22 {
         global:
  ...
 
- $ head ./lib/eal/version.map
+ $ head ./build/lib/librte_eal_exports.map
  DPDK_22 {
         global:
  ...
@@ -134,8 +134,7 @@ linked to the DPDK.
 
 To support backward compatibility the ``rte_function_versioning.h``
 header file provides macros to use when updating exported functions. These
-macros are used in conjunction with the ``version.map`` file for
-a given library to allow multiple versions of a symbol to exist in a shared
+macros allow multiple versions of a symbol to exist in a shared
 library so that older binaries need not be immediately recompiled.
 
 The macros are:
@@ -169,6 +168,7 @@ Assume we have a function as follows
   * Create an acl context object for apps to
   * manipulate
   */
+ RTE_EXPORT_SYMBOL(rte_acl_create)
  struct rte_acl_ctx *
  rte_acl_create(const struct rte_acl_param *param)
  {
@@ -187,6 +187,7 @@ private, is safe), but it also requires modifying the code as follows
   * Create an acl context object for apps to
   * manipulate
   */
+ RTE_EXPORT_SYMBOL(rte_acl_create)
  struct rte_acl_ctx *
  rte_acl_create(const struct rte_acl_param *param, int debug)
  {
@@ -203,78 +204,16 @@ The addition of a parameter to the function is ABI breaking as the function is
 public, and existing application may use it in its current form. However, the
 compatibility macros in DPDK allow a developer to use symbol versioning so that
 multiple functions can be mapped to the same public symbol based on when an
-application was linked to it. To see how this is done, we start with the
-requisite libraries version map file. Initially the version map file for the acl
-library looks like this
+application was linked to it.
 
-.. code-block:: none
-
-   DPDK_21 {
-        global:
-
-        rte_acl_add_rules;
-        rte_acl_build;
-        rte_acl_classify;
-        rte_acl_classify_alg;
-        rte_acl_classify_scalar;
-        rte_acl_create;
-        rte_acl_dump;
-        rte_acl_find_existing;
-        rte_acl_free;
-        rte_acl_ipv4vlan_add_rules;
-        rte_acl_ipv4vlan_build;
-        rte_acl_list_dump;
-        rte_acl_reset;
-        rte_acl_reset_rules;
-        rte_acl_set_ctx_classify;
-
-        local: *;
-   };
-
-This file needs to be modified as follows
-
-.. code-block:: none
-
-   DPDK_21 {
-        global:
-
-        rte_acl_add_rules;
-        rte_acl_build;
-        rte_acl_classify;
-        rte_acl_classify_alg;
-        rte_acl_classify_scalar;
-        rte_acl_create;
-        rte_acl_dump;
-        rte_acl_find_existing;
-        rte_acl_free;
-        rte_acl_ipv4vlan_add_rules;
-        rte_acl_ipv4vlan_build;
-        rte_acl_list_dump;
-        rte_acl_reset;
-        rte_acl_reset_rules;
-        rte_acl_set_ctx_classify;
-
-        local: *;
-   };
-
-   DPDK_22 {
-        global:
-        rte_acl_create;
-
-   } DPDK_21;
-
-The addition of the new block tells the linker that a new version node
-``DPDK_22`` is available, which contains the symbol rte_acl_create, and inherits
-the symbols from the DPDK_21 node. This list is directly translated into a
-list of exported symbols when DPDK is compiled as a shared library.
-
-Next, we need to specify in the code which function maps to the rte_acl_create
+We need to specify in the code which function maps to the rte_acl_create
 symbol at which versions.  First, at the site of the initial symbol definition,
 we wrap the function with ``RTE_VERSION_SYMBOL``, passing the current ABI version,
-the function return type, and the function name and its arguments.
+the function return type, the function name and its arguments.
 
 .. code-block:: c
 
+ -RTE_EXPORT_SYMBOL(rte_acl_create)
  -struct rte_acl_ctx *
  -rte_acl_create(const struct rte_acl_param *param)
  +RTE_VERSION_SYMBOL(21, struct rte_acl_ctx *, rte_acl_create, (const struct rte_acl_param *param))
@@ -293,6 +232,7 @@ We have now mapped the original rte_acl_create symbol to the original function
 
 Please see the section :ref:`Enabling versioning macros
 <enabling_versioning_macros>` to enable this macro in the meson/ninja build.
+
 Next, we need to create the new version of the symbol. We create a new
 function name and implement it appropriately, then wrap it in a call to ``RTE_DEFAULT_SYMBOL``.
 
@@ -312,9 +252,9 @@ The macro instructs the linker to create the new default symbol
 ``rte_acl_create@DPDK_22``, which points to the function named ``rte_acl_create_v22``
 (declared by the macro).
 
-And that's it, on the next shared library rebuild, there will be two versions of
-rte_acl_create, an old DPDK_21 version, used by previously built applications,
-and a new DPDK_22 version, used by future built applications.
+And that's it. On the next shared library rebuild, there will be two versions of rte_acl_create,
+an old DPDK_21 version, used by previously built applications, and a new DPDK_22 version,
+used by future built applications.
 
 .. note::
 
@@ -364,6 +304,7 @@ Assume we have an experimental function ``rte_acl_create`` as follows:
     * Create an acl context object for apps to
     * manipulate
     */
+   RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_acl_create)
    __rte_experimental
    struct rte_acl_ctx *
    rte_acl_create(const struct rte_acl_param *param)
@@ -371,27 +312,8 @@ Assume we have an experimental function ``rte_acl_create`` as follows:
    ...
    }
 
-In the map file, experimental symbols are listed as part of the ``EXPERIMENTAL``
-version node.
-
-.. code-block:: none
-
-   DPDK_21 {
-        global:
-        ...
-
-        local: *;
-   };
-
-   EXPERIMENTAL {
-        global:
-
-        rte_acl_create;
-   };
-
 When we promote the symbol to the stable ABI, we simply strip the
-``__rte_experimental`` annotation from the function and move the symbol from the
-``EXPERIMENTAL`` node, to the node of the next major ABI version as follow.
+``__rte_experimental`` annotation from the function.
 
 .. code-block:: c
 
@@ -399,31 +321,13 @@ When we promote the symbol to the stable ABI, we simply strip the
     * Create an acl context object for apps to
     * manipulate
     */
+   RTE_EXPORT_SYMBOL(rte_acl_create)
    struct rte_acl_ctx *
    rte_acl_create(const struct rte_acl_param *param)
    {
           ...
    }
 
-We then update the map file, adding the symbol ``rte_acl_create``
-to the ``DPDK_22`` version node.
-
-.. code-block:: none
-
-   DPDK_21 {
-        global:
-        ...
-
-        local: *;
-   };
-
-   DPDK_22 {
-        global:
-
-        rte_acl_create;
-   } DPDK_21;
-
-
 Although there are strictly no guarantees or commitments associated with
 :ref:`experimental symbols <experimental_apis>`, a maintainer may wish to offer
 an alias to experimental. The process to add an alias to experimental,
@@ -452,30 +356,6 @@ and ``DPDK_22`` version nodes.
       return rte_acl_create(param);
    }
 
-In the map file, we map the symbol to both the ``EXPERIMENTAL``
-and ``DPDK_22`` version nodes.
-
-.. code-block:: none
-
-   DPDK_21 {
-        global:
-        ...
-
-        local: *;
-   };
-
-   DPDK_22 {
-        global:
-
-        rte_acl_create;
-   } DPDK_21;
-
-   EXPERIMENTAL {
-        global:
-
-        rte_acl_create;
-   };
-
 .. _abi_deprecation:
 
 Deprecating part of a public API
@@ -484,38 +364,7 @@ ________________________________
 Lets assume that you've done the above updates, and in preparation for the next
 major ABI version you decide you would like to retire the old version of the
 function. After having gone through the ABI deprecation announcement process,
-removal is easy. Start by removing the symbol from the requisite version map
-file:
-
-.. code-block:: none
-
-   DPDK_21 {
-        global:
-
-        rte_acl_add_rules;
-        rte_acl_build;
-        rte_acl_classify;
-        rte_acl_classify_alg;
-        rte_acl_classify_scalar;
-        rte_acl_dump;
- -      rte_acl_create
-        rte_acl_find_existing;
-        rte_acl_free;
-        rte_acl_ipv4vlan_add_rules;
-        rte_acl_ipv4vlan_build;
-        rte_acl_list_dump;
-        rte_acl_reset;
-        rte_acl_reset_rules;
-        rte_acl_set_ctx_classify;
-
-        local: *;
-   };
-
-   DPDK_22 {
-        global:
-        rte_acl_create;
-   } DPDK_21;
-
+removal is easy.
 
 Next remove the corresponding versioned export.
 
@@ -539,36 +388,7 @@ of a major ABI version. If a version node completely specifies an API, then
 removing part of it, typically makes it incomplete. In those cases it is better
 to remove the entire node.
 
-To do this, start by modifying the version map file, such that all symbols from
-the node to be removed are merged into the next node in the map.
-
-In the case of our map above, it would transform to look as follows
-
-.. code-block:: none
-
-   DPDK_22 {
-        global:
-
-        rte_acl_add_rules;
-        rte_acl_build;
-        rte_acl_classify;
-        rte_acl_classify_alg;
-        rte_acl_classify_scalar;
-        rte_acl_dump;
-        rte_acl_create
-        rte_acl_find_existing;
-        rte_acl_free;
-        rte_acl_ipv4vlan_add_rules;
-        rte_acl_ipv4vlan_build;
-        rte_acl_list_dump;
-        rte_acl_reset;
-        rte_acl_reset_rules;
-        rte_acl_set_ctx_classify;
-
-        local: *;
- };
-
-Then any uses of RTE_DEFAULT_SYMBOL that pointed to the old node should be
+Any uses of RTE_DEFAULT_SYMBOL that pointed to the old node should be
 updated to point to the new version node in any header files for all affected
 symbols.
 
diff --git a/drivers/meson.build b/drivers/meson.build
index 05391a575d..c8bc556f1a 100644
--- a/drivers/meson.build
+++ b/drivers/meson.build
@@ -245,14 +245,14 @@ foreach subpath:subdirs
                 dependencies: static_deps,
                 c_args: cflags)
         objs += tmp_lib.extract_all_objects(recursive: true)
-        sources = custom_target(out_filename,
+        sources_pmd_info = custom_target(out_filename,
                 command: [pmdinfo, tmp_lib.full_path(), '@OUTPUT@', pmdinfogen],
                 output: out_filename,
                 depends: [tmp_lib])
 
         # now build the static driver
         static_lib = static_library(lib_name,
-                sources,
+                sources_pmd_info,
                 objects: objs,
                 include_directories: includes,
                 dependencies: static_deps,
@@ -262,48 +262,72 @@ foreach subpath:subdirs
         # now build the shared driver
         version_map = '@0@/@1@/version.map'.format(meson.current_source_dir(), drv_path)
 
-        lk_deps = []
-        lk_args = []
         if not fs.is_file(version_map)
-            version_map = '@0@/version.map'.format(meson.current_source_dir())
-            lk_deps += [version_map]
-        else
-            lk_deps += [version_map]
-            if not is_windows and developer_mode
-                # on unix systems check the output of the
-                # check-symbols.sh script, using it as a
-                # dependency of the .so build
-                lk_deps += custom_target(lib_name + '.sym_chk',
-                        command: [check_symbols, version_map, '@INPUT@'],
-                        capture: true,
-                        input: static_lib,
-                        output: lib_name + '.sym_chk')
+            if is_ms_linker
+                link_mode = 'msvc'
+            elif is_windows
+                link_mode = 'mingw'
+            else
+                link_mode = 'gnu'
             endif
-        endif
+            version_map = custom_target(lib_name + '_map',
+                    command: [gen_version_map, link_mode, abi_version_file, '@OUTPUT@', '@INPUT@'],
+                    input: sources,
+                    output: 'lib@0@_exports.map'.format(lib_name))
+            version_map_path = version_map.full_path()
+            version_map_dep = [version_map]
+            lk_deps = [version_map]
 
-        if is_windows
             if is_ms_linker
-                def_file = custom_target(lib_name + '_def',
-                        command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'],
-                        input: version_map,
-                        output: '@0@_exports.def'.format(lib_name))
-                lk_deps += [def_file]
-
-                lk_args = ['-Wl,/def:' + def_file.full_path()]
+                if is_ms_compiler
+                    lk_args = ['/def:' + version_map.full_path()]
+                else
+                    lk_args = ['-Wl,/def:' + version_map.full_path()]
+                endif
             else
-                mingw_map = custom_target(lib_name + '_mingw',
-                        command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'],
-                        input: version_map,
-                        output: '@0@_mingw.map'.format(lib_name))
-                lk_deps += [mingw_map]
-
-                lk_args = ['-Wl,--version-script=' + mingw_map.full_path()]
+                lk_args = ['-Wl,--version-script=' + version_map.full_path()]
             endif
         else
-            lk_args = ['-Wl,--version-script=' + version_map]
+            version_map_path = version_map
+            version_map_dep = []
+            lk_deps = [version_map]
+
+            if is_windows
+                if is_ms_linker
+                    def_file = custom_target(lib_name + '_def',
+                            command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'],
+                            input: version_map,
+                            output: '@0@_exports.def'.format(lib_name))
+                    lk_deps += [def_file]
+
+                    lk_args = ['-Wl,/def:' + def_file.full_path()]
+                else
+                    mingw_map = custom_target(lib_name + '_mingw',
+                            command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'],
+                            input: version_map,
+                            output: '@0@_mingw.map'.format(lib_name))
+                    lk_deps += [mingw_map]
+
+                    lk_args = ['-Wl,--version-script=' + mingw_map.full_path()]
+                endif
+            else
+                lk_args = ['-Wl,--version-script=' + version_map]
+            endif
+        endif
+
+        if not is_windows and developer_mode
+            # on unix systems check the output of the
+            # check-symbols.sh script, using it as a
+            # dependency of the .so build
+            lk_deps += custom_target(lib_name + '.sym_chk',
+                    command: [check_symbols, version_map_path, '@INPUT@'],
+                    capture: true,
+                    input: static_lib,
+                    output: lib_name + '.sym_chk',
+                    depends: version_map_dep)
         endif
 
-        shared_lib = shared_library(lib_name, sources,
+        shared_lib = shared_library(lib_name, sources_pmd_info,
                 objects: objs,
                 include_directories: includes,
                 dependencies: shared_deps,
diff --git a/drivers/version.map b/drivers/version.map
deleted file mode 100644
index 17cc97bda6..0000000000
--- a/drivers/version.map
+++ /dev/null
@@ -1,3 +0,0 @@
-DPDK_25 {
-	local: *;
-};
diff --git a/lib/meson.build b/lib/meson.build
index ce92cb5537..b6bac02b48 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -1,6 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2017-2019 Intel Corporation
 
+fs = import('fs')
 
 # process all libraries equally, as far as possible
 # "core" libs first, then others alphabetically as far as possible
@@ -254,42 +255,60 @@ foreach l:libraries
             include_directories: includes,
             dependencies: static_deps)
 
-    if not use_function_versioning or is_windows
-        # use pre-build objects to build shared lib
-        sources = []
-        objs += static_lib.extract_all_objects(recursive: false)
-    else
-        # for compat we need to rebuild with
-        # RTE_BUILD_SHARED_LIB defined
-        cflags += '-DRTE_BUILD_SHARED_LIB'
-    endif
-
-    version_map = '@0@/@1@/version.map'.format(meson.current_source_dir(), l)
-    lk_deps = [version_map]
-
-    if is_ms_linker
-        def_file = custom_target(libname + '_def',
-                command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'],
-                input: version_map,
-                output: '@0@_exports.def'.format(libname))
-        lk_deps += [def_file]
+    if not fs.is_file('@0@/@1@/version.map'.format(meson.current_source_dir(), l))
+        if is_ms_linker
+            link_mode = 'msvc'
+        elif is_windows
+            link_mode = 'mingw'
+        else
+            link_mode = 'gnu'
+        endif
+        version_map = custom_target(libname + '_map',
+                command: [gen_version_map, link_mode, abi_version_file, '@OUTPUT@', '@INPUT@'],
+                input: sources,
+                output: 'lib@0@_exports.map'.format(libname))
+        version_map_path = version_map.full_path()
+        version_map_dep = [version_map]
+        lk_deps = [version_map]
 
-        if is_ms_compiler
-            lk_args = ['/def:' + def_file.full_path()]
+        if is_ms_linker
+            if is_ms_compiler
+                lk_args = ['/def:' + version_map.full_path()]
+            else
+                lk_args = ['-Wl,/def:' + version_map.full_path()]
+            endif
         else
-            lk_args = ['-Wl,/def:' + def_file.full_path()]
+            lk_args = ['-Wl,--version-script=' + version_map.full_path()]
         endif
     else
-        if is_windows
-            mingw_map = custom_target(libname + '_mingw',
+        version_map = '@0@/@1@/version.map'.format(meson.current_source_dir(), l)
+        version_map_path = version_map
+        version_map_dep = []
+        lk_deps = [version_map]
+        if is_ms_linker
+            def_file = custom_target(libname + '_def',
                     command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'],
                     input: version_map,
-                    output: '@0@_mingw.map'.format(libname))
-            lk_deps += [mingw_map]
+                    output: '@0@_exports.def'.format(libname))
+            lk_deps += [def_file]
 
-            lk_args = ['-Wl,--version-script=' + mingw_map.full_path()]
+            if is_ms_compiler
+                lk_args = ['/def:' + def_file.full_path()]
+            else
+                lk_args = ['-Wl,/def:' + def_file.full_path()]
+            endif
         else
-            lk_args = ['-Wl,--version-script=' + version_map]
+            if is_windows
+                mingw_map = custom_target(libname + '_mingw',
+                        command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'],
+                        input: version_map,
+                        output: '@0@_mingw.map'.format(libname))
+                lk_deps += [mingw_map]
+
+                lk_args = ['-Wl,--version-script=' + mingw_map.full_path()]
+            else
+                lk_args = ['-Wl,--version-script=' + version_map]
+            endif
         endif
     endif
 
@@ -298,11 +317,21 @@ foreach l:libraries
         # check-symbols.sh script, using it as a
         # dependency of the .so build
         lk_deps += custom_target(name + '.sym_chk',
-                command: [check_symbols,
-                    version_map, '@INPUT@'],
+                command: [check_symbols, version_map_path, '@INPUT@'],
                 capture: true,
                 input: static_lib,
-                output: name + '.sym_chk')
+                output: name + '.sym_chk',
+                depends: version_map_dep)
+    endif
+
+    if not use_function_versioning or is_windows
+        # use pre-build objects to build shared lib
+        sources = []
+        objs += static_lib.extract_all_objects(recursive: false)
+    else
+        # for compat we need to rebuild with
+        # RTE_BUILD_SHARED_LIB defined
+        cflags += '-DRTE_BUILD_SHARED_LIB'
     endif
 
     shared_lib = shared_library(libname,
-- 
2.48.1


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [RFC v3 6/8] build: mark exported symbols
  2025-03-11  9:55 ` [RFC v3 0/8] Symbol versioning and export rework David Marchand
                     ` (4 preceding siblings ...)
  2025-03-11  9:56   ` [RFC v3 5/8] build: generate symbol maps David Marchand
@ 2025-03-11  9:56   ` David Marchand
  2025-03-11  9:56   ` [RFC v3 7/8] build: use dynamically generated version maps David Marchand
                     ` (2 subsequent siblings)
  8 siblings, 0 replies; 17+ messages in thread
From: David Marchand @ 2025-03-11  9:56 UTC (permalink / raw)
  To: dev
  Cc: thomas, bruce.richardson, andremue, Nicolas Chautru,
	Parav Pandit, Xueming Li, Nipun Gupta, Nikhil Agarwal,
	Hemant Agrawal, Sachin Saxena, Rosen Xu, Chenbo Xia,
	Tomasz Duszynski, Chengwen Feng, Long Li, Wei Hu,
	Nithin Dabilpuram, Kiran Kumar K, Sunil Kumar Kori, Satha Rao,
	Harman Kalra, Anoob Joseph, Andrew Boyer, Dariusz Sosnowski,
	Viacheslav Ovsiienko, Bing Zhao, Ori Kam, Suanming Mou,
	Matan Azrad, Liron Himi, Chaoyong He, Nagadheeraj Rottela,
	Srikanth Jampala, Andrew Rybchenko, Ankur Dwivedi,
	Tejasree Kondoj, Gagandeep Singh, Kai Ji, Vamsi Attunuru,
	Pavan Nikhilesh, Shijith Thotton, Pravin Pathak,
	Ashwin Sekhar T K, Igor Russkikh, Ajit Khaparde, Somnath Kotur,
	Chas Williams, Min Hu (Connor),
	Ian Stokes, Vladimir Medvedkin, Anatoly Burakov, Jingjing Wu,
	Praveen Shetty, Cristian Dumitrescu, Maxime Coquelin, David Hunt,
	Sivaprasad Tummala, Akhil Goyal, Konstantin Ananyev, Fan Zhang,
	Ashish Gupta, Mattias Rönnblom, Kevin Laatz,
	Wathsala Vithanage, Tyler Retzlaff, Jerin Jacob,
	Harry van Haaren, Min Zhou, David Christensen, Stanislaw Kardach,
	Dmitry Kozlyuk, Byron Marohn, Yipeng Wang, Ferruh Yigit,
	Abhinandan Gujjar, Amit Prakash Shukla, Naga Harish K S V,
	Erik Gabriel Carrillo, Elena Agostini, Zhirun Yan, Jiayu Hu,
	Sameh Gobriel, Reshma Pattan, Stephen Hemminger,
	Morten Brørup, Srikanth Yalavarthi, Jasvinder Singh,
	Gaetan Rivet, Volodymyr Fialko, Honnappa Nagarahalli

Annotate symbols with newly introduced export macros.

For code not compiled by lib/meson.build or drivers/meson.build (like AVX
separate libraries, or sources in /base/ drivers), the exported symbols
are added in some file listed in the sources so they get caught by
lib/meson.build or drivers/meson.build.

Signed-off-by: David Marchand <david.marchand@redhat.com>
---
 drivers/baseband/acc/rte_acc100_pmd.c         |   1 +
 .../fpga_5gnr_fec/rte_fpga_5gnr_fec.c         |   1 +
 drivers/baseband/fpga_lte_fec/fpga_lte_fec.c  |   1 +
 drivers/bus/auxiliary/auxiliary_common.c      |   2 +
 drivers/bus/cdx/cdx.c                         |   4 +
 drivers/bus/cdx/cdx_vfio.c                    |   4 +
 drivers/bus/dpaa/dpaa_bus.c                   | 104 ++++
 drivers/bus/fslmc/fslmc_bus.c                 |   4 +
 drivers/bus/fslmc/fslmc_vfio.c                |  12 +
 drivers/bus/fslmc/mc/dpbp.c                   |   6 +
 drivers/bus/fslmc/mc/dpci.c                   |   3 +
 drivers/bus/fslmc/mc/dpcon.c                  |   6 +
 drivers/bus/fslmc/mc/dpdmai.c                 |   8 +
 drivers/bus/fslmc/mc/dpio.c                   |  13 +
 drivers/bus/fslmc/mc/dpmng.c                  |   2 +
 drivers/bus/fslmc/mc/mc_sys.c                 |   1 +
 drivers/bus/fslmc/portal/dpaa2_hw_dpbp.c      |   3 +
 drivers/bus/fslmc/portal/dpaa2_hw_dpci.c      |   2 +
 drivers/bus/fslmc/portal/dpaa2_hw_dpio.c      |  11 +
 drivers/bus/fslmc/qbman/qbman_debug.c         |   2 +
 drivers/bus/fslmc/qbman/qbman_portal.c        |  41 ++
 drivers/bus/ifpga/ifpga_bus.c                 |   3 +
 drivers/bus/pci/bsd/pci.c                     |  10 +
 drivers/bus/pci/linux/pci.c                   |  10 +
 drivers/bus/pci/pci_common.c                  |  10 +
 drivers/bus/pci/windows/pci.c                 |  10 +
 drivers/bus/platform/platform.c               |   2 +
 drivers/bus/uacce/uacce.c                     |   9 +
 drivers/bus/vdev/vdev.c                       |   6 +
 drivers/bus/vmbus/linux/vmbus_bus.c           |   6 +
 drivers/bus/vmbus/vmbus_channel.c             |  13 +
 drivers/bus/vmbus/vmbus_common.c              |   3 +
 drivers/common/cnxk/cnxk_security.c           |  12 +
 drivers/common/cnxk/cnxk_utils.c              |   1 +
 drivers/common/cnxk/roc_platform.c            | 559 ++++++++++++++++++
 drivers/common/cpt/cpt_fpm_tables.c           |   2 +
 drivers/common/cpt/cpt_pmd_ops_helper.c       |   3 +
 drivers/common/dpaax/caamflib.c               |   1 +
 drivers/common/dpaax/dpaa_of.c                |  12 +
 drivers/common/dpaax/dpaax_iova_table.c       |   6 +
 drivers/common/ionic/ionic_common_uio.c       |   4 +
 .../common/mlx5/linux/mlx5_common_auxiliary.c |   1 +
 drivers/common/mlx5/linux/mlx5_common_os.c    |   9 +
 drivers/common/mlx5/linux/mlx5_common_verbs.c |   3 +
 drivers/common/mlx5/linux/mlx5_glue.c         |   1 +
 drivers/common/mlx5/linux/mlx5_nl.c           |  21 +
 drivers/common/mlx5/mlx5_common.c             |   9 +
 drivers/common/mlx5/mlx5_common_devx.c        |   9 +
 drivers/common/mlx5/mlx5_common_mp.c          |   8 +
 drivers/common/mlx5/mlx5_common_mr.c          |  11 +
 drivers/common/mlx5/mlx5_common_pci.c         |   2 +
 drivers/common/mlx5/mlx5_common_utils.c       |  11 +
 drivers/common/mlx5/mlx5_devx_cmds.c          |  51 ++
 drivers/common/mlx5/mlx5_malloc.c             |   4 +
 drivers/common/mlx5/windows/mlx5_common_os.c  |   5 +
 drivers/common/mlx5/windows/mlx5_glue.c       |   3 +-
 drivers/common/mvep/mvep_common.c             |   2 +
 drivers/common/nfp/nfp_common.c               |   7 +
 drivers/common/nfp/nfp_common_pci.c           |   1 +
 drivers/common/nfp/nfp_dev.c                  |   1 +
 drivers/common/nitrox/nitrox_device.c         |   1 +
 drivers/common/nitrox/nitrox_logs.c           |   1 +
 drivers/common/nitrox/nitrox_qp.c             |   2 +
 drivers/common/octeontx/octeontx_mbox.c       |   6 +
 drivers/common/sfc_efx/sfc_efx.c              | 273 +++++++++
 drivers/common/sfc_efx/sfc_efx_mcdi.c         |   2 +
 drivers/crypto/cnxk/cn10k_cryptodev_ops.c     |   7 +
 drivers/crypto/cnxk/cn9k_cryptodev_ops.c      |   2 +
 drivers/crypto/cnxk/cnxk_cryptodev_ops.c      |   7 +
 drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c   |   2 +
 drivers/crypto/dpaa_sec/dpaa_sec.c            |   2 +
 drivers/crypto/octeontx/otx_cryptodev_ops.c   |   2 +
 .../scheduler/rte_cryptodev_scheduler.c       |  10 +
 drivers/dma/cnxk/cnxk_dmadev_fp.c             |   4 +
 drivers/event/cnxk/cnxk_worker.c              |   2 +
 drivers/event/dlb2/rte_pmd_dlb2.c             |   1 +
 drivers/mempool/cnxk/cn10k_hwpool_ops.c       |   3 +
 drivers/mempool/dpaa/dpaa_mempool.c           |   2 +
 drivers/mempool/dpaa2/dpaa2_hw_mempool.c      |   5 +
 drivers/net/atlantic/rte_pmd_atlantic.c       |   6 +
 drivers/net/bnxt/rte_pmd_bnxt.c               |  16 +
 drivers/net/bonding/rte_eth_bond_8023ad.c     |  12 +
 drivers/net/bonding/rte_eth_bond_api.c        |  15 +
 drivers/net/cnxk/cnxk_ethdev.c                |   3 +
 drivers/net/cnxk/cnxk_ethdev_sec.c            |   9 +
 drivers/net/dpaa/dpaa_ethdev.c                |   3 +
 drivers/net/dpaa2/dpaa2_ethdev.c              |  11 +
 drivers/net/dpaa2/dpaa2_mux.c                 |   3 +
 drivers/net/dpaa2/dpaa2_rxtx.c                |   1 +
 drivers/net/intel/i40e/rte_pmd_i40e.c         |  39 ++
 drivers/net/intel/iavf/iavf_ethdev.c          |   9 +
 drivers/net/intel/iavf/iavf_rxtx.c            |   8 +
 drivers/net/intel/ice/ice_diagnose.c          |   3 +
 drivers/net/intel/idpf/idpf_common_device.c   |  10 +
 drivers/net/intel/idpf/idpf_common_rxtx.c     |  33 ++
 drivers/net/intel/idpf/idpf_common_virtchnl.c |  29 +
 drivers/net/intel/ipn3ke/ipn3ke_ethdev.c      |   1 +
 drivers/net/intel/ixgbe/rte_pmd_ixgbe.c       |  37 ++
 drivers/net/mlx5/mlx5.c                       |   1 +
 drivers/net/mlx5/mlx5_flow.c                  |   4 +
 drivers/net/mlx5/mlx5_rx.c                    |   2 +
 drivers/net/mlx5/mlx5_rxq.c                   |   2 +
 drivers/net/mlx5/mlx5_tx.c                    |   1 +
 drivers/net/mlx5/mlx5_txq.c                   |   3 +
 drivers/net/octeontx/octeontx_ethdev.c        |   1 +
 drivers/net/ring/rte_eth_ring.c               |   2 +
 drivers/net/softnic/rte_eth_softnic.c         |   1 +
 drivers/net/softnic/rte_eth_softnic_thread.c  |   1 +
 drivers/net/vhost/rte_eth_vhost.c             |   2 +
 drivers/power/kvm_vm/guest_channel.c          |   2 +
 drivers/raw/cnxk_rvu_lf/cnxk_rvu_lf.c         |  10 +
 drivers/raw/ifpga/rte_pmd_ifpga.c             |  11 +
 lib/acl/acl_bld.c                             |   1 +
 lib/acl/acl_run_scalar.c                      |   1 +
 lib/acl/rte_acl.c                             |  11 +
 lib/argparse/rte_argparse.c                   |   2 +
 lib/bbdev/bbdev_trace_points.c                |   2 +
 lib/bbdev/rte_bbdev.c                         |  31 +
 lib/bitratestats/rte_bitrate.c                |   4 +
 lib/bpf/bpf.c                                 |   2 +
 lib/bpf/bpf_convert.c                         |   1 +
 lib/bpf/bpf_dump.c                            |   1 +
 lib/bpf/bpf_exec.c                            |   2 +
 lib/bpf/bpf_load.c                            |   1 +
 lib/bpf/bpf_load_elf.c                        |   1 +
 lib/bpf/bpf_pkt.c                             |   4 +
 lib/bpf/bpf_stub.c                            |   2 +
 lib/cfgfile/rte_cfgfile.c                     |  17 +
 lib/cmdline/cmdline.c                         |   9 +
 lib/cmdline/cmdline_cirbuf.c                  |  19 +
 lib/cmdline/cmdline_parse.c                   |   4 +
 lib/cmdline/cmdline_parse_bool.c              |   1 +
 lib/cmdline/cmdline_parse_etheraddr.c         |   3 +
 lib/cmdline/cmdline_parse_ipaddr.c            |   3 +
 lib/cmdline/cmdline_parse_num.c               |   3 +
 lib/cmdline/cmdline_parse_portlist.c          |   3 +
 lib/cmdline/cmdline_parse_string.c            |   5 +
 lib/cmdline/cmdline_rdline.c                  |  15 +
 lib/cmdline/cmdline_socket.c                  |   3 +
 lib/cmdline/cmdline_vt100.c                   |   2 +
 lib/compressdev/rte_comp.c                    |   6 +
 lib/compressdev/rte_compressdev.c             |  25 +
 lib/compressdev/rte_compressdev_pmd.c         |   3 +
 lib/cryptodev/cryptodev_pmd.c                 |   7 +
 lib/cryptodev/cryptodev_trace_points.c        |   3 +
 lib/cryptodev/rte_cryptodev.c                 |  83 +++
 lib/dispatcher/rte_dispatcher.c               |  13 +
 lib/distributor/rte_distributor.c             |   9 +
 lib/dmadev/rte_dmadev.c                       |  19 +
 lib/dmadev/rte_dmadev_trace_points.c          |   7 +
 lib/eal/arm/rte_cpuflags.c                    |   3 +
 lib/eal/arm/rte_hypervisor.c                  |   1 +
 lib/eal/arm/rte_power_intrinsics.c            |   4 +
 lib/eal/common/eal_common_bus.c               |  10 +
 lib/eal/common/eal_common_class.c             |   4 +
 lib/eal/common/eal_common_config.c            |   7 +
 lib/eal/common/eal_common_cpuflags.c          |   1 +
 lib/eal/common/eal_common_debug.c             |   2 +
 lib/eal/common/eal_common_dev.c               |  19 +
 lib/eal/common/eal_common_devargs.c           |   9 +
 lib/eal/common/eal_common_errno.c             |   2 +
 lib/eal/common/eal_common_fbarray.c           |  26 +
 lib/eal/common/eal_common_hexdump.c           |   2 +
 lib/eal/common/eal_common_hypervisor.c        |   1 +
 lib/eal/common/eal_common_interrupts.c        |  27 +
 lib/eal/common/eal_common_launch.c            |   5 +
 lib/eal/common/eal_common_lcore.c             |  17 +
 lib/eal/common/eal_common_lcore_var.c         |   1 +
 lib/eal/common/eal_common_mcfg.c              |  20 +
 lib/eal/common/eal_common_memory.c            |  29 +
 lib/eal/common/eal_common_memzone.c           |   9 +
 lib/eal/common/eal_common_options.c           |   4 +
 lib/eal/common/eal_common_proc.c              |   8 +
 lib/eal/common/eal_common_string_fns.c        |   3 +
 lib/eal/common/eal_common_tailqs.c            |   3 +
 lib/eal/common/eal_common_thread.c            |  14 +
 lib/eal/common/eal_common_timer.c             |   4 +
 lib/eal/common/eal_common_trace.c             |  15 +
 lib/eal/common/eal_common_trace_ctf.c         |   1 +
 lib/eal/common/eal_common_trace_points.c      |  18 +
 lib/eal/common/eal_common_trace_utils.c       |   1 +
 lib/eal/common/eal_common_uuid.c              |   4 +
 lib/eal/common/rte_bitset.c                   |   1 +
 lib/eal/common/rte_keepalive.c                |   6 +
 lib/eal/common/rte_malloc.c                   |  22 +
 lib/eal/common/rte_random.c                   |   4 +
 lib/eal/common/rte_reciprocal.c               |   2 +
 lib/eal/common/rte_service.c                  |  31 +
 lib/eal/common/rte_version.c                  |   7 +
 lib/eal/freebsd/eal.c                         |  22 +
 lib/eal/freebsd/eal_alarm.c                   |   2 +
 lib/eal/freebsd/eal_dev.c                     |   4 +
 lib/eal/freebsd/eal_interrupts.c              |  19 +
 lib/eal/freebsd/eal_memory.c                  |   3 +
 lib/eal/freebsd/eal_thread.c                  |   2 +
 lib/eal/freebsd/eal_timer.c                   |   1 +
 lib/eal/linux/eal.c                           |   7 +
 lib/eal/linux/eal_alarm.c                     |   2 +
 lib/eal/linux/eal_dev.c                       |   4 +
 lib/eal/linux/eal_interrupts.c                |  19 +
 lib/eal/linux/eal_memory.c                    |   3 +
 lib/eal/linux/eal_thread.c                    |   2 +
 lib/eal/linux/eal_timer.c                     |   4 +
 lib/eal/linux/eal_vfio.c                      |  16 +
 lib/eal/loongarch/rte_cpuflags.c              |   3 +
 lib/eal/loongarch/rte_hypervisor.c            |   1 +
 lib/eal/loongarch/rte_power_intrinsics.c      |   4 +
 lib/eal/ppc/rte_cpuflags.c                    |   3 +
 lib/eal/ppc/rte_hypervisor.c                  |   1 +
 lib/eal/ppc/rte_power_intrinsics.c            |   4 +
 lib/eal/riscv/rte_cpuflags.c                  |   3 +
 lib/eal/riscv/rte_hypervisor.c                |   1 +
 lib/eal/riscv/rte_power_intrinsics.c          |   4 +
 lib/eal/unix/eal_debug.c                      |   2 +
 lib/eal/unix/eal_filesystem.c                 |   1 +
 lib/eal/unix/eal_firmware.c                   |   1 +
 lib/eal/unix/eal_unix_memory.c                |   4 +
 lib/eal/unix/eal_unix_timer.c                 |   1 +
 lib/eal/unix/rte_thread.c                     |  13 +
 lib/eal/windows/eal.c                         |  11 +
 lib/eal/windows/eal_alarm.c                   |   2 +
 lib/eal/windows/eal_debug.c                   |   1 +
 lib/eal/windows/eal_dev.c                     |   4 +
 lib/eal/windows/eal_interrupts.c              |  19 +
 lib/eal/windows/eal_memory.c                  |   7 +
 lib/eal/windows/eal_mp.c                      |   6 +
 lib/eal/windows/eal_thread.c                  |   1 +
 lib/eal/windows/eal_timer.c                   |   1 +
 lib/eal/windows/rte_thread.c                  |  14 +
 lib/eal/x86/rte_cpuflags.c                    |   3 +
 lib/eal/x86/rte_hypervisor.c                  |   1 +
 lib/eal/x86/rte_power_intrinsics.c            |   4 +
 lib/eal/x86/rte_spinlock.c                    |   1 +
 lib/efd/rte_efd.c                             |   7 +
 lib/ethdev/ethdev_driver.c                    |  24 +
 lib/ethdev/ethdev_linux_ethtool.c             |   3 +
 lib/ethdev/ethdev_private.c                   |   2 +
 lib/ethdev/ethdev_trace_points.c              |   6 +
 lib/ethdev/rte_ethdev.c                       | 168 ++++++
 lib/ethdev/rte_ethdev_cman.c                  |   4 +
 lib/ethdev/rte_flow.c                         |  64 ++
 lib/ethdev/rte_mtr.c                          |  21 +
 lib/ethdev/rte_tm.c                           |  31 +
 lib/eventdev/eventdev_private.c               |   2 +
 lib/eventdev/eventdev_trace_points.c          |  11 +
 lib/eventdev/rte_event_crypto_adapter.c       |  15 +
 lib/eventdev/rte_event_dma_adapter.c          |  15 +
 lib/eventdev/rte_event_eth_rx_adapter.c       |  23 +
 lib/eventdev/rte_event_eth_tx_adapter.c       |  17 +
 lib/eventdev/rte_event_ring.c                 |   4 +
 lib/eventdev/rte_event_timer_adapter.c        |  11 +
 lib/eventdev/rte_eventdev.c                   |  46 ++
 lib/fib/rte_fib.c                             |  10 +
 lib/fib/rte_fib6.c                            |   9 +
 lib/gpudev/gpudev.c                           |  32 +
 lib/graph/graph.c                             |  16 +
 lib/graph/graph_debug.c                       |   1 +
 lib/graph/graph_stats.c                       |   4 +
 lib/graph/node.c                              |  11 +
 lib/graph/rte_graph_model_mcore_dispatch.c    |   3 +
 lib/graph/rte_graph_worker.c                  |   3 +
 lib/gro/rte_gro.c                             |   6 +
 lib/gso/rte_gso.c                             |   1 +
 lib/hash/rte_cuckoo_hash.c                    |  27 +
 lib/hash/rte_fbk_hash.c                       |   3 +
 lib/hash/rte_hash_crc.c                       |   2 +
 lib/hash/rte_thash.c                          |  12 +
 lib/hash/rte_thash_gf2_poly_math.c            |   1 +
 lib/hash/rte_thash_gfni.c                     |   2 +
 lib/ip_frag/rte_ip_frag_common.c              |   5 +
 lib/ip_frag/rte_ipv4_fragmentation.c          |   2 +
 lib/ip_frag/rte_ipv4_reassembly.c             |   1 +
 lib/ip_frag/rte_ipv6_fragmentation.c          |   1 +
 lib/ip_frag/rte_ipv6_reassembly.c             |   1 +
 lib/ipsec/ipsec_sad.c                         |   6 +
 lib/ipsec/ipsec_telemetry.c                   |   2 +
 lib/ipsec/sa.c                                |   4 +
 lib/ipsec/ses.c                               |   1 +
 lib/jobstats/rte_jobstats.c                   |  14 +
 lib/kvargs/rte_kvargs.c                       |   8 +
 lib/latencystats/rte_latencystats.c           |   5 +
 lib/log/log.c                                 |  22 +
 lib/log/log_color.c                           |   1 +
 lib/log/log_syslog.c                          |   1 +
 lib/log/log_timestamp.c                       |   1 +
 lib/lpm/rte_lpm.c                             |   8 +
 lib/lpm/rte_lpm6.c                            |  10 +
 lib/mbuf/rte_mbuf.c                           |  17 +
 lib/mbuf/rte_mbuf_dyn.c                       |   9 +
 lib/mbuf/rte_mbuf_pool_ops.c                  |   5 +
 lib/mbuf/rte_mbuf_ptype.c                     |   8 +
 lib/member/rte_member.c                       |  13 +
 lib/mempool/mempool_trace_points.c            |  10 +
 lib/mempool/rte_mempool.c                     |  27 +
 lib/mempool/rte_mempool_ops.c                 |   4 +
 lib/mempool/rte_mempool_ops_default.c         |   4 +
 lib/meter/rte_meter.c                         |   6 +
 lib/metrics/rte_metrics.c                     |   8 +
 lib/metrics/rte_metrics_telemetry.c           |  11 +
 lib/mldev/mldev_utils.c                       |   2 +
 lib/mldev/mldev_utils_neon.c                  |  18 +
 lib/mldev/mldev_utils_neon_bfloat16.c         |   2 +
 lib/mldev/mldev_utils_scalar.c                |  18 +
 lib/mldev/mldev_utils_scalar_bfloat16.c       |   2 +
 lib/mldev/rte_mldev.c                         |  37 ++
 lib/mldev/rte_mldev_pmd.c                     |   2 +
 lib/net/rte_arp.c                             |   1 +
 lib/net/rte_ether.c                           |   3 +
 lib/net/rte_net.c                             |   2 +
 lib/net/rte_net_crc.c                         |   1 +
 lib/node/ethdev_ctrl.c                        |   2 +
 lib/node/ip4_lookup.c                         |   1 +
 lib/node/ip4_reassembly.c                     |   1 +
 lib/node/ip4_rewrite.c                        |   1 +
 lib/node/ip6_lookup.c                         |   1 +
 lib/node/ip6_rewrite.c                        |   1 +
 lib/node/udp4_input.c                         |   2 +
 lib/pcapng/rte_pcapng.c                       |   7 +
 lib/pci/rte_pci.c                             |   3 +
 lib/pdcp/rte_pdcp.c                           |   5 +
 lib/pdump/rte_pdump.c                         |   9 +
 lib/pipeline/rte_pipeline.c                   |  23 +
 lib/pipeline/rte_port_in_action.c             |   8 +
 lib/pipeline/rte_swx_ctl.c                    |  17 +
 lib/pipeline/rte_swx_ipsec.c                  |   7 +
 lib/pipeline/rte_swx_pipeline.c               |  73 +++
 lib/pipeline/rte_table_action.c               |  16 +
 lib/port/rte_port_ethdev.c                    |   3 +
 lib/port/rte_port_eventdev.c                  |   3 +
 lib/port/rte_port_fd.c                        |   3 +
 lib/port/rte_port_frag.c                      |   2 +
 lib/port/rte_port_ras.c                       |   2 +
 lib/port/rte_port_ring.c                      |   6 +
 lib/port/rte_port_sched.c                     |   2 +
 lib/port/rte_port_source_sink.c               |   2 +
 lib/port/rte_port_sym_crypto.c                |   3 +
 lib/port/rte_swx_port_ethdev.c                |   2 +
 lib/port/rte_swx_port_fd.c                    |   2 +
 lib/port/rte_swx_port_ring.c                  |   2 +
 lib/port/rte_swx_port_source_sink.c           |   3 +
 lib/power/power_common.c                      |   8 +
 lib/power/rte_power_cpufreq.c                 |  18 +
 lib/power/rte_power_pmd_mgmt.c                |  10 +
 lib/power/rte_power_qos.c                     |   2 +
 lib/power/rte_power_uncore.c                  |  14 +
 lib/rawdev/rte_rawdev.c                       |  30 +
 lib/rcu/rte_rcu_qsbr.c                        |  11 +
 lib/regexdev/rte_regexdev.c                   |  26 +
 lib/reorder/rte_reorder.c                     |  11 +
 lib/rib/rte_rib.c                             |  14 +
 lib/rib/rte_rib6.c                            |  14 +
 lib/ring/rte_ring.c                           |  11 +
 lib/ring/rte_soring.c                         |   3 +
 lib/ring/soring.c                             |  16 +
 lib/sched/rte_approx.c                        |   1 +
 lib/sched/rte_pie.c                           |   2 +
 lib/sched/rte_red.c                           |   6 +
 lib/sched/rte_sched.c                         |  15 +
 lib/security/rte_security.c                   |  20 +
 lib/stack/rte_stack.c                         |   3 +
 lib/table/rte_swx_table_em.c                  |   2 +
 lib/table/rte_swx_table_learner.c             |  10 +
 lib/table/rte_swx_table_selector.c            |   6 +
 lib/table/rte_swx_table_wm.c                  |   1 +
 lib/table/rte_table_acl.c                     |   1 +
 lib/table/rte_table_array.c                   |   1 +
 lib/table/rte_table_hash_cuckoo.c             |   1 +
 lib/table/rte_table_hash_ext.c                |   1 +
 lib/table/rte_table_hash_key16.c              |   2 +
 lib/table/rte_table_hash_key32.c              |   2 +
 lib/table/rte_table_hash_key8.c               |   2 +
 lib/table/rte_table_hash_lru.c                |   1 +
 lib/table/rte_table_lpm.c                     |   1 +
 lib/table/rte_table_lpm_ipv6.c                |   1 +
 lib/table/rte_table_stub.c                    |   1 +
 lib/telemetry/telemetry.c                     |   3 +
 lib/telemetry/telemetry_data.c                |  17 +
 lib/telemetry/telemetry_legacy.c              |   1 +
 lib/timer/rte_timer.c                         |  18 +
 lib/vhost/socket.c                            |  16 +
 lib/vhost/vdpa.c                              |  11 +
 lib/vhost/vhost.c                             |  41 ++
 lib/vhost/vhost_crypto.c                      |   6 +
 lib/vhost/vhost_user.c                        |   2 +
 lib/vhost/virtio_net.c                        |   7 +
 385 files changed, 4123 insertions(+), 2 deletions(-)

diff --git a/drivers/baseband/acc/rte_acc100_pmd.c b/drivers/baseband/acc/rte_acc100_pmd.c
index d33e42c807..3351c337b7 100644
--- a/drivers/baseband/acc/rte_acc100_pmd.c
+++ b/drivers/baseband/acc/rte_acc100_pmd.c
@@ -4635,6 +4635,7 @@ acc100_configure(const char *dev_name, struct rte_acc_conf *conf)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_acc_configure, 22.11)
 int
 rte_acc_configure(const char *dev_name, struct rte_acc_conf *conf)
 {
diff --git a/drivers/baseband/fpga_5gnr_fec/rte_fpga_5gnr_fec.c b/drivers/baseband/fpga_5gnr_fec/rte_fpga_5gnr_fec.c
index 65b7e118cd..f3dae35666 100644
--- a/drivers/baseband/fpga_5gnr_fec/rte_fpga_5gnr_fec.c
+++ b/drivers/baseband/fpga_5gnr_fec/rte_fpga_5gnr_fec.c
@@ -3366,6 +3366,7 @@ static int agx100_configure(const char *dev_name, const struct rte_fpga_5gnr_fec
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_fpga_5gnr_fec_configure, 20.11)
 int rte_fpga_5gnr_fec_configure(const char *dev_name, const struct rte_fpga_5gnr_fec_conf *conf)
 {
 	struct rte_bbdev *bbdev = rte_bbdev_get_named_dev(dev_name);
diff --git a/drivers/baseband/fpga_lte_fec/fpga_lte_fec.c b/drivers/baseband/fpga_lte_fec/fpga_lte_fec.c
index 04c1f95180..1c614da354 100644
--- a/drivers/baseband/fpga_lte_fec/fpga_lte_fec.c
+++ b/drivers/baseband/fpga_lte_fec/fpga_lte_fec.c
@@ -2452,6 +2452,7 @@ set_default_fpga_conf(struct rte_fpga_lte_fec_conf *def_conf)
 }
 
 /* Initial configuration of FPGA LTE FEC device */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_fpga_lte_fec_configure, 20.11)
 int
 rte_fpga_lte_fec_configure(const char *dev_name,
 		const struct rte_fpga_lte_fec_conf *conf)
diff --git a/drivers/bus/auxiliary/auxiliary_common.c b/drivers/bus/auxiliary/auxiliary_common.c
index b444eb43ef..0cb646930f 100644
--- a/drivers/bus/auxiliary/auxiliary_common.c
+++ b/drivers/bus/auxiliary/auxiliary_common.c
@@ -258,6 +258,7 @@ auxiliary_parse(const char *name, void *addr)
 }
 
 /* Register a driver */
+RTE_EXPORT_INTERNAL_SYMBOL(rte_auxiliary_register)
 void
 rte_auxiliary_register(struct rte_auxiliary_driver *driver)
 {
@@ -265,6 +266,7 @@ rte_auxiliary_register(struct rte_auxiliary_driver *driver)
 }
 
 /* Unregister a driver */
+RTE_EXPORT_INTERNAL_SYMBOL(rte_auxiliary_unregister)
 void
 rte_auxiliary_unregister(struct rte_auxiliary_driver *driver)
 {
diff --git a/drivers/bus/cdx/cdx.c b/drivers/bus/cdx/cdx.c
index 62b108e082..bde565c48b 100644
--- a/drivers/bus/cdx/cdx.c
+++ b/drivers/bus/cdx/cdx.c
@@ -139,11 +139,13 @@ cdx_get_kernel_driver_by_path(const char *filename, char *driver_name,
 	return -1;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_cdx_map_device)
 int rte_cdx_map_device(struct rte_cdx_device *dev)
 {
 	return cdx_vfio_map_resource(dev);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_cdx_unmap_device)
 void rte_cdx_unmap_device(struct rte_cdx_device *dev)
 {
 	cdx_vfio_unmap_resource(dev);
@@ -478,6 +480,7 @@ cdx_parse(const char *name, void *addr)
 }
 
 /* register a driver */
+RTE_EXPORT_INTERNAL_SYMBOL(rte_cdx_register)
 void
 rte_cdx_register(struct rte_cdx_driver *driver)
 {
@@ -486,6 +489,7 @@ rte_cdx_register(struct rte_cdx_driver *driver)
 }
 
 /* unregister a driver */
+RTE_EXPORT_INTERNAL_SYMBOL(rte_cdx_unregister)
 void
 rte_cdx_unregister(struct rte_cdx_driver *driver)
 {
diff --git a/drivers/bus/cdx/cdx_vfio.c b/drivers/bus/cdx/cdx_vfio.c
index 664f267471..d3fd02937c 100644
--- a/drivers/bus/cdx/cdx_vfio.c
+++ b/drivers/bus/cdx/cdx_vfio.c
@@ -550,6 +550,7 @@ cdx_vfio_map_resource(struct rte_cdx_device *dev)
 		return cdx_vfio_map_resource_secondary(dev);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_cdx_vfio_intr_enable)
 int
 rte_cdx_vfio_intr_enable(const struct rte_intr_handle *intr_handle)
 {
@@ -584,6 +585,7 @@ rte_cdx_vfio_intr_enable(const struct rte_intr_handle *intr_handle)
 }
 
 /* disable MSI interrupts */
+RTE_EXPORT_INTERNAL_SYMBOL(rte_cdx_vfio_intr_disable)
 int
 rte_cdx_vfio_intr_disable(const struct rte_intr_handle *intr_handle)
 {
@@ -611,6 +613,7 @@ rte_cdx_vfio_intr_disable(const struct rte_intr_handle *intr_handle)
 }
 
 /* Enable Bus Mastering */
+RTE_EXPORT_INTERNAL_SYMBOL(rte_cdx_vfio_bm_enable)
 int
 rte_cdx_vfio_bm_enable(struct rte_cdx_device *dev)
 {
@@ -656,6 +659,7 @@ rte_cdx_vfio_bm_enable(struct rte_cdx_device *dev)
 }
 
 /* Disable Bus Mastering */
+RTE_EXPORT_INTERNAL_SYMBOL(rte_cdx_vfio_bm_disable)
 int
 rte_cdx_vfio_bm_disable(struct rte_cdx_device *dev)
 {
diff --git a/drivers/bus/dpaa/dpaa_bus.c b/drivers/bus/dpaa/dpaa_bus.c
index 9ffbe07c93..77b63421b3 100644
--- a/drivers/bus/dpaa/dpaa_bus.c
+++ b/drivers/bus/dpaa/dpaa_bus.c
@@ -59,15 +59,19 @@ struct netcfg_info *dpaa_netcfg;
 /* define a variable to hold the portal_key, once created.*/
 static pthread_key_t dpaa_portal_key;
 
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa_svr_family)
 unsigned int dpaa_svr_family;
 
 #define FSL_DPAA_BUS_NAME	dpaa_bus
 
+RTE_EXPORT_INTERNAL_SYMBOL(per_lcore_dpaa_io)
 RTE_DEFINE_PER_LCORE(struct dpaa_portal *, dpaa_io);
 
 #define DPAA_SEQN_DYNFIELD_NAME "dpaa_seqn_dynfield"
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa_seqn_dynfield_offset)
 int dpaa_seqn_dynfield_offset = -1;
 
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa_get_eth_port_cfg)
 struct fm_eth_port_cfg *
 dpaa_get_eth_port_cfg(int dev_id)
 {
@@ -315,6 +319,7 @@ dpaa_clean_device_list(void)
 	}
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_dpaa_portal_init)
 int rte_dpaa_portal_init(void *arg)
 {
 	static const struct rte_mbuf_dynfield dpaa_seqn_dynfield_desc = {
@@ -393,6 +398,7 @@ int rte_dpaa_portal_init(void *arg)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_dpaa_portal_fq_init)
 int
 rte_dpaa_portal_fq_init(void *arg, struct qman_fq *fq)
 {
@@ -421,6 +427,7 @@ rte_dpaa_portal_fq_init(void *arg, struct qman_fq *fq)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_dpaa_portal_fq_close)
 int rte_dpaa_portal_fq_close(struct qman_fq *fq)
 {
 	return fsl_qman_fq_portal_destroy(fq->qp);
@@ -548,6 +555,7 @@ rte_dpaa_bus_scan(void)
 }
 
 /* register a dpaa bus based dpaa driver */
+RTE_EXPORT_INTERNAL_SYMBOL(rte_dpaa_driver_register)
 void
 rte_dpaa_driver_register(struct rte_dpaa_driver *driver)
 {
@@ -559,6 +567,7 @@ rte_dpaa_driver_register(struct rte_dpaa_driver *driver)
 }
 
 /* un-register a dpaa bus based dpaa driver */
+RTE_EXPORT_INTERNAL_SYMBOL(rte_dpaa_driver_unregister)
 void
 rte_dpaa_driver_unregister(struct rte_dpaa_driver *driver)
 {
@@ -861,3 +870,98 @@ static struct rte_dpaa_bus rte_dpaa_bus = {
 
 RTE_REGISTER_BUS(FSL_DPAA_BUS_NAME, rte_dpaa_bus.bus);
 RTE_LOG_REGISTER_DEFAULT(dpaa_logtype_bus, NOTICE);
+
+/* Export all base symbols */
+RTE_EXPORT_INTERNAL_SYMBOL(fman_ip_rev)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_dealloc_bufs_mask_hi)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_dealloc_bufs_mask_lo)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_set_mcast_filter_table)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_reset_mcast_filter_table)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_clear_mac_addr)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_add_mac_addr)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_stats_get)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_stats_get_all)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_stats_reset)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_bmi_stats_enable)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_bmi_stats_disable)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_bmi_stats_get_all)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_bmi_stats_reset)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_promiscuous_enable)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_promiscuous_disable)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_enable_rx)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_disable_rx)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_get_rx_status)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_loopback_enable)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_loopback_disable)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_set_bp)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_get_fc_threshold)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_set_fc_threshold)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_get_fc_quanta)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_set_fc_quanta)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_get_fdoff)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_set_err_fqid)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_set_ic_params)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_set_fdoff)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_set_maxfrm)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_get_maxfrm)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_get_sg_enable)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_set_sg)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_discard_rx_errors)
+RTE_EXPORT_INTERNAL_SYMBOL(fman_if_receive_rx_errors)
+RTE_EXPORT_INTERNAL_SYMBOL(netcfg_acquire)
+RTE_EXPORT_INTERNAL_SYMBOL(netcfg_release)
+RTE_EXPORT_INTERNAL_SYMBOL(bman_new_pool)
+RTE_EXPORT_INTERNAL_SYMBOL(bman_free_pool)
+RTE_EXPORT_INTERNAL_SYMBOL(bman_get_params)
+RTE_EXPORT_INTERNAL_SYMBOL(bman_release)
+RTE_EXPORT_INTERNAL_SYMBOL(bman_acquire)
+RTE_EXPORT_INTERNAL_SYMBOL(bman_query_free_buffers)
+RTE_EXPORT_INTERNAL_SYMBOL(bman_thread_irq)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_alloc_fqid_range)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_reserve_fqid_range)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_alloc_pool_range)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_alloc_cgrid_range)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_release_cgrid_range)
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa_intr_enable)
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa_intr_disable)
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa_get_ioctl_version_number)
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa_get_link_status)
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa_update_link_status)
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa_update_link_speed)
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa_restart_link_autoneg)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_set_fq_lookup_table)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_ern_register_cb)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_ern_poll_free)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_irqsource_add)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_fq_portal_irqsource_add)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_irqsource_remove)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_fq_portal_irqsource_remove)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_portal_poll_rx)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_clear_irq)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_portal_dequeue)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_dequeue)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_dqrr_consume)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_static_dequeue_add)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_dca_index)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_create_fq)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_fq_fqid)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_fq_state)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_init_fq)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_retire_fq)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_oos_fq)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_query_fq_np)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_query_fq_frm_cnt)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_set_vdq)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_volatile_dequeue)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_enqueue)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_enqueue_multi)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_enqueue_multi_fq)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_modify_cgr)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_create_cgr)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_delete_cgr)
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa_get_qm_channel_caam)
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa_get_qm_channel_pool)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_thread_fd)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_thread_irq)
+RTE_EXPORT_INTERNAL_SYMBOL(qman_fq_portal_thread_irq)
+RTE_EXPORT_INTERNAL_SYMBOL(fsl_qman_fq_portal_create)
diff --git a/drivers/bus/fslmc/fslmc_bus.c b/drivers/bus/fslmc/fslmc_bus.c
index 68ad2b801e..5d38d17525 100644
--- a/drivers/bus/fslmc/fslmc_bus.c
+++ b/drivers/bus/fslmc/fslmc_bus.c
@@ -29,8 +29,10 @@
 struct rte_fslmc_bus rte_fslmc_bus;
 
 #define DPAA2_SEQN_DYNFIELD_NAME "dpaa2_seqn_dynfield"
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa2_seqn_dynfield_offset)
 int dpaa2_seqn_dynfield_offset = -1;
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_fslmc_get_device_count)
 uint32_t
 rte_fslmc_get_device_count(enum rte_dpaa2_dev_type device_type)
 {
@@ -525,6 +527,7 @@ rte_fslmc_find_device(const struct rte_device *start, rte_dev_cmp_t cmp,
 }
 
 /*register a fslmc bus based dpaa2 driver */
+RTE_EXPORT_INTERNAL_SYMBOL(rte_fslmc_driver_register)
 void
 rte_fslmc_driver_register(struct rte_dpaa2_driver *driver)
 {
@@ -534,6 +537,7 @@ rte_fslmc_driver_register(struct rte_dpaa2_driver *driver)
 }
 
 /*un-register a fslmc bus based dpaa2 driver */
+RTE_EXPORT_INTERNAL_SYMBOL(rte_fslmc_driver_unregister)
 void
 rte_fslmc_driver_unregister(struct rte_dpaa2_driver *driver)
 {
diff --git a/drivers/bus/fslmc/fslmc_vfio.c b/drivers/bus/fslmc/fslmc_vfio.c
index 7a584b9280..ab25261598 100644
--- a/drivers/bus/fslmc/fslmc_vfio.c
+++ b/drivers/bus/fslmc/fslmc_vfio.c
@@ -83,6 +83,7 @@ enum {
 	FSLMC_VFIO_SOCKET_REQ_MEM
 };
 
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa2_get_mcp_ptr)
 void *
 dpaa2_get_mcp_ptr(int portal_idx)
 {
@@ -154,6 +155,7 @@ fslmc_io_virt2phy(const void *virtaddr)
 }
 
 /*register a fslmc bus based dpaa2 driver */
+RTE_EXPORT_INTERNAL_SYMBOL(rte_fslmc_object_register)
 void
 rte_fslmc_object_register(struct rte_dpaa2_object *object)
 {
@@ -984,6 +986,7 @@ fslmc_unmap_dma(uint64_t vaddr, uint64_t iovaddr, size_t len)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_fslmc_cold_mem_vaddr_to_iova)
 uint64_t
 rte_fslmc_cold_mem_vaddr_to_iova(void *vaddr,
 	uint64_t size)
@@ -1002,6 +1005,7 @@ rte_fslmc_cold_mem_vaddr_to_iova(void *vaddr,
 	return RTE_BAD_IOVA;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_fslmc_cold_mem_iova_to_vaddr)
 void *
 rte_fslmc_cold_mem_iova_to_vaddr(uint64_t iova,
 	uint64_t size)
@@ -1018,6 +1022,7 @@ rte_fslmc_cold_mem_iova_to_vaddr(uint64_t iova,
 	return NULL;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_fslmc_mem_vaddr_to_iova)
 __rte_hot uint64_t
 rte_fslmc_mem_vaddr_to_iova(void *vaddr)
 {
@@ -1027,6 +1032,7 @@ rte_fslmc_mem_vaddr_to_iova(void *vaddr)
 	return rte_fslmc_cold_mem_vaddr_to_iova(vaddr, 0);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_fslmc_mem_iova_to_vaddr)
 __rte_hot void *
 rte_fslmc_mem_iova_to_vaddr(uint64_t iova)
 {
@@ -1036,6 +1042,7 @@ rte_fslmc_mem_iova_to_vaddr(uint64_t iova)
 	return rte_fslmc_cold_mem_iova_to_vaddr(iova, 0);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_fslmc_io_vaddr_to_iova)
 uint64_t
 rte_fslmc_io_vaddr_to_iova(void *vaddr)
 {
@@ -1051,6 +1058,7 @@ rte_fslmc_io_vaddr_to_iova(void *vaddr)
 	return RTE_BAD_IOVA;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_fslmc_io_iova_to_vaddr)
 void *
 rte_fslmc_io_iova_to_vaddr(uint64_t iova)
 {
@@ -1141,12 +1149,14 @@ fslmc_dmamap_seg(const struct rte_memseg_list *msl __rte_unused,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_fslmc_vfio_mem_dmamap)
 int
 rte_fslmc_vfio_mem_dmamap(uint64_t vaddr, uint64_t iova, uint64_t size)
 {
 	return fslmc_map_dma(vaddr, iova, size);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_fslmc_vfio_mem_dmaunmap)
 int
 rte_fslmc_vfio_mem_dmaunmap(uint64_t iova, uint64_t size)
 {
@@ -1264,6 +1274,7 @@ static intptr_t vfio_map_mcp_obj(const char *mcp_obj)
 
 #define IRQ_SET_BUF_LEN  (sizeof(struct vfio_irq_set) + sizeof(int))
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_dpaa2_intr_enable)
 int rte_dpaa2_intr_enable(struct rte_intr_handle *intr_handle, int index)
 {
 	int len, ret;
@@ -1295,6 +1306,7 @@ int rte_dpaa2_intr_enable(struct rte_intr_handle *intr_handle, int index)
 	return ret;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_dpaa2_intr_disable)
 int rte_dpaa2_intr_disable(struct rte_intr_handle *intr_handle, int index)
 {
 	struct vfio_irq_set *irq_set;
diff --git a/drivers/bus/fslmc/mc/dpbp.c b/drivers/bus/fslmc/mc/dpbp.c
index d9103409cf..241819faa3 100644
--- a/drivers/bus/fslmc/mc/dpbp.c
+++ b/drivers/bus/fslmc/mc/dpbp.c
@@ -26,6 +26,7 @@
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpbp_open)
 int dpbp_open(struct fsl_mc_io *mc_io,
 	      uint32_t cmd_flags,
 	      int dpbp_id,
@@ -157,6 +158,7 @@ int dpbp_destroy(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpbp_enable)
 int dpbp_enable(struct fsl_mc_io *mc_io,
 		uint32_t cmd_flags,
 		uint16_t token)
@@ -179,6 +181,7 @@ int dpbp_enable(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpbp_disable)
 int dpbp_disable(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token)
@@ -235,6 +238,7 @@ int dpbp_is_enabled(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpbp_reset)
 int dpbp_reset(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       uint16_t token)
@@ -258,6 +262,7 @@ int dpbp_reset(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpbp_get_attributes)
 int dpbp_get_attributes(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
@@ -329,6 +334,7 @@ int dpbp_get_api_version(struct fsl_mc_io *mc_io,
  * Return:  '0' on Success; Error code otherwise.
  */
 
+RTE_EXPORT_INTERNAL_SYMBOL(dpbp_get_num_free_bufs)
 int dpbp_get_num_free_bufs(struct fsl_mc_io *mc_io,
 			   uint32_t cmd_flags,
 			   uint16_t token,
diff --git a/drivers/bus/fslmc/mc/dpci.c b/drivers/bus/fslmc/mc/dpci.c
index 7e31327afa..303a4dac87 100644
--- a/drivers/bus/fslmc/mc/dpci.c
+++ b/drivers/bus/fslmc/mc/dpci.c
@@ -315,6 +315,7 @@ int dpci_get_attributes(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpci_set_rx_queue)
 int dpci_set_rx_queue(struct fsl_mc_io *mc_io,
 		      uint32_t cmd_flags,
 		      uint16_t token,
@@ -477,6 +478,7 @@ int dpci_get_api_version(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpci_set_opr)
 int dpci_set_opr(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token,
@@ -515,6 +517,7 @@ int dpci_set_opr(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpci_get_opr)
 int dpci_get_opr(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token,
diff --git a/drivers/bus/fslmc/mc/dpcon.c b/drivers/bus/fslmc/mc/dpcon.c
index 2c46638dcb..4896ed4c66 100644
--- a/drivers/bus/fslmc/mc/dpcon.c
+++ b/drivers/bus/fslmc/mc/dpcon.c
@@ -26,6 +26,7 @@
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpcon_open)
 int dpcon_open(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       int dpcon_id,
@@ -64,6 +65,7 @@ int dpcon_open(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpcon_close)
 int dpcon_close(struct fsl_mc_io *mc_io,
 		uint32_t cmd_flags,
 		uint16_t token)
@@ -164,6 +166,7 @@ int dpcon_destroy(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpcon_enable)
 int dpcon_enable(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token)
@@ -187,6 +190,7 @@ int dpcon_enable(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpcon_disable)
 int dpcon_disable(struct fsl_mc_io *mc_io,
 		  uint32_t cmd_flags,
 		  uint16_t token)
@@ -245,6 +249,7 @@ int dpcon_is_enabled(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpcon_reset)
 int dpcon_reset(struct fsl_mc_io *mc_io,
 		uint32_t cmd_flags,
 		uint16_t token)
@@ -268,6 +273,7 @@ int dpcon_reset(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpcon_get_attributes)
 int dpcon_get_attributes(struct fsl_mc_io *mc_io,
 			 uint32_t cmd_flags,
 			 uint16_t token,
diff --git a/drivers/bus/fslmc/mc/dpdmai.c b/drivers/bus/fslmc/mc/dpdmai.c
index 9c2f3bf9d5..a1709b45e9 100644
--- a/drivers/bus/fslmc/mc/dpdmai.c
+++ b/drivers/bus/fslmc/mc/dpdmai.c
@@ -24,6 +24,7 @@
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpdmai_open)
 int dpdmai_open(struct fsl_mc_io *mc_io,
 		uint32_t cmd_flags,
 		int dpdmai_id,
@@ -62,6 +63,7 @@ int dpdmai_open(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpdmai_close)
 int dpdmai_close(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token)
@@ -171,6 +173,7 @@ int dpdmai_destroy(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpdmai_enable)
 int dpdmai_enable(struct fsl_mc_io *mc_io,
 		  uint32_t cmd_flags,
 		  uint16_t token)
@@ -194,6 +197,7 @@ int dpdmai_enable(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpdmai_disable)
 int dpdmai_disable(struct fsl_mc_io *mc_io,
 		   uint32_t cmd_flags,
 		   uint16_t token)
@@ -276,6 +280,7 @@ int dpdmai_reset(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpdmai_get_attributes)
 int dpdmai_get_attributes(struct fsl_mc_io *mc_io,
 			  uint32_t cmd_flags,
 			  uint16_t token,
@@ -320,6 +325,7 @@ int dpdmai_get_attributes(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpdmai_set_rx_queue)
 int dpdmai_set_rx_queue(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
@@ -362,6 +368,7 @@ int dpdmai_set_rx_queue(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpdmai_get_rx_queue)
 int dpdmai_get_rx_queue(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
@@ -412,6 +419,7 @@ int dpdmai_get_rx_queue(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpdmai_get_tx_queue)
 int dpdmai_get_tx_queue(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
diff --git a/drivers/bus/fslmc/mc/dpio.c b/drivers/bus/fslmc/mc/dpio.c
index 97c08fa713..c9c3cd1b62 100644
--- a/drivers/bus/fslmc/mc/dpio.c
+++ b/drivers/bus/fslmc/mc/dpio.c
@@ -26,6 +26,7 @@
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpio_open)
 int dpio_open(struct fsl_mc_io *mc_io,
 	      uint32_t cmd_flags,
 	      int dpio_id,
@@ -61,6 +62,7 @@ int dpio_open(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpio_close)
 int dpio_close(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       uint16_t token)
@@ -173,6 +175,7 @@ int dpio_destroy(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpio_enable)
 int dpio_enable(struct fsl_mc_io *mc_io,
 		uint32_t cmd_flags,
 		uint16_t token)
@@ -196,6 +199,7 @@ int dpio_enable(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpio_disable)
 int dpio_disable(struct fsl_mc_io *mc_io,
 		 uint32_t cmd_flags,
 		 uint16_t token)
@@ -253,6 +257,7 @@ int dpio_is_enabled(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpio_reset)
 int dpio_reset(struct fsl_mc_io *mc_io,
 	       uint32_t cmd_flags,
 	       uint16_t token)
@@ -277,6 +282,7 @@ int dpio_reset(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpio_get_attributes)
 int dpio_get_attributes(struct fsl_mc_io *mc_io,
 			uint32_t cmd_flags,
 			uint16_t token,
@@ -322,6 +328,7 @@ int dpio_get_attributes(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpio_set_stashing_destination)
 int dpio_set_stashing_destination(struct fsl_mc_io *mc_io,
 				  uint32_t cmd_flags,
 				  uint16_t token,
@@ -350,6 +357,7 @@ int dpio_set_stashing_destination(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpio_get_stashing_destination)
 int dpio_get_stashing_destination(struct fsl_mc_io *mc_io,
 				  uint32_t cmd_flags,
 				  uint16_t token,
@@ -386,6 +394,7 @@ int dpio_get_stashing_destination(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpio_set_stashing_destination_by_core_id)
 int dpio_set_stashing_destination_by_core_id(struct fsl_mc_io *mc_io,
 					uint32_t cmd_flags,
 					uint16_t token,
@@ -414,6 +423,7 @@ int dpio_set_stashing_destination_by_core_id(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpio_set_stashing_destination_source)
 int dpio_set_stashing_destination_source(struct fsl_mc_io *mc_io,
 				  uint32_t cmd_flags,
 				  uint16_t token,
@@ -442,6 +452,7 @@ int dpio_set_stashing_destination_source(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpio_get_stashing_destination_source)
 int dpio_get_stashing_destination_source(struct fsl_mc_io *mc_io,
 				  uint32_t cmd_flags,
 				  uint16_t token,
@@ -478,6 +489,7 @@ int dpio_get_stashing_destination_source(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpio_add_static_dequeue_channel)
 int dpio_add_static_dequeue_channel(struct fsl_mc_io *mc_io,
 				    uint32_t cmd_flags,
 				    uint16_t token,
@@ -517,6 +529,7 @@ int dpio_add_static_dequeue_channel(struct fsl_mc_io *mc_io,
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpio_remove_static_dequeue_channel)
 int dpio_remove_static_dequeue_channel(struct fsl_mc_io *mc_io,
 				       uint32_t cmd_flags,
 				       uint16_t token,
diff --git a/drivers/bus/fslmc/mc/dpmng.c b/drivers/bus/fslmc/mc/dpmng.c
index 277080876d..ba662a8de5 100644
--- a/drivers/bus/fslmc/mc/dpmng.c
+++ b/drivers/bus/fslmc/mc/dpmng.c
@@ -18,6 +18,7 @@
  *
  * Return:	'0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mc_get_version)
 int mc_get_version(struct fsl_mc_io *mc_io,
 		   uint32_t cmd_flags,
 		   struct mc_version *mc_ver_info)
@@ -57,6 +58,7 @@ int mc_get_version(struct fsl_mc_io *mc_io,
  *
  * Return:     '0' on Success; Error code otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mc_get_soc_version)
 int mc_get_soc_version(struct fsl_mc_io *mc_io,
 		       uint32_t cmd_flags,
 		       struct mc_soc_version *mc_platform_info)
diff --git a/drivers/bus/fslmc/mc/mc_sys.c b/drivers/bus/fslmc/mc/mc_sys.c
index 76fdcd5c8a..63bd25bc4f 100644
--- a/drivers/bus/fslmc/mc/mc_sys.c
+++ b/drivers/bus/fslmc/mc/mc_sys.c
@@ -52,6 +52,7 @@ static int mc_status_to_error(enum mc_cmd_status status)
 	return -EINVAL;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mc_send_command)
 int mc_send_command(struct fsl_mc_io *mc_io, struct mc_command *cmd)
 {
 	enum mc_cmd_status status;
diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_dpbp.c b/drivers/bus/fslmc/portal/dpaa2_hw_dpbp.c
index 0ca3b2b2e4..29c4151169 100644
--- a/drivers/bus/fslmc/portal/dpaa2_hw_dpbp.c
+++ b/drivers/bus/fslmc/portal/dpaa2_hw_dpbp.c
@@ -95,6 +95,7 @@ dpaa2_create_dpbp_device(int vdev_fd __rte_unused,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa2_alloc_dpbp_dev)
 struct dpaa2_dpbp_dev *dpaa2_alloc_dpbp_dev(void)
 {
 	struct dpaa2_dpbp_dev *dpbp_dev = NULL;
@@ -108,6 +109,7 @@ struct dpaa2_dpbp_dev *dpaa2_alloc_dpbp_dev(void)
 	return dpbp_dev;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa2_free_dpbp_dev)
 void dpaa2_free_dpbp_dev(struct dpaa2_dpbp_dev *dpbp)
 {
 	struct dpaa2_dpbp_dev *dpbp_dev = NULL;
@@ -121,6 +123,7 @@ void dpaa2_free_dpbp_dev(struct dpaa2_dpbp_dev *dpbp)
 	}
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa2_dpbp_supported)
 int dpaa2_dpbp_supported(void)
 {
 	if (TAILQ_EMPTY(&dpbp_dev_list))
diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_dpci.c b/drivers/bus/fslmc/portal/dpaa2_hw_dpci.c
index 0ea859f887..2224bd326c 100644
--- a/drivers/bus/fslmc/portal/dpaa2_hw_dpci.c
+++ b/drivers/bus/fslmc/portal/dpaa2_hw_dpci.c
@@ -151,6 +151,7 @@ rte_dpaa2_create_dpci_device(int vdev_fd __rte_unused,
 	return ret;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_dpaa2_alloc_dpci_dev)
 struct dpaa2_dpci_dev *rte_dpaa2_alloc_dpci_dev(void)
 {
 	struct dpaa2_dpci_dev *dpci_dev = NULL;
@@ -164,6 +165,7 @@ struct dpaa2_dpci_dev *rte_dpaa2_alloc_dpci_dev(void)
 	return dpci_dev;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_dpaa2_free_dpci_dev)
 void rte_dpaa2_free_dpci_dev(struct dpaa2_dpci_dev *dpci)
 {
 	struct dpaa2_dpci_dev *dpci_dev = NULL;
diff --git a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c
index 2dfcf7a498..dc19143d6e 100644
--- a/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c
+++ b/drivers/bus/fslmc/portal/dpaa2_hw_dpio.c
@@ -40,9 +40,12 @@
 
 #define NUM_HOST_CPUS RTE_MAX_LCORE
 
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa2_io_portal)
 struct dpaa2_io_portal_t dpaa2_io_portal[RTE_MAX_LCORE];
+RTE_EXPORT_INTERNAL_SYMBOL(per_lcore__dpaa2_io)
 RTE_DEFINE_PER_LCORE(struct dpaa2_io_portal_t, _dpaa2_io);
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_global_active_dqs_list)
 struct swp_active_dqs rte_global_active_dqs_list[NUM_MAX_SWP];
 
 TAILQ_HEAD(dpio_dev_list, dpaa2_dpio_dev);
@@ -51,11 +54,14 @@ static struct dpio_dev_list dpio_dev_list
 static uint32_t io_space_count;
 
 /* Variable to store DPAA2 platform type */
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa2_svr_family)
 uint32_t dpaa2_svr_family;
 
 /* Variable to store DPAA2 DQRR size */
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa2_dqrr_size)
 uint8_t dpaa2_dqrr_size;
 /* Variable to store DPAA2 EQCR size */
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa2_eqcr_size)
 uint8_t dpaa2_eqcr_size;
 
 /* Variable to hold the portal_key, once created.*/
@@ -325,6 +331,7 @@ static struct dpaa2_dpio_dev *dpaa2_get_qbman_swp(void)
 	return dpio_dev;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa2_affine_qbman_swp)
 int
 dpaa2_affine_qbman_swp(void)
 {
@@ -346,6 +353,7 @@ dpaa2_affine_qbman_swp(void)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa2_affine_qbman_ethrx_swp)
 int
 dpaa2_affine_qbman_ethrx_swp(void)
 {
@@ -606,6 +614,7 @@ dpaa2_create_dpio_device(int vdev_fd,
 	return -1;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa2_free_dq_storage)
 void
 dpaa2_free_dq_storage(struct queue_storage_info_t *q_storage)
 {
@@ -617,6 +626,7 @@ dpaa2_free_dq_storage(struct queue_storage_info_t *q_storage)
 	}
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa2_alloc_dq_storage)
 int
 dpaa2_alloc_dq_storage(struct queue_storage_info_t *q_storage)
 {
@@ -639,6 +649,7 @@ dpaa2_alloc_dq_storage(struct queue_storage_info_t *q_storage)
 	return -1;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa2_free_eq_descriptors)
 uint32_t
 dpaa2_free_eq_descriptors(void)
 {
diff --git a/drivers/bus/fslmc/qbman/qbman_debug.c b/drivers/bus/fslmc/qbman/qbman_debug.c
index 0e471ec3fd..c4c646bf55 100644
--- a/drivers/bus/fslmc/qbman/qbman_debug.c
+++ b/drivers/bus/fslmc/qbman/qbman_debug.c
@@ -325,6 +325,7 @@ uint16_t qbman_fq_attr_get_opridsz(struct qbman_fq_query_rslt *r)
 	return r->opridsz;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_fq_query_state)
 int qbman_fq_query_state(struct qbman_swp *s, uint32_t fqid,
 			 struct qbman_fq_query_np_rslt *r)
 {
@@ -382,6 +383,7 @@ int qbman_fq_state_overflow_error(const struct qbman_fq_query_np_rslt *r)
 	return (int)((r->st1 & 0x40) >> 6);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_fq_state_frame_count)
 uint32_t qbman_fq_state_frame_count(const struct qbman_fq_query_np_rslt *r)
 {
 	return (r->frm_cnt & 0x00FFFFFF);
diff --git a/drivers/bus/fslmc/qbman/qbman_portal.c b/drivers/bus/fslmc/qbman/qbman_portal.c
index 5d0cedc136..09526bd2ad 100644
--- a/drivers/bus/fslmc/qbman/qbman_portal.c
+++ b/drivers/bus/fslmc/qbman/qbman_portal.c
@@ -405,6 +405,7 @@ uint32_t qbman_swp_interrupt_read_status(struct qbman_swp *p)
 	return qbman_cinh_read(&p->sys, QBMAN_CINH_SWP_ISR);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_swp_interrupt_clear_status)
 void qbman_swp_interrupt_clear_status(struct qbman_swp *p, uint32_t mask)
 {
 	qbman_cinh_write(&p->sys, QBMAN_CINH_SWP_ISR, mask);
@@ -606,11 +607,13 @@ enum qb_enqueue_commands {
 #define QB_ENQUEUE_CMD_NLIS_SHIFT            14
 #define QB_ENQUEUE_CMD_IS_NESN_SHIFT         15
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_eq_desc_clear)
 void qbman_eq_desc_clear(struct qbman_eq_desc *d)
 {
 	memset(d, 0, sizeof(*d));
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_eq_desc_set_no_orp)
 void qbman_eq_desc_set_no_orp(struct qbman_eq_desc *d, int respond_success)
 {
 	d->eq.verb &= ~(1 << QB_ENQUEUE_CMD_ORP_ENABLE_SHIFT);
@@ -620,6 +623,7 @@ void qbman_eq_desc_set_no_orp(struct qbman_eq_desc *d, int respond_success)
 		d->eq.verb |= enqueue_rejects_to_fq;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_eq_desc_set_orp)
 void qbman_eq_desc_set_orp(struct qbman_eq_desc *d, int respond_success,
 			   uint16_t opr_id, uint16_t seqnum, int incomplete)
 {
@@ -659,6 +663,7 @@ void qbman_eq_desc_set_orp_nesn(struct qbman_eq_desc *d, uint16_t opr_id,
 	d->eq.seqnum |= 1 << QB_ENQUEUE_CMD_IS_NESN_SHIFT;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_eq_desc_set_response)
 void qbman_eq_desc_set_response(struct qbman_eq_desc *d,
 				dma_addr_t storage_phys,
 				int stash)
@@ -667,17 +672,20 @@ void qbman_eq_desc_set_response(struct qbman_eq_desc *d,
 	d->eq.wae = stash;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_eq_desc_set_token)
 void qbman_eq_desc_set_token(struct qbman_eq_desc *d, uint8_t token)
 {
 	d->eq.rspid = token;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_eq_desc_set_fq)
 void qbman_eq_desc_set_fq(struct qbman_eq_desc *d, uint32_t fqid)
 {
 	d->eq.verb &= ~(1 << QB_ENQUEUE_CMD_TARGET_TYPE_SHIFT);
 	d->eq.tgtid = fqid;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_eq_desc_set_qd)
 void qbman_eq_desc_set_qd(struct qbman_eq_desc *d, uint32_t qdid,
 			  uint16_t qd_bin, uint8_t qd_prio)
 {
@@ -695,6 +703,7 @@ void qbman_eq_desc_set_eqdi(struct qbman_eq_desc *d, int enable)
 		d->eq.verb &= ~(1 << QB_ENQUEUE_CMD_IRQ_ON_DISPATCH_SHIFT);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_eq_desc_set_dca)
 void qbman_eq_desc_set_dca(struct qbman_eq_desc *d, int enable,
 			   uint8_t dqrr_idx, int park)
 {
@@ -1216,6 +1225,7 @@ static int qbman_swp_enqueue_multiple_mem_back(struct qbman_swp *s,
 	return num_enqueued;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_swp_enqueue_multiple)
 int qbman_swp_enqueue_multiple(struct qbman_swp *s,
 				      const struct qbman_eq_desc *d,
 				      const struct qbman_fd *fd,
@@ -1490,6 +1500,7 @@ static int qbman_swp_enqueue_multiple_fd_mem_back(struct qbman_swp *s,
 	return num_enqueued;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_swp_enqueue_multiple_fd)
 int qbman_swp_enqueue_multiple_fd(struct qbman_swp *s,
 					 const struct qbman_eq_desc *d,
 					 struct qbman_fd **fd,
@@ -1745,6 +1756,7 @@ static int qbman_swp_enqueue_multiple_desc_mem_back(struct qbman_swp *s,
 
 	return num_enqueued;
 }
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_swp_enqueue_multiple_desc)
 int qbman_swp_enqueue_multiple_desc(struct qbman_swp *s,
 					   const struct qbman_eq_desc *d,
 					   const struct qbman_fd *fd,
@@ -1771,6 +1783,7 @@ void qbman_swp_push_get(struct qbman_swp *s, uint8_t channel_idx, int *enabled)
 	*enabled = src | (1 << channel_idx);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_swp_push_set)
 void qbman_swp_push_set(struct qbman_swp *s, uint8_t channel_idx, int enable)
 {
 	uint16_t dqsrc;
@@ -1808,11 +1821,13 @@ enum qb_pull_dt_e {
 	qb_pull_dt_framequeue
 };
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_pull_desc_clear)
 void qbman_pull_desc_clear(struct qbman_pull_desc *d)
 {
 	memset(d, 0, sizeof(*d));
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_pull_desc_set_storage)
 void qbman_pull_desc_set_storage(struct qbman_pull_desc *d,
 				 struct qbman_result *storage,
 				 dma_addr_t storage_phys,
@@ -1833,6 +1848,7 @@ void qbman_pull_desc_set_storage(struct qbman_pull_desc *d,
 	d->pull.rsp_addr = storage_phys;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_pull_desc_set_numframes)
 void qbman_pull_desc_set_numframes(struct qbman_pull_desc *d,
 				   uint8_t numframes)
 {
@@ -1844,6 +1860,7 @@ void qbman_pull_desc_set_token(struct qbman_pull_desc *d, uint8_t token)
 	d->pull.tok = token;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_pull_desc_set_fq)
 void qbman_pull_desc_set_fq(struct qbman_pull_desc *d, uint32_t fqid)
 {
 	d->pull.verb |= 1 << QB_VDQCR_VERB_DCT_SHIFT;
@@ -1959,6 +1976,7 @@ static int qbman_swp_pull_mem_back(struct qbman_swp *s,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_swp_pull)
 int qbman_swp_pull(struct qbman_swp *s, struct qbman_pull_desc *d)
 {
 	if (!s->stash_off)
@@ -1986,6 +2004,7 @@ int qbman_swp_pull(struct qbman_swp *s, struct qbman_pull_desc *d)
 
 #include <rte_prefetch.h>
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_swp_prefetch_dqrr_next)
 void qbman_swp_prefetch_dqrr_next(struct qbman_swp *s)
 {
 	const struct qbman_result *p;
@@ -1999,6 +2018,7 @@ void qbman_swp_prefetch_dqrr_next(struct qbman_swp *s)
  * only once, so repeated calls can return a sequence of DQRR entries, without
  * requiring they be consumed immediately or in any particular order.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_swp_dqrr_next)
 const struct qbman_result *qbman_swp_dqrr_next(struct qbman_swp *s)
 {
 	if (!s->stash_off)
@@ -2202,6 +2222,7 @@ const struct qbman_result *qbman_swp_dqrr_next_mem_back(struct qbman_swp *s)
 }
 
 /* Consume DQRR entries previously returned from qbman_swp_dqrr_next(). */
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_swp_dqrr_consume)
 void qbman_swp_dqrr_consume(struct qbman_swp *s,
 			    const struct qbman_result *dq)
 {
@@ -2210,6 +2231,7 @@ void qbman_swp_dqrr_consume(struct qbman_swp *s,
 }
 
 /* Consume DQRR entries previously returned from qbman_swp_dqrr_next(). */
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_swp_dqrr_idx_consume)
 void qbman_swp_dqrr_idx_consume(struct qbman_swp *s,
 			    uint8_t dqrr_index)
 {
@@ -2220,6 +2242,7 @@ void qbman_swp_dqrr_idx_consume(struct qbman_swp *s,
 /* Polling user-provided storage */
 /*********************************/
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_result_has_new_result)
 int qbman_result_has_new_result(struct qbman_swp *s,
 				struct qbman_result *dq)
 {
@@ -2248,6 +2271,7 @@ int qbman_result_has_new_result(struct qbman_swp *s,
 	return 1;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_check_new_result)
 int qbman_check_new_result(struct qbman_result *dq)
 {
 	if (dq->dq.tok == 0)
@@ -2263,6 +2287,7 @@ int qbman_check_new_result(struct qbman_result *dq)
 	return 1;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_check_command_complete)
 int qbman_check_command_complete(struct qbman_result *dq)
 {
 	struct qbman_swp *s;
@@ -2350,16 +2375,19 @@ int qbman_result_is_FQPN(const struct qbman_result *dq)
 
 /* These APIs assume qbman_result_is_DQ() is TRUE */
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_result_DQ_flags)
 uint8_t qbman_result_DQ_flags(const struct qbman_result *dq)
 {
 	return dq->dq.stat;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_result_DQ_seqnum)
 uint16_t qbman_result_DQ_seqnum(const struct qbman_result *dq)
 {
 	return dq->dq.seqnum;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_result_DQ_odpid)
 uint16_t qbman_result_DQ_odpid(const struct qbman_result *dq)
 {
 	return dq->dq.oprid;
@@ -2380,11 +2408,13 @@ uint32_t qbman_result_DQ_frame_count(const struct qbman_result *dq)
 	return dq->dq.fq_frm_cnt;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_result_DQ_fqd_ctx)
 uint64_t qbman_result_DQ_fqd_ctx(const struct qbman_result *dq)
 {
 	return dq->dq.fqd_ctx;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_result_DQ_fd)
 const struct qbman_fd *qbman_result_DQ_fd(const struct qbman_result *dq)
 {
 	return (const struct qbman_fd *)&dq->dq.fd[0];
@@ -2393,6 +2423,7 @@ const struct qbman_fd *qbman_result_DQ_fd(const struct qbman_result *dq)
 /**************************************/
 /* Parsing state-change notifications */
 /**************************************/
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_result_SCN_state)
 uint8_t qbman_result_SCN_state(const struct qbman_result *scn)
 {
 	return scn->scn.state;
@@ -2452,21 +2483,25 @@ uint64_t qbman_result_cgcu_icnt(const struct qbman_result *scn)
 /********************/
 /* Parsing EQ RESP  */
 /********************/
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_result_eqresp_fd)
 struct qbman_fd *qbman_result_eqresp_fd(struct qbman_result *eqresp)
 {
 	return (struct qbman_fd *)&eqresp->eq_resp.fd[0];
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_result_eqresp_set_rspid)
 void qbman_result_eqresp_set_rspid(struct qbman_result *eqresp, uint8_t val)
 {
 	eqresp->eq_resp.rspid = val;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_result_eqresp_rspid)
 uint8_t qbman_result_eqresp_rspid(struct qbman_result *eqresp)
 {
 	return eqresp->eq_resp.rspid;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_result_eqresp_rc)
 uint8_t qbman_result_eqresp_rc(struct qbman_result *eqresp)
 {
 	if (eqresp->eq_resp.rc == 0xE)
@@ -2481,12 +2516,14 @@ uint8_t qbman_result_eqresp_rc(struct qbman_result *eqresp)
 #define QB_BR_RC_VALID_SHIFT  5
 #define QB_BR_RCDI_SHIFT      6
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_release_desc_clear)
 void qbman_release_desc_clear(struct qbman_release_desc *d)
 {
 	memset(d, 0, sizeof(*d));
 	d->br.verb = 1 << QB_BR_RC_VALID_SHIFT;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_release_desc_set_bpid)
 void qbman_release_desc_set_bpid(struct qbman_release_desc *d, uint16_t bpid)
 {
 	d->br.bpid = bpid;
@@ -2601,6 +2638,7 @@ static int qbman_swp_release_mem_back(struct qbman_swp *s,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_swp_release)
 int qbman_swp_release(struct qbman_swp *s,
 			     const struct qbman_release_desc *d,
 			     const uint64_t *buffers,
@@ -2727,6 +2765,7 @@ static int qbman_swp_acquire_cinh_direct(struct qbman_swp *s, uint16_t bpid,
 	return num;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_swp_acquire)
 int qbman_swp_acquire(struct qbman_swp *s, uint16_t bpid, uint64_t *buffers,
 		      unsigned int num_buffers)
 {
@@ -2910,11 +2949,13 @@ int qbman_swp_CDAN_set_context_enable(struct qbman_swp *s, uint16_t channelid,
 				  1, ctx);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_get_dqrr_idx)
 uint8_t qbman_get_dqrr_idx(const struct qbman_result *dqrr)
 {
 	return QBMAN_IDX_FROM_DQRR(dqrr);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(qbman_get_dqrr_from_idx)
 struct qbman_result *qbman_get_dqrr_from_idx(struct qbman_swp *s, uint8_t idx)
 {
 	struct qbman_result *dq;
diff --git a/drivers/bus/ifpga/ifpga_bus.c b/drivers/bus/ifpga/ifpga_bus.c
index 11b31eee4f..03cd534a5c 100644
--- a/drivers/bus/ifpga/ifpga_bus.c
+++ b/drivers/bus/ifpga/ifpga_bus.c
@@ -44,6 +44,7 @@ static TAILQ_HEAD(, rte_afu_driver) ifpga_afu_drv_list =
 
 
 /* register a ifpga bus based driver */
+RTE_EXPORT_INTERNAL_SYMBOL(rte_ifpga_driver_register)
 void rte_ifpga_driver_register(struct rte_afu_driver *driver)
 {
 	RTE_VERIFY(driver);
@@ -52,6 +53,7 @@ void rte_ifpga_driver_register(struct rte_afu_driver *driver)
 }
 
 /* un-register a fpga bus based driver */
+RTE_EXPORT_INTERNAL_SYMBOL(rte_ifpga_driver_unregister)
 void rte_ifpga_driver_unregister(struct rte_afu_driver *driver)
 {
 	TAILQ_REMOVE(&ifpga_afu_drv_list, driver, next);
@@ -71,6 +73,7 @@ ifpga_find_afu_dev(const struct rte_rawdev *rdev,
 	return NULL;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_ifpga_find_afu_by_name)
 struct rte_afu_device *
 rte_ifpga_find_afu_by_name(const char *name)
 {
diff --git a/drivers/bus/pci/bsd/pci.c b/drivers/bus/pci/bsd/pci.c
index 2f88252418..e962013686 100644
--- a/drivers/bus/pci/bsd/pci.c
+++ b/drivers/bus/pci/bsd/pci.c
@@ -48,6 +48,7 @@
  */
 
 /* Map pci device */
+RTE_EXPORT_SYMBOL(rte_pci_map_device)
 int
 rte_pci_map_device(struct rte_pci_device *dev)
 {
@@ -69,6 +70,7 @@ rte_pci_map_device(struct rte_pci_device *dev)
 }
 
 /* Unmap pci device */
+RTE_EXPORT_SYMBOL(rte_pci_unmap_device)
 void
 rte_pci_unmap_device(struct rte_pci_device *dev)
 {
@@ -395,6 +397,7 @@ pci_device_iova_mode(const struct rte_pci_driver *pdrv __rte_unused,
 }
 
 /* Read PCI config space. */
+RTE_EXPORT_SYMBOL(rte_pci_read_config)
 int rte_pci_read_config(const struct rte_pci_device *dev,
 		void *buf, size_t len, off_t offset)
 {
@@ -441,6 +444,7 @@ int rte_pci_read_config(const struct rte_pci_device *dev,
 }
 
 /* Write PCI config space. */
+RTE_EXPORT_SYMBOL(rte_pci_write_config)
 int rte_pci_write_config(const struct rte_pci_device *dev,
 		const void *buf, size_t len, off_t offset)
 {
@@ -484,6 +488,7 @@ int rte_pci_write_config(const struct rte_pci_device *dev,
 }
 
 /* Read PCI MMIO space. */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pci_mmio_read, 23.07)
 int rte_pci_mmio_read(const struct rte_pci_device *dev, int bar,
 		      void *buf, size_t len, off_t offset)
 {
@@ -495,6 +500,7 @@ int rte_pci_mmio_read(const struct rte_pci_device *dev, int bar,
 }
 
 /* Write PCI MMIO space. */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pci_mmio_write, 23.07)
 int rte_pci_mmio_write(const struct rte_pci_device *dev, int bar,
 		       const void *buf, size_t len, off_t offset)
 {
@@ -505,6 +511,7 @@ int rte_pci_mmio_write(const struct rte_pci_device *dev, int bar,
 	return len;
 }
 
+RTE_EXPORT_SYMBOL(rte_pci_ioport_map)
 int
 rte_pci_ioport_map(struct rte_pci_device *dev, int bar,
 		struct rte_pci_ioport *p)
@@ -566,6 +573,7 @@ pci_uio_ioport_read(struct rte_pci_ioport *p,
 #endif
 }
 
+RTE_EXPORT_SYMBOL(rte_pci_ioport_read)
 void
 rte_pci_ioport_read(struct rte_pci_ioport *p,
 		void *data, size_t len, off_t offset)
@@ -608,6 +616,7 @@ pci_uio_ioport_write(struct rte_pci_ioport *p,
 #endif
 }
 
+RTE_EXPORT_SYMBOL(rte_pci_ioport_write)
 void
 rte_pci_ioport_write(struct rte_pci_ioport *p,
 		const void *data, size_t len, off_t offset)
@@ -621,6 +630,7 @@ rte_pci_ioport_write(struct rte_pci_ioport *p,
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_pci_ioport_unmap)
 int
 rte_pci_ioport_unmap(struct rte_pci_ioport *p)
 {
diff --git a/drivers/bus/pci/linux/pci.c b/drivers/bus/pci/linux/pci.c
index 9056035b33..b820c5820a 100644
--- a/drivers/bus/pci/linux/pci.c
+++ b/drivers/bus/pci/linux/pci.c
@@ -54,6 +54,7 @@ pci_get_kernel_driver_by_path(const char *filename, char *dri_name,
 }
 
 /* Map pci device */
+RTE_EXPORT_SYMBOL(rte_pci_map_device)
 int
 rte_pci_map_device(struct rte_pci_device *dev)
 {
@@ -84,6 +85,7 @@ rte_pci_map_device(struct rte_pci_device *dev)
 }
 
 /* Unmap pci device */
+RTE_EXPORT_SYMBOL(rte_pci_unmap_device)
 void
 rte_pci_unmap_device(struct rte_pci_device *dev)
 {
@@ -627,6 +629,7 @@ pci_device_iova_mode(const struct rte_pci_driver *pdrv,
 }
 
 /* Read PCI config space. */
+RTE_EXPORT_SYMBOL(rte_pci_read_config)
 int rte_pci_read_config(const struct rte_pci_device *device,
 		void *buf, size_t len, off_t offset)
 {
@@ -650,6 +653,7 @@ int rte_pci_read_config(const struct rte_pci_device *device,
 }
 
 /* Write PCI config space. */
+RTE_EXPORT_SYMBOL(rte_pci_write_config)
 int rte_pci_write_config(const struct rte_pci_device *device,
 		const void *buf, size_t len, off_t offset)
 {
@@ -673,6 +677,7 @@ int rte_pci_write_config(const struct rte_pci_device *device,
 }
 
 /* Read PCI MMIO space. */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pci_mmio_read, 23.07)
 int rte_pci_mmio_read(const struct rte_pci_device *device, int bar,
 		void *buf, size_t len, off_t offset)
 {
@@ -695,6 +700,7 @@ int rte_pci_mmio_read(const struct rte_pci_device *device, int bar,
 }
 
 /* Write PCI MMIO space. */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pci_mmio_write, 23.07)
 int rte_pci_mmio_write(const struct rte_pci_device *device, int bar,
 		const void *buf, size_t len, off_t offset)
 {
@@ -716,6 +722,7 @@ int rte_pci_mmio_write(const struct rte_pci_device *device, int bar,
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_pci_ioport_map)
 int
 rte_pci_ioport_map(struct rte_pci_device *dev, int bar,
 		struct rte_pci_ioport *p)
@@ -743,6 +750,7 @@ rte_pci_ioport_map(struct rte_pci_device *dev, int bar,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_pci_ioport_read)
 void
 rte_pci_ioport_read(struct rte_pci_ioport *p,
 		void *data, size_t len, off_t offset)
@@ -762,6 +770,7 @@ rte_pci_ioport_read(struct rte_pci_ioport *p,
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_pci_ioport_write)
 void
 rte_pci_ioport_write(struct rte_pci_ioport *p,
 		const void *data, size_t len, off_t offset)
@@ -781,6 +790,7 @@ rte_pci_ioport_write(struct rte_pci_ioport *p,
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_pci_ioport_unmap)
 int
 rte_pci_ioport_unmap(struct rte_pci_ioport *p)
 {
diff --git a/drivers/bus/pci/pci_common.c b/drivers/bus/pci/pci_common.c
index 70faae4e44..f9fe90195b 100644
--- a/drivers/bus/pci/pci_common.c
+++ b/drivers/bus/pci/pci_common.c
@@ -32,6 +32,7 @@
 
 #define SYSFS_PCI_DEVICES "/sys/bus/pci/devices"
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_pci_get_sysfs_path)
 const char *rte_pci_get_sysfs_path(void)
 {
 	const char *path = NULL;
@@ -476,6 +477,7 @@ pci_dump_one_device(FILE *f, struct rte_pci_device *dev)
 }
 
 /* dump devices on the bus */
+RTE_EXPORT_SYMBOL(rte_pci_dump)
 void
 rte_pci_dump(FILE *f)
 {
@@ -500,6 +502,7 @@ pci_parse(const char *name, void *addr)
 }
 
 /* register a driver */
+RTE_EXPORT_INTERNAL_SYMBOL(rte_pci_register)
 void
 rte_pci_register(struct rte_pci_driver *driver)
 {
@@ -507,6 +510,7 @@ rte_pci_register(struct rte_pci_driver *driver)
 }
 
 /* unregister a driver */
+RTE_EXPORT_INTERNAL_SYMBOL(rte_pci_unregister)
 void
 rte_pci_unregister(struct rte_pci_driver *driver)
 {
@@ -794,6 +798,7 @@ rte_pci_get_iommu_class(void)
 	return iova_mode;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pci_has_capability_list, 23.11)
 bool
 rte_pci_has_capability_list(const struct rte_pci_device *dev)
 {
@@ -805,12 +810,14 @@ rte_pci_has_capability_list(const struct rte_pci_device *dev)
 	return (status & RTE_PCI_STATUS_CAP_LIST) != 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pci_find_capability, 23.11)
 off_t
 rte_pci_find_capability(const struct rte_pci_device *dev, uint8_t cap)
 {
 	return rte_pci_find_next_capability(dev, cap, 0);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pci_find_next_capability, 23.11)
 off_t
 rte_pci_find_next_capability(const struct rte_pci_device *dev, uint8_t cap,
 	off_t offset)
@@ -848,6 +855,7 @@ rte_pci_find_next_capability(const struct rte_pci_device *dev, uint8_t cap,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pci_find_ext_capability, 20.11)
 off_t
 rte_pci_find_ext_capability(const struct rte_pci_device *dev, uint32_t cap)
 {
@@ -890,6 +898,7 @@ rte_pci_find_ext_capability(const struct rte_pci_device *dev, uint32_t cap)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pci_set_bus_master, 21.08)
 int
 rte_pci_set_bus_master(const struct rte_pci_device *dev, bool enable)
 {
@@ -918,6 +927,7 @@ rte_pci_set_bus_master(const struct rte_pci_device *dev, bool enable)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_pci_pasid_set_state)
 int
 rte_pci_pasid_set_state(const struct rte_pci_device *dev,
 		off_t offset, bool enable)
diff --git a/drivers/bus/pci/windows/pci.c b/drivers/bus/pci/windows/pci.c
index 36e6f89093..515e652818 100644
--- a/drivers/bus/pci/windows/pci.c
+++ b/drivers/bus/pci/windows/pci.c
@@ -36,6 +36,7 @@ DEFINE_DEVPROPKEY(DEVPKEY_Device_Numa_Node, 0x540b947e, 0x8b40, 0x45bc,
  */
 
 /* Map pci device */
+RTE_EXPORT_SYMBOL(rte_pci_map_device)
 int
 rte_pci_map_device(struct rte_pci_device *dev)
 {
@@ -50,6 +51,7 @@ rte_pci_map_device(struct rte_pci_device *dev)
 }
 
 /* Unmap pci device */
+RTE_EXPORT_SYMBOL(rte_pci_unmap_device)
 void
 rte_pci_unmap_device(struct rte_pci_device *dev __rte_unused)
 {
@@ -61,6 +63,7 @@ rte_pci_unmap_device(struct rte_pci_device *dev __rte_unused)
 }
 
 /* Read PCI config space. */
+RTE_EXPORT_SYMBOL(rte_pci_read_config)
 int
 rte_pci_read_config(const struct rte_pci_device *dev __rte_unused,
 	void *buf __rte_unused, size_t len __rte_unused,
@@ -75,6 +78,7 @@ rte_pci_read_config(const struct rte_pci_device *dev __rte_unused,
 }
 
 /* Write PCI config space. */
+RTE_EXPORT_SYMBOL(rte_pci_write_config)
 int
 rte_pci_write_config(const struct rte_pci_device *dev __rte_unused,
 	const void *buf __rte_unused, size_t len __rte_unused,
@@ -89,6 +93,7 @@ rte_pci_write_config(const struct rte_pci_device *dev __rte_unused,
 }
 
 /* Read PCI MMIO space. */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pci_mmio_read, 23.07)
 int
 rte_pci_mmio_read(const struct rte_pci_device *dev, int bar,
 		      void *buf, size_t len, off_t offset)
@@ -101,6 +106,7 @@ rte_pci_mmio_read(const struct rte_pci_device *dev, int bar,
 }
 
 /* Write PCI MMIO space. */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pci_mmio_write, 23.07)
 int
 rte_pci_mmio_write(const struct rte_pci_device *dev, int bar,
 		       const void *buf, size_t len, off_t offset)
@@ -124,6 +130,7 @@ pci_device_iova_mode(const struct rte_pci_driver *pdrv __rte_unused,
 	return RTE_IOVA_DC;
 }
 
+RTE_EXPORT_SYMBOL(rte_pci_ioport_map)
 int
 rte_pci_ioport_map(struct rte_pci_device *dev __rte_unused,
 	int bar __rte_unused, struct rte_pci_ioport *p __rte_unused)
@@ -137,6 +144,7 @@ rte_pci_ioport_map(struct rte_pci_device *dev __rte_unused,
 }
 
 
+RTE_EXPORT_SYMBOL(rte_pci_ioport_read)
 void
 rte_pci_ioport_read(struct rte_pci_ioport *p __rte_unused,
 	void *data __rte_unused, size_t len __rte_unused,
@@ -149,6 +157,7 @@ rte_pci_ioport_read(struct rte_pci_ioport *p __rte_unused,
 	 */
 }
 
+RTE_EXPORT_SYMBOL(rte_pci_ioport_unmap)
 int
 rte_pci_ioport_unmap(struct rte_pci_ioport *p __rte_unused)
 {
@@ -171,6 +180,7 @@ pci_device_iommu_support_va(const struct rte_pci_device *dev __rte_unused)
 	return false;
 }
 
+RTE_EXPORT_SYMBOL(rte_pci_ioport_write)
 void
 rte_pci_ioport_write(struct rte_pci_ioport *p __rte_unused,
 		const void *data __rte_unused, size_t len __rte_unused,
diff --git a/drivers/bus/platform/platform.c b/drivers/bus/platform/platform.c
index 11892caa24..95b9651af4 100644
--- a/drivers/bus/platform/platform.c
+++ b/drivers/bus/platform/platform.c
@@ -28,12 +28,14 @@
 
 #define PLATFORM_BUS_DEVICES_PATH "/sys/bus/platform/devices"
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_platform_register)
 void
 rte_platform_register(struct rte_platform_driver *pdrv)
 {
 	TAILQ_INSERT_TAIL(&platform_bus.driver_list, pdrv, next);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_platform_unregister)
 void
 rte_platform_unregister(struct rte_platform_driver *pdrv)
 {
diff --git a/drivers/bus/uacce/uacce.c b/drivers/bus/uacce/uacce.c
index 9ca048122d..6b39b0b81d 100644
--- a/drivers/bus/uacce/uacce.c
+++ b/drivers/bus/uacce/uacce.c
@@ -582,6 +582,7 @@ uacce_dev_iterate(const void *start, const char *str,
 	return dev;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_uacce_avail_queues)
 int
 rte_uacce_avail_queues(struct rte_uacce_device *dev)
 {
@@ -595,6 +596,7 @@ rte_uacce_avail_queues(struct rte_uacce_device *dev)
 	return ret;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_uacce_queue_alloc)
 int
 rte_uacce_queue_alloc(struct rte_uacce_device *dev, struct rte_uacce_qcontex *qctx)
 {
@@ -609,6 +611,7 @@ rte_uacce_queue_alloc(struct rte_uacce_device *dev, struct rte_uacce_qcontex *qc
 	return -EIO;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_uacce_queue_free)
 void
 rte_uacce_queue_free(struct rte_uacce_qcontex *qctx)
 {
@@ -618,6 +621,7 @@ rte_uacce_queue_free(struct rte_uacce_qcontex *qctx)
 	qctx->fd = -1;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_uacce_queue_start)
 int
 rte_uacce_queue_start(struct rte_uacce_qcontex *qctx)
 {
@@ -625,6 +629,7 @@ rte_uacce_queue_start(struct rte_uacce_qcontex *qctx)
 	return ioctl(qctx->fd, UACCE_CMD_START_Q);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_uacce_queue_ioctl)
 int
 rte_uacce_queue_ioctl(struct rte_uacce_qcontex *qctx, unsigned long cmd, void *arg)
 {
@@ -634,6 +639,7 @@ rte_uacce_queue_ioctl(struct rte_uacce_qcontex *qctx, unsigned long cmd, void *a
 	return ioctl(qctx->fd, cmd, arg);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_uacce_queue_mmap)
 void *
 rte_uacce_queue_mmap(struct rte_uacce_qcontex *qctx, enum rte_uacce_qfrt qfrt)
 {
@@ -659,6 +665,7 @@ rte_uacce_queue_mmap(struct rte_uacce_qcontex *qctx, enum rte_uacce_qfrt qfrt)
 	return addr;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_uacce_queue_unmap)
 void
 rte_uacce_queue_unmap(struct rte_uacce_qcontex *qctx, enum rte_uacce_qfrt qfrt)
 {
@@ -668,6 +675,7 @@ rte_uacce_queue_unmap(struct rte_uacce_qcontex *qctx, enum rte_uacce_qfrt qfrt)
 	}
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_uacce_register)
 void
 rte_uacce_register(struct rte_uacce_driver *driver)
 {
@@ -675,6 +683,7 @@ rte_uacce_register(struct rte_uacce_driver *driver)
 	driver->bus = &uacce_bus;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_uacce_unregister)
 void
 rte_uacce_unregister(struct rte_uacce_driver *driver)
 {
diff --git a/drivers/bus/vdev/vdev.c b/drivers/bus/vdev/vdev.c
index ec7abe7cda..0a9158d9cf 100644
--- a/drivers/bus/vdev/vdev.c
+++ b/drivers/bus/vdev/vdev.c
@@ -51,6 +51,7 @@ static struct vdev_custom_scans vdev_custom_scans =
 static rte_spinlock_t vdev_custom_scan_lock = RTE_SPINLOCK_INITIALIZER;
 
 /* register a driver */
+RTE_EXPORT_INTERNAL_SYMBOL(rte_vdev_register)
 void
 rte_vdev_register(struct rte_vdev_driver *driver)
 {
@@ -58,12 +59,14 @@ rte_vdev_register(struct rte_vdev_driver *driver)
 }
 
 /* unregister a driver */
+RTE_EXPORT_INTERNAL_SYMBOL(rte_vdev_unregister)
 void
 rte_vdev_unregister(struct rte_vdev_driver *driver)
 {
 	TAILQ_REMOVE(&vdev_driver_list, driver, next);
 }
 
+RTE_EXPORT_SYMBOL(rte_vdev_add_custom_scan)
 int
 rte_vdev_add_custom_scan(rte_vdev_scan_callback callback, void *user_arg)
 {
@@ -92,6 +95,7 @@ rte_vdev_add_custom_scan(rte_vdev_scan_callback callback, void *user_arg)
 	return (custom_scan == NULL) ? -1 : 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vdev_remove_custom_scan)
 int
 rte_vdev_remove_custom_scan(rte_vdev_scan_callback callback, void *user_arg)
 {
@@ -316,6 +320,7 @@ insert_vdev(const char *name, const char *args,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_vdev_init)
 int
 rte_vdev_init(const char *name, const char *args)
 {
@@ -355,6 +360,7 @@ vdev_remove_driver(struct rte_vdev_device *dev)
 	return driver->remove(dev);
 }
 
+RTE_EXPORT_SYMBOL(rte_vdev_uninit)
 int
 rte_vdev_uninit(const char *name)
 {
diff --git a/drivers/bus/vmbus/linux/vmbus_bus.c b/drivers/bus/vmbus/linux/vmbus_bus.c
index 01d8111b85..27cb8da118 100644
--- a/drivers/bus/vmbus/linux/vmbus_bus.c
+++ b/drivers/bus/vmbus/linux/vmbus_bus.c
@@ -164,6 +164,7 @@ static const char *map_names[VMBUS_MAX_RESOURCE] = {
 
 
 /* map the resources of a vmbus device in virtual memory */
+RTE_EXPORT_SYMBOL(rte_vmbus_map_device)
 int
 rte_vmbus_map_device(struct rte_vmbus_device *dev)
 {
@@ -222,6 +223,7 @@ rte_vmbus_map_device(struct rte_vmbus_device *dev)
 	return vmbus_uio_map_resource(dev);
 }
 
+RTE_EXPORT_SYMBOL(rte_vmbus_unmap_device)
 void
 rte_vmbus_unmap_device(struct rte_vmbus_device *dev)
 {
@@ -338,6 +340,7 @@ vmbus_scan_one(const char *name)
 /*
  * Scan the content of the vmbus, and the devices in the devices list
  */
+RTE_EXPORT_SYMBOL(rte_vmbus_scan)
 int
 rte_vmbus_scan(void)
 {
@@ -369,16 +372,19 @@ rte_vmbus_scan(void)
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_vmbus_irq_mask)
 void rte_vmbus_irq_mask(struct rte_vmbus_device *device)
 {
 	vmbus_uio_irq_control(device, 1);
 }
 
+RTE_EXPORT_SYMBOL(rte_vmbus_irq_unmask)
 void rte_vmbus_irq_unmask(struct rte_vmbus_device *device)
 {
 	vmbus_uio_irq_control(device, 0);
 }
 
+RTE_EXPORT_SYMBOL(rte_vmbus_irq_read)
 int rte_vmbus_irq_read(struct rte_vmbus_device *device)
 {
 	return vmbus_uio_irq_read(device);
diff --git a/drivers/bus/vmbus/vmbus_channel.c b/drivers/bus/vmbus/vmbus_channel.c
index 925c2aa081..6e6a53e0ea 100644
--- a/drivers/bus/vmbus/vmbus_channel.c
+++ b/drivers/bus/vmbus/vmbus_channel.c
@@ -47,6 +47,7 @@ vmbus_set_event(const struct vmbus_channel *chan)
 /*
  * Set the wait between when hypervisor examines the trigger.
  */
+RTE_EXPORT_SYMBOL(rte_vmbus_set_latency)
 void
 rte_vmbus_set_latency(const struct rte_vmbus_device *dev,
 		      const struct vmbus_channel *chan,
@@ -76,6 +77,7 @@ rte_vmbus_set_latency(const struct rte_vmbus_device *dev,
  * Since this in userspace, rely on the monitor page.
  * Can't do a hypercall from userspace.
  */
+RTE_EXPORT_SYMBOL(rte_vmbus_chan_signal_tx)
 void
 rte_vmbus_chan_signal_tx(const struct vmbus_channel *chan)
 {
@@ -93,6 +95,7 @@ rte_vmbus_chan_signal_tx(const struct vmbus_channel *chan)
 
 
 /* Do a simple send directly using transmit ring. */
+RTE_EXPORT_SYMBOL(rte_vmbus_chan_send)
 int rte_vmbus_chan_send(struct vmbus_channel *chan, uint16_t type,
 			void *data, uint32_t dlen,
 			uint64_t xactid, uint32_t flags, bool *need_sig)
@@ -136,6 +139,7 @@ int rte_vmbus_chan_send(struct vmbus_channel *chan, uint16_t type,
 }
 
 /* Do a scatter/gather send where the descriptor points to data. */
+RTE_EXPORT_SYMBOL(rte_vmbus_chan_send_sglist)
 int rte_vmbus_chan_send_sglist(struct vmbus_channel *chan,
 			       struct vmbus_gpa sg[], uint32_t sglen,
 			       void *data, uint32_t dlen,
@@ -179,6 +183,7 @@ int rte_vmbus_chan_send_sglist(struct vmbus_channel *chan,
 	return error;
 }
 
+RTE_EXPORT_SYMBOL(rte_vmbus_chan_rx_empty)
 bool rte_vmbus_chan_rx_empty(const struct vmbus_channel *channel)
 {
 	const struct vmbus_br *br = &channel->rxbr;
@@ -188,6 +193,7 @@ bool rte_vmbus_chan_rx_empty(const struct vmbus_channel *channel)
 }
 
 /* Signal host after reading N bytes */
+RTE_EXPORT_SYMBOL(rte_vmbus_chan_signal_read)
 void rte_vmbus_chan_signal_read(struct vmbus_channel *chan, uint32_t bytes_read)
 {
 	struct vmbus_br *rbr = &chan->rxbr;
@@ -218,6 +224,7 @@ void rte_vmbus_chan_signal_read(struct vmbus_channel *chan, uint32_t bytes_read)
 	vmbus_set_event(chan);
 }
 
+RTE_EXPORT_SYMBOL(rte_vmbus_chan_recv)
 int rte_vmbus_chan_recv(struct vmbus_channel *chan, void *data, uint32_t *len,
 			uint64_t *request_id)
 {
@@ -265,6 +272,7 @@ int rte_vmbus_chan_recv(struct vmbus_channel *chan, void *data, uint32_t *len,
 }
 
 /* TODO: replace this with inplace ring buffer (no copy) */
+RTE_EXPORT_SYMBOL(rte_vmbus_chan_recv_raw)
 int rte_vmbus_chan_recv_raw(struct vmbus_channel *chan,
 			    void *data, uint32_t *len)
 {
@@ -335,6 +343,7 @@ int vmbus_chan_create(const struct rte_vmbus_device *device,
 }
 
 /* Setup the primary channel */
+RTE_EXPORT_SYMBOL(rte_vmbus_chan_open)
 int rte_vmbus_chan_open(struct rte_vmbus_device *device,
 			struct vmbus_channel **new_chan)
 {
@@ -355,6 +364,7 @@ int rte_vmbus_chan_open(struct rte_vmbus_device *device,
 	return err;
 }
 
+RTE_EXPORT_SYMBOL(rte_vmbus_max_channels)
 int rte_vmbus_max_channels(const struct rte_vmbus_device *device)
 {
 	if (vmbus_uio_subchannels_supported(device, device->primary))
@@ -364,6 +374,7 @@ int rte_vmbus_max_channels(const struct rte_vmbus_device *device)
 }
 
 /* Setup secondary channel */
+RTE_EXPORT_SYMBOL(rte_vmbus_subchan_open)
 int rte_vmbus_subchan_open(struct vmbus_channel *primary,
 			   struct vmbus_channel **new_chan)
 {
@@ -379,11 +390,13 @@ int rte_vmbus_subchan_open(struct vmbus_channel *primary,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vmbus_sub_channel_index)
 uint16_t rte_vmbus_sub_channel_index(const struct vmbus_channel *chan)
 {
 	return chan->subchannel_id;
 }
 
+RTE_EXPORT_SYMBOL(rte_vmbus_chan_close)
 void rte_vmbus_chan_close(struct vmbus_channel *chan)
 {
 	const struct rte_vmbus_device *device = chan->device;
diff --git a/drivers/bus/vmbus/vmbus_common.c b/drivers/bus/vmbus/vmbus_common.c
index 8a965d10d9..1f2be63236 100644
--- a/drivers/bus/vmbus/vmbus_common.c
+++ b/drivers/bus/vmbus/vmbus_common.c
@@ -191,6 +191,7 @@ vmbus_ignore_device(struct rte_vmbus_device *dev)
  * all registered drivers that have a matching entry in its id_table
  * for discovered devices.
  */
+RTE_EXPORT_SYMBOL(rte_vmbus_probe)
 int
 rte_vmbus_probe(void)
 {
@@ -279,6 +280,7 @@ vmbus_devargs_lookup(struct rte_vmbus_device *dev)
 }
 
 /* register vmbus driver */
+RTE_EXPORT_INTERNAL_SYMBOL(rte_vmbus_register)
 void
 rte_vmbus_register(struct rte_vmbus_driver *driver)
 {
@@ -289,6 +291,7 @@ rte_vmbus_register(struct rte_vmbus_driver *driver)
 }
 
 /* unregister vmbus driver */
+RTE_EXPORT_INTERNAL_SYMBOL(rte_vmbus_unregister)
 void
 rte_vmbus_unregister(struct rte_vmbus_driver *driver)
 {
diff --git a/drivers/common/cnxk/cnxk_security.c b/drivers/common/cnxk/cnxk_security.c
index a3c06c1e88..7245501d5a 100644
--- a/drivers/common/cnxk/cnxk_security.c
+++ b/drivers/common/cnxk/cnxk_security.c
@@ -301,6 +301,7 @@ ot_ipsec_inb_tunnel_hdr_fill(struct roc_ot_ipsec_inb_sa *sa,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_ot_ipsec_inb_sa_fill)
 int
 cnxk_ot_ipsec_inb_sa_fill(struct roc_ot_ipsec_inb_sa *sa,
 			  struct rte_security_ipsec_xform *ipsec_xfrm,
@@ -410,6 +411,7 @@ cnxk_ot_ipsec_inb_sa_fill(struct roc_ot_ipsec_inb_sa *sa,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_ot_ipsec_outb_sa_fill)
 int
 cnxk_ot_ipsec_outb_sa_fill(struct roc_ot_ipsec_outb_sa *sa,
 			   struct rte_security_ipsec_xform *ipsec_xfrm,
@@ -574,18 +576,21 @@ cnxk_ot_ipsec_outb_sa_fill(struct roc_ot_ipsec_outb_sa *sa,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_ot_ipsec_inb_sa_valid)
 bool
 cnxk_ot_ipsec_inb_sa_valid(struct roc_ot_ipsec_inb_sa *sa)
 {
 	return !!sa->w2.s.valid;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_ot_ipsec_outb_sa_valid)
 bool
 cnxk_ot_ipsec_outb_sa_valid(struct roc_ot_ipsec_outb_sa *sa)
 {
 	return !!sa->w2.s.valid;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_ipsec_ivlen_get)
 uint8_t
 cnxk_ipsec_ivlen_get(enum rte_crypto_cipher_algorithm c_algo,
 		     enum rte_crypto_auth_algorithm a_algo,
@@ -622,6 +627,7 @@ cnxk_ipsec_ivlen_get(enum rte_crypto_cipher_algorithm c_algo,
 	return ivlen;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_ipsec_icvlen_get)
 uint8_t
 cnxk_ipsec_icvlen_get(enum rte_crypto_cipher_algorithm c_algo,
 		      enum rte_crypto_auth_algorithm a_algo,
@@ -668,6 +674,7 @@ cnxk_ipsec_icvlen_get(enum rte_crypto_cipher_algorithm c_algo,
 	return icv;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_ipsec_outb_roundup_byte)
 uint8_t
 cnxk_ipsec_outb_roundup_byte(enum rte_crypto_cipher_algorithm c_algo,
 			     enum rte_crypto_aead_algorithm aead_algo)
@@ -698,6 +705,7 @@ cnxk_ipsec_outb_roundup_byte(enum rte_crypto_cipher_algorithm c_algo,
 	return roundup_byte;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_ipsec_outb_rlens_get)
 int
 cnxk_ipsec_outb_rlens_get(struct cnxk_ipsec_outb_rlens *rlens,
 			  struct rte_security_ipsec_xform *ipsec_xfrm,
@@ -970,6 +978,7 @@ on_fill_ipsec_common_sa(struct rte_security_ipsec_xform *ipsec,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_on_ipsec_outb_sa_create)
 int
 cnxk_on_ipsec_outb_sa_create(struct rte_security_ipsec_xform *ipsec,
 			     struct rte_crypto_sym_xform *crypto_xform,
@@ -1115,6 +1124,7 @@ cnxk_on_ipsec_outb_sa_create(struct rte_security_ipsec_xform *ipsec,
 	return ctx_len;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_on_ipsec_inb_sa_create)
 int
 cnxk_on_ipsec_inb_sa_create(struct rte_security_ipsec_xform *ipsec,
 			    struct rte_crypto_sym_xform *crypto_xform,
@@ -1465,6 +1475,7 @@ ow_ipsec_inb_tunnel_hdr_fill(struct roc_ow_ipsec_inb_sa *sa,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_ow_ipsec_inb_sa_fill)
 int
 cnxk_ow_ipsec_inb_sa_fill(struct roc_ow_ipsec_inb_sa *sa,
 			  struct rte_security_ipsec_xform *ipsec_xfrm,
@@ -1571,6 +1582,7 @@ cnxk_ow_ipsec_inb_sa_fill(struct roc_ow_ipsec_inb_sa *sa,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_ow_ipsec_outb_sa_fill)
 int
 cnxk_ow_ipsec_outb_sa_fill(struct roc_ow_ipsec_outb_sa *sa,
 			   struct rte_security_ipsec_xform *ipsec_xfrm,
diff --git a/drivers/common/cnxk/cnxk_utils.c b/drivers/common/cnxk/cnxk_utils.c
index 4e56adc659..eed089d0b0 100644
--- a/drivers/common/cnxk/cnxk_utils.c
+++ b/drivers/common/cnxk/cnxk_utils.c
@@ -9,6 +9,7 @@
 
 #include "cnxk_utils.h"
 
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_err_to_rte_err)
 int
 roc_nix_tm_err_to_rte_err(int errorcode)
 {
diff --git a/drivers/common/cnxk/roc_platform.c b/drivers/common/cnxk/roc_platform.c
index 401f737ad4..02d2168988 100644
--- a/drivers/common/cnxk/roc_platform.c
+++ b/drivers/common/cnxk/roc_platform.c
@@ -242,6 +242,7 @@ plt_irq_unregister(struct plt_intr_handle *intr_handle, plt_intr_callback_fn cb,
 static int plt_init_cb_num;
 static roc_plt_init_cb_t plt_init_cbs[PLT_INIT_CB_MAX];
 
+RTE_EXPORT_INTERNAL_SYMBOL(roc_plt_init_cb_register)
 int
 roc_plt_init_cb_register(roc_plt_init_cb_t cb)
 {
@@ -252,6 +253,7 @@ roc_plt_init_cb_register(roc_plt_init_cb_t cb)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(roc_plt_control_lmt_id_get)
 uint16_t
 roc_plt_control_lmt_id_get(void)
 {
@@ -263,6 +265,7 @@ roc_plt_control_lmt_id_get(void)
 		return ROC_NUM_LMT_LINES - 1;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(roc_plt_lmt_validate)
 uint16_t
 roc_plt_lmt_validate(void)
 {
@@ -277,6 +280,7 @@ roc_plt_lmt_validate(void)
 	return 1;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(roc_plt_init)
 int
 roc_plt_init(void)
 {
@@ -316,17 +320,572 @@ roc_plt_init(void)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_logtype_base)
 RTE_LOG_REGISTER_SUFFIX(cnxk_logtype_base, base, INFO);
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_logtype_mbox)
 RTE_LOG_REGISTER_SUFFIX(cnxk_logtype_mbox, mbox, NOTICE);
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_logtype_cpt)
 RTE_LOG_REGISTER_SUFFIX(cnxk_logtype_cpt, crypto, NOTICE);
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_logtype_ml)
 RTE_LOG_REGISTER_SUFFIX(cnxk_logtype_ml, ml, NOTICE);
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_logtype_npa)
 RTE_LOG_REGISTER_SUFFIX(cnxk_logtype_npa, mempool, NOTICE);
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_logtype_nix)
 RTE_LOG_REGISTER_SUFFIX(cnxk_logtype_nix, nix, NOTICE);
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_logtype_npc)
 RTE_LOG_REGISTER_SUFFIX(cnxk_logtype_npc, flow, NOTICE);
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_logtype_sso)
 RTE_LOG_REGISTER_SUFFIX(cnxk_logtype_sso, event, NOTICE);
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_logtype_tim)
 RTE_LOG_REGISTER_SUFFIX(cnxk_logtype_tim, timer, NOTICE);
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_logtype_tm)
 RTE_LOG_REGISTER_SUFFIX(cnxk_logtype_tm, tm, NOTICE);
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_logtype_dpi)
 RTE_LOG_REGISTER_SUFFIX(cnxk_logtype_dpi, dpi, NOTICE);
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_logtype_rep)
 RTE_LOG_REGISTER_SUFFIX(cnxk_logtype_rep, rep, NOTICE);
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_logtype_esw)
 RTE_LOG_REGISTER_SUFFIX(cnxk_logtype_esw, esw, NOTICE);
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_logtype_ree)
 RTE_LOG_REGISTER_SUFFIX(cnxk_logtype_ree, ree, NOTICE);
+
+/* Export all ROC symbols */
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ae_ec_grp_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ae_ec_grp_put)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ae_fpm_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ae_fpm_put)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_aes_xcbc_key_derive)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_aes_hash_key_derive)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_bphy_dev_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_bphy_dev_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_bphy_npa_pf_func_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_bphy_sso_pf_func_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_bphy_cgx_dev_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_bphy_cgx_dev_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_bphy_cgx_start_rxtx)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_bphy_cgx_stop_rxtx)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_bphy_cgx_set_link_state)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_bphy_cgx_get_linkinfo)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_bphy_cgx_set_link_mode)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_bphy_cgx_intlbk_enable)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_bphy_cgx_intlbk_disable)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_bphy_cgx_ptp_rx_enable)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_bphy_cgx_ptp_rx_disable)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_bphy_cgx_fec_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_bphy_cgx_fec_supported_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_bphy_cgx_cpri_mode_change)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_bphy_cgx_cpri_mode_tx_control)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_bphy_cgx_cpri_mode_misc)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_bphy_intr_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_bphy_intr_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_bphy_intr_handler)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_bphy_intr_available)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_bphy_intr_max_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_bphy_intr_clear)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_bphy_intr_register)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_cpt_inline_ipsec_cfg)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_cpt_inline_ipsec_inb_cfg_read)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_cpt_inline_ipsec_inb_cfg)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_cpt_rxc_time_cfg)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_cpt_dev_configure)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_cpt_lf_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_cpt_dev_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_cpt_lf_ctx_flush)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_cpt_lf_ctx_reload)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_cpt_lf_reset)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_cpt_lf_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_cpt_dev_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_cpt_dev_clear)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_cpt_eng_grp_add)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_cpt_iq_disable)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_cpt_iq_enable)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_cpt_lmtline_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_cpt_ctx_write)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_cpt_int_misc_cb_register)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_cpt_int_misc_cb_unregister)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_cpt_parse_hdr_dump)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_cpt_afs_print)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_cpt_lfs_print)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_dpi_wait_queue_idle)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_dpi_enable)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_dpi_disable)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_dpi_configure)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_dpi_configure_v2)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_dpi_dev_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_dpi_dev_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_eswitch_npc_mcam_tx_rule)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_eswitch_npc_mcam_delete_rule)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_eswitch_npc_mcam_rx_rule)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_eswitch_npc_rss_action_configure)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_eswitch_nix_vlan_tpid_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_eswitch_nix_process_repte_notify_cb_register)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_eswitch_nix_process_repte_notify_cb_unregister)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_eswitch_nix_repte_stats)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_eswitch_is_repte_pfs_vf)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_hash_md5_gen)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_hash_sha1_gen)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_hash_sha256_gen)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_hash_sha512_gen)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_idev_npa_maxpools_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_idev_npa_maxpools_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_idev_lmt_base_addr_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_idev_num_lmtlines_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_idev_cpt_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_idev_rvu_lf_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_idev_rvu_lf_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_idev_rvu_lf_free)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_idev_mcs_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_idev_mcs_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_idev_mcs_free)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_outb_ring_base_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_idev_nix_list_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_idev_cpt_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_idev_npa_nix_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_idev_nix_inl_meta_aura_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_idev_nix_rx_inject_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_idev_nix_rx_inject_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_idev_nix_rx_chan_base_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_idev_nix_rx_chan_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_idev_nix_inl_dev_pffunc_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ot_ipsec_inb_sa_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ot_ipsec_outb_sa_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ow_ipsec_inb_sa_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ow_reass_inb_sa_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ow_ipsec_outb_sa_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_is_supported)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_hw_info_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_active_lmac_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_lmac_mode_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_pn_threshold_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_ctrl_pkt_rule_alloc)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_ctrl_pkt_rule_free)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_ctrl_pkt_rule_write)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_port_cfg_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_port_cfg_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_custom_tag_cfg_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_intr_configure)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_port_recovery)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_port_reset)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_event_cb_register)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_event_cb_unregister)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_dev_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_dev_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_rsrc_alloc)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_rsrc_free)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_sa_policy_write)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_sa_policy_read)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_pn_table_write)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_pn_table_read)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_rx_sc_cam_write)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_rx_sc_cam_read)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_rx_sc_cam_enable)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_secy_policy_write)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_secy_policy_read)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_rx_sc_sa_map_write)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_rx_sc_sa_map_read)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_tx_sc_sa_map_write)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_tx_sc_sa_map_read)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_flowid_entry_write)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_flowid_entry_read)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_flowid_entry_enable)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_sa_port_map_update)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_flowid_stats_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_secy_stats_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_sc_stats_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_port_stats_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_mcs_stats_clear)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ml_reg_read64)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ml_reg_write64)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ml_reg_read32)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ml_reg_write32)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ml_reg_save)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ml_addr_ap2mlip)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ml_addr_mlip2ap)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ml_addr_pa_to_offset)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ml_addr_offset_to_pa)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ml_scratch_write_job)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ml_scratch_is_valid_bit_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ml_scratch_is_done_bit_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ml_scratch_enqueue)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ml_scratch_dequeue)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ml_scratch_queue_reset)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ml_jcmdq_enqueue_lf)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ml_jcmdq_enqueue_sl)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ml_clk_force_on)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ml_clk_force_off)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ml_dma_stall_on)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ml_dma_stall_off)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ml_mlip_is_enabled)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ml_mlip_reset)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ml_dev_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ml_dev_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ml_blk_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ml_blk_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ml_sso_pf_func_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_model)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_is_lbk)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_is_esw)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_get_base_chan)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_get_rx_chan_cnt)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_get_vwqe_interval)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_is_sdp)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_is_pf)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_get_pf)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_get_vf)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_is_vf_or_sdp)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_get_pf_func)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_lf_inl_ipsec_cfg)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_cpt_ctx_cache_sync)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_max_pkt_len)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_lf_alloc)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_lf_free)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_dev_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_dev_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_max_rep_count)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_bpf_level_to_idx)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_bpf_stats_to_idx)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_bpf_timeunit_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_bpf_count_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_bpf_alloc)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_bpf_free)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_bpf_free_all)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_bpf_config)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_bpf_ena_dis)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_bpf_dump)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_bpf_pre_color_tbl_setup)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_bpf_connect)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_bpf_stats_read)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_bpf_stats_reset)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_bpf_lf_stats_read)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_bpf_lf_stats_reset)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_lf_get_reg_count)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_lf_reg_dump)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_queues_ctx_dump)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_cqe_dump)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_rq_dump)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_cq_dump)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_sq_dump)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_dump)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_dump)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_dev_dump)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_outb_cpt_lfs_dump)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_sq_desc_dump)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_fc_config_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_fc_config_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_fc_mode_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_fc_mode_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_fc_npa_bp_cfg)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_pfc_mode_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_pfc_mode_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_chan_count_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_bpids_alloc)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_bpids_free)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_rx_chan_cfg_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_rx_chan_cfg_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_chan_bpid_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_meta_aura_check)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_outb_lf_base_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_inb_inj_lf_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_outb_sa_base_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_inb_sa_base_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_inb_rx_inject_enable)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_inb_spi_range)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_inb_sa_sz)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_inb_sa_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_reassembly_configure)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_inb_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_inb_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_outb_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_outb_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_dev_is_probed)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_dev_is_multi_channel)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_inb_is_enabled)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_outb_is_enabled)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_dev_rq_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_dev_rq_put)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_rq_ena_dis)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inb_mode_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_inb_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_outb_soft_exp_poll_switch)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inb_is_with_inl_dev)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_dev_rq)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_outb_sso_pffunc_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_cb_register)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_cb_unregister)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_inb_tag_update)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_sa_sync)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_ctx_write)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_cpt_lf_stats_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_ts_pkind_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_dev_lock)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_dev_unlock)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_meta_pool_cb_register)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_eng_caps_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_custom_meta_pool_cb_register)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_dev_xaq_realloc)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_dev_qptr_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_dev_stats_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_dev_stats_reset)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_dev_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_dev_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_dev_cpt_setup)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_inl_dev_cpt_release)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_rx_queue_intr_enable)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_rx_queue_intr_disable)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_err_intr_ena_dis)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_ras_intr_ena_dis)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_register_queue_irqs)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_unregister_queue_irqs)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_register_cq_irqs)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_unregister_cq_irqs)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_rxtx_start_stop)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_link_event_start_stop)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_loopback_enable)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_addr_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_max_entries_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_addr_add)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_addr_del)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_promisc_mode_enable)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_link_info_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_link_state_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_link_info_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_mtu_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_max_rx_len_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_stats_reset)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_link_cb_register)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_link_cb_unregister)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_link_info_get_cb_register)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mac_link_info_get_cb_unregister)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mcast_mcam_entry_alloc)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mcast_mcam_entry_free)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mcast_mcam_entry_write)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mcast_mcam_entry_ena_dis)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mcast_list_setup)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_mcast_list_free)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_npc_promisc_ena_dis)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_npc_mac_addr_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_npc_mac_addr_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_npc_rx_ena_dis)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_npc_mcast_config)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_lso_custom_fmt_setup)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_lso_fmt_setup)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_lso_fmt_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_switch_hdr_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_eeprom_info_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_rx_drop_re_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_ptp_rx_ena_dis)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_ptp_tx_ena_dis)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_ptp_clock_read)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_ptp_sync_time_adjust)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_ptp_info_cb_register)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_ptp_info_cb_unregister)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_ptp_is_enable)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_sq_ena_dis)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_rq_ena_dis)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_rq_is_sso_enable)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_rq_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_rq_modify)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_rq_cman_config)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_rq_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_cq_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_cq_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_sq_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_sq_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_cq_head_tail_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_sq_head_tail_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_q_err_cb_register)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_q_err_cb_unregister)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_rss_key_default_fill)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_rss_key_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_rss_key_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_rss_reta_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_rss_reta_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_rss_flowkey_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_rss_default_setup)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_num_xstats_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_stats_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_stats_reset)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_stats_queue_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_stats_queue_reset)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_xstats_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_xstats_names_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_sq_flush_spin)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_prepare_rate_limited_tree)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_pfc_prepare_tree)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_mark_config)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_mark_format_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_sq_aura_fc)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_free_resources)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_shaper_profile_add)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_shaper_profile_update)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_shaper_profile_delete)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_node_add)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_node_pkt_mode_update)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_node_name_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_node_delete)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_smq_flush)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_hierarchy_disable)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_hierarchy_xmit_enable)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_hierarchy_enable)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_node_suspend_resume)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_prealloc_res)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_node_shaper_update)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_node_parent_update)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_pfc_rlimit_sq)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_rlimit_sq)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_rsrc_count)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_rsrc_max)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_root_has_sp)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_egress_link_cfg_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_leaf_cnt)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_node_lvl)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_node_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_node_next)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_shaper_profile_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_shaper_profile_next)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_node_stats_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_is_user_hierarchy_enabled)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_tree_type_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_max_prio)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_lvl_is_leaf)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_shaper_default_red_algo)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_lvl_cnt_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_tm_lvl_have_link_access)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_vlan_mcam_entry_read)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_vlan_mcam_entry_write)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_vlan_mcam_entry_alloc_and_write)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_vlan_mcam_entry_free)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_vlan_mcam_entry_ena_dis)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_vlan_strip_vtag_ena_dis)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_vlan_insert_ena_dis)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_nix_vlan_tpid_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npa_lf_init_cb_register)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npa_pf_func_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npa_pool_op_range_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npa_aura_op_range_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npa_aura_op_range_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npa_pool_op_pc_reset)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npa_aura_drop_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npa_pool_create)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npa_aura_create)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npa_aura_limit_modify)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npa_pool_destroy)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npa_aura_destroy)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npa_pool_range_update_check)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npa_zero_aura_handle)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npa_aura_bp_configure)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npa_dev_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npa_dev_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npa_dev_lock)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npa_dev_unlock)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npa_ctx_dump)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npa_dump)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npa_buf_type_update)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npa_buf_type_mask)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npa_buf_type_limit_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_mark_actions_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_mark_actions_sub_return)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_vtag_actions_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_vtag_actions_sub_return)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_mcam_free_counter)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_inl_mcam_read_counter)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_inl_mcam_clear_counter)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_mcam_alloc_counter)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_get_free_mcam_entry)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_mcam_read_counter)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_mcam_get_stats)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_mcam_clear_counter)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_mcam_free_entry)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_mcam_free)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_mcam_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_mcam_move)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_mcam_free_all_resources)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_mcam_alloc_entries)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_mcam_enable_all_entries)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_mcam_alloc_entry)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_mcam_ena_dis_entry)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_mcam_write_entry)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_get_low_priority_mcam)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_profile_name_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_kex_capa_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_validate_portid_action)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_flow_parse)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_sdp_channel_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_flow_create)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_flow_destroy)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_flow_dump)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_mcam_merge_base_steering_rule)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_aged_flow_ctx_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_npc_flow_mcam_dump)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ree_queues_attach)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ree_queues_detach)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ree_msix_offsets_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ree_config_lf)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ree_af_reg_read)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ree_af_reg_write)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ree_rule_db_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ree_rule_db_len_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ree_rule_db_prog)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ree_qp_get_base)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ree_err_intr_unregister)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ree_err_intr_register)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ree_iq_enable)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ree_iq_disable)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ree_dev_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_ree_dev_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_rvu_lf_dev_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_rvu_lf_dev_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_rvu_lf_pf_func_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_rvu_lf_msg_id_range_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_rvu_lf_msg_id_range_check)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_rvu_lf_msg_process)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_rvu_lf_irq_register)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_rvu_lf_irq_unregister)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_rvu_lf_msg_handler_register)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_rvu_lf_msg_handler_unregister)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_se_hmac_opad_ipad_gen)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_se_auth_key_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_se_ciph_key_set)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_se_ctx_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_sso_hws_base_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_sso_hwgrp_base_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_sso_pf_func_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_sso_ns_to_gw)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_sso_hws_link)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_sso_hws_unlink)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_sso_hws_stats_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_sso_hws_gwc_invalidate)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_sso_hwgrp_agq_alloc)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_sso_hwgrp_agq_free)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_sso_hwgrp_agq_release)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_sso_hwgrp_agq_from_tag)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_sso_hwgrp_stats_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_sso_hwgrp_hws_link_status)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_sso_hwgrp_qos_config)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_sso_hwgrp_init_xaq_aura)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_sso_hwgrp_free_xaq_aura)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_sso_hwgrp_alloc_xaq)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_sso_hwgrp_release_xaq)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_sso_hwgrp_set_priority)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_sso_hwgrp_stash_config)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_sso_rsrc_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_sso_rsrc_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_sso_dev_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_sso_dev_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_sso_dump)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_tim_lf_enable)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_tim_lf_disable)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_tim_lf_base_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_tim_lf_config)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_tim_lf_config_hwwqe)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_tim_lf_interval)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_tim_lf_alloc)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_tim_lf_free)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_tim_init)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_tim_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_error_msg_get)
+RTE_EXPORT_INTERNAL_SYMBOL(roc_clk_freq_get)
diff --git a/drivers/common/cpt/cpt_fpm_tables.c b/drivers/common/cpt/cpt_fpm_tables.c
index 15b665db01..927ccc5e2e 100644
--- a/drivers/common/cpt/cpt_fpm_tables.c
+++ b/drivers/common/cpt/cpt_fpm_tables.c
@@ -1081,6 +1081,7 @@ static rte_spinlock_t lock = RTE_SPINLOCK_INITIALIZER;
 static uint8_t *fpm_table;
 static int nb_devs;
 
+RTE_EXPORT_INTERNAL_SYMBOL(cpt_fpm_init)
 int cpt_fpm_init(uint64_t *fpm_table_iova)
 {
 	int i, len = 0;
@@ -1125,6 +1126,7 @@ int cpt_fpm_init(uint64_t *fpm_table_iova)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cpt_fpm_clear)
 void cpt_fpm_clear(void)
 {
 	rte_spinlock_lock(&lock);
diff --git a/drivers/common/cpt/cpt_pmd_ops_helper.c b/drivers/common/cpt/cpt_pmd_ops_helper.c
index 2cddddf4ce..79dfab01bb 100644
--- a/drivers/common/cpt/cpt_pmd_ops_helper.c
+++ b/drivers/common/cpt/cpt_pmd_ops_helper.c
@@ -14,6 +14,7 @@
 #define CPT_MAX_ASYM_OP_NUM_PARAMS 5
 #define CPT_MAX_ASYM_OP_MOD_LEN 1024
 
+RTE_EXPORT_INTERNAL_SYMBOL(cpt_pmd_ops_helper_get_mlen_direct_mode)
 int32_t
 cpt_pmd_ops_helper_get_mlen_direct_mode(void)
 {
@@ -28,6 +29,7 @@ cpt_pmd_ops_helper_get_mlen_direct_mode(void)
 	return len;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cpt_pmd_ops_helper_get_mlen_sg_mode)
 int
 cpt_pmd_ops_helper_get_mlen_sg_mode(void)
 {
@@ -43,6 +45,7 @@ cpt_pmd_ops_helper_get_mlen_sg_mode(void)
 	return len;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cpt_pmd_ops_helper_asym_get_mlen)
 int
 cpt_pmd_ops_helper_asym_get_mlen(void)
 {
diff --git a/drivers/common/dpaax/caamflib.c b/drivers/common/dpaax/caamflib.c
index 55e20281ca..aadefae681 100644
--- a/drivers/common/dpaax/caamflib.c
+++ b/drivers/common/dpaax/caamflib.c
@@ -13,4 +13,5 @@
  * - SEC HW block revision format is "v"
  * - SEC revision format is "x.y"
  */
+RTE_EXPORT_INTERNAL_SYMBOL(rta_sec_era)
 enum rta_sec_era rta_sec_era;
diff --git a/drivers/common/dpaax/dpaa_of.c b/drivers/common/dpaax/dpaa_of.c
index bb2c8fc66b..59b828fe66 100644
--- a/drivers/common/dpaax/dpaa_of.c
+++ b/drivers/common/dpaax/dpaa_of.c
@@ -213,6 +213,7 @@ linear_dir(struct dt_dir *d)
 	}
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(of_init_path)
 int
 of_init_path(const char *dt_path)
 {
@@ -297,6 +298,7 @@ check_compatible(const struct dt_file *f, const char *compatible)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(of_find_compatible_node)
 const struct device_node *
 of_find_compatible_node(const struct device_node *from,
 			const char *type __rte_unused,
@@ -322,6 +324,7 @@ of_find_compatible_node(const struct device_node *from,
 	return NULL;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(of_get_property)
 const void *
 of_get_property(const struct device_node *from, const char *name,
 		size_t *lenp)
@@ -341,6 +344,7 @@ of_get_property(const struct device_node *from, const char *name,
 	return NULL;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(of_device_is_available)
 bool
 of_device_is_available(const struct device_node *dev_node)
 {
@@ -357,6 +361,7 @@ of_device_is_available(const struct device_node *dev_node)
 	return false;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(of_find_node_by_phandle)
 const struct device_node *
 of_find_node_by_phandle(uint64_t ph)
 {
@@ -370,6 +375,7 @@ of_find_node_by_phandle(uint64_t ph)
 	return NULL;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(of_get_parent)
 const struct device_node *
 of_get_parent(const struct device_node *dev_node)
 {
@@ -385,6 +391,7 @@ of_get_parent(const struct device_node *dev_node)
 	return &d->parent->node.node;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(of_get_next_child)
 const struct device_node *
 of_get_next_child(const struct device_node *dev_node,
 		  const struct device_node *prev)
@@ -414,6 +421,7 @@ of_get_next_child(const struct device_node *dev_node,
 	return &c->node.node;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(of_n_addr_cells)
 uint32_t
 of_n_addr_cells(const struct device_node *dev_node)
 {
@@ -458,6 +466,7 @@ of_n_size_cells(const struct device_node *dev_node)
 	return OF_DEFAULT_NS;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(of_get_address)
 const uint32_t *
 of_get_address(const struct device_node *dev_node, size_t idx,
 	       uint64_t *size, uint32_t *flags __rte_unused)
@@ -487,6 +496,7 @@ of_get_address(const struct device_node *dev_node, size_t idx,
 	return (const uint32_t *)buf;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(of_translate_address)
 uint64_t
 of_translate_address(const struct device_node *dev_node,
 		     const uint32_t *addr)
@@ -533,6 +543,7 @@ of_translate_address(const struct device_node *dev_node,
 	return phys_addr;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(of_device_is_compatible)
 bool
 of_device_is_compatible(const struct device_node *dev_node,
 			const char *compatible)
@@ -573,6 +584,7 @@ static const void *of_get_mac_addr(const struct device_node *np,
  * this case, the real MAC is in 'local-mac-address', and 'mac-address' exists
  * but is all zeros.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(of_get_mac_address)
 const void *of_get_mac_address(const struct device_node *np)
 {
 	const void *addr;
diff --git a/drivers/common/dpaax/dpaax_iova_table.c b/drivers/common/dpaax/dpaax_iova_table.c
index 860e702333..003b4455ba 100644
--- a/drivers/common/dpaax/dpaax_iova_table.c
+++ b/drivers/common/dpaax/dpaax_iova_table.c
@@ -8,6 +8,7 @@
 #include "dpaax_logs.h"
 
 /* Global table reference */
+RTE_EXPORT_INTERNAL_SYMBOL(dpaax_iova_table_p)
 struct dpaax_iova_table *dpaax_iova_table_p;
 
 static int dpaax_handle_memevents(void);
@@ -153,6 +154,7 @@ read_memory_node(unsigned int *count)
 	return nodes;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(dpaax_iova_table_populate)
 int
 dpaax_iova_table_populate(void)
 {
@@ -254,6 +256,7 @@ dpaax_iova_table_populate(void)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(dpaax_iova_table_depopulate)
 void
 dpaax_iova_table_depopulate(void)
 {
@@ -263,6 +266,7 @@ dpaax_iova_table_depopulate(void)
 	DPAAX_DEBUG("IOVA Table cleaned");
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(dpaax_iova_table_update)
 int
 dpaax_iova_table_update(phys_addr_t paddr, void *vaddr, size_t length)
 {
@@ -349,6 +353,7 @@ dpaax_iova_table_update(phys_addr_t paddr, void *vaddr, size_t length)
  * Dump the table, with its entries, on screen. Only works in Debug Mode
  * Not for weak hearted - the tables can get quite large
  */
+RTE_EXPORT_INTERNAL_SYMBOL(dpaax_iova_table_dump)
 void
 dpaax_iova_table_dump(void)
 {
@@ -461,4 +466,5 @@ dpaax_handle_memevents(void)
 					       dpaax_memevent_cb, NULL);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(dpaax_logger)
 RTE_LOG_REGISTER_DEFAULT(dpaax_logger, ERR);
diff --git a/drivers/common/ionic/ionic_common_uio.c b/drivers/common/ionic/ionic_common_uio.c
index c647b22eaf..56e2a0990b 100644
--- a/drivers/common/ionic/ionic_common_uio.c
+++ b/drivers/common/ionic/ionic_common_uio.c
@@ -103,6 +103,7 @@ uio_get_idx_for_devname(struct uio_name *name_cache, char *devname)
 	return -1;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(ionic_uio_scan_mnet_devices)
 void
 ionic_uio_scan_mnet_devices(void)
 {
@@ -146,6 +147,7 @@ ionic_uio_scan_mnet_devices(void)
 	}
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(ionic_uio_scan_mcrypt_devices)
 void
 ionic_uio_scan_mcrypt_devices(void)
 {
@@ -301,6 +303,7 @@ uio_get_map_res_addr(int uio_idx, int size, int res_idx)
 	return addr;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(ionic_uio_get_rsrc)
 void
 ionic_uio_get_rsrc(const char *name, int idx, struct ionic_dev_bar *bar)
 {
@@ -319,6 +322,7 @@ ionic_uio_get_rsrc(const char *name, int idx, struct ionic_dev_bar *bar)
 	bar->vaddr = ((char *)bar->vaddr) + offs;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(ionic_uio_rel_rsrc)
 void
 ionic_uio_rel_rsrc(const char *name, int idx, struct ionic_dev_bar *bar)
 {
diff --git a/drivers/common/mlx5/linux/mlx5_common_auxiliary.c b/drivers/common/mlx5/linux/mlx5_common_auxiliary.c
index 33479ffd68..345e0535fa 100644
--- a/drivers/common/mlx5/linux/mlx5_common_auxiliary.c
+++ b/drivers/common/mlx5/linux/mlx5_common_auxiliary.c
@@ -18,6 +18,7 @@
 #define AUXILIARY_SYSFS_PATH "/sys/bus/auxiliary/devices"
 #define MLX5_AUXILIARY_PREFIX "mlx5_core.sf."
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_auxiliary_get_child_name)
 int
 mlx5_auxiliary_get_child_name(const char *dev, const char *node,
 			      char *child, size_t size)
diff --git a/drivers/common/mlx5/linux/mlx5_common_os.c b/drivers/common/mlx5/linux/mlx5_common_os.c
index 41345e1597..0e33bbd1cc 100644
--- a/drivers/common/mlx5/linux/mlx5_common_os.c
+++ b/drivers/common/mlx5/linux/mlx5_common_os.c
@@ -27,9 +27,11 @@
 #include "mlx5_glue.h"
 
 #ifdef MLX5_GLUE
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_glue)
 const struct mlx5_glue *mlx5_glue;
 #endif
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_get_pci_addr)
 int
 mlx5_get_pci_addr(const char *dev_path, struct rte_pci_addr *pci_addr)
 {
@@ -89,6 +91,7 @@ mlx5_get_pci_addr(const char *dev_path, struct rte_pci_addr *pci_addr)
  * @return
  *   port_name field set according to recognized name format.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_translate_port_name)
 void
 mlx5_translate_port_name(const char *port_name_in,
 			 struct mlx5_switch_info *port_info_out)
@@ -155,6 +158,7 @@ mlx5_translate_port_name(const char *port_name_in,
 	port_info_out->name_type = MLX5_PHYS_PORT_NAME_TYPE_UNKNOWN;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_get_ifname_sysfs)
 int
 mlx5_get_ifname_sysfs(const char *ibdev_path, char *ifname)
 {
@@ -873,6 +877,7 @@ mlx5_os_open_device(struct mlx5_common_device *cdev, uint32_t classes)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_get_device_guid)
 int
 mlx5_get_device_guid(const struct rte_pci_addr *dev, uint8_t *guid, size_t len)
 {
@@ -918,6 +923,7 @@ mlx5_get_device_guid(const struct rte_pci_addr *dev, uint8_t *guid, size_t len)
  * indirect mkey created by the DevX API.
  * This mkey should be used for DevX commands requesting mkey as a parameter.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_os_wrapped_mkey_create)
 int
 mlx5_os_wrapped_mkey_create(void *ctx, void *pd, uint32_t pdn, void *addr,
 			    size_t length, struct mlx5_pmd_wrapped_mr *pmd_mr)
@@ -957,6 +963,7 @@ mlx5_os_wrapped_mkey_create(void *ctx, void *pd, uint32_t pdn, void *addr,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_os_wrapped_mkey_destroy)
 void
 mlx5_os_wrapped_mkey_destroy(struct mlx5_pmd_wrapped_mr *pmd_mr)
 {
@@ -988,6 +995,7 @@ mlx5_os_wrapped_mkey_destroy(struct mlx5_pmd_wrapped_mr *pmd_mr)
  *  - Interrupt handle on success.
  *  - NULL on failure, with rte_errno set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_os_interrupt_handler_create)
 struct rte_intr_handle *
 mlx5_os_interrupt_handler_create(int mode, bool set_fd_nonblock, int fd,
 				 rte_intr_callback_fn cb, void *cb_arg)
@@ -1089,6 +1097,7 @@ mlx5_intr_callback_unregister(const struct rte_intr_handle *handle,
  *   Callback argument for cb.
  *
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_os_interrupt_handler_destroy)
 void
 mlx5_os_interrupt_handler_destroy(struct rte_intr_handle *intr_handle,
 				  rte_intr_callback_fn cb, void *cb_arg)
diff --git a/drivers/common/mlx5/linux/mlx5_common_verbs.c b/drivers/common/mlx5/linux/mlx5_common_verbs.c
index cf2f7ecbf3..fd3cd055f2 100644
--- a/drivers/common/mlx5/linux/mlx5_common_verbs.c
+++ b/drivers/common/mlx5/linux/mlx5_common_verbs.c
@@ -105,6 +105,7 @@ mlx5_set_context_attr(struct rte_device *dev, struct ibv_context *ctx)
  * @return
  *   0 on successful registration, -1 otherwise
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_common_verbs_reg_mr)
 int
 mlx5_common_verbs_reg_mr(void *pd, void *addr, size_t length,
 			 struct mlx5_pmd_mr *pmd_mr)
@@ -134,6 +135,7 @@ mlx5_common_verbs_reg_mr(void *pd, void *addr, size_t length,
  *   pmd_mr struct set with lkey, address, length and pointer to mr object
  *
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_common_verbs_dereg_mr)
 void
 mlx5_common_verbs_dereg_mr(struct mlx5_pmd_mr *pmd_mr)
 {
@@ -151,6 +153,7 @@ mlx5_common_verbs_dereg_mr(struct mlx5_pmd_mr *pmd_mr)
  * @param[out] dereg_mr_cb
  *   Pointer to dereg_mr func
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_os_set_reg_mr_cb)
 void
 mlx5_os_set_reg_mr_cb(mlx5_reg_mr_t *reg_mr_cb, mlx5_dereg_mr_t *dereg_mr_cb)
 {
diff --git a/drivers/common/mlx5/linux/mlx5_glue.c b/drivers/common/mlx5/linux/mlx5_glue.c
index 99761ea0b2..604230144e 100644
--- a/drivers/common/mlx5/linux/mlx5_glue.c
+++ b/drivers/common/mlx5/linux/mlx5_glue.c
@@ -1578,6 +1578,7 @@ mlx5_glue_dv_destroy_steering_anchor(struct mlx5dv_steering_anchor *sa)
 #endif
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_glue)
 alignas(RTE_CACHE_LINE_SIZE)
 const struct mlx5_glue *mlx5_glue = &(const struct mlx5_glue) {
 	.version = MLX5_GLUE_VERSION,
diff --git a/drivers/common/mlx5/linux/mlx5_nl.c b/drivers/common/mlx5/linux/mlx5_nl.c
index 12f1a620f3..ad16274861 100644
--- a/drivers/common/mlx5/linux/mlx5_nl.c
+++ b/drivers/common/mlx5/linux/mlx5_nl.c
@@ -195,6 +195,7 @@ RTE_ATOMIC(uint32_t) atomic_sn;
  *   A file descriptor on success, a negative errno value otherwise and
  *   rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_nl_init)
 int
 mlx5_nl_init(int protocol, int groups)
 {
@@ -641,6 +642,7 @@ mlx5_nl_mac_addr_modify(int nlsk_fd, unsigned int iface_idx,
  * @return
  *    0 on success, a negative errno value otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_nl_vf_mac_addr_modify)
 int
 mlx5_nl_vf_mac_addr_modify(int nlsk_fd, unsigned int iface_idx,
 			   struct rte_ether_addr *mac, int vf_index)
@@ -728,6 +730,7 @@ mlx5_nl_vf_mac_addr_modify(int nlsk_fd, unsigned int iface_idx,
  * @return
  *   0 on success, a negative errno value otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_nl_mac_addr_add)
 int
 mlx5_nl_mac_addr_add(int nlsk_fd, unsigned int iface_idx,
 		     uint64_t *mac_own, struct rte_ether_addr *mac,
@@ -765,6 +768,7 @@ mlx5_nl_mac_addr_add(int nlsk_fd, unsigned int iface_idx,
  * @return
  *   0 on success, a negative errno value otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_nl_mac_addr_remove)
 int
 mlx5_nl_mac_addr_remove(int nlsk_fd, unsigned int iface_idx, uint64_t *mac_own,
 			struct rte_ether_addr *mac, uint32_t index)
@@ -789,6 +793,7 @@ mlx5_nl_mac_addr_remove(int nlsk_fd, unsigned int iface_idx, uint64_t *mac_own,
  * @param n
  *   @p mac_addrs array size.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_nl_mac_addr_sync)
 void
 mlx5_nl_mac_addr_sync(int nlsk_fd, unsigned int iface_idx,
 		      struct rte_ether_addr *mac_addrs, int n)
@@ -845,6 +850,7 @@ mlx5_nl_mac_addr_sync(int nlsk_fd, unsigned int iface_idx,
  * @param mac_own
  *   BITFIELD_DECLARE array to store the mac.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_nl_mac_addr_flush)
 void
 mlx5_nl_mac_addr_flush(int nlsk_fd, unsigned int iface_idx,
 		       struct rte_ether_addr *mac_addrs, int n,
@@ -923,6 +929,7 @@ mlx5_nl_device_flags(int nlsk_fd, unsigned int iface_idx, uint32_t flags,
  * @return
  *   0 on success, a negative errno value otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_nl_promisc)
 int
 mlx5_nl_promisc(int nlsk_fd, unsigned int iface_idx, int enable)
 {
@@ -949,6 +956,7 @@ mlx5_nl_promisc(int nlsk_fd, unsigned int iface_idx, int enable)
  * @return
  *   0 on success, a negative errno value otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_nl_allmulti)
 int
 mlx5_nl_allmulti(int nlsk_fd, unsigned int iface_idx, int enable)
 {
@@ -1138,6 +1146,7 @@ mlx5_nl_port_info(int nl, uint32_t pindex, struct mlx5_nl_port_info *data)
  *   A valid (nonzero) interface index on success, 0 otherwise and rte_errno
  *   is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_nl_ifindex)
 unsigned int
 mlx5_nl_ifindex(int nl, const char *name, uint32_t pindex, struct mlx5_dev_info *dev_info)
 {
@@ -1194,6 +1203,7 @@ mlx5_nl_ifindex(int nl, const char *name, uint32_t pindex, struct mlx5_dev_info
  *   Port state (ibv_port_state) on success, negative on error
  *   and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_nl_port_state)
 int
 mlx5_nl_port_state(int nl, const char *name, uint32_t pindex, struct mlx5_dev_info *dev_info)
 {
@@ -1229,6 +1239,7 @@ mlx5_nl_port_state(int nl, const char *name, uint32_t pindex, struct mlx5_dev_in
  *   A valid (nonzero) number of ports on success, 0 otherwise
  *   and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_nl_portnum)
 unsigned int
 mlx5_nl_portnum(int nl, const char *name, struct mlx5_dev_info *dev_info)
 {
@@ -1435,6 +1446,7 @@ mlx5_nl_switch_info_cb(struct nlmsghdr *nh, void *arg)
  * @return
  *   0 on success, a negative errno value otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_nl_switch_info)
 int
 mlx5_nl_switch_info(int nl, unsigned int ifindex,
 		    struct mlx5_switch_info *info)
@@ -1485,6 +1497,7 @@ mlx5_nl_switch_info(int nl, unsigned int ifindex,
  * @param[in] ifindex
  *   Interface index of network device to delete.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_nl_vlan_vmwa_delete)
 void
 mlx5_nl_vlan_vmwa_delete(struct mlx5_nl_vlan_vmwa_context *vmwa,
 		      uint32_t ifindex)
@@ -1562,6 +1575,7 @@ nl_attr_nest_end(struct nlmsghdr *nlh, struct nlattr *nest)
  * @param[in] tag
  *   VLAN tag for VLAN network device to create.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_nl_vlan_vmwa_create)
 uint32_t
 mlx5_nl_vlan_vmwa_create(struct mlx5_nl_vlan_vmwa_context *vmwa,
 			 uint32_t ifindex, uint16_t tag)
@@ -1714,6 +1728,7 @@ mlx5_nl_generic_family_id_get(int nlsk_fd, const char *name)
  *   otherwise and rte_errno is set.
  */
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_nl_devlink_family_id_get)
 int
 mlx5_nl_devlink_family_id_get(int nlsk_fd)
 {
@@ -1940,6 +1955,7 @@ mlx5_nl_enable_roce_set(int nlsk_fd, int family_id, const char *pci_addr,
  * @return
  *  0 on success, negative on failure.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_nl_parse_link_status_update)
 int
 mlx5_nl_parse_link_status_update(struct nlmsghdr *hdr, uint32_t *ifindex)
 {
@@ -1971,6 +1987,7 @@ mlx5_nl_parse_link_status_update(struct nlmsghdr *hdr, uint32_t *ifindex)
  *  0 on success, including the case when there are no events.
  *  Negative on failure and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_nl_read_events)
 int
 mlx5_nl_read_events(int nlsk_fd, mlx5_nl_event_cb *cb, void *cb_arg)
 {
@@ -2058,6 +2075,7 @@ mlx5_nl_esw_multiport_cb(struct nlmsghdr *nh, void *arg)
 
 #define NL_ESW_MULTIPORT_PARAM "esw_multiport"
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_nl_devlink_esw_multiport_get)
 int
 mlx5_nl_devlink_esw_multiport_get(int nlsk_fd, int family_id, const char *pci_addr, int *enable)
 {
@@ -2096,12 +2114,14 @@ mlx5_nl_devlink_esw_multiport_get(int nlsk_fd, int family_id, const char *pci_ad
 	return ret;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_nl_rdma_monitor_init)
 int
 mlx5_nl_rdma_monitor_init(void)
 {
 	return mlx5_nl_init(NETLINK_RDMA, RDMA_NL_GROUP_NOTIFICATION);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_nl_rdma_monitor_info_get)
 void
 mlx5_nl_rdma_monitor_info_get(struct nlmsghdr *hdr, struct mlx5_nl_port_info *data)
 {
@@ -2196,6 +2216,7 @@ mlx5_nl_rdma_monitor_cap_get_cb(struct nlmsghdr *hdr, void *arg)
  * @return
  *   0 on success, negative on error and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_nl_rdma_monitor_cap_get)
 int
 mlx5_nl_rdma_monitor_cap_get(int nl, uint8_t *cap)
 {
diff --git a/drivers/common/mlx5/mlx5_common.c b/drivers/common/mlx5/mlx5_common.c
index 9abae4a374..58af76f036 100644
--- a/drivers/common/mlx5/mlx5_common.c
+++ b/drivers/common/mlx5/mlx5_common.c
@@ -20,6 +20,7 @@
 #include "mlx5_common_defs.h"
 #include "mlx5_common_private.h"
 
+RTE_EXPORT_INTERNAL_SYMBOL(haswell_broadwell_cpu)
 uint8_t haswell_broadwell_cpu;
 
 /* Driver type key for new device global syntax. */
@@ -127,6 +128,7 @@ driver_get(uint32_t class)
 	return NULL;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_kvargs_process)
 int
 mlx5_kvargs_process(struct mlx5_kvargs_ctrl *mkvlist, const char *const keys[],
 		    arg_handler_t handler, void *opaque_arg)
@@ -463,6 +465,7 @@ to_mlx5_device(const struct rte_device *rte_dev)
 	return NULL;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_dev_to_pci_str)
 int
 mlx5_dev_to_pci_str(const struct rte_device *dev, char *addr, size_t size)
 {
@@ -512,6 +515,7 @@ mlx5_dev_mempool_register(struct mlx5_common_device *cdev,
  * @param mp
  *   Mempool being unregistered.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_dev_mempool_unregister)
 void
 mlx5_dev_mempool_unregister(struct mlx5_common_device *cdev,
 			    struct rte_mempool *mp)
@@ -591,6 +595,7 @@ mlx5_dev_mempool_event_cb(enum rte_mempool_event event, struct rte_mempool *mp,
  * Callbacks addresses are local in each process.
  * Therefore, each process can register private callbacks.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_dev_mempool_subscribe)
 int
 mlx5_dev_mempool_subscribe(struct mlx5_common_device *cdev)
 {
@@ -1220,6 +1225,7 @@ mlx5_common_dev_dma_unmap(struct rte_device *rte_dev, void *addr,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_class_driver_register)
 void
 mlx5_class_driver_register(struct mlx5_class_driver *driver)
 {
@@ -1242,6 +1248,7 @@ static bool mlx5_common_initialized;
  * for multiple PMDs. Each mlx5 PMD that depends on mlx5_common module,
  * must invoke in its constructor.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_common_init)
 void
 mlx5_common_init(void)
 {
@@ -1400,6 +1407,7 @@ mlx5_devx_alloc_uar(struct mlx5_common_device *cdev)
 	return uar;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_uar_release)
 void
 mlx5_devx_uar_release(struct mlx5_uar *uar)
 {
@@ -1408,6 +1416,7 @@ mlx5_devx_uar_release(struct mlx5_uar *uar)
 	memset(uar, 0, sizeof(*uar));
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_uar_prepare)
 int
 mlx5_devx_uar_prepare(struct mlx5_common_device *cdev, struct mlx5_uar *uar)
 {
diff --git a/drivers/common/mlx5/mlx5_common_devx.c b/drivers/common/mlx5/mlx5_common_devx.c
index 431d8361ce..77bc7e4af8 100644
--- a/drivers/common/mlx5/mlx5_common_devx.c
+++ b/drivers/common/mlx5/mlx5_common_devx.c
@@ -23,6 +23,7 @@
  * @param[in] cq
  *   DevX CQ to destroy.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cq_destroy)
 void
 mlx5_devx_cq_destroy(struct mlx5_devx_cq *cq)
 {
@@ -77,6 +78,7 @@ mlx5_cq_init(struct mlx5_devx_cq *cq_obj, uint16_t cq_size)
  * @return
  *   0 on success, a negative errno value otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cq_create)
 int
 mlx5_devx_cq_create(void *ctx, struct mlx5_devx_cq *cq_obj, uint16_t log_desc_n,
 		    struct mlx5_devx_cq_attr *attr, int socket)
@@ -162,6 +164,7 @@ mlx5_devx_cq_create(void *ctx, struct mlx5_devx_cq *cq_obj, uint16_t log_desc_n,
  * @param[in] sq
  *   DevX SQ to destroy.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_sq_destroy)
 void
 mlx5_devx_sq_destroy(struct mlx5_devx_sq *sq)
 {
@@ -204,6 +207,7 @@ mlx5_devx_sq_destroy(struct mlx5_devx_sq *sq)
  * @return
  *   0 on success, a negative errno value otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_sq_create)
 int
 mlx5_devx_sq_create(void *ctx, struct mlx5_devx_sq *sq_obj, uint16_t log_wqbb_n,
 		    struct mlx5_devx_create_sq_attr *attr, int socket)
@@ -312,6 +316,7 @@ mlx5_devx_rmp_destroy(struct mlx5_devx_rmp *rmp)
  * @param[in] qp
  *   DevX QP to destroy.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_qp_destroy)
 void
 mlx5_devx_qp_destroy(struct mlx5_devx_qp *qp)
 {
@@ -350,6 +355,7 @@ mlx5_devx_qp_destroy(struct mlx5_devx_qp *qp)
  * @return
  *   0 on success, a negative errno value otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_qp_create)
 int
 mlx5_devx_qp_create(void *ctx, struct mlx5_devx_qp *qp_obj, uint32_t queue_size,
 		    struct mlx5_devx_qp_attr *attr, int socket)
@@ -420,6 +426,7 @@ mlx5_devx_qp_create(void *ctx, struct mlx5_devx_qp *qp_obj, uint32_t queue_size,
  * @param[in] rq
  *   DevX RQ to destroy.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_rq_destroy)
 void
 mlx5_devx_rq_destroy(struct mlx5_devx_rq *rq)
 {
@@ -695,6 +702,7 @@ mlx5_devx_rq_shared_create(void *ctx, struct mlx5_devx_rq *rq_obj,
  * @return
  *   0 on success, a negative errno value otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_rq_create)
 int
 mlx5_devx_rq_create(void *ctx, struct mlx5_devx_rq *rq_obj,
 		    uint32_t wqe_size, uint16_t log_wqbb_n,
@@ -718,6 +726,7 @@ mlx5_devx_rq_create(void *ctx, struct mlx5_devx_rq *rq_obj,
  * @return
  *	 0 on success, a negative errno value otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_qp2rts)
 int
 mlx5_devx_qp2rts(struct mlx5_devx_qp *qp, uint32_t remote_qp_id)
 {
diff --git a/drivers/common/mlx5/mlx5_common_mp.c b/drivers/common/mlx5/mlx5_common_mp.c
index a7a671b7c5..903098a17d 100644
--- a/drivers/common/mlx5/mlx5_common_mp.c
+++ b/drivers/common/mlx5/mlx5_common_mp.c
@@ -24,6 +24,7 @@
  * @return
  *   0 on success, a negative errno value otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_mp_req_mr_create)
 int
 mlx5_mp_req_mr_create(struct mlx5_common_device *cdev, uintptr_t addr)
 {
@@ -63,6 +64,7 @@ mlx5_mp_req_mr_create(struct mlx5_common_device *cdev, uintptr_t addr)
  * @param reg
  *   True to register the mempool, False to unregister.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_mp_req_mempool_reg)
 int
 mlx5_mp_req_mempool_reg(struct mlx5_common_device *cdev,
 			struct rte_mempool *mempool, bool reg,
@@ -113,6 +115,7 @@ mlx5_mp_req_mempool_reg(struct mlx5_common_device *cdev,
  * @return
  *   0 on success, a negative errno value otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_mp_req_queue_state_modify)
 int
 mlx5_mp_req_queue_state_modify(struct mlx5_mp_id *mp_id,
 			       struct mlx5_mp_arg_queue_state_modify *sm)
@@ -151,6 +154,7 @@ mlx5_mp_req_queue_state_modify(struct mlx5_mp_id *mp_id,
  * @return
  *   fd on success, a negative errno value otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_mp_req_verbs_cmd_fd)
 int
 mlx5_mp_req_verbs_cmd_fd(struct mlx5_mp_id *mp_id)
 {
@@ -192,6 +196,7 @@ mlx5_mp_req_verbs_cmd_fd(struct mlx5_mp_id *mp_id)
 /**
  * Initialize by primary process.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_mp_init_primary)
 int
 mlx5_mp_init_primary(const char *name, const rte_mp_t primary_action)
 {
@@ -209,6 +214,7 @@ mlx5_mp_init_primary(const char *name, const rte_mp_t primary_action)
 /**
  * Un-initialize by primary process.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_mp_uninit_primary)
 void
 mlx5_mp_uninit_primary(const char *name)
 {
@@ -219,6 +225,7 @@ mlx5_mp_uninit_primary(const char *name)
 /**
  * Initialize by secondary process.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_mp_init_secondary)
 int
 mlx5_mp_init_secondary(const char *name, const rte_mp_t secondary_action)
 {
@@ -229,6 +236,7 @@ mlx5_mp_init_secondary(const char *name, const rte_mp_t secondary_action)
 /**
  * Un-initialize by secondary process.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_mp_uninit_secondary)
 void
 mlx5_mp_uninit_secondary(const char *name)
 {
diff --git a/drivers/common/mlx5/mlx5_common_mr.c b/drivers/common/mlx5/mlx5_common_mr.c
index 50922ad398..31bfac6220 100644
--- a/drivers/common/mlx5/mlx5_common_mr.c
+++ b/drivers/common/mlx5/mlx5_common_mr.c
@@ -51,6 +51,7 @@ struct mlx5_mempool_reg {
 	bool is_extmem;
 };
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_mprq_buf_free_cb)
 void
 mlx5_mprq_buf_free_cb(void *addr __rte_unused, void *opaque)
 {
@@ -249,6 +250,7 @@ mlx5_mr_btree_init(struct mlx5_mr_btree *bt, int n, int socket)
  * @param bt
  *   Pointer to B-tree structure.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_mr_btree_free)
 void
 mlx5_mr_btree_free(struct mlx5_mr_btree *bt)
 {
@@ -299,6 +301,7 @@ mlx5_mr_btree_dump(struct mlx5_mr_btree *bt __rte_unused)
  * @return
  *   0 on success, a negative errno value otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_mr_ctrl_init)
 int
 mlx5_mr_ctrl_init(struct mlx5_mr_ctrl *mr_ctrl, uint32_t *dev_gen_ptr,
 		  int socket)
@@ -965,6 +968,7 @@ mlx5_mr_create_primary(void *pd,
  * @return
  *   Searched LKey on success, UINT32_MAX on failure and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_mr_create)
 uint32_t
 mlx5_mr_create(struct mlx5_common_device *cdev,
 	       struct mlx5_mr_share_cache *share_cache,
@@ -1059,6 +1063,7 @@ mr_lookup_caches(struct mlx5_mr_ctrl *mr_ctrl,
  * @return
  *   Searched LKey on success, UINT32_MAX on no match.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_mr_addr2mr_bh)
 uint32_t
 mlx5_mr_addr2mr_bh(struct mlx5_mr_ctrl *mr_ctrl, uintptr_t addr)
 {
@@ -1149,6 +1154,7 @@ mlx5_mr_create_cache(struct mlx5_mr_share_cache *share_cache, int socket)
  * @param mr_ctrl
  *   Pointer to per-queue MR local cache.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_mr_flush_local_cache)
 void
 mlx5_mr_flush_local_cache(struct mlx5_mr_ctrl *mr_ctrl)
 {
@@ -1803,6 +1809,7 @@ mlx5_mr_mempool_register_secondary(struct mlx5_common_device *cdev,
  * @return
  *   0 on success, (-1) on failure and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_mr_mempool_register)
 int
 mlx5_mr_mempool_register(struct mlx5_common_device *cdev,
 			 struct rte_mempool *mp, bool is_extmem)
@@ -1868,6 +1875,7 @@ mlx5_mr_mempool_unregister_secondary(struct mlx5_common_device *cdev,
  * @return
  *   0 on success, (-1) on failure and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_mr_mempool_unregister)
 int
 mlx5_mr_mempool_unregister(struct mlx5_common_device *cdev,
 			   struct rte_mempool *mp)
@@ -1979,6 +1987,7 @@ mlx5_lookup_mempool_regs(struct mlx5_mr_ctrl *mr_ctrl,
  * @return
  *  0 on success, (-1) on failure and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_mr_mempool_populate_cache)
 int
 mlx5_mr_mempool_populate_cache(struct mlx5_mr_ctrl *mr_ctrl,
 			       struct rte_mempool *mp)
@@ -2038,6 +2047,7 @@ mlx5_mr_mempool_populate_cache(struct mlx5_mr_ctrl *mr_ctrl,
  * @return
  *   MR lkey on success, UINT32_MAX on failure.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_mr_mempool2mr_bh)
 uint32_t
 mlx5_mr_mempool2mr_bh(struct mlx5_mr_ctrl *mr_ctrl,
 		      struct rte_mempool *mp, uintptr_t addr)
@@ -2064,6 +2074,7 @@ mlx5_mr_mempool2mr_bh(struct mlx5_mr_ctrl *mr_ctrl,
 	return lkey;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_mr_mb2mr_bh)
 uint32_t
 mlx5_mr_mb2mr_bh(struct mlx5_mr_ctrl *mr_ctrl, struct rte_mbuf *mb)
 {
diff --git a/drivers/common/mlx5/mlx5_common_pci.c b/drivers/common/mlx5/mlx5_common_pci.c
index 04aad0963c..d71d9e1dd4 100644
--- a/drivers/common/mlx5/mlx5_common_pci.c
+++ b/drivers/common/mlx5/mlx5_common_pci.c
@@ -102,12 +102,14 @@ pci_ids_table_update(const struct rte_pci_id *driver_id_table)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_dev_is_pci)
 bool
 mlx5_dev_is_pci(const struct rte_device *dev)
 {
 	return strcmp(dev->bus->name, "pci") == 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_dev_is_vf_pci)
 bool
 mlx5_dev_is_vf_pci(const struct rte_pci_device *pci_dev)
 {
diff --git a/drivers/common/mlx5/mlx5_common_utils.c b/drivers/common/mlx5/mlx5_common_utils.c
index 4b95d35d35..51243762a6 100644
--- a/drivers/common/mlx5/mlx5_common_utils.c
+++ b/drivers/common/mlx5/mlx5_common_utils.c
@@ -26,6 +26,7 @@ mlx5_list_init(struct mlx5_list_inconst *l_inconst,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_list_create)
 struct mlx5_list *
 mlx5_list_create(const char *name, void *ctx, bool lcores_share,
 		 mlx5_list_create_cb cb_create,
@@ -120,6 +121,7 @@ _mlx5_list_lookup(struct mlx5_list_inconst *l_inconst,
 	return entry;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_list_lookup)
 struct mlx5_list_entry *
 mlx5_list_lookup(struct mlx5_list *list, void *ctx)
 {
@@ -260,6 +262,7 @@ _mlx5_list_register(struct mlx5_list_inconst *l_inconst,
 	return local_entry;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_list_register)
 struct mlx5_list_entry *
 mlx5_list_register(struct mlx5_list *list, void *ctx)
 {
@@ -319,6 +322,7 @@ _mlx5_list_unregister(struct mlx5_list_inconst *l_inconst,
 	return 1;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_list_unregister)
 int
 mlx5_list_unregister(struct mlx5_list *list,
 		      struct mlx5_list_entry *entry)
@@ -366,6 +370,7 @@ mlx5_list_uninit(struct mlx5_list_inconst *l_inconst,
 	}
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_list_destroy)
 void
 mlx5_list_destroy(struct mlx5_list *list)
 {
@@ -373,6 +378,7 @@ mlx5_list_destroy(struct mlx5_list *list)
 	mlx5_free(list);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_list_get_entry_num)
 uint32_t
 mlx5_list_get_entry_num(struct mlx5_list *list)
 {
@@ -382,6 +388,7 @@ mlx5_list_get_entry_num(struct mlx5_list *list)
 
 /********************* Hash List **********************/
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_hlist_create)
 struct mlx5_hlist *
 mlx5_hlist_create(const char *name, uint32_t size, bool direct_key,
 		  bool lcores_share, void *ctx, mlx5_list_create_cb cb_create,
@@ -447,6 +454,7 @@ mlx5_hlist_create(const char *name, uint32_t size, bool direct_key,
 }
 
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_hlist_lookup)
 struct mlx5_list_entry *
 mlx5_hlist_lookup(struct mlx5_hlist *h, uint64_t key, void *ctx)
 {
@@ -459,6 +467,7 @@ mlx5_hlist_lookup(struct mlx5_hlist *h, uint64_t key, void *ctx)
 	return _mlx5_list_lookup(&h->buckets[idx].l, &h->l_const, ctx);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_hlist_register)
 struct mlx5_list_entry*
 mlx5_hlist_register(struct mlx5_hlist *h, uint64_t key, void *ctx)
 {
@@ -487,6 +496,7 @@ mlx5_hlist_register(struct mlx5_hlist *h, uint64_t key, void *ctx)
 	return entry;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_hlist_unregister)
 int
 mlx5_hlist_unregister(struct mlx5_hlist *h, struct mlx5_list_entry *entry)
 {
@@ -505,6 +515,7 @@ mlx5_hlist_unregister(struct mlx5_hlist *h, struct mlx5_list_entry *entry)
 	return ret;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_hlist_destroy)
 void
 mlx5_hlist_destroy(struct mlx5_hlist *h)
 {
diff --git a/drivers/common/mlx5/mlx5_devx_cmds.c b/drivers/common/mlx5/mlx5_devx_cmds.c
index 440820fd4f..841e95e029 100644
--- a/drivers/common/mlx5/mlx5_devx_cmds.c
+++ b/drivers/common/mlx5/mlx5_devx_cmds.c
@@ -86,6 +86,7 @@ mlx5_devx_get_hca_cap(void *ctx, uint32_t *in, uint32_t *out,
  * @return
  *   0 on success, a negative value otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_register_read)
 int
 mlx5_devx_cmd_register_read(void *ctx, uint16_t reg_id, uint32_t arg,
 			    uint32_t *data, uint32_t dw_cnt)
@@ -136,6 +137,7 @@ mlx5_devx_cmd_register_read(void *ctx, uint16_t reg_id, uint32_t arg,
  * @return
  *   0 on success, a negative value otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_register_write)
 int
 mlx5_devx_cmd_register_write(void *ctx, uint16_t reg_id, uint32_t arg,
 			     uint32_t *data, uint32_t dw_cnt)
@@ -176,6 +178,7 @@ mlx5_devx_cmd_register_write(void *ctx, uint16_t reg_id, uint32_t arg,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_flow_counter_alloc_general)
 struct mlx5_devx_obj *
 mlx5_devx_cmd_flow_counter_alloc_general(void *ctx,
 		struct mlx5_devx_counter_attr *attr)
@@ -225,6 +228,7 @@ mlx5_devx_cmd_flow_counter_alloc_general(void *ctx,
  *   Pointer to counter object on success, a negative value otherwise and
  *   rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_flow_counter_alloc)
 struct mlx5_devx_obj *
 mlx5_devx_cmd_flow_counter_alloc(void *ctx, uint32_t bulk_n_128)
 {
@@ -276,6 +280,7 @@ mlx5_devx_cmd_flow_counter_alloc(void *ctx, uint32_t bulk_n_128)
  * @return
  *   0 on success, a negative value otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_flow_counter_query)
 int
 mlx5_devx_cmd_flow_counter_query(struct mlx5_devx_obj *dcs,
 				 int clear, uint32_t n_counters,
@@ -337,6 +342,7 @@ mlx5_devx_cmd_flow_counter_query(struct mlx5_devx_obj *dcs,
  *   Pointer to Devx mkey on success, a negative value otherwise and rte_errno
  *   is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_mkey_create)
 struct mlx5_devx_obj *
 mlx5_devx_cmd_mkey_create(void *ctx,
 			  struct mlx5_devx_mkey_attr *attr)
@@ -440,6 +446,7 @@ mlx5_devx_cmd_mkey_create(void *ctx,
  * @return
  *   0 on success, non-zero value otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_get_out_command_status)
 int
 mlx5_devx_get_out_command_status(void *out)
 {
@@ -466,6 +473,7 @@ mlx5_devx_get_out_command_status(void *out)
  * @return
  *   0 on success, a negative value otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_destroy)
 int
 mlx5_devx_cmd_destroy(struct mlx5_devx_obj *obj)
 {
@@ -625,6 +633,7 @@ mlx5_devx_cmd_query_hca_vdpa_attr(void *ctx,
  * @return
  *   0 on success, a negative errno otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_match_sample_info_query)
 int
 mlx5_devx_cmd_match_sample_info_query(void *ctx, uint32_t sample_field_id,
 				      struct mlx5_devx_match_sample_info_query_attr *attr)
@@ -662,6 +671,7 @@ mlx5_devx_cmd_match_sample_info_query(void *ctx, uint32_t sample_field_id,
 #endif
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_query_parse_samples)
 int
 mlx5_devx_cmd_query_parse_samples(struct mlx5_devx_obj *flex_obj,
 				  uint32_t *ids,
@@ -716,6 +726,7 @@ mlx5_devx_cmd_query_parse_samples(struct mlx5_devx_obj *flex_obj,
 	return ret;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_create_flex_parser)
 struct mlx5_devx_obj *
 mlx5_devx_cmd_create_flex_parser(void *ctx,
 				 struct mlx5_devx_graph_node_attr *data)
@@ -916,6 +927,7 @@ mlx5_devx_query_pkt_integrity_match(void *hcattr)
  * @return
  *   0 on success, a negative value otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_query_hca_attr)
 int
 mlx5_devx_cmd_query_hca_attr(void *ctx,
 			     struct mlx5_hca_attr *attr)
@@ -1425,6 +1437,7 @@ mlx5_devx_cmd_query_hca_attr(void *ctx,
  * @return
  *   0 on success, a negative value otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_qp_query_tis_td)
 int
 mlx5_devx_cmd_qp_query_tis_td(void *qp, uint32_t tis_num,
 			      uint32_t *tis_td)
@@ -1511,6 +1524,7 @@ devx_cmd_fill_wq_data(void *wq_ctx, struct mlx5_devx_wq_attr *wq_attr)
  * @return
  *   The DevX object created, NULL otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_create_rq)
 struct mlx5_devx_obj *
 mlx5_devx_cmd_create_rq(void *ctx,
 			struct mlx5_devx_create_rq_attr *rq_attr,
@@ -1569,6 +1583,7 @@ mlx5_devx_cmd_create_rq(void *ctx,
  * @return
  *   0 on success, a negative errno value otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_modify_rq)
 int
 mlx5_devx_cmd_modify_rq(struct mlx5_devx_obj *rq,
 			struct mlx5_devx_modify_rq_attr *rq_attr)
@@ -1622,6 +1637,7 @@ mlx5_devx_cmd_modify_rq(struct mlx5_devx_obj *rq,
  * @return
  *   0 if Query successful, else non-zero return value from devx_obj_query API
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_query_rq)
 int
 mlx5_devx_cmd_query_rq(struct mlx5_devx_obj *rq_obj, void *out, size_t outlen)
 {
@@ -1651,6 +1667,7 @@ mlx5_devx_cmd_query_rq(struct mlx5_devx_obj *rq_obj, void *out, size_t outlen)
  * @return
  *   The DevX object created, NULL otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_create_rmp)
 struct mlx5_devx_obj *
 mlx5_devx_cmd_create_rmp(void *ctx,
 			 struct mlx5_devx_create_rmp_attr *rmp_attr,
@@ -1698,6 +1715,7 @@ mlx5_devx_cmd_create_rmp(void *ctx,
  * @return
  *   The DevX object created, NULL otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_create_tir)
 struct mlx5_devx_obj *
 mlx5_devx_cmd_create_tir(void *ctx,
 			 struct mlx5_devx_tir_attr *tir_attr)
@@ -1766,6 +1784,7 @@ mlx5_devx_cmd_create_tir(void *ctx,
  * @return
  *   0 on success, a negative errno value otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_modify_tir)
 int
 mlx5_devx_cmd_modify_tir(struct mlx5_devx_obj *tir,
 			 struct mlx5_devx_modify_tir_attr *modify_tir_attr)
@@ -1850,6 +1869,7 @@ mlx5_devx_cmd_modify_tir(struct mlx5_devx_obj *tir,
  * @return
  *   The DevX object created, NULL otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_create_rqt)
 struct mlx5_devx_obj *
 mlx5_devx_cmd_create_rqt(void *ctx,
 			 struct mlx5_devx_rqt_attr *rqt_attr)
@@ -1904,6 +1924,7 @@ mlx5_devx_cmd_create_rqt(void *ctx,
  * @return
  *   0 on success, a negative errno value otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_modify_rqt)
 int
 mlx5_devx_cmd_modify_rqt(struct mlx5_devx_obj *rqt,
 			 struct mlx5_devx_rqt_attr *rqt_attr)
@@ -1952,6 +1973,7 @@ mlx5_devx_cmd_modify_rqt(struct mlx5_devx_obj *rqt,
  * @return
  *   The DevX object created, NULL otherwise and rte_errno is set.
  **/
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_create_sq)
 struct mlx5_devx_obj *
 mlx5_devx_cmd_create_sq(void *ctx,
 			struct mlx5_devx_create_sq_attr *sq_attr)
@@ -2018,6 +2040,7 @@ mlx5_devx_cmd_create_sq(void *ctx,
  * @return
  *   0 on success, a negative errno value otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_modify_sq)
 int
 mlx5_devx_cmd_modify_sq(struct mlx5_devx_obj *sq,
 			struct mlx5_devx_modify_sq_attr *sq_attr)
@@ -2057,6 +2080,7 @@ mlx5_devx_cmd_modify_sq(struct mlx5_devx_obj *sq,
  * @return
  *   0 if Query successful, else non-zero return value from devx_obj_query API
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_query_sq)
 int
 mlx5_devx_cmd_query_sq(struct mlx5_devx_obj *sq_obj, void *out, size_t outlen)
 {
@@ -2084,6 +2108,7 @@ mlx5_devx_cmd_query_sq(struct mlx5_devx_obj *sq_obj, void *out, size_t outlen)
  * @return
  *   The DevX object created, NULL otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_create_tis)
 struct mlx5_devx_obj *
 mlx5_devx_cmd_create_tis(void *ctx,
 			 struct mlx5_devx_tis_attr *tis_attr)
@@ -2127,6 +2152,7 @@ mlx5_devx_cmd_create_tis(void *ctx,
  * @return
  *   The DevX object created, NULL otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_create_td)
 struct mlx5_devx_obj *
 mlx5_devx_cmd_create_td(void *ctx)
 {
@@ -2169,6 +2195,7 @@ mlx5_devx_cmd_create_td(void *ctx)
  * @return
  *   0 on success, a negative value otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_flow_dump)
 int
 mlx5_devx_cmd_flow_dump(void *fdb_domain __rte_unused,
 			void *rx_domain __rte_unused,
@@ -2194,6 +2221,7 @@ mlx5_devx_cmd_flow_dump(void *fdb_domain __rte_unused,
 	return -ret;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_flow_single_dump)
 int
 mlx5_devx_cmd_flow_single_dump(void *rule_info __rte_unused,
 			FILE *file __rte_unused)
@@ -2219,6 +2247,7 @@ mlx5_devx_cmd_flow_single_dump(void *rule_info __rte_unused,
  * @return
  *   The DevX object created, NULL otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_create_cq)
 struct mlx5_devx_obj *
 mlx5_devx_cmd_create_cq(void *ctx, struct mlx5_devx_cq_attr *attr)
 {
@@ -2287,6 +2316,7 @@ mlx5_devx_cmd_create_cq(void *ctx, struct mlx5_devx_cq_attr *attr)
  * @return
  *   0 if Query successful, else non-zero return value from devx_obj_query API
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_query_cq)
 int
 mlx5_devx_cmd_query_cq(struct mlx5_devx_obj *cq_obj, void *out, size_t outlen)
 {
@@ -2314,6 +2344,7 @@ mlx5_devx_cmd_query_cq(struct mlx5_devx_obj *cq_obj, void *out, size_t outlen)
  * @return
  *   The DevX object created, NULL otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_create_virtq)
 struct mlx5_devx_obj *
 mlx5_devx_cmd_create_virtq(void *ctx,
 			   struct mlx5_devx_virtq_attr *attr)
@@ -2390,6 +2421,7 @@ mlx5_devx_cmd_create_virtq(void *ctx,
  * @return
  *   0 on success, a negative errno value otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_modify_virtq)
 int
 mlx5_devx_cmd_modify_virtq(struct mlx5_devx_obj *virtq_obj,
 			   struct mlx5_devx_virtq_attr *attr)
@@ -2488,6 +2520,7 @@ mlx5_devx_cmd_modify_virtq(struct mlx5_devx_obj *virtq_obj,
  * @return
  *   0 on success, a negative errno value otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_query_virtq)
 int
 mlx5_devx_cmd_query_virtq(struct mlx5_devx_obj *virtq_obj,
 			   struct mlx5_devx_virtq_attr *attr)
@@ -2530,6 +2563,7 @@ mlx5_devx_cmd_query_virtq(struct mlx5_devx_obj *virtq_obj,
  * @return
  *   The DevX object created, NULL otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_create_qp)
 struct mlx5_devx_obj *
 mlx5_devx_cmd_create_qp(void *ctx,
 			struct mlx5_devx_qp_attr *attr)
@@ -2632,6 +2666,7 @@ mlx5_devx_cmd_create_qp(void *ctx,
  * @return
  *   0 on success, a negative errno value otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_modify_qp_state)
 int
 mlx5_devx_cmd_modify_qp_state(struct mlx5_devx_obj *qp, uint32_t qp_st_mod_op,
 			      uint32_t remote_qp_id)
@@ -2709,6 +2744,7 @@ mlx5_devx_cmd_modify_qp_state(struct mlx5_devx_obj *qp, uint32_t qp_st_mod_op,
 	return ret;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_create_virtio_q_counters)
 struct mlx5_devx_obj *
 mlx5_devx_cmd_create_virtio_q_counters(void *ctx)
 {
@@ -2740,6 +2776,7 @@ mlx5_devx_cmd_create_virtio_q_counters(void *ctx)
 	return couners_obj;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_query_virtio_q_counters)
 int
 mlx5_devx_cmd_query_virtio_q_counters(struct mlx5_devx_obj *couners_obj,
 				   struct mlx5_devx_virtio_q_couners_attr *attr)
@@ -2789,6 +2826,7 @@ mlx5_devx_cmd_query_virtio_q_counters(struct mlx5_devx_obj *couners_obj,
  * @return
  *   The DevX object created, NULL otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_create_flow_hit_aso_obj)
 struct mlx5_devx_obj *
 mlx5_devx_cmd_create_flow_hit_aso_obj(void *ctx, uint32_t pd)
 {
@@ -2831,6 +2869,7 @@ mlx5_devx_cmd_create_flow_hit_aso_obj(void *ctx, uint32_t pd)
  * @return
  *   The DevX object created, NULL otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_alloc_pd)
 struct mlx5_devx_obj *
 mlx5_devx_cmd_alloc_pd(void *ctx)
 {
@@ -2871,6 +2910,7 @@ mlx5_devx_cmd_alloc_pd(void *ctx)
  * @return
  *   The DevX object created, NULL otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_create_flow_meter_aso_obj)
 struct mlx5_devx_obj *
 mlx5_devx_cmd_create_flow_meter_aso_obj(void *ctx, uint32_t pd,
 						uint32_t log_obj_size)
@@ -2924,6 +2964,7 @@ mlx5_devx_cmd_create_flow_meter_aso_obj(void *ctx, uint32_t pd,
  * @return
  *   The DevX object created, NULL otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_create_conn_track_offload_obj)
 struct mlx5_devx_obj *
 mlx5_devx_cmd_create_conn_track_offload_obj(void *ctx, uint32_t pd,
 					    uint32_t log_obj_size)
@@ -2970,6 +3011,7 @@ mlx5_devx_cmd_create_conn_track_offload_obj(void *ctx, uint32_t pd,
  * @return
  *   The DevX object created, NULL otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_create_geneve_tlv_option)
 struct mlx5_devx_obj *
 mlx5_devx_cmd_create_geneve_tlv_option(void *ctx,
 				  struct mlx5_devx_geneve_tlv_option_attr *attr)
@@ -3032,6 +3074,7 @@ mlx5_devx_cmd_create_geneve_tlv_option(void *ctx,
  * @return
  *   0 on success, a negative errno otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_query_geneve_tlv_option)
 int
 mlx5_devx_cmd_query_geneve_tlv_option(void *ctx,
 				      struct mlx5_devx_obj *geneve_tlv_opt_obj,
@@ -3069,6 +3112,7 @@ mlx5_devx_cmd_query_geneve_tlv_option(void *ctx,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_wq_query)
 int
 mlx5_devx_cmd_wq_query(void *wq, uint32_t *counter_set_id)
 {
@@ -3109,6 +3153,7 @@ mlx5_devx_cmd_wq_query(void *wq, uint32_t *counter_set_id)
  *   Pointer to counter object on success, a NULL value otherwise and
  *   rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_queue_counter_alloc)
 struct mlx5_devx_obj *
 mlx5_devx_cmd_queue_counter_alloc(void *ctx, int *syndrome)
 {
@@ -3150,6 +3195,7 @@ mlx5_devx_cmd_queue_counter_alloc(void *ctx, int *syndrome)
  * @return
  *   0 on success, a negative value otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_queue_counter_query)
 int
 mlx5_devx_cmd_queue_counter_query(struct mlx5_devx_obj *dcs, int clear,
 				  uint32_t *out_of_buffers)
@@ -3185,6 +3231,7 @@ mlx5_devx_cmd_queue_counter_query(struct mlx5_devx_obj *dcs, int clear,
  * @return
  *   The DevX object created, NULL otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_create_dek_obj)
 struct mlx5_devx_obj *
 mlx5_devx_cmd_create_dek_obj(void *ctx, struct mlx5_devx_dek_attr *attr)
 {
@@ -3235,6 +3282,7 @@ mlx5_devx_cmd_create_dek_obj(void *ctx, struct mlx5_devx_dek_attr *attr)
  * @return
  *   The DevX object created, NULL otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_create_import_kek_obj)
 struct mlx5_devx_obj *
 mlx5_devx_cmd_create_import_kek_obj(void *ctx,
 				    struct mlx5_devx_import_kek_attr *attr)
@@ -3282,6 +3330,7 @@ mlx5_devx_cmd_create_import_kek_obj(void *ctx,
  * @return
  *   The DevX object created, NULL otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_create_credential_obj)
 struct mlx5_devx_obj *
 mlx5_devx_cmd_create_credential_obj(void *ctx,
 				    struct mlx5_devx_credential_attr *attr)
@@ -3330,6 +3379,7 @@ mlx5_devx_cmd_create_credential_obj(void *ctx,
  * @return
  *   The DevX object created, NULL otherwise and rte_errno is set.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_create_crypto_login_obj)
 struct mlx5_devx_obj *
 mlx5_devx_cmd_create_crypto_login_obj(void *ctx,
 				      struct mlx5_devx_crypto_login_attr *attr)
@@ -3381,6 +3431,7 @@ mlx5_devx_cmd_create_crypto_login_obj(void *ctx,
  * @return
  *   0 on success, a negative value otherwise.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_devx_cmd_query_lag)
 int
 mlx5_devx_cmd_query_lag(void *ctx,
 			struct mlx5_devx_lag_context *lag_ctx)
diff --git a/drivers/common/mlx5/mlx5_malloc.c b/drivers/common/mlx5/mlx5_malloc.c
index ef6dabedbd..757a3392d9 100644
--- a/drivers/common/mlx5/mlx5_malloc.c
+++ b/drivers/common/mlx5/mlx5_malloc.c
@@ -161,6 +161,7 @@ mlx5_alloc_align(size_t size, unsigned int align, unsigned int zero)
 	return buf;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_malloc)
 void *
 mlx5_malloc(uint32_t flags, size_t size, unsigned int align, int socket)
 {
@@ -205,6 +206,7 @@ mlx5_malloc(uint32_t flags, size_t size, unsigned int align, int socket)
 	return addr;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_realloc)
 void *
 mlx5_realloc(void *addr, uint32_t flags, size_t size, unsigned int align,
 	     int socket)
@@ -252,6 +254,7 @@ mlx5_realloc(void *addr, uint32_t flags, size_t size, unsigned int align,
 	return new_addr;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_free)
 void
 mlx5_free(void *addr)
 {
@@ -272,6 +275,7 @@ mlx5_free(void *addr)
 	}
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_memory_stat_dump)
 void
 mlx5_memory_stat_dump(void)
 {
diff --git a/drivers/common/mlx5/windows/mlx5_common_os.c b/drivers/common/mlx5/windows/mlx5_common_os.c
index 2b6058eb3e..e78c93b433 100644
--- a/drivers/common/mlx5/windows/mlx5_common_os.c
+++ b/drivers/common/mlx5/windows/mlx5_common_os.c
@@ -281,6 +281,7 @@ mlx5_os_open_device(struct mlx5_common_device *cdev, uint32_t classes)
  * @return
  *   umem on successful registration, NULL and errno otherwise
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_os_umem_reg)
 void *
 mlx5_os_umem_reg(void *ctx, void *addr, size_t size, uint32_t access)
 {
@@ -311,6 +312,7 @@ mlx5_os_umem_reg(void *ctx, void *addr, size_t size, uint32_t access)
  * @return
  *   0 on successful release, negative number otherwise
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_os_umem_dereg)
 int
 mlx5_os_umem_dereg(void *pumem)
 {
@@ -411,6 +413,7 @@ mlx5_os_dereg_mr(struct mlx5_pmd_mr *pmd_mr)
  *   Pointer to dereg_mr func
  *
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_os_set_reg_mr_cb)
 void
 mlx5_os_set_reg_mr_cb(mlx5_reg_mr_t *reg_mr_cb, mlx5_dereg_mr_t *dereg_mr_cb)
 {
@@ -422,6 +425,7 @@ mlx5_os_set_reg_mr_cb(mlx5_reg_mr_t *reg_mr_cb, mlx5_dereg_mr_t *dereg_mr_cb)
  * In Windows, no need to wrap the MR, no known issue for it in kernel.
  * Use the regular function to create direct MR.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_os_wrapped_mkey_create)
 int
 mlx5_os_wrapped_mkey_create(void *ctx, void *pd, uint32_t pdn, void *addr,
 			    size_t length, struct mlx5_pmd_wrapped_mr *wpmd_mr)
@@ -441,6 +445,7 @@ mlx5_os_wrapped_mkey_create(void *ctx, void *pd, uint32_t pdn, void *addr,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_os_wrapped_mkey_destroy)
 void
 mlx5_os_wrapped_mkey_destroy(struct mlx5_pmd_wrapped_mr *wpmd_mr)
 {
diff --git a/drivers/common/mlx5/windows/mlx5_glue.c b/drivers/common/mlx5/windows/mlx5_glue.c
index 6935811bf4..5a7897b8c6 100644
--- a/drivers/common/mlx5/windows/mlx5_glue.c
+++ b/drivers/common/mlx5/windows/mlx5_glue.c
@@ -409,8 +409,7 @@ mlx5_glue_devx_set_mtu(void *ctx, uint32_t mtu)
 
 }
 
-
-
+RTE_EXPORT_INTERNAL_SYMBOL(mlx5_glue)
 alignas(RTE_CACHE_LINE_SIZE)
 const struct mlx5_glue *mlx5_glue = &(const struct mlx5_glue){
 	.version = MLX5_GLUE_VERSION,
diff --git a/drivers/common/mvep/mvep_common.c b/drivers/common/mvep/mvep_common.c
index 67fa65b574..acff8ea2c8 100644
--- a/drivers/common/mvep/mvep_common.c
+++ b/drivers/common/mvep/mvep_common.c
@@ -18,6 +18,7 @@ struct mvep {
 
 static struct mvep mvep;
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_mvep_init)
 int rte_mvep_init(enum mvep_module_type module __rte_unused,
 		  struct rte_kvargs *kvlist __rte_unused)
 {
@@ -34,6 +35,7 @@ int rte_mvep_init(enum mvep_module_type module __rte_unused,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_mvep_deinit)
 int rte_mvep_deinit(enum mvep_module_type module __rte_unused)
 {
 	mvep.ref_count--;
diff --git a/drivers/common/nfp/nfp_common.c b/drivers/common/nfp/nfp_common.c
index 0df8332dfb..267dd57d90 100644
--- a/drivers/common/nfp/nfp_common.c
+++ b/drivers/common/nfp/nfp_common.c
@@ -13,6 +13,7 @@
  */
 #define NFP_NET_POLL_TIMEOUT    5000
 
+RTE_EXPORT_INTERNAL_SYMBOL(nfp_reconfig_real)
 int
 nfp_reconfig_real(struct nfp_hw *hw,
 		uint32_t update)
@@ -77,6 +78,7 @@ nfp_reconfig_real(struct nfp_hw *hw,
  *   - (0) if OK to reconfigure the device.
  *   - (-EIO) if I/O err and fail to reconfigure the device.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(nfp_reconfig)
 int
 nfp_reconfig(struct nfp_hw *hw,
 		uint32_t ctrl,
@@ -121,6 +123,7 @@ nfp_reconfig(struct nfp_hw *hw,
  *   - (0) if OK to reconfigure the device.
  *   - (-EIO) if I/O err and fail to reconfigure the device.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(nfp_ext_reconfig)
 int
 nfp_ext_reconfig(struct nfp_hw *hw,
 		uint32_t ctrl_ext,
@@ -148,6 +151,7 @@ nfp_ext_reconfig(struct nfp_hw *hw,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(nfp_read_mac)
 void
 nfp_read_mac(struct nfp_hw *hw)
 {
@@ -160,6 +164,7 @@ nfp_read_mac(struct nfp_hw *hw)
 	memcpy(&hw->mac_addr.addr_bytes[4], &tmp, 2);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(nfp_write_mac)
 void
 nfp_write_mac(struct nfp_hw *hw,
 		uint8_t *mac)
@@ -176,6 +181,7 @@ nfp_write_mac(struct nfp_hw *hw,
 			hw->ctrl_bar + NFP_NET_CFG_MACADDR + 6);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(nfp_enable_queues)
 void
 nfp_enable_queues(struct nfp_hw *hw,
 		uint16_t nb_rx_queues,
@@ -199,6 +205,7 @@ nfp_enable_queues(struct nfp_hw *hw,
 	nn_cfg_writeq(hw, NFP_NET_CFG_RXRS_ENABLE, enabled_queues);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(nfp_disable_queues)
 void
 nfp_disable_queues(struct nfp_hw *hw)
 {
diff --git a/drivers/common/nfp/nfp_common_pci.c b/drivers/common/nfp/nfp_common_pci.c
index 856f3917a2..c59e215e74 100644
--- a/drivers/common/nfp/nfp_common_pci.c
+++ b/drivers/common/nfp/nfp_common_pci.c
@@ -257,6 +257,7 @@ nfp_common_init(void)
 	nfp_common_initialized = true;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(nfp_class_driver_register)
 void
 nfp_class_driver_register(struct nfp_class_driver *driver)
 {
diff --git a/drivers/common/nfp/nfp_dev.c b/drivers/common/nfp/nfp_dev.c
index f29b7e0711..4e98bf07f5 100644
--- a/drivers/common/nfp/nfp_dev.c
+++ b/drivers/common/nfp/nfp_dev.c
@@ -49,6 +49,7 @@ const struct nfp_dev_info nfp_dev_info[NFP_DEV_CNT] = {
 	},
 };
 
+RTE_EXPORT_INTERNAL_SYMBOL(nfp_dev_info_get)
 const struct nfp_dev_info *
 nfp_dev_info_get(uint16_t device_id)
 {
diff --git a/drivers/common/nitrox/nitrox_device.c b/drivers/common/nitrox/nitrox_device.c
index 6cd57faaa4..9d468e82be 100644
--- a/drivers/common/nitrox/nitrox_device.c
+++ b/drivers/common/nitrox/nitrox_device.c
@@ -64,6 +64,7 @@ ndev_release(struct nitrox_device *ndev)
 TAILQ_HEAD(ndrv_list, nitrox_driver);
 static struct ndrv_list ndrv_list = TAILQ_HEAD_INITIALIZER(ndrv_list);
 
+RTE_EXPORT_INTERNAL_SYMBOL(nitrox_register_driver)
 void
 nitrox_register_driver(struct nitrox_driver *ndrv)
 {
diff --git a/drivers/common/nitrox/nitrox_logs.c b/drivers/common/nitrox/nitrox_logs.c
index 0e0a94648c..af089709b4 100644
--- a/drivers/common/nitrox/nitrox_logs.c
+++ b/drivers/common/nitrox/nitrox_logs.c
@@ -4,4 +4,5 @@
 
 #include <rte_log.h>
 
+RTE_EXPORT_INTERNAL_SYMBOL(nitrox_logtype)
 RTE_LOG_REGISTER_DEFAULT(nitrox_logtype, NOTICE);
diff --git a/drivers/common/nitrox/nitrox_qp.c b/drivers/common/nitrox/nitrox_qp.c
index d6a5ddd641..c01a64a304 100644
--- a/drivers/common/nitrox/nitrox_qp.c
+++ b/drivers/common/nitrox/nitrox_qp.c
@@ -103,6 +103,7 @@ nitrox_release_cmdq(struct nitrox_qp *qp, uint8_t *bar_addr)
 	return rte_memzone_free(qp->cmdq.mz);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(nitrox_qp_setup)
 int
 nitrox_qp_setup(struct nitrox_qp *qp, uint8_t *bar_addr, const char *dev_name,
 		uint32_t nb_descriptors, uint8_t instr_size, int socket_id)
@@ -145,6 +146,7 @@ nitrox_release_ridq(struct nitrox_qp *qp)
 	rte_free(qp->ridq);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(nitrox_qp_release)
 int
 nitrox_qp_release(struct nitrox_qp *qp, uint8_t *bar_addr)
 {
diff --git a/drivers/common/octeontx/octeontx_mbox.c b/drivers/common/octeontx/octeontx_mbox.c
index f98942c79c..2289a17215 100644
--- a/drivers/common/octeontx/octeontx_mbox.c
+++ b/drivers/common/octeontx/octeontx_mbox.c
@@ -69,6 +69,7 @@ struct mbox_intf_ver {
 	uint32_t minor:10;
 };
 
+RTE_EXPORT_INTERNAL_SYMBOL(octeontx_logtype_mbox)
 RTE_LOG_REGISTER(octeontx_logtype_mbox, pmd.octeontx.mbox, NOTICE);
 
 static inline void
@@ -192,6 +193,7 @@ mbox_send(struct mbox *m, struct octeontx_mbox_hdr *hdr, const void *txmsg,
 	return res;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(octeontx_mbox_set_ram_mbox_base)
 int
 octeontx_mbox_set_ram_mbox_base(uint8_t *ram_mbox_base, uint16_t domain)
 {
@@ -216,6 +218,7 @@ octeontx_mbox_set_ram_mbox_base(uint8_t *ram_mbox_base, uint16_t domain)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(octeontx_mbox_set_reg)
 int
 octeontx_mbox_set_reg(uint8_t *reg, uint16_t domain)
 {
@@ -240,6 +243,7 @@ octeontx_mbox_set_reg(uint8_t *reg, uint16_t domain)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(octeontx_mbox_send)
 int
 octeontx_mbox_send(struct octeontx_mbox_hdr *hdr, void *txdata,
 				 uint16_t txlen, void *rxdata, uint16_t rxlen)
@@ -304,6 +308,7 @@ octeontx_check_mbox_version(struct mbox_intf_ver *app_intf_ver,
 	return result;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(octeontx_mbox_init)
 int
 octeontx_mbox_init(void)
 {
@@ -343,6 +348,7 @@ octeontx_mbox_init(void)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(octeontx_get_global_domain)
 uint16_t
 octeontx_get_global_domain(void)
 {
diff --git a/drivers/common/sfc_efx/sfc_efx.c b/drivers/common/sfc_efx/sfc_efx.c
index 458efacba5..1ab9d6a339 100644
--- a/drivers/common/sfc_efx/sfc_efx.c
+++ b/drivers/common/sfc_efx/sfc_efx.c
@@ -35,6 +35,7 @@ sfc_efx_kvarg_dev_class_handler(__rte_unused const char *key,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(sfc_efx_dev_class_get)
 enum sfc_efx_dev_class
 sfc_efx_dev_class_get(struct rte_devargs *devargs)
 {
@@ -93,6 +94,7 @@ sfc_efx_pci_config_readd(efsys_pci_config_t *configp, uint32_t offset,
 	return (rc < 0 || rc != sizeof(*edp)) ? EIO : 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(sfc_efx_family)
 int
 sfc_efx_family(struct rte_pci_device *pci_dev,
 	       efx_bar_region_t *mem_ebrp, efx_family_t *family)
@@ -115,3 +117,274 @@ sfc_efx_family(struct rte_pci_device *pci_dev,
 }
 
 RTE_LOG_REGISTER_DEFAULT(sfc_efx_logtype, NOTICE);
+
+/* Export all base symbols */
+RTE_EXPORT_INTERNAL_SYMBOL(efx_crc32_calculate)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_ev_init)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_evq_size)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_evq_nbufs)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_ev_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_ev_qcreate_irq)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_ev_qcreate)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_ev_qdestroy)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_ev_qprime)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_ev_qpending)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_ev_qcreate_check_init_done)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_ev_qpoll)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_ev_qpost)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_ev_usecs_to_ticks)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_ev_qmoderate)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_evb_init)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_evb_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_evb_vswitch_create)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_evb_vport_mac_set)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_evb_vport_vlan_set)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_evb_vport_reset)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_evb_vswitch_destroy)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_evb_vport_stats)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_filter_insert)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_filter_remove)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_filter_restore)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_filter_init)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_filter_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_filter_supported_filters)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_filter_spec_init_rx)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_filter_spec_init_tx)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_filter_spec_set_ipv4_local)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_filter_spec_set_ipv4_full)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_filter_spec_set_eth_local)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_filter_spec_set_ether_type)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_filter_spec_set_uc_def)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_filter_spec_set_mc_def)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_filter_spec_set_encap_type)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_filter_spec_set_vxlan)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_filter_spec_set_geneve)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_filter_spec_set_nvgre)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_filter_spec_set_rss_context)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_hash_dwords)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_hash_bytes)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_hash_bytes)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_intr_init)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_intr_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_intr_enable)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_intr_disable)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_intr_disable_unlocked)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_intr_trigger)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_intr_status_line)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_intr_status_message)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_intr_fatal)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mac_pdu_set)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mac_pdu_get)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mac_addr_set)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mac_filter_set)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mac_filter_get_all_ucast_mcast)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mac_drain)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mac_up)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mac_fcntl_set)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mac_fcntl_get)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mac_multicast_list_set)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mac_filter_default_rxq_set)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mac_filter_default_rxq_clear)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mac_include_fcs_set)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mac_stat_name)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mac_stats_get_mask)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mac_stats_clear)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mac_stats_upload)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mac_stats_periodic)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mac_stats_update)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_init)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_get_limits)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_match_spec_init)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_match_spec_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_mport_invalid)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_mport_by_phy_port)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_mport_by_pcie_function)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_mport_by_pcie_mh_function)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_mport_id_by_selector)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_match_spec_recirc_id_set)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_match_spec_ct_mark_set)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_mport_by_id)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_match_spec_field_set)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_match_spec_field_get)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_match_spec_bit_set)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_match_spec_mport_set)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_match_spec_clone)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_match_specs_equal)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_match_spec_is_valid)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_set_spec_init)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_set_spec_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_set_populate_decap)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_set_populate_vlan_pop)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_set_populate_set_dst_mac)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_set_populate_set_src_mac)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_set_populate_decr_ip_ttl)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_set_populate_nat)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_set_populate_vlan_push)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_set_populate_encap)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_set_populate_count)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_set_populate_flag)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_set_populate_mark)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_set_populate_mark_reset)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_set_populate_deliver)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_set_populate_drop)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_set_specs_equal)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_match_specs_class_cmp)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_outer_rule_recirc_id_set)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_outer_rule_do_ct_set)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_outer_rule_insert)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_outer_rule_remove)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_match_spec_outer_rule_id_set)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_mac_addr_alloc)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_mac_addr_free)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_set_fill_in_dst_mac_id)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_set_fill_in_src_mac_id)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_encap_header_alloc)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_encap_header_update)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_encap_header_free)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_set_fill_in_eh_id)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_set_alloc)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_set_get_nb_count)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_set_fill_in_counter_id)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_set_clear_fw_rsrc_ids)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_counters_alloc_type)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_counters_alloc)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_counters_free_type)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_counters_free)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_counters_stream_start)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_counters_stream_stop)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_counters_stream_give_credits)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_set_free)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_rule_insert)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_rule_remove)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mcdi_mport_alloc_alias)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_mport_free)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_read_mport_journal)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_set_replay)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_set_list_alloc)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mae_action_set_list_free)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mcdi_init)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mcdi_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mcdi_new_epoch)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mcdi_request_start)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mcdi_request_poll)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mcdi_request_abort)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mcdi_get_client_handle)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mcdi_get_own_client_handle)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mcdi_client_mac_addr_get)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mcdi_client_mac_addr_set)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mcdi_get_timeout)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mcdi_get_proxy_handle)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mcdi_reboot)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mon_name)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mon_init)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_mon_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_family)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_family_probe_bar)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_nic_create)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_nic_probe)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_nic_set_drv_limits)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_nic_set_drv_version)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_nic_get_bar_region)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_nic_get_vi_pool)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_nic_init)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_nic_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_nic_unprobe)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_nic_destroy)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_nic_reset)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_nic_cfg_get)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_nic_get_fw_version)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_nic_get_board_info)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_nic_hw_unavailable)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_nic_set_hw_unavailable)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_loopback_mask)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_nic_calculate_pcie_link_bandwidth)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_nic_get_fw_subvariant)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_nic_set_fw_subvariant)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_nic_check_pcie_link_speed)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_nic_dma_config_add)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_nic_dma_reconfigure)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_nic_dma_map)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_phy_verify)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_phy_adv_cap_get)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_phy_adv_cap_set)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_phy_lp_cap_get)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_phy_oui_get)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_phy_media_type_get)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_phy_module_get_info)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_phy_fec_type_get)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_phy_link_state_get)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_port_init)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_port_poll)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_port_loopback_set)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_loopback_type_name)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_port_vlan_strip_set)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_port_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_rx_init)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_rx_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_rx_scale_hash_flags_get)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_rx_hash_default_support_get)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_rx_scale_default_support_get)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_rx_scale_context_alloc)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_rx_scale_context_alloc_v2)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_rx_scale_context_free)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_rx_scale_mode_set)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_rx_scale_key_set)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_rx_scale_tbl_set)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_rx_qpost)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_rx_qpush)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_rx_qflush)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_rxq_size)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_rxq_nbufs)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_rx_qenable)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_rx_qcreate)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_rx_qcreate_es_super_buffer)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_rx_qdestroy)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_pseudo_hdr_pkt_length_get)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_pseudo_hdr_hash_get)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_rx_prefix_get_layout)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_rx_prefix_layout_check)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_sram_buf_tbl_set)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_sram_buf_tbl_clear)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_table_list)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_table_supported_num_get)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_table_is_supported)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_table_describe)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_table_entry_insert)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_table_entry_delete)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_tunnel_init)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_tunnel_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_tunnel_config_udp_add)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_tunnel_config_udp_remove)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_tunnel_config_clear)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_tunnel_reconfigure)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_tx_init)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_tx_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_txq_size)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_txq_nbufs)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_tx_qcreate)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_tx_qdestroy)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_tx_qpost)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_tx_qpush)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_tx_qpace)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_tx_qflush)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_tx_qenable)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_tx_qpio_enable)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_tx_qpio_disable)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_tx_qpio_write)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_tx_qpio_post)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_tx_qdesc_post)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_tx_qdesc_dma_create)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_tx_qdesc_tso_create)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_tx_qdesc_tso2_create)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_tx_qdesc_vlantci_create)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_tx_qdesc_checksum_create)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_virtio_init)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_virtio_fini)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_virtio_qcreate)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_virtio_qstart)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_virtio_qstop)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_virtio_qdestroy)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_virtio_get_doorbell_offset)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_virtio_get_features)
+RTE_EXPORT_INTERNAL_SYMBOL(efx_virtio_verify_features)
diff --git a/drivers/common/sfc_efx/sfc_efx_mcdi.c b/drivers/common/sfc_efx/sfc_efx_mcdi.c
index 0d17616589..02b67d2236 100644
--- a/drivers/common/sfc_efx/sfc_efx_mcdi.c
+++ b/drivers/common/sfc_efx/sfc_efx_mcdi.c
@@ -264,6 +264,7 @@ sfc_efx_mcdi_ev_proxy_response(void *arg, uint32_t handle, efx_rc_t result)
 	mcdi->proxy_result = result;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(sfc_efx_mcdi_init)
 int
 sfc_efx_mcdi_init(struct sfc_efx_mcdi *mcdi,
 		  uint32_t logtype, const char *log_prefix, efx_nic_t *nic,
@@ -320,6 +321,7 @@ sfc_efx_mcdi_init(struct sfc_efx_mcdi *mcdi,
 	return rc;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(sfc_efx_mcdi_fini)
 void
 sfc_efx_mcdi_fini(struct sfc_efx_mcdi *mcdi)
 {
diff --git a/drivers/crypto/cnxk/cn10k_cryptodev_ops.c b/drivers/crypto/cnxk/cn10k_cryptodev_ops.c
index dbebc5aef1..990211d1c3 100644
--- a/drivers/crypto/cnxk/cn10k_cryptodev_ops.c
+++ b/drivers/crypto/cnxk/cn10k_cryptodev_ops.c
@@ -892,12 +892,14 @@ cn10k_cpt_crypto_adapter_enqueue(void *ws, struct rte_event ev[], uint16_t nb_ev
 	return count;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cn10k_cpt_sg_ver1_crypto_adapter_enqueue)
 uint16_t __rte_hot
 cn10k_cpt_sg_ver1_crypto_adapter_enqueue(void *ws, struct rte_event ev[], uint16_t nb_events)
 {
 	return cn10k_cpt_crypto_adapter_enqueue(ws, ev, nb_events, false);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cn10k_cpt_sg_ver2_crypto_adapter_enqueue)
 uint16_t __rte_hot
 cn10k_cpt_sg_ver2_crypto_adapter_enqueue(void *ws, struct rte_event ev[], uint16_t nb_events)
 {
@@ -1225,6 +1227,7 @@ cn10k_cpt_dequeue_post_process(struct cnxk_cpt_qp *qp, struct rte_crypto_op *cop
 	}
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cn10k_cpt_crypto_adapter_dequeue)
 uintptr_t
 cn10k_cpt_crypto_adapter_dequeue(uintptr_t get_work1)
 {
@@ -1248,6 +1251,7 @@ cn10k_cpt_crypto_adapter_dequeue(uintptr_t get_work1)
 	return (uintptr_t)cop;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cn10k_cpt_crypto_adapter_vector_dequeue)
 uintptr_t
 cn10k_cpt_crypto_adapter_vector_dequeue(uintptr_t get_work1)
 {
@@ -1349,6 +1353,7 @@ cn10k_cpt_dequeue_burst(void *qptr, struct rte_crypto_op **ops, uint16_t nb_ops)
 }
 
 #if defined(RTE_ARCH_ARM64)
+RTE_EXPORT_INTERNAL_SYMBOL(cn10k_cryptodev_sec_inb_rx_inject)
 uint16_t __rte_hot
 cn10k_cryptodev_sec_inb_rx_inject(void *dev, struct rte_mbuf **pkts,
 				  struct rte_security_session **sess, uint16_t nb_pkts)
@@ -1492,6 +1497,7 @@ cn10k_cryptodev_sec_inb_rx_inject(void *dev, struct rte_mbuf **pkts,
 	return count + i;
 }
 #else
+RTE_EXPORT_INTERNAL_SYMBOL(cn10k_cryptodev_sec_inb_rx_inject)
 uint16_t __rte_hot
 cn10k_cryptodev_sec_inb_rx_inject(void *dev, struct rte_mbuf **pkts,
 				  struct rte_security_session **sess, uint16_t nb_pkts)
@@ -1968,6 +1974,7 @@ cn10k_sym_configure_raw_dp_ctx(struct rte_cryptodev *dev, uint16_t qp_id,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cn10k_cryptodev_sec_rx_inject_configure)
 int
 cn10k_cryptodev_sec_rx_inject_configure(void *device, uint16_t port_id, bool enable)
 {
diff --git a/drivers/crypto/cnxk/cn9k_cryptodev_ops.c b/drivers/crypto/cnxk/cn9k_cryptodev_ops.c
index 2b1bd70c6d..99cd84ec2a 100644
--- a/drivers/crypto/cnxk/cn9k_cryptodev_ops.c
+++ b/drivers/crypto/cnxk/cn9k_cryptodev_ops.c
@@ -340,6 +340,7 @@ cn9k_ca_meta_info_extract(struct rte_crypto_op *op,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cn9k_cpt_crypto_adapter_enqueue)
 uint16_t
 cn9k_cpt_crypto_adapter_enqueue(uintptr_t base, struct rte_crypto_op *op)
 {
@@ -592,6 +593,7 @@ cn9k_cpt_dequeue_post_process(struct cnxk_cpt_qp *qp, struct rte_crypto_op *cop,
 	}
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cn9k_cpt_crypto_adapter_dequeue)
 uintptr_t
 cn9k_cpt_crypto_adapter_dequeue(uintptr_t get_work1)
 {
diff --git a/drivers/crypto/cnxk/cnxk_cryptodev_ops.c b/drivers/crypto/cnxk/cnxk_cryptodev_ops.c
index a82db13a8e..0d5c28e247 100644
--- a/drivers/crypto/cnxk/cnxk_cryptodev_ops.c
+++ b/drivers/crypto/cnxk/cnxk_cryptodev_ops.c
@@ -969,6 +969,7 @@ cnxk_cpt_queue_pair_event_error_query(struct rte_cryptodev *dev, uint16_t qp_id)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_cnxk_crypto_qptr_get, 24.03)
 struct rte_pmd_cnxk_crypto_qptr *
 rte_pmd_cnxk_crypto_qptr_get(uint8_t dev_id, uint16_t qp_id)
 {
@@ -1031,6 +1032,7 @@ cnxk_crypto_cn9k_submit(struct rte_pmd_cnxk_crypto_qptr *qptr, void *inst, uint1
 	}
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_cnxk_crypto_submit, 24.03)
 void
 rte_pmd_cnxk_crypto_submit(struct rte_pmd_cnxk_crypto_qptr *qptr, void *inst, uint16_t nb_inst)
 {
@@ -1042,6 +1044,7 @@ rte_pmd_cnxk_crypto_submit(struct rte_pmd_cnxk_crypto_qptr *qptr, void *inst, ui
 	plt_err("Invalid cnxk model");
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_cnxk_crypto_cptr_flush, 24.07)
 int
 rte_pmd_cnxk_crypto_cptr_flush(struct rte_pmd_cnxk_crypto_qptr *qptr,
 			       struct rte_pmd_cnxk_crypto_cptr *cptr, bool invalidate)
@@ -1066,6 +1069,7 @@ rte_pmd_cnxk_crypto_cptr_flush(struct rte_pmd_cnxk_crypto_qptr *qptr,
 	return roc_cpt_lf_ctx_flush(&qp->lf, cptr, invalidate);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_cnxk_crypto_cptr_get, 24.07)
 struct rte_pmd_cnxk_crypto_cptr *
 rte_pmd_cnxk_crypto_cptr_get(struct rte_pmd_cnxk_crypto_sess *rte_sess)
 {
@@ -1113,6 +1117,7 @@ rte_pmd_cnxk_crypto_cptr_get(struct rte_pmd_cnxk_crypto_sess *rte_sess)
 	return NULL;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_cnxk_crypto_cptr_read, 24.07)
 int
 rte_pmd_cnxk_crypto_cptr_read(struct rte_pmd_cnxk_crypto_qptr *qptr,
 			      struct rte_pmd_cnxk_crypto_cptr *cptr, void *data, uint32_t len)
@@ -1146,6 +1151,7 @@ rte_pmd_cnxk_crypto_cptr_read(struct rte_pmd_cnxk_crypto_qptr *qptr,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_cnxk_crypto_cptr_write, 24.07)
 int
 rte_pmd_cnxk_crypto_cptr_write(struct rte_pmd_cnxk_crypto_qptr *qptr,
 			       struct rte_pmd_cnxk_crypto_cptr *cptr, void *data, uint32_t len)
@@ -1183,6 +1189,7 @@ rte_pmd_cnxk_crypto_cptr_write(struct rte_pmd_cnxk_crypto_qptr *qptr,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_cnxk_crypto_qp_stats_get, 24.07)
 int
 rte_pmd_cnxk_crypto_qp_stats_get(struct rte_pmd_cnxk_crypto_qptr *qptr,
 				 struct rte_pmd_cnxk_crypto_qp_stats *stats)
diff --git a/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c b/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c
index 7ad8fd47dd..496efa682d 100644
--- a/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c
+++ b/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c
@@ -4090,6 +4090,7 @@ dpaa2_sec_process_ordered_event(struct qbman_swp *swp,
 	ev->event_ptr = crypto_op;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa2_sec_eventq_attach)
 int
 dpaa2_sec_eventq_attach(const struct rte_cryptodev *dev,
 		int qp_id,
@@ -4170,6 +4171,7 @@ dpaa2_sec_eventq_attach(const struct rte_cryptodev *dev,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa2_sec_eventq_detach)
 int
 dpaa2_sec_eventq_detach(const struct rte_cryptodev *dev,
 			int qp_id)
diff --git a/drivers/crypto/dpaa_sec/dpaa_sec.c b/drivers/crypto/dpaa_sec/dpaa_sec.c
index e117cd77a6..963793f234 100644
--- a/drivers/crypto/dpaa_sec/dpaa_sec.c
+++ b/drivers/crypto/dpaa_sec/dpaa_sec.c
@@ -3510,6 +3510,7 @@ dpaa_sec_process_atomic_event(void *event,
 	return qman_cb_dqrr_defer;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa_sec_eventq_attach)
 int
 dpaa_sec_eventq_attach(const struct rte_cryptodev *dev,
 		int qp_id,
@@ -3554,6 +3555,7 @@ dpaa_sec_eventq_attach(const struct rte_cryptodev *dev,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa_sec_eventq_detach)
 int
 dpaa_sec_eventq_detach(const struct rte_cryptodev *dev,
 			int qp_id)
diff --git a/drivers/crypto/octeontx/otx_cryptodev_ops.c b/drivers/crypto/octeontx/otx_cryptodev_ops.c
index 9a758cd297..05c3896b2b 100644
--- a/drivers/crypto/octeontx/otx_cryptodev_ops.c
+++ b/drivers/crypto/octeontx/otx_cryptodev_ops.c
@@ -656,6 +656,7 @@ submit_request_to_sso(struct ssows *ws, uintptr_t req,
 	ssovf_store_pair(add_work, req, ws->grps[rsp_info->queue_id]);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(otx_crypto_adapter_enqueue)
 uint16_t __rte_hot
 otx_crypto_adapter_enqueue(void *port, struct rte_crypto_op *op)
 {
@@ -946,6 +947,7 @@ otx_cpt_dequeue_sym(void *qptr, struct rte_crypto_op **ops, uint16_t nb_ops)
 	return otx_cpt_pkt_dequeue(qptr, ops, nb_ops, OP_TYPE_SYM);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(otx_crypto_adapter_dequeue)
 uintptr_t __rte_hot
 otx_crypto_adapter_dequeue(uintptr_t get_work1)
 {
diff --git a/drivers/crypto/scheduler/rte_cryptodev_scheduler.c b/drivers/crypto/scheduler/rte_cryptodev_scheduler.c
index 6013f66aa5..a6327cd1b6 100644
--- a/drivers/crypto/scheduler/rte_cryptodev_scheduler.c
+++ b/drivers/crypto/scheduler/rte_cryptodev_scheduler.c
@@ -357,6 +357,7 @@ update_max_nb_qp(struct scheduler_ctx *sched_ctx)
 }
 
 /** Attach a device to the scheduler. */
+RTE_EXPORT_SYMBOL(rte_cryptodev_scheduler_worker_attach)
 int
 rte_cryptodev_scheduler_worker_attach(uint8_t scheduler_id, uint8_t worker_id)
 {
@@ -419,6 +420,7 @@ rte_cryptodev_scheduler_worker_attach(uint8_t scheduler_id, uint8_t worker_id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_scheduler_worker_detach)
 int
 rte_cryptodev_scheduler_worker_detach(uint8_t scheduler_id, uint8_t worker_id)
 {
@@ -477,6 +479,7 @@ rte_cryptodev_scheduler_worker_detach(uint8_t scheduler_id, uint8_t worker_id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_scheduler_mode_set)
 int
 rte_cryptodev_scheduler_mode_set(uint8_t scheduler_id,
 		enum rte_cryptodev_scheduler_mode mode)
@@ -541,6 +544,7 @@ rte_cryptodev_scheduler_mode_set(uint8_t scheduler_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_scheduler_mode_get)
 enum rte_cryptodev_scheduler_mode
 rte_cryptodev_scheduler_mode_get(uint8_t scheduler_id)
 {
@@ -562,6 +566,7 @@ rte_cryptodev_scheduler_mode_get(uint8_t scheduler_id)
 	return sched_ctx->mode;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_scheduler_ordering_set)
 int
 rte_cryptodev_scheduler_ordering_set(uint8_t scheduler_id,
 		uint32_t enable_reorder)
@@ -591,6 +596,7 @@ rte_cryptodev_scheduler_ordering_set(uint8_t scheduler_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_scheduler_ordering_get)
 int
 rte_cryptodev_scheduler_ordering_get(uint8_t scheduler_id)
 {
@@ -612,6 +618,7 @@ rte_cryptodev_scheduler_ordering_get(uint8_t scheduler_id)
 	return (int)sched_ctx->reordering_enabled;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_scheduler_load_user_scheduler)
 int
 rte_cryptodev_scheduler_load_user_scheduler(uint8_t scheduler_id,
 		struct rte_cryptodev_scheduler *scheduler) {
@@ -684,6 +691,7 @@ rte_cryptodev_scheduler_load_user_scheduler(uint8_t scheduler_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_scheduler_workers_get)
 int
 rte_cryptodev_scheduler_workers_get(uint8_t scheduler_id, uint8_t *workers)
 {
@@ -715,6 +723,7 @@ rte_cryptodev_scheduler_workers_get(uint8_t scheduler_id, uint8_t *workers)
 	return (int)nb_workers;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_scheduler_option_set)
 int
 rte_cryptodev_scheduler_option_set(uint8_t scheduler_id,
 		enum rte_cryptodev_schedule_option_type option_type,
@@ -747,6 +756,7 @@ rte_cryptodev_scheduler_option_set(uint8_t scheduler_id,
 	return sched_ctx->ops.option_set(dev, option_type, option);
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_scheduler_option_get)
 int
 rte_cryptodev_scheduler_option_get(uint8_t scheduler_id,
 		enum rte_cryptodev_schedule_option_type option_type,
diff --git a/drivers/dma/cnxk/cnxk_dmadev_fp.c b/drivers/dma/cnxk/cnxk_dmadev_fp.c
index 36fc40c7e0..947ba85ea2 100644
--- a/drivers/dma/cnxk/cnxk_dmadev_fp.c
+++ b/drivers/dma/cnxk/cnxk_dmadev_fp.c
@@ -445,6 +445,7 @@ cnxk_dma_adapter_format_event(uint64_t event)
 	return w0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cn10k_dma_adapter_enqueue)
 uint16_t
 cn10k_dma_adapter_enqueue(void *ws, struct rte_event ev[], uint16_t nb_events)
 {
@@ -504,6 +505,7 @@ cn10k_dma_adapter_enqueue(void *ws, struct rte_event ev[], uint16_t nb_events)
 	return count;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cn9k_dma_adapter_dual_enqueue)
 uint16_t
 cn9k_dma_adapter_dual_enqueue(void *ws, struct rte_event ev[], uint16_t nb_events)
 {
@@ -574,6 +576,7 @@ cn9k_dma_adapter_dual_enqueue(void *ws, struct rte_event ev[], uint16_t nb_event
 	return count;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cn9k_dma_adapter_enqueue)
 uint16_t
 cn9k_dma_adapter_enqueue(void *ws, struct rte_event ev[], uint16_t nb_events)
 {
@@ -641,6 +644,7 @@ cn9k_dma_adapter_enqueue(void *ws, struct rte_event ev[], uint16_t nb_events)
 	return count;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_dma_adapter_dequeue)
 uintptr_t
 cnxk_dma_adapter_dequeue(uintptr_t get_work1)
 {
diff --git a/drivers/event/cnxk/cnxk_worker.c b/drivers/event/cnxk/cnxk_worker.c
index a07c9185d9..222ff759ee 100644
--- a/drivers/event/cnxk/cnxk_worker.c
+++ b/drivers/event/cnxk/cnxk_worker.c
@@ -12,6 +12,7 @@ struct pwords {
 	uint64_t u[5];
 };
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_cnxk_eventdev_wait_head, 23.11)
 void
 rte_pmd_cnxk_eventdev_wait_head(uint8_t dev, uint8_t port)
 {
@@ -28,6 +29,7 @@ rte_pmd_cnxk_eventdev_wait_head(uint8_t dev, uint8_t port)
 }
 
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_cnxk_eventdev_is_head, 23.11)
 uint8_t
 rte_pmd_cnxk_eventdev_is_head(uint8_t dev, uint8_t port)
 {
diff --git a/drivers/event/dlb2/rte_pmd_dlb2.c b/drivers/event/dlb2/rte_pmd_dlb2.c
index 43990e46ac..dc94ec1e82 100644
--- a/drivers/event/dlb2/rte_pmd_dlb2.c
+++ b/drivers/event/dlb2/rte_pmd_dlb2.c
@@ -9,6 +9,7 @@
 #include "dlb2_priv.h"
 #include "dlb2_inline_fns.h"
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_dlb2_set_token_pop_mode, 20.11)
 int
 rte_pmd_dlb2_set_token_pop_mode(uint8_t dev_id,
 				uint8_t port_id,
diff --git a/drivers/mempool/cnxk/cn10k_hwpool_ops.c b/drivers/mempool/cnxk/cn10k_hwpool_ops.c
index b234481ec1..dc03b1165b 100644
--- a/drivers/mempool/cnxk/cn10k_hwpool_ops.c
+++ b/drivers/mempool/cnxk/cn10k_hwpool_ops.c
@@ -200,6 +200,7 @@ cn10k_hwpool_populate(struct rte_mempool *hp, unsigned int max_objs,
 	return hp->size;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_cnxk_mempool_mbuf_exchange, 23.07)
 int
 rte_pmd_cnxk_mempool_mbuf_exchange(struct rte_mbuf *m1, struct rte_mbuf *m2)
 {
@@ -227,12 +228,14 @@ rte_pmd_cnxk_mempool_mbuf_exchange(struct rte_mbuf *m1, struct rte_mbuf *m2)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_cnxk_mempool_is_hwpool, 23.07)
 int
 rte_pmd_cnxk_mempool_is_hwpool(struct rte_mempool *mp)
 {
 	return !!(CNXK_MEMPOOL_FLAGS(mp) & CNXK_MEMPOOL_F_IS_HWPOOL);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_cnxk_mempool_range_check_disable, 23.07)
 int
 rte_pmd_cnxk_mempool_range_check_disable(struct rte_mempool *mp)
 {
diff --git a/drivers/mempool/dpaa/dpaa_mempool.c b/drivers/mempool/dpaa/dpaa_mempool.c
index 74bfcab509..53814c6356 100644
--- a/drivers/mempool/dpaa/dpaa_mempool.c
+++ b/drivers/mempool/dpaa/dpaa_mempool.c
@@ -32,9 +32,11 @@
  * is to optimize the PA_to_VA searches until a better mechanism (algo) is
  * available.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(rte_dpaa_memsegs)
 struct dpaa_memseg_list rte_dpaa_memsegs
 	= TAILQ_HEAD_INITIALIZER(rte_dpaa_memsegs);
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_dpaa_bpid_info)
 struct dpaa_bp_info *rte_dpaa_bpid_info;
 
 RTE_LOG_REGISTER_DEFAULT(dpaa_logtype_mempool, NOTICE);
diff --git a/drivers/mempool/dpaa2/dpaa2_hw_mempool.c b/drivers/mempool/dpaa2/dpaa2_hw_mempool.c
index c054988513..7452ca5d17 100644
--- a/drivers/mempool/dpaa2/dpaa2_hw_mempool.c
+++ b/drivers/mempool/dpaa2/dpaa2_hw_mempool.c
@@ -33,6 +33,7 @@
 
 #include <dpaax_iova_table.h>
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_dpaa2_bpid_info)
 struct dpaa2_bp_info *rte_dpaa2_bpid_info;
 static struct dpaa2_bp_list *h_bp_list;
 
@@ -278,6 +279,7 @@ rte_dpaa2_mbuf_release(struct rte_mempool *pool __rte_unused,
 	}
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_dpaa2_bpid_info_init)
 int rte_dpaa2_bpid_info_init(struct rte_mempool *mp)
 {
 	struct dpaa2_bp_info *bp_info = mempool_to_bpinfo(mp);
@@ -301,6 +303,7 @@ int rte_dpaa2_bpid_info_init(struct rte_mempool *mp)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_dpaa2_mbuf_pool_bpid)
 uint16_t
 rte_dpaa2_mbuf_pool_bpid(struct rte_mempool *mp)
 {
@@ -315,6 +318,7 @@ rte_dpaa2_mbuf_pool_bpid(struct rte_mempool *mp)
 	return bp_info->bpid;
 }
 
+RTE_EXPORT_SYMBOL(rte_dpaa2_mbuf_from_buf_addr)
 struct rte_mbuf *
 rte_dpaa2_mbuf_from_buf_addr(struct rte_mempool *mp, void *buf_addr)
 {
@@ -330,6 +334,7 @@ rte_dpaa2_mbuf_from_buf_addr(struct rte_mempool *mp, void *buf_addr)
 			bp_info->meta_data_size);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_dpaa2_mbuf_alloc_bulk)
 int
 rte_dpaa2_mbuf_alloc_bulk(struct rte_mempool *pool,
 			  void **obj_table, unsigned int count)
diff --git a/drivers/net/atlantic/rte_pmd_atlantic.c b/drivers/net/atlantic/rte_pmd_atlantic.c
index 00fc2872e5..3a86636ba1 100644
--- a/drivers/net/atlantic/rte_pmd_atlantic.c
+++ b/drivers/net/atlantic/rte_pmd_atlantic.c
@@ -8,6 +8,7 @@
 #include "atl_ethdev.h"
 
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_atl_macsec_enable, 19.05)
 int
 rte_pmd_atl_macsec_enable(uint16_t port,
 			  uint8_t encr, uint8_t repl_prot)
@@ -24,6 +25,7 @@ rte_pmd_atl_macsec_enable(uint16_t port,
 	return atl_macsec_enable(dev, encr, repl_prot);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_atl_macsec_disable, 19.05)
 int
 rte_pmd_atl_macsec_disable(uint16_t port)
 {
@@ -39,6 +41,7 @@ rte_pmd_atl_macsec_disable(uint16_t port)
 	return atl_macsec_disable(dev);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_atl_macsec_config_txsc, 19.05)
 int
 rte_pmd_atl_macsec_config_txsc(uint16_t port, uint8_t *mac)
 {
@@ -54,6 +57,7 @@ rte_pmd_atl_macsec_config_txsc(uint16_t port, uint8_t *mac)
 	return atl_macsec_config_txsc(dev, mac);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_atl_macsec_config_rxsc, 19.05)
 int
 rte_pmd_atl_macsec_config_rxsc(uint16_t port, uint8_t *mac, uint16_t pi)
 {
@@ -69,6 +73,7 @@ rte_pmd_atl_macsec_config_rxsc(uint16_t port, uint8_t *mac, uint16_t pi)
 	return atl_macsec_config_rxsc(dev, mac, pi);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_atl_macsec_select_txsa, 19.05)
 int
 rte_pmd_atl_macsec_select_txsa(uint16_t port, uint8_t idx, uint8_t an,
 				 uint32_t pn, uint8_t *key)
@@ -85,6 +90,7 @@ rte_pmd_atl_macsec_select_txsa(uint16_t port, uint8_t idx, uint8_t an,
 	return atl_macsec_select_txsa(dev, idx, an, pn, key);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_atl_macsec_select_rxsa, 19.05)
 int
 rte_pmd_atl_macsec_select_rxsa(uint16_t port, uint8_t idx, uint8_t an,
 				 uint32_t pn, uint8_t *key)
diff --git a/drivers/net/bnxt/rte_pmd_bnxt.c b/drivers/net/bnxt/rte_pmd_bnxt.c
index e9b5739050..2b111fde05 100644
--- a/drivers/net/bnxt/rte_pmd_bnxt.c
+++ b/drivers/net/bnxt/rte_pmd_bnxt.c
@@ -39,6 +39,7 @@ int bnxt_rcv_msg_from_vf(struct bnxt *bp, uint16_t vf_id, void *msg)
 		true : false;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_bnxt_set_tx_loopback)
 int rte_pmd_bnxt_set_tx_loopback(uint16_t port, uint8_t on)
 {
 	struct rte_eth_dev *eth_dev;
@@ -80,6 +81,7 @@ rte_pmd_bnxt_set_all_queues_drop_en_cb(struct bnxt_vnic_info *vnic, void *onptr)
 	vnic->bd_stall = !(*on);
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_bnxt_set_all_queues_drop_en)
 int rte_pmd_bnxt_set_all_queues_drop_en(uint16_t port, uint8_t on)
 {
 	struct rte_eth_dev *eth_dev;
@@ -131,6 +133,7 @@ int rte_pmd_bnxt_set_all_queues_drop_en(uint16_t port, uint8_t on)
 	return rc;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_bnxt_set_vf_mac_addr)
 int rte_pmd_bnxt_set_vf_mac_addr(uint16_t port, uint16_t vf,
 				struct rte_ether_addr *mac_addr)
 {
@@ -171,6 +174,7 @@ int rte_pmd_bnxt_set_vf_mac_addr(uint16_t port, uint16_t vf,
 	return rc;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_bnxt_set_vf_rate_limit)
 int rte_pmd_bnxt_set_vf_rate_limit(uint16_t port, uint16_t vf,
 				uint32_t tx_rate, uint64_t q_msk)
 {
@@ -228,6 +232,7 @@ int rte_pmd_bnxt_set_vf_rate_limit(uint16_t port, uint16_t vf,
 	return rc;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_bnxt_set_vf_mac_anti_spoof)
 int rte_pmd_bnxt_set_vf_mac_anti_spoof(uint16_t port, uint16_t vf, uint8_t on)
 {
 	struct rte_eth_dev_info dev_info;
@@ -288,6 +293,7 @@ int rte_pmd_bnxt_set_vf_mac_anti_spoof(uint16_t port, uint16_t vf, uint8_t on)
 	return rc;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_bnxt_set_vf_vlan_anti_spoof)
 int rte_pmd_bnxt_set_vf_vlan_anti_spoof(uint16_t port, uint16_t vf, uint8_t on)
 {
 	struct rte_eth_dev_info dev_info;
@@ -347,6 +353,7 @@ rte_pmd_bnxt_set_vf_vlan_stripq_cb(struct bnxt_vnic_info *vnic, void *onptr)
 	vnic->vlan_strip = *on;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_bnxt_set_vf_vlan_stripq)
 int
 rte_pmd_bnxt_set_vf_vlan_stripq(uint16_t port, uint16_t vf, uint8_t on)
 {
@@ -390,6 +397,7 @@ rte_pmd_bnxt_set_vf_vlan_stripq(uint16_t port, uint16_t vf, uint8_t on)
 	return rc;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_bnxt_set_vf_rxmode)
 int rte_pmd_bnxt_set_vf_rxmode(uint16_t port, uint16_t vf,
 				uint16_t rx_mask, uint8_t on)
 {
@@ -488,6 +496,7 @@ static int bnxt_set_vf_table(struct bnxt *bp, uint16_t vf)
 	return rc;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_bnxt_set_vf_vlan_filter)
 int rte_pmd_bnxt_set_vf_vlan_filter(uint16_t port, uint16_t vlan,
 				    uint64_t vf_mask, uint8_t vlan_on)
 {
@@ -583,6 +592,7 @@ int rte_pmd_bnxt_set_vf_vlan_filter(uint16_t port, uint16_t vlan,
 	return rc;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_bnxt_get_vf_stats)
 int rte_pmd_bnxt_get_vf_stats(uint16_t port,
 			      uint16_t vf_id,
 			      struct rte_eth_stats *stats)
@@ -620,6 +630,7 @@ int rte_pmd_bnxt_get_vf_stats(uint16_t port,
 				     NULL);
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_bnxt_reset_vf_stats)
 int rte_pmd_bnxt_reset_vf_stats(uint16_t port,
 				uint16_t vf_id)
 {
@@ -655,6 +666,7 @@ int rte_pmd_bnxt_reset_vf_stats(uint16_t port,
 	return bnxt_hwrm_func_clr_stats(bp, bp->pf->first_vf_id + vf_id);
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_bnxt_get_vf_rx_status)
 int rte_pmd_bnxt_get_vf_rx_status(uint16_t port, uint16_t vf_id)
 {
 	struct rte_eth_dev *dev;
@@ -689,6 +701,7 @@ int rte_pmd_bnxt_get_vf_rx_status(uint16_t port, uint16_t vf_id)
 	return bnxt_vf_vnic_count(bp, vf_id);
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_bnxt_get_vf_tx_drop_count)
 int rte_pmd_bnxt_get_vf_tx_drop_count(uint16_t port, uint16_t vf_id,
 				      uint64_t *count)
 {
@@ -725,6 +738,7 @@ int rte_pmd_bnxt_get_vf_tx_drop_count(uint16_t port, uint16_t vf_id,
 					     count);
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_bnxt_mac_addr_add)
 int rte_pmd_bnxt_mac_addr_add(uint16_t port, struct rte_ether_addr *addr,
 				uint32_t vf_id)
 {
@@ -808,6 +822,7 @@ int rte_pmd_bnxt_mac_addr_add(uint16_t port, struct rte_ether_addr *addr,
 	return rc;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_bnxt_set_vf_vlan_insert)
 int
 rte_pmd_bnxt_set_vf_vlan_insert(uint16_t port, uint16_t vf,
 		uint16_t vlan_id)
@@ -853,6 +868,7 @@ rte_pmd_bnxt_set_vf_vlan_insert(uint16_t port, uint16_t vf,
 	return rc;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_bnxt_set_vf_persist_stats)
 int rte_pmd_bnxt_set_vf_persist_stats(uint16_t port, uint16_t vf, uint8_t on)
 {
 	struct rte_eth_dev_info dev_info;
diff --git a/drivers/net/bonding/rte_eth_bond_8023ad.c b/drivers/net/bonding/rte_eth_bond_8023ad.c
index 7f885ab521..97114e65c6 100644
--- a/drivers/net/bonding/rte_eth_bond_8023ad.c
+++ b/drivers/net/bonding/rte_eth_bond_8023ad.c
@@ -1403,6 +1403,7 @@ bond_mode_8023ad_handle_slow_pkt(struct bond_dev_private *internals,
 	rte_pktmbuf_free(pkt);
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_bond_8023ad_conf_get)
 int
 rte_eth_bond_8023ad_conf_get(uint16_t port_id,
 		struct rte_eth_bond_8023ad_conf *conf)
@@ -1420,6 +1421,7 @@ rte_eth_bond_8023ad_conf_get(uint16_t port_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_bond_8023ad_agg_selection_set)
 int
 rte_eth_bond_8023ad_agg_selection_set(uint16_t port_id,
 		enum rte_bond_8023ad_agg_selection agg_selection)
@@ -1444,6 +1446,7 @@ rte_eth_bond_8023ad_agg_selection_set(uint16_t port_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_bond_8023ad_agg_selection_get)
 int rte_eth_bond_8023ad_agg_selection_get(uint16_t port_id)
 {
 	struct rte_eth_dev *bond_dev;
@@ -1491,6 +1494,7 @@ bond_8023ad_setup_validate(uint16_t port_id,
 }
 
 
+RTE_EXPORT_SYMBOL(rte_eth_bond_8023ad_setup)
 int
 rte_eth_bond_8023ad_setup(uint16_t port_id,
 		struct rte_eth_bond_8023ad_conf *conf)
@@ -1512,6 +1516,7 @@ rte_eth_bond_8023ad_setup(uint16_t port_id,
 
 
 
+RTE_EXPORT_SYMBOL(rte_eth_bond_8023ad_member_info)
 int
 rte_eth_bond_8023ad_member_info(uint16_t port_id, uint16_t member_id,
 		struct rte_eth_bond_8023ad_member_info *info)
@@ -1573,6 +1578,7 @@ bond_8023ad_ext_validate(uint16_t port_id, uint16_t member_id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_bond_8023ad_ext_collect)
 int
 rte_eth_bond_8023ad_ext_collect(uint16_t port_id, uint16_t member_id,
 				int enabled)
@@ -1594,6 +1600,7 @@ rte_eth_bond_8023ad_ext_collect(uint16_t port_id, uint16_t member_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_bond_8023ad_ext_distrib)
 int
 rte_eth_bond_8023ad_ext_distrib(uint16_t port_id, uint16_t member_id,
 				int enabled)
@@ -1615,6 +1622,7 @@ rte_eth_bond_8023ad_ext_distrib(uint16_t port_id, uint16_t member_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_bond_8023ad_ext_distrib_get)
 int
 rte_eth_bond_8023ad_ext_distrib_get(uint16_t port_id, uint16_t member_id)
 {
@@ -1629,6 +1637,7 @@ rte_eth_bond_8023ad_ext_distrib_get(uint16_t port_id, uint16_t member_id)
 	return ACTOR_STATE(port, DISTRIBUTING);
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_bond_8023ad_ext_collect_get)
 int
 rte_eth_bond_8023ad_ext_collect_get(uint16_t port_id, uint16_t member_id)
 {
@@ -1643,6 +1652,7 @@ rte_eth_bond_8023ad_ext_collect_get(uint16_t port_id, uint16_t member_id)
 	return ACTOR_STATE(port, COLLECTING);
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_bond_8023ad_ext_slowtx)
 int
 rte_eth_bond_8023ad_ext_slowtx(uint16_t port_id, uint16_t member_id,
 		struct rte_mbuf *lacp_pkt)
@@ -1704,6 +1714,7 @@ bond_mode_8023ad_ext_periodic_cb(void *arg)
 			bond_mode_8023ad_ext_periodic_cb, arg);
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_bond_8023ad_dedicated_queues_enable)
 int
 rte_eth_bond_8023ad_dedicated_queues_enable(uint16_t port)
 {
@@ -1730,6 +1741,7 @@ rte_eth_bond_8023ad_dedicated_queues_enable(uint16_t port)
 	return retval;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_bond_8023ad_dedicated_queues_disable)
 int
 rte_eth_bond_8023ad_dedicated_queues_disable(uint16_t port)
 {
diff --git a/drivers/net/bonding/rte_eth_bond_api.c b/drivers/net/bonding/rte_eth_bond_api.c
index ffc1322047..11a0551d80 100644
--- a/drivers/net/bonding/rte_eth_bond_api.c
+++ b/drivers/net/bonding/rte_eth_bond_api.c
@@ -149,6 +149,7 @@ deactivate_member(struct rte_eth_dev *eth_dev, uint16_t port_id)
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_bond_create)
 int
 rte_eth_bond_create(const char *name, uint8_t mode, uint8_t socket_id)
 {
@@ -187,6 +188,7 @@ rte_eth_bond_create(const char *name, uint8_t mode, uint8_t socket_id)
 	return bond_dev->data->port_id;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_bond_free)
 int
 rte_eth_bond_free(const char *name)
 {
@@ -631,6 +633,7 @@ __eth_bond_member_add_lock_free(uint16_t bonding_port_id, uint16_t member_port_i
 
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_bond_member_add)
 int
 rte_eth_bond_member_add(uint16_t bonding_port_id, uint16_t member_port_id)
 {
@@ -769,6 +772,7 @@ __eth_bond_member_remove_lock_free(uint16_t bonding_port_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_bond_member_remove)
 int
 rte_eth_bond_member_remove(uint16_t bonding_port_id, uint16_t member_port_id)
 {
@@ -791,6 +795,7 @@ rte_eth_bond_member_remove(uint16_t bonding_port_id, uint16_t member_port_id)
 	return retval;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_bond_mode_set)
 int
 rte_eth_bond_mode_set(uint16_t bonding_port_id, uint8_t mode)
 {
@@ -808,6 +813,7 @@ rte_eth_bond_mode_set(uint16_t bonding_port_id, uint8_t mode)
 	return bond_ethdev_mode_set(bonding_eth_dev, mode);
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_bond_mode_get)
 int
 rte_eth_bond_mode_get(uint16_t bonding_port_id)
 {
@@ -821,6 +827,7 @@ rte_eth_bond_mode_get(uint16_t bonding_port_id)
 	return internals->mode;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_bond_primary_set)
 int
 rte_eth_bond_primary_set(uint16_t bonding_port_id, uint16_t member_port_id)
 {
@@ -842,6 +849,7 @@ rte_eth_bond_primary_set(uint16_t bonding_port_id, uint16_t member_port_id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_bond_primary_get)
 int
 rte_eth_bond_primary_get(uint16_t bonding_port_id)
 {
@@ -858,6 +866,7 @@ rte_eth_bond_primary_get(uint16_t bonding_port_id)
 	return internals->current_primary_port;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_bond_members_get)
 int
 rte_eth_bond_members_get(uint16_t bonding_port_id, uint16_t members[],
 			uint16_t len)
@@ -882,6 +891,7 @@ rte_eth_bond_members_get(uint16_t bonding_port_id, uint16_t members[],
 	return internals->member_count;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_bond_active_members_get)
 int
 rte_eth_bond_active_members_get(uint16_t bonding_port_id, uint16_t members[],
 		uint16_t len)
@@ -905,6 +915,7 @@ rte_eth_bond_active_members_get(uint16_t bonding_port_id, uint16_t members[],
 	return internals->active_member_count;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_bond_mac_address_set)
 int
 rte_eth_bond_mac_address_set(uint16_t bonding_port_id,
 		struct rte_ether_addr *mac_addr)
@@ -931,6 +942,7 @@ rte_eth_bond_mac_address_set(uint16_t bonding_port_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_bond_mac_address_reset)
 int
 rte_eth_bond_mac_address_reset(uint16_t bonding_port_id)
 {
@@ -972,6 +984,7 @@ rte_eth_bond_mac_address_reset(uint16_t bonding_port_id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_bond_xmit_policy_set)
 int
 rte_eth_bond_xmit_policy_set(uint16_t bonding_port_id, uint8_t policy)
 {
@@ -1002,6 +1015,7 @@ rte_eth_bond_xmit_policy_set(uint16_t bonding_port_id, uint8_t policy)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_bond_xmit_policy_get)
 int
 rte_eth_bond_xmit_policy_get(uint16_t bonding_port_id)
 {
@@ -1015,6 +1029,7 @@ rte_eth_bond_xmit_policy_get(uint16_t bonding_port_id)
 	return internals->balance_xmit_policy;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_bond_link_monitoring_set)
 int
 rte_eth_bond_link_monitoring_set(uint16_t bonding_port_id, uint32_t internal_ms)
 {
diff --git a/drivers/net/cnxk/cnxk_ethdev.c b/drivers/net/cnxk/cnxk_ethdev.c
index 289ae96afa..70fc7d90fa 100644
--- a/drivers/net/cnxk/cnxk_ethdev.c
+++ b/drivers/net/cnxk/cnxk_ethdev.c
@@ -12,6 +12,7 @@ cnxk_ethdev_rx_offload_cb_t cnxk_ethdev_rx_offload_cb;
 
 #define NIX_TM_DFLT_RR_WT 71
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_cnxk_model_str_get, 23.11)
 const char *
 rte_pmd_cnxk_model_str_get(void)
 {
@@ -87,12 +88,14 @@ nix_inl_cq_sz_clamp_up(struct roc_nix *nix, struct rte_mempool *mp,
 	return nb_desc;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_ethdev_rx_offload_cb_register)
 void
 cnxk_ethdev_rx_offload_cb_register(cnxk_ethdev_rx_offload_cb_t cb)
 {
 	cnxk_ethdev_rx_offload_cb = cb;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cnxk_nix_inb_mode_set)
 int
 cnxk_nix_inb_mode_set(struct cnxk_eth_dev *dev, bool use_inl_dev)
 {
diff --git a/drivers/net/cnxk/cnxk_ethdev_sec.c b/drivers/net/cnxk/cnxk_ethdev_sec.c
index 6f0340ec0f..48508d19ec 100644
--- a/drivers/net/cnxk/cnxk_ethdev_sec.c
+++ b/drivers/net/cnxk/cnxk_ethdev_sec.c
@@ -305,18 +305,21 @@ cnxk_eth_sec_sess_get_by_sess(struct cnxk_eth_dev *dev,
 	return NULL;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_cnxk_inl_dev_submit, 23.11)
 uint16_t
 rte_pmd_cnxk_inl_dev_submit(struct rte_pmd_cnxk_inl_dev_q *qptr, void *inst, uint16_t nb_inst)
 {
 	return cnxk_pmd_ops.inl_dev_submit((struct roc_nix_inl_dev_q *)qptr, inst, nb_inst);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_cnxk_inl_dev_qptr_get, 23.11)
 struct rte_pmd_cnxk_inl_dev_q *
 rte_pmd_cnxk_inl_dev_qptr_get(void)
 {
 	return roc_nix_inl_dev_qptr_get(0);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_cnxk_cpt_q_stats_get, 23.11)
 int
 rte_pmd_cnxk_cpt_q_stats_get(uint16_t portid, enum rte_pmd_cnxk_cpt_q_stats_type type,
 			     struct rte_pmd_cnxk_cpt_q_stats *stats, uint16_t idx)
@@ -328,6 +331,7 @@ rte_pmd_cnxk_cpt_q_stats_get(uint16_t portid, enum rte_pmd_cnxk_cpt_q_stats_type
 					    (struct roc_nix_cpt_lf_stats *)stats, idx);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_cnxk_hw_session_base_get, 23.11)
 union rte_pmd_cnxk_ipsec_hw_sa *
 rte_pmd_cnxk_hw_session_base_get(uint16_t portid, bool inb)
 {
@@ -343,6 +347,7 @@ rte_pmd_cnxk_hw_session_base_get(uint16_t portid, bool inb)
 	return (union rte_pmd_cnxk_ipsec_hw_sa *)sa_base;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_cnxk_sa_flush, 23.11)
 int
 rte_pmd_cnxk_sa_flush(uint16_t portid, union rte_pmd_cnxk_ipsec_hw_sa *sess, bool inb)
 {
@@ -352,6 +357,7 @@ rte_pmd_cnxk_sa_flush(uint16_t portid, union rte_pmd_cnxk_ipsec_hw_sa *sess, boo
 	return roc_nix_inl_sa_sync(&dev->nix, sess, inb, ROC_NIX_INL_SA_OP_FLUSH);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_cnxk_hw_sa_read, 22.07)
 int
 rte_pmd_cnxk_hw_sa_read(uint16_t portid, void *sess, union rte_pmd_cnxk_ipsec_hw_sa *data,
 			uint32_t len, bool inb)
@@ -377,6 +383,7 @@ rte_pmd_cnxk_hw_sa_read(uint16_t portid, void *sess, union rte_pmd_cnxk_ipsec_hw
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_cnxk_hw_sa_write, 22.07)
 int
 rte_pmd_cnxk_hw_sa_write(uint16_t portid, void *sess, union rte_pmd_cnxk_ipsec_hw_sa *data,
 			 uint32_t len, bool inb)
@@ -400,6 +407,7 @@ rte_pmd_cnxk_hw_sa_write(uint16_t portid, void *sess, union rte_pmd_cnxk_ipsec_h
 	return roc_nix_inl_ctx_write(&dev->nix, data, sa, inb, len);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_cnxk_inl_ipsec_res, 23.11)
 union rte_pmd_cnxk_cpt_res_s *
 rte_pmd_cnxk_inl_ipsec_res(struct rte_mbuf *mbuf)
 {
@@ -418,6 +426,7 @@ rte_pmd_cnxk_inl_ipsec_res(struct rte_mbuf *mbuf)
 	return (void *)(wqe + 64 + desc_size);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_cnxk_hw_inline_inb_cfg_set, 23.11)
 void
 rte_pmd_cnxk_hw_inline_inb_cfg_set(uint16_t portid, struct rte_pmd_cnxk_ipsec_inb_cfg *cfg)
 {
diff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c
index ce4bbbb8f0..d00e7df63b 100644
--- a/drivers/net/dpaa/dpaa_ethdev.c
+++ b/drivers/net/dpaa/dpaa_ethdev.c
@@ -1294,6 +1294,7 @@ int dpaa_eth_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa_eth_eventq_attach)
 int
 dpaa_eth_eventq_attach(const struct rte_eth_dev *dev,
 		int eth_rx_queue_id,
@@ -1359,6 +1360,7 @@ dpaa_eth_eventq_attach(const struct rte_eth_dev *dev,
 	return ret;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa_eth_eventq_detach)
 int
 dpaa_eth_eventq_detach(const struct rte_eth_dev *dev,
 		int eth_rx_queue_id)
@@ -1800,6 +1802,7 @@ is_dpaa_supported(struct rte_eth_dev *dev)
 	return is_device_supported(dev, &rte_dpaa_pmd);
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_dpaa_set_tx_loopback)
 int
 rte_pmd_dpaa_set_tx_loopback(uint16_t port, uint8_t on)
 {
diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c
index 8624bba0ce..87d199981c 100644
--- a/drivers/net/dpaa2/dpaa2_ethdev.c
+++ b/drivers/net/dpaa2/dpaa2_ethdev.c
@@ -2239,6 +2239,7 @@ dpaa2_dev_rss_hash_conf_get(struct rte_eth_dev *dev,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa2_eth_eventq_attach)
 int dpaa2_eth_eventq_attach(const struct rte_eth_dev *dev,
 		int eth_rx_queue_id,
 		struct dpaa2_dpcon_dev *dpcon,
@@ -2325,6 +2326,7 @@ int dpaa2_eth_eventq_attach(const struct rte_eth_dev *dev,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa2_eth_eventq_detach)
 int dpaa2_eth_eventq_detach(const struct rte_eth_dev *dev,
 		int eth_rx_queue_id)
 {
@@ -2410,6 +2412,7 @@ dpaa2_tm_ops_get(struct rte_eth_dev *dev __rte_unused, void *ops)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_dpaa2_thread_init, 21.08)
 void
 rte_pmd_dpaa2_thread_init(void)
 {
@@ -2850,6 +2853,7 @@ dpaa2_dev_init(struct rte_eth_dev *eth_dev)
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_dpaa2_dev_is_dpaa2, 24.11)
 int
 rte_pmd_dpaa2_dev_is_dpaa2(uint32_t eth_id)
 {
@@ -2865,6 +2869,7 @@ rte_pmd_dpaa2_dev_is_dpaa2(uint32_t eth_id)
 	return dev->device->driver == &rte_dpaa2_pmd.driver;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_dpaa2_ep_name, 24.11)
 const char *
 rte_pmd_dpaa2_ep_name(uint32_t eth_id)
 {
@@ -2890,6 +2895,7 @@ rte_pmd_dpaa2_ep_name(uint32_t eth_id)
 }
 
 #if defined(RTE_LIBRTE_IEEE1588)
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_dpaa2_get_one_step_ts, 24.11)
 int
 rte_pmd_dpaa2_get_one_step_ts(uint16_t port_id, bool mc_query)
 {
@@ -2918,6 +2924,7 @@ rte_pmd_dpaa2_get_one_step_ts(uint16_t port_id, bool mc_query)
 	return priv->ptp_correction_offset;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_dpaa2_set_one_step_ts, 24.11)
 int
 rte_pmd_dpaa2_set_one_step_ts(uint16_t port_id, uint16_t offset, uint8_t ch_update)
 {
@@ -3067,3 +3074,7 @@ RTE_PMD_REGISTER_PARAM_STRING(NET_DPAA2_PMD_DRIVER_NAME,
 		DRIVER_TX_CONF "=<int>"
 		DRIVER_ERROR_QUEUE "=<int>");
 RTE_LOG_REGISTER_DEFAULT(dpaa2_logtype_pmd, NOTICE);
+
+/* Export all base symbols */
+RTE_EXPORT_SYMBOL(rte_pmd_dpaa2_set_custom_hash)
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_dpaa2_get_tlu_hash, 21.11)
diff --git a/drivers/net/dpaa2/dpaa2_mux.c b/drivers/net/dpaa2/dpaa2_mux.c
index 2f124313fa..c746badc61 100644
--- a/drivers/net/dpaa2/dpaa2_mux.c
+++ b/drivers/net/dpaa2/dpaa2_mux.c
@@ -54,6 +54,7 @@ static struct dpaa2_dpdmux_dev *get_dpdmux_from_id(uint32_t dpdmux_id)
 	return dpdmux_dev;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_dpaa2_mux_flow_create)
 int
 rte_pmd_dpaa2_mux_flow_create(uint32_t dpdmux_id,
 	struct rte_flow_item pattern[],
@@ -364,6 +365,7 @@ rte_pmd_dpaa2_mux_flow_l2(uint32_t dpdmux_id,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_dpaa2_mux_rx_frame_len, 21.05)
 int
 rte_pmd_dpaa2_mux_rx_frame_len(uint32_t dpdmux_id, uint16_t max_rx_frame_len)
 {
@@ -391,6 +393,7 @@ rte_pmd_dpaa2_mux_rx_frame_len(uint32_t dpdmux_id, uint16_t max_rx_frame_len)
 }
 
 /* dump the status of the dpaa2_mux counters on the console */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_dpaa2_mux_dump_counter, 24.11)
 void
 rte_pmd_dpaa2_mux_dump_counter(FILE *f, uint32_t dpdmux_id, int num_if)
 {
diff --git a/drivers/net/dpaa2/dpaa2_rxtx.c b/drivers/net/dpaa2/dpaa2_rxtx.c
index cad15d8f75..2c916c52fc 100644
--- a/drivers/net/dpaa2/dpaa2_rxtx.c
+++ b/drivers/net/dpaa2/dpaa2_rxtx.c
@@ -1580,6 +1580,7 @@ dpaa2_set_enqueue_descriptor(struct dpaa2_queue *dpaa2_q,
 	*dpaa2_seqn(m) = DPAA2_INVALID_MBUF_SEQN;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(dpaa2_dev_tx_multi_txq_ordered)
 uint16_t
 dpaa2_dev_tx_multi_txq_ordered(void **queue,
 		struct rte_mbuf **bufs, uint16_t nb_pkts)
diff --git a/drivers/net/intel/i40e/rte_pmd_i40e.c b/drivers/net/intel/i40e/rte_pmd_i40e.c
index 9d39984ea1..c1ec1cb931 100644
--- a/drivers/net/intel/i40e/rte_pmd_i40e.c
+++ b/drivers/net/intel/i40e/rte_pmd_i40e.c
@@ -13,6 +13,7 @@
 #include "i40e_rxtx.h"
 #include "rte_pmd_i40e.h"
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_ping_vfs)
 int
 rte_pmd_i40e_ping_vfs(uint16_t port, uint16_t vf)
 {
@@ -38,6 +39,7 @@ rte_pmd_i40e_ping_vfs(uint16_t port, uint16_t vf)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_set_vf_mac_anti_spoof)
 int
 rte_pmd_i40e_set_vf_mac_anti_spoof(uint16_t port, uint16_t vf_id, uint8_t on)
 {
@@ -142,6 +144,7 @@ i40e_add_rm_all_vlan_filter(struct i40e_vsi *vsi, uint8_t add)
 	return I40E_SUCCESS;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_set_vf_vlan_anti_spoof)
 int
 rte_pmd_i40e_set_vf_vlan_anti_spoof(uint16_t port, uint16_t vf_id, uint8_t on)
 {
@@ -402,6 +405,7 @@ i40e_vsi_set_tx_loopback(struct i40e_vsi *vsi, uint8_t on)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_set_tx_loopback)
 int
 rte_pmd_i40e_set_tx_loopback(uint16_t port, uint8_t on)
 {
@@ -445,6 +449,7 @@ rte_pmd_i40e_set_tx_loopback(uint16_t port, uint8_t on)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_set_vf_unicast_promisc)
 int
 rte_pmd_i40e_set_vf_unicast_promisc(uint16_t port, uint16_t vf_id, uint8_t on)
 {
@@ -486,6 +491,7 @@ rte_pmd_i40e_set_vf_unicast_promisc(uint16_t port, uint16_t vf_id, uint8_t on)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_set_vf_multicast_promisc)
 int
 rte_pmd_i40e_set_vf_multicast_promisc(uint16_t port, uint16_t vf_id, uint8_t on)
 {
@@ -527,6 +533,7 @@ rte_pmd_i40e_set_vf_multicast_promisc(uint16_t port, uint16_t vf_id, uint8_t on)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_set_vf_mac_addr)
 int
 rte_pmd_i40e_set_vf_mac_addr(uint16_t port, uint16_t vf_id,
 			     struct rte_ether_addr *mac_addr)
@@ -617,6 +624,7 @@ rte_pmd_i40e_remove_vf_mac_addr(uint16_t port, uint16_t vf_id,
 }
 
 /* Set vlan strip on/off for specific VF from host */
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_set_vf_vlan_stripq)
 int
 rte_pmd_i40e_set_vf_vlan_stripq(uint16_t port, uint16_t vf_id, uint8_t on)
 {
@@ -653,6 +661,7 @@ rte_pmd_i40e_set_vf_vlan_stripq(uint16_t port, uint16_t vf_id, uint8_t on)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_set_vf_vlan_insert)
 int rte_pmd_i40e_set_vf_vlan_insert(uint16_t port, uint16_t vf_id,
 				    uint16_t vlan_id)
 {
@@ -718,6 +727,7 @@ int rte_pmd_i40e_set_vf_vlan_insert(uint16_t port, uint16_t vf_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_set_vf_broadcast)
 int rte_pmd_i40e_set_vf_broadcast(uint16_t port, uint16_t vf_id,
 				  uint8_t on)
 {
@@ -784,6 +794,7 @@ int rte_pmd_i40e_set_vf_broadcast(uint16_t port, uint16_t vf_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_set_vf_vlan_tag)
 int rte_pmd_i40e_set_vf_vlan_tag(uint16_t port, uint16_t vf_id, uint8_t on)
 {
 	struct rte_eth_dev *dev;
@@ -878,6 +889,7 @@ i40e_vlan_filter_count(struct i40e_vsi *vsi)
 	return count;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_set_vf_vlan_filter)
 int rte_pmd_i40e_set_vf_vlan_filter(uint16_t port, uint16_t vlan_id,
 				    uint64_t vf_mask, uint8_t on)
 {
@@ -960,6 +972,7 @@ int rte_pmd_i40e_set_vf_vlan_filter(uint16_t port, uint16_t vlan_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_get_vf_stats)
 int
 rte_pmd_i40e_get_vf_stats(uint16_t port,
 			  uint16_t vf_id,
@@ -1005,6 +1018,7 @@ rte_pmd_i40e_get_vf_stats(uint16_t port,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_reset_vf_stats)
 int
 rte_pmd_i40e_reset_vf_stats(uint16_t port,
 			    uint16_t vf_id)
@@ -1039,6 +1053,7 @@ rte_pmd_i40e_reset_vf_stats(uint16_t port,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_set_vf_max_bw)
 int
 rte_pmd_i40e_set_vf_max_bw(uint16_t port, uint16_t vf_id, uint32_t bw)
 {
@@ -1128,6 +1143,7 @@ rte_pmd_i40e_set_vf_max_bw(uint16_t port, uint16_t vf_id, uint32_t bw)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_set_vf_tc_bw_alloc)
 int
 rte_pmd_i40e_set_vf_tc_bw_alloc(uint16_t port, uint16_t vf_id,
 				uint8_t tc_num, uint8_t *bw_weight)
@@ -1242,6 +1258,7 @@ rte_pmd_i40e_set_vf_tc_bw_alloc(uint16_t port, uint16_t vf_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_set_vf_tc_max_bw)
 int
 rte_pmd_i40e_set_vf_tc_max_bw(uint16_t port, uint16_t vf_id,
 			      uint8_t tc_no, uint32_t bw)
@@ -1360,6 +1377,7 @@ rte_pmd_i40e_set_vf_tc_max_bw(uint16_t port, uint16_t vf_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_set_tc_strict_prio)
 int
 rte_pmd_i40e_set_tc_strict_prio(uint16_t port, uint8_t tc_map)
 {
@@ -1605,6 +1623,7 @@ i40e_check_profile_info(uint16_t port, uint8_t *profile_info_sec)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_process_ddp_package)
 int
 rte_pmd_i40e_process_ddp_package(uint16_t port, uint8_t *buff,
 				 uint32_t size,
@@ -1789,6 +1808,7 @@ i40e_get_tlv_section_size(struct i40e_profile_section_header *sec)
 	return nb_tlv;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_get_ddp_info)
 int rte_pmd_i40e_get_ddp_info(uint8_t *pkg_buff, uint32_t pkg_size,
 	uint8_t *info_buff, uint32_t info_size,
 	enum rte_pmd_i40e_package_info type)
@@ -2097,6 +2117,7 @@ int rte_pmd_i40e_get_ddp_info(uint8_t *pkg_buff, uint32_t pkg_size,
 	return -EINVAL;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_get_ddp_list)
 int
 rte_pmd_i40e_get_ddp_list(uint16_t port, uint8_t *buff, uint32_t size)
 {
@@ -2228,6 +2249,7 @@ static int check_invalid_ptype_mapping(
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_ptype_mapping_update)
 int
 rte_pmd_i40e_ptype_mapping_update(
 			uint16_t port,
@@ -2266,6 +2288,7 @@ rte_pmd_i40e_ptype_mapping_update(
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_ptype_mapping_reset)
 int rte_pmd_i40e_ptype_mapping_reset(uint16_t port)
 {
 	struct rte_eth_dev *dev;
@@ -2282,6 +2305,7 @@ int rte_pmd_i40e_ptype_mapping_reset(uint16_t port)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_ptype_mapping_get)
 int rte_pmd_i40e_ptype_mapping_get(
 			uint16_t port,
 			struct rte_pmd_i40e_ptype_mapping *mapping_items,
@@ -2317,6 +2341,7 @@ int rte_pmd_i40e_ptype_mapping_get(
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_ptype_mapping_replace)
 int rte_pmd_i40e_ptype_mapping_replace(uint16_t port,
 				       uint32_t target,
 				       uint8_t mask,
@@ -2355,6 +2380,7 @@ int rte_pmd_i40e_ptype_mapping_replace(uint16_t port,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_add_vf_mac_addr)
 int
 rte_pmd_i40e_add_vf_mac_addr(uint16_t port, uint16_t vf_id,
 			     struct rte_ether_addr *mac_addr)
@@ -2402,6 +2428,7 @@ rte_pmd_i40e_add_vf_mac_addr(uint16_t port, uint16_t vf_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_flow_type_mapping_reset)
 int rte_pmd_i40e_flow_type_mapping_reset(uint16_t port)
 {
 	struct rte_eth_dev *dev;
@@ -2418,6 +2445,7 @@ int rte_pmd_i40e_flow_type_mapping_reset(uint16_t port)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_flow_type_mapping_get)
 int rte_pmd_i40e_flow_type_mapping_get(
 			uint16_t port,
 			struct rte_pmd_i40e_flow_type_mapping *mapping_items)
@@ -2443,6 +2471,7 @@ int rte_pmd_i40e_flow_type_mapping_get(
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_flow_type_mapping_update)
 int
 rte_pmd_i40e_flow_type_mapping_update(
 			uint16_t port,
@@ -2496,6 +2525,7 @@ rte_pmd_i40e_flow_type_mapping_update(
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_query_vfid_by_mac)
 int
 rte_pmd_i40e_query_vfid_by_mac(uint16_t port,
 			const struct rte_ether_addr *vf_mac)
@@ -2967,6 +2997,7 @@ i40e_queue_region_get_all_info(struct i40e_pf *pf,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_rss_queue_region_conf)
 int rte_pmd_i40e_rss_queue_region_conf(uint16_t port_id,
 		enum rte_pmd_i40e_queue_region_op op_type, void *arg)
 {
@@ -3032,6 +3063,7 @@ int rte_pmd_i40e_rss_queue_region_conf(uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_flow_add_del_packet_template)
 int rte_pmd_i40e_flow_add_del_packet_template(
 			uint16_t port,
 			const struct rte_pmd_i40e_pkt_template_conf *conf,
@@ -3065,6 +3097,7 @@ int rte_pmd_i40e_flow_add_del_packet_template(
 	return i40e_flow_add_del_fdir_filter(dev, &filter_conf, add);
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_inset_get)
 int
 rte_pmd_i40e_inset_get(uint16_t port, uint8_t pctype,
 		       struct rte_pmd_i40e_inset *inset,
@@ -3137,6 +3170,7 @@ rte_pmd_i40e_inset_get(uint16_t port, uint8_t pctype,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_i40e_inset_set)
 int
 rte_pmd_i40e_inset_set(uint16_t port, uint8_t pctype,
 		       struct rte_pmd_i40e_inset *inset,
@@ -3211,6 +3245,7 @@ rte_pmd_i40e_inset_set(uint16_t port, uint8_t pctype,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_i40e_get_fdir_info, 20.08)
 int
 rte_pmd_i40e_get_fdir_info(uint16_t port, struct rte_eth_fdir_info *fdir_info)
 {
@@ -3227,6 +3262,7 @@ rte_pmd_i40e_get_fdir_info(uint16_t port, struct rte_eth_fdir_info *fdir_info)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_i40e_get_fdir_stats, 20.08)
 int
 rte_pmd_i40e_get_fdir_stats(uint16_t port, struct rte_eth_fdir_stats *fdir_stat)
 {
@@ -3243,6 +3279,7 @@ rte_pmd_i40e_get_fdir_stats(uint16_t port, struct rte_eth_fdir_stats *fdir_stat)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_i40e_set_gre_key_len, 20.08)
 int
 rte_pmd_i40e_set_gre_key_len(uint16_t port, uint8_t len)
 {
@@ -3262,6 +3299,7 @@ rte_pmd_i40e_set_gre_key_len(uint16_t port, uint8_t len)
 	return i40e_dev_set_gre_key_len(hw, len);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_i40e_set_switch_dev, 19.11)
 int
 rte_pmd_i40e_set_switch_dev(uint16_t port_id, struct rte_eth_dev *switch_dev)
 {
@@ -3283,6 +3321,7 @@ rte_pmd_i40e_set_switch_dev(uint16_t port_id, struct rte_eth_dev *switch_dev)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_i40e_set_pf_src_prune, 23.07)
 int
 rte_pmd_i40e_set_pf_src_prune(uint16_t port, uint8_t on)
 {
diff --git a/drivers/net/intel/iavf/iavf_ethdev.c b/drivers/net/intel/iavf/iavf_ethdev.c
index 9cd2b0c867..6db2f90ddc 100644
--- a/drivers/net/intel/iavf/iavf_ethdev.c
+++ b/drivers/net/intel/iavf/iavf_ethdev.c
@@ -3205,3 +3205,12 @@ RTE_LOG_REGISTER_SUFFIX(iavf_logtype_rx, rx, DEBUG);
 #ifdef RTE_ETHDEV_DEBUG_TX
 RTE_LOG_REGISTER_SUFFIX(iavf_logtype_tx, tx, DEBUG);
 #endif
+
+/* Export all base symbols */
+RTE_EXPORT_INTERNAL_SYMBOL(iavf_init_adminq)
+RTE_EXPORT_INTERNAL_SYMBOL(iavf_shutdown_adminq)
+RTE_EXPORT_INTERNAL_SYMBOL(iavf_clean_arq_element)
+RTE_EXPORT_INTERNAL_SYMBOL(iavf_set_mac_type)
+RTE_EXPORT_INTERNAL_SYMBOL(iavf_aq_send_msg_to_pf)
+RTE_EXPORT_INTERNAL_SYMBOL(iavf_vf_parse_hw_config)
+RTE_EXPORT_INTERNAL_SYMBOL(iavf_vf_reset)
diff --git a/drivers/net/intel/iavf/iavf_rxtx.c b/drivers/net/intel/iavf/iavf_rxtx.c
index 657963750d..a4d80346ca 100644
--- a/drivers/net/intel/iavf/iavf_rxtx.c
+++ b/drivers/net/intel/iavf/iavf_rxtx.c
@@ -74,15 +74,23 @@ struct offload_info {
 };
 
 /* Offset of mbuf dynamic field for protocol extraction's metadata */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_ifd_dynfield_proto_xtr_metadata_offs, 20.11)
 int rte_pmd_ifd_dynfield_proto_xtr_metadata_offs = -1;
 
 /* Mask of mbuf dynamic flags for protocol extraction's type */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_ifd_dynflag_proto_xtr_vlan_mask, 20.11)
 uint64_t rte_pmd_ifd_dynflag_proto_xtr_vlan_mask;
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_ifd_dynflag_proto_xtr_ipv4_mask, 20.11)
 uint64_t rte_pmd_ifd_dynflag_proto_xtr_ipv4_mask;
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_ifd_dynflag_proto_xtr_ipv6_mask, 20.11)
 uint64_t rte_pmd_ifd_dynflag_proto_xtr_ipv6_mask;
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_ifd_dynflag_proto_xtr_ipv6_flow_mask, 20.11)
 uint64_t rte_pmd_ifd_dynflag_proto_xtr_ipv6_flow_mask;
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_ifd_dynflag_proto_xtr_tcp_mask, 20.11)
 uint64_t rte_pmd_ifd_dynflag_proto_xtr_tcp_mask;
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_ifd_dynflag_proto_xtr_ip_offset_mask, 20.11)
 uint64_t rte_pmd_ifd_dynflag_proto_xtr_ip_offset_mask;
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_ifd_dynflag_proto_xtr_ipsec_crypto_said_mask, 21.11)
 uint64_t rte_pmd_ifd_dynflag_proto_xtr_ipsec_crypto_said_mask;
 
 uint8_t
diff --git a/drivers/net/intel/ice/ice_diagnose.c b/drivers/net/intel/ice/ice_diagnose.c
index a50068441a..de864c738e 100644
--- a/drivers/net/intel/ice/ice_diagnose.c
+++ b/drivers/net/intel/ice/ice_diagnose.c
@@ -409,6 +409,7 @@ ice_dump_pkg(struct rte_eth_dev *dev, uint8_t **buff, uint32_t *size)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_ice_dump_package, 19.11)
 int rte_pmd_ice_dump_package(uint16_t port, uint8_t **buff, uint32_t *size)
 {
 	struct rte_eth_dev *dev;
@@ -497,6 +498,7 @@ ice_dump_switch(struct rte_eth_dev *dev, uint8_t **buff2, uint32_t *size)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_ice_dump_switch, 22.11)
 int rte_pmd_ice_dump_switch(uint16_t port, uint8_t **buff, uint32_t *size)
 {
 	struct rte_eth_dev *dev;
@@ -798,6 +800,7 @@ query_node_recursive(struct ice_hw *hw, struct rte_eth_dev_data *ethdata,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_ice_dump_txsched, 24.03)
 int
 rte_pmd_ice_dump_txsched(uint16_t port, bool detail, FILE *stream)
 {
diff --git a/drivers/net/intel/idpf/idpf_common_device.c b/drivers/net/intel/idpf/idpf_common_device.c
index e9fa024850..e49a1e7859 100644
--- a/drivers/net/intel/idpf/idpf_common_device.c
+++ b/drivers/net/intel/idpf/idpf_common_device.c
@@ -381,6 +381,7 @@ idpf_get_pkt_type(struct idpf_adapter *adapter)
 	return ret;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_adapter_init)
 int
 idpf_adapter_init(struct idpf_adapter *adapter)
 {
@@ -441,6 +442,7 @@ idpf_adapter_init(struct idpf_adapter *adapter)
 	return ret;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_adapter_deinit)
 int
 idpf_adapter_deinit(struct idpf_adapter *adapter)
 {
@@ -453,6 +455,7 @@ idpf_adapter_deinit(struct idpf_adapter *adapter)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vport_init)
 int
 idpf_vport_init(struct idpf_vport *vport,
 		struct virtchnl2_create_vport *create_vport_info,
@@ -566,6 +569,7 @@ idpf_vport_init(struct idpf_vport *vport,
 err_create_vport:
 	return ret;
 }
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vport_deinit)
 int
 idpf_vport_deinit(struct idpf_vport *vport)
 {
@@ -583,6 +587,7 @@ idpf_vport_deinit(struct idpf_vport *vport)
 
 	return 0;
 }
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vport_rss_config)
 int
 idpf_vport_rss_config(struct idpf_vport *vport)
 {
@@ -609,6 +614,7 @@ idpf_vport_rss_config(struct idpf_vport *vport)
 	return ret;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vport_irq_map_config)
 int
 idpf_vport_irq_map_config(struct idpf_vport *vport, uint16_t nb_rx_queues)
 {
@@ -684,6 +690,7 @@ idpf_vport_irq_map_config(struct idpf_vport *vport, uint16_t nb_rx_queues)
 	return ret;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vport_irq_map_config_by_qids)
 int
 idpf_vport_irq_map_config_by_qids(struct idpf_vport *vport, uint32_t *qids, uint16_t nb_rx_queues)
 {
@@ -759,6 +766,7 @@ idpf_vport_irq_map_config_by_qids(struct idpf_vport *vport, uint32_t *qids, uint
 	return ret;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vport_irq_unmap_config)
 int
 idpf_vport_irq_unmap_config(struct idpf_vport *vport, uint16_t nb_rx_queues)
 {
@@ -770,6 +778,7 @@ idpf_vport_irq_unmap_config(struct idpf_vport *vport, uint16_t nb_rx_queues)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vport_info_init)
 int
 idpf_vport_info_init(struct idpf_vport *vport,
 			    struct virtchnl2_create_vport *vport_info)
@@ -806,6 +815,7 @@ idpf_vport_info_init(struct idpf_vport *vport,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vport_stats_update)
 void
 idpf_vport_stats_update(struct virtchnl2_vport_stats *oes, struct virtchnl2_vport_stats *nes)
 {
diff --git a/drivers/net/intel/idpf/idpf_common_rxtx.c b/drivers/net/intel/idpf/idpf_common_rxtx.c
index 7171e27b8d..5764bd0e9b 100644
--- a/drivers/net/intel/idpf/idpf_common_rxtx.c
+++ b/drivers/net/intel/idpf/idpf_common_rxtx.c
@@ -10,6 +10,7 @@
 int idpf_timestamp_dynfield_offset = -1;
 uint64_t idpf_timestamp_dynflag;
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_qc_rx_thresh_check)
 int
 idpf_qc_rx_thresh_check(uint16_t nb_desc, uint16_t thresh)
 {
@@ -25,6 +26,7 @@ idpf_qc_rx_thresh_check(uint16_t nb_desc, uint16_t thresh)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_qc_tx_thresh_check)
 int
 idpf_qc_tx_thresh_check(uint16_t nb_desc, uint16_t tx_rs_thresh,
 			uint16_t tx_free_thresh)
@@ -73,6 +75,7 @@ idpf_qc_tx_thresh_check(uint16_t nb_desc, uint16_t tx_rs_thresh,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_qc_rxq_mbufs_release)
 void
 idpf_qc_rxq_mbufs_release(struct idpf_rx_queue *rxq)
 {
@@ -89,6 +92,7 @@ idpf_qc_rxq_mbufs_release(struct idpf_rx_queue *rxq)
 	}
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_qc_txq_mbufs_release)
 void
 idpf_qc_txq_mbufs_release(struct idpf_tx_queue *txq)
 {
@@ -114,6 +118,7 @@ idpf_qc_txq_mbufs_release(struct idpf_tx_queue *txq)
 	}
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_qc_split_rx_descq_reset)
 void
 idpf_qc_split_rx_descq_reset(struct idpf_rx_queue *rxq)
 {
@@ -133,6 +138,7 @@ idpf_qc_split_rx_descq_reset(struct idpf_rx_queue *rxq)
 	rxq->expected_gen_id = 1;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_qc_split_rx_bufq_reset)
 void
 idpf_qc_split_rx_bufq_reset(struct idpf_rx_queue *rxq)
 {
@@ -168,6 +174,7 @@ idpf_qc_split_rx_bufq_reset(struct idpf_rx_queue *rxq)
 	rxq->bufq2 = NULL;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_qc_split_rx_queue_reset)
 void
 idpf_qc_split_rx_queue_reset(struct idpf_rx_queue *rxq)
 {
@@ -176,6 +183,7 @@ idpf_qc_split_rx_queue_reset(struct idpf_rx_queue *rxq)
 	idpf_qc_split_rx_bufq_reset(rxq->bufq2);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_qc_single_rx_queue_reset)
 void
 idpf_qc_single_rx_queue_reset(struct idpf_rx_queue *rxq)
 {
@@ -207,6 +215,7 @@ idpf_qc_single_rx_queue_reset(struct idpf_rx_queue *rxq)
 	rxq->rxrearm_nb = 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_qc_split_tx_descq_reset)
 void
 idpf_qc_split_tx_descq_reset(struct idpf_tx_queue *txq)
 {
@@ -245,6 +254,7 @@ idpf_qc_split_tx_descq_reset(struct idpf_tx_queue *txq)
 	txq->next_rs = txq->rs_thresh - 1;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_qc_split_tx_complq_reset)
 void
 idpf_qc_split_tx_complq_reset(struct idpf_tx_queue *cq)
 {
@@ -263,6 +273,7 @@ idpf_qc_split_tx_complq_reset(struct idpf_tx_queue *cq)
 	cq->expected_gen_id = 1;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_qc_single_tx_queue_reset)
 void
 idpf_qc_single_tx_queue_reset(struct idpf_tx_queue *txq)
 {
@@ -300,6 +311,7 @@ idpf_qc_single_tx_queue_reset(struct idpf_tx_queue *txq)
 	txq->next_rs = txq->rs_thresh - 1;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_qc_rx_queue_release)
 void
 idpf_qc_rx_queue_release(void *rxq)
 {
@@ -330,6 +342,7 @@ idpf_qc_rx_queue_release(void *rxq)
 	rte_free(q);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_qc_tx_queue_release)
 void
 idpf_qc_tx_queue_release(void *txq)
 {
@@ -349,6 +362,7 @@ idpf_qc_tx_queue_release(void *txq)
 	rte_free(q);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_qc_ts_mbuf_register)
 int
 idpf_qc_ts_mbuf_register(struct idpf_rx_queue *rxq)
 {
@@ -366,6 +380,7 @@ idpf_qc_ts_mbuf_register(struct idpf_rx_queue *rxq)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_qc_single_rxq_mbufs_alloc)
 int
 idpf_qc_single_rxq_mbufs_alloc(struct idpf_rx_queue *rxq)
 {
@@ -401,6 +416,7 @@ idpf_qc_single_rxq_mbufs_alloc(struct idpf_rx_queue *rxq)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_qc_split_rxq_mbufs_alloc)
 int
 idpf_qc_split_rxq_mbufs_alloc(struct idpf_rx_queue *rxq)
 {
@@ -624,6 +640,7 @@ idpf_split_rx_bufq_refill(struct idpf_rx_queue *rx_bufq)
 	rx_bufq->rx_tail = next_avail;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_dp_splitq_recv_pkts)
 uint16_t
 idpf_dp_splitq_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
 			 uint16_t nb_pkts)
@@ -856,6 +873,7 @@ idpf_set_splitq_tso_ctx(struct rte_mbuf *mbuf,
 				 IDPF_TXD_FLEX_CTX_MSS_RT_M);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_dp_splitq_xmit_pkts)
 uint16_t
 idpf_dp_splitq_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
 			 uint16_t nb_pkts)
@@ -1047,6 +1065,7 @@ idpf_singleq_rx_rss_offload(struct rte_mbuf *mb,
 
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_dp_singleq_recv_pkts)
 uint16_t
 idpf_dp_singleq_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
 			  uint16_t nb_pkts)
@@ -1165,6 +1184,7 @@ idpf_dp_singleq_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
 	return nb_rx;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_dp_singleq_recv_scatter_pkts)
 uint16_t
 idpf_dp_singleq_recv_scatter_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
 			       uint16_t nb_pkts)
@@ -1342,6 +1362,7 @@ idpf_xmit_cleanup(struct idpf_tx_queue *txq)
 }
 
 /* TX function */
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_dp_singleq_xmit_pkts)
 uint16_t
 idpf_dp_singleq_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
 			  uint16_t nb_pkts)
@@ -1509,6 +1530,7 @@ idpf_dp_singleq_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
 }
 
 /* TX prep functions */
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_dp_prep_pkts)
 uint16_t
 idpf_dp_prep_pkts(__rte_unused void *tx_queue, struct rte_mbuf **tx_pkts,
 		  uint16_t nb_pkts)
@@ -1610,6 +1632,7 @@ idpf_rxq_vec_setup_default(struct idpf_rx_queue *rxq)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_qc_singleq_rx_vec_setup)
 int __rte_cold
 idpf_qc_singleq_rx_vec_setup(struct idpf_rx_queue *rxq)
 {
@@ -1617,9 +1640,19 @@ idpf_qc_singleq_rx_vec_setup(struct idpf_rx_queue *rxq)
 	return idpf_rxq_vec_setup_default(rxq);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_qc_splitq_rx_vec_setup)
 int __rte_cold
 idpf_qc_splitq_rx_vec_setup(struct idpf_rx_queue *rxq)
 {
 	rxq->bufq2->ops = &def_rx_ops_vec;
 	return idpf_rxq_vec_setup_default(rxq->bufq2);
 }
+
+/* Export all AVX* symbols */
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_dp_singleq_recv_pkts_avx2)
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_dp_singleq_xmit_pkts_avx2)
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_dp_singleq_recv_pkts_avx512)
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_dp_splitq_recv_pkts_avx512)
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_dp_singleq_xmit_pkts_avx512)
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_dp_splitq_xmit_pkts_avx512)
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_qc_tx_vec_avx512_setup)
diff --git a/drivers/net/intel/idpf/idpf_common_virtchnl.c b/drivers/net/intel/idpf/idpf_common_virtchnl.c
index 0ae1d55d79..1613d7f07e 100644
--- a/drivers/net/intel/idpf/idpf_common_virtchnl.c
+++ b/drivers/net/intel/idpf/idpf_common_virtchnl.c
@@ -158,6 +158,7 @@ idpf_read_msg_from_cp(struct idpf_adapter *adapter, uint16_t buf_len,
 #define MAX_TRY_TIMES 200
 #define ASQ_DELAY_MS  10
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_one_msg_read)
 int
 idpf_vc_one_msg_read(struct idpf_adapter *adapter, uint32_t ops, uint16_t buf_len,
 		     uint8_t *buf)
@@ -182,6 +183,7 @@ idpf_vc_one_msg_read(struct idpf_adapter *adapter, uint32_t ops, uint16_t buf_le
 	return err;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_cmd_execute)
 int
 idpf_vc_cmd_execute(struct idpf_adapter *adapter, struct idpf_cmd_info *args)
 {
@@ -231,6 +233,7 @@ idpf_vc_cmd_execute(struct idpf_adapter *adapter, struct idpf_cmd_info *args)
 	return err;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_api_version_check)
 int
 idpf_vc_api_version_check(struct idpf_adapter *adapter)
 {
@@ -271,6 +274,7 @@ idpf_vc_api_version_check(struct idpf_adapter *adapter)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_caps_get)
 int
 idpf_vc_caps_get(struct idpf_adapter *adapter)
 {
@@ -295,6 +299,7 @@ idpf_vc_caps_get(struct idpf_adapter *adapter)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_vport_create)
 int
 idpf_vc_vport_create(struct idpf_vport *vport,
 		     struct virtchnl2_create_vport *create_vport_info)
@@ -331,6 +336,7 @@ idpf_vc_vport_create(struct idpf_vport *vport,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_vport_destroy)
 int
 idpf_vc_vport_destroy(struct idpf_vport *vport)
 {
@@ -355,6 +361,7 @@ idpf_vc_vport_destroy(struct idpf_vport *vport)
 	return err;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_queue_grps_add)
 int
 idpf_vc_queue_grps_add(struct idpf_vport *vport,
 		       struct virtchnl2_add_queue_groups *p2p_queue_grps_info,
@@ -387,6 +394,7 @@ idpf_vc_queue_grps_add(struct idpf_vport *vport,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_queue_grps_del)
 int idpf_vc_queue_grps_del(struct idpf_vport *vport,
 			  uint16_t num_q_grps,
 			  struct virtchnl2_queue_group_id *qg_ids)
@@ -421,6 +429,7 @@ int idpf_vc_queue_grps_del(struct idpf_vport *vport,
 	return err;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_rss_key_set)
 int
 idpf_vc_rss_key_set(struct idpf_vport *vport)
 {
@@ -455,6 +464,7 @@ idpf_vc_rss_key_set(struct idpf_vport *vport)
 	return err;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_rss_key_get)
 int idpf_vc_rss_key_get(struct idpf_vport *vport)
 {
 	struct idpf_adapter *adapter = vport->adapter;
@@ -497,6 +507,7 @@ int idpf_vc_rss_key_get(struct idpf_vport *vport)
 	return err;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_rss_lut_set)
 int
 idpf_vc_rss_lut_set(struct idpf_vport *vport)
 {
@@ -531,6 +542,7 @@ idpf_vc_rss_lut_set(struct idpf_vport *vport)
 	return err;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_rss_lut_get)
 int
 idpf_vc_rss_lut_get(struct idpf_vport *vport)
 {
@@ -573,6 +585,7 @@ idpf_vc_rss_lut_get(struct idpf_vport *vport)
 	return err;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_rss_hash_get)
 int
 idpf_vc_rss_hash_get(struct idpf_vport *vport)
 {
@@ -605,6 +618,7 @@ idpf_vc_rss_hash_get(struct idpf_vport *vport)
 	return err;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_rss_hash_set)
 int
 idpf_vc_rss_hash_set(struct idpf_vport *vport)
 {
@@ -631,6 +645,7 @@ idpf_vc_rss_hash_set(struct idpf_vport *vport)
 	return err;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_irq_map_unmap_config)
 int
 idpf_vc_irq_map_unmap_config(struct idpf_vport *vport, uint16_t nb_rxq, bool map)
 {
@@ -672,6 +687,7 @@ idpf_vc_irq_map_unmap_config(struct idpf_vport *vport, uint16_t nb_rxq, bool map
 	return err;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_vectors_alloc)
 int
 idpf_vc_vectors_alloc(struct idpf_vport *vport, uint16_t num_vectors)
 {
@@ -702,6 +718,7 @@ idpf_vc_vectors_alloc(struct idpf_vport *vport, uint16_t num_vectors)
 	return err;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_vectors_dealloc)
 int
 idpf_vc_vectors_dealloc(struct idpf_vport *vport)
 {
@@ -729,6 +746,7 @@ idpf_vc_vectors_dealloc(struct idpf_vport *vport)
 	return err;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_ena_dis_one_queue)
 int
 idpf_vc_ena_dis_one_queue(struct idpf_vport *vport, uint16_t qid,
 			  uint32_t type, bool on)
@@ -767,6 +785,7 @@ idpf_vc_ena_dis_one_queue(struct idpf_vport *vport, uint16_t qid,
 	return err;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_queue_switch)
 int
 idpf_vc_queue_switch(struct idpf_vport *vport, uint16_t qid,
 		     bool rx, bool on, uint32_t type)
@@ -807,6 +826,7 @@ idpf_vc_queue_switch(struct idpf_vport *vport, uint16_t qid,
 }
 
 #define IDPF_RXTX_QUEUE_CHUNKS_NUM	2
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_queues_ena_dis)
 int
 idpf_vc_queues_ena_dis(struct idpf_vport *vport, bool enable)
 {
@@ -875,6 +895,7 @@ idpf_vc_queues_ena_dis(struct idpf_vport *vport, bool enable)
 	return err;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_vport_ena_dis)
 int
 idpf_vc_vport_ena_dis(struct idpf_vport *vport, bool enable)
 {
@@ -900,6 +921,7 @@ idpf_vc_vport_ena_dis(struct idpf_vport *vport, bool enable)
 	return err;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_ptype_info_query)
 int
 idpf_vc_ptype_info_query(struct idpf_adapter *adapter,
 			 struct virtchnl2_get_ptype_info *req_ptype_info,
@@ -922,6 +944,7 @@ idpf_vc_ptype_info_query(struct idpf_adapter *adapter,
 	return err;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_stats_query)
 int
 idpf_vc_stats_query(struct idpf_vport *vport,
 		struct virtchnl2_vport_stats **pstats)
@@ -949,6 +972,7 @@ idpf_vc_stats_query(struct idpf_vport *vport,
 }
 
 #define IDPF_RX_BUF_STRIDE		64
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_rxq_config)
 int
 idpf_vc_rxq_config(struct idpf_vport *vport, struct idpf_rx_queue *rxq)
 {
@@ -1038,6 +1062,7 @@ idpf_vc_rxq_config(struct idpf_vport *vport, struct idpf_rx_queue *rxq)
 	return err;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_rxq_config_by_info)
 int idpf_vc_rxq_config_by_info(struct idpf_vport *vport, struct virtchnl2_rxq_info *rxq_info,
 			       uint16_t num_qs)
 {
@@ -1073,6 +1098,7 @@ int idpf_vc_rxq_config_by_info(struct idpf_vport *vport, struct virtchnl2_rxq_in
 	return err;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_txq_config)
 int
 idpf_vc_txq_config(struct idpf_vport *vport, struct idpf_tx_queue *txq)
 {
@@ -1144,6 +1170,7 @@ idpf_vc_txq_config(struct idpf_vport *vport, struct idpf_tx_queue *txq)
 	return err;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_txq_config_by_info)
 int
 idpf_vc_txq_config_by_info(struct idpf_vport *vport, struct virtchnl2_txq_info *txq_info,
 		       uint16_t num_qs)
@@ -1179,6 +1206,7 @@ idpf_vc_txq_config_by_info(struct idpf_vport *vport, struct virtchnl2_txq_info *
 	return err;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_ctlq_recv)
 int
 idpf_vc_ctlq_recv(struct idpf_ctlq_info *cq, u16 *num_q_msg,
 		  struct idpf_ctlq_msg *q_msg)
@@ -1186,6 +1214,7 @@ idpf_vc_ctlq_recv(struct idpf_ctlq_info *cq, u16 *num_q_msg,
 	return idpf_ctlq_recv(cq, num_q_msg, q_msg);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(idpf_vc_ctlq_post_rx_buffs)
 int
 idpf_vc_ctlq_post_rx_buffs(struct idpf_hw *hw, struct idpf_ctlq_info *cq,
 			   u16 *buff_count, struct idpf_dma_mem **buffs)
diff --git a/drivers/net/intel/ipn3ke/ipn3ke_ethdev.c b/drivers/net/intel/ipn3ke/ipn3ke_ethdev.c
index c8f06a06cb..ab443f61dc 100644
--- a/drivers/net/intel/ipn3ke/ipn3ke_ethdev.c
+++ b/drivers/net/intel/ipn3ke/ipn3ke_ethdev.c
@@ -34,6 +34,7 @@ static const struct rte_afu_uuid afu_uuid_ipn3ke_map[] = {
 	{ 0, 0 /* sentinel */ },
 };
 
+RTE_EXPORT_INTERNAL_SYMBOL(ipn3ke_bridge_func)
 struct ipn3ke_pub_func ipn3ke_bridge_func;
 
 static int
diff --git a/drivers/net/intel/ixgbe/rte_pmd_ixgbe.c b/drivers/net/intel/ixgbe/rte_pmd_ixgbe.c
index 5a7d66d9b9..ee166137d6 100644
--- a/drivers/net/intel/ixgbe/rte_pmd_ixgbe.c
+++ b/drivers/net/intel/ixgbe/rte_pmd_ixgbe.c
@@ -9,6 +9,7 @@
 #include "ixgbe_ethdev.h"
 #include "rte_pmd_ixgbe.h"
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_set_vf_mac_addr)
 int
 rte_pmd_ixgbe_set_vf_mac_addr(uint16_t port, uint16_t vf,
 			      struct rte_ether_addr *mac_addr)
@@ -45,6 +46,7 @@ rte_pmd_ixgbe_set_vf_mac_addr(uint16_t port, uint16_t vf,
 	return -EINVAL;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_ping_vf)
 int
 rte_pmd_ixgbe_ping_vf(uint16_t port, uint16_t vf)
 {
@@ -77,6 +79,7 @@ rte_pmd_ixgbe_ping_vf(uint16_t port, uint16_t vf)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_set_vf_vlan_anti_spoof)
 int
 rte_pmd_ixgbe_set_vf_vlan_anti_spoof(uint16_t port, uint16_t vf, uint8_t on)
 {
@@ -107,6 +110,7 @@ rte_pmd_ixgbe_set_vf_vlan_anti_spoof(uint16_t port, uint16_t vf, uint8_t on)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_set_vf_mac_anti_spoof)
 int
 rte_pmd_ixgbe_set_vf_mac_anti_spoof(uint16_t port, uint16_t vf, uint8_t on)
 {
@@ -136,6 +140,7 @@ rte_pmd_ixgbe_set_vf_mac_anti_spoof(uint16_t port, uint16_t vf, uint8_t on)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_set_vf_vlan_insert)
 int
 rte_pmd_ixgbe_set_vf_vlan_insert(uint16_t port, uint16_t vf, uint16_t vlan_id)
 {
@@ -172,6 +177,7 @@ rte_pmd_ixgbe_set_vf_vlan_insert(uint16_t port, uint16_t vf, uint16_t vlan_id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_set_tx_loopback)
 int
 rte_pmd_ixgbe_set_tx_loopback(uint16_t port, uint8_t on)
 {
@@ -202,6 +208,7 @@ rte_pmd_ixgbe_set_tx_loopback(uint16_t port, uint8_t on)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_set_all_queues_drop_en)
 int
 rte_pmd_ixgbe_set_all_queues_drop_en(uint16_t port, uint8_t on)
 {
@@ -232,6 +239,7 @@ rte_pmd_ixgbe_set_all_queues_drop_en(uint16_t port, uint8_t on)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_set_vf_split_drop_en)
 int
 rte_pmd_ixgbe_set_vf_split_drop_en(uint16_t port, uint16_t vf, uint8_t on)
 {
@@ -267,6 +275,7 @@ rte_pmd_ixgbe_set_vf_split_drop_en(uint16_t port, uint16_t vf, uint8_t on)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_set_vf_vlan_stripq)
 int
 rte_pmd_ixgbe_set_vf_vlan_stripq(uint16_t port, uint16_t vf, uint8_t on)
 {
@@ -314,6 +323,7 @@ rte_pmd_ixgbe_set_vf_vlan_stripq(uint16_t port, uint16_t vf, uint8_t on)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_set_vf_rxmode)
 int
 rte_pmd_ixgbe_set_vf_rxmode(uint16_t port, uint16_t vf,
 			    uint16_t rx_mask, uint8_t on)
@@ -361,6 +371,7 @@ rte_pmd_ixgbe_set_vf_rxmode(uint16_t port, uint16_t vf,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_set_vf_rx)
 int
 rte_pmd_ixgbe_set_vf_rx(uint16_t port, uint16_t vf, uint8_t on)
 {
@@ -411,6 +422,7 @@ rte_pmd_ixgbe_set_vf_rx(uint16_t port, uint16_t vf, uint8_t on)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_set_vf_tx)
 int
 rte_pmd_ixgbe_set_vf_tx(uint16_t port, uint16_t vf, uint8_t on)
 {
@@ -461,6 +473,7 @@ rte_pmd_ixgbe_set_vf_tx(uint16_t port, uint16_t vf, uint8_t on)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_set_vf_vlan_filter)
 int
 rte_pmd_ixgbe_set_vf_vlan_filter(uint16_t port, uint16_t vlan,
 				 uint64_t vf_mask, uint8_t vlan_on)
@@ -496,6 +509,7 @@ rte_pmd_ixgbe_set_vf_vlan_filter(uint16_t port, uint16_t vlan,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_set_vf_rate_limit)
 int
 rte_pmd_ixgbe_set_vf_rate_limit(uint16_t port, uint16_t vf,
 				uint32_t tx_rate, uint64_t q_msk)
@@ -512,6 +526,7 @@ rte_pmd_ixgbe_set_vf_rate_limit(uint16_t port, uint16_t vf,
 	return ixgbe_set_vf_rate_limit(dev, vf, tx_rate, q_msk);
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_macsec_enable)
 int
 rte_pmd_ixgbe_macsec_enable(uint16_t port, uint8_t en, uint8_t rp)
 {
@@ -536,6 +551,7 @@ rte_pmd_ixgbe_macsec_enable(uint16_t port, uint8_t en, uint8_t rp)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_macsec_disable)
 int
 rte_pmd_ixgbe_macsec_disable(uint16_t port)
 {
@@ -555,6 +571,7 @@ rte_pmd_ixgbe_macsec_disable(uint16_t port)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_macsec_config_txsc)
 int
 rte_pmd_ixgbe_macsec_config_txsc(uint16_t port, uint8_t *mac)
 {
@@ -580,6 +597,7 @@ rte_pmd_ixgbe_macsec_config_txsc(uint16_t port, uint8_t *mac)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_macsec_config_rxsc)
 int
 rte_pmd_ixgbe_macsec_config_rxsc(uint16_t port, uint8_t *mac, uint16_t pi)
 {
@@ -606,6 +624,7 @@ rte_pmd_ixgbe_macsec_config_rxsc(uint16_t port, uint8_t *mac, uint16_t pi)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_macsec_select_txsa)
 int
 rte_pmd_ixgbe_macsec_select_txsa(uint16_t port, uint8_t idx, uint8_t an,
 				 uint32_t pn, uint8_t *key)
@@ -662,6 +681,7 @@ rte_pmd_ixgbe_macsec_select_txsa(uint16_t port, uint8_t idx, uint8_t an,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_macsec_select_rxsa)
 int
 rte_pmd_ixgbe_macsec_select_rxsa(uint16_t port, uint8_t idx, uint8_t an,
 				 uint32_t pn, uint8_t *key)
@@ -705,6 +725,7 @@ rte_pmd_ixgbe_macsec_select_rxsa(uint16_t port, uint8_t idx, uint8_t an,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_set_tc_bw_alloc)
 int
 rte_pmd_ixgbe_set_tc_bw_alloc(uint16_t port,
 			      uint8_t tc_num,
@@ -778,6 +799,7 @@ rte_pmd_ixgbe_set_tc_bw_alloc(uint16_t port,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_upd_fctrl_sbp)
 int
 rte_pmd_ixgbe_upd_fctrl_sbp(uint16_t port, int enable)
 {
@@ -807,6 +829,7 @@ rte_pmd_ixgbe_upd_fctrl_sbp(uint16_t port, int enable)
 }
 
 #ifdef RTE_LIBRTE_IXGBE_BYPASS
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_bypass_init)
 int
 rte_pmd_ixgbe_bypass_init(uint16_t port_id)
 {
@@ -822,6 +845,7 @@ rte_pmd_ixgbe_bypass_init(uint16_t port_id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_bypass_state_show)
 int
 rte_pmd_ixgbe_bypass_state_show(uint16_t port_id, uint32_t *state)
 {
@@ -836,6 +860,7 @@ rte_pmd_ixgbe_bypass_state_show(uint16_t port_id, uint32_t *state)
 	return ixgbe_bypass_state_show(dev, state);
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_bypass_state_set)
 int
 rte_pmd_ixgbe_bypass_state_set(uint16_t port_id, uint32_t *new_state)
 {
@@ -850,6 +875,7 @@ rte_pmd_ixgbe_bypass_state_set(uint16_t port_id, uint32_t *new_state)
 	return ixgbe_bypass_state_store(dev, new_state);
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_bypass_event_show)
 int
 rte_pmd_ixgbe_bypass_event_show(uint16_t port_id,
 				uint32_t event,
@@ -866,6 +892,7 @@ rte_pmd_ixgbe_bypass_event_show(uint16_t port_id,
 	return ixgbe_bypass_event_show(dev, event, state);
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_bypass_event_store)
 int
 rte_pmd_ixgbe_bypass_event_store(uint16_t port_id,
 				 uint32_t event,
@@ -882,6 +909,7 @@ rte_pmd_ixgbe_bypass_event_store(uint16_t port_id,
 	return ixgbe_bypass_event_store(dev, event, state);
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_bypass_wd_timeout_store)
 int
 rte_pmd_ixgbe_bypass_wd_timeout_store(uint16_t port_id, uint32_t timeout)
 {
@@ -896,6 +924,7 @@ rte_pmd_ixgbe_bypass_wd_timeout_store(uint16_t port_id, uint32_t timeout)
 	return ixgbe_bypass_wd_timeout_store(dev, timeout);
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_bypass_ver_show)
 int
 rte_pmd_ixgbe_bypass_ver_show(uint16_t port_id, uint32_t *ver)
 {
@@ -910,6 +939,7 @@ rte_pmd_ixgbe_bypass_ver_show(uint16_t port_id, uint32_t *ver)
 	return ixgbe_bypass_ver_show(dev, ver);
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_bypass_wd_timeout_show)
 int
 rte_pmd_ixgbe_bypass_wd_timeout_show(uint16_t port_id, uint32_t *wd_timeout)
 {
@@ -924,6 +954,7 @@ rte_pmd_ixgbe_bypass_wd_timeout_show(uint16_t port_id, uint32_t *wd_timeout)
 	return ixgbe_bypass_wd_timeout_show(dev, wd_timeout);
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_bypass_wd_reset)
 int
 rte_pmd_ixgbe_bypass_wd_reset(uint16_t port_id)
 {
@@ -992,6 +1023,7 @@ STATIC void rte_pmd_ixgbe_release_swfw(struct ixgbe_hw *hw, u32 mask)
 	ixgbe_release_swfw_semaphore(hw, mask);
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_mdio_lock)
 int
 rte_pmd_ixgbe_mdio_lock(uint16_t port)
 {
@@ -1019,6 +1051,7 @@ rte_pmd_ixgbe_mdio_lock(uint16_t port)
 	return IXGBE_SUCCESS;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_mdio_unlock)
 int
 rte_pmd_ixgbe_mdio_unlock(uint16_t port)
 {
@@ -1046,6 +1079,7 @@ rte_pmd_ixgbe_mdio_unlock(uint16_t port)
 	return IXGBE_SUCCESS;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_mdio_unlocked_read)
 int
 rte_pmd_ixgbe_mdio_unlocked_read(uint16_t port, uint32_t reg_addr,
 				 uint32_t dev_type, uint16_t *phy_data)
@@ -1093,6 +1127,7 @@ rte_pmd_ixgbe_mdio_unlocked_read(uint16_t port, uint32_t reg_addr,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ixgbe_mdio_unlocked_write)
 int
 rte_pmd_ixgbe_mdio_unlocked_write(uint16_t port, uint32_t reg_addr,
 				  uint32_t dev_type, uint16_t phy_data)
@@ -1140,6 +1175,7 @@ rte_pmd_ixgbe_mdio_unlocked_write(uint16_t port, uint32_t reg_addr,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_ixgbe_get_fdir_info, 20.08)
 int
 rte_pmd_ixgbe_get_fdir_info(uint16_t port, struct rte_eth_fdir_info *fdir_info)
 {
@@ -1156,6 +1192,7 @@ rte_pmd_ixgbe_get_fdir_info(uint16_t port, struct rte_eth_fdir_info *fdir_info)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_ixgbe_get_fdir_stats, 20.08)
 int
 rte_pmd_ixgbe_get_fdir_stats(uint16_t port,
 			     struct rte_eth_fdir_stats *fdir_stats)
diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
index 0f49cb5e5b..48cef1d768 100644
--- a/drivers/net/mlx5/mlx5.c
+++ b/drivers/net/mlx5/mlx5.c
@@ -3332,6 +3332,7 @@ mlx5_set_metadata_mask(struct rte_eth_dev *dev)
 	DRV_LOG(DEBUG, "metadata reg_c0 mask %08X", sh->dv_regc0_mask);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_mlx5_get_dyn_flag_names, 20.02)
 int
 rte_pmd_mlx5_get_dyn_flag_names(char *names[], unsigned int n)
 {
diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c
index f8b3e504b3..85ca209f4c 100644
--- a/drivers/net/mlx5/mlx5_flow.c
+++ b/drivers/net/mlx5/mlx5_flow.c
@@ -7888,6 +7888,7 @@ mlx5_flow_cache_flow_toggle(struct rte_eth_dev *dev, bool orig_prio)
  * @return
  *   Negative value on error, positive on success.
  */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_mlx5_flow_engine_set_mode, 23.03)
 int
 rte_pmd_mlx5_flow_engine_set_mode(enum rte_pmd_mlx5_flow_engine_mode mode, uint32_t flags)
 {
@@ -10993,6 +10994,7 @@ mlx5_action_handle_detach(struct rte_eth_dev *dev)
 	(MLX5DV_DR_DOMAIN_SYNC_FLAGS_SW | MLX5DV_DR_DOMAIN_SYNC_FLAGS_HW)
 #endif
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_mlx5_sync_flow, 20.11)
 int rte_pmd_mlx5_sync_flow(uint16_t port_id, uint32_t domains)
 {
 	struct rte_eth_dev *dev = &rte_eth_devices[port_id];
@@ -12269,6 +12271,7 @@ mlx5_flow_discover_ipv6_tc_support(struct rte_eth_dev *dev)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_mlx5_create_geneve_tlv_parser, 24.03)
 void *
 rte_pmd_mlx5_create_geneve_tlv_parser(uint16_t port_id,
 				      const struct rte_pmd_mlx5_geneve_tlv tlv_list[],
@@ -12286,6 +12289,7 @@ rte_pmd_mlx5_create_geneve_tlv_parser(uint16_t port_id,
 #endif
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_mlx5_destroy_geneve_tlv_parser, 24.03)
 int
 rte_pmd_mlx5_destroy_geneve_tlv_parser(void *handle)
 {
diff --git a/drivers/net/mlx5/mlx5_rx.c b/drivers/net/mlx5/mlx5_rx.c
index 5e58eb8bc9..5008e21e7a 100644
--- a/drivers/net/mlx5/mlx5_rx.c
+++ b/drivers/net/mlx5/mlx5_rx.c
@@ -1559,6 +1559,7 @@ mlxreg_host_shaper_config(struct rte_eth_dev *dev,
 #endif
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_mlx5_host_shaper_config, 22.07)
 int rte_pmd_mlx5_host_shaper_config(int port_id, uint8_t rate,
 				    uint32_t flags)
 {
@@ -1600,6 +1601,7 @@ int rte_pmd_mlx5_host_shaper_config(int port_id, uint8_t rate,
  * @return
  *   0 for Success, non-zero value depending on failure type
  */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_mlx5_rxq_dump_contexts, 24.07)
 int rte_pmd_mlx5_rxq_dump_contexts(uint16_t port_id, uint16_t queue_id, const char *filename)
 {
 	struct rte_eth_dev *dev;
diff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c
index a5971b5cdd..803cc548e9 100644
--- a/drivers/net/mlx5/mlx5_rxq.c
+++ b/drivers/net/mlx5/mlx5_rxq.c
@@ -3281,6 +3281,7 @@ mlx5_external_rx_queue_get_validate(uint16_t port_id, uint16_t dpdk_idx)
 	return &priv->ext_rxqs[dpdk_idx - RTE_PMD_MLX5_EXTERNAL_RX_QUEUE_ID_MIN];
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_mlx5_external_rx_queue_id_map, 22.03)
 int
 rte_pmd_mlx5_external_rx_queue_id_map(uint16_t port_id, uint16_t dpdk_idx,
 				      uint32_t hw_idx)
@@ -3314,6 +3315,7 @@ rte_pmd_mlx5_external_rx_queue_id_map(uint16_t port_id, uint16_t dpdk_idx,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_mlx5_external_rx_queue_id_unmap, 22.03)
 int
 rte_pmd_mlx5_external_rx_queue_id_unmap(uint16_t port_id, uint16_t dpdk_idx)
 {
diff --git a/drivers/net/mlx5/mlx5_tx.c b/drivers/net/mlx5/mlx5_tx.c
index 4286876e12..2962df7698 100644
--- a/drivers/net/mlx5/mlx5_tx.c
+++ b/drivers/net/mlx5/mlx5_tx.c
@@ -776,6 +776,7 @@ mlx5_tx_burst_mode_get(struct rte_eth_dev *dev,
  *   0 for success, non-zero value depending on failure.
  *
  */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_mlx5_txq_dump_contexts, 24.07)
 int rte_pmd_mlx5_txq_dump_contexts(uint16_t port_id, uint16_t queue_id, const char *filename)
 {
 	struct rte_eth_dev *dev;
diff --git a/drivers/net/mlx5/mlx5_txq.c b/drivers/net/mlx5/mlx5_txq.c
index 3e93517323..2309b8c60f 100644
--- a/drivers/net/mlx5/mlx5_txq.c
+++ b/drivers/net/mlx5/mlx5_txq.c
@@ -1342,6 +1342,7 @@ mlx5_txq_get_sqn(struct mlx5_txq_ctrl *txq)
 	return txq->is_hairpin ? txq->obj->sq->id : txq->obj->sq_obj.sq->id;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_mlx5_external_sq_enable, 22.07)
 int
 rte_pmd_mlx5_external_sq_enable(uint16_t port_id, uint32_t sq_num)
 {
@@ -1523,6 +1524,7 @@ mlx5_external_tx_queue_get_validate(uint16_t port_id, uint16_t dpdk_idx)
 	return &priv->ext_txqs[dpdk_idx - MLX5_EXTERNAL_TX_QUEUE_ID_MIN];
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_mlx5_external_tx_queue_id_map, 24.07)
 int
 rte_pmd_mlx5_external_tx_queue_id_map(uint16_t port_id, uint16_t dpdk_idx,
 				      uint32_t hw_idx)
@@ -1556,6 +1558,7 @@ rte_pmd_mlx5_external_tx_queue_id_map(uint16_t port_id, uint16_t dpdk_idx,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pmd_mlx5_external_tx_queue_id_unmap, 24.07)
 int
 rte_pmd_mlx5_external_tx_queue_id_unmap(uint16_t port_id, uint16_t dpdk_idx)
 {
diff --git a/drivers/net/octeontx/octeontx_ethdev.c b/drivers/net/octeontx/octeontx_ethdev.c
index 3b8d717797..af06071815 100644
--- a/drivers/net/octeontx/octeontx_ethdev.c
+++ b/drivers/net/octeontx/octeontx_ethdev.c
@@ -44,6 +44,7 @@ struct octeontx_vdev_init_params {
 	uint8_t	nr_port;
 };
 
+RTE_EXPORT_SYMBOL(rte_octeontx_pchan_map)
 uint16_t
 rte_octeontx_pchan_map[OCTEONTX_MAX_BGX_PORTS][OCTEONTX_MAX_LMAC_PER_BGX];
 
diff --git a/drivers/net/ring/rte_eth_ring.c b/drivers/net/ring/rte_eth_ring.c
index 146bdc8e02..fe4ea82957 100644
--- a/drivers/net/ring/rte_eth_ring.c
+++ b/drivers/net/ring/rte_eth_ring.c
@@ -456,6 +456,7 @@ do_eth_dev_ring_create(const char *name,
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_from_rings)
 int
 rte_eth_from_rings(const char *name, struct rte_ring *const rx_queues[],
 		const unsigned int nb_rx_queues,
@@ -514,6 +515,7 @@ rte_eth_from_rings(const char *name, struct rte_ring *const rx_queues[],
 	return port_id;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_from_ring)
 int
 rte_eth_from_ring(struct rte_ring *r)
 {
diff --git a/drivers/net/softnic/rte_eth_softnic.c b/drivers/net/softnic/rte_eth_softnic.c
index 2147ea35f6..da33922e65 100644
--- a/drivers/net/softnic/rte_eth_softnic.c
+++ b/drivers/net/softnic/rte_eth_softnic.c
@@ -516,6 +516,7 @@ RTE_PMD_REGISTER_PARAM_STRING(net_softnic,
 	PMD_PARAM_CPU_ID "=<uint32> "
 );
 
+RTE_EXPORT_SYMBOL(rte_pmd_softnic_manage)
 int
 rte_pmd_softnic_manage(uint16_t port_id)
 {
diff --git a/drivers/net/softnic/rte_eth_softnic_thread.c b/drivers/net/softnic/rte_eth_softnic_thread.c
index 888af6caf4..b38be89cb2 100644
--- a/drivers/net/softnic/rte_eth_softnic_thread.c
+++ b/drivers/net/softnic/rte_eth_softnic_thread.c
@@ -554,6 +554,7 @@ rte_pmd_softnic_run_internal(void *arg)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_softnic_run)
 int
 rte_pmd_softnic_run(uint16_t port_id)
 {
diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c
index 87c05caccd..6ab588657b 100644
--- a/drivers/net/vhost/rte_eth_vhost.c
+++ b/drivers/net/vhost/rte_eth_vhost.c
@@ -1045,6 +1045,7 @@ vhost_driver_setup(struct rte_eth_dev *eth_dev)
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_vhost_get_queue_event)
 int
 rte_eth_vhost_get_queue_event(uint16_t port_id,
 		struct rte_eth_vhost_queue_event *event)
@@ -1082,6 +1083,7 @@ rte_eth_vhost_get_queue_event(uint16_t port_id,
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_vhost_get_vid_from_port_id)
 int
 rte_eth_vhost_get_vid_from_port_id(uint16_t port_id)
 {
diff --git a/drivers/power/kvm_vm/guest_channel.c b/drivers/power/kvm_vm/guest_channel.c
index 35cd4cfe6f..467b604850 100644
--- a/drivers/power/kvm_vm/guest_channel.c
+++ b/drivers/power/kvm_vm/guest_channel.c
@@ -151,6 +151,7 @@ guest_channel_send_msg(struct rte_power_channel_packet *pkt,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_power_guest_channel_send_msg)
 int rte_power_guest_channel_send_msg(struct rte_power_channel_packet *pkt,
 			unsigned int lcore_id)
 {
@@ -212,6 +213,7 @@ int power_guest_channel_read_msg(void *pkt,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_power_guest_channel_receive_msg)
 int rte_power_guest_channel_receive_msg(void *pkt,
 		size_t pkt_len,
 		unsigned int lcore_id)
diff --git a/drivers/raw/cnxk_rvu_lf/cnxk_rvu_lf.c b/drivers/raw/cnxk_rvu_lf/cnxk_rvu_lf.c
index 54c58a8552..67c20286f0 100644
--- a/drivers/raw/cnxk_rvu_lf/cnxk_rvu_lf.c
+++ b/drivers/raw/cnxk_rvu_lf/cnxk_rvu_lf.c
@@ -16,6 +16,7 @@
 #include "cnxk_rvu_lf.h"
 #include "cnxk_rvu_lf_driver.h"
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_pmd_rvu_lf_msg_id_range_set)
 int
 rte_pmd_rvu_lf_msg_id_range_set(uint8_t dev_id, uint16_t from, uint16_t to)
 {
@@ -30,6 +31,7 @@ rte_pmd_rvu_lf_msg_id_range_set(uint8_t dev_id, uint16_t from, uint16_t to)
 	return roc_rvu_lf_msg_id_range_set(roc_rvu_lf, from, to);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_pmd_rvu_lf_msg_process)
 int
 rte_pmd_rvu_lf_msg_process(uint8_t dev_id, uint16_t vf, uint16_t msg_id,
 			void *req, uint16_t req_len, void *rsp, uint16_t rsp_len)
@@ -45,6 +47,7 @@ rte_pmd_rvu_lf_msg_process(uint8_t dev_id, uint16_t vf, uint16_t msg_id,
 	return roc_rvu_lf_msg_process(roc_rvu_lf, vf, msg_id, req, req_len, rsp, rsp_len);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_pmd_rvu_lf_msg_handler_register)
 int
 rte_pmd_rvu_lf_msg_handler_register(uint8_t dev_id, rte_pmd_rvu_lf_msg_handler_cb_fn cb)
 {
@@ -59,6 +62,7 @@ rte_pmd_rvu_lf_msg_handler_register(uint8_t dev_id, rte_pmd_rvu_lf_msg_handler_c
 	return roc_rvu_lf_msg_handler_register(roc_rvu_lf, (roc_rvu_lf_msg_handler_cb_fn)cb);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_pmd_rvu_lf_msg_handler_unregister)
 int
 rte_pmd_rvu_lf_msg_handler_unregister(uint8_t dev_id)
 {
@@ -73,6 +77,7 @@ rte_pmd_rvu_lf_msg_handler_unregister(uint8_t dev_id)
 	return roc_rvu_lf_msg_handler_unregister(roc_rvu_lf);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_pmd_rvu_lf_irq_register)
 int
 rte_pmd_rvu_lf_irq_register(uint8_t dev_id, unsigned int irq,
 			    rte_pmd_rvu_lf_intr_callback_fn cb, void *data)
@@ -88,6 +93,7 @@ rte_pmd_rvu_lf_irq_register(uint8_t dev_id, unsigned int irq,
 	return roc_rvu_lf_irq_register(roc_rvu_lf, irq, (roc_rvu_lf_intr_cb_fn)cb, data);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_pmd_rvu_lf_irq_unregister)
 int
 rte_pmd_rvu_lf_irq_unregister(uint8_t dev_id, unsigned int irq,
 			      rte_pmd_rvu_lf_intr_callback_fn cb, void *data)
@@ -103,6 +109,7 @@ rte_pmd_rvu_lf_irq_unregister(uint8_t dev_id, unsigned int irq,
 	return roc_rvu_lf_irq_unregister(roc_rvu_lf, irq, (roc_rvu_lf_intr_cb_fn)cb, data);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_pmd_rvu_lf_bar_get)
 int
 rte_pmd_rvu_lf_bar_get(uint8_t dev_id, uint8_t bar_num, size_t *va, size_t *mask)
 {
@@ -127,18 +134,21 @@ rte_pmd_rvu_lf_bar_get(uint8_t dev_id, uint8_t bar_num, size_t *va, size_t *mask
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_pmd_rvu_lf_npa_pf_func_get)
 uint16_t
 rte_pmd_rvu_lf_npa_pf_func_get(void)
 {
 	return roc_npa_pf_func_get();
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_pmd_rvu_lf_sso_pf_func_get)
 uint16_t
 rte_pmd_rvu_lf_sso_pf_func_get(void)
 {
 	return roc_sso_pf_func_get();
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_pmd_rvu_lf_pf_func_get)
 uint16_t
 rte_pmd_rvu_lf_pf_func_get(uint8_t dev_id)
 {
diff --git a/drivers/raw/ifpga/rte_pmd_ifpga.c b/drivers/raw/ifpga/rte_pmd_ifpga.c
index a47d5a0350..96c2c9706c 100644
--- a/drivers/raw/ifpga/rte_pmd_ifpga.c
+++ b/drivers/raw/ifpga/rte_pmd_ifpga.c
@@ -12,6 +12,7 @@
 #include "base/ifpga_sec_mgr.h"
 
 
+RTE_EXPORT_SYMBOL(rte_pmd_ifpga_get_dev_id)
 int
 rte_pmd_ifpga_get_dev_id(const char *pci_addr, uint16_t *dev_id)
 {
@@ -100,6 +101,7 @@ get_share_data(struct opae_adapter *adapter)
 	return sd;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ifpga_get_rsu_status)
 int
 rte_pmd_ifpga_get_rsu_status(uint16_t dev_id, uint32_t *stat, uint32_t *prog)
 {
@@ -122,6 +124,7 @@ rte_pmd_ifpga_get_rsu_status(uint16_t dev_id, uint32_t *stat, uint32_t *prog)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ifpga_set_rsu_status)
 int
 rte_pmd_ifpga_set_rsu_status(uint16_t dev_id, uint32_t stat, uint32_t prog)
 {
@@ -263,6 +266,7 @@ get_port_property(struct opae_adapter *adapter, uint16_t port,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ifpga_get_property)
 int
 rte_pmd_ifpga_get_property(uint16_t dev_id, rte_pmd_ifpga_prop *prop)
 {
@@ -299,6 +303,7 @@ rte_pmd_ifpga_get_property(uint16_t dev_id, rte_pmd_ifpga_prop *prop)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ifpga_get_phy_info)
 int
 rte_pmd_ifpga_get_phy_info(uint16_t dev_id, rte_pmd_ifpga_phy_info *info)
 {
@@ -339,6 +344,7 @@ rte_pmd_ifpga_get_phy_info(uint16_t dev_id, rte_pmd_ifpga_phy_info *info)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ifpga_update_flash)
 int
 rte_pmd_ifpga_update_flash(uint16_t dev_id, const char *image,
 	uint64_t *status)
@@ -352,6 +358,7 @@ rte_pmd_ifpga_update_flash(uint16_t dev_id, const char *image,
 	return opae_mgr_update_flash(adapter->mgr, image, status);
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ifpga_stop_update)
 int
 rte_pmd_ifpga_stop_update(uint16_t dev_id, int force)
 {
@@ -364,6 +371,7 @@ rte_pmd_ifpga_stop_update(uint16_t dev_id, int force)
 	return opae_mgr_stop_flash_update(adapter->mgr, force);
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ifpga_reboot_try)
 int
 rte_pmd_ifpga_reboot_try(uint16_t dev_id)
 {
@@ -390,6 +398,7 @@ rte_pmd_ifpga_reboot_try(uint16_t dev_id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ifpga_reload)
 int
 rte_pmd_ifpga_reload(uint16_t dev_id, int type, int page)
 {
@@ -402,6 +411,7 @@ rte_pmd_ifpga_reload(uint16_t dev_id, int type, int page)
 	return opae_mgr_reload(adapter->mgr, type, page);
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ifpga_partial_reconfigure)
 int
 rte_pmd_ifpga_partial_reconfigure(uint16_t dev_id, int port, const char *file)
 {
@@ -416,6 +426,7 @@ rte_pmd_ifpga_partial_reconfigure(uint16_t dev_id, int port, const char *file)
 	return ifpga_rawdev_partial_reconfigure(dev, port, file);
 }
 
+RTE_EXPORT_SYMBOL(rte_pmd_ifpga_cleanup)
 void
 rte_pmd_ifpga_cleanup(void)
 {
diff --git a/lib/acl/acl_bld.c b/lib/acl/acl_bld.c
index 56e3b31ed6..36dc55b562 100644
--- a/lib/acl/acl_bld.c
+++ b/lib/acl/acl_bld.c
@@ -1621,6 +1621,7 @@ get_first_load_size(const struct rte_acl_config *cfg)
 	return (ofs < max_ofs) ? sizeof(uint32_t) : sizeof(uint8_t);
 }
 
+RTE_EXPORT_SYMBOL(rte_acl_build)
 int
 rte_acl_build(struct rte_acl_ctx *ctx, const struct rte_acl_config *cfg)
 {
diff --git a/lib/acl/acl_run_scalar.c b/lib/acl/acl_run_scalar.c
index 3d61e79409..3f6d48e360 100644
--- a/lib/acl/acl_run_scalar.c
+++ b/lib/acl/acl_run_scalar.c
@@ -106,6 +106,7 @@ scalar_transition(const uint64_t *trans_table, uint64_t transition,
 	return transition;
 }
 
+RTE_EXPORT_SYMBOL(rte_acl_classify_scalar)
 int
 rte_acl_classify_scalar(const struct rte_acl_ctx *ctx, const uint8_t **data,
 	uint32_t *results, uint32_t num, uint32_t categories)
diff --git a/lib/acl/rte_acl.c b/lib/acl/rte_acl.c
index 245b9b6d7a..108956aed4 100644
--- a/lib/acl/rte_acl.c
+++ b/lib/acl/rte_acl.c
@@ -263,6 +263,7 @@ acl_get_best_alg(void)
 	return alg[i];
 }
 
+RTE_EXPORT_SYMBOL(rte_acl_set_ctx_classify)
 extern int
 rte_acl_set_ctx_classify(struct rte_acl_ctx *ctx, enum rte_acl_classify_alg alg)
 {
@@ -285,6 +286,7 @@ rte_acl_set_ctx_classify(struct rte_acl_ctx *ctx, enum rte_acl_classify_alg alg)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_acl_classify_alg)
 int
 rte_acl_classify_alg(const struct rte_acl_ctx *ctx, const uint8_t **data,
 	uint32_t *results, uint32_t num, uint32_t categories,
@@ -297,6 +299,7 @@ rte_acl_classify_alg(const struct rte_acl_ctx *ctx, const uint8_t **data,
 	return classify_fns[alg](ctx, data, results, num, categories);
 }
 
+RTE_EXPORT_SYMBOL(rte_acl_classify)
 int
 rte_acl_classify(const struct rte_acl_ctx *ctx, const uint8_t **data,
 	uint32_t *results, uint32_t num, uint32_t categories)
@@ -305,6 +308,7 @@ rte_acl_classify(const struct rte_acl_ctx *ctx, const uint8_t **data,
 		ctx->alg);
 }
 
+RTE_EXPORT_SYMBOL(rte_acl_find_existing)
 struct rte_acl_ctx *
 rte_acl_find_existing(const char *name)
 {
@@ -329,6 +333,7 @@ rte_acl_find_existing(const char *name)
 	return ctx;
 }
 
+RTE_EXPORT_SYMBOL(rte_acl_free)
 void
 rte_acl_free(struct rte_acl_ctx *ctx)
 {
@@ -361,6 +366,7 @@ rte_acl_free(struct rte_acl_ctx *ctx)
 	rte_free(te);
 }
 
+RTE_EXPORT_SYMBOL(rte_acl_create)
 struct rte_acl_ctx *
 rte_acl_create(const struct rte_acl_param *param)
 {
@@ -457,6 +463,7 @@ acl_check_rule(const struct rte_acl_rule_data *rd)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_acl_add_rules)
 int
 rte_acl_add_rules(struct rte_acl_ctx *ctx, const struct rte_acl_rule *rules,
 	uint32_t num)
@@ -486,6 +493,7 @@ rte_acl_add_rules(struct rte_acl_ctx *ctx, const struct rte_acl_rule *rules,
  * Reset all rules.
  * Note that RT structures are not affected.
  */
+RTE_EXPORT_SYMBOL(rte_acl_reset_rules)
 void
 rte_acl_reset_rules(struct rte_acl_ctx *ctx)
 {
@@ -496,6 +504,7 @@ rte_acl_reset_rules(struct rte_acl_ctx *ctx)
 /*
  * Reset all rules and destroys RT structures.
  */
+RTE_EXPORT_SYMBOL(rte_acl_reset)
 void
 rte_acl_reset(struct rte_acl_ctx *ctx)
 {
@@ -508,6 +517,7 @@ rte_acl_reset(struct rte_acl_ctx *ctx)
 /*
  * Dump ACL context to the stdout.
  */
+RTE_EXPORT_SYMBOL(rte_acl_dump)
 void
 rte_acl_dump(const struct rte_acl_ctx *ctx)
 {
@@ -527,6 +537,7 @@ rte_acl_dump(const struct rte_acl_ctx *ctx)
 /*
  * Dump all ACL contexts to the stdout.
  */
+RTE_EXPORT_SYMBOL(rte_acl_list_dump)
 void
 rte_acl_list_dump(void)
 {
diff --git a/lib/argparse/rte_argparse.c b/lib/argparse/rte_argparse.c
index e7007afc6a..f6f14b0cfb 100644
--- a/lib/argparse/rte_argparse.c
+++ b/lib/argparse/rte_argparse.c
@@ -737,6 +737,7 @@ show_args_help(const struct rte_argparse *obj)
 		printf("\n");
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_argparse_parse, 24.03)
 int
 rte_argparse_parse(struct rte_argparse *obj, int argc, char **argv)
 {
@@ -764,6 +765,7 @@ rte_argparse_parse(struct rte_argparse *obj, int argc, char **argv)
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_argparse_parse_type, 24.03)
 int
 rte_argparse_parse_type(const char *str, uint64_t val_type, void *val)
 {
diff --git a/lib/bbdev/bbdev_trace_points.c b/lib/bbdev/bbdev_trace_points.c
index 6f90e2aa65..80be6070ee 100644
--- a/lib/bbdev/bbdev_trace_points.c
+++ b/lib/bbdev/bbdev_trace_points.c
@@ -21,7 +21,9 @@ RTE_TRACE_POINT_REGISTER(rte_bbdev_trace_queue_start,
 RTE_TRACE_POINT_REGISTER(rte_bbdev_trace_queue_stop,
 	lib.bbdev.queue.stop)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_bbdev_trace_enqueue, 25.03)
 RTE_TRACE_POINT_REGISTER(rte_bbdev_trace_enqueue,
 	lib.bbdev.enq)
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_bbdev_trace_dequeue, 25.03)
 RTE_TRACE_POINT_REGISTER(rte_bbdev_trace_dequeue,
 	lib.bbdev.deq)
diff --git a/lib/bbdev/rte_bbdev.c b/lib/bbdev/rte_bbdev.c
index d7901cd29d..84e18b5f29 100644
--- a/lib/bbdev/rte_bbdev.c
+++ b/lib/bbdev/rte_bbdev.c
@@ -91,6 +91,7 @@ static rte_spinlock_t rte_bbdev_cb_lock = RTE_SPINLOCK_INITIALIZER;
  * Global array of all devices. This is not static because it's used by the
  * inline enqueue and dequeue functions
  */
+RTE_EXPORT_SYMBOL(rte_bbdev_devices)
 struct rte_bbdev rte_bbdev_devices[RTE_BBDEV_MAX_DEVS];
 
 /* Global array with rte_bbdev_data structures */
@@ -172,6 +173,7 @@ find_free_dev_id(void)
 	return RTE_BBDEV_MAX_DEVS;
 }
 
+RTE_EXPORT_SYMBOL(rte_bbdev_allocate)
 struct rte_bbdev *
 rte_bbdev_allocate(const char *name)
 {
@@ -231,6 +233,7 @@ rte_bbdev_allocate(const char *name)
 	return bbdev;
 }
 
+RTE_EXPORT_SYMBOL(rte_bbdev_release)
 int
 rte_bbdev_release(struct rte_bbdev *bbdev)
 {
@@ -266,6 +269,7 @@ rte_bbdev_release(struct rte_bbdev *bbdev)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_bbdev_get_named_dev)
 struct rte_bbdev *
 rte_bbdev_get_named_dev(const char *name)
 {
@@ -286,12 +290,14 @@ rte_bbdev_get_named_dev(const char *name)
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_bbdev_count)
 uint16_t
 rte_bbdev_count(void)
 {
 	return num_devs;
 }
 
+RTE_EXPORT_SYMBOL(rte_bbdev_is_valid)
 bool
 rte_bbdev_is_valid(uint16_t dev_id)
 {
@@ -301,6 +307,7 @@ rte_bbdev_is_valid(uint16_t dev_id)
 	return false;
 }
 
+RTE_EXPORT_SYMBOL(rte_bbdev_find_next)
 uint16_t
 rte_bbdev_find_next(uint16_t dev_id)
 {
@@ -311,6 +318,7 @@ rte_bbdev_find_next(uint16_t dev_id)
 	return dev_id;
 }
 
+RTE_EXPORT_SYMBOL(rte_bbdev_setup_queues)
 int
 rte_bbdev_setup_queues(uint16_t dev_id, uint16_t num_queues, int socket_id)
 {
@@ -403,6 +411,7 @@ rte_bbdev_setup_queues(uint16_t dev_id, uint16_t num_queues, int socket_id)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_bbdev_intr_enable)
 int
 rte_bbdev_intr_enable(uint16_t dev_id)
 {
@@ -435,6 +444,7 @@ rte_bbdev_intr_enable(uint16_t dev_id)
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_SYMBOL(rte_bbdev_queue_configure)
 int
 rte_bbdev_queue_configure(uint16_t dev_id, uint16_t queue_id,
 		const struct rte_bbdev_queue_conf *conf)
@@ -555,6 +565,7 @@ rte_bbdev_queue_configure(uint16_t dev_id, uint16_t queue_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_bbdev_start)
 int
 rte_bbdev_start(uint16_t dev_id)
 {
@@ -589,6 +600,7 @@ rte_bbdev_start(uint16_t dev_id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_bbdev_stop)
 int
 rte_bbdev_stop(uint16_t dev_id)
 {
@@ -612,6 +624,7 @@ rte_bbdev_stop(uint16_t dev_id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_bbdev_close)
 int
 rte_bbdev_close(uint16_t dev_id)
 {
@@ -659,6 +672,7 @@ rte_bbdev_close(uint16_t dev_id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_bbdev_queue_start)
 int
 rte_bbdev_queue_start(uint16_t dev_id, uint16_t queue_id)
 {
@@ -691,6 +705,7 @@ rte_bbdev_queue_start(uint16_t dev_id, uint16_t queue_id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_bbdev_queue_stop)
 int
 rte_bbdev_queue_stop(uint16_t dev_id, uint16_t queue_id)
 {
@@ -755,6 +770,7 @@ reset_stats_in_queues(struct rte_bbdev *dev)
 	rte_bbdev_log_debug("Reset stats on %u", dev->data->dev_id);
 }
 
+RTE_EXPORT_SYMBOL(rte_bbdev_stats_get)
 int
 rte_bbdev_stats_get(uint16_t dev_id, struct rte_bbdev_stats *stats)
 {
@@ -778,6 +794,7 @@ rte_bbdev_stats_get(uint16_t dev_id, struct rte_bbdev_stats *stats)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_bbdev_stats_reset)
 int
 rte_bbdev_stats_reset(uint16_t dev_id)
 {
@@ -795,6 +812,7 @@ rte_bbdev_stats_reset(uint16_t dev_id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_bbdev_info_get)
 int
 rte_bbdev_info_get(uint16_t dev_id, struct rte_bbdev_info *dev_info)
 {
@@ -823,6 +841,7 @@ rte_bbdev_info_get(uint16_t dev_id, struct rte_bbdev_info *dev_info)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_bbdev_queue_info_get)
 int
 rte_bbdev_queue_info_get(uint16_t dev_id, uint16_t queue_id,
 		struct rte_bbdev_queue_info *queue_info)
@@ -909,6 +928,7 @@ bbdev_op_init(struct rte_mempool *mempool, void *arg, void *element,
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_bbdev_op_pool_create)
 struct rte_mempool *
 rte_bbdev_op_pool_create(const char *name, enum rte_bbdev_op_type type,
 		unsigned int num_elements, unsigned int cache_size,
@@ -956,6 +976,7 @@ rte_bbdev_op_pool_create(const char *name, enum rte_bbdev_op_type type,
 	return mp;
 }
 
+RTE_EXPORT_SYMBOL(rte_bbdev_callback_register)
 int
 rte_bbdev_callback_register(uint16_t dev_id, enum rte_bbdev_event_type event,
 		rte_bbdev_cb_fn cb_fn, void *cb_arg)
@@ -1001,6 +1022,7 @@ rte_bbdev_callback_register(uint16_t dev_id, enum rte_bbdev_event_type event,
 	return (user_cb == NULL) ? -ENOMEM : 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_bbdev_callback_unregister)
 int
 rte_bbdev_callback_unregister(uint16_t dev_id, enum rte_bbdev_event_type event,
 		rte_bbdev_cb_fn cb_fn, void *cb_arg)
@@ -1046,6 +1068,7 @@ rte_bbdev_callback_unregister(uint16_t dev_id, enum rte_bbdev_event_type event,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_bbdev_pmd_callback_process)
 void
 rte_bbdev_pmd_callback_process(struct rte_bbdev *dev,
 	enum rte_bbdev_event_type event, void *ret_param)
@@ -1088,6 +1111,7 @@ rte_bbdev_pmd_callback_process(struct rte_bbdev *dev,
 	rte_spinlock_unlock(&rte_bbdev_cb_lock);
 }
 
+RTE_EXPORT_SYMBOL(rte_bbdev_queue_intr_enable)
 int
 rte_bbdev_queue_intr_enable(uint16_t dev_id, uint16_t queue_id)
 {
@@ -1099,6 +1123,7 @@ rte_bbdev_queue_intr_enable(uint16_t dev_id, uint16_t queue_id)
 	return dev->dev_ops->queue_intr_enable(dev, queue_id);
 }
 
+RTE_EXPORT_SYMBOL(rte_bbdev_queue_intr_disable)
 int
 rte_bbdev_queue_intr_disable(uint16_t dev_id, uint16_t queue_id)
 {
@@ -1110,6 +1135,7 @@ rte_bbdev_queue_intr_disable(uint16_t dev_id, uint16_t queue_id)
 	return dev->dev_ops->queue_intr_disable(dev, queue_id);
 }
 
+RTE_EXPORT_SYMBOL(rte_bbdev_queue_intr_ctl)
 int
 rte_bbdev_queue_intr_ctl(uint16_t dev_id, uint16_t queue_id, int epfd, int op,
 		void *data)
@@ -1147,6 +1173,7 @@ rte_bbdev_queue_intr_ctl(uint16_t dev_id, uint16_t queue_id, int epfd, int op,
 }
 
 
+RTE_EXPORT_SYMBOL(rte_bbdev_op_type_str)
 const char *
 rte_bbdev_op_type_str(enum rte_bbdev_op_type op_type)
 {
@@ -1167,6 +1194,7 @@ rte_bbdev_op_type_str(enum rte_bbdev_op_type op_type)
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_bbdev_device_status_str)
 const char *
 rte_bbdev_device_status_str(enum rte_bbdev_device_status status)
 {
@@ -1190,6 +1218,7 @@ rte_bbdev_device_status_str(enum rte_bbdev_device_status status)
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_bbdev_enqueue_status_str)
 const char *
 rte_bbdev_enqueue_status_str(enum rte_bbdev_enqueue_status status)
 {
@@ -1209,6 +1238,7 @@ rte_bbdev_enqueue_status_str(enum rte_bbdev_enqueue_status status)
 }
 
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_bbdev_queue_ops_dump, 24.11)
 int
 rte_bbdev_queue_ops_dump(uint16_t dev_id, uint16_t queue_id, FILE *f)
 {
@@ -1248,6 +1278,7 @@ rte_bbdev_queue_ops_dump(uint16_t dev_id, uint16_t queue_id, FILE *f)
 	return dev->dev_ops->queue_ops_dump(dev, queue_id, f);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_bbdev_ops_param_string, 24.11)
 char *
 rte_bbdev_ops_param_string(void *op, enum rte_bbdev_op_type op_type, char *str, uint32_t len)
 {
diff --git a/lib/bitratestats/rte_bitrate.c b/lib/bitratestats/rte_bitrate.c
index 1664e4863b..d4f309bb7b 100644
--- a/lib/bitratestats/rte_bitrate.c
+++ b/lib/bitratestats/rte_bitrate.c
@@ -28,6 +28,7 @@ struct rte_stats_bitrates {
 	uint16_t id_stats_set;
 };
 
+RTE_EXPORT_SYMBOL(rte_stats_bitrate_create)
 struct rte_stats_bitrates *
 rte_stats_bitrate_create(void)
 {
@@ -35,12 +36,14 @@ rte_stats_bitrate_create(void)
 		RTE_CACHE_LINE_SIZE);
 }
 
+RTE_EXPORT_SYMBOL(rte_stats_bitrate_free)
 void
 rte_stats_bitrate_free(struct rte_stats_bitrates *bitrate_data)
 {
 	rte_free(bitrate_data);
 }
 
+RTE_EXPORT_SYMBOL(rte_stats_bitrate_reg)
 int
 rte_stats_bitrate_reg(struct rte_stats_bitrates *bitrate_data)
 {
@@ -62,6 +65,7 @@ rte_stats_bitrate_reg(struct rte_stats_bitrates *bitrate_data)
 	return return_value;
 }
 
+RTE_EXPORT_SYMBOL(rte_stats_bitrate_calc)
 int
 rte_stats_bitrate_calc(struct rte_stats_bitrates *bitrate_data,
 			uint16_t port_id)
diff --git a/lib/bpf/bpf.c b/lib/bpf/bpf.c
index bbe75c8bfe..82c1e2056a 100644
--- a/lib/bpf/bpf.c
+++ b/lib/bpf/bpf.c
@@ -10,6 +10,7 @@
 
 #include "bpf_impl.h"
 
+RTE_EXPORT_SYMBOL(rte_bpf_destroy)
 void
 rte_bpf_destroy(struct rte_bpf *bpf)
 {
@@ -20,6 +21,7 @@ rte_bpf_destroy(struct rte_bpf *bpf)
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_bpf_get_jit)
 int
 rte_bpf_get_jit(const struct rte_bpf *bpf, struct rte_bpf_jit *jit)
 {
diff --git a/lib/bpf/bpf_convert.c b/lib/bpf/bpf_convert.c
index e7e298c9cb..262722baef 100644
--- a/lib/bpf/bpf_convert.c
+++ b/lib/bpf/bpf_convert.c
@@ -517,6 +517,7 @@ static int bpf_convert_filter(const struct bpf_insn *prog, size_t len,
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_bpf_convert)
 struct rte_bpf_prm *
 rte_bpf_convert(const struct bpf_program *prog)
 {
diff --git a/lib/bpf/bpf_dump.c b/lib/bpf/bpf_dump.c
index b86977b96d..3b4ecdf6d7 100644
--- a/lib/bpf/bpf_dump.c
+++ b/lib/bpf/bpf_dump.c
@@ -43,6 +43,7 @@ static const char *const jump_tbl[16] = {
 	[EBPF_CALL >> 4] = "call", [EBPF_EXIT >> 4] = "exit",
 };
 
+RTE_EXPORT_SYMBOL(rte_bpf_dump)
 void rte_bpf_dump(FILE *f, const struct ebpf_insn *buf, uint32_t len)
 {
 	uint32_t i;
diff --git a/lib/bpf/bpf_exec.c b/lib/bpf/bpf_exec.c
index 5d597ec170..5e74db4f14 100644
--- a/lib/bpf/bpf_exec.c
+++ b/lib/bpf/bpf_exec.c
@@ -475,6 +475,7 @@ bpf_exec(const struct rte_bpf *bpf, uint64_t reg[EBPF_REG_NUM])
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_bpf_exec_burst)
 uint32_t
 rte_bpf_exec_burst(const struct rte_bpf *bpf, void *ctx[], uint64_t rc[],
 	uint32_t num)
@@ -494,6 +495,7 @@ rte_bpf_exec_burst(const struct rte_bpf *bpf, void *ctx[], uint64_t rc[],
 	return i;
 }
 
+RTE_EXPORT_SYMBOL(rte_bpf_exec)
 uint64_t
 rte_bpf_exec(const struct rte_bpf *bpf, void *ctx)
 {
diff --git a/lib/bpf/bpf_load.c b/lib/bpf/bpf_load.c
index de43347405..02413a7b7b 100644
--- a/lib/bpf/bpf_load.c
+++ b/lib/bpf/bpf_load.c
@@ -79,6 +79,7 @@ bpf_check_xsym(const struct rte_bpf_xsym *xsym)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_bpf_load)
 struct rte_bpf *
 rte_bpf_load(const struct rte_bpf_prm *prm)
 {
diff --git a/lib/bpf/bpf_load_elf.c b/lib/bpf/bpf_load_elf.c
index e0abd3c856..d4f79d97d3 100644
--- a/lib/bpf/bpf_load_elf.c
+++ b/lib/bpf/bpf_load_elf.c
@@ -294,6 +294,7 @@ bpf_load_elf(const struct rte_bpf_prm *prm, int32_t fd, const char *section)
 	return bpf;
 }
 
+RTE_EXPORT_SYMBOL(rte_bpf_elf_load)
 struct rte_bpf *
 rte_bpf_elf_load(const struct rte_bpf_prm *prm, const char *fname,
 	const char *sname)
diff --git a/lib/bpf/bpf_pkt.c b/lib/bpf/bpf_pkt.c
index aaca935f2d..18f7e61208 100644
--- a/lib/bpf/bpf_pkt.c
+++ b/lib/bpf/bpf_pkt.c
@@ -465,6 +465,7 @@ bpf_eth_unload(struct bpf_eth_cbh *cbh, uint16_t port, uint16_t queue)
 }
 
 
+RTE_EXPORT_SYMBOL(rte_bpf_eth_rx_unload)
 void
 rte_bpf_eth_rx_unload(uint16_t port, uint16_t queue)
 {
@@ -476,6 +477,7 @@ rte_bpf_eth_rx_unload(uint16_t port, uint16_t queue)
 	rte_spinlock_unlock(&cbh->lock);
 }
 
+RTE_EXPORT_SYMBOL(rte_bpf_eth_tx_unload)
 void
 rte_bpf_eth_tx_unload(uint16_t port, uint16_t queue)
 {
@@ -557,6 +559,7 @@ bpf_eth_elf_load(struct bpf_eth_cbh *cbh, uint16_t port, uint16_t queue,
 	return rc;
 }
 
+RTE_EXPORT_SYMBOL(rte_bpf_eth_rx_elf_load)
 int
 rte_bpf_eth_rx_elf_load(uint16_t port, uint16_t queue,
 	const struct rte_bpf_prm *prm, const char *fname, const char *sname,
@@ -573,6 +576,7 @@ rte_bpf_eth_rx_elf_load(uint16_t port, uint16_t queue,
 	return rc;
 }
 
+RTE_EXPORT_SYMBOL(rte_bpf_eth_tx_elf_load)
 int
 rte_bpf_eth_tx_elf_load(uint16_t port, uint16_t queue,
 	const struct rte_bpf_prm *prm, const char *fname, const char *sname,
diff --git a/lib/bpf/bpf_stub.c b/lib/bpf/bpf_stub.c
index 1babb16bde..51a82b433b 100644
--- a/lib/bpf/bpf_stub.c
+++ b/lib/bpf/bpf_stub.c
@@ -10,6 +10,7 @@
  */
 
 #ifndef RTE_LIBRTE_BPF_ELF
+RTE_EXPORT_SYMBOL(rte_bpf_elf_load)
 struct rte_bpf *
 rte_bpf_elf_load(const struct rte_bpf_prm *prm, const char *fname,
 	const char *sname)
@@ -27,6 +28,7 @@ rte_bpf_elf_load(const struct rte_bpf_prm *prm, const char *fname,
 #endif
 
 #ifndef RTE_HAS_LIBPCAP
+RTE_EXPORT_SYMBOL(rte_bpf_convert)
 struct rte_bpf_prm *
 rte_bpf_convert(const struct bpf_program *prog)
 {
diff --git a/lib/cfgfile/rte_cfgfile.c b/lib/cfgfile/rte_cfgfile.c
index 13ba3957bc..4573876cf7 100644
--- a/lib/cfgfile/rte_cfgfile.c
+++ b/lib/cfgfile/rte_cfgfile.c
@@ -158,6 +158,7 @@ rte_cfgfile_check_params(const struct rte_cfgfile_parameters *params)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_cfgfile_load)
 struct rte_cfgfile *
 rte_cfgfile_load(const char *filename, int flags)
 {
@@ -165,6 +166,7 @@ rte_cfgfile_load(const char *filename, int flags)
 					    &default_cfgfile_params);
 }
 
+RTE_EXPORT_SYMBOL(rte_cfgfile_load_with_params)
 struct rte_cfgfile *
 rte_cfgfile_load_with_params(const char *filename, int flags,
 			     const struct rte_cfgfile_parameters *params)
@@ -269,6 +271,7 @@ rte_cfgfile_load_with_params(const char *filename, int flags,
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_cfgfile_create)
 struct rte_cfgfile *
 rte_cfgfile_create(int flags)
 {
@@ -325,6 +328,7 @@ rte_cfgfile_create(int flags)
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_cfgfile_add_section)
 int
 rte_cfgfile_add_section(struct rte_cfgfile *cfg, const char *sectionname)
 {
@@ -366,6 +370,7 @@ rte_cfgfile_add_section(struct rte_cfgfile *cfg, const char *sectionname)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_cfgfile_add_entry)
 int rte_cfgfile_add_entry(struct rte_cfgfile *cfg,
 		const char *sectionname, const char *entryname,
 		const char *entryvalue)
@@ -390,6 +395,7 @@ int rte_cfgfile_add_entry(struct rte_cfgfile *cfg,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_cfgfile_set_entry)
 int rte_cfgfile_set_entry(struct rte_cfgfile *cfg, const char *sectionname,
 		const char *entryname, const char *entryvalue)
 {
@@ -418,6 +424,7 @@ int rte_cfgfile_set_entry(struct rte_cfgfile *cfg, const char *sectionname,
 	return -EINVAL;
 }
 
+RTE_EXPORT_SYMBOL(rte_cfgfile_save)
 int rte_cfgfile_save(struct rte_cfgfile *cfg, const char *filename)
 {
 	int i, j;
@@ -442,6 +449,7 @@ int rte_cfgfile_save(struct rte_cfgfile *cfg, const char *filename)
 	return fclose(f);
 }
 
+RTE_EXPORT_SYMBOL(rte_cfgfile_close)
 int rte_cfgfile_close(struct rte_cfgfile *cfg)
 {
 	int i;
@@ -465,6 +473,7 @@ int rte_cfgfile_close(struct rte_cfgfile *cfg)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_cfgfile_num_sections)
 int
 rte_cfgfile_num_sections(struct rte_cfgfile *cfg, const char *sectionname,
 size_t length)
@@ -478,6 +487,7 @@ size_t length)
 	return num_sections;
 }
 
+RTE_EXPORT_SYMBOL(rte_cfgfile_sections)
 int
 rte_cfgfile_sections(struct rte_cfgfile *cfg, char *sections[],
 	int max_sections)
@@ -490,12 +500,14 @@ rte_cfgfile_sections(struct rte_cfgfile *cfg, char *sections[],
 	return i;
 }
 
+RTE_EXPORT_SYMBOL(rte_cfgfile_has_section)
 int
 rte_cfgfile_has_section(struct rte_cfgfile *cfg, const char *sectionname)
 {
 	return _get_section(cfg, sectionname) != NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_cfgfile_section_num_entries)
 int
 rte_cfgfile_section_num_entries(struct rte_cfgfile *cfg,
 	const char *sectionname)
@@ -506,6 +518,7 @@ rte_cfgfile_section_num_entries(struct rte_cfgfile *cfg,
 	return s->num_entries;
 }
 
+RTE_EXPORT_SYMBOL(rte_cfgfile_section_num_entries_by_index)
 int
 rte_cfgfile_section_num_entries_by_index(struct rte_cfgfile *cfg,
 	char *sectionname, int index)
@@ -518,6 +531,7 @@ rte_cfgfile_section_num_entries_by_index(struct rte_cfgfile *cfg,
 	strlcpy(sectionname, sect->name, CFG_NAME_LEN);
 	return sect->num_entries;
 }
+RTE_EXPORT_SYMBOL(rte_cfgfile_section_entries)
 int
 rte_cfgfile_section_entries(struct rte_cfgfile *cfg, const char *sectionname,
 		struct rte_cfgfile_entry *entries, int max_entries)
@@ -531,6 +545,7 @@ rte_cfgfile_section_entries(struct rte_cfgfile *cfg, const char *sectionname,
 	return i;
 }
 
+RTE_EXPORT_SYMBOL(rte_cfgfile_section_entries_by_index)
 int
 rte_cfgfile_section_entries_by_index(struct rte_cfgfile *cfg, int index,
 		char *sectionname,
@@ -548,6 +563,7 @@ rte_cfgfile_section_entries_by_index(struct rte_cfgfile *cfg, int index,
 	return i;
 }
 
+RTE_EXPORT_SYMBOL(rte_cfgfile_get_entry)
 const char *
 rte_cfgfile_get_entry(struct rte_cfgfile *cfg, const char *sectionname,
 		const char *entryname)
@@ -563,6 +579,7 @@ rte_cfgfile_get_entry(struct rte_cfgfile *cfg, const char *sectionname,
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_cfgfile_has_entry)
 int
 rte_cfgfile_has_entry(struct rte_cfgfile *cfg, const char *sectionname,
 		const char *entryname)
diff --git a/lib/cmdline/cmdline.c b/lib/cmdline/cmdline.c
index 08721ee919..0831096baa 100644
--- a/lib/cmdline/cmdline.c
+++ b/lib/cmdline/cmdline.c
@@ -39,6 +39,7 @@ cmdline_complete_buffer(struct rdline *rdl, const char *buf,
 	return cmdline_complete(cl, buf, state, dstbuf, dstsize);
 }
 
+RTE_EXPORT_SYMBOL(cmdline_write_char)
 int
 cmdline_write_char(struct rdline *rdl, char c)
 {
@@ -57,6 +58,7 @@ cmdline_write_char(struct rdline *rdl, char c)
 }
 
 
+RTE_EXPORT_SYMBOL(cmdline_set_prompt)
 void
 cmdline_set_prompt(struct cmdline *cl, const char *prompt)
 {
@@ -65,6 +67,7 @@ cmdline_set_prompt(struct cmdline *cl, const char *prompt)
 	strlcpy(cl->prompt, prompt, sizeof(cl->prompt));
 }
 
+RTE_EXPORT_SYMBOL(cmdline_new)
 struct cmdline *
 cmdline_new(cmdline_parse_ctx_t *ctx, const char *prompt, int s_in, int s_out)
 {
@@ -95,12 +98,14 @@ cmdline_new(cmdline_parse_ctx_t *ctx, const char *prompt, int s_in, int s_out)
 	return cl;
 }
 
+RTE_EXPORT_SYMBOL(cmdline_get_rdline)
 struct rdline*
 cmdline_get_rdline(struct cmdline *cl)
 {
 	return &cl->rdl;
 }
 
+RTE_EXPORT_SYMBOL(cmdline_free)
 void
 cmdline_free(struct cmdline *cl)
 {
@@ -116,6 +121,7 @@ cmdline_free(struct cmdline *cl)
 	free(cl);
 }
 
+RTE_EXPORT_SYMBOL(cmdline_printf)
 void
 cmdline_printf(const struct cmdline *cl, const char *fmt, ...)
 {
@@ -131,6 +137,7 @@ cmdline_printf(const struct cmdline *cl, const char *fmt, ...)
 	va_end(ap);
 }
 
+RTE_EXPORT_SYMBOL(cmdline_in)
 int
 cmdline_in(struct cmdline *cl, const char *buf, int size)
 {
@@ -168,6 +175,7 @@ cmdline_in(struct cmdline *cl, const char *buf, int size)
 	return i;
 }
 
+RTE_EXPORT_SYMBOL(cmdline_quit)
 void
 cmdline_quit(struct cmdline *cl)
 {
@@ -177,6 +185,7 @@ cmdline_quit(struct cmdline *cl)
 	rdline_quit(&cl->rdl);
 }
 
+RTE_EXPORT_SYMBOL(cmdline_interact)
 void
 cmdline_interact(struct cmdline *cl)
 {
diff --git a/lib/cmdline/cmdline_cirbuf.c b/lib/cmdline/cmdline_cirbuf.c
index 829a8af563..0f6c942b04 100644
--- a/lib/cmdline/cmdline_cirbuf.c
+++ b/lib/cmdline/cmdline_cirbuf.c
@@ -11,6 +11,7 @@
 #include "cmdline_cirbuf.h"
 
 
+RTE_EXPORT_SYMBOL(cirbuf_init)
 int
 cirbuf_init(struct cirbuf *cbuf, char *buf, unsigned int start, unsigned int maxlen)
 {
@@ -26,6 +27,7 @@ cirbuf_init(struct cirbuf *cbuf, char *buf, unsigned int start, unsigned int max
 
 /* multiple add */
 
+RTE_EXPORT_SYMBOL(cirbuf_add_buf_head)
 int
 cirbuf_add_buf_head(struct cirbuf *cbuf, const char *c, unsigned int n)
 {
@@ -57,6 +59,7 @@ cirbuf_add_buf_head(struct cirbuf *cbuf, const char *c, unsigned int n)
 
 /* multiple add */
 
+RTE_EXPORT_SYMBOL(cirbuf_add_buf_tail)
 int
 cirbuf_add_buf_tail(struct cirbuf *cbuf, const char *c, unsigned int n)
 {
@@ -100,6 +103,7 @@ __cirbuf_add_head(struct cirbuf * cbuf, char c)
 	cbuf->len ++;
 }
 
+RTE_EXPORT_SYMBOL(cirbuf_add_head_safe)
 int
 cirbuf_add_head_safe(struct cirbuf * cbuf, char c)
 {
@@ -110,6 +114,7 @@ cirbuf_add_head_safe(struct cirbuf * cbuf, char c)
 	return -EINVAL;
 }
 
+RTE_EXPORT_SYMBOL(cirbuf_add_head)
 void
 cirbuf_add_head(struct cirbuf * cbuf, char c)
 {
@@ -129,6 +134,7 @@ __cirbuf_add_tail(struct cirbuf * cbuf, char c)
 	cbuf->len ++;
 }
 
+RTE_EXPORT_SYMBOL(cirbuf_add_tail_safe)
 int
 cirbuf_add_tail_safe(struct cirbuf * cbuf, char c)
 {
@@ -139,6 +145,7 @@ cirbuf_add_tail_safe(struct cirbuf * cbuf, char c)
 	return -EINVAL;
 }
 
+RTE_EXPORT_SYMBOL(cirbuf_add_tail)
 void
 cirbuf_add_tail(struct cirbuf * cbuf, char c)
 {
@@ -181,6 +188,7 @@ __cirbuf_shift_right(struct cirbuf *cbuf)
 }
 
 /* XXX we could do a better algorithm here... */
+RTE_EXPORT_SYMBOL(cirbuf_align_left)
 int
 cirbuf_align_left(struct cirbuf * cbuf)
 {
@@ -202,6 +210,7 @@ cirbuf_align_left(struct cirbuf * cbuf)
 }
 
 /* XXX we could do a better algorithm here... */
+RTE_EXPORT_SYMBOL(cirbuf_align_right)
 int
 cirbuf_align_right(struct cirbuf * cbuf)
 {
@@ -224,6 +233,7 @@ cirbuf_align_right(struct cirbuf * cbuf)
 
 /* buffer del */
 
+RTE_EXPORT_SYMBOL(cirbuf_del_buf_head)
 int
 cirbuf_del_buf_head(struct cirbuf *cbuf, unsigned int size)
 {
@@ -244,6 +254,7 @@ cirbuf_del_buf_head(struct cirbuf *cbuf, unsigned int size)
 
 /* buffer del */
 
+RTE_EXPORT_SYMBOL(cirbuf_del_buf_tail)
 int
 cirbuf_del_buf_tail(struct cirbuf *cbuf, unsigned int size)
 {
@@ -274,6 +285,7 @@ __cirbuf_del_head(struct cirbuf * cbuf)
 	}
 }
 
+RTE_EXPORT_SYMBOL(cirbuf_del_head_safe)
 int
 cirbuf_del_head_safe(struct cirbuf * cbuf)
 {
@@ -284,6 +296,7 @@ cirbuf_del_head_safe(struct cirbuf * cbuf)
 	return -EINVAL;
 }
 
+RTE_EXPORT_SYMBOL(cirbuf_del_head)
 void
 cirbuf_del_head(struct cirbuf * cbuf)
 {
@@ -302,6 +315,7 @@ __cirbuf_del_tail(struct cirbuf * cbuf)
 	}
 }
 
+RTE_EXPORT_SYMBOL(cirbuf_del_tail_safe)
 int
 cirbuf_del_tail_safe(struct cirbuf * cbuf)
 {
@@ -312,6 +326,7 @@ cirbuf_del_tail_safe(struct cirbuf * cbuf)
 	return -EINVAL;
 }
 
+RTE_EXPORT_SYMBOL(cirbuf_del_tail)
 void
 cirbuf_del_tail(struct cirbuf * cbuf)
 {
@@ -320,6 +335,7 @@ cirbuf_del_tail(struct cirbuf * cbuf)
 
 /* convert to buffer */
 
+RTE_EXPORT_SYMBOL(cirbuf_get_buf_head)
 int
 cirbuf_get_buf_head(struct cirbuf *cbuf, char *c, unsigned int size)
 {
@@ -358,6 +374,7 @@ cirbuf_get_buf_head(struct cirbuf *cbuf, char *c, unsigned int size)
 
 /* convert to buffer */
 
+RTE_EXPORT_SYMBOL(cirbuf_get_buf_tail)
 int
 cirbuf_get_buf_tail(struct cirbuf *cbuf, char *c, unsigned int size)
 {
@@ -397,6 +414,7 @@ cirbuf_get_buf_tail(struct cirbuf *cbuf, char *c, unsigned int size)
 
 /* get head or get tail */
 
+RTE_EXPORT_SYMBOL(cirbuf_get_head)
 char
 cirbuf_get_head(struct cirbuf * cbuf)
 {
@@ -405,6 +423,7 @@ cirbuf_get_head(struct cirbuf * cbuf)
 
 /* get head or get tail */
 
+RTE_EXPORT_SYMBOL(cirbuf_get_tail)
 char
 cirbuf_get_tail(struct cirbuf * cbuf)
 {
diff --git a/lib/cmdline/cmdline_parse.c b/lib/cmdline/cmdline_parse.c
index 76a212d001..ddedc9c0dc 100644
--- a/lib/cmdline/cmdline_parse.c
+++ b/lib/cmdline/cmdline_parse.c
@@ -49,6 +49,7 @@ iscomment(char c)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(cmdline_isendoftoken)
 int
 cmdline_isendoftoken(char c)
 {
@@ -296,18 +297,21 @@ __cmdline_parse(struct cmdline *cl, const char *buf, bool call_fn)
 	return linelen;
 }
 
+RTE_EXPORT_SYMBOL(cmdline_parse)
 int
 cmdline_parse(struct cmdline *cl, const char *buf)
 {
 	return __cmdline_parse(cl, buf, true);
 }
 
+RTE_EXPORT_SYMBOL(cmdline_parse_check)
 int
 cmdline_parse_check(struct cmdline *cl, const char *buf)
 {
 	return __cmdline_parse(cl, buf, false);
 }
 
+RTE_EXPORT_SYMBOL(cmdline_complete)
 int
 cmdline_complete(struct cmdline *cl, const char *buf, int *state,
 		 char *dst, unsigned int size)
diff --git a/lib/cmdline/cmdline_parse_bool.c b/lib/cmdline/cmdline_parse_bool.c
index aa7bf88d5a..88864d8750 100644
--- a/lib/cmdline/cmdline_parse_bool.c
+++ b/lib/cmdline/cmdline_parse_bool.c
@@ -13,6 +13,7 @@
 #include "cmdline_parse_bool.h"
 
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(cmdline_token_bool_ops, 25.03)
 struct cmdline_token_ops cmdline_token_bool_ops = {
 	.parse = cmdline_parse_bool,
 	.complete_get_nb = NULL,
diff --git a/lib/cmdline/cmdline_parse_etheraddr.c b/lib/cmdline/cmdline_parse_etheraddr.c
index 433b828a72..1fa565aee9 100644
--- a/lib/cmdline/cmdline_parse_etheraddr.c
+++ b/lib/cmdline/cmdline_parse_etheraddr.c
@@ -13,6 +13,7 @@
 #include "cmdline_parse.h"
 #include "cmdline_parse_etheraddr.h"
 
+RTE_EXPORT_SYMBOL(cmdline_token_etheraddr_ops)
 struct cmdline_token_ops cmdline_token_etheraddr_ops = {
 	.parse = cmdline_parse_etheraddr,
 	.complete_get_nb = NULL,
@@ -20,6 +21,7 @@ struct cmdline_token_ops cmdline_token_etheraddr_ops = {
 	.get_help = cmdline_get_help_etheraddr,
 };
 
+RTE_EXPORT_SYMBOL(cmdline_parse_etheraddr)
 int
 cmdline_parse_etheraddr(__rte_unused cmdline_parse_token_hdr_t *tk,
 	const char *buf, void *res, unsigned ressize)
@@ -51,6 +53,7 @@ cmdline_parse_etheraddr(__rte_unused cmdline_parse_token_hdr_t *tk,
 	return token_len;
 }
 
+RTE_EXPORT_SYMBOL(cmdline_get_help_etheraddr)
 int
 cmdline_get_help_etheraddr(__rte_unused cmdline_parse_token_hdr_t *tk,
 			       char *dstbuf, unsigned int size)
diff --git a/lib/cmdline/cmdline_parse_ipaddr.c b/lib/cmdline/cmdline_parse_ipaddr.c
index 5e278c963f..5cee96c608 100644
--- a/lib/cmdline/cmdline_parse_ipaddr.c
+++ b/lib/cmdline/cmdline_parse_ipaddr.c
@@ -14,6 +14,7 @@
 #include "cmdline_parse.h"
 #include "cmdline_parse_ipaddr.h"
 
+RTE_EXPORT_SYMBOL(cmdline_token_ipaddr_ops)
 struct cmdline_token_ops cmdline_token_ipaddr_ops = {
 	.parse = cmdline_parse_ipaddr,
 	.complete_get_nb = NULL,
@@ -24,6 +25,7 @@ struct cmdline_token_ops cmdline_token_ipaddr_ops = {
 #define PREFIXMAX 128
 #define V4PREFIXMAX 32
 
+RTE_EXPORT_SYMBOL(cmdline_parse_ipaddr)
 int
 cmdline_parse_ipaddr(cmdline_parse_token_hdr_t *tk, const char *buf, void *res,
 	unsigned ressize)
@@ -90,6 +92,7 @@ cmdline_parse_ipaddr(cmdline_parse_token_hdr_t *tk, const char *buf, void *res,
 
 }
 
+RTE_EXPORT_SYMBOL(cmdline_get_help_ipaddr)
 int cmdline_get_help_ipaddr(cmdline_parse_token_hdr_t *tk, char *dstbuf,
 			    unsigned int size)
 {
diff --git a/lib/cmdline/cmdline_parse_num.c b/lib/cmdline/cmdline_parse_num.c
index 6dc325e6da..c5b3d0ef7d 100644
--- a/lib/cmdline/cmdline_parse_num.c
+++ b/lib/cmdline/cmdline_parse_num.c
@@ -20,6 +20,7 @@
 #define debug_printf(...) do {} while (0)
 #endif
 
+RTE_EXPORT_SYMBOL(cmdline_token_num_ops)
 struct cmdline_token_ops cmdline_token_num_ops = {
 	.parse = cmdline_parse_num,
 	.complete_get_nb = NULL,
@@ -92,6 +93,7 @@ check_res_size(struct cmdline_token_num_data *nd, unsigned ressize)
 }
 
 /* parse an int */
+RTE_EXPORT_SYMBOL(cmdline_parse_num)
 int
 cmdline_parse_num(cmdline_parse_token_hdr_t *tk, const char *srcbuf, void *res,
 	unsigned ressize)
@@ -313,6 +315,7 @@ cmdline_parse_num(cmdline_parse_token_hdr_t *tk, const char *srcbuf, void *res,
 
 
 /* parse an int */
+RTE_EXPORT_SYMBOL(cmdline_get_help_num)
 int
 cmdline_get_help_num(cmdline_parse_token_hdr_t *tk, char *dstbuf, unsigned int size)
 {
diff --git a/lib/cmdline/cmdline_parse_portlist.c b/lib/cmdline/cmdline_parse_portlist.c
index 2e2294553a..7966a28173 100644
--- a/lib/cmdline/cmdline_parse_portlist.c
+++ b/lib/cmdline/cmdline_parse_portlist.c
@@ -13,6 +13,7 @@
 #include "cmdline_parse.h"
 #include "cmdline_parse_portlist.h"
 
+RTE_EXPORT_SYMBOL(cmdline_token_portlist_ops)
 struct cmdline_token_ops cmdline_token_portlist_ops = {
 	.parse = cmdline_parse_portlist,
 	.complete_get_nb = NULL,
@@ -68,6 +69,7 @@ parse_ports(cmdline_portlist_t *pl, const char *str)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(cmdline_parse_portlist)
 int
 cmdline_parse_portlist(__rte_unused cmdline_parse_token_hdr_t *tk,
 	const char *buf, void *res, unsigned ressize)
@@ -104,6 +106,7 @@ cmdline_parse_portlist(__rte_unused cmdline_parse_token_hdr_t *tk,
 	return token_len;
 }
 
+RTE_EXPORT_SYMBOL(cmdline_get_help_portlist)
 int
 cmdline_get_help_portlist(__rte_unused cmdline_parse_token_hdr_t *tk,
 		char *dstbuf, unsigned int size)
diff --git a/lib/cmdline/cmdline_parse_string.c b/lib/cmdline/cmdline_parse_string.c
index d756638905..0f1e9f16a4 100644
--- a/lib/cmdline/cmdline_parse_string.c
+++ b/lib/cmdline/cmdline_parse_string.c
@@ -11,6 +11,7 @@
 #include "cmdline_parse.h"
 #include "cmdline_parse_string.h"
 
+RTE_EXPORT_SYMBOL(cmdline_token_string_ops)
 struct cmdline_token_ops cmdline_token_string_ops = {
 	.parse = cmdline_parse_string,
 	.complete_get_nb = cmdline_complete_get_nb_string,
@@ -47,6 +48,7 @@ get_next_token(const char *s)
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(cmdline_parse_string)
 int
 cmdline_parse_string(cmdline_parse_token_hdr_t *tk, const char *buf, void *res,
 	unsigned ressize)
@@ -132,6 +134,7 @@ cmdline_parse_string(cmdline_parse_token_hdr_t *tk, const char *buf, void *res,
 	return token_len;
 }
 
+RTE_EXPORT_SYMBOL(cmdline_complete_get_nb_string)
 int cmdline_complete_get_nb_string(cmdline_parse_token_hdr_t *tk)
 {
 	struct cmdline_token_string *tk2;
@@ -155,6 +158,7 @@ int cmdline_complete_get_nb_string(cmdline_parse_token_hdr_t *tk)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(cmdline_complete_get_elt_string)
 int cmdline_complete_get_elt_string(cmdline_parse_token_hdr_t *tk, int idx,
 				    char *dstbuf, unsigned int size)
 {
@@ -187,6 +191,7 @@ int cmdline_complete_get_elt_string(cmdline_parse_token_hdr_t *tk, int idx,
 }
 
 
+RTE_EXPORT_SYMBOL(cmdline_get_help_string)
 int cmdline_get_help_string(cmdline_parse_token_hdr_t *tk, char *dstbuf,
 			    unsigned int size)
 {
diff --git a/lib/cmdline/cmdline_rdline.c b/lib/cmdline/cmdline_rdline.c
index 5cf723a012..5462ae5bb1 100644
--- a/lib/cmdline/cmdline_rdline.c
+++ b/lib/cmdline/cmdline_rdline.c
@@ -52,6 +52,7 @@ rdline_init(struct rdline *rdl,
 	return cirbuf_init(&rdl->history, rdl->history_buf, 0, RDLINE_HISTORY_BUF_SIZE);
 }
 
+RTE_EXPORT_SYMBOL(rdline_new)
 struct rdline *
 rdline_new(rdline_write_char_t *write_char,
 	   rdline_validate_t *validate,
@@ -68,12 +69,14 @@ rdline_new(rdline_write_char_t *write_char,
 	return rdl;
 }
 
+RTE_EXPORT_SYMBOL(rdline_free)
 void
 rdline_free(struct rdline *rdl)
 {
 	free(rdl);
 }
 
+RTE_EXPORT_SYMBOL(rdline_newline)
 void
 rdline_newline(struct rdline *rdl, const char *prompt)
 {
@@ -98,6 +101,7 @@ rdline_newline(struct rdline *rdl, const char *prompt)
 	rdl->history_cur_line = -1;
 }
 
+RTE_EXPORT_SYMBOL(rdline_stop)
 void
 rdline_stop(struct rdline *rdl)
 {
@@ -106,6 +110,7 @@ rdline_stop(struct rdline *rdl)
 	rdl->status = RDLINE_INIT;
 }
 
+RTE_EXPORT_SYMBOL(rdline_quit)
 void
 rdline_quit(struct rdline *rdl)
 {
@@ -114,6 +119,7 @@ rdline_quit(struct rdline *rdl)
 	rdl->status = RDLINE_EXITED;
 }
 
+RTE_EXPORT_SYMBOL(rdline_restart)
 void
 rdline_restart(struct rdline *rdl)
 {
@@ -122,6 +128,7 @@ rdline_restart(struct rdline *rdl)
 	rdl->status = RDLINE_RUNNING;
 }
 
+RTE_EXPORT_SYMBOL(rdline_reset)
 void
 rdline_reset(struct rdline *rdl)
 {
@@ -136,6 +143,7 @@ rdline_reset(struct rdline *rdl)
 	rdl->history_cur_line = -1;
 }
 
+RTE_EXPORT_SYMBOL(rdline_get_buffer)
 const char *
 rdline_get_buffer(struct rdline *rdl)
 {
@@ -172,6 +180,7 @@ display_right_buffer(struct rdline *rdl, int force)
 				  CIRBUF_GET_LEN(&rdl->right));
 }
 
+RTE_EXPORT_SYMBOL(rdline_redisplay)
 void
 rdline_redisplay(struct rdline *rdl)
 {
@@ -190,6 +199,7 @@ rdline_redisplay(struct rdline *rdl)
 	display_right_buffer(rdl, 1);
 }
 
+RTE_EXPORT_SYMBOL(rdline_char_in)
 int
 rdline_char_in(struct rdline *rdl, char c)
 {
@@ -561,6 +571,7 @@ rdline_get_history_size(struct rdline * rdl)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rdline_get_history_item)
 char *
 rdline_get_history_item(struct rdline * rdl, unsigned int idx)
 {
@@ -587,18 +598,21 @@ rdline_get_history_item(struct rdline * rdl, unsigned int idx)
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rdline_get_history_buffer_size)
 size_t
 rdline_get_history_buffer_size(struct rdline *rdl)
 {
 	return sizeof(rdl->history_buf);
 }
 
+RTE_EXPORT_SYMBOL(rdline_get_opaque)
 void *
 rdline_get_opaque(struct rdline *rdl)
 {
 	return rdl != NULL ? rdl->opaque : NULL;
 }
 
+RTE_EXPORT_SYMBOL(rdline_add_history)
 int
 rdline_add_history(struct rdline * rdl, const char * buf)
 {
@@ -628,6 +642,7 @@ rdline_add_history(struct rdline * rdl, const char * buf)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rdline_clear_history)
 void
 rdline_clear_history(struct rdline * rdl)
 {
diff --git a/lib/cmdline/cmdline_socket.c b/lib/cmdline/cmdline_socket.c
index 78fb67c474..c4e13d2858 100644
--- a/lib/cmdline/cmdline_socket.c
+++ b/lib/cmdline/cmdline_socket.c
@@ -12,6 +12,7 @@
 #include "cmdline_private.h"
 #include "cmdline_socket.h"
 
+RTE_EXPORT_SYMBOL(cmdline_file_new)
 struct cmdline *
 cmdline_file_new(cmdline_parse_ctx_t *ctx, const char *prompt, const char *path)
 {
@@ -29,6 +30,7 @@ cmdline_file_new(cmdline_parse_ctx_t *ctx, const char *prompt, const char *path)
 	return cmdline_new(ctx, prompt, fd, -1);
 }
 
+RTE_EXPORT_SYMBOL(cmdline_stdin_new)
 struct cmdline *
 cmdline_stdin_new(cmdline_parse_ctx_t *ctx, const char *prompt)
 {
@@ -42,6 +44,7 @@ cmdline_stdin_new(cmdline_parse_ctx_t *ctx, const char *prompt)
 	return cl;
 }
 
+RTE_EXPORT_SYMBOL(cmdline_stdin_exit)
 void
 cmdline_stdin_exit(struct cmdline *cl)
 {
diff --git a/lib/cmdline/cmdline_vt100.c b/lib/cmdline/cmdline_vt100.c
index 4c9a46c953..ebc020c040 100644
--- a/lib/cmdline/cmdline_vt100.c
+++ b/lib/cmdline/cmdline_vt100.c
@@ -40,6 +40,7 @@ const char *cmdline_vt100_commands[] = {
 	vt100_bs,
 };
 
+RTE_EXPORT_SYMBOL(vt100_init)
 void
 vt100_init(struct cmdline_vt100 *vt)
 {
@@ -69,6 +70,7 @@ match_command(char *buf, unsigned int size)
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(vt100_parser)
 int
 vt100_parser(struct cmdline_vt100 *vt, char ch)
 {
diff --git a/lib/compressdev/rte_comp.c b/lib/compressdev/rte_comp.c
index f060c68557..1fb0ae5271 100644
--- a/lib/compressdev/rte_comp.c
+++ b/lib/compressdev/rte_comp.c
@@ -5,6 +5,7 @@
 #include "rte_comp.h"
 #include "rte_compressdev_internal.h"
 
+RTE_EXPORT_SYMBOL(rte_comp_get_feature_name)
 const char *
 rte_comp_get_feature_name(uint64_t flag)
 {
@@ -123,6 +124,7 @@ rte_comp_op_init(struct rte_mempool *mempool,
 	op->mempool = mempool;
 }
 
+RTE_EXPORT_SYMBOL(rte_comp_op_pool_create)
 struct rte_mempool *
 rte_comp_op_pool_create(const char *name,
 		unsigned int nb_elts, unsigned int cache_size,
@@ -178,6 +180,7 @@ rte_comp_op_pool_create(const char *name,
 	return mp;
 }
 
+RTE_EXPORT_SYMBOL(rte_comp_op_alloc)
 struct rte_comp_op *
 rte_comp_op_alloc(struct rte_mempool *mempool)
 {
@@ -193,6 +196,7 @@ rte_comp_op_alloc(struct rte_mempool *mempool)
 	return op;
 }
 
+RTE_EXPORT_SYMBOL(rte_comp_op_bulk_alloc)
 int
 rte_comp_op_bulk_alloc(struct rte_mempool *mempool,
 		struct rte_comp_op **ops, uint16_t nb_ops)
@@ -218,6 +222,7 @@ rte_comp_op_bulk_alloc(struct rte_mempool *mempool,
  * @param op
  *   Compress operation
  */
+RTE_EXPORT_SYMBOL(rte_comp_op_free)
 void
 rte_comp_op_free(struct rte_comp_op *op)
 {
@@ -225,6 +230,7 @@ rte_comp_op_free(struct rte_comp_op *op)
 		rte_mempool_put(op->mempool, op);
 }
 
+RTE_EXPORT_SYMBOL(rte_comp_op_bulk_free)
 void
 rte_comp_op_bulk_free(struct rte_comp_op **ops, uint16_t nb_ops)
 {
diff --git a/lib/compressdev/rte_compressdev.c b/lib/compressdev/rte_compressdev.c
index 5bc7ea5250..f47d0bf3c4 100644
--- a/lib/compressdev/rte_compressdev.c
+++ b/lib/compressdev/rte_compressdev.c
@@ -28,6 +28,7 @@ static struct rte_compressdev_global compressdev_globals = {
 		.max_devs		= RTE_COMPRESS_MAX_DEVS
 };
 
+RTE_EXPORT_SYMBOL(rte_compressdev_capability_get)
 const struct rte_compressdev_capabilities *
 rte_compressdev_capability_get(uint8_t dev_id,
 			enum rte_comp_algorithm algo)
@@ -51,6 +52,7 @@ rte_compressdev_capability_get(uint8_t dev_id,
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_compressdev_get_feature_name)
 const char *
 rte_compressdev_get_feature_name(uint64_t flag)
 {
@@ -80,6 +82,7 @@ rte_compressdev_get_dev(uint8_t dev_id)
 	return &compressdev_globals.devs[dev_id];
 }
 
+RTE_EXPORT_SYMBOL(rte_compressdev_pmd_get_named_dev)
 struct rte_compressdev *
 rte_compressdev_pmd_get_named_dev(const char *name)
 {
@@ -116,6 +119,7 @@ rte_compressdev_is_valid_dev(uint8_t dev_id)
 }
 
 
+RTE_EXPORT_SYMBOL(rte_compressdev_get_dev_id)
 int
 rte_compressdev_get_dev_id(const char *name)
 {
@@ -134,12 +138,14 @@ rte_compressdev_get_dev_id(const char *name)
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_compressdev_count)
 uint8_t
 rte_compressdev_count(void)
 {
 	return compressdev_globals.nb_devs;
 }
 
+RTE_EXPORT_SYMBOL(rte_compressdev_devices_get)
 uint8_t
 rte_compressdev_devices_get(const char *driver_name, uint8_t *devices,
 	uint8_t nb_devices)
@@ -165,6 +171,7 @@ rte_compressdev_devices_get(const char *driver_name, uint8_t *devices,
 	return count;
 }
 
+RTE_EXPORT_SYMBOL(rte_compressdev_socket_id)
 int
 rte_compressdev_socket_id(uint8_t dev_id)
 {
@@ -222,6 +229,7 @@ rte_compressdev_find_free_device_index(void)
 	return RTE_COMPRESS_MAX_DEVS;
 }
 
+RTE_EXPORT_SYMBOL(rte_compressdev_pmd_allocate)
 struct rte_compressdev *
 rte_compressdev_pmd_allocate(const char *name, int socket_id)
 {
@@ -268,6 +276,7 @@ rte_compressdev_pmd_allocate(const char *name, int socket_id)
 	return compressdev;
 }
 
+RTE_EXPORT_SYMBOL(rte_compressdev_pmd_release_device)
 int
 rte_compressdev_pmd_release_device(struct rte_compressdev *compressdev)
 {
@@ -288,6 +297,7 @@ rte_compressdev_pmd_release_device(struct rte_compressdev *compressdev)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_compressdev_queue_pair_count)
 uint16_t
 rte_compressdev_queue_pair_count(uint8_t dev_id)
 {
@@ -413,6 +423,7 @@ rte_compressdev_queue_pairs_release(struct rte_compressdev *dev)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_compressdev_configure)
 int
 rte_compressdev_configure(uint8_t dev_id, struct rte_compressdev_config *config)
 {
@@ -448,6 +459,7 @@ rte_compressdev_configure(uint8_t dev_id, struct rte_compressdev_config *config)
 	return dev->dev_ops->dev_configure(dev, config);
 }
 
+RTE_EXPORT_SYMBOL(rte_compressdev_start)
 int
 rte_compressdev_start(uint8_t dev_id)
 {
@@ -481,6 +493,7 @@ rte_compressdev_start(uint8_t dev_id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_compressdev_stop)
 void
 rte_compressdev_stop(uint8_t dev_id)
 {
@@ -506,6 +519,7 @@ rte_compressdev_stop(uint8_t dev_id)
 	dev->data->dev_started = 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_compressdev_close)
 int
 rte_compressdev_close(uint8_t dev_id)
 {
@@ -542,6 +556,7 @@ rte_compressdev_close(uint8_t dev_id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_compressdev_queue_pair_setup)
 int
 rte_compressdev_queue_pair_setup(uint8_t dev_id, uint16_t queue_pair_id,
 		uint32_t max_inflight_ops, int socket_id)
@@ -577,6 +592,7 @@ rte_compressdev_queue_pair_setup(uint8_t dev_id, uint16_t queue_pair_id,
 	return dev->dev_ops->queue_pair_setup(dev, queue_pair_id, max_inflight_ops, socket_id);
 }
 
+RTE_EXPORT_SYMBOL(rte_compressdev_dequeue_burst)
 uint16_t
 rte_compressdev_dequeue_burst(uint8_t dev_id, uint16_t qp_id,
 		struct rte_comp_op **ops, uint16_t nb_ops)
@@ -586,6 +602,7 @@ rte_compressdev_dequeue_burst(uint8_t dev_id, uint16_t qp_id,
 	return dev->dequeue_burst(dev->data->queue_pairs[qp_id], ops, nb_ops);
 }
 
+RTE_EXPORT_SYMBOL(rte_compressdev_enqueue_burst)
 uint16_t
 rte_compressdev_enqueue_burst(uint8_t dev_id, uint16_t qp_id,
 		struct rte_comp_op **ops, uint16_t nb_ops)
@@ -595,6 +612,7 @@ rte_compressdev_enqueue_burst(uint8_t dev_id, uint16_t qp_id,
 	return dev->enqueue_burst(dev->data->queue_pairs[qp_id], ops, nb_ops);
 }
 
+RTE_EXPORT_SYMBOL(rte_compressdev_stats_get)
 int
 rte_compressdev_stats_get(uint8_t dev_id, struct rte_compressdev_stats *stats)
 {
@@ -619,6 +637,7 @@ rte_compressdev_stats_get(uint8_t dev_id, struct rte_compressdev_stats *stats)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_compressdev_stats_reset)
 void
 rte_compressdev_stats_reset(uint8_t dev_id)
 {
@@ -637,6 +656,7 @@ rte_compressdev_stats_reset(uint8_t dev_id)
 }
 
 
+RTE_EXPORT_SYMBOL(rte_compressdev_info_get)
 void
 rte_compressdev_info_get(uint8_t dev_id, struct rte_compressdev_info *dev_info)
 {
@@ -658,6 +678,7 @@ rte_compressdev_info_get(uint8_t dev_id, struct rte_compressdev_info *dev_info)
 	dev_info->driver_name = dev->device->driver->name;
 }
 
+RTE_EXPORT_SYMBOL(rte_compressdev_private_xform_create)
 int
 rte_compressdev_private_xform_create(uint8_t dev_id,
 		const struct rte_comp_xform *xform,
@@ -684,6 +705,7 @@ rte_compressdev_private_xform_create(uint8_t dev_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_compressdev_private_xform_free)
 int
 rte_compressdev_private_xform_free(uint8_t dev_id, void *priv_xform)
 {
@@ -708,6 +730,7 @@ rte_compressdev_private_xform_free(uint8_t dev_id, void *priv_xform)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_compressdev_stream_create)
 int
 rte_compressdev_stream_create(uint8_t dev_id,
 		const struct rte_comp_xform *xform,
@@ -735,6 +758,7 @@ rte_compressdev_stream_create(uint8_t dev_id,
 }
 
 
+RTE_EXPORT_SYMBOL(rte_compressdev_stream_free)
 int
 rte_compressdev_stream_free(uint8_t dev_id, void *stream)
 {
@@ -759,6 +783,7 @@ rte_compressdev_stream_free(uint8_t dev_id, void *stream)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_compressdev_name_get)
 const char *
 rte_compressdev_name_get(uint8_t dev_id)
 {
diff --git a/lib/compressdev/rte_compressdev_pmd.c b/lib/compressdev/rte_compressdev_pmd.c
index 762b44f03e..d0ea84b0c3 100644
--- a/lib/compressdev/rte_compressdev_pmd.c
+++ b/lib/compressdev/rte_compressdev_pmd.c
@@ -55,6 +55,7 @@ rte_compressdev_pmd_parse_uint_arg(const char *key __rte_unused,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_compressdev_pmd_parse_input_args)
 int
 rte_compressdev_pmd_parse_input_args(
 		struct rte_compressdev_pmd_init_params *params,
@@ -91,6 +92,7 @@ rte_compressdev_pmd_parse_input_args(
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_compressdev_pmd_create)
 struct rte_compressdev *
 rte_compressdev_pmd_create(const char *name,
 		struct rte_device *device,
@@ -140,6 +142,7 @@ rte_compressdev_pmd_create(const char *name,
 	return compressdev;
 }
 
+RTE_EXPORT_SYMBOL(rte_compressdev_pmd_destroy)
 int
 rte_compressdev_pmd_destroy(struct rte_compressdev *compressdev)
 {
diff --git a/lib/cryptodev/cryptodev_pmd.c b/lib/cryptodev/cryptodev_pmd.c
index 87ced122b4..98cf064813 100644
--- a/lib/cryptodev/cryptodev_pmd.c
+++ b/lib/cryptodev/cryptodev_pmd.c
@@ -55,6 +55,7 @@ rte_cryptodev_pmd_parse_uint_arg(const char *key __rte_unused,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_cryptodev_pmd_parse_input_args)
 int
 rte_cryptodev_pmd_parse_input_args(
 		struct rte_cryptodev_pmd_init_params *params,
@@ -98,6 +99,7 @@ rte_cryptodev_pmd_parse_input_args(
 	return ret;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_cryptodev_pmd_create)
 struct rte_cryptodev *
 rte_cryptodev_pmd_create(const char *name,
 		struct rte_device *device,
@@ -148,6 +150,7 @@ rte_cryptodev_pmd_create(const char *name,
 	return cryptodev;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_cryptodev_pmd_destroy)
 int
 rte_cryptodev_pmd_destroy(struct rte_cryptodev *cryptodev)
 {
@@ -171,6 +174,7 @@ rte_cryptodev_pmd_destroy(struct rte_cryptodev *cryptodev)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_cryptodev_pmd_probing_finish)
 void
 rte_cryptodev_pmd_probing_finish(struct rte_cryptodev *cryptodev)
 {
@@ -209,6 +213,7 @@ dummy_crypto_dequeue_burst(__rte_unused void *qp,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cryptodev_fp_ops_reset)
 void
 cryptodev_fp_ops_reset(struct rte_crypto_fp_ops *fp_ops)
 {
@@ -227,6 +232,7 @@ cryptodev_fp_ops_reset(struct rte_crypto_fp_ops *fp_ops)
 	*fp_ops = dummy;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(cryptodev_fp_ops_set)
 void
 cryptodev_fp_ops_set(struct rte_crypto_fp_ops *fp_ops,
 		     const struct rte_cryptodev *dev)
@@ -239,6 +245,7 @@ cryptodev_fp_ops_set(struct rte_crypto_fp_ops *fp_ops,
 	fp_ops->qp_depth_used = dev->qp_depth_used;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_cryptodev_session_event_mdata_get)
 void *
 rte_cryptodev_session_event_mdata_get(struct rte_crypto_op *op)
 {
diff --git a/lib/cryptodev/cryptodev_trace_points.c b/lib/cryptodev/cryptodev_trace_points.c
index 6f37780595..94ac5e14f1 100644
--- a/lib/cryptodev/cryptodev_trace_points.c
+++ b/lib/cryptodev/cryptodev_trace_points.c
@@ -42,9 +42,11 @@ RTE_TRACE_POINT_REGISTER(rte_cryptodev_trace_sym_session_free,
 RTE_TRACE_POINT_REGISTER(rte_cryptodev_trace_asym_session_free,
 	lib.cryptodev.asym.free)
 
+RTE_EXPORT_SYMBOL(__rte_cryptodev_trace_enqueue_burst)
 RTE_TRACE_POINT_REGISTER(rte_cryptodev_trace_enqueue_burst,
 	lib.cryptodev.enq.burst)
 
+RTE_EXPORT_SYMBOL(__rte_cryptodev_trace_dequeue_burst)
 RTE_TRACE_POINT_REGISTER(rte_cryptodev_trace_dequeue_burst,
 	lib.cryptodev.deq.burst)
 
@@ -198,5 +200,6 @@ RTE_TRACE_POINT_REGISTER(rte_cryptodev_trace_op_pool_create,
 RTE_TRACE_POINT_REGISTER(rte_cryptodev_trace_count,
 	lib.cryptodev.count)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_cryptodev_trace_qp_depth_used, 24.03)
 RTE_TRACE_POINT_REGISTER(rte_cryptodev_trace_qp_depth_used,
 	lib.cryptodev.qp_depth_used)
diff --git a/lib/cryptodev/rte_cryptodev.c b/lib/cryptodev/rte_cryptodev.c
index 57b0e4ce14..1b3dcf1a3d 100644
--- a/lib/cryptodev/rte_cryptodev.c
+++ b/lib/cryptodev/rte_cryptodev.c
@@ -35,6 +35,7 @@ static uint8_t nb_drivers;
 
 static struct rte_cryptodev rte_crypto_devices[RTE_CRYPTO_MAX_DEVS];
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_cryptodevs)
 struct rte_cryptodev *rte_cryptodevs = rte_crypto_devices;
 
 static struct rte_cryptodev_global cryptodev_globals = {
@@ -44,11 +45,13 @@ static struct rte_cryptodev_global cryptodev_globals = {
 };
 
 /* Public fastpath APIs. */
+RTE_EXPORT_SYMBOL(rte_crypto_fp_ops)
 struct rte_crypto_fp_ops rte_crypto_fp_ops[RTE_CRYPTO_MAX_DEVS];
 
 /* spinlock for crypto device callbacks */
 static rte_spinlock_t rte_cryptodev_cb_lock = RTE_SPINLOCK_INITIALIZER;
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_logtype)
 RTE_LOG_REGISTER_DEFAULT(rte_cryptodev_logtype, INFO);
 
 /**
@@ -105,6 +108,7 @@ crypto_cipher_algorithm_strings[] = {
  * The crypto cipher operation strings identifiers.
  * It could be used in application command line.
  */
+RTE_EXPORT_SYMBOL(rte_crypto_cipher_operation_strings)
 const char *
 rte_crypto_cipher_operation_strings[] = {
 		[RTE_CRYPTO_CIPHER_OP_ENCRYPT]	= "encrypt",
@@ -177,6 +181,7 @@ crypto_aead_algorithm_strings[] = {
  * The crypto AEAD operation strings identifiers.
  * It could be used in application command line.
  */
+RTE_EXPORT_SYMBOL(rte_crypto_aead_operation_strings)
 const char *
 rte_crypto_aead_operation_strings[] = {
 	[RTE_CRYPTO_AEAD_OP_ENCRYPT]	= "encrypt",
@@ -204,6 +209,7 @@ crypto_asym_xform_strings[] = {
 /**
  * Asymmetric crypto operation strings identifiers.
  */
+RTE_EXPORT_SYMBOL(rte_crypto_asym_op_strings)
 const char *rte_crypto_asym_op_strings[] = {
 	[RTE_CRYPTO_ASYM_OP_ENCRYPT]	= "encrypt",
 	[RTE_CRYPTO_ASYM_OP_DECRYPT]	= "decrypt",
@@ -214,6 +220,7 @@ const char *rte_crypto_asym_op_strings[] = {
 /**
  * Asymmetric crypto key exchange operation strings identifiers.
  */
+RTE_EXPORT_SYMBOL(rte_crypto_asym_ke_strings)
 const char *rte_crypto_asym_ke_strings[] = {
 	[RTE_CRYPTO_ASYM_KE_PRIV_KEY_GENERATE] = "priv_key_generate",
 	[RTE_CRYPTO_ASYM_KE_PUB_KEY_GENERATE] = "pub_key_generate",
@@ -238,6 +245,7 @@ struct rte_cryptodev_asym_session_pool_private_data {
 	/**< Session user data will be placed after sess_private_data */
 };
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_get_cipher_algo_enum)
 int
 rte_cryptodev_get_cipher_algo_enum(enum rte_crypto_cipher_algorithm *algo_enum,
 		const char *algo_string)
@@ -258,6 +266,7 @@ rte_cryptodev_get_cipher_algo_enum(enum rte_crypto_cipher_algorithm *algo_enum,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_get_auth_algo_enum)
 int
 rte_cryptodev_get_auth_algo_enum(enum rte_crypto_auth_algorithm *algo_enum,
 		const char *algo_string)
@@ -278,6 +287,7 @@ rte_cryptodev_get_auth_algo_enum(enum rte_crypto_auth_algorithm *algo_enum,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_get_aead_algo_enum)
 int
 rte_cryptodev_get_aead_algo_enum(enum rte_crypto_aead_algorithm *algo_enum,
 		const char *algo_string)
@@ -298,6 +308,7 @@ rte_cryptodev_get_aead_algo_enum(enum rte_crypto_aead_algorithm *algo_enum,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_asym_get_xform_enum)
 int
 rte_cryptodev_asym_get_xform_enum(enum rte_crypto_asym_xform_type *xform_enum,
 		const char *xform_string)
@@ -319,6 +330,7 @@ rte_cryptodev_asym_get_xform_enum(enum rte_crypto_asym_xform_type *xform_enum,
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_cryptodev_get_cipher_algo_string, 23.03)
 const char *
 rte_cryptodev_get_cipher_algo_string(enum rte_crypto_cipher_algorithm algo_enum)
 {
@@ -332,6 +344,7 @@ rte_cryptodev_get_cipher_algo_string(enum rte_crypto_cipher_algorithm algo_enum)
 	return alg_str;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_cryptodev_get_auth_algo_string, 23.03)
 const char *
 rte_cryptodev_get_auth_algo_string(enum rte_crypto_auth_algorithm algo_enum)
 {
@@ -345,6 +358,7 @@ rte_cryptodev_get_auth_algo_string(enum rte_crypto_auth_algorithm algo_enum)
 	return alg_str;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_cryptodev_get_aead_algo_string, 23.03)
 const char *
 rte_cryptodev_get_aead_algo_string(enum rte_crypto_aead_algorithm algo_enum)
 {
@@ -358,6 +372,7 @@ rte_cryptodev_get_aead_algo_string(enum rte_crypto_aead_algorithm algo_enum)
 	return alg_str;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_cryptodev_asym_get_xform_string, 23.03)
 const char *
 rte_cryptodev_asym_get_xform_string(enum rte_crypto_asym_xform_type xform_enum)
 {
@@ -375,12 +390,14 @@ rte_cryptodev_asym_get_xform_string(enum rte_crypto_asym_xform_type xform_enum)
  * The crypto auth operation strings identifiers.
  * It could be used in application command line.
  */
+RTE_EXPORT_SYMBOL(rte_crypto_auth_operation_strings)
 const char *
 rte_crypto_auth_operation_strings[] = {
 		[RTE_CRYPTO_AUTH_OP_VERIFY]	= "verify",
 		[RTE_CRYPTO_AUTH_OP_GENERATE]	= "generate"
 };
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_sym_capability_get)
 const struct rte_cryptodev_symmetric_capability *
 rte_cryptodev_sym_capability_get(uint8_t dev_id,
 		const struct rte_cryptodev_sym_capability_idx *idx)
@@ -450,6 +467,7 @@ param_range_check(uint16_t size, const struct rte_crypto_param_range *range)
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_asym_capability_get)
 const struct rte_cryptodev_asymmetric_xform_capability *
 rte_cryptodev_asym_capability_get(uint8_t dev_id,
 		const struct rte_cryptodev_asym_capability_idx *idx)
@@ -479,6 +497,7 @@ rte_cryptodev_asym_capability_get(uint8_t dev_id,
 	return asym_cap;
 };
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_sym_capability_check_cipher)
 int
 rte_cryptodev_sym_capability_check_cipher(
 		const struct rte_cryptodev_symmetric_capability *capability,
@@ -501,6 +520,7 @@ rte_cryptodev_sym_capability_check_cipher(
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_sym_capability_check_auth)
 int
 rte_cryptodev_sym_capability_check_auth(
 		const struct rte_cryptodev_symmetric_capability *capability,
@@ -529,6 +549,7 @@ rte_cryptodev_sym_capability_check_auth(
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_sym_capability_check_aead)
 int
 rte_cryptodev_sym_capability_check_aead(
 		const struct rte_cryptodev_symmetric_capability *capability,
@@ -563,6 +584,7 @@ rte_cryptodev_sym_capability_check_aead(
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_asym_xform_capability_check_optype)
 int
 rte_cryptodev_asym_xform_capability_check_optype(
 	const struct rte_cryptodev_asymmetric_xform_capability *capability,
@@ -579,6 +601,7 @@ rte_cryptodev_asym_xform_capability_check_optype(
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_asym_xform_capability_check_modlen)
 int
 rte_cryptodev_asym_xform_capability_check_modlen(
 	const struct rte_cryptodev_asymmetric_xform_capability *capability,
@@ -614,6 +637,7 @@ rte_cryptodev_asym_xform_capability_check_modlen(
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_asym_xform_capability_check_hash)
 bool
 rte_cryptodev_asym_xform_capability_check_hash(
 	const struct rte_cryptodev_asymmetric_xform_capability *capability,
@@ -630,6 +654,7 @@ rte_cryptodev_asym_xform_capability_check_hash(
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_cryptodev_asym_xform_capability_check_opcap, 24.11)
 int
 rte_cryptodev_asym_xform_capability_check_opcap(
 	const struct rte_cryptodev_asymmetric_xform_capability *capability,
@@ -763,6 +788,7 @@ cryptodev_cb_init(struct rte_cryptodev *dev)
 	return -ENOMEM;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_get_feature_name)
 const char *
 rte_cryptodev_get_feature_name(uint64_t flag)
 {
@@ -826,12 +852,14 @@ rte_cryptodev_get_feature_name(uint64_t flag)
 	}
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_cryptodev_pmd_get_dev)
 struct rte_cryptodev *
 rte_cryptodev_pmd_get_dev(uint8_t dev_id)
 {
 	return &cryptodev_globals.devs[dev_id];
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_cryptodev_pmd_get_named_dev)
 struct rte_cryptodev *
 rte_cryptodev_pmd_get_named_dev(const char *name)
 {
@@ -862,6 +890,7 @@ rte_cryptodev_is_valid_device_data(uint8_t dev_id)
 	return 1;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_is_valid_dev)
 unsigned int
 rte_cryptodev_is_valid_dev(uint8_t dev_id)
 {
@@ -883,6 +912,7 @@ rte_cryptodev_is_valid_dev(uint8_t dev_id)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_get_dev_id)
 int
 rte_cryptodev_get_dev_id(const char *name)
 {
@@ -909,6 +939,7 @@ rte_cryptodev_get_dev_id(const char *name)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_count)
 uint8_t
 rte_cryptodev_count(void)
 {
@@ -917,6 +948,7 @@ rte_cryptodev_count(void)
 	return cryptodev_globals.nb_devs;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_device_count_by_driver)
 uint8_t
 rte_cryptodev_device_count_by_driver(uint8_t driver_id)
 {
@@ -933,6 +965,7 @@ rte_cryptodev_device_count_by_driver(uint8_t driver_id)
 	return dev_count;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_devices_get)
 uint8_t
 rte_cryptodev_devices_get(const char *driver_name, uint8_t *devices,
 	uint8_t nb_devices)
@@ -961,6 +994,7 @@ rte_cryptodev_devices_get(const char *driver_name, uint8_t *devices,
 	return count;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_get_sec_ctx)
 void *
 rte_cryptodev_get_sec_ctx(uint8_t dev_id)
 {
@@ -976,6 +1010,7 @@ rte_cryptodev_get_sec_ctx(uint8_t dev_id)
 	return sec_ctx;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_socket_id)
 int
 rte_cryptodev_socket_id(uint8_t dev_id)
 {
@@ -1070,6 +1105,7 @@ rte_cryptodev_find_free_device_index(void)
 	return RTE_CRYPTO_MAX_DEVS;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_cryptodev_pmd_allocate)
 struct rte_cryptodev *
 rte_cryptodev_pmd_allocate(const char *name, int socket_id)
 {
@@ -1129,6 +1165,7 @@ rte_cryptodev_pmd_allocate(const char *name, int socket_id)
 	return cryptodev;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_cryptodev_pmd_release_device)
 int
 rte_cryptodev_pmd_release_device(struct rte_cryptodev *cryptodev)
 {
@@ -1158,6 +1195,7 @@ rte_cryptodev_pmd_release_device(struct rte_cryptodev *cryptodev)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_queue_pair_count)
 uint16_t
 rte_cryptodev_queue_pair_count(uint8_t dev_id)
 {
@@ -1240,6 +1278,7 @@ rte_cryptodev_queue_pairs_config(struct rte_cryptodev *dev, uint16_t nb_qpairs,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_cryptodev_queue_pair_reset, 24.11)
 int
 rte_cryptodev_queue_pair_reset(uint8_t dev_id, uint16_t queue_pair_id,
 		const struct rte_cryptodev_qp_conf *qp_conf, int socket_id)
@@ -1264,6 +1303,7 @@ rte_cryptodev_queue_pair_reset(uint8_t dev_id, uint16_t queue_pair_id,
 	return dev->dev_ops->queue_pair_reset(dev, queue_pair_id, qp_conf, socket_id);
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_configure)
 int
 rte_cryptodev_configure(uint8_t dev_id, struct rte_cryptodev_config *config)
 {
@@ -1311,6 +1351,7 @@ rte_cryptodev_configure(uint8_t dev_id, struct rte_cryptodev_config *config)
 	return dev->dev_ops->dev_configure(dev, config);
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_start)
 int
 rte_cryptodev_start(uint8_t dev_id)
 {
@@ -1348,6 +1389,7 @@ rte_cryptodev_start(uint8_t dev_id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_stop)
 void
 rte_cryptodev_stop(uint8_t dev_id)
 {
@@ -1377,6 +1419,7 @@ rte_cryptodev_stop(uint8_t dev_id)
 	dev->data->dev_started = 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_close)
 int
 rte_cryptodev_close(uint8_t dev_id)
 {
@@ -1419,6 +1462,7 @@ rte_cryptodev_close(uint8_t dev_id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_get_qp_status)
 int
 rte_cryptodev_get_qp_status(uint8_t dev_id, uint16_t queue_pair_id)
 {
@@ -1473,6 +1517,7 @@ rte_cryptodev_sym_is_valid_session_pool(struct rte_mempool *mp,
 	return 1;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_queue_pair_setup)
 int
 rte_cryptodev_queue_pair_setup(uint8_t dev_id, uint16_t queue_pair_id,
 		const struct rte_cryptodev_qp_conf *qp_conf, int socket_id)
@@ -1526,6 +1571,7 @@ rte_cryptodev_queue_pair_setup(uint8_t dev_id, uint16_t queue_pair_id,
 	return dev->dev_ops->queue_pair_setup(dev, queue_pair_id, qp_conf, socket_id);
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_add_enq_callback)
 struct rte_cryptodev_cb *
 rte_cryptodev_add_enq_callback(uint8_t dev_id,
 			       uint16_t qp_id,
@@ -1596,6 +1642,7 @@ rte_cryptodev_add_enq_callback(uint8_t dev_id,
 	return cb;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_remove_enq_callback)
 int
 rte_cryptodev_remove_enq_callback(uint8_t dev_id,
 				  uint16_t qp_id,
@@ -1672,6 +1719,7 @@ rte_cryptodev_remove_enq_callback(uint8_t dev_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_add_deq_callback)
 struct rte_cryptodev_cb *
 rte_cryptodev_add_deq_callback(uint8_t dev_id,
 			       uint16_t qp_id,
@@ -1743,6 +1791,7 @@ rte_cryptodev_add_deq_callback(uint8_t dev_id,
 	return cb;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_remove_deq_callback)
 int
 rte_cryptodev_remove_deq_callback(uint8_t dev_id,
 				  uint16_t qp_id,
@@ -1819,6 +1868,7 @@ rte_cryptodev_remove_deq_callback(uint8_t dev_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_stats_get)
 int
 rte_cryptodev_stats_get(uint8_t dev_id, struct rte_cryptodev_stats *stats)
 {
@@ -1845,6 +1895,7 @@ rte_cryptodev_stats_get(uint8_t dev_id, struct rte_cryptodev_stats *stats)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_stats_reset)
 void
 rte_cryptodev_stats_reset(uint8_t dev_id)
 {
@@ -1864,6 +1915,7 @@ rte_cryptodev_stats_reset(uint8_t dev_id)
 	dev->dev_ops->stats_reset(dev);
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_info_get)
 void
 rte_cryptodev_info_get(uint8_t dev_id, struct rte_cryptodev_info *dev_info)
 {
@@ -1889,6 +1941,7 @@ rte_cryptodev_info_get(uint8_t dev_id, struct rte_cryptodev_info *dev_info)
 
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_callback_register)
 int
 rte_cryptodev_callback_register(uint8_t dev_id,
 			enum rte_cryptodev_event_type event,
@@ -1934,6 +1987,7 @@ rte_cryptodev_callback_register(uint8_t dev_id,
 	return (user_cb == NULL) ? -ENOMEM : 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_callback_unregister)
 int
 rte_cryptodev_callback_unregister(uint8_t dev_id,
 			enum rte_cryptodev_event_type event,
@@ -1982,6 +2036,7 @@ rte_cryptodev_callback_unregister(uint8_t dev_id,
 	return ret;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_cryptodev_pmd_callback_process)
 void
 rte_cryptodev_pmd_callback_process(struct rte_cryptodev *dev,
 	enum rte_cryptodev_event_type event)
@@ -2004,6 +2059,7 @@ rte_cryptodev_pmd_callback_process(struct rte_cryptodev *dev,
 	rte_spinlock_unlock(&rte_cryptodev_cb_lock);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_cryptodev_queue_pair_event_error_query, 23.03)
 int
 rte_cryptodev_queue_pair_event_error_query(uint8_t dev_id, uint16_t qp_id)
 {
@@ -2023,6 +2079,7 @@ rte_cryptodev_queue_pair_event_error_query(uint8_t dev_id, uint16_t qp_id)
 	return dev->dev_ops->queue_pair_event_error_query(dev, qp_id);
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_sym_session_pool_create)
 struct rte_mempool *
 rte_cryptodev_sym_session_pool_create(const char *name, uint32_t nb_elts,
 	uint32_t elt_size, uint32_t cache_size, uint16_t user_data_size,
@@ -2061,6 +2118,7 @@ rte_cryptodev_sym_session_pool_create(const char *name, uint32_t nb_elts,
 	return mp;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_asym_session_pool_create)
 struct rte_mempool *
 rte_cryptodev_asym_session_pool_create(const char *name, uint32_t nb_elts,
 	uint32_t cache_size, uint16_t user_data_size, int socket_id)
@@ -2111,6 +2169,7 @@ rte_cryptodev_asym_session_pool_create(const char *name, uint32_t nb_elts,
 	return mp;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_sym_session_create)
 void *
 rte_cryptodev_sym_session_create(uint8_t dev_id,
 		struct rte_crypto_sym_xform *xforms,
@@ -2178,6 +2237,7 @@ rte_cryptodev_sym_session_create(uint8_t dev_id,
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_asym_session_create)
 int
 rte_cryptodev_asym_session_create(uint8_t dev_id,
 		struct rte_crypto_asym_xform *xforms, struct rte_mempool *mp,
@@ -2254,6 +2314,7 @@ rte_cryptodev_asym_session_create(uint8_t dev_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_sym_session_free)
 int
 rte_cryptodev_sym_session_free(uint8_t dev_id, void *_sess)
 {
@@ -2300,6 +2361,7 @@ rte_cryptodev_sym_session_free(uint8_t dev_id, void *_sess)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_asym_session_free)
 int
 rte_cryptodev_asym_session_free(uint8_t dev_id, void *sess)
 {
@@ -2331,12 +2393,14 @@ rte_cryptodev_asym_session_free(uint8_t dev_id, void *sess)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_asym_get_header_session_size)
 unsigned int
 rte_cryptodev_asym_get_header_session_size(void)
 {
 	return sizeof(struct rte_cryptodev_asym_session);
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_sym_get_private_session_size)
 unsigned int
 rte_cryptodev_sym_get_private_session_size(uint8_t dev_id)
 {
@@ -2359,6 +2423,7 @@ rte_cryptodev_sym_get_private_session_size(uint8_t dev_id)
 	return priv_sess_size;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_asym_get_private_session_size)
 unsigned int
 rte_cryptodev_asym_get_private_session_size(uint8_t dev_id)
 {
@@ -2381,6 +2446,7 @@ rte_cryptodev_asym_get_private_session_size(uint8_t dev_id)
 	return priv_sess_size;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_sym_session_set_user_data)
 int
 rte_cryptodev_sym_session_set_user_data(void *_sess, void *data,
 		uint16_t size)
@@ -2400,6 +2466,7 @@ rte_cryptodev_sym_session_set_user_data(void *_sess, void *data,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_sym_session_get_user_data)
 void *
 rte_cryptodev_sym_session_get_user_data(void *_sess)
 {
@@ -2416,6 +2483,7 @@ rte_cryptodev_sym_session_get_user_data(void *_sess)
 	return data;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_asym_session_set_user_data)
 int
 rte_cryptodev_asym_session_set_user_data(void *session, void *data, uint16_t size)
 {
@@ -2435,6 +2503,7 @@ rte_cryptodev_asym_session_set_user_data(void *session, void *data, uint16_t siz
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_asym_session_get_user_data)
 void *
 rte_cryptodev_asym_session_get_user_data(void *session)
 {
@@ -2459,6 +2528,7 @@ sym_crypto_fill_status(struct rte_crypto_sym_vec *vec, int32_t errnum)
 		vec->status[i] = errnum;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_sym_cpu_crypto_process)
 uint32_t
 rte_cryptodev_sym_cpu_crypto_process(uint8_t dev_id,
 	void *_sess, union rte_crypto_sym_ofs ofs,
@@ -2485,6 +2555,7 @@ rte_cryptodev_sym_cpu_crypto_process(uint8_t dev_id,
 	return dev->dev_ops->sym_cpu_process(dev, sess, ofs, vec);
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_get_raw_dp_ctx_size)
 int
 rte_cryptodev_get_raw_dp_ctx_size(uint8_t dev_id)
 {
@@ -2511,6 +2582,7 @@ rte_cryptodev_get_raw_dp_ctx_size(uint8_t dev_id)
 	return RTE_ALIGN_CEIL((size + priv_size), 8);
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_configure_raw_dp_ctx)
 int
 rte_cryptodev_configure_raw_dp_ctx(uint8_t dev_id, uint16_t qp_id,
 	struct rte_crypto_raw_dp_ctx *ctx,
@@ -2534,6 +2606,7 @@ rte_cryptodev_configure_raw_dp_ctx(uint8_t dev_id, uint16_t qp_id,
 			sess_type, session_ctx, is_update);
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_session_event_mdata_set)
 int
 rte_cryptodev_session_event_mdata_set(uint8_t dev_id, void *sess,
 	enum rte_crypto_op_type op_type,
@@ -2577,6 +2650,7 @@ rte_cryptodev_session_event_mdata_set(uint8_t dev_id, void *sess,
 		return -ENOTSUP;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_raw_enqueue_burst)
 uint32_t
 rte_cryptodev_raw_enqueue_burst(struct rte_crypto_raw_dp_ctx *ctx,
 	struct rte_crypto_sym_vec *vec, union rte_crypto_sym_ofs ofs,
@@ -2586,6 +2660,7 @@ rte_cryptodev_raw_enqueue_burst(struct rte_crypto_raw_dp_ctx *ctx,
 			ofs, user_data, enqueue_status);
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_raw_enqueue_done)
 int
 rte_cryptodev_raw_enqueue_done(struct rte_crypto_raw_dp_ctx *ctx,
 		uint32_t n)
@@ -2593,6 +2668,7 @@ rte_cryptodev_raw_enqueue_done(struct rte_crypto_raw_dp_ctx *ctx,
 	return ctx->enqueue_done(ctx->qp_data, ctx->drv_ctx_data, n);
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_raw_dequeue_burst)
 uint32_t
 rte_cryptodev_raw_dequeue_burst(struct rte_crypto_raw_dp_ctx *ctx,
 	rte_cryptodev_raw_get_dequeue_count_t get_dequeue_count,
@@ -2606,6 +2682,7 @@ rte_cryptodev_raw_dequeue_burst(struct rte_crypto_raw_dp_ctx *ctx,
 		out_user_data, is_user_data_array, n_success_jobs, status);
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_raw_dequeue_done)
 int
 rte_cryptodev_raw_dequeue_done(struct rte_crypto_raw_dp_ctx *ctx,
 		uint32_t n)
@@ -2632,6 +2709,7 @@ rte_crypto_op_init(struct rte_mempool *mempool,
 }
 
 
+RTE_EXPORT_SYMBOL(rte_crypto_op_pool_create)
 struct rte_mempool *
 rte_crypto_op_pool_create(const char *name, enum rte_crypto_op_type type,
 		unsigned nb_elts, unsigned cache_size, uint16_t priv_size,
@@ -2701,6 +2779,7 @@ rte_crypto_op_pool_create(const char *name, enum rte_crypto_op_type type,
 	return mp;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_cryptodev_pmd_create_dev_name)
 int
 rte_cryptodev_pmd_create_dev_name(char *name, const char *dev_name_prefix)
 {
@@ -2730,6 +2809,7 @@ TAILQ_HEAD(cryptodev_driver_list, cryptodev_driver);
 static struct cryptodev_driver_list cryptodev_driver_list =
 	TAILQ_HEAD_INITIALIZER(cryptodev_driver_list);
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_driver_id_get)
 int
 rte_cryptodev_driver_id_get(const char *name)
 {
@@ -2755,6 +2835,7 @@ rte_cryptodev_driver_id_get(const char *name)
 	return driver_id;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_name_get)
 const char *
 rte_cryptodev_name_get(uint8_t dev_id)
 {
@@ -2774,6 +2855,7 @@ rte_cryptodev_name_get(uint8_t dev_id)
 	return dev->data->name;
 }
 
+RTE_EXPORT_SYMBOL(rte_cryptodev_driver_name_get)
 const char *
 rte_cryptodev_driver_name_get(uint8_t driver_id)
 {
@@ -2789,6 +2871,7 @@ rte_cryptodev_driver_name_get(uint8_t driver_id)
 	return NULL;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_cryptodev_allocate_driver)
 uint8_t
 rte_cryptodev_allocate_driver(struct cryptodev_driver *crypto_drv,
 		const struct rte_driver *drv)
diff --git a/lib/dispatcher/rte_dispatcher.c b/lib/dispatcher/rte_dispatcher.c
index 79349172bc..485a111d08 100644
--- a/lib/dispatcher/rte_dispatcher.c
+++ b/lib/dispatcher/rte_dispatcher.c
@@ -266,6 +266,7 @@ evd_service_unregister(struct rte_dispatcher *dispatcher)
 	return rc;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_dispatcher_create, 23.11)
 struct rte_dispatcher *
 rte_dispatcher_create(uint8_t event_dev_id)
 {
@@ -300,6 +301,7 @@ rte_dispatcher_create(uint8_t event_dev_id)
 	return dispatcher;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_dispatcher_free, 23.11)
 int
 rte_dispatcher_free(struct rte_dispatcher *dispatcher)
 {
@@ -317,6 +319,7 @@ rte_dispatcher_free(struct rte_dispatcher *dispatcher)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_dispatcher_service_id_get, 23.11)
 uint32_t
 rte_dispatcher_service_id_get(const struct rte_dispatcher *dispatcher)
 {
@@ -340,6 +343,7 @@ lcore_port_index(struct rte_dispatcher_lcore *lcore,
 	return -1;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_dispatcher_bind_port_to_lcore, 23.11)
 int
 rte_dispatcher_bind_port_to_lcore(struct rte_dispatcher *dispatcher,
 	uint8_t event_port_id, uint16_t batch_size, uint64_t timeout,
@@ -369,6 +373,7 @@ rte_dispatcher_bind_port_to_lcore(struct rte_dispatcher *dispatcher,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_dispatcher_unbind_port_from_lcore, 23.11)
 int
 rte_dispatcher_unbind_port_from_lcore(struct rte_dispatcher *dispatcher,
 	uint8_t event_port_id, unsigned int lcore_id)
@@ -451,6 +456,7 @@ evd_install_handler(struct rte_dispatcher *dispatcher,
 	}
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_dispatcher_register, 23.11)
 int
 rte_dispatcher_register(struct rte_dispatcher *dispatcher,
 	rte_dispatcher_match_t match_fun, void *match_data,
@@ -522,6 +528,7 @@ evd_uninstall_handler(struct rte_dispatcher *dispatcher, int handler_id)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_dispatcher_unregister, 23.11)
 int
 rte_dispatcher_unregister(struct rte_dispatcher *dispatcher, int handler_id)
 {
@@ -575,6 +582,7 @@ evd_alloc_finalizer(struct rte_dispatcher *dispatcher)
 	return finalizer;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_dispatcher_finalize_register, 23.11)
 int
 rte_dispatcher_finalize_register(struct rte_dispatcher *dispatcher,
 	rte_dispatcher_finalize_t finalize_fun, void *finalize_data)
@@ -592,6 +600,7 @@ rte_dispatcher_finalize_register(struct rte_dispatcher *dispatcher,
 	return finalizer->id;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_dispatcher_finalize_unregister, 23.11)
 int
 rte_dispatcher_finalize_unregister(struct rte_dispatcher *dispatcher,
 	int finalizer_id)
@@ -643,12 +652,14 @@ evd_set_service_runstate(struct rte_dispatcher *dispatcher, int state)
 	RTE_VERIFY(rc == 0);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_dispatcher_start, 23.11)
 void
 rte_dispatcher_start(struct rte_dispatcher *dispatcher)
 {
 	evd_set_service_runstate(dispatcher, 1);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_dispatcher_stop, 23.11)
 void
 rte_dispatcher_stop(struct rte_dispatcher *dispatcher)
 {
@@ -665,6 +676,7 @@ evd_aggregate_stats(struct rte_dispatcher_stats *result,
 	result->ev_drop_count += part->ev_drop_count;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_dispatcher_stats_get, 23.11)
 void
 rte_dispatcher_stats_get(const struct rte_dispatcher *dispatcher,
 	struct rte_dispatcher_stats *stats)
@@ -681,6 +693,7 @@ rte_dispatcher_stats_get(const struct rte_dispatcher *dispatcher,
 	}
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_dispatcher_stats_reset, 23.11)
 void
 rte_dispatcher_stats_reset(struct rte_dispatcher *dispatcher)
 {
diff --git a/lib/distributor/rte_distributor.c b/lib/distributor/rte_distributor.c
index e58727cdc2..1133eac230 100644
--- a/lib/distributor/rte_distributor.c
+++ b/lib/distributor/rte_distributor.c
@@ -31,6 +31,7 @@ EAL_REGISTER_TAILQ(rte_dist_burst_tailq)
 
 /**** Burst Packet APIs called by workers ****/
 
+RTE_EXPORT_SYMBOL(rte_distributor_request_pkt)
 void
 rte_distributor_request_pkt(struct rte_distributor *d,
 		unsigned int worker_id, struct rte_mbuf **oldpkt,
@@ -83,6 +84,7 @@ rte_distributor_request_pkt(struct rte_distributor *d,
 			rte_memory_order_release);
 }
 
+RTE_EXPORT_SYMBOL(rte_distributor_poll_pkt)
 int
 rte_distributor_poll_pkt(struct rte_distributor *d,
 		unsigned int worker_id, struct rte_mbuf **pkts)
@@ -127,6 +129,7 @@ rte_distributor_poll_pkt(struct rte_distributor *d,
 	return count;
 }
 
+RTE_EXPORT_SYMBOL(rte_distributor_get_pkt)
 int
 rte_distributor_get_pkt(struct rte_distributor *d,
 		unsigned int worker_id, struct rte_mbuf **pkts,
@@ -157,6 +160,7 @@ rte_distributor_get_pkt(struct rte_distributor *d,
 	return count;
 }
 
+RTE_EXPORT_SYMBOL(rte_distributor_return_pkt)
 int
 rte_distributor_return_pkt(struct rte_distributor *d,
 		unsigned int worker_id, struct rte_mbuf **oldpkt, int num)
@@ -439,6 +443,7 @@ release(struct rte_distributor *d, unsigned int wkr)
 
 
 /* process a set of packets to distribute them to workers */
+RTE_EXPORT_SYMBOL(rte_distributor_process)
 int
 rte_distributor_process(struct rte_distributor *d,
 		struct rte_mbuf **mbufs, unsigned int num_mbufs)
@@ -609,6 +614,7 @@ rte_distributor_process(struct rte_distributor *d,
 }
 
 /* return to the caller, packets returned from workers */
+RTE_EXPORT_SYMBOL(rte_distributor_returned_pkts)
 int
 rte_distributor_returned_pkts(struct rte_distributor *d,
 		struct rte_mbuf **mbufs, unsigned int max_mbufs)
@@ -655,6 +661,7 @@ total_outstanding(const struct rte_distributor *d)
  * Flush the distributor, so that there are no outstanding packets in flight or
  * queued up.
  */
+RTE_EXPORT_SYMBOL(rte_distributor_flush)
 int
 rte_distributor_flush(struct rte_distributor *d)
 {
@@ -687,6 +694,7 @@ rte_distributor_flush(struct rte_distributor *d)
 }
 
 /* clears the internal returns array in the distributor */
+RTE_EXPORT_SYMBOL(rte_distributor_clear_returns)
 void
 rte_distributor_clear_returns(struct rte_distributor *d)
 {
@@ -708,6 +716,7 @@ rte_distributor_clear_returns(struct rte_distributor *d)
 }
 
 /* creates a distributor instance */
+RTE_EXPORT_SYMBOL(rte_distributor_create)
 struct rte_distributor *
 rte_distributor_create(const char *name,
 		unsigned int socket_id,
diff --git a/lib/dmadev/rte_dmadev.c b/lib/dmadev/rte_dmadev.c
index 4a075ee1c6..1bc852f1e9 100644
--- a/lib/dmadev/rte_dmadev.c
+++ b/lib/dmadev/rte_dmadev.c
@@ -21,6 +21,7 @@
 
 static int16_t dma_devices_max;
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_dma_fp_objs)
 struct rte_dma_fp_object *rte_dma_fp_objs;
 static struct rte_dma_dev *rte_dma_devices;
 static struct {
@@ -37,6 +38,7 @@ RTE_LOG_REGISTER_DEFAULT(rte_dma_logtype, INFO);
 #define RTE_DMA_LOG(level, ...) \
 	RTE_LOG_LINE(level, DMADEV, "" __VA_ARGS__)
 
+RTE_EXPORT_SYMBOL(rte_dma_dev_max)
 int
 rte_dma_dev_max(size_t dev_max)
 {
@@ -54,6 +56,7 @@ rte_dma_dev_max(size_t dev_max)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_dma_next_dev)
 int16_t
 rte_dma_next_dev(int16_t start_dev_id)
 {
@@ -348,6 +351,7 @@ dma_release(struct rte_dma_dev *dev)
 	memset(dev, 0, sizeof(struct rte_dma_dev));
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_dma_pmd_allocate)
 struct rte_dma_dev *
 rte_dma_pmd_allocate(const char *name, int numa_node, size_t private_data_size)
 {
@@ -365,6 +369,7 @@ rte_dma_pmd_allocate(const char *name, int numa_node, size_t private_data_size)
 	return dev;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_dma_pmd_release)
 int
 rte_dma_pmd_release(const char *name)
 {
@@ -384,6 +389,7 @@ rte_dma_pmd_release(const char *name)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_dma_get_dev_id_by_name)
 int
 rte_dma_get_dev_id_by_name(const char *name)
 {
@@ -399,6 +405,7 @@ rte_dma_get_dev_id_by_name(const char *name)
 	return dev->data->dev_id;
 }
 
+RTE_EXPORT_SYMBOL(rte_dma_is_valid)
 bool
 rte_dma_is_valid(int16_t dev_id)
 {
@@ -407,6 +414,7 @@ rte_dma_is_valid(int16_t dev_id)
 		rte_dma_devices[dev_id].state != RTE_DMA_DEV_UNUSED;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_dma_pmd_get_dev_by_id)
 struct rte_dma_dev *
 rte_dma_pmd_get_dev_by_id(int16_t dev_id)
 {
@@ -416,6 +424,7 @@ rte_dma_pmd_get_dev_by_id(int16_t dev_id)
 	return &rte_dma_devices[dev_id];
 }
 
+RTE_EXPORT_SYMBOL(rte_dma_count_avail)
 uint16_t
 rte_dma_count_avail(void)
 {
@@ -433,6 +442,7 @@ rte_dma_count_avail(void)
 	return count;
 }
 
+RTE_EXPORT_SYMBOL(rte_dma_info_get)
 int
 rte_dma_info_get(int16_t dev_id, struct rte_dma_info *dev_info)
 {
@@ -464,6 +474,7 @@ rte_dma_info_get(int16_t dev_id, struct rte_dma_info *dev_info)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_dma_configure)
 int
 rte_dma_configure(int16_t dev_id, const struct rte_dma_conf *dev_conf)
 {
@@ -521,6 +532,7 @@ rte_dma_configure(int16_t dev_id, const struct rte_dma_conf *dev_conf)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_dma_start)
 int
 rte_dma_start(int16_t dev_id)
 {
@@ -554,6 +566,7 @@ rte_dma_start(int16_t dev_id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_dma_stop)
 int
 rte_dma_stop(int16_t dev_id)
 {
@@ -582,6 +595,7 @@ rte_dma_stop(int16_t dev_id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_dma_close)
 int
 rte_dma_close(int16_t dev_id)
 {
@@ -610,6 +624,7 @@ rte_dma_close(int16_t dev_id)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_dma_vchan_setup)
 int
 rte_dma_vchan_setup(int16_t dev_id, uint16_t vchan,
 		    const struct rte_dma_vchan_conf *conf)
@@ -704,6 +719,7 @@ rte_dma_vchan_setup(int16_t dev_id, uint16_t vchan,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_dma_stats_get)
 int
 rte_dma_stats_get(int16_t dev_id, uint16_t vchan, struct rte_dma_stats *stats)
 {
@@ -726,6 +742,7 @@ rte_dma_stats_get(int16_t dev_id, uint16_t vchan, struct rte_dma_stats *stats)
 	return dev->dev_ops->stats_get(dev, vchan, stats, sizeof(struct rte_dma_stats));
 }
 
+RTE_EXPORT_SYMBOL(rte_dma_stats_reset)
 int
 rte_dma_stats_reset(int16_t dev_id, uint16_t vchan)
 {
@@ -751,6 +768,7 @@ rte_dma_stats_reset(int16_t dev_id, uint16_t vchan)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_dma_vchan_status)
 int
 rte_dma_vchan_status(int16_t dev_id, uint16_t vchan, enum rte_dma_vchan_status *status)
 {
@@ -818,6 +836,7 @@ dma_dump_capability(FILE *f, uint64_t dev_capa)
 	(void)fprintf(f, "\n");
 }
 
+RTE_EXPORT_SYMBOL(rte_dma_dump)
 int
 rte_dma_dump(int16_t dev_id, FILE *f)
 {
diff --git a/lib/dmadev/rte_dmadev_trace_points.c b/lib/dmadev/rte_dmadev_trace_points.c
index 4c74356346..a539d8b39d 100644
--- a/lib/dmadev/rte_dmadev_trace_points.c
+++ b/lib/dmadev/rte_dmadev_trace_points.c
@@ -36,23 +36,30 @@ RTE_TRACE_POINT_REGISTER(rte_dma_trace_vchan_status,
 RTE_TRACE_POINT_REGISTER(rte_dma_trace_dump,
 	lib.dmadev.dump)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_dma_trace_copy, 24.03)
 RTE_TRACE_POINT_REGISTER(rte_dma_trace_copy,
 	lib.dmadev.copy)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_dma_trace_copy_sg, 24.03)
 RTE_TRACE_POINT_REGISTER(rte_dma_trace_copy_sg,
 	lib.dmadev.copy_sg)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_dma_trace_fill, 24.03)
 RTE_TRACE_POINT_REGISTER(rte_dma_trace_fill,
 	lib.dmadev.fill)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_dma_trace_submit, 24.03)
 RTE_TRACE_POINT_REGISTER(rte_dma_trace_submit,
 	lib.dmadev.submit)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_dma_trace_completed, 24.03)
 RTE_TRACE_POINT_REGISTER(rte_dma_trace_completed,
 	lib.dmadev.completed)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_dma_trace_completed_status, 24.03)
 RTE_TRACE_POINT_REGISTER(rte_dma_trace_completed_status,
 	lib.dmadev.completed_status)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_dma_trace_burst_capacity, 24.03)
 RTE_TRACE_POINT_REGISTER(rte_dma_trace_burst_capacity,
 	lib.dmadev.burst_capacity)
diff --git a/lib/eal/arm/rte_cpuflags.c b/lib/eal/arm/rte_cpuflags.c
index 88e10c6da0..c763e25fa8 100644
--- a/lib/eal/arm/rte_cpuflags.c
+++ b/lib/eal/arm/rte_cpuflags.c
@@ -135,6 +135,7 @@ rte_cpu_get_features(hwcap_registers_t out)
 /*
  * Checks if a particular flag is available on current machine.
  */
+RTE_EXPORT_SYMBOL(rte_cpu_get_flag_enabled)
 int
 rte_cpu_get_flag_enabled(enum rte_cpu_flag_t feature)
 {
@@ -152,6 +153,7 @@ rte_cpu_get_flag_enabled(enum rte_cpu_flag_t feature)
 	return (regs[feat->reg] >> feat->bit) & 1;
 }
 
+RTE_EXPORT_SYMBOL(rte_cpu_get_flag_name)
 const char *
 rte_cpu_get_flag_name(enum rte_cpu_flag_t feature)
 {
@@ -160,6 +162,7 @@ rte_cpu_get_flag_name(enum rte_cpu_flag_t feature)
 	return rte_cpu_feature_table[feature].name;
 }
 
+RTE_EXPORT_SYMBOL(rte_cpu_get_intrinsics_support)
 void
 rte_cpu_get_intrinsics_support(struct rte_cpu_intrinsics *intrinsics)
 {
diff --git a/lib/eal/arm/rte_hypervisor.c b/lib/eal/arm/rte_hypervisor.c
index 08a1c97d10..c22cee1319 100644
--- a/lib/eal/arm/rte_hypervisor.c
+++ b/lib/eal/arm/rte_hypervisor.c
@@ -4,6 +4,7 @@
 
 #include "rte_hypervisor.h"
 
+RTE_EXPORT_SYMBOL(rte_hypervisor_get)
 enum rte_hypervisor
 rte_hypervisor_get(void)
 {
diff --git a/lib/eal/arm/rte_power_intrinsics.c b/lib/eal/arm/rte_power_intrinsics.c
index 6475bbca04..c7093c1bd1 100644
--- a/lib/eal/arm/rte_power_intrinsics.c
+++ b/lib/eal/arm/rte_power_intrinsics.c
@@ -26,6 +26,7 @@ RTE_INIT(rte_power_intrinsics_init)
  * This function uses WFE/WFET instruction to make lcore suspend
  * execution on ARM.
  */
+RTE_EXPORT_SYMBOL(rte_power_monitor)
 int
 rte_power_monitor(const struct rte_power_monitor_cond *pmc,
 		const uint64_t tsc_timestamp)
@@ -78,6 +79,7 @@ rte_power_monitor(const struct rte_power_monitor_cond *pmc,
 /**
  * This function is not supported on ARM.
  */
+RTE_EXPORT_SYMBOL(rte_power_pause)
 int
 rte_power_pause(const uint64_t tsc_timestamp)
 {
@@ -91,6 +93,7 @@ rte_power_pause(const uint64_t tsc_timestamp)
  * on ARM.
  * Note that lcore_id is not used here.
  */
+RTE_EXPORT_SYMBOL(rte_power_monitor_wakeup)
 int
 rte_power_monitor_wakeup(const unsigned int lcore_id)
 {
@@ -104,6 +107,7 @@ rte_power_monitor_wakeup(const unsigned int lcore_id)
 #endif /* RTE_ARCH_64 */
 }
 
+RTE_EXPORT_SYMBOL(rte_power_monitor_multi)
 int
 rte_power_monitor_multi(const struct rte_power_monitor_cond pmc[],
 		const uint32_t num, const uint64_t tsc_timestamp)
diff --git a/lib/eal/common/eal_common_bus.c b/lib/eal/common/eal_common_bus.c
index 7cbd09c421..80a44409b3 100644
--- a/lib/eal/common/eal_common_bus.c
+++ b/lib/eal/common/eal_common_bus.c
@@ -16,12 +16,14 @@
 static struct rte_bus_list rte_bus_list =
 	TAILQ_HEAD_INITIALIZER(rte_bus_list);
 
+RTE_EXPORT_SYMBOL(rte_bus_name)
 const char *
 rte_bus_name(const struct rte_bus *bus)
 {
 	return bus->name;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_bus_register)
 void
 rte_bus_register(struct rte_bus *bus)
 {
@@ -38,6 +40,7 @@ rte_bus_register(struct rte_bus *bus)
 	EAL_LOG(DEBUG, "Registered [%s] bus.", rte_bus_name(bus));
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_bus_unregister)
 void
 rte_bus_unregister(struct rte_bus *bus)
 {
@@ -46,6 +49,7 @@ rte_bus_unregister(struct rte_bus *bus)
 }
 
 /* Scan all the buses for registered devices */
+RTE_EXPORT_SYMBOL(rte_bus_scan)
 int
 rte_bus_scan(void)
 {
@@ -63,6 +67,7 @@ rte_bus_scan(void)
 }
 
 /* Probe all devices of all buses */
+RTE_EXPORT_SYMBOL(rte_bus_probe)
 int
 rte_bus_probe(void)
 {
@@ -124,6 +129,7 @@ bus_dump_one(FILE *f, struct rte_bus *bus)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_bus_dump)
 void
 rte_bus_dump(FILE *f)
 {
@@ -140,6 +146,7 @@ rte_bus_dump(FILE *f)
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_bus_find)
 struct rte_bus *
 rte_bus_find(const struct rte_bus *start, rte_bus_cmp_t cmp,
 	     const void *data)
@@ -175,6 +182,7 @@ bus_find_device(const struct rte_bus *bus, const void *_dev)
 	return dev == NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_bus_find_by_device)
 struct rte_bus *
 rte_bus_find_by_device(const struct rte_device *dev)
 {
@@ -189,6 +197,7 @@ cmp_bus_name(const struct rte_bus *bus, const void *_name)
 	return strcmp(rte_bus_name(bus), name);
 }
 
+RTE_EXPORT_SYMBOL(rte_bus_find_by_name)
 struct rte_bus *
 rte_bus_find_by_name(const char *busname)
 {
@@ -220,6 +229,7 @@ rte_bus_find_by_device_name(const char *str)
 /*
  * Get iommu class of devices on the bus.
  */
+RTE_EXPORT_SYMBOL(rte_bus_get_iommu_class)
 enum rte_iova_mode
 rte_bus_get_iommu_class(void)
 {
diff --git a/lib/eal/common/eal_common_class.c b/lib/eal/common/eal_common_class.c
index 4938ec6707..b5c4e4b38e 100644
--- a/lib/eal/common/eal_common_class.c
+++ b/lib/eal/common/eal_common_class.c
@@ -14,6 +14,7 @@
 static struct rte_class_list rte_class_list =
 	TAILQ_HEAD_INITIALIZER(rte_class_list);
 
+RTE_EXPORT_SYMBOL(rte_class_register)
 void
 rte_class_register(struct rte_class *class)
 {
@@ -24,6 +25,7 @@ rte_class_register(struct rte_class *class)
 	EAL_LOG(DEBUG, "Registered [%s] device class.", class->name);
 }
 
+RTE_EXPORT_SYMBOL(rte_class_unregister)
 void
 rte_class_unregister(struct rte_class *class)
 {
@@ -31,6 +33,7 @@ rte_class_unregister(struct rte_class *class)
 	EAL_LOG(DEBUG, "Unregistered [%s] device class.", class->name);
 }
 
+RTE_EXPORT_SYMBOL(rte_class_find)
 struct rte_class *
 rte_class_find(const struct rte_class *start, rte_class_cmp_t cmp,
 	       const void *data)
@@ -57,6 +60,7 @@ cmp_class_name(const struct rte_class *class, const void *_name)
 	return strcmp(class->name, name);
 }
 
+RTE_EXPORT_SYMBOL(rte_class_find_by_name)
 struct rte_class *
 rte_class_find_by_name(const char *name)
 {
diff --git a/lib/eal/common/eal_common_config.c b/lib/eal/common/eal_common_config.c
index d3494d6e21..daade14038 100644
--- a/lib/eal/common/eal_common_config.c
+++ b/lib/eal/common/eal_common_config.c
@@ -28,6 +28,7 @@ static char runtime_dir[PATH_MAX];
 /* internal configuration */
 static struct internal_config internal_config;
 
+RTE_EXPORT_SYMBOL(rte_eal_get_runtime_dir)
 const char *
 rte_eal_get_runtime_dir(void)
 {
@@ -59,6 +60,7 @@ eal_get_internal_configuration(void)
 	return &internal_config;
 }
 
+RTE_EXPORT_SYMBOL(rte_eal_iova_mode)
 enum rte_iova_mode
 rte_eal_iova_mode(void)
 {
@@ -66,6 +68,7 @@ rte_eal_iova_mode(void)
 }
 
 /* Get the EAL base address */
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eal_get_baseaddr)
 uint64_t
 rte_eal_get_baseaddr(void)
 {
@@ -74,6 +77,7 @@ rte_eal_get_baseaddr(void)
 		       eal_get_baseaddr();
 }
 
+RTE_EXPORT_SYMBOL(rte_eal_process_type)
 enum rte_proc_type_t
 rte_eal_process_type(void)
 {
@@ -81,6 +85,7 @@ rte_eal_process_type(void)
 }
 
 /* Return user provided mbuf pool ops name */
+RTE_EXPORT_SYMBOL(rte_eal_mbuf_user_pool_ops)
 const char *
 rte_eal_mbuf_user_pool_ops(void)
 {
@@ -88,12 +93,14 @@ rte_eal_mbuf_user_pool_ops(void)
 }
 
 /* return non-zero if hugepages are enabled. */
+RTE_EXPORT_SYMBOL(rte_eal_has_hugepages)
 int
 rte_eal_has_hugepages(void)
 {
 	return !internal_config.no_hugetlbfs;
 }
 
+RTE_EXPORT_SYMBOL(rte_eal_has_pci)
 int
 rte_eal_has_pci(void)
 {
diff --git a/lib/eal/common/eal_common_cpuflags.c b/lib/eal/common/eal_common_cpuflags.c
index dc5f75d053..a6e20227ef 100644
--- a/lib/eal/common/eal_common_cpuflags.c
+++ b/lib/eal/common/eal_common_cpuflags.c
@@ -7,6 +7,7 @@
 #include <rte_common.h>
 #include <rte_cpuflags.h>
 
+RTE_EXPORT_SYMBOL(rte_cpu_is_supported)
 int
 rte_cpu_is_supported(void)
 {
diff --git a/lib/eal/common/eal_common_debug.c b/lib/eal/common/eal_common_debug.c
index bcfcd6df6f..5839ba1d23 100644
--- a/lib/eal/common/eal_common_debug.c
+++ b/lib/eal/common/eal_common_debug.c
@@ -13,6 +13,7 @@
 
 #include "eal_private.h"
 
+RTE_EXPORT_SYMBOL(__rte_panic)
 void
 __rte_panic(const char *funcname, const char *format, ...)
 {
@@ -30,6 +31,7 @@ __rte_panic(const char *funcname, const char *format, ...)
  * Like rte_panic this terminates the application. However, no traceback is
  * provided and no core-dump is generated.
  */
+RTE_EXPORT_SYMBOL(rte_exit)
 void
 rte_exit(int exit_code, const char *format, ...)
 {
diff --git a/lib/eal/common/eal_common_dev.c b/lib/eal/common/eal_common_dev.c
index 70aa04dcd9..cc063bc106 100644
--- a/lib/eal/common/eal_common_dev.c
+++ b/lib/eal/common/eal_common_dev.c
@@ -20,42 +20,49 @@
 #include "eal_private.h"
 #include "hotplug_mp.h"
 
+RTE_EXPORT_SYMBOL(rte_driver_name)
 const char *
 rte_driver_name(const struct rte_driver *driver)
 {
 	return driver->name;
 }
 
+RTE_EXPORT_SYMBOL(rte_dev_bus)
 const struct rte_bus *
 rte_dev_bus(const struct rte_device *dev)
 {
 	return dev->bus;
 }
 
+RTE_EXPORT_SYMBOL(rte_dev_bus_info)
 const char *
 rte_dev_bus_info(const struct rte_device *dev)
 {
 	return dev->bus_info;
 }
 
+RTE_EXPORT_SYMBOL(rte_dev_devargs)
 const struct rte_devargs *
 rte_dev_devargs(const struct rte_device *dev)
 {
 	return dev->devargs;
 }
 
+RTE_EXPORT_SYMBOL(rte_dev_driver)
 const struct rte_driver *
 rte_dev_driver(const struct rte_device *dev)
 {
 	return dev->driver;
 }
 
+RTE_EXPORT_SYMBOL(rte_dev_name)
 const char *
 rte_dev_name(const struct rte_device *dev)
 {
 	return dev->name;
 }
 
+RTE_EXPORT_SYMBOL(rte_dev_numa_node)
 int
 rte_dev_numa_node(const struct rte_device *dev)
 {
@@ -114,6 +121,7 @@ static int cmp_dev_name(const struct rte_device *dev, const void *_name)
 	return strcmp(dev->name, name);
 }
 
+RTE_EXPORT_SYMBOL(rte_dev_is_probed)
 int
 rte_dev_is_probed(const struct rte_device *dev)
 {
@@ -146,6 +154,7 @@ build_devargs(const char *busname, const char *devname,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eal_hotplug_add)
 int
 rte_eal_hotplug_add(const char *busname, const char *devname,
 		    const char *drvargs)
@@ -230,6 +239,7 @@ local_dev_probe(const char *devargs, struct rte_device **new_dev)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_dev_probe)
 int
 rte_dev_probe(const char *devargs)
 {
@@ -323,6 +333,7 @@ rte_dev_probe(const char *devargs)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eal_hotplug_remove)
 int
 rte_eal_hotplug_remove(const char *busname, const char *devname)
 {
@@ -366,6 +377,7 @@ local_dev_remove(struct rte_device *dev)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_dev_remove)
 int
 rte_dev_remove(struct rte_device *dev)
 {
@@ -463,6 +475,7 @@ rte_dev_remove(struct rte_device *dev)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_dev_event_callback_register)
 int
 rte_dev_event_callback_register(const char *device_name,
 				rte_dev_event_cb_fn cb_fn,
@@ -531,6 +544,7 @@ rte_dev_event_callback_register(const char *device_name,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_dev_event_callback_unregister)
 int
 rte_dev_event_callback_unregister(const char *device_name,
 				  rte_dev_event_cb_fn cb_fn,
@@ -584,6 +598,7 @@ rte_dev_event_callback_unregister(const char *device_name,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_dev_event_callback_process)
 void
 rte_dev_event_callback_process(const char *device_name,
 			       enum rte_dev_event_type event)
@@ -610,6 +625,7 @@ rte_dev_event_callback_process(const char *device_name,
 	rte_spinlock_unlock(&dev_event_lock);
 }
 
+RTE_EXPORT_SYMBOL(rte_dev_iterator_init)
 int
 rte_dev_iterator_init(struct rte_dev_iterator *it,
 		      const char *dev_str)
@@ -762,6 +778,7 @@ bus_next_dev_cmp(const struct rte_bus *bus,
 	it->device = dev;
 	return dev == NULL;
 }
+RTE_EXPORT_SYMBOL(rte_dev_iterator_next)
 struct rte_device *
 rte_dev_iterator_next(struct rte_dev_iterator *it)
 {
@@ -806,6 +823,7 @@ rte_dev_iterator_next(struct rte_dev_iterator *it)
 	return it->device;
 }
 
+RTE_EXPORT_SYMBOL(rte_dev_dma_map)
 int
 rte_dev_dma_map(struct rte_device *dev, void *addr, uint64_t iova,
 		size_t len)
@@ -823,6 +841,7 @@ rte_dev_dma_map(struct rte_device *dev, void *addr, uint64_t iova,
 	return dev->bus->dma_map(dev, addr, iova, len);
 }
 
+RTE_EXPORT_SYMBOL(rte_dev_dma_unmap)
 int
 rte_dev_dma_unmap(struct rte_device *dev, void *addr, uint64_t iova,
 		  size_t len)
diff --git a/lib/eal/common/eal_common_devargs.c b/lib/eal/common/eal_common_devargs.c
index dd857fc839..b80a3d00e6 100644
--- a/lib/eal/common/eal_common_devargs.c
+++ b/lib/eal/common/eal_common_devargs.c
@@ -180,6 +180,7 @@ bus_name_cmp(const struct rte_bus *bus, const void *name)
 	return strncmp(bus->name, name, strlen(bus->name));
 }
 
+RTE_EXPORT_SYMBOL(rte_devargs_parse)
 int
 rte_devargs_parse(struct rte_devargs *da, const char *dev)
 {
@@ -246,6 +247,7 @@ rte_devargs_parse(struct rte_devargs *da, const char *dev)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_devargs_parsef)
 int
 rte_devargs_parsef(struct rte_devargs *da, const char *format, ...)
 {
@@ -280,6 +282,7 @@ rte_devargs_parsef(struct rte_devargs *da, const char *format, ...)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_devargs_reset)
 void
 rte_devargs_reset(struct rte_devargs *da)
 {
@@ -289,6 +292,7 @@ rte_devargs_reset(struct rte_devargs *da)
 	da->data = NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_devargs_insert)
 int
 rte_devargs_insert(struct rte_devargs **da)
 {
@@ -320,6 +324,7 @@ rte_devargs_insert(struct rte_devargs **da)
 }
 
 /* store in allowed list parameter for later parsing */
+RTE_EXPORT_SYMBOL(rte_devargs_add)
 int
 rte_devargs_add(enum rte_devtype devtype, const char *devargs_str)
 {
@@ -356,6 +361,7 @@ rte_devargs_add(enum rte_devtype devtype, const char *devargs_str)
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_devargs_remove)
 int
 rte_devargs_remove(struct rte_devargs *devargs)
 {
@@ -378,6 +384,7 @@ rte_devargs_remove(struct rte_devargs *devargs)
 }
 
 /* count the number of devices of a specified type */
+RTE_EXPORT_SYMBOL(rte_devargs_type_count)
 unsigned int
 rte_devargs_type_count(enum rte_devtype devtype)
 {
@@ -393,6 +400,7 @@ rte_devargs_type_count(enum rte_devtype devtype)
 }
 
 /* dump the user devices on the console */
+RTE_EXPORT_SYMBOL(rte_devargs_dump)
 void
 rte_devargs_dump(FILE *f)
 {
@@ -407,6 +415,7 @@ rte_devargs_dump(FILE *f)
 }
 
 /* bus-aware rte_devargs iterator. */
+RTE_EXPORT_SYMBOL(rte_devargs_next)
 struct rte_devargs *
 rte_devargs_next(const char *busname, const struct rte_devargs *start)
 {
diff --git a/lib/eal/common/eal_common_errno.c b/lib/eal/common/eal_common_errno.c
index fff8c1ffe4..99ce59c792 100644
--- a/lib/eal/common/eal_common_errno.c
+++ b/lib/eal/common/eal_common_errno.c
@@ -16,8 +16,10 @@
 #define strerror_r(errnum, buf, buflen) strerror_s(buf, buflen, errnum)
 #endif
 
+RTE_EXPORT_SYMBOL(per_lcore__rte_errno)
 RTE_DEFINE_PER_LCORE(int, _rte_errno);
 
+RTE_EXPORT_SYMBOL(rte_strerror)
 const char *
 rte_strerror(int errnum)
 {
diff --git a/lib/eal/common/eal_common_fbarray.c b/lib/eal/common/eal_common_fbarray.c
index 22b43073c6..6a5f435b62 100644
--- a/lib/eal/common/eal_common_fbarray.c
+++ b/lib/eal/common/eal_common_fbarray.c
@@ -715,6 +715,7 @@ fully_validate(const char *name, unsigned int elt_sz, unsigned int len)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_fbarray_init)
 int
 rte_fbarray_init(struct rte_fbarray *arr, const char *name, unsigned int len,
 		unsigned int elt_sz)
@@ -841,6 +842,7 @@ rte_fbarray_init(struct rte_fbarray *arr, const char *name, unsigned int len,
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_fbarray_attach)
 int
 rte_fbarray_attach(struct rte_fbarray *arr)
 {
@@ -929,6 +931,7 @@ rte_fbarray_attach(struct rte_fbarray *arr)
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_fbarray_detach)
 int
 rte_fbarray_detach(struct rte_fbarray *arr)
 {
@@ -982,6 +985,7 @@ rte_fbarray_detach(struct rte_fbarray *arr)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_fbarray_destroy)
 int
 rte_fbarray_destroy(struct rte_fbarray *arr)
 {
@@ -1068,6 +1072,7 @@ rte_fbarray_destroy(struct rte_fbarray *arr)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_fbarray_get)
 void *
 rte_fbarray_get(const struct rte_fbarray *arr, unsigned int idx)
 {
@@ -1087,18 +1092,21 @@ rte_fbarray_get(const struct rte_fbarray *arr, unsigned int idx)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_fbarray_set_used)
 int
 rte_fbarray_set_used(struct rte_fbarray *arr, unsigned int idx)
 {
 	return set_used(arr, idx, true);
 }
 
+RTE_EXPORT_SYMBOL(rte_fbarray_set_free)
 int
 rte_fbarray_set_free(struct rte_fbarray *arr, unsigned int idx)
 {
 	return set_used(arr, idx, false);
 }
 
+RTE_EXPORT_SYMBOL(rte_fbarray_is_used)
 int
 rte_fbarray_is_used(struct rte_fbarray *arr, unsigned int idx)
 {
@@ -1168,24 +1176,28 @@ fbarray_find(struct rte_fbarray *arr, unsigned int start, bool next, bool used)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_fbarray_find_next_free)
 int
 rte_fbarray_find_next_free(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find(arr, start, true, false);
 }
 
+RTE_EXPORT_SYMBOL(rte_fbarray_find_next_used)
 int
 rte_fbarray_find_next_used(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find(arr, start, true, true);
 }
 
+RTE_EXPORT_SYMBOL(rte_fbarray_find_prev_free)
 int
 rte_fbarray_find_prev_free(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find(arr, start, false, false);
 }
 
+RTE_EXPORT_SYMBOL(rte_fbarray_find_prev_used)
 int
 rte_fbarray_find_prev_used(struct rte_fbarray *arr, unsigned int start)
 {
@@ -1244,6 +1256,7 @@ fbarray_find_n(struct rte_fbarray *arr, unsigned int start, unsigned int n,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_fbarray_find_next_n_free)
 int
 rte_fbarray_find_next_n_free(struct rte_fbarray *arr, unsigned int start,
 		unsigned int n)
@@ -1251,6 +1264,7 @@ rte_fbarray_find_next_n_free(struct rte_fbarray *arr, unsigned int start,
 	return fbarray_find_n(arr, start, n, true, false);
 }
 
+RTE_EXPORT_SYMBOL(rte_fbarray_find_next_n_used)
 int
 rte_fbarray_find_next_n_used(struct rte_fbarray *arr, unsigned int start,
 		unsigned int n)
@@ -1258,6 +1272,7 @@ rte_fbarray_find_next_n_used(struct rte_fbarray *arr, unsigned int start,
 	return fbarray_find_n(arr, start, n, true, true);
 }
 
+RTE_EXPORT_SYMBOL(rte_fbarray_find_prev_n_free)
 int
 rte_fbarray_find_prev_n_free(struct rte_fbarray *arr, unsigned int start,
 		unsigned int n)
@@ -1265,6 +1280,7 @@ rte_fbarray_find_prev_n_free(struct rte_fbarray *arr, unsigned int start,
 	return fbarray_find_n(arr, start, n, false, false);
 }
 
+RTE_EXPORT_SYMBOL(rte_fbarray_find_prev_n_used)
 int
 rte_fbarray_find_prev_n_used(struct rte_fbarray *arr, unsigned int start,
 		unsigned int n)
@@ -1408,24 +1424,28 @@ fbarray_find_biggest(struct rte_fbarray *arr, unsigned int start, bool used,
 	return biggest_idx;
 }
 
+RTE_EXPORT_SYMBOL(rte_fbarray_find_biggest_free)
 int
 rte_fbarray_find_biggest_free(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find_biggest(arr, start, false, false);
 }
 
+RTE_EXPORT_SYMBOL(rte_fbarray_find_biggest_used)
 int
 rte_fbarray_find_biggest_used(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find_biggest(arr, start, true, false);
 }
 
+RTE_EXPORT_SYMBOL(rte_fbarray_find_rev_biggest_free)
 int
 rte_fbarray_find_rev_biggest_free(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find_biggest(arr, start, false, true);
 }
 
+RTE_EXPORT_SYMBOL(rte_fbarray_find_rev_biggest_used)
 int
 rte_fbarray_find_rev_biggest_used(struct rte_fbarray *arr, unsigned int start)
 {
@@ -1433,30 +1453,35 @@ rte_fbarray_find_rev_biggest_used(struct rte_fbarray *arr, unsigned int start)
 }
 
 
+RTE_EXPORT_SYMBOL(rte_fbarray_find_contig_free)
 int
 rte_fbarray_find_contig_free(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find_contig(arr, start, true, false);
 }
 
+RTE_EXPORT_SYMBOL(rte_fbarray_find_contig_used)
 int
 rte_fbarray_find_contig_used(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find_contig(arr, start, true, true);
 }
 
+RTE_EXPORT_SYMBOL(rte_fbarray_find_rev_contig_free)
 int
 rte_fbarray_find_rev_contig_free(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find_contig(arr, start, false, false);
 }
 
+RTE_EXPORT_SYMBOL(rte_fbarray_find_rev_contig_used)
 int
 rte_fbarray_find_rev_contig_used(struct rte_fbarray *arr, unsigned int start)
 {
 	return fbarray_find_contig(arr, start, false, true);
 }
 
+RTE_EXPORT_SYMBOL(rte_fbarray_find_idx)
 int
 rte_fbarray_find_idx(const struct rte_fbarray *arr, const void *elt)
 {
@@ -1483,6 +1508,7 @@ rte_fbarray_find_idx(const struct rte_fbarray *arr, const void *elt)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_fbarray_dump_metadata)
 void
 rte_fbarray_dump_metadata(struct rte_fbarray *arr, FILE *f)
 {
diff --git a/lib/eal/common/eal_common_hexdump.c b/lib/eal/common/eal_common_hexdump.c
index 6fd6e21e1e..d5b753f51e 100644
--- a/lib/eal/common/eal_common_hexdump.c
+++ b/lib/eal/common/eal_common_hexdump.c
@@ -7,6 +7,7 @@
 
 #define LINE_LEN 128
 
+RTE_EXPORT_SYMBOL(rte_hexdump)
 void
 rte_hexdump(FILE *f, const char *title, const void *buf, unsigned int len)
 {
@@ -45,6 +46,7 @@ rte_hexdump(FILE *f, const char *title, const void *buf, unsigned int len)
 	fflush(f);
 }
 
+RTE_EXPORT_SYMBOL(rte_memdump)
 void
 rte_memdump(FILE *f, const char *title, const void *buf, unsigned int len)
 {
diff --git a/lib/eal/common/eal_common_hypervisor.c b/lib/eal/common/eal_common_hypervisor.c
index 5388b81a51..dd5c9bb115 100644
--- a/lib/eal/common/eal_common_hypervisor.c
+++ b/lib/eal/common/eal_common_hypervisor.c
@@ -4,6 +4,7 @@
 
 #include "rte_hypervisor.h"
 
+RTE_EXPORT_SYMBOL(rte_hypervisor_get_name)
 const char *
 rte_hypervisor_get_name(enum rte_hypervisor id)
 {
diff --git a/lib/eal/common/eal_common_interrupts.c b/lib/eal/common/eal_common_interrupts.c
index b4d7b18fae..74171a5b66 100644
--- a/lib/eal/common/eal_common_interrupts.c
+++ b/lib/eal/common/eal_common_interrupts.c
@@ -29,6 +29,7 @@
 #define RTE_INTR_INSTANCE_USES_RTE_MEMORY(flags) \
 	(!!(flags & RTE_INTR_INSTANCE_F_SHARED))
 
+RTE_EXPORT_SYMBOL(rte_intr_instance_alloc)
 struct rte_intr_handle *rte_intr_instance_alloc(uint32_t flags)
 {
 	struct rte_intr_handle *intr_handle;
@@ -96,6 +97,7 @@ struct rte_intr_handle *rte_intr_instance_alloc(uint32_t flags)
 	return NULL;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_instance_dup)
 struct rte_intr_handle *rte_intr_instance_dup(const struct rte_intr_handle *src)
 {
 	struct rte_intr_handle *intr_handle;
@@ -121,6 +123,7 @@ struct rte_intr_handle *rte_intr_instance_dup(const struct rte_intr_handle *src)
 	return intr_handle;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_event_list_update)
 int rte_intr_event_list_update(struct rte_intr_handle *intr_handle, int size)
 {
 	struct rte_epoll_event *tmp_elist;
@@ -171,6 +174,7 @@ int rte_intr_event_list_update(struct rte_intr_handle *intr_handle, int size)
 	return -rte_errno;
 }
 
+RTE_EXPORT_SYMBOL(rte_intr_instance_free)
 void rte_intr_instance_free(struct rte_intr_handle *intr_handle)
 {
 	if (intr_handle == NULL)
@@ -186,6 +190,7 @@ void rte_intr_instance_free(struct rte_intr_handle *intr_handle)
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_intr_fd_set)
 int rte_intr_fd_set(struct rte_intr_handle *intr_handle, int fd)
 {
 	CHECK_VALID_INTR_HANDLE(intr_handle);
@@ -197,6 +202,7 @@ int rte_intr_fd_set(struct rte_intr_handle *intr_handle, int fd)
 	return -rte_errno;
 }
 
+RTE_EXPORT_SYMBOL(rte_intr_fd_get)
 int rte_intr_fd_get(const struct rte_intr_handle *intr_handle)
 {
 	CHECK_VALID_INTR_HANDLE(intr_handle);
@@ -206,6 +212,7 @@ int rte_intr_fd_get(const struct rte_intr_handle *intr_handle)
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_intr_type_set)
 int rte_intr_type_set(struct rte_intr_handle *intr_handle,
 	enum rte_intr_handle_type type)
 {
@@ -218,6 +225,7 @@ int rte_intr_type_set(struct rte_intr_handle *intr_handle,
 	return -rte_errno;
 }
 
+RTE_EXPORT_SYMBOL(rte_intr_type_get)
 enum rte_intr_handle_type rte_intr_type_get(
 	const struct rte_intr_handle *intr_handle)
 {
@@ -228,6 +236,7 @@ enum rte_intr_handle_type rte_intr_type_get(
 	return RTE_INTR_HANDLE_UNKNOWN;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_dev_fd_set)
 int rte_intr_dev_fd_set(struct rte_intr_handle *intr_handle, int fd)
 {
 	CHECK_VALID_INTR_HANDLE(intr_handle);
@@ -239,6 +248,7 @@ int rte_intr_dev_fd_set(struct rte_intr_handle *intr_handle, int fd)
 	return -rte_errno;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_dev_fd_get)
 int rte_intr_dev_fd_get(const struct rte_intr_handle *intr_handle)
 {
 	CHECK_VALID_INTR_HANDLE(intr_handle);
@@ -248,6 +258,7 @@ int rte_intr_dev_fd_get(const struct rte_intr_handle *intr_handle)
 	return -1;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_max_intr_set)
 int rte_intr_max_intr_set(struct rte_intr_handle *intr_handle,
 				 int max_intr)
 {
@@ -268,6 +279,7 @@ int rte_intr_max_intr_set(struct rte_intr_handle *intr_handle,
 	return -rte_errno;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_max_intr_get)
 int rte_intr_max_intr_get(const struct rte_intr_handle *intr_handle)
 {
 	CHECK_VALID_INTR_HANDLE(intr_handle);
@@ -277,6 +289,7 @@ int rte_intr_max_intr_get(const struct rte_intr_handle *intr_handle)
 	return -rte_errno;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_nb_efd_set)
 int rte_intr_nb_efd_set(struct rte_intr_handle *intr_handle, int nb_efd)
 {
 	CHECK_VALID_INTR_HANDLE(intr_handle);
@@ -288,6 +301,7 @@ int rte_intr_nb_efd_set(struct rte_intr_handle *intr_handle, int nb_efd)
 	return -rte_errno;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_nb_efd_get)
 int rte_intr_nb_efd_get(const struct rte_intr_handle *intr_handle)
 {
 	CHECK_VALID_INTR_HANDLE(intr_handle);
@@ -297,6 +311,7 @@ int rte_intr_nb_efd_get(const struct rte_intr_handle *intr_handle)
 	return -rte_errno;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_nb_intr_get)
 int rte_intr_nb_intr_get(const struct rte_intr_handle *intr_handle)
 {
 	CHECK_VALID_INTR_HANDLE(intr_handle);
@@ -306,6 +321,7 @@ int rte_intr_nb_intr_get(const struct rte_intr_handle *intr_handle)
 	return -rte_errno;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_efd_counter_size_set)
 int rte_intr_efd_counter_size_set(struct rte_intr_handle *intr_handle,
 	uint8_t efd_counter_size)
 {
@@ -318,6 +334,7 @@ int rte_intr_efd_counter_size_set(struct rte_intr_handle *intr_handle,
 	return -rte_errno;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_efd_counter_size_get)
 int rte_intr_efd_counter_size_get(const struct rte_intr_handle *intr_handle)
 {
 	CHECK_VALID_INTR_HANDLE(intr_handle);
@@ -327,6 +344,7 @@ int rte_intr_efd_counter_size_get(const struct rte_intr_handle *intr_handle)
 	return -rte_errno;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_efds_index_get)
 int rte_intr_efds_index_get(const struct rte_intr_handle *intr_handle,
 	int index)
 {
@@ -344,6 +362,7 @@ int rte_intr_efds_index_get(const struct rte_intr_handle *intr_handle,
 	return -rte_errno;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_efds_index_set)
 int rte_intr_efds_index_set(struct rte_intr_handle *intr_handle,
 	int index, int fd)
 {
@@ -363,6 +382,7 @@ int rte_intr_efds_index_set(struct rte_intr_handle *intr_handle,
 	return -rte_errno;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_elist_index_get)
 struct rte_epoll_event *rte_intr_elist_index_get(
 	struct rte_intr_handle *intr_handle, int index)
 {
@@ -380,6 +400,7 @@ struct rte_epoll_event *rte_intr_elist_index_get(
 	return NULL;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_elist_index_set)
 int rte_intr_elist_index_set(struct rte_intr_handle *intr_handle,
 	int index, struct rte_epoll_event elist)
 {
@@ -399,6 +420,7 @@ int rte_intr_elist_index_set(struct rte_intr_handle *intr_handle,
 	return -rte_errno;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_vec_list_alloc)
 int rte_intr_vec_list_alloc(struct rte_intr_handle *intr_handle,
 	const char *name, int size)
 {
@@ -432,6 +454,7 @@ int rte_intr_vec_list_alloc(struct rte_intr_handle *intr_handle,
 	return -rte_errno;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_vec_list_index_get)
 int rte_intr_vec_list_index_get(const struct rte_intr_handle *intr_handle,
 				int index)
 {
@@ -449,6 +472,7 @@ int rte_intr_vec_list_index_get(const struct rte_intr_handle *intr_handle,
 	return -rte_errno;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_vec_list_index_set)
 int rte_intr_vec_list_index_set(struct rte_intr_handle *intr_handle,
 				int index, int vec)
 {
@@ -468,6 +492,7 @@ int rte_intr_vec_list_index_set(struct rte_intr_handle *intr_handle,
 	return -rte_errno;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_vec_list_free)
 void rte_intr_vec_list_free(struct rte_intr_handle *intr_handle)
 {
 	if (intr_handle == NULL)
@@ -480,6 +505,7 @@ void rte_intr_vec_list_free(struct rte_intr_handle *intr_handle)
 	intr_handle->vec_list_size = 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_instance_windows_handle_get)
 void *rte_intr_instance_windows_handle_get(struct rte_intr_handle *intr_handle)
 {
 	CHECK_VALID_INTR_HANDLE(intr_handle);
@@ -489,6 +515,7 @@ void *rte_intr_instance_windows_handle_get(struct rte_intr_handle *intr_handle)
 	return NULL;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_instance_windows_handle_set)
 int rte_intr_instance_windows_handle_set(struct rte_intr_handle *intr_handle,
 	void *windows_handle)
 {
diff --git a/lib/eal/common/eal_common_launch.c b/lib/eal/common/eal_common_launch.c
index 5320c3bd3c..7d0cc6a359 100644
--- a/lib/eal/common/eal_common_launch.c
+++ b/lib/eal/common/eal_common_launch.c
@@ -15,6 +15,7 @@
 /*
  * Wait until a lcore finished its job.
  */
+RTE_EXPORT_SYMBOL(rte_eal_wait_lcore)
 int
 rte_eal_wait_lcore(unsigned worker_id)
 {
@@ -30,6 +31,7 @@ rte_eal_wait_lcore(unsigned worker_id)
  * function f with argument arg. Once the execution is done, the
  * remote lcore switches to WAIT state.
  */
+RTE_EXPORT_SYMBOL(rte_eal_remote_launch)
 int
 rte_eal_remote_launch(lcore_function_t *f, void *arg, unsigned int worker_id)
 {
@@ -61,6 +63,7 @@ rte_eal_remote_launch(lcore_function_t *f, void *arg, unsigned int worker_id)
  * rte_eal_remote_launch() for all of them. If call_main is true
  * (set to CALL_MAIN), also call the function on the main lcore.
  */
+RTE_EXPORT_SYMBOL(rte_eal_mp_remote_launch)
 int
 rte_eal_mp_remote_launch(int (*f)(void *), void *arg,
 			 enum rte_rmt_call_main_t call_main)
@@ -90,6 +93,7 @@ rte_eal_mp_remote_launch(int (*f)(void *), void *arg,
 /*
  * Return the state of the lcore identified by worker_id.
  */
+RTE_EXPORT_SYMBOL(rte_eal_get_lcore_state)
 enum rte_lcore_state_t
 rte_eal_get_lcore_state(unsigned lcore_id)
 {
@@ -100,6 +104,7 @@ rte_eal_get_lcore_state(unsigned lcore_id)
  * Do a rte_eal_wait_lcore() for every lcore. The return values are
  * ignored.
  */
+RTE_EXPORT_SYMBOL(rte_eal_mp_wait_lcore)
 void
 rte_eal_mp_wait_lcore(void)
 {
diff --git a/lib/eal/common/eal_common_lcore.c b/lib/eal/common/eal_common_lcore.c
index 2ff9252c52..6a1b9655ad 100644
--- a/lib/eal/common/eal_common_lcore.c
+++ b/lib/eal/common/eal_common_lcore.c
@@ -18,16 +18,19 @@
 #include "eal_private.h"
 #include "eal_thread.h"
 
+RTE_EXPORT_SYMBOL(rte_get_main_lcore)
 unsigned int rte_get_main_lcore(void)
 {
 	return rte_eal_get_configuration()->main_lcore;
 }
 
+RTE_EXPORT_SYMBOL(rte_lcore_count)
 unsigned int rte_lcore_count(void)
 {
 	return rte_eal_get_configuration()->lcore_count;
 }
 
+RTE_EXPORT_SYMBOL(rte_lcore_index)
 int rte_lcore_index(int lcore_id)
 {
 	if (unlikely(lcore_id >= RTE_MAX_LCORE))
@@ -43,6 +46,7 @@ int rte_lcore_index(int lcore_id)
 	return lcore_config[lcore_id].core_index;
 }
 
+RTE_EXPORT_SYMBOL(rte_lcore_to_cpu_id)
 int rte_lcore_to_cpu_id(int lcore_id)
 {
 	if (unlikely(lcore_id >= RTE_MAX_LCORE))
@@ -58,11 +62,13 @@ int rte_lcore_to_cpu_id(int lcore_id)
 	return lcore_config[lcore_id].core_id;
 }
 
+RTE_EXPORT_SYMBOL(rte_lcore_cpuset)
 rte_cpuset_t rte_lcore_cpuset(unsigned int lcore_id)
 {
 	return lcore_config[lcore_id].cpuset;
 }
 
+RTE_EXPORT_SYMBOL(rte_eal_lcore_role)
 enum rte_lcore_role_t
 rte_eal_lcore_role(unsigned int lcore_id)
 {
@@ -73,6 +79,7 @@ rte_eal_lcore_role(unsigned int lcore_id)
 	return cfg->lcore_role[lcore_id];
 }
 
+RTE_EXPORT_SYMBOL(rte_lcore_has_role)
 int
 rte_lcore_has_role(unsigned int lcore_id, enum rte_lcore_role_t role)
 {
@@ -84,6 +91,7 @@ rte_lcore_has_role(unsigned int lcore_id, enum rte_lcore_role_t role)
 	return cfg->lcore_role[lcore_id] == role;
 }
 
+RTE_EXPORT_SYMBOL(rte_lcore_is_enabled)
 int rte_lcore_is_enabled(unsigned int lcore_id)
 {
 	struct rte_config *cfg = rte_eal_get_configuration();
@@ -93,6 +101,7 @@ int rte_lcore_is_enabled(unsigned int lcore_id)
 	return cfg->lcore_role[lcore_id] == ROLE_RTE;
 }
 
+RTE_EXPORT_SYMBOL(rte_get_next_lcore)
 unsigned int rte_get_next_lcore(unsigned int i, int skip_main, int wrap)
 {
 	i++;
@@ -112,6 +121,7 @@ unsigned int rte_get_next_lcore(unsigned int i, int skip_main, int wrap)
 	return i;
 }
 
+RTE_EXPORT_SYMBOL(rte_lcore_to_socket_id)
 unsigned int
 rte_lcore_to_socket_id(unsigned int lcore_id)
 {
@@ -213,6 +223,7 @@ rte_eal_cpu_init(void)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_socket_count)
 unsigned int
 rte_socket_count(void)
 {
@@ -220,6 +231,7 @@ rte_socket_count(void)
 	return config->numa_node_count;
 }
 
+RTE_EXPORT_SYMBOL(rte_socket_id_by_idx)
 int
 rte_socket_id_by_idx(unsigned int idx)
 {
@@ -269,6 +281,7 @@ free_callback(struct lcore_callback *callback)
 	free(callback);
 }
 
+RTE_EXPORT_SYMBOL(rte_lcore_callback_register)
 void *
 rte_lcore_callback_register(const char *name, rte_lcore_init_cb init,
 	rte_lcore_uninit_cb uninit, void *arg)
@@ -319,6 +332,7 @@ rte_lcore_callback_register(const char *name, rte_lcore_init_cb init,
 	return callback;
 }
 
+RTE_EXPORT_SYMBOL(rte_lcore_callback_unregister)
 void
 rte_lcore_callback_unregister(void *handle)
 {
@@ -404,6 +418,7 @@ eal_lcore_non_eal_release(unsigned int lcore_id)
 	rte_rwlock_write_unlock(&lcore_lock);
 }
 
+RTE_EXPORT_SYMBOL(rte_lcore_iterate)
 int
 rte_lcore_iterate(rte_lcore_iterate_cb cb, void *arg)
 {
@@ -440,6 +455,7 @@ lcore_role_str(enum rte_lcore_role_t role)
 
 static rte_lcore_usage_cb lcore_usage_cb;
 
+RTE_EXPORT_SYMBOL(rte_lcore_register_usage_cb)
 void
 rte_lcore_register_usage_cb(rte_lcore_usage_cb cb)
 {
@@ -486,6 +502,7 @@ lcore_dump_cb(unsigned int lcore_id, void *arg)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_lcore_dump)
 void
 rte_lcore_dump(FILE *f)
 {
diff --git a/lib/eal/common/eal_common_lcore_var.c b/lib/eal/common/eal_common_lcore_var.c
index a1b2458839..9bd5dbc9e5 100644
--- a/lib/eal/common/eal_common_lcore_var.c
+++ b/lib/eal/common/eal_common_lcore_var.c
@@ -75,6 +75,7 @@ lcore_var_alloc(size_t size, size_t align)
 	return handle;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_lcore_var_alloc, 24.11)
 void *
 rte_lcore_var_alloc(size_t size, size_t align)
 {
diff --git a/lib/eal/common/eal_common_mcfg.c b/lib/eal/common/eal_common_mcfg.c
index dabb80eaf5..1cc0faaa9c 100644
--- a/lib/eal/common/eal_common_mcfg.c
+++ b/lib/eal/common/eal_common_mcfg.c
@@ -69,120 +69,140 @@ eal_mcfg_update_from_internal(void)
 	mcfg->version = RTE_VERSION;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_mcfg_mem_get_lock)
 rte_rwlock_t *
 rte_mcfg_mem_get_lock(void)
 {
 	return &rte_eal_get_configuration()->mem_config->memory_hotplug_lock;
 }
 
+RTE_EXPORT_SYMBOL(rte_mcfg_mem_read_lock)
 void
 rte_mcfg_mem_read_lock(void)
 {
 	rte_rwlock_read_lock(rte_mcfg_mem_get_lock());
 }
 
+RTE_EXPORT_SYMBOL(rte_mcfg_mem_read_unlock)
 void
 rte_mcfg_mem_read_unlock(void)
 {
 	rte_rwlock_read_unlock(rte_mcfg_mem_get_lock());
 }
 
+RTE_EXPORT_SYMBOL(rte_mcfg_mem_write_lock)
 void
 rte_mcfg_mem_write_lock(void)
 {
 	rte_rwlock_write_lock(rte_mcfg_mem_get_lock());
 }
 
+RTE_EXPORT_SYMBOL(rte_mcfg_mem_write_unlock)
 void
 rte_mcfg_mem_write_unlock(void)
 {
 	rte_rwlock_write_unlock(rte_mcfg_mem_get_lock());
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_mcfg_tailq_get_lock)
 rte_rwlock_t *
 rte_mcfg_tailq_get_lock(void)
 {
 	return &rte_eal_get_configuration()->mem_config->qlock;
 }
 
+RTE_EXPORT_SYMBOL(rte_mcfg_tailq_read_lock)
 void
 rte_mcfg_tailq_read_lock(void)
 {
 	rte_rwlock_read_lock(rte_mcfg_tailq_get_lock());
 }
 
+RTE_EXPORT_SYMBOL(rte_mcfg_tailq_read_unlock)
 void
 rte_mcfg_tailq_read_unlock(void)
 {
 	rte_rwlock_read_unlock(rte_mcfg_tailq_get_lock());
 }
 
+RTE_EXPORT_SYMBOL(rte_mcfg_tailq_write_lock)
 void
 rte_mcfg_tailq_write_lock(void)
 {
 	rte_rwlock_write_lock(rte_mcfg_tailq_get_lock());
 }
 
+RTE_EXPORT_SYMBOL(rte_mcfg_tailq_write_unlock)
 void
 rte_mcfg_tailq_write_unlock(void)
 {
 	rte_rwlock_write_unlock(rte_mcfg_tailq_get_lock());
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_mcfg_mempool_get_lock)
 rte_rwlock_t *
 rte_mcfg_mempool_get_lock(void)
 {
 	return &rte_eal_get_configuration()->mem_config->mplock;
 }
 
+RTE_EXPORT_SYMBOL(rte_mcfg_mempool_read_lock)
 void
 rte_mcfg_mempool_read_lock(void)
 {
 	rte_rwlock_read_lock(rte_mcfg_mempool_get_lock());
 }
 
+RTE_EXPORT_SYMBOL(rte_mcfg_mempool_read_unlock)
 void
 rte_mcfg_mempool_read_unlock(void)
 {
 	rte_rwlock_read_unlock(rte_mcfg_mempool_get_lock());
 }
 
+RTE_EXPORT_SYMBOL(rte_mcfg_mempool_write_lock)
 void
 rte_mcfg_mempool_write_lock(void)
 {
 	rte_rwlock_write_lock(rte_mcfg_mempool_get_lock());
 }
 
+RTE_EXPORT_SYMBOL(rte_mcfg_mempool_write_unlock)
 void
 rte_mcfg_mempool_write_unlock(void)
 {
 	rte_rwlock_write_unlock(rte_mcfg_mempool_get_lock());
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_mcfg_timer_get_lock)
 rte_spinlock_t *
 rte_mcfg_timer_get_lock(void)
 {
 	return &rte_eal_get_configuration()->mem_config->tlock;
 }
 
+RTE_EXPORT_SYMBOL(rte_mcfg_timer_lock)
 void
 rte_mcfg_timer_lock(void)
 {
 	rte_spinlock_lock(rte_mcfg_timer_get_lock());
 }
 
+RTE_EXPORT_SYMBOL(rte_mcfg_timer_unlock)
 void
 rte_mcfg_timer_unlock(void)
 {
 	rte_spinlock_unlock(rte_mcfg_timer_get_lock());
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_mcfg_ethdev_get_lock)
 rte_spinlock_t *
 rte_mcfg_ethdev_get_lock(void)
 {
 	return &rte_eal_get_configuration()->mem_config->ethdev_lock;
 }
 
+RTE_EXPORT_SYMBOL(rte_mcfg_get_single_file_segments)
 bool
 rte_mcfg_get_single_file_segments(void)
 {
diff --git a/lib/eal/common/eal_common_memory.c b/lib/eal/common/eal_common_memory.c
index a185e0b580..95a26673c0 100644
--- a/lib/eal/common/eal_common_memory.c
+++ b/lib/eal/common/eal_common_memory.c
@@ -336,6 +336,7 @@ virt2memseg_list(const void *addr)
 	return msl;
 }
 
+RTE_EXPORT_SYMBOL(rte_mem_virt2memseg_list)
 struct rte_memseg_list *
 rte_mem_virt2memseg_list(const void *addr)
 {
@@ -373,6 +374,7 @@ find_virt_legacy(const struct rte_memseg_list *msl __rte_unused,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_mem_iova2virt)
 void *
 rte_mem_iova2virt(rte_iova_t iova)
 {
@@ -394,6 +396,7 @@ rte_mem_iova2virt(rte_iova_t iova)
 	return vi.virt;
 }
 
+RTE_EXPORT_SYMBOL(rte_mem_virt2memseg)
 struct rte_memseg *
 rte_mem_virt2memseg(const void *addr, const struct rte_memseg_list *msl)
 {
@@ -415,6 +418,7 @@ physmem_size(const struct rte_memseg_list *msl, void *arg)
 }
 
 /* get the total size of memory */
+RTE_EXPORT_SYMBOL(rte_eal_get_physmem_size)
 uint64_t
 rte_eal_get_physmem_size(void)
 {
@@ -463,6 +467,7 @@ dump_memseg(const struct rte_memseg_list *msl, const struct rte_memseg *ms,
  * Defining here because declared in rte_memory.h, but the actual implementation
  * is in eal_common_memalloc.c, like all other memalloc internals.
  */
+RTE_EXPORT_SYMBOL(rte_mem_event_callback_register)
 int
 rte_mem_event_callback_register(const char *name, rte_mem_event_callback_t clb,
 		void *arg)
@@ -479,6 +484,7 @@ rte_mem_event_callback_register(const char *name, rte_mem_event_callback_t clb,
 	return eal_memalloc_mem_event_callback_register(name, clb, arg);
 }
 
+RTE_EXPORT_SYMBOL(rte_mem_event_callback_unregister)
 int
 rte_mem_event_callback_unregister(const char *name, void *arg)
 {
@@ -494,6 +500,7 @@ rte_mem_event_callback_unregister(const char *name, void *arg)
 	return eal_memalloc_mem_event_callback_unregister(name, arg);
 }
 
+RTE_EXPORT_SYMBOL(rte_mem_alloc_validator_register)
 int
 rte_mem_alloc_validator_register(const char *name,
 		rte_mem_alloc_validator_t clb, int socket_id, size_t limit)
@@ -511,6 +518,7 @@ rte_mem_alloc_validator_register(const char *name,
 			limit);
 }
 
+RTE_EXPORT_SYMBOL(rte_mem_alloc_validator_unregister)
 int
 rte_mem_alloc_validator_unregister(const char *name, int socket_id)
 {
@@ -527,6 +535,7 @@ rte_mem_alloc_validator_unregister(const char *name, int socket_id)
 }
 
 /* Dump the physical memory layout on console */
+RTE_EXPORT_SYMBOL(rte_dump_physmem_layout)
 void
 rte_dump_physmem_layout(FILE *f)
 {
@@ -598,12 +607,14 @@ check_dma_mask(uint8_t maskbits, bool thread_unsafe)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_mem_check_dma_mask)
 int
 rte_mem_check_dma_mask(uint8_t maskbits)
 {
 	return check_dma_mask(maskbits, false);
 }
 
+RTE_EXPORT_SYMBOL(rte_mem_check_dma_mask_thread_unsafe)
 int
 rte_mem_check_dma_mask_thread_unsafe(uint8_t maskbits)
 {
@@ -617,6 +628,7 @@ rte_mem_check_dma_mask_thread_unsafe(uint8_t maskbits)
  * initialization. PMDs should use rte_mem_check_dma_mask if addressing
  * limitations by the device.
  */
+RTE_EXPORT_SYMBOL(rte_mem_set_dma_mask)
 void
 rte_mem_set_dma_mask(uint8_t maskbits)
 {
@@ -627,12 +639,14 @@ rte_mem_set_dma_mask(uint8_t maskbits)
 }
 
 /* return the number of memory channels */
+RTE_EXPORT_SYMBOL(rte_memory_get_nchannel)
 unsigned rte_memory_get_nchannel(void)
 {
 	return rte_eal_get_configuration()->mem_config->nchannel;
 }
 
 /* return the number of memory rank */
+RTE_EXPORT_SYMBOL(rte_memory_get_nrank)
 unsigned rte_memory_get_nrank(void)
 {
 	return rte_eal_get_configuration()->mem_config->nrank;
@@ -656,6 +670,7 @@ rte_eal_memdevice_init(void)
 }
 
 /* Lock page in physical memory and prevent from swapping. */
+RTE_EXPORT_SYMBOL(rte_mem_lock_page)
 int
 rte_mem_lock_page(const void *virt)
 {
@@ -665,6 +680,7 @@ rte_mem_lock_page(const void *virt)
 	return rte_mem_lock((void *)aligned, page_size);
 }
 
+RTE_EXPORT_SYMBOL(rte_memseg_contig_walk_thread_unsafe)
 int
 rte_memseg_contig_walk_thread_unsafe(rte_memseg_contig_walk_t func, void *arg)
 {
@@ -704,6 +720,7 @@ rte_memseg_contig_walk_thread_unsafe(rte_memseg_contig_walk_t func, void *arg)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_memseg_contig_walk)
 int
 rte_memseg_contig_walk(rte_memseg_contig_walk_t func, void *arg)
 {
@@ -717,6 +734,7 @@ rte_memseg_contig_walk(rte_memseg_contig_walk_t func, void *arg)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_memseg_walk_thread_unsafe)
 int
 rte_memseg_walk_thread_unsafe(rte_memseg_walk_t func, void *arg)
 {
@@ -745,6 +763,7 @@ rte_memseg_walk_thread_unsafe(rte_memseg_walk_t func, void *arg)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_memseg_walk)
 int
 rte_memseg_walk(rte_memseg_walk_t func, void *arg)
 {
@@ -758,6 +777,7 @@ rte_memseg_walk(rte_memseg_walk_t func, void *arg)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_memseg_list_walk_thread_unsafe)
 int
 rte_memseg_list_walk_thread_unsafe(rte_memseg_list_walk_t func, void *arg)
 {
@@ -777,6 +797,7 @@ rte_memseg_list_walk_thread_unsafe(rte_memseg_list_walk_t func, void *arg)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_memseg_list_walk)
 int
 rte_memseg_list_walk(rte_memseg_list_walk_t func, void *arg)
 {
@@ -790,6 +811,7 @@ rte_memseg_list_walk(rte_memseg_list_walk_t func, void *arg)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_memseg_get_fd_thread_unsafe)
 int
 rte_memseg_get_fd_thread_unsafe(const struct rte_memseg *ms)
 {
@@ -832,6 +854,7 @@ rte_memseg_get_fd_thread_unsafe(const struct rte_memseg *ms)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_memseg_get_fd)
 int
 rte_memseg_get_fd(const struct rte_memseg *ms)
 {
@@ -844,6 +867,7 @@ rte_memseg_get_fd(const struct rte_memseg *ms)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_memseg_get_fd_offset_thread_unsafe)
 int
 rte_memseg_get_fd_offset_thread_unsafe(const struct rte_memseg *ms,
 		size_t *offset)
@@ -887,6 +911,7 @@ rte_memseg_get_fd_offset_thread_unsafe(const struct rte_memseg *ms,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_memseg_get_fd_offset)
 int
 rte_memseg_get_fd_offset(const struct rte_memseg *ms, size_t *offset)
 {
@@ -899,6 +924,7 @@ rte_memseg_get_fd_offset(const struct rte_memseg *ms, size_t *offset)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_extmem_register)
 int
 rte_extmem_register(void *va_addr, size_t len, rte_iova_t iova_addrs[],
 		unsigned int n_pages, size_t page_sz)
@@ -948,6 +974,7 @@ rte_extmem_register(void *va_addr, size_t len, rte_iova_t iova_addrs[],
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_extmem_unregister)
 int
 rte_extmem_unregister(void *va_addr, size_t len)
 {
@@ -1003,12 +1030,14 @@ sync_memory(void *va_addr, size_t len, bool attach)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_extmem_attach)
 int
 rte_extmem_attach(void *va_addr, size_t len)
 {
 	return sync_memory(va_addr, len, true);
 }
 
+RTE_EXPORT_SYMBOL(rte_extmem_detach)
 int
 rte_extmem_detach(void *va_addr, size_t len)
 {
diff --git a/lib/eal/common/eal_common_memzone.c b/lib/eal/common/eal_common_memzone.c
index e7002f8447..acaa0a45fc 100644
--- a/lib/eal/common/eal_common_memzone.c
+++ b/lib/eal/common/eal_common_memzone.c
@@ -25,6 +25,7 @@
 /* Default count used until rte_memzone_max_set() is called */
 #define DEFAULT_MAX_MEMZONE_COUNT 2560
 
+RTE_EXPORT_SYMBOL(rte_memzone_max_set)
 int
 rte_memzone_max_set(size_t max)
 {
@@ -46,6 +47,7 @@ rte_memzone_max_set(size_t max)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_memzone_max_get)
 size_t
 rte_memzone_max_get(void)
 {
@@ -263,6 +265,7 @@ rte_memzone_reserve_thread_safe(const char *name, size_t len, int socket_id,
  * specified alignment and boundary). If the allocation cannot be done,
  * return NULL.
  */
+RTE_EXPORT_SYMBOL(rte_memzone_reserve_bounded)
 const struct rte_memzone *
 rte_memzone_reserve_bounded(const char *name, size_t len, int socket_id,
 			    unsigned flags, unsigned align, unsigned bound)
@@ -275,6 +278,7 @@ rte_memzone_reserve_bounded(const char *name, size_t len, int socket_id,
  * Return a pointer to a correctly filled memzone descriptor (with a
  * specified alignment). If the allocation cannot be done, return NULL.
  */
+RTE_EXPORT_SYMBOL(rte_memzone_reserve_aligned)
 const struct rte_memzone *
 rte_memzone_reserve_aligned(const char *name, size_t len, int socket_id,
 			    unsigned flags, unsigned align)
@@ -287,6 +291,7 @@ rte_memzone_reserve_aligned(const char *name, size_t len, int socket_id,
  * Return a pointer to a correctly filled memzone descriptor. If the
  * allocation cannot be done, return NULL.
  */
+RTE_EXPORT_SYMBOL(rte_memzone_reserve)
 const struct rte_memzone *
 rte_memzone_reserve(const char *name, size_t len, int socket_id,
 		    unsigned flags)
@@ -295,6 +300,7 @@ rte_memzone_reserve(const char *name, size_t len, int socket_id,
 					       flags, RTE_CACHE_LINE_SIZE, 0);
 }
 
+RTE_EXPORT_SYMBOL(rte_memzone_free)
 int
 rte_memzone_free(const struct rte_memzone *mz)
 {
@@ -341,6 +347,7 @@ rte_memzone_free(const struct rte_memzone *mz)
 /*
  * Lookup for the memzone identified by the given name
  */
+RTE_EXPORT_SYMBOL(rte_memzone_lookup)
 const struct rte_memzone *
 rte_memzone_lookup(const char *name)
 {
@@ -417,6 +424,7 @@ dump_memzone(const struct rte_memzone *mz, void *arg)
 }
 
 /* Dump all reserved memory zones on console */
+RTE_EXPORT_SYMBOL(rte_memzone_dump)
 void
 rte_memzone_dump(FILE *f)
 {
@@ -458,6 +466,7 @@ rte_eal_memzone_init(void)
 }
 
 /* Walk all reserved memory zones */
+RTE_EXPORT_SYMBOL(rte_memzone_walk)
 void rte_memzone_walk(void (*func)(const struct rte_memzone *, void *),
 		      void *arg)
 {
diff --git a/lib/eal/common/eal_common_options.c b/lib/eal/common/eal_common_options.c
index 79db9a47dd..6b660decf7 100644
--- a/lib/eal/common/eal_common_options.c
+++ b/lib/eal/common/eal_common_options.c
@@ -164,6 +164,7 @@ eal_get_application_usage_hook(void)
 }
 
 /* Set a per-application usage message */
+RTE_EXPORT_SYMBOL(rte_set_application_usage_hook)
 rte_usage_hook_t
 rte_set_application_usage_hook(rte_usage_hook_t usage_func)
 {
@@ -760,6 +761,7 @@ check_core_list(int *lcores, unsigned int count)
 	return -1;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eal_parse_coremask)
 int
 rte_eal_parse_coremask(const char *coremask, int *cores)
 {
@@ -2171,6 +2173,7 @@ eal_check_common_options(struct internal_config *internal_cfg)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vect_get_max_simd_bitwidth)
 uint16_t
 rte_vect_get_max_simd_bitwidth(void)
 {
@@ -2179,6 +2182,7 @@ rte_vect_get_max_simd_bitwidth(void)
 	return internal_conf->max_simd_bitwidth.bitwidth;
 }
 
+RTE_EXPORT_SYMBOL(rte_vect_set_max_simd_bitwidth)
 int
 rte_vect_set_max_simd_bitwidth(uint16_t bitwidth)
 {
diff --git a/lib/eal/common/eal_common_proc.c b/lib/eal/common/eal_common_proc.c
index 201973c5db..a9757459a2 100644
--- a/lib/eal/common/eal_common_proc.c
+++ b/lib/eal/common/eal_common_proc.c
@@ -142,6 +142,7 @@ create_socket_path(const char *name, char *buf, int len)
 		strlcpy(buf, prefix, len);
 }
 
+RTE_EXPORT_SYMBOL(rte_eal_primary_proc_alive)
 int
 rte_eal_primary_proc_alive(const char *config_file_path)
 {
@@ -197,6 +198,7 @@ validate_action_name(const char *name)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_mp_action_register)
 int
 rte_mp_action_register(const char *name, rte_mp_t action)
 {
@@ -233,6 +235,7 @@ rte_mp_action_register(const char *name, rte_mp_t action)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_mp_action_unregister)
 void
 rte_mp_action_unregister(const char *name)
 {
@@ -836,6 +839,7 @@ check_input(const struct rte_mp_msg *msg)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_mp_sendmsg)
 int
 rte_mp_sendmsg(struct rte_mp_msg *msg)
 {
@@ -989,6 +993,7 @@ mp_request_sync(const char *dst, struct rte_mp_msg *req,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_mp_request_sync)
 int
 rte_mp_request_sync(struct rte_mp_msg *req, struct rte_mp_reply *reply,
 		const struct timespec *ts)
@@ -1086,6 +1091,7 @@ rte_mp_request_sync(struct rte_mp_msg *req, struct rte_mp_reply *reply,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_mp_request_async)
 int
 rte_mp_request_async(struct rte_mp_msg *req, const struct timespec *ts,
 		rte_mp_async_reply_t clb)
@@ -1238,6 +1244,7 @@ rte_mp_request_async(struct rte_mp_msg *req, const struct timespec *ts,
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_mp_reply)
 int
 rte_mp_reply(struct rte_mp_msg *msg, const char *peer)
 {
@@ -1290,6 +1297,7 @@ set_mp_status(enum mp_status status)
 	return rte_atomic_load_explicit(&mcfg->mp_status, rte_memory_order_relaxed) == desired;
 }
 
+RTE_EXPORT_SYMBOL(rte_mp_disable)
 bool
 rte_mp_disable(void)
 {
diff --git a/lib/eal/common/eal_common_string_fns.c b/lib/eal/common/eal_common_string_fns.c
index 9ca2045b18..dea55e4045 100644
--- a/lib/eal/common/eal_common_string_fns.c
+++ b/lib/eal/common/eal_common_string_fns.c
@@ -11,6 +11,7 @@
 #include <rte_errno.h>
 
 /* split string into tokens */
+RTE_EXPORT_SYMBOL(rte_strsplit)
 int
 rte_strsplit(char *string, int stringlen,
 	     char **tokens, int maxtokens, char delim)
@@ -45,6 +46,7 @@ rte_strsplit(char *string, int stringlen,
  * Return negative value and NUL-terminate if dst is too short,
  * Otherwise return number of bytes copied.
  */
+RTE_EXPORT_SYMBOL(rte_strscpy)
 ssize_t
 rte_strscpy(char *dst, const char *src, size_t dsize)
 {
@@ -67,6 +69,7 @@ rte_strscpy(char *dst, const char *src, size_t dsize)
 	return -rte_errno;
 }
 
+RTE_EXPORT_SYMBOL(rte_str_to_size)
 uint64_t
 rte_str_to_size(const char *str)
 {
diff --git a/lib/eal/common/eal_common_tailqs.c b/lib/eal/common/eal_common_tailqs.c
index 56bb2bd91c..941ffd9596 100644
--- a/lib/eal/common/eal_common_tailqs.c
+++ b/lib/eal/common/eal_common_tailqs.c
@@ -22,6 +22,7 @@ static struct rte_tailq_elem_head rte_tailq_elem_head =
 /* number of tailqs registered, -1 before call to rte_eal_tailqs_init */
 static int rte_tailqs_count = -1;
 
+RTE_EXPORT_SYMBOL(rte_eal_tailq_lookup)
 struct rte_tailq_head *
 rte_eal_tailq_lookup(const char *name)
 {
@@ -40,6 +41,7 @@ rte_eal_tailq_lookup(const char *name)
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_dump_tailq)
 void
 rte_dump_tailq(FILE *f)
 {
@@ -105,6 +107,7 @@ rte_eal_tailq_update(struct rte_tailq_elem *t)
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_eal_tailq_register)
 int
 rte_eal_tailq_register(struct rte_tailq_elem *t)
 {
diff --git a/lib/eal/common/eal_common_thread.c b/lib/eal/common/eal_common_thread.c
index a53bc639ae..427967611d 100644
--- a/lib/eal/common/eal_common_thread.c
+++ b/lib/eal/common/eal_common_thread.c
@@ -22,12 +22,15 @@
 #include "eal_thread.h"
 #include "eal_trace.h"
 
+RTE_EXPORT_SYMBOL(per_lcore__lcore_id)
 RTE_DEFINE_PER_LCORE(unsigned int, _lcore_id) = LCORE_ID_ANY;
+RTE_EXPORT_SYMBOL(per_lcore__thread_id)
 RTE_DEFINE_PER_LCORE(int, _thread_id) = -1;
 static RTE_DEFINE_PER_LCORE(unsigned int, _socket_id) =
 	(unsigned int)SOCKET_ID_ANY;
 static RTE_DEFINE_PER_LCORE(rte_cpuset_t, _cpuset);
 
+RTE_EXPORT_SYMBOL(rte_socket_id)
 unsigned rte_socket_id(void)
 {
 	return RTE_PER_LCORE(_socket_id);
@@ -82,6 +85,7 @@ thread_update_affinity(rte_cpuset_t *cpusetp)
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_set_affinity)
 int
 rte_thread_set_affinity(rte_cpuset_t *cpusetp)
 {
@@ -94,6 +98,7 @@ rte_thread_set_affinity(rte_cpuset_t *cpusetp)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_get_affinity)
 void
 rte_thread_get_affinity(rte_cpuset_t *cpusetp)
 {
@@ -282,6 +287,7 @@ static uint32_t control_thread_start(void *arg)
 	return start_routine(start_arg);
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_create_control)
 int
 rte_thread_create_control(rte_thread_t *thread, const char *name,
 		rte_thread_func start_routine, void *arg)
@@ -341,6 +347,7 @@ add_internal_prefix(char *prefixed_name, const char *name, size_t size)
 	strlcpy(prefixed_name + prefixlen, name, size - prefixlen);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_thread_create_internal_control)
 int
 rte_thread_create_internal_control(rte_thread_t *id, const char *name,
 		rte_thread_func func, void *arg)
@@ -351,6 +358,7 @@ rte_thread_create_internal_control(rte_thread_t *id, const char *name,
 	return rte_thread_create_control(id, prefixed_name, func, arg);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_thread_set_prefixed_name)
 void
 rte_thread_set_prefixed_name(rte_thread_t id, const char *name)
 {
@@ -360,6 +368,7 @@ rte_thread_set_prefixed_name(rte_thread_t id, const char *name)
 	rte_thread_set_name(id, prefixed_name);
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_register)
 int
 rte_thread_register(void)
 {
@@ -392,6 +401,7 @@ rte_thread_register(void)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_unregister)
 void
 rte_thread_unregister(void)
 {
@@ -405,6 +415,7 @@ rte_thread_unregister(void)
 			lcore_id);
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_attr_init)
 int
 rte_thread_attr_init(rte_thread_attr_t *attr)
 {
@@ -417,6 +428,7 @@ rte_thread_attr_init(rte_thread_attr_t *attr)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_attr_set_priority)
 int
 rte_thread_attr_set_priority(rte_thread_attr_t *thread_attr,
 		enum rte_thread_priority priority)
@@ -429,6 +441,7 @@ rte_thread_attr_set_priority(rte_thread_attr_t *thread_attr,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_attr_set_affinity)
 int
 rte_thread_attr_set_affinity(rte_thread_attr_t *thread_attr,
 		rte_cpuset_t *cpuset)
@@ -444,6 +457,7 @@ rte_thread_attr_set_affinity(rte_thread_attr_t *thread_attr,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_attr_get_affinity)
 int
 rte_thread_attr_get_affinity(rte_thread_attr_t *thread_attr,
 		rte_cpuset_t *cpuset)
diff --git a/lib/eal/common/eal_common_timer.c b/lib/eal/common/eal_common_timer.c
index e00be0a5c8..92a426cc03 100644
--- a/lib/eal/common/eal_common_timer.c
+++ b/lib/eal/common/eal_common_timer.c
@@ -18,8 +18,10 @@
 static uint64_t eal_tsc_resolution_hz;
 
 /* Pointer to user delay function */
+RTE_EXPORT_SYMBOL(rte_delay_us)
 void (*rte_delay_us)(unsigned int) = NULL;
 
+RTE_EXPORT_SYMBOL(rte_delay_us_block)
 void
 rte_delay_us_block(unsigned int us)
 {
@@ -29,6 +31,7 @@ rte_delay_us_block(unsigned int us)
 		rte_pause();
 }
 
+RTE_EXPORT_SYMBOL(rte_get_tsc_hz)
 uint64_t
 rte_get_tsc_hz(void)
 {
@@ -75,6 +78,7 @@ set_tsc_freq(void)
 	mcfg->tsc_hz = freq;
 }
 
+RTE_EXPORT_SYMBOL(rte_delay_us_callback_register)
 void rte_delay_us_callback_register(void (*userfunc)(unsigned int))
 {
 	rte_delay_us = userfunc;
diff --git a/lib/eal/common/eal_common_trace.c b/lib/eal/common/eal_common_trace.c
index 918f49bf4f..09ba4ef24a 100644
--- a/lib/eal/common/eal_common_trace.c
+++ b/lib/eal/common/eal_common_trace.c
@@ -16,7 +16,9 @@
 
 #include "eal_trace.h"
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(per_lcore_trace_point_sz, 20.05)
 RTE_DEFINE_PER_LCORE(volatile int, trace_point_sz);
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(per_lcore_trace_mem, 20.05)
 RTE_DEFINE_PER_LCORE(void *, trace_mem);
 static RTE_DEFINE_PER_LCORE(char *, ctf_field);
 
@@ -94,6 +96,7 @@ eal_trace_fini(void)
 	eal_trace_args_free();
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_trace_is_enabled, 20.05)
 bool
 rte_trace_is_enabled(void)
 {
@@ -111,6 +114,7 @@ trace_mode_set(rte_trace_point_t *t, enum rte_trace_mode mode)
 			rte_memory_order_release);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_trace_mode_set, 20.05)
 void
 rte_trace_mode_set(enum rte_trace_mode mode)
 {
@@ -122,6 +126,7 @@ rte_trace_mode_set(enum rte_trace_mode mode)
 	trace.mode = mode;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_trace_mode_get, 20.05)
 enum
 rte_trace_mode rte_trace_mode_get(void)
 {
@@ -134,6 +139,7 @@ trace_point_is_invalid(rte_trace_point_t *t)
 	return (t == NULL) || (trace_id_get(t) >= trace.nb_trace_points);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_trace_point_is_enabled, 20.05)
 bool
 rte_trace_point_is_enabled(rte_trace_point_t *t)
 {
@@ -146,6 +152,7 @@ rte_trace_point_is_enabled(rte_trace_point_t *t)
 	return (val & __RTE_TRACE_FIELD_ENABLE_MASK) != 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_trace_point_enable, 20.05)
 int
 rte_trace_point_enable(rte_trace_point_t *t)
 {
@@ -161,6 +168,7 @@ rte_trace_point_enable(rte_trace_point_t *t)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_trace_point_disable, 20.05)
 int
 rte_trace_point_disable(rte_trace_point_t *t)
 {
@@ -176,6 +184,7 @@ rte_trace_point_disable(rte_trace_point_t *t)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_trace_pattern, 20.05)
 int
 rte_trace_pattern(const char *pattern, bool enable)
 {
@@ -200,6 +209,7 @@ rte_trace_pattern(const char *pattern, bool enable)
 	return rc | found;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_trace_regexp, 20.05)
 int
 rte_trace_regexp(const char *regex, bool enable)
 {
@@ -229,6 +239,7 @@ rte_trace_regexp(const char *regex, bool enable)
 	return rc | found;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_trace_point_lookup, 20.05)
 rte_trace_point_t *
 rte_trace_point_lookup(const char *name)
 {
@@ -279,6 +290,7 @@ trace_lcore_mem_dump(FILE *f)
 	rte_spinlock_unlock(&trace->lock);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_trace_dump, 20.05)
 void
 rte_trace_dump(FILE *f)
 {
@@ -314,6 +326,7 @@ thread_get_name(rte_thread_t id, char *name, size_t len)
 	RTE_SET_USED(len);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_trace_mem_per_thread_alloc, 20.05)
 void
 __rte_trace_mem_per_thread_alloc(void)
 {
@@ -435,6 +448,7 @@ trace_mem_free(void)
 	rte_spinlock_unlock(&trace->lock);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_trace_point_emit_field, 20.05)
 void
 __rte_trace_point_emit_field(size_t sz, const char *in, const char *datatype)
 {
@@ -461,6 +475,7 @@ __rte_trace_point_emit_field(size_t sz, const char *in, const char *datatype)
 	RTE_PER_LCORE(ctf_field) = field;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_trace_point_register, 20.05)
 int
 __rte_trace_point_register(rte_trace_point_t *handle, const char *name,
 		void (*register_fn)(void))
diff --git a/lib/eal/common/eal_common_trace_ctf.c b/lib/eal/common/eal_common_trace_ctf.c
index 04c4f71462..dec416b494 100644
--- a/lib/eal/common/eal_common_trace_ctf.c
+++ b/lib/eal/common/eal_common_trace_ctf.c
@@ -351,6 +351,7 @@ meta_fixup(struct trace *trace, char *meta)
 	meta_fix_freq_offset(trace, meta);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_trace_metadata_dump, 20.05)
 int
 rte_trace_metadata_dump(FILE *f)
 {
diff --git a/lib/eal/common/eal_common_trace_points.c b/lib/eal/common/eal_common_trace_points.c
index 0f1240ea3a..800c5e8c46 100644
--- a/lib/eal/common/eal_common_trace_points.c
+++ b/lib/eal/common/eal_common_trace_points.c
@@ -8,40 +8,58 @@
 
 #include <eal_trace_internal.h>
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_eal_trace_generic_void, 20.05)
 RTE_TRACE_POINT_REGISTER(rte_eal_trace_generic_void,
 	lib.eal.generic.void)
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_eal_trace_generic_u64, 20.05)
 RTE_TRACE_POINT_REGISTER(rte_eal_trace_generic_u64,
 	lib.eal.generic.u64)
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_eal_trace_generic_u32, 20.05)
 RTE_TRACE_POINT_REGISTER(rte_eal_trace_generic_u32,
 	lib.eal.generic.u32)
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_eal_trace_generic_u16, 20.05)
 RTE_TRACE_POINT_REGISTER(rte_eal_trace_generic_u16,
 	lib.eal.generic.u16)
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_eal_trace_generic_u8, 20.05)
 RTE_TRACE_POINT_REGISTER(rte_eal_trace_generic_u8,
 	lib.eal.generic.u8)
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_eal_trace_generic_i64, 20.05)
 RTE_TRACE_POINT_REGISTER(rte_eal_trace_generic_i64,
 	lib.eal.generic.i64)
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_eal_trace_generic_i32, 20.05)
 RTE_TRACE_POINT_REGISTER(rte_eal_trace_generic_i32,
 	lib.eal.generic.i32)
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_eal_trace_generic_i16, 20.05)
 RTE_TRACE_POINT_REGISTER(rte_eal_trace_generic_i16,
 	lib.eal.generic.i16)
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_eal_trace_generic_i8, 20.05)
 RTE_TRACE_POINT_REGISTER(rte_eal_trace_generic_i8,
 	lib.eal.generic.i8)
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_eal_trace_generic_int, 20.05)
 RTE_TRACE_POINT_REGISTER(rte_eal_trace_generic_int,
 	lib.eal.generic.int)
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_eal_trace_generic_long, 20.05)
 RTE_TRACE_POINT_REGISTER(rte_eal_trace_generic_long,
 	lib.eal.generic.long)
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_eal_trace_generic_float, 20.05)
 RTE_TRACE_POINT_REGISTER(rte_eal_trace_generic_float,
 	lib.eal.generic.float)
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_eal_trace_generic_double, 20.05)
 RTE_TRACE_POINT_REGISTER(rte_eal_trace_generic_double,
 	lib.eal.generic.double)
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_eal_trace_generic_ptr, 20.05)
 RTE_TRACE_POINT_REGISTER(rte_eal_trace_generic_ptr,
 	lib.eal.generic.ptr)
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_eal_trace_generic_str, 20.05)
 RTE_TRACE_POINT_REGISTER(rte_eal_trace_generic_str,
 	lib.eal.generic.string)
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_eal_trace_generic_size_t, 20.11)
 RTE_TRACE_POINT_REGISTER(rte_eal_trace_generic_size_t,
 	lib.eal.generic.size_t)
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_eal_trace_generic_func, 20.05)
 RTE_TRACE_POINT_REGISTER(rte_eal_trace_generic_func,
 	lib.eal.generic.func)
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_eal_trace_generic_blob, 23.03)
 RTE_TRACE_POINT_REGISTER(rte_eal_trace_generic_blob,
 	lib.eal.generic.blob)
 
diff --git a/lib/eal/common/eal_common_trace_utils.c b/lib/eal/common/eal_common_trace_utils.c
index 7282715b11..0c71070290 100644
--- a/lib/eal/common/eal_common_trace_utils.c
+++ b/lib/eal/common/eal_common_trace_utils.c
@@ -409,6 +409,7 @@ trace_mem_save(struct trace *trace, struct __rte_trace_header *hdr,
 	return rc;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_trace_save, 20.05)
 int
 rte_trace_save(void)
 {
diff --git a/lib/eal/common/eal_common_uuid.c b/lib/eal/common/eal_common_uuid.c
index 0a80bfbb38..b89a8c0377 100644
--- a/lib/eal/common/eal_common_uuid.c
+++ b/lib/eal/common/eal_common_uuid.c
@@ -77,6 +77,7 @@ static void uuid_unpack(const rte_uuid_t in, struct uuid *uu)
 	memcpy(uu->node, ptr, 6);
 }
 
+RTE_EXPORT_SYMBOL(rte_uuid_is_null)
 bool rte_uuid_is_null(const rte_uuid_t uu)
 {
 	const uint8_t *cp = uu;
@@ -91,6 +92,7 @@ bool rte_uuid_is_null(const rte_uuid_t uu)
 /*
  * rte_uuid_compare() - compare two UUIDs.
  */
+RTE_EXPORT_SYMBOL(rte_uuid_compare)
 int rte_uuid_compare(const rte_uuid_t uu1, const rte_uuid_t uu2)
 {
 	struct uuid	uuid1, uuid2;
@@ -110,6 +112,7 @@ int rte_uuid_compare(const rte_uuid_t uu1, const rte_uuid_t uu2)
 	return memcmp(uuid1.node, uuid2.node, 6);
 }
 
+RTE_EXPORT_SYMBOL(rte_uuid_parse)
 int rte_uuid_parse(const char *in, rte_uuid_t uu)
 {
 	struct uuid	uuid;
@@ -152,6 +155,7 @@ int rte_uuid_parse(const char *in, rte_uuid_t uu)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_uuid_unparse)
 void rte_uuid_unparse(const rte_uuid_t uu, char *out, size_t len)
 {
 	struct uuid uuid;
diff --git a/lib/eal/common/rte_bitset.c b/lib/eal/common/rte_bitset.c
index e25008519e..183b793635 100644
--- a/lib/eal/common/rte_bitset.c
+++ b/lib/eal/common/rte_bitset.c
@@ -9,6 +9,7 @@
 
 #include "rte_bitset.h"
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_bitset_to_str, 24.11)
 ssize_t
 rte_bitset_to_str(const uint64_t *bitset, size_t num_bits, char *buf, size_t capacity)
 {
diff --git a/lib/eal/common/rte_keepalive.c b/lib/eal/common/rte_keepalive.c
index 473d30dd13..2ef333731b 100644
--- a/lib/eal/common/rte_keepalive.c
+++ b/lib/eal/common/rte_keepalive.c
@@ -63,6 +63,7 @@ print_trace(const char *msg, struct rte_keepalive *keepcfg, int idx_core)
 	      );
 }
 
+RTE_EXPORT_SYMBOL(rte_keepalive_dispatch_pings)
 void
 rte_keepalive_dispatch_pings(__rte_unused void *ptr_timer,
 	void *ptr_data)
@@ -117,6 +118,7 @@ rte_keepalive_dispatch_pings(__rte_unused void *ptr_timer,
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_keepalive_create)
 struct rte_keepalive *
 rte_keepalive_create(rte_keepalive_failure_callback_t callback,
 	void *data)
@@ -135,6 +137,7 @@ rte_keepalive_create(rte_keepalive_failure_callback_t callback,
 	return keepcfg;
 }
 
+RTE_EXPORT_SYMBOL(rte_keepalive_register_relay_callback)
 void rte_keepalive_register_relay_callback(struct rte_keepalive *keepcfg,
 	rte_keepalive_relay_callback_t callback,
 	void *data)
@@ -143,6 +146,7 @@ void rte_keepalive_register_relay_callback(struct rte_keepalive *keepcfg,
 	keepcfg->relay_callback_data = data;
 }
 
+RTE_EXPORT_SYMBOL(rte_keepalive_register_core)
 void
 rte_keepalive_register_core(struct rte_keepalive *keepcfg, const int id_core)
 {
@@ -152,12 +156,14 @@ rte_keepalive_register_core(struct rte_keepalive *keepcfg, const int id_core)
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_keepalive_mark_alive)
 void
 rte_keepalive_mark_alive(struct rte_keepalive *keepcfg)
 {
 	keepcfg->live_data[rte_lcore_id()].core_state = RTE_KA_STATE_ALIVE;
 }
 
+RTE_EXPORT_SYMBOL(rte_keepalive_mark_sleep)
 void
 rte_keepalive_mark_sleep(struct rte_keepalive *keepcfg)
 {
diff --git a/lib/eal/common/rte_malloc.c b/lib/eal/common/rte_malloc.c
index 3eed4d4be6..7b40b8c211 100644
--- a/lib/eal/common/rte_malloc.c
+++ b/lib/eal/common/rte_malloc.c
@@ -38,6 +38,7 @@ mem_free(void *addr, const bool trace_ena)
 		EAL_LOG(ERR, "Error: Invalid memory");
 }
 
+RTE_EXPORT_SYMBOL(rte_free)
 void
 rte_free(void *addr)
 {
@@ -80,6 +81,7 @@ malloc_socket(const char *type, size_t size, unsigned int align,
 /*
  * Allocate memory on specified heap.
  */
+RTE_EXPORT_SYMBOL(rte_malloc_socket)
 void *
 rte_malloc_socket(const char *type, size_t size, unsigned int align,
 		int socket_arg)
@@ -96,6 +98,7 @@ eal_malloc_no_trace(const char *type, size_t size, unsigned int align)
 /*
  * Allocate memory on default heap.
  */
+RTE_EXPORT_SYMBOL(rte_malloc)
 void *
 rte_malloc(const char *type, size_t size, unsigned align)
 {
@@ -105,6 +108,7 @@ rte_malloc(const char *type, size_t size, unsigned align)
 /*
  * Allocate zero'd memory on specified heap.
  */
+RTE_EXPORT_SYMBOL(rte_zmalloc_socket)
 void *
 rte_zmalloc_socket(const char *type, size_t size, unsigned align, int socket)
 {
@@ -134,6 +138,7 @@ rte_zmalloc_socket(const char *type, size_t size, unsigned align, int socket)
 /*
  * Allocate zero'd memory on default heap.
  */
+RTE_EXPORT_SYMBOL(rte_zmalloc)
 void *
 rte_zmalloc(const char *type, size_t size, unsigned align)
 {
@@ -143,6 +148,7 @@ rte_zmalloc(const char *type, size_t size, unsigned align)
 /*
  * Allocate zero'd memory on specified heap.
  */
+RTE_EXPORT_SYMBOL(rte_calloc_socket)
 void *
 rte_calloc_socket(const char *type, size_t num, size_t size, unsigned align, int socket)
 {
@@ -152,6 +158,7 @@ rte_calloc_socket(const char *type, size_t num, size_t size, unsigned align, int
 /*
  * Allocate zero'd memory on default heap.
  */
+RTE_EXPORT_SYMBOL(rte_calloc)
 void *
 rte_calloc(const char *type, size_t num, size_t size, unsigned align)
 {
@@ -161,6 +168,7 @@ rte_calloc(const char *type, size_t num, size_t size, unsigned align)
 /*
  * Resize allocated memory on specified heap.
  */
+RTE_EXPORT_SYMBOL(rte_realloc_socket)
 void *
 rte_realloc_socket(void *ptr, size_t size, unsigned int align, int socket)
 {
@@ -212,12 +220,14 @@ rte_realloc_socket(void *ptr, size_t size, unsigned int align, int socket)
 /*
  * Resize allocated memory.
  */
+RTE_EXPORT_SYMBOL(rte_realloc)
 void *
 rte_realloc(void *ptr, size_t size, unsigned int align)
 {
 	return rte_realloc_socket(ptr, size, align, SOCKET_ID_ANY);
 }
 
+RTE_EXPORT_SYMBOL(rte_malloc_validate)
 int
 rte_malloc_validate(const void *ptr, size_t *size)
 {
@@ -232,6 +242,7 @@ rte_malloc_validate(const void *ptr, size_t *size)
 /*
  * Function to retrieve data for heap on given socket
  */
+RTE_EXPORT_SYMBOL(rte_malloc_get_socket_stats)
 int
 rte_malloc_get_socket_stats(int socket,
 		struct rte_malloc_socket_stats *socket_stats)
@@ -250,6 +261,7 @@ rte_malloc_get_socket_stats(int socket,
 /*
  * Function to dump contents of all heaps
  */
+RTE_EXPORT_SYMBOL(rte_malloc_dump_heaps)
 void
 rte_malloc_dump_heaps(FILE *f)
 {
@@ -262,6 +274,7 @@ rte_malloc_dump_heaps(FILE *f)
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_malloc_heap_get_socket)
 int
 rte_malloc_heap_get_socket(const char *name)
 {
@@ -298,6 +311,7 @@ rte_malloc_heap_get_socket(const char *name)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_malloc_heap_socket_is_external)
 int
 rte_malloc_heap_socket_is_external(int socket_id)
 {
@@ -326,6 +340,7 @@ rte_malloc_heap_socket_is_external(int socket_id)
 /*
  * Print stats on memory type. If type is NULL, info on all types is printed
  */
+RTE_EXPORT_SYMBOL(rte_malloc_dump_stats)
 void
 rte_malloc_dump_stats(FILE *f, __rte_unused const char *type)
 {
@@ -355,6 +370,7 @@ rte_malloc_dump_stats(FILE *f, __rte_unused const char *type)
 /*
  * Return the IO address of a virtual address obtained through rte_malloc
  */
+RTE_EXPORT_SYMBOL(rte_malloc_virt2iova)
 rte_iova_t
 rte_malloc_virt2iova(const void *addr)
 {
@@ -392,6 +408,7 @@ find_named_heap(const char *name)
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_malloc_heap_memory_add)
 int
 rte_malloc_heap_memory_add(const char *heap_name, void *va_addr, size_t len,
 		rte_iova_t iova_addrs[], unsigned int n_pages, size_t page_sz)
@@ -447,6 +464,7 @@ rte_malloc_heap_memory_add(const char *heap_name, void *va_addr, size_t len,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_malloc_heap_memory_remove)
 int
 rte_malloc_heap_memory_remove(const char *heap_name, void *va_addr, size_t len)
 {
@@ -562,18 +580,21 @@ sync_memory(const char *heap_name, void *va_addr, size_t len, bool attach)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_malloc_heap_memory_attach)
 int
 rte_malloc_heap_memory_attach(const char *heap_name, void *va_addr, size_t len)
 {
 	return sync_memory(heap_name, va_addr, len, true);
 }
 
+RTE_EXPORT_SYMBOL(rte_malloc_heap_memory_detach)
 int
 rte_malloc_heap_memory_detach(const char *heap_name, void *va_addr, size_t len)
 {
 	return sync_memory(heap_name, va_addr, len, false);
 }
 
+RTE_EXPORT_SYMBOL(rte_malloc_heap_create)
 int
 rte_malloc_heap_create(const char *heap_name)
 {
@@ -625,6 +646,7 @@ rte_malloc_heap_create(const char *heap_name)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_malloc_heap_destroy)
 int
 rte_malloc_heap_destroy(const char *heap_name)
 {
diff --git a/lib/eal/common/rte_random.c b/lib/eal/common/rte_random.c
index 9354358818..d701d5faf8 100644
--- a/lib/eal/common/rte_random.c
+++ b/lib/eal/common/rte_random.c
@@ -82,6 +82,7 @@ __rte_srand_lfsr258(uint64_t seed, struct rte_rand_state *state)
 	state->z5 = __rte_rand_lfsr258_gen_seed(&lcg_seed, 8388608UL);
 }
 
+RTE_EXPORT_SYMBOL(rte_srand)
 void
 rte_srand(uint64_t seed)
 {
@@ -142,6 +143,7 @@ struct rte_rand_state *__rte_rand_get_state(void)
 	return RTE_LCORE_VAR(rand_state);
 }
 
+RTE_EXPORT_SYMBOL(rte_rand)
 uint64_t
 rte_rand(void)
 {
@@ -152,6 +154,7 @@ rte_rand(void)
 	return __rte_rand_lfsr258(state);
 }
 
+RTE_EXPORT_SYMBOL(rte_rand_max)
 uint64_t
 rte_rand_max(uint64_t upper_bound)
 {
@@ -191,6 +194,7 @@ rte_rand_max(uint64_t upper_bound)
 	return res;
 }
 
+RTE_EXPORT_SYMBOL(rte_drand)
 double
 rte_drand(void)
 {
diff --git a/lib/eal/common/rte_reciprocal.c b/lib/eal/common/rte_reciprocal.c
index 87c67e6d49..f8da18b082 100644
--- a/lib/eal/common/rte_reciprocal.c
+++ b/lib/eal/common/rte_reciprocal.c
@@ -12,6 +12,7 @@
 
 #include "rte_reciprocal.h"
 
+RTE_EXPORT_SYMBOL(rte_reciprocal_value)
 struct rte_reciprocal rte_reciprocal_value(uint32_t d)
 {
 	struct rte_reciprocal R;
@@ -99,6 +100,7 @@ divide_128_div_64_to_64(uint64_t u1, uint64_t u0, uint64_t v, uint64_t *r)
 	return q1*b + q0;
 }
 
+RTE_EXPORT_SYMBOL(rte_reciprocal_value_u64)
 struct rte_reciprocal_u64
 rte_reciprocal_value_u64(uint64_t d)
 {
diff --git a/lib/eal/common/rte_service.c b/lib/eal/common/rte_service.c
index 1821746337..a3ea1bf41e 100644
--- a/lib/eal/common/rte_service.c
+++ b/lib/eal/common/rte_service.c
@@ -120,6 +120,7 @@ rte_service_init(void)
 	return -ENOMEM;
 }
 
+RTE_EXPORT_SYMBOL(rte_service_finalize)
 void
 rte_service_finalize(void)
 {
@@ -174,6 +175,7 @@ service_mt_safe(struct rte_service_spec_impl *s)
 	return !!(s->spec.capabilities & RTE_SERVICE_CAP_MT_SAFE);
 }
 
+RTE_EXPORT_SYMBOL(rte_service_set_stats_enable)
 int32_t
 rte_service_set_stats_enable(uint32_t id, int32_t enabled)
 {
@@ -188,6 +190,7 @@ rte_service_set_stats_enable(uint32_t id, int32_t enabled)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_service_set_runstate_mapped_check)
 int32_t
 rte_service_set_runstate_mapped_check(uint32_t id, int32_t enabled)
 {
@@ -202,12 +205,14 @@ rte_service_set_runstate_mapped_check(uint32_t id, int32_t enabled)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_service_get_count)
 uint32_t
 rte_service_get_count(void)
 {
 	return rte_service_count;
 }
 
+RTE_EXPORT_SYMBOL(rte_service_get_by_name)
 int32_t
 rte_service_get_by_name(const char *name, uint32_t *service_id)
 {
@@ -226,6 +231,7 @@ rte_service_get_by_name(const char *name, uint32_t *service_id)
 	return -ENODEV;
 }
 
+RTE_EXPORT_SYMBOL(rte_service_get_name)
 const char *
 rte_service_get_name(uint32_t id)
 {
@@ -234,6 +240,7 @@ rte_service_get_name(uint32_t id)
 	return s->spec.name;
 }
 
+RTE_EXPORT_SYMBOL(rte_service_probe_capability)
 int32_t
 rte_service_probe_capability(uint32_t id, uint32_t capability)
 {
@@ -242,6 +249,7 @@ rte_service_probe_capability(uint32_t id, uint32_t capability)
 	return !!(s->spec.capabilities & capability);
 }
 
+RTE_EXPORT_SYMBOL(rte_service_component_register)
 int32_t
 rte_service_component_register(const struct rte_service_spec *spec,
 			       uint32_t *id_ptr)
@@ -276,6 +284,7 @@ rte_service_component_register(const struct rte_service_spec *spec,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_service_component_unregister)
 int32_t
 rte_service_component_unregister(uint32_t id)
 {
@@ -297,6 +306,7 @@ rte_service_component_unregister(uint32_t id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_service_component_runstate_set)
 int32_t
 rte_service_component_runstate_set(uint32_t id, uint32_t runstate)
 {
@@ -317,6 +327,7 @@ rte_service_component_runstate_set(uint32_t id, uint32_t runstate)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_service_runstate_set)
 int32_t
 rte_service_runstate_set(uint32_t id, uint32_t runstate)
 {
@@ -338,6 +349,7 @@ rte_service_runstate_set(uint32_t id, uint32_t runstate)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_service_runstate_get)
 int32_t
 rte_service_runstate_get(uint32_t id)
 {
@@ -448,6 +460,7 @@ service_run(uint32_t i, struct core_state *cs, const uint64_t *mapped_services,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_service_may_be_active)
 int32_t
 rte_service_may_be_active(uint32_t id)
 {
@@ -469,6 +482,7 @@ rte_service_may_be_active(uint32_t id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_service_run_iter_on_app_lcore)
 int32_t
 rte_service_run_iter_on_app_lcore(uint32_t id, uint32_t serialize_mt_unsafe)
 {
@@ -528,6 +542,7 @@ service_runner_func(void *arg)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_service_lcore_may_be_active)
 int32_t
 rte_service_lcore_may_be_active(uint32_t lcore)
 {
@@ -543,6 +558,7 @@ rte_service_lcore_may_be_active(uint32_t lcore)
 			       rte_memory_order_acquire);
 }
 
+RTE_EXPORT_SYMBOL(rte_service_lcore_count)
 int32_t
 rte_service_lcore_count(void)
 {
@@ -556,6 +572,7 @@ rte_service_lcore_count(void)
 	return count;
 }
 
+RTE_EXPORT_SYMBOL(rte_service_lcore_list)
 int32_t
 rte_service_lcore_list(uint32_t array[], uint32_t n)
 {
@@ -580,6 +597,7 @@ rte_service_lcore_list(uint32_t array[], uint32_t n)
 	return count;
 }
 
+RTE_EXPORT_SYMBOL(rte_service_lcore_count_services)
 int32_t
 rte_service_lcore_count_services(uint32_t lcore)
 {
@@ -593,6 +611,7 @@ rte_service_lcore_count_services(uint32_t lcore)
 	return rte_bitset_count_set(cs->mapped_services, RTE_SERVICE_NUM_MAX);
 }
 
+RTE_EXPORT_SYMBOL(rte_service_start_with_defaults)
 int32_t
 rte_service_start_with_defaults(void)
 {
@@ -666,6 +685,7 @@ service_update(uint32_t sid, uint32_t lcore, uint32_t *set, uint32_t *enabled)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_service_map_lcore_set)
 int32_t
 rte_service_map_lcore_set(uint32_t id, uint32_t lcore, uint32_t enabled)
 {
@@ -674,6 +694,7 @@ rte_service_map_lcore_set(uint32_t id, uint32_t lcore, uint32_t enabled)
 	return service_update(id, lcore, &on, 0);
 }
 
+RTE_EXPORT_SYMBOL(rte_service_map_lcore_get)
 int32_t
 rte_service_map_lcore_get(uint32_t id, uint32_t lcore)
 {
@@ -701,6 +722,7 @@ set_lcore_state(uint32_t lcore, int32_t state)
 	rte_eal_trace_service_lcore_state_change(lcore, state);
 }
 
+RTE_EXPORT_SYMBOL(rte_service_lcore_reset_all)
 int32_t
 rte_service_lcore_reset_all(void)
 {
@@ -727,6 +749,7 @@ rte_service_lcore_reset_all(void)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_service_lcore_add)
 int32_t
 rte_service_lcore_add(uint32_t lcore)
 {
@@ -750,6 +773,7 @@ rte_service_lcore_add(uint32_t lcore)
 	return rte_eal_wait_lcore(lcore);
 }
 
+RTE_EXPORT_SYMBOL(rte_service_lcore_del)
 int32_t
 rte_service_lcore_del(uint32_t lcore)
 {
@@ -774,6 +798,7 @@ rte_service_lcore_del(uint32_t lcore)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_service_lcore_start)
 int32_t
 rte_service_lcore_start(uint32_t lcore)
 {
@@ -807,6 +832,7 @@ rte_service_lcore_start(uint32_t lcore)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_service_lcore_stop)
 int32_t
 rte_service_lcore_stop(uint32_t lcore)
 {
@@ -947,6 +973,7 @@ attr_get_service_cycles(uint32_t service_id)
 	return attr_get(service_id, lcore_attr_get_service_cycles);
 }
 
+RTE_EXPORT_SYMBOL(rte_service_attr_get)
 int32_t
 rte_service_attr_get(uint32_t id, uint32_t attr_id, uint64_t *attr_value)
 {
@@ -974,6 +1001,7 @@ rte_service_attr_get(uint32_t id, uint32_t attr_id, uint64_t *attr_value)
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_service_lcore_attr_get)
 int32_t
 rte_service_lcore_attr_get(uint32_t lcore, uint32_t attr_id,
 			   uint64_t *attr_value)
@@ -998,6 +1026,7 @@ rte_service_lcore_attr_get(uint32_t lcore, uint32_t attr_id,
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_service_attr_reset_all)
 int32_t
 rte_service_attr_reset_all(uint32_t id)
 {
@@ -1016,6 +1045,7 @@ rte_service_attr_reset_all(uint32_t id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_service_lcore_attr_reset_all)
 int32_t
 rte_service_lcore_attr_reset_all(uint32_t lcore)
 {
@@ -1069,6 +1099,7 @@ service_dump_calls_per_lcore(FILE *f, uint32_t lcore)
 	fprintf(f, "\n");
 }
 
+RTE_EXPORT_SYMBOL(rte_service_dump)
 int32_t
 rte_service_dump(FILE *f, uint32_t id)
 {
diff --git a/lib/eal/common/rte_version.c b/lib/eal/common/rte_version.c
index 4ae5d66c89..456c0a955f 100644
--- a/lib/eal/common/rte_version.c
+++ b/lib/eal/common/rte_version.c
@@ -4,24 +4,31 @@
 
 #include <rte_version.h>
 
+RTE_EXPORT_SYMBOL(rte_version_prefix)
 const char *
 rte_version_prefix(void) { return RTE_VER_PREFIX; }
 
+RTE_EXPORT_SYMBOL(rte_version_year)
 unsigned int
 rte_version_year(void) { return RTE_VER_YEAR; }
 
+RTE_EXPORT_SYMBOL(rte_version_month)
 unsigned int
 rte_version_month(void) { return RTE_VER_MONTH; }
 
+RTE_EXPORT_SYMBOL(rte_version_minor)
 unsigned int
 rte_version_minor(void) { return RTE_VER_MINOR; }
 
+RTE_EXPORT_SYMBOL(rte_version_suffix)
 const char *
 rte_version_suffix(void) { return RTE_VER_SUFFIX; }
 
+RTE_EXPORT_SYMBOL(rte_version_release)
 unsigned int
 rte_version_release(void) { return RTE_VER_RELEASE; }
 
+RTE_EXPORT_SYMBOL(rte_version)
 const char *
 rte_version(void)
 {
diff --git a/lib/eal/freebsd/eal.c b/lib/eal/freebsd/eal.c
index d07cff8651..a4aa3fb665 100644
--- a/lib/eal/freebsd/eal.c
+++ b/lib/eal/freebsd/eal.c
@@ -72,6 +72,7 @@ static struct flock wr_lock = {
 struct lcore_config lcore_config[RTE_MAX_LCORE];
 
 /* used by rte_rdtsc() */
+RTE_EXPORT_SYMBOL(rte_cycles_vmware_tsc_map)
 int rte_cycles_vmware_tsc_map;
 
 
@@ -514,6 +515,7 @@ sync_func(__rte_unused void *arg)
 	return 0;
 }
 /* Abstraction for port I/0 privilege */
+RTE_EXPORT_SYMBOL(rte_eal_iopl_init)
 int
 rte_eal_iopl_init(void)
 {
@@ -534,6 +536,7 @@ static void rte_eal_init_alert(const char *msg)
 }
 
 /* Launch threads, called at application init(). */
+RTE_EXPORT_SYMBOL(rte_eal_init)
 int
 rte_eal_init(int argc, char **argv)
 {
@@ -883,6 +886,7 @@ rte_eal_init(int argc, char **argv)
 	return fctret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eal_cleanup)
 int
 rte_eal_cleanup(void)
 {
@@ -911,6 +915,7 @@ rte_eal_cleanup(void)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eal_create_uio_dev)
 int rte_eal_create_uio_dev(void)
 {
 	const struct internal_config *internal_conf =
@@ -918,17 +923,20 @@ int rte_eal_create_uio_dev(void)
 	return internal_conf->create_uio_dev;
 }
 
+RTE_EXPORT_SYMBOL(rte_eal_vfio_intr_mode)
 enum rte_intr_mode
 rte_eal_vfio_intr_mode(void)
 {
 	return RTE_INTR_MODE_NONE;
 }
 
+RTE_EXPORT_SYMBOL(rte_eal_vfio_get_vf_token)
 void
 rte_eal_vfio_get_vf_token(__rte_unused rte_uuid_t vf_token)
 {
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_setup_device)
 int rte_vfio_setup_device(__rte_unused const char *sysfs_base,
 		      __rte_unused const char *dev_addr,
 		      __rte_unused int *vfio_dev_fd,
@@ -938,6 +946,7 @@ int rte_vfio_setup_device(__rte_unused const char *sysfs_base,
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_release_device)
 int rte_vfio_release_device(__rte_unused const char *sysfs_base,
 			__rte_unused const char *dev_addr,
 			__rte_unused int fd)
@@ -946,28 +955,33 @@ int rte_vfio_release_device(__rte_unused const char *sysfs_base,
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_enable)
 int rte_vfio_enable(__rte_unused const char *modname)
 {
 	rte_errno = ENOTSUP;
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_is_enabled)
 int rte_vfio_is_enabled(__rte_unused const char *modname)
 {
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_noiommu_is_enabled)
 int rte_vfio_noiommu_is_enabled(void)
 {
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_clear_group)
 int rte_vfio_clear_group(__rte_unused int vfio_group_fd)
 {
 	rte_errno = ENOTSUP;
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_get_group_num)
 int
 rte_vfio_get_group_num(__rte_unused const char *sysfs_base,
 		       __rte_unused const char *dev_addr,
@@ -977,6 +991,7 @@ rte_vfio_get_group_num(__rte_unused const char *sysfs_base,
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_get_container_fd)
 int
 rte_vfio_get_container_fd(void)
 {
@@ -984,6 +999,7 @@ rte_vfio_get_container_fd(void)
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_get_group_fd)
 int
 rte_vfio_get_group_fd(__rte_unused int iommu_group_num)
 {
@@ -991,6 +1007,7 @@ rte_vfio_get_group_fd(__rte_unused int iommu_group_num)
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_container_create)
 int
 rte_vfio_container_create(void)
 {
@@ -998,6 +1015,7 @@ rte_vfio_container_create(void)
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_container_destroy)
 int
 rte_vfio_container_destroy(__rte_unused int container_fd)
 {
@@ -1005,6 +1023,7 @@ rte_vfio_container_destroy(__rte_unused int container_fd)
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_container_group_bind)
 int
 rte_vfio_container_group_bind(__rte_unused int container_fd,
 		__rte_unused int iommu_group_num)
@@ -1013,6 +1032,7 @@ rte_vfio_container_group_bind(__rte_unused int container_fd,
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_container_group_unbind)
 int
 rte_vfio_container_group_unbind(__rte_unused int container_fd,
 		__rte_unused int iommu_group_num)
@@ -1021,6 +1041,7 @@ rte_vfio_container_group_unbind(__rte_unused int container_fd,
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_container_dma_map)
 int
 rte_vfio_container_dma_map(__rte_unused int container_fd,
 			__rte_unused uint64_t vaddr,
@@ -1031,6 +1052,7 @@ rte_vfio_container_dma_map(__rte_unused int container_fd,
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_container_dma_unmap)
 int
 rte_vfio_container_dma_unmap(__rte_unused int container_fd,
 			__rte_unused uint64_t vaddr,
diff --git a/lib/eal/freebsd/eal_alarm.c b/lib/eal/freebsd/eal_alarm.c
index 3680f5caba..69a88ecb93 100644
--- a/lib/eal/freebsd/eal_alarm.c
+++ b/lib/eal/freebsd/eal_alarm.c
@@ -200,6 +200,7 @@ eal_alarm_callback(void *arg __rte_unused)
 }
 
 
+RTE_EXPORT_SYMBOL(rte_eal_alarm_set)
 int
 rte_eal_alarm_set(uint64_t us, rte_eal_alarm_callback cb_fn, void *cb_arg)
 {
@@ -252,6 +253,7 @@ rte_eal_alarm_set(uint64_t us, rte_eal_alarm_callback cb_fn, void *cb_arg)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eal_alarm_cancel)
 int
 rte_eal_alarm_cancel(rte_eal_alarm_callback cb_fn, void *cb_arg)
 {
diff --git a/lib/eal/freebsd/eal_dev.c b/lib/eal/freebsd/eal_dev.c
index d8659cc7fc..09316c16c2 100644
--- a/lib/eal/freebsd/eal_dev.c
+++ b/lib/eal/freebsd/eal_dev.c
@@ -7,6 +7,7 @@
 
 #include "eal_private.h"
 
+RTE_EXPORT_SYMBOL(rte_dev_event_monitor_start)
 int
 rte_dev_event_monitor_start(void)
 {
@@ -14,6 +15,7 @@ rte_dev_event_monitor_start(void)
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_dev_event_monitor_stop)
 int
 rte_dev_event_monitor_stop(void)
 {
@@ -21,6 +23,7 @@ rte_dev_event_monitor_stop(void)
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_dev_hotplug_handle_enable)
 int
 rte_dev_hotplug_handle_enable(void)
 {
@@ -28,6 +31,7 @@ rte_dev_hotplug_handle_enable(void)
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_dev_hotplug_handle_disable)
 int
 rte_dev_hotplug_handle_disable(void)
 {
diff --git a/lib/eal/freebsd/eal_interrupts.c b/lib/eal/freebsd/eal_interrupts.c
index 23747babc2..ed3b1c432e 100644
--- a/lib/eal/freebsd/eal_interrupts.c
+++ b/lib/eal/freebsd/eal_interrupts.c
@@ -80,6 +80,7 @@ intr_source_to_kevent(const struct rte_intr_handle *ih, struct kevent *ke)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_intr_callback_register)
 int
 rte_intr_callback_register(const struct rte_intr_handle *intr_handle,
 		rte_intr_callback_fn cb, void *cb_arg)
@@ -211,6 +212,7 @@ rte_intr_callback_register(const struct rte_intr_handle *intr_handle,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_intr_callback_unregister_pending)
 int
 rte_intr_callback_unregister_pending(const struct rte_intr_handle *intr_handle,
 				rte_intr_callback_fn cb_fn, void *cb_arg,
@@ -267,6 +269,7 @@ rte_intr_callback_unregister_pending(const struct rte_intr_handle *intr_handle,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_intr_callback_unregister)
 int
 rte_intr_callback_unregister(const struct rte_intr_handle *intr_handle,
 		rte_intr_callback_fn cb_fn, void *cb_arg)
@@ -354,6 +357,7 @@ rte_intr_callback_unregister(const struct rte_intr_handle *intr_handle,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_intr_callback_unregister_sync)
 int
 rte_intr_callback_unregister_sync(const struct rte_intr_handle *intr_handle,
 		rte_intr_callback_fn cb_fn, void *cb_arg)
@@ -366,6 +370,7 @@ rte_intr_callback_unregister_sync(const struct rte_intr_handle *intr_handle,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_intr_enable)
 int
 rte_intr_enable(const struct rte_intr_handle *intr_handle)
 {
@@ -407,6 +412,7 @@ rte_intr_enable(const struct rte_intr_handle *intr_handle)
 	return rc;
 }
 
+RTE_EXPORT_SYMBOL(rte_intr_disable)
 int
 rte_intr_disable(const struct rte_intr_handle *intr_handle)
 {
@@ -447,6 +453,7 @@ rte_intr_disable(const struct rte_intr_handle *intr_handle)
 	return rc;
 }
 
+RTE_EXPORT_SYMBOL(rte_intr_ack)
 int
 rte_intr_ack(const struct rte_intr_handle *intr_handle)
 {
@@ -648,6 +655,7 @@ rte_eal_intr_init(void)
 	return ret;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_rx_ctl)
 int
 rte_intr_rx_ctl(struct rte_intr_handle *intr_handle,
 		int epfd, int op, unsigned int vec, void *data)
@@ -661,6 +669,7 @@ rte_intr_rx_ctl(struct rte_intr_handle *intr_handle,
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_efd_enable)
 int
 rte_intr_efd_enable(struct rte_intr_handle *intr_handle, uint32_t nb_efd)
 {
@@ -670,12 +679,14 @@ rte_intr_efd_enable(struct rte_intr_handle *intr_handle, uint32_t nb_efd)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_efd_disable)
 void
 rte_intr_efd_disable(struct rte_intr_handle *intr_handle)
 {
 	RTE_SET_USED(intr_handle);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_dp_is_en)
 int
 rte_intr_dp_is_en(struct rte_intr_handle *intr_handle)
 {
@@ -683,6 +694,7 @@ rte_intr_dp_is_en(struct rte_intr_handle *intr_handle)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_allow_others)
 int
 rte_intr_allow_others(struct rte_intr_handle *intr_handle)
 {
@@ -690,6 +702,7 @@ rte_intr_allow_others(struct rte_intr_handle *intr_handle)
 	return 1;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_cap_multiple)
 int
 rte_intr_cap_multiple(struct rte_intr_handle *intr_handle)
 {
@@ -697,6 +710,7 @@ rte_intr_cap_multiple(struct rte_intr_handle *intr_handle)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_epoll_wait)
 int
 rte_epoll_wait(int epfd, struct rte_epoll_event *events,
 		int maxevents, int timeout)
@@ -709,6 +723,7 @@ rte_epoll_wait(int epfd, struct rte_epoll_event *events,
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_SYMBOL(rte_epoll_wait_interruptible)
 int
 rte_epoll_wait_interruptible(int epfd, struct rte_epoll_event *events,
 			     int maxevents, int timeout)
@@ -721,6 +736,7 @@ rte_epoll_wait_interruptible(int epfd, struct rte_epoll_event *events,
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_SYMBOL(rte_epoll_ctl)
 int
 rte_epoll_ctl(int epfd, int op, int fd, struct rte_epoll_event *event)
 {
@@ -732,18 +748,21 @@ rte_epoll_ctl(int epfd, int op, int fd, struct rte_epoll_event *event)
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_tls_epfd)
 int
 rte_intr_tls_epfd(void)
 {
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_free_epoll_fd)
 void
 rte_intr_free_epoll_fd(struct rte_intr_handle *intr_handle)
 {
 	RTE_SET_USED(intr_handle);
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_is_intr)
 int rte_thread_is_intr(void)
 {
 	return rte_thread_equal(intr_thread, rte_thread_self());
diff --git a/lib/eal/freebsd/eal_memory.c b/lib/eal/freebsd/eal_memory.c
index a6f3ba226e..c50b62e500 100644
--- a/lib/eal/freebsd/eal_memory.c
+++ b/lib/eal/freebsd/eal_memory.c
@@ -36,6 +36,7 @@ uint64_t eal_get_baseaddr(void)
 /*
  * Get physical address of any mapped virtual address in the current process.
  */
+RTE_EXPORT_SYMBOL(rte_mem_virt2phy)
 phys_addr_t
 rte_mem_virt2phy(const void *virtaddr)
 {
@@ -44,6 +45,7 @@ rte_mem_virt2phy(const void *virtaddr)
 	(void)virtaddr;
 	return RTE_BAD_IOVA;
 }
+RTE_EXPORT_SYMBOL(rte_mem_virt2iova)
 rte_iova_t
 rte_mem_virt2iova(const void *virtaddr)
 {
@@ -295,6 +297,7 @@ rte_eal_hugepage_attach(void)
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_eal_using_phys_addrs)
 int
 rte_eal_using_phys_addrs(void)
 {
diff --git a/lib/eal/freebsd/eal_thread.c b/lib/eal/freebsd/eal_thread.c
index 77b7621908..108cfdb5f5 100644
--- a/lib/eal/freebsd/eal_thread.c
+++ b/lib/eal/freebsd/eal_thread.c
@@ -25,6 +25,7 @@
 #include "eal_thread.h"
 
 /* require calling thread tid by gettid() */
+RTE_EXPORT_SYMBOL(rte_sys_gettid)
 int rte_sys_gettid(void)
 {
 	long lwpid;
@@ -32,6 +33,7 @@ int rte_sys_gettid(void)
 	return (int)lwpid;
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_set_name)
 void rte_thread_set_name(rte_thread_t thread_id, const char *thread_name)
 {
 	char truncated[RTE_THREAD_NAME_SIZE];
diff --git a/lib/eal/freebsd/eal_timer.c b/lib/eal/freebsd/eal_timer.c
index 4eba66eadb..6e5d974f18 100644
--- a/lib/eal/freebsd/eal_timer.c
+++ b/lib/eal/freebsd/eal_timer.c
@@ -23,6 +23,7 @@
 #warning HPET is not supported in FreeBSD
 #endif
 
+RTE_EXPORT_SYMBOL(eal_timer_source)
 enum timer_source eal_timer_source = EAL_TIMER_TSC;
 
 uint64_t
diff --git a/lib/eal/linux/eal.c b/lib/eal/linux/eal.c
index b1e63e37fc..5637770408 100644
--- a/lib/eal/linux/eal.c
+++ b/lib/eal/linux/eal.c
@@ -77,6 +77,7 @@ static struct flock wr_lock = {
 struct lcore_config lcore_config[RTE_MAX_LCORE];
 
 /* used by rte_rdtsc() */
+RTE_EXPORT_SYMBOL(rte_cycles_vmware_tsc_map)
 int rte_cycles_vmware_tsc_map;
 
 
@@ -819,6 +820,7 @@ sync_func(__rte_unused void *arg)
  * iopl() call is mostly for the i386 architecture. For other architectures,
  * return -1 to indicate IO privilege can't be changed in this way.
  */
+RTE_EXPORT_SYMBOL(rte_eal_iopl_init)
 int
 rte_eal_iopl_init(void)
 {
@@ -914,6 +916,7 @@ eal_worker_thread_create(unsigned int lcore_id)
 }
 
 /* Launch threads, called at application init(). */
+RTE_EXPORT_SYMBOL(rte_eal_init)
 int
 rte_eal_init(int argc, char **argv)
 {
@@ -1294,6 +1297,7 @@ mark_freeable(const struct rte_memseg_list *msl, const struct rte_memseg *ms,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eal_cleanup)
 int
 rte_eal_cleanup(void)
 {
@@ -1336,6 +1340,7 @@ rte_eal_cleanup(void)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eal_create_uio_dev)
 int rte_eal_create_uio_dev(void)
 {
 	const struct internal_config *internal_conf =
@@ -1344,6 +1349,7 @@ int rte_eal_create_uio_dev(void)
 	return internal_conf->create_uio_dev;
 }
 
+RTE_EXPORT_SYMBOL(rte_eal_vfio_intr_mode)
 enum rte_intr_mode
 rte_eal_vfio_intr_mode(void)
 {
@@ -1353,6 +1359,7 @@ rte_eal_vfio_intr_mode(void)
 	return internal_conf->vfio_intr_mode;
 }
 
+RTE_EXPORT_SYMBOL(rte_eal_vfio_get_vf_token)
 void
 rte_eal_vfio_get_vf_token(rte_uuid_t vf_token)
 {
diff --git a/lib/eal/linux/eal_alarm.c b/lib/eal/linux/eal_alarm.c
index 9fe14ade63..9c5e23e663 100644
--- a/lib/eal/linux/eal_alarm.c
+++ b/lib/eal/linux/eal_alarm.c
@@ -127,6 +127,7 @@ eal_alarm_callback(void *arg __rte_unused)
 	rte_spinlock_unlock(&alarm_list_lk);
 }
 
+RTE_EXPORT_SYMBOL(rte_eal_alarm_set)
 int
 rte_eal_alarm_set(uint64_t us, rte_eal_alarm_callback cb_fn, void *cb_arg)
 {
@@ -191,6 +192,7 @@ rte_eal_alarm_set(uint64_t us, rte_eal_alarm_callback cb_fn, void *cb_arg)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eal_alarm_cancel)
 int
 rte_eal_alarm_cancel(rte_eal_alarm_callback cb_fn, void *cb_arg)
 {
diff --git a/lib/eal/linux/eal_dev.c b/lib/eal/linux/eal_dev.c
index be97f56424..6265d7fb45 100644
--- a/lib/eal/linux/eal_dev.c
+++ b/lib/eal/linux/eal_dev.c
@@ -303,6 +303,7 @@ dev_uev_handler(__rte_unused void *param)
 	free(uevent.devname);
 }
 
+RTE_EXPORT_SYMBOL(rte_dev_event_monitor_start)
 int
 rte_dev_event_monitor_start(void)
 {
@@ -353,6 +354,7 @@ rte_dev_event_monitor_start(void)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_dev_event_monitor_stop)
 int
 rte_dev_event_monitor_stop(void)
 {
@@ -421,6 +423,7 @@ dev_sigbus_handler_unregister(void)
 	return rte_errno;
 }
 
+RTE_EXPORT_SYMBOL(rte_dev_hotplug_handle_enable)
 int
 rte_dev_hotplug_handle_enable(void)
 {
@@ -436,6 +439,7 @@ rte_dev_hotplug_handle_enable(void)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_dev_hotplug_handle_disable)
 int
 rte_dev_hotplug_handle_disable(void)
 {
diff --git a/lib/eal/linux/eal_interrupts.c b/lib/eal/linux/eal_interrupts.c
index 23039964fc..d2831dad39 100644
--- a/lib/eal/linux/eal_interrupts.c
+++ b/lib/eal/linux/eal_interrupts.c
@@ -482,6 +482,7 @@ uio_intr_enable(const struct rte_intr_handle *intr_handle)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_intr_callback_register)
 int
 rte_intr_callback_register(const struct rte_intr_handle *intr_handle,
 			rte_intr_callback_fn cb, void *cb_arg)
@@ -566,6 +567,7 @@ rte_intr_callback_register(const struct rte_intr_handle *intr_handle,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_intr_callback_unregister_pending)
 int
 rte_intr_callback_unregister_pending(const struct rte_intr_handle *intr_handle,
 				rte_intr_callback_fn cb_fn, void *cb_arg,
@@ -617,6 +619,7 @@ rte_intr_callback_unregister_pending(const struct rte_intr_handle *intr_handle,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_intr_callback_unregister)
 int
 rte_intr_callback_unregister(const struct rte_intr_handle *intr_handle,
 			rte_intr_callback_fn cb_fn, void *cb_arg)
@@ -683,6 +686,7 @@ rte_intr_callback_unregister(const struct rte_intr_handle *intr_handle,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_intr_callback_unregister_sync)
 int
 rte_intr_callback_unregister_sync(const struct rte_intr_handle *intr_handle,
 			rte_intr_callback_fn cb_fn, void *cb_arg)
@@ -695,6 +699,7 @@ rte_intr_callback_unregister_sync(const struct rte_intr_handle *intr_handle,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_intr_enable)
 int
 rte_intr_enable(const struct rte_intr_handle *intr_handle)
 {
@@ -775,6 +780,7 @@ rte_intr_enable(const struct rte_intr_handle *intr_handle)
  * auto-masked. In fact, for interrupt handle types VFIO_MSIX and VFIO_MSI,
  * this function is no-op.
  */
+RTE_EXPORT_SYMBOL(rte_intr_ack)
 int
 rte_intr_ack(const struct rte_intr_handle *intr_handle)
 {
@@ -827,6 +833,7 @@ rte_intr_ack(const struct rte_intr_handle *intr_handle)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_intr_disable)
 int
 rte_intr_disable(const struct rte_intr_handle *intr_handle)
 {
@@ -1305,6 +1312,7 @@ eal_init_tls_epfd(void)
 	return pfd;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_tls_epfd)
 int
 rte_intr_tls_epfd(void)
 {
@@ -1377,6 +1385,7 @@ eal_epoll_wait(int epfd, struct rte_epoll_event *events,
 	return rc;
 }
 
+RTE_EXPORT_SYMBOL(rte_epoll_wait)
 int
 rte_epoll_wait(int epfd, struct rte_epoll_event *events,
 	       int maxevents, int timeout)
@@ -1384,6 +1393,7 @@ rte_epoll_wait(int epfd, struct rte_epoll_event *events,
 	return eal_epoll_wait(epfd, events, maxevents, timeout, false);
 }
 
+RTE_EXPORT_SYMBOL(rte_epoll_wait_interruptible)
 int
 rte_epoll_wait_interruptible(int epfd, struct rte_epoll_event *events,
 			     int maxevents, int timeout)
@@ -1408,6 +1418,7 @@ eal_epoll_data_safe_free(struct rte_epoll_event *ev)
 	ev->epfd = -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_epoll_ctl)
 int
 rte_epoll_ctl(int epfd, int op, int fd,
 	      struct rte_epoll_event *event)
@@ -1449,6 +1460,7 @@ rte_epoll_ctl(int epfd, int op, int fd,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_rx_ctl)
 int
 rte_intr_rx_ctl(struct rte_intr_handle *intr_handle, int epfd,
 		int op, unsigned int vec, void *data)
@@ -1514,6 +1526,7 @@ rte_intr_rx_ctl(struct rte_intr_handle *intr_handle, int epfd,
 	return rc;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_free_epoll_fd)
 void
 rte_intr_free_epoll_fd(struct rte_intr_handle *intr_handle)
 {
@@ -1532,6 +1545,7 @@ rte_intr_free_epoll_fd(struct rte_intr_handle *intr_handle)
 	}
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_efd_enable)
 int
 rte_intr_efd_enable(struct rte_intr_handle *intr_handle, uint32_t nb_efd)
 {
@@ -1579,6 +1593,7 @@ rte_intr_efd_enable(struct rte_intr_handle *intr_handle, uint32_t nb_efd)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_efd_disable)
 void
 rte_intr_efd_disable(struct rte_intr_handle *intr_handle)
 {
@@ -1593,12 +1608,14 @@ rte_intr_efd_disable(struct rte_intr_handle *intr_handle)
 	rte_intr_max_intr_set(intr_handle, 0);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_dp_is_en)
 int
 rte_intr_dp_is_en(struct rte_intr_handle *intr_handle)
 {
 	return !(!rte_intr_nb_efd_get(intr_handle));
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_allow_others)
 int
 rte_intr_allow_others(struct rte_intr_handle *intr_handle)
 {
@@ -1609,6 +1626,7 @@ rte_intr_allow_others(struct rte_intr_handle *intr_handle)
 				rte_intr_nb_efd_get(intr_handle));
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_cap_multiple)
 int
 rte_intr_cap_multiple(struct rte_intr_handle *intr_handle)
 {
@@ -1621,6 +1639,7 @@ rte_intr_cap_multiple(struct rte_intr_handle *intr_handle)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_is_intr)
 int rte_thread_is_intr(void)
 {
 	return rte_thread_equal(intr_thread, rte_thread_self());
diff --git a/lib/eal/linux/eal_memory.c b/lib/eal/linux/eal_memory.c
index 9dda60c0e1..7dec1baa0a 100644
--- a/lib/eal/linux/eal_memory.c
+++ b/lib/eal/linux/eal_memory.c
@@ -87,6 +87,7 @@ uint64_t eal_get_baseaddr(void)
 /*
  * Get physical address of any mapped virtual address in the current process.
  */
+RTE_EXPORT_SYMBOL(rte_mem_virt2phy)
 phys_addr_t
 rte_mem_virt2phy(const void *virtaddr)
 {
@@ -144,6 +145,7 @@ rte_mem_virt2phy(const void *virtaddr)
 	return physaddr;
 }
 
+RTE_EXPORT_SYMBOL(rte_mem_virt2iova)
 rte_iova_t
 rte_mem_virt2iova(const void *virtaddr)
 {
@@ -1673,6 +1675,7 @@ rte_eal_hugepage_attach(void)
 			eal_hugepage_attach();
 }
 
+RTE_EXPORT_SYMBOL(rte_eal_using_phys_addrs)
 int
 rte_eal_using_phys_addrs(void)
 {
diff --git a/lib/eal/linux/eal_thread.c b/lib/eal/linux/eal_thread.c
index 7051840cdf..9db0a1af38 100644
--- a/lib/eal/linux/eal_thread.c
+++ b/lib/eal/linux/eal_thread.c
@@ -16,11 +16,13 @@
 #include "eal_private.h"
 
 /* require calling thread tid by gettid() */
+RTE_EXPORT_SYMBOL(rte_sys_gettid)
 int rte_sys_gettid(void)
 {
 	return (int)syscall(SYS_gettid);
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_set_name)
 void rte_thread_set_name(rte_thread_t thread_id, const char *thread_name)
 {
 	int ret = ENOSYS;
diff --git a/lib/eal/linux/eal_timer.c b/lib/eal/linux/eal_timer.c
index 489732c116..5c6f6687d5 100644
--- a/lib/eal/linux/eal_timer.c
+++ b/lib/eal/linux/eal_timer.c
@@ -18,6 +18,7 @@
 
 #include "eal_private.h"
 
+RTE_EXPORT_SYMBOL(eal_timer_source)
 enum timer_source eal_timer_source = EAL_TIMER_HPET;
 
 #ifdef RTE_LIBEAL_USE_HPET
@@ -93,6 +94,7 @@ hpet_msb_inc(__rte_unused void *arg)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_get_hpet_hz)
 uint64_t
 rte_get_hpet_hz(void)
 {
@@ -105,6 +107,7 @@ rte_get_hpet_hz(void)
 	return eal_hpet_resolution_hz;
 }
 
+RTE_EXPORT_SYMBOL(rte_get_hpet_cycles)
 uint64_t
 rte_get_hpet_cycles(void)
 {
@@ -131,6 +134,7 @@ rte_get_hpet_cycles(void)
  * Open and mmap /dev/hpet (high precision event timer) that will
  * provide our time reference.
  */
+RTE_EXPORT_SYMBOL(rte_eal_hpet_init)
 int
 rte_eal_hpet_init(int make_default)
 {
diff --git a/lib/eal/linux/eal_vfio.c b/lib/eal/linux/eal_vfio.c
index 7132e24cba..1b69fc35e1 100644
--- a/lib/eal/linux/eal_vfio.c
+++ b/lib/eal/linux/eal_vfio.c
@@ -515,6 +515,7 @@ get_vfio_cfg_by_container_fd(int container_fd)
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_get_group_fd)
 int
 rte_vfio_get_group_fd(int iommu_group_num)
 {
@@ -713,6 +714,7 @@ vfio_sync_default_container(void)
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_clear_group)
 int
 rte_vfio_clear_group(int vfio_group_fd)
 {
@@ -736,6 +738,7 @@ rte_vfio_clear_group(int vfio_group_fd)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_setup_device)
 int
 rte_vfio_setup_device(const char *sysfs_base, const char *dev_addr,
 		int *vfio_dev_fd, struct vfio_device_info *device_info)
@@ -989,6 +992,7 @@ rte_vfio_setup_device(const char *sysfs_base, const char *dev_addr,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_release_device)
 int
 rte_vfio_release_device(const char *sysfs_base, const char *dev_addr,
 		    int vfio_dev_fd)
@@ -1077,6 +1081,7 @@ rte_vfio_release_device(const char *sysfs_base, const char *dev_addr,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_enable)
 int
 rte_vfio_enable(const char *modname)
 {
@@ -1143,6 +1148,7 @@ rte_vfio_enable(const char *modname)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_is_enabled)
 int
 rte_vfio_is_enabled(const char *modname)
 {
@@ -1225,6 +1231,7 @@ vfio_set_iommu_type(int vfio_container_fd)
 	return NULL;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_vfio_get_device_info, 24.03)
 int
 rte_vfio_get_device_info(const char *sysfs_base, const char *dev_addr,
 		int *vfio_dev_fd, struct vfio_device_info *device_info)
@@ -1284,6 +1291,7 @@ vfio_has_supported_extensions(int vfio_container_fd)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_get_container_fd)
 int
 rte_vfio_get_container_fd(void)
 {
@@ -1355,6 +1363,7 @@ rte_vfio_get_container_fd(void)
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_get_group_num)
 int
 rte_vfio_get_group_num(const char *sysfs_base,
 		const char *dev_addr, int *iommu_group_num)
@@ -2024,6 +2033,7 @@ container_dma_unmap(struct vfio_config *vfio_cfg, uint64_t vaddr, uint64_t iova,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_noiommu_is_enabled)
 int
 rte_vfio_noiommu_is_enabled(void)
 {
@@ -2056,6 +2066,7 @@ rte_vfio_noiommu_is_enabled(void)
 	return c == 'Y';
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_container_create)
 int
 rte_vfio_container_create(void)
 {
@@ -2081,6 +2092,7 @@ rte_vfio_container_create(void)
 	return vfio_cfgs[i].vfio_container_fd;
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_container_destroy)
 int
 rte_vfio_container_destroy(int container_fd)
 {
@@ -2106,6 +2118,7 @@ rte_vfio_container_destroy(int container_fd)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_container_group_bind)
 int
 rte_vfio_container_group_bind(int container_fd, int iommu_group_num)
 {
@@ -2120,6 +2133,7 @@ rte_vfio_container_group_bind(int container_fd, int iommu_group_num)
 	return vfio_get_group_fd(vfio_cfg, iommu_group_num);
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_container_group_unbind)
 int
 rte_vfio_container_group_unbind(int container_fd, int iommu_group_num)
 {
@@ -2160,6 +2174,7 @@ rte_vfio_container_group_unbind(int container_fd, int iommu_group_num)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_container_dma_map)
 int
 rte_vfio_container_dma_map(int container_fd, uint64_t vaddr, uint64_t iova,
 		uint64_t len)
@@ -2180,6 +2195,7 @@ rte_vfio_container_dma_map(int container_fd, uint64_t vaddr, uint64_t iova,
 	return container_dma_map(vfio_cfg, vaddr, iova, len);
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_container_dma_unmap)
 int
 rte_vfio_container_dma_unmap(int container_fd, uint64_t vaddr, uint64_t iova,
 		uint64_t len)
diff --git a/lib/eal/loongarch/rte_cpuflags.c b/lib/eal/loongarch/rte_cpuflags.c
index db9e28ef20..4a3671505f 100644
--- a/lib/eal/loongarch/rte_cpuflags.c
+++ b/lib/eal/loongarch/rte_cpuflags.c
@@ -61,6 +61,7 @@ rte_cpu_get_features(hwcap_registers_t out)
 /*
  * Checks if a particular flag is available on current machine.
  */
+RTE_EXPORT_SYMBOL(rte_cpu_get_flag_enabled)
 int
 rte_cpu_get_flag_enabled(enum rte_cpu_flag_t feature)
 {
@@ -78,6 +79,7 @@ rte_cpu_get_flag_enabled(enum rte_cpu_flag_t feature)
 	return (regs[feat->reg] >> feat->bit) & 1;
 }
 
+RTE_EXPORT_SYMBOL(rte_cpu_get_flag_name)
 const char *
 rte_cpu_get_flag_name(enum rte_cpu_flag_t feature)
 {
@@ -86,6 +88,7 @@ rte_cpu_get_flag_name(enum rte_cpu_flag_t feature)
 	return rte_cpu_feature_table[feature].name;
 }
 
+RTE_EXPORT_SYMBOL(rte_cpu_get_intrinsics_support)
 void
 rte_cpu_get_intrinsics_support(struct rte_cpu_intrinsics *intrinsics)
 {
diff --git a/lib/eal/loongarch/rte_hypervisor.c b/lib/eal/loongarch/rte_hypervisor.c
index d044906f71..d105c33888 100644
--- a/lib/eal/loongarch/rte_hypervisor.c
+++ b/lib/eal/loongarch/rte_hypervisor.c
@@ -4,6 +4,7 @@
 
 #include "rte_hypervisor.h"
 
+RTE_EXPORT_SYMBOL(rte_hypervisor_get)
 enum rte_hypervisor
 rte_hypervisor_get(void)
 {
diff --git a/lib/eal/loongarch/rte_power_intrinsics.c b/lib/eal/loongarch/rte_power_intrinsics.c
index a8969c260e..7c4a51c14d 100644
--- a/lib/eal/loongarch/rte_power_intrinsics.c
+++ b/lib/eal/loongarch/rte_power_intrinsics.c
@@ -9,6 +9,7 @@
 /**
  * This function is not supported on LOONGARCH.
  */
+RTE_EXPORT_SYMBOL(rte_power_monitor)
 int
 rte_power_monitor(const struct rte_power_monitor_cond *pmc,
 		const uint64_t tsc_timestamp)
@@ -22,6 +23,7 @@ rte_power_monitor(const struct rte_power_monitor_cond *pmc,
 /**
  * This function is not supported on LOONGARCH.
  */
+RTE_EXPORT_SYMBOL(rte_power_pause)
 int
 rte_power_pause(const uint64_t tsc_timestamp)
 {
@@ -33,6 +35,7 @@ rte_power_pause(const uint64_t tsc_timestamp)
 /**
  * This function is not supported on LOONGARCH.
  */
+RTE_EXPORT_SYMBOL(rte_power_monitor_wakeup)
 int
 rte_power_monitor_wakeup(const unsigned int lcore_id)
 {
@@ -41,6 +44,7 @@ rte_power_monitor_wakeup(const unsigned int lcore_id)
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_SYMBOL(rte_power_monitor_multi)
 int
 rte_power_monitor_multi(const struct rte_power_monitor_cond pmc[],
 		const uint32_t num, const uint64_t tsc_timestamp)
diff --git a/lib/eal/ppc/rte_cpuflags.c b/lib/eal/ppc/rte_cpuflags.c
index d276c2cf88..9580cbb869 100644
--- a/lib/eal/ppc/rte_cpuflags.c
+++ b/lib/eal/ppc/rte_cpuflags.c
@@ -85,6 +85,7 @@ rte_cpu_get_features(hwcap_registers_t out)
 /*
  * Checks if a particular flag is available on current machine.
  */
+RTE_EXPORT_SYMBOL(rte_cpu_get_flag_enabled)
 int
 rte_cpu_get_flag_enabled(enum rte_cpu_flag_t feature)
 {
@@ -102,6 +103,7 @@ rte_cpu_get_flag_enabled(enum rte_cpu_flag_t feature)
 	return (regs[feat->reg] >> feat->bit) & 1;
 }
 
+RTE_EXPORT_SYMBOL(rte_cpu_get_flag_name)
 const char *
 rte_cpu_get_flag_name(enum rte_cpu_flag_t feature)
 {
@@ -110,6 +112,7 @@ rte_cpu_get_flag_name(enum rte_cpu_flag_t feature)
 	return rte_cpu_feature_table[feature].name;
 }
 
+RTE_EXPORT_SYMBOL(rte_cpu_get_intrinsics_support)
 void
 rte_cpu_get_intrinsics_support(struct rte_cpu_intrinsics *intrinsics)
 {
diff --git a/lib/eal/ppc/rte_hypervisor.c b/lib/eal/ppc/rte_hypervisor.c
index 08a1c97d10..c22cee1319 100644
--- a/lib/eal/ppc/rte_hypervisor.c
+++ b/lib/eal/ppc/rte_hypervisor.c
@@ -4,6 +4,7 @@
 
 #include "rte_hypervisor.h"
 
+RTE_EXPORT_SYMBOL(rte_hypervisor_get)
 enum rte_hypervisor
 rte_hypervisor_get(void)
 {
diff --git a/lib/eal/ppc/rte_power_intrinsics.c b/lib/eal/ppc/rte_power_intrinsics.c
index d6bdc58911..94c8281ea4 100644
--- a/lib/eal/ppc/rte_power_intrinsics.c
+++ b/lib/eal/ppc/rte_power_intrinsics.c
@@ -9,6 +9,7 @@
 /**
  * This function is not supported on PPC64.
  */
+RTE_EXPORT_SYMBOL(rte_power_monitor)
 int
 rte_power_monitor(const struct rte_power_monitor_cond *pmc,
 		const uint64_t tsc_timestamp)
@@ -22,6 +23,7 @@ rte_power_monitor(const struct rte_power_monitor_cond *pmc,
 /**
  * This function is not supported on PPC64.
  */
+RTE_EXPORT_SYMBOL(rte_power_pause)
 int
 rte_power_pause(const uint64_t tsc_timestamp)
 {
@@ -33,6 +35,7 @@ rte_power_pause(const uint64_t tsc_timestamp)
 /**
  * This function is not supported on PPC64.
  */
+RTE_EXPORT_SYMBOL(rte_power_monitor_wakeup)
 int
 rte_power_monitor_wakeup(const unsigned int lcore_id)
 {
@@ -41,6 +44,7 @@ rte_power_monitor_wakeup(const unsigned int lcore_id)
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_SYMBOL(rte_power_monitor_multi)
 int
 rte_power_monitor_multi(const struct rte_power_monitor_cond pmc[],
 		const uint32_t num, const uint64_t tsc_timestamp)
diff --git a/lib/eal/riscv/rte_cpuflags.c b/lib/eal/riscv/rte_cpuflags.c
index eb4105c18b..6b5be23c36 100644
--- a/lib/eal/riscv/rte_cpuflags.c
+++ b/lib/eal/riscv/rte_cpuflags.c
@@ -90,6 +90,7 @@ rte_cpu_get_features(hwcap_registers_t out)
 /*
  * Checks if a particular flag is available on current machine.
  */
+RTE_EXPORT_SYMBOL(rte_cpu_get_flag_enabled)
 int
 rte_cpu_get_flag_enabled(enum rte_cpu_flag_t feature)
 {
@@ -107,6 +108,7 @@ rte_cpu_get_flag_enabled(enum rte_cpu_flag_t feature)
 	return (regs[feat->reg] >> feat->bit) & 1;
 }
 
+RTE_EXPORT_SYMBOL(rte_cpu_get_flag_name)
 const char *
 rte_cpu_get_flag_name(enum rte_cpu_flag_t feature)
 {
@@ -115,6 +117,7 @@ rte_cpu_get_flag_name(enum rte_cpu_flag_t feature)
 	return rte_cpu_feature_table[feature].name;
 }
 
+RTE_EXPORT_SYMBOL(rte_cpu_get_intrinsics_support)
 void
 rte_cpu_get_intrinsics_support(struct rte_cpu_intrinsics *intrinsics)
 {
diff --git a/lib/eal/riscv/rte_hypervisor.c b/lib/eal/riscv/rte_hypervisor.c
index 92b5435993..1d32c8bd93 100644
--- a/lib/eal/riscv/rte_hypervisor.c
+++ b/lib/eal/riscv/rte_hypervisor.c
@@ -6,6 +6,7 @@
 
 #include "rte_hypervisor.h"
 
+RTE_EXPORT_SYMBOL(rte_hypervisor_get)
 enum rte_hypervisor
 rte_hypervisor_get(void)
 {
diff --git a/lib/eal/riscv/rte_power_intrinsics.c b/lib/eal/riscv/rte_power_intrinsics.c
index 1c86573c19..06a4d0f52c 100644
--- a/lib/eal/riscv/rte_power_intrinsics.c
+++ b/lib/eal/riscv/rte_power_intrinsics.c
@@ -11,6 +11,7 @@
 /**
  * This function is not supported on RISC-V 64
  */
+RTE_EXPORT_SYMBOL(rte_power_monitor)
 int
 rte_power_monitor(const struct rte_power_monitor_cond *pmc,
 		  const uint64_t tsc_timestamp)
@@ -24,6 +25,7 @@ rte_power_monitor(const struct rte_power_monitor_cond *pmc,
 /**
  * This function is not supported on RISC-V 64
  */
+RTE_EXPORT_SYMBOL(rte_power_pause)
 int
 rte_power_pause(const uint64_t tsc_timestamp)
 {
@@ -35,6 +37,7 @@ rte_power_pause(const uint64_t tsc_timestamp)
 /**
  * This function is not supported on RISC-V 64
  */
+RTE_EXPORT_SYMBOL(rte_power_monitor_wakeup)
 int
 rte_power_monitor_wakeup(const unsigned int lcore_id)
 {
@@ -46,6 +49,7 @@ rte_power_monitor_wakeup(const unsigned int lcore_id)
 /**
  * This function is not supported on RISC-V 64
  */
+RTE_EXPORT_SYMBOL(rte_power_monitor_multi)
 int
 rte_power_monitor_multi(const struct rte_power_monitor_cond pmc[],
 			const uint32_t num, const uint64_t tsc_timestamp)
diff --git a/lib/eal/unix/eal_debug.c b/lib/eal/unix/eal_debug.c
index 69ba3758c2..6e955afbff 100644
--- a/lib/eal/unix/eal_debug.c
+++ b/lib/eal/unix/eal_debug.c
@@ -46,6 +46,7 @@ static char *safe_itoa(long val, char *buf, size_t len, unsigned int radix)
  * Most of libc is therefore not safe, include RTE_LOG (calls syslog);
  * backtrace_symbols (calls malloc), etc.
  */
+RTE_EXPORT_SYMBOL(rte_dump_stack)
 void rte_dump_stack(void)
 {
 	void *func[BACKTRACE_SIZE];
@@ -122,6 +123,7 @@ void rte_dump_stack(void)
 #else /* !RTE_BACKTRACE */
 
 /* stub if not enabled */
+RTE_EXPORT_SYMBOL(rte_dump_stack)
 void rte_dump_stack(void) { }
 
 #endif /* RTE_BACKTRACE */
diff --git a/lib/eal/unix/eal_filesystem.c b/lib/eal/unix/eal_filesystem.c
index 6cd5f1492c..94c0fdb73a 100644
--- a/lib/eal/unix/eal_filesystem.c
+++ b/lib/eal/unix/eal_filesystem.c
@@ -77,6 +77,7 @@ int eal_create_runtime_dir(void)
 }
 
 /* parse a sysfs (or other) file containing one integer value */
+RTE_EXPORT_SYMBOL(eal_parse_sysfs_value)
 int eal_parse_sysfs_value(const char *filename, unsigned long *val)
 {
 	FILE *f;
diff --git a/lib/eal/unix/eal_firmware.c b/lib/eal/unix/eal_firmware.c
index 0d69b1e3f0..f0ea6d99cf 100644
--- a/lib/eal/unix/eal_firmware.c
+++ b/lib/eal/unix/eal_firmware.c
@@ -146,6 +146,7 @@ firmware_read(const char *name, void **buf, size_t *bufsz)
 	return ret;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_firmware_read)
 int
 rte_firmware_read(const char *name, void **buf, size_t *bufsz)
 {
diff --git a/lib/eal/unix/eal_unix_memory.c b/lib/eal/unix/eal_unix_memory.c
index 97969a401b..9dd585cf6b 100644
--- a/lib/eal/unix/eal_unix_memory.c
+++ b/lib/eal/unix/eal_unix_memory.c
@@ -105,6 +105,7 @@ mem_rte_to_sys_prot(int prot)
 	return sys_prot;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_mem_map)
 void *
 rte_mem_map(void *requested_addr, size_t size, int prot, int flags,
 	int fd, uint64_t offset)
@@ -126,12 +127,14 @@ rte_mem_map(void *requested_addr, size_t size, int prot, int flags,
 	return mem_map(requested_addr, size, sys_prot, sys_flags, fd, offset);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_mem_unmap)
 int
 rte_mem_unmap(void *virt, size_t size)
 {
 	return mem_unmap(virt, size);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_mem_page_size)
 size_t
 rte_mem_page_size(void)
 {
@@ -143,6 +146,7 @@ rte_mem_page_size(void)
 	return page_size;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_mem_lock)
 int
 rte_mem_lock(const void *virt, size_t size)
 {
diff --git a/lib/eal/unix/eal_unix_timer.c b/lib/eal/unix/eal_unix_timer.c
index e71602b3a1..4db28f6f2a 100644
--- a/lib/eal/unix/eal_unix_timer.c
+++ b/lib/eal/unix/eal_unix_timer.c
@@ -7,6 +7,7 @@
 
 #include <rte_cycles.h>
 
+RTE_EXPORT_SYMBOL(rte_delay_us_sleep)
 void
 rte_delay_us_sleep(unsigned int us)
 {
diff --git a/lib/eal/unix/rte_thread.c b/lib/eal/unix/rte_thread.c
index ea629c2065..c478fbb111 100644
--- a/lib/eal/unix/rte_thread.c
+++ b/lib/eal/unix/rte_thread.c
@@ -118,6 +118,7 @@ thread_start_wrapper(void *arg)
 }
 #endif
 
+RTE_EXPORT_SYMBOL(rte_thread_create)
 int
 rte_thread_create(rte_thread_t *thread_id,
 		const rte_thread_attr_t *thread_attr,
@@ -226,6 +227,7 @@ rte_thread_create(rte_thread_t *thread_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_join)
 int
 rte_thread_join(rte_thread_t thread_id, uint32_t *value_ptr)
 {
@@ -248,18 +250,21 @@ rte_thread_join(rte_thread_t thread_id, uint32_t *value_ptr)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_detach)
 int
 rte_thread_detach(rte_thread_t thread_id)
 {
 	return pthread_detach((pthread_t)thread_id.opaque_id);
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_equal)
 int
 rte_thread_equal(rte_thread_t t1, rte_thread_t t2)
 {
 	return pthread_equal((pthread_t)t1.opaque_id, (pthread_t)t2.opaque_id);
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_self)
 rte_thread_t
 rte_thread_self(void)
 {
@@ -272,6 +277,7 @@ rte_thread_self(void)
 	return thread_id;
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_get_priority)
 int
 rte_thread_get_priority(rte_thread_t thread_id,
 	enum rte_thread_priority *priority)
@@ -294,6 +300,7 @@ rte_thread_get_priority(rte_thread_t thread_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_set_priority)
 int
 rte_thread_set_priority(rte_thread_t thread_id,
 	enum rte_thread_priority priority)
@@ -315,6 +322,7 @@ rte_thread_set_priority(rte_thread_t thread_id,
 		&param);
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_key_create)
 int
 rte_thread_key_create(rte_thread_key *key, void (*destructor)(void *))
 {
@@ -337,6 +345,7 @@ rte_thread_key_create(rte_thread_key *key, void (*destructor)(void *))
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_key_delete)
 int
 rte_thread_key_delete(rte_thread_key key)
 {
@@ -359,6 +368,7 @@ rte_thread_key_delete(rte_thread_key key)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_value_set)
 int
 rte_thread_value_set(rte_thread_key key, const void *value)
 {
@@ -379,6 +389,7 @@ rte_thread_value_set(rte_thread_key key, const void *value)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_value_get)
 void *
 rte_thread_value_get(rte_thread_key key)
 {
@@ -390,6 +401,7 @@ rte_thread_value_get(rte_thread_key key)
 	return pthread_getspecific(key->thread_index);
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_set_affinity_by_id)
 int
 rte_thread_set_affinity_by_id(rte_thread_t thread_id,
 		const rte_cpuset_t *cpuset)
@@ -398,6 +410,7 @@ rte_thread_set_affinity_by_id(rte_thread_t thread_id,
 		sizeof(*cpuset), cpuset);
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_get_affinity_by_id)
 int
 rte_thread_get_affinity_by_id(rte_thread_t thread_id,
 		rte_cpuset_t *cpuset)
diff --git a/lib/eal/windows/eal.c b/lib/eal/windows/eal.c
index 5c7526f922..de540d8d2a 100644
--- a/lib/eal/windows/eal.c
+++ b/lib/eal/windows/eal.c
@@ -74,6 +74,7 @@ eal_proc_type_detect(void)
 	return ptype;
 }
 
+RTE_EXPORT_SYMBOL(rte_mp_disable)
 bool
 rte_mp_disable(void)
 {
@@ -189,9 +190,12 @@ rte_eal_init_alert(const char *msg)
  * until eal_common_trace.c can be compiled.
  */
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(per_lcore_trace_point_sz, 20.05)
 RTE_DEFINE_PER_LCORE(volatile int, trace_point_sz);
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(per_lcore_trace_mem, 20.05)
 RTE_DEFINE_PER_LCORE(void *, trace_mem);
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_trace_mem_per_thread_alloc, 20.05)
 void
 __rte_trace_mem_per_thread_alloc(void)
 {
@@ -202,6 +206,7 @@ trace_mem_per_thread_free(void)
 {
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_trace_point_emit_field, 20.05)
 void
 __rte_trace_point_emit_field(size_t sz, const char *field,
 	const char *type)
@@ -211,6 +216,7 @@ __rte_trace_point_emit_field(size_t sz, const char *field,
 	RTE_SET_USED(type);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_trace_point_register, 20.05)
 int
 __rte_trace_point_register(rte_trace_point_t *trace, const char *name,
 	void (*register_fn)(void))
@@ -221,6 +227,7 @@ __rte_trace_point_register(rte_trace_point_t *trace, const char *name,
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_SYMBOL(rte_eal_cleanup)
 int
 rte_eal_cleanup(void)
 {
@@ -238,6 +245,7 @@ rte_eal_cleanup(void)
 }
 
 /* Launch threads, called at application init(). */
+RTE_EXPORT_SYMBOL(rte_eal_init)
 int
 rte_eal_init(int argc, char **argv)
 {
@@ -511,6 +519,7 @@ eal_asprintf(char **buffer, const char *format, ...)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_container_dma_map)
 int
 rte_vfio_container_dma_map(__rte_unused int container_fd,
 			__rte_unused uint64_t vaddr,
@@ -521,6 +530,7 @@ rte_vfio_container_dma_map(__rte_unused int container_fd,
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_vfio_container_dma_unmap)
 int
 rte_vfio_container_dma_unmap(__rte_unused int container_fd,
 			__rte_unused uint64_t vaddr,
@@ -531,6 +541,7 @@ rte_vfio_container_dma_unmap(__rte_unused int container_fd,
 	return -1;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_firmware_read)
 int
 rte_firmware_read(__rte_unused const char *name,
 			__rte_unused void **buf,
diff --git a/lib/eal/windows/eal_alarm.c b/lib/eal/windows/eal_alarm.c
index 5cd7b254a1..120ade1153 100644
--- a/lib/eal/windows/eal_alarm.c
+++ b/lib/eal/windows/eal_alarm.c
@@ -83,6 +83,7 @@ alarm_task_exec(void *arg)
 	task->ret = alarm_set(task->entry, task->deadline);
 }
 
+RTE_EXPORT_SYMBOL(rte_eal_alarm_set)
 int
 rte_eal_alarm_set(uint64_t us, rte_eal_alarm_callback cb_fn, void *cb_arg)
 {
@@ -184,6 +185,7 @@ alarm_matches(const struct alarm_entry *ap,
 	return (ap->cb_fn == cb_fn) && (any_arg || ap->cb_arg == cb_arg);
 }
 
+RTE_EXPORT_SYMBOL(rte_eal_alarm_cancel)
 int
 rte_eal_alarm_cancel(rte_eal_alarm_callback cb_fn, void *cb_arg)
 {
diff --git a/lib/eal/windows/eal_debug.c b/lib/eal/windows/eal_debug.c
index 4a6303a2a9..37c01357cd 100644
--- a/lib/eal/windows/eal_debug.c
+++ b/lib/eal/windows/eal_debug.c
@@ -14,6 +14,7 @@
 #define BACKTRACE_SIZE 256
 
 /* dump the stack of the calling core */
+RTE_EXPORT_SYMBOL(rte_dump_stack)
 void
 rte_dump_stack(void)
 {
diff --git a/lib/eal/windows/eal_dev.c b/lib/eal/windows/eal_dev.c
index e0b8c54dc5..661ea36417 100644
--- a/lib/eal/windows/eal_dev.c
+++ b/lib/eal/windows/eal_dev.c
@@ -6,6 +6,7 @@
 
 #include "eal_private.h"
 
+RTE_EXPORT_SYMBOL(rte_dev_event_monitor_start)
 int
 rte_dev_event_monitor_start(void)
 {
@@ -13,6 +14,7 @@ rte_dev_event_monitor_start(void)
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_dev_event_monitor_stop)
 int
 rte_dev_event_monitor_stop(void)
 {
@@ -20,6 +22,7 @@ rte_dev_event_monitor_stop(void)
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_dev_hotplug_handle_enable)
 int
 rte_dev_hotplug_handle_enable(void)
 {
@@ -27,6 +30,7 @@ rte_dev_hotplug_handle_enable(void)
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_dev_hotplug_handle_disable)
 int
 rte_dev_hotplug_handle_disable(void)
 {
diff --git a/lib/eal/windows/eal_interrupts.c b/lib/eal/windows/eal_interrupts.c
index c97118d231..36a88cfb65 100644
--- a/lib/eal/windows/eal_interrupts.c
+++ b/lib/eal/windows/eal_interrupts.c
@@ -108,12 +108,14 @@ rte_eal_intr_init(void)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_is_intr)
 int
 rte_thread_is_intr(void)
 {
 	return rte_thread_equal(intr_thread, rte_thread_self());
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_rx_ctl)
 int
 rte_intr_rx_ctl(__rte_unused struct rte_intr_handle *intr_handle,
 		__rte_unused int epfd, __rte_unused int op,
@@ -147,6 +149,7 @@ eal_intr_thread_cancel(void)
 	WaitForSingleObject(intr_thread_handle, INFINITE);
 }
 
+RTE_EXPORT_SYMBOL(rte_intr_callback_register)
 int
 rte_intr_callback_register(
 	__rte_unused const struct rte_intr_handle *intr_handle,
@@ -155,6 +158,7 @@ rte_intr_callback_register(
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_SYMBOL(rte_intr_callback_unregister_pending)
 int
 rte_intr_callback_unregister_pending(
 	__rte_unused const struct rte_intr_handle *intr_handle,
@@ -164,6 +168,7 @@ rte_intr_callback_unregister_pending(
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_SYMBOL(rte_intr_callback_unregister)
 int
 rte_intr_callback_unregister(
 	__rte_unused const struct rte_intr_handle *intr_handle,
@@ -172,6 +177,7 @@ rte_intr_callback_unregister(
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_intr_callback_unregister_sync)
 int
 rte_intr_callback_unregister_sync(
 	__rte_unused const struct rte_intr_handle *intr_handle,
@@ -180,24 +186,28 @@ rte_intr_callback_unregister_sync(
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_intr_enable)
 int
 rte_intr_enable(__rte_unused const struct rte_intr_handle *intr_handle)
 {
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_SYMBOL(rte_intr_ack)
 int
 rte_intr_ack(__rte_unused const struct rte_intr_handle *intr_handle)
 {
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_SYMBOL(rte_intr_disable)
 int
 rte_intr_disable(__rte_unused const struct rte_intr_handle *intr_handle)
 {
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_efd_enable)
 int
 rte_intr_efd_enable(struct rte_intr_handle *intr_handle, uint32_t nb_efd)
 {
@@ -207,12 +217,14 @@ rte_intr_efd_enable(struct rte_intr_handle *intr_handle, uint32_t nb_efd)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_efd_disable)
 void
 rte_intr_efd_disable(struct rte_intr_handle *intr_handle)
 {
 	RTE_SET_USED(intr_handle);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_dp_is_en)
 int
 rte_intr_dp_is_en(struct rte_intr_handle *intr_handle)
 {
@@ -221,6 +233,7 @@ rte_intr_dp_is_en(struct rte_intr_handle *intr_handle)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_allow_others)
 int
 rte_intr_allow_others(struct rte_intr_handle *intr_handle)
 {
@@ -229,6 +242,7 @@ rte_intr_allow_others(struct rte_intr_handle *intr_handle)
 	return 1;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_cap_multiple)
 int
 rte_intr_cap_multiple(struct rte_intr_handle *intr_handle)
 {
@@ -237,6 +251,7 @@ rte_intr_cap_multiple(struct rte_intr_handle *intr_handle)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_epoll_wait)
 int
 rte_epoll_wait(int epfd, struct rte_epoll_event *events,
 		int maxevents, int timeout)
@@ -249,6 +264,7 @@ rte_epoll_wait(int epfd, struct rte_epoll_event *events,
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_SYMBOL(rte_epoll_wait_interruptible)
 int
 rte_epoll_wait_interruptible(int epfd, struct rte_epoll_event *events,
 			     int maxevents, int timeout)
@@ -261,6 +277,7 @@ rte_epoll_wait_interruptible(int epfd, struct rte_epoll_event *events,
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_SYMBOL(rte_epoll_ctl)
 int
 rte_epoll_ctl(int epfd, int op, int fd, struct rte_epoll_event *event)
 {
@@ -272,12 +289,14 @@ rte_epoll_ctl(int epfd, int op, int fd, struct rte_epoll_event *event)
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_tls_epfd)
 int
 rte_intr_tls_epfd(void)
 {
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_intr_free_epoll_fd)
 void
 rte_intr_free_epoll_fd(struct rte_intr_handle *intr_handle)
 {
diff --git a/lib/eal/windows/eal_memory.c b/lib/eal/windows/eal_memory.c
index 8de92d4089..47acb4c953 100644
--- a/lib/eal/windows/eal_memory.c
+++ b/lib/eal/windows/eal_memory.c
@@ -212,6 +212,7 @@ eal_mem_virt2iova_cleanup(void)
 		CloseHandle(virt2phys_device);
 }
 
+RTE_EXPORT_SYMBOL(rte_mem_virt2phy)
 phys_addr_t
 rte_mem_virt2phy(const void *virt)
 {
@@ -232,6 +233,7 @@ rte_mem_virt2phy(const void *virt)
 	return phys.QuadPart;
 }
 
+RTE_EXPORT_SYMBOL(rte_mem_virt2iova)
 rte_iova_t
 rte_mem_virt2iova(const void *virt)
 {
@@ -247,6 +249,7 @@ rte_mem_virt2iova(const void *virt)
 }
 
 /* Always using physical addresses under Windows if they can be obtained. */
+RTE_EXPORT_SYMBOL(rte_eal_using_phys_addrs)
 int
 rte_eal_using_phys_addrs(void)
 {
@@ -518,6 +521,7 @@ eal_mem_set_dump(void *virt, size_t size, bool dump)
 	return -1;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_mem_map)
 void *
 rte_mem_map(void *requested_addr, size_t size, int prot, int flags,
 	int fd, uint64_t offset)
@@ -601,6 +605,7 @@ rte_mem_map(void *requested_addr, size_t size, int prot, int flags,
 	return virt;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_mem_unmap)
 int
 rte_mem_unmap(void *virt, size_t size)
 {
@@ -624,6 +629,7 @@ eal_get_baseaddr(void)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_mem_page_size)
 size_t
 rte_mem_page_size(void)
 {
@@ -635,6 +641,7 @@ rte_mem_page_size(void)
 	return info.dwPageSize;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_mem_lock)
 int
 rte_mem_lock(const void *virt, size_t size)
 {
diff --git a/lib/eal/windows/eal_mp.c b/lib/eal/windows/eal_mp.c
index 76413f49a3..7be7de870a 100644
--- a/lib/eal/windows/eal_mp.c
+++ b/lib/eal/windows/eal_mp.c
@@ -24,6 +24,7 @@ rte_mp_channel_cleanup(void)
 	EAL_LOG_NOT_IMPLEMENTED();
 }
 
+RTE_EXPORT_SYMBOL(rte_mp_action_register)
 int
 rte_mp_action_register(const char *name, rte_mp_t action)
 {
@@ -33,6 +34,7 @@ rte_mp_action_register(const char *name, rte_mp_t action)
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_mp_action_unregister)
 void
 rte_mp_action_unregister(const char *name)
 {
@@ -40,6 +42,7 @@ rte_mp_action_unregister(const char *name)
 	EAL_LOG_NOT_IMPLEMENTED();
 }
 
+RTE_EXPORT_SYMBOL(rte_mp_sendmsg)
 int
 rte_mp_sendmsg(struct rte_mp_msg *msg)
 {
@@ -48,6 +51,7 @@ rte_mp_sendmsg(struct rte_mp_msg *msg)
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_mp_request_sync)
 int
 rte_mp_request_sync(struct rte_mp_msg *req, struct rte_mp_reply *reply,
 	const struct timespec *ts)
@@ -59,6 +63,7 @@ rte_mp_request_sync(struct rte_mp_msg *req, struct rte_mp_reply *reply,
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_mp_request_async)
 int
 rte_mp_request_async(struct rte_mp_msg *req, const struct timespec *ts,
 		rte_mp_async_reply_t clb)
@@ -70,6 +75,7 @@ rte_mp_request_async(struct rte_mp_msg *req, const struct timespec *ts,
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_mp_reply)
 int
 rte_mp_reply(struct rte_mp_msg *msg, const char *peer)
 {
diff --git a/lib/eal/windows/eal_thread.c b/lib/eal/windows/eal_thread.c
index 9e3df200b9..648dd862bb 100644
--- a/lib/eal/windows/eal_thread.c
+++ b/lib/eal/windows/eal_thread.c
@@ -71,6 +71,7 @@ eal_thread_ack_command(void)
 }
 
 /* get current thread ID */
+RTE_EXPORT_SYMBOL(rte_sys_gettid)
 int
 rte_sys_gettid(void)
 {
diff --git a/lib/eal/windows/eal_timer.c b/lib/eal/windows/eal_timer.c
index 020035c4cc..9c1576d91c 100644
--- a/lib/eal/windows/eal_timer.c
+++ b/lib/eal/windows/eal_timer.c
@@ -14,6 +14,7 @@
 #define US_PER_SEC 1E6
 #define CYC_PER_100KHZ 1E5
 
+RTE_EXPORT_SYMBOL(rte_delay_us_sleep)
 void
 rte_delay_us_sleep(unsigned int us)
 {
diff --git a/lib/eal/windows/rte_thread.c b/lib/eal/windows/rte_thread.c
index 6f991dfa5d..023202978c 100644
--- a/lib/eal/windows/rte_thread.c
+++ b/lib/eal/windows/rte_thread.c
@@ -181,6 +181,7 @@ thread_func_wrapper(void *arg)
 	return (DWORD)ctx.thread_func(ctx.routine_args);
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_create)
 int
 rte_thread_create(rte_thread_t *thread_id,
 		  const rte_thread_attr_t *thread_attr,
@@ -258,6 +259,7 @@ rte_thread_create(rte_thread_t *thread_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_join)
 int
 rte_thread_join(rte_thread_t thread_id, uint32_t *value_ptr)
 {
@@ -298,6 +300,7 @@ rte_thread_join(rte_thread_t thread_id, uint32_t *value_ptr)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_detach)
 int
 rte_thread_detach(rte_thread_t thread_id)
 {
@@ -307,12 +310,14 @@ rte_thread_detach(rte_thread_t thread_id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_equal)
 int
 rte_thread_equal(rte_thread_t t1, rte_thread_t t2)
 {
 	return t1.opaque_id == t2.opaque_id;
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_self)
 rte_thread_t
 rte_thread_self(void)
 {
@@ -323,6 +328,7 @@ rte_thread_self(void)
 	return thread_id;
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_set_name)
 void
 rte_thread_set_name(rte_thread_t thread_id, const char *thread_name)
 {
@@ -364,6 +370,7 @@ rte_thread_set_name(rte_thread_t thread_id, const char *thread_name)
 		EAL_LOG(DEBUG, "Failed to set thread name");
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_get_priority)
 int
 rte_thread_get_priority(rte_thread_t thread_id,
 	enum rte_thread_priority *priority)
@@ -403,6 +410,7 @@ rte_thread_get_priority(rte_thread_t thread_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_set_priority)
 int
 rte_thread_set_priority(rte_thread_t thread_id,
 			enum rte_thread_priority priority)
@@ -441,6 +449,7 @@ rte_thread_set_priority(rte_thread_t thread_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_key_create)
 int
 rte_thread_key_create(rte_thread_key *key,
 		__rte_unused void (*destructor)(void *))
@@ -461,6 +470,7 @@ rte_thread_key_create(rte_thread_key *key,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_key_delete)
 int
 rte_thread_key_delete(rte_thread_key key)
 {
@@ -479,6 +489,7 @@ rte_thread_key_delete(rte_thread_key key)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_value_set)
 int
 rte_thread_value_set(rte_thread_key key, const void *value)
 {
@@ -499,6 +510,7 @@ rte_thread_value_set(rte_thread_key key, const void *value)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_value_get)
 void *
 rte_thread_value_get(rte_thread_key key)
 {
@@ -518,6 +530,7 @@ rte_thread_value_get(rte_thread_key key)
 	return output;
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_set_affinity_by_id)
 int
 rte_thread_set_affinity_by_id(rte_thread_t thread_id,
 		const rte_cpuset_t *cpuset)
@@ -558,6 +571,7 @@ rte_thread_set_affinity_by_id(rte_thread_t thread_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_thread_get_affinity_by_id)
 int
 rte_thread_get_affinity_by_id(rte_thread_t thread_id,
 		rte_cpuset_t *cpuset)
diff --git a/lib/eal/x86/rte_cpuflags.c b/lib/eal/x86/rte_cpuflags.c
index 90389c66fc..d45fd5c0e5 100644
--- a/lib/eal/x86/rte_cpuflags.c
+++ b/lib/eal/x86/rte_cpuflags.c
@@ -148,6 +148,7 @@ struct feature_entry rte_cpu_feature_table[] = {
 	FEAT_DEF(INVTSC, 0x80000007, 0, RTE_REG_EDX,  8)
 };
 
+RTE_EXPORT_SYMBOL(rte_cpu_get_flag_enabled)
 int
 rte_cpu_get_flag_enabled(enum rte_cpu_flag_t feature)
 {
@@ -190,6 +191,7 @@ rte_cpu_get_flag_enabled(enum rte_cpu_flag_t feature)
 	return feat->value;
 }
 
+RTE_EXPORT_SYMBOL(rte_cpu_get_flag_name)
 const char *
 rte_cpu_get_flag_name(enum rte_cpu_flag_t feature)
 {
@@ -198,6 +200,7 @@ rte_cpu_get_flag_name(enum rte_cpu_flag_t feature)
 	return rte_cpu_feature_table[feature].name;
 }
 
+RTE_EXPORT_SYMBOL(rte_cpu_get_intrinsics_support)
 void
 rte_cpu_get_intrinsics_support(struct rte_cpu_intrinsics *intrinsics)
 {
diff --git a/lib/eal/x86/rte_hypervisor.c b/lib/eal/x86/rte_hypervisor.c
index 04fe76751a..acf3920dbb 100644
--- a/lib/eal/x86/rte_hypervisor.c
+++ b/lib/eal/x86/rte_hypervisor.c
@@ -13,6 +13,7 @@
 /* See http://lwn.net/Articles/301888/ */
 #define HYPERVISOR_INFO_LEAF 0x40000000
 
+RTE_EXPORT_SYMBOL(rte_hypervisor_get)
 enum rte_hypervisor
 rte_hypervisor_get(void)
 {
diff --git a/lib/eal/x86/rte_power_intrinsics.c b/lib/eal/x86/rte_power_intrinsics.c
index f7d558153e..1c3676c794 100644
--- a/lib/eal/x86/rte_power_intrinsics.c
+++ b/lib/eal/x86/rte_power_intrinsics.c
@@ -158,6 +158,7 @@ __check_val_size(const uint8_t sz)
  * For more information about usage of these instructions, please refer to
  * Intel(R) 64 and IA-32 Architectures Software Developer's Manual.
  */
+RTE_EXPORT_SYMBOL(rte_power_monitor)
 int
 rte_power_monitor(const struct rte_power_monitor_cond *pmc,
 		const uint64_t tsc_timestamp)
@@ -219,6 +220,7 @@ rte_power_monitor(const struct rte_power_monitor_cond *pmc,
  * information about usage of this instruction, please refer to Intel(R) 64 and
  * IA-32 Architectures Software Developer's Manual.
  */
+RTE_EXPORT_SYMBOL(rte_power_pause)
 int
 rte_power_pause(const uint64_t tsc_timestamp)
 {
@@ -263,6 +265,7 @@ RTE_INIT(rte_power_intrinsics_init) {
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_power_monitor_wakeup)
 int
 rte_power_monitor_wakeup(const unsigned int lcore_id)
 {
@@ -312,6 +315,7 @@ rte_power_monitor_wakeup(const unsigned int lcore_id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_power_monitor_multi)
 int
 rte_power_monitor_multi(const struct rte_power_monitor_cond pmc[],
 		const uint32_t num, const uint64_t tsc_timestamp)
diff --git a/lib/eal/x86/rte_spinlock.c b/lib/eal/x86/rte_spinlock.c
index 34890ea87c..83592b0b9e 100644
--- a/lib/eal/x86/rte_spinlock.c
+++ b/lib/eal/x86/rte_spinlock.c
@@ -6,6 +6,7 @@
 
 #include "rte_cpuflags.h"
 
+RTE_EXPORT_SYMBOL(rte_rtm_supported)
 uint8_t rte_rtm_supported; /* cache the flag to avoid the overhead
 			      of the rte_cpu_get_flag_enabled function */
 
diff --git a/lib/efd/rte_efd.c b/lib/efd/rte_efd.c
index 3cbb3c2719..97dfc133af 100644
--- a/lib/efd/rte_efd.c
+++ b/lib/efd/rte_efd.c
@@ -496,6 +496,7 @@ efd_search_hash(struct rte_efd_table * const table,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_efd_create)
 struct rte_efd_table *
 rte_efd_create(const char *name, uint32_t max_num_rules, uint32_t key_len,
 		uint64_t online_cpu_socket_bitmask, uint8_t offline_cpu_socket)
@@ -720,6 +721,7 @@ rte_efd_create(const char *name, uint32_t max_num_rules, uint32_t key_len,
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_efd_find_existing)
 struct rte_efd_table *
 rte_efd_find_existing(const char *name)
 {
@@ -746,6 +748,7 @@ rte_efd_find_existing(const char *name)
 	return table;
 }
 
+RTE_EXPORT_SYMBOL(rte_efd_free)
 void
 rte_efd_free(struct rte_efd_table *table)
 {
@@ -1162,6 +1165,7 @@ efd_compute_update(struct rte_efd_table * const table,
 	return RTE_EFD_UPDATE_FAILED;
 }
 
+RTE_EXPORT_SYMBOL(rte_efd_update)
 int
 rte_efd_update(struct rte_efd_table * const table, const unsigned int socket_id,
 		const void *key, const efd_value_t value)
@@ -1185,6 +1189,7 @@ rte_efd_update(struct rte_efd_table * const table, const unsigned int socket_id,
 	return status;
 }
 
+RTE_EXPORT_SYMBOL(rte_efd_delete)
 int
 rte_efd_delete(struct rte_efd_table * const table, const unsigned int socket_id,
 		const void *key, efd_value_t * const prev_value)
@@ -1301,6 +1306,7 @@ efd_lookup_internal(const struct efd_online_group_entry * const group,
 	return value;
 }
 
+RTE_EXPORT_SYMBOL(rte_efd_lookup)
 efd_value_t
 rte_efd_lookup(const struct rte_efd_table * const table,
 		const unsigned int socket_id, const void *key)
@@ -1322,6 +1328,7 @@ rte_efd_lookup(const struct rte_efd_table * const table,
 			table->lookup_fn);
 }
 
+RTE_EXPORT_SYMBOL(rte_efd_lookup_bulk)
 void rte_efd_lookup_bulk(const struct rte_efd_table * const table,
 		const unsigned int socket_id, const int num_keys,
 		const void **key_list, efd_value_t * const value_list)
diff --git a/lib/ethdev/ethdev_driver.c b/lib/ethdev/ethdev_driver.c
index e1976db05f..5846f3c298 100644
--- a/lib/ethdev/ethdev_driver.c
+++ b/lib/ethdev/ethdev_driver.c
@@ -74,6 +74,7 @@ eth_dev_get(uint16_t port_id)
 	return eth_dev;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eth_dev_allocate)
 struct rte_eth_dev *
 rte_eth_dev_allocate(const char *name)
 {
@@ -128,6 +129,7 @@ rte_eth_dev_allocate(const char *name)
 	return eth_dev;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eth_dev_allocated)
 struct rte_eth_dev *
 rte_eth_dev_allocated(const char *name)
 {
@@ -150,6 +152,7 @@ rte_eth_dev_allocated(const char *name)
  * makes sure that the same device would have the same port ID both
  * in the primary and secondary process.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eth_dev_attach_secondary)
 struct rte_eth_dev *
 rte_eth_dev_attach_secondary(const char *name)
 {
@@ -180,6 +183,7 @@ rte_eth_dev_attach_secondary(const char *name)
 	return eth_dev;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eth_dev_callback_process)
 int
 rte_eth_dev_callback_process(struct rte_eth_dev *dev,
 	enum rte_eth_event_type event, void *ret_param)
@@ -207,6 +211,7 @@ rte_eth_dev_callback_process(struct rte_eth_dev *dev,
 	return rc;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eth_dev_probing_finish)
 void
 rte_eth_dev_probing_finish(struct rte_eth_dev *dev)
 {
@@ -226,6 +231,7 @@ rte_eth_dev_probing_finish(struct rte_eth_dev *dev)
 	dev->state = RTE_ETH_DEV_ATTACHED;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eth_dev_release_port)
 int
 rte_eth_dev_release_port(struct rte_eth_dev *eth_dev)
 {
@@ -284,6 +290,7 @@ rte_eth_dev_release_port(struct rte_eth_dev *eth_dev)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eth_dev_create)
 int
 rte_eth_dev_create(struct rte_device *device, const char *name,
 	size_t priv_data_size,
@@ -359,6 +366,7 @@ rte_eth_dev_create(struct rte_device *device, const char *name,
 	return retval;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eth_dev_destroy)
 int
 rte_eth_dev_destroy(struct rte_eth_dev *ethdev,
 	ethdev_uninit_t ethdev_uninit)
@@ -379,6 +387,7 @@ rte_eth_dev_destroy(struct rte_eth_dev *ethdev,
 	return rte_eth_dev_release_port(ethdev);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eth_dev_get_by_name)
 struct rte_eth_dev *
 rte_eth_dev_get_by_name(const char *name)
 {
@@ -390,6 +399,7 @@ rte_eth_dev_get_by_name(const char *name)
 	return &rte_eth_devices[pid];
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eth_dev_is_rx_hairpin_queue)
 int
 rte_eth_dev_is_rx_hairpin_queue(struct rte_eth_dev *dev, uint16_t queue_id)
 {
@@ -398,6 +408,7 @@ rte_eth_dev_is_rx_hairpin_queue(struct rte_eth_dev *dev, uint16_t queue_id)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eth_dev_is_tx_hairpin_queue)
 int
 rte_eth_dev_is_tx_hairpin_queue(struct rte_eth_dev *dev, uint16_t queue_id)
 {
@@ -406,6 +417,7 @@ rte_eth_dev_is_tx_hairpin_queue(struct rte_eth_dev *dev, uint16_t queue_id)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eth_dev_internal_reset)
 void
 rte_eth_dev_internal_reset(struct rte_eth_dev *dev)
 {
@@ -616,6 +628,7 @@ eth_dev_tokenise_representor_list(char *p_val, struct rte_eth_devargs *eth_devar
 	return result;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eth_devargs_parse)
 int
 rte_eth_devargs_parse(const char *dargs, struct rte_eth_devargs *eth_devargs,
 		      unsigned int nb_da)
@@ -678,6 +691,7 @@ eth_dev_dma_mzone_name(char *name, size_t len, uint16_t port_id, uint16_t queue_
 			port_id, queue_id, ring_name);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eth_dma_zone_free)
 int
 rte_eth_dma_zone_free(const struct rte_eth_dev *dev, const char *ring_name,
 		uint16_t queue_id)
@@ -702,6 +716,7 @@ rte_eth_dma_zone_free(const struct rte_eth_dev *dev, const char *ring_name,
 	return rc;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eth_dma_zone_reserve)
 const struct rte_memzone *
 rte_eth_dma_zone_reserve(const struct rte_eth_dev *dev, const char *ring_name,
 			 uint16_t queue_id, size_t size, unsigned int align,
@@ -737,6 +752,7 @@ rte_eth_dma_zone_reserve(const struct rte_eth_dev *dev, const char *ring_name,
 			RTE_MEMZONE_IOVA_CONTIG, align);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eth_hairpin_queue_peer_bind)
 int
 rte_eth_hairpin_queue_peer_bind(uint16_t cur_port, uint16_t cur_queue,
 				struct rte_hairpin_peer_info *peer_info,
@@ -755,6 +771,7 @@ rte_eth_hairpin_queue_peer_bind(uint16_t cur_port, uint16_t cur_queue,
 	return dev->dev_ops->hairpin_queue_peer_bind(dev, cur_queue, peer_info, direction);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eth_hairpin_queue_peer_unbind)
 int
 rte_eth_hairpin_queue_peer_unbind(uint16_t cur_port, uint16_t cur_queue,
 				  uint32_t direction)
@@ -769,6 +786,7 @@ rte_eth_hairpin_queue_peer_unbind(uint16_t cur_port, uint16_t cur_queue,
 	return dev->dev_ops->hairpin_queue_peer_unbind(dev, cur_queue, direction);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eth_hairpin_queue_peer_update)
 int
 rte_eth_hairpin_queue_peer_update(uint16_t peer_port, uint16_t peer_queue,
 				  struct rte_hairpin_peer_info *cur_info,
@@ -790,6 +808,7 @@ rte_eth_hairpin_queue_peer_update(uint16_t peer_port, uint16_t peer_queue,
 						       cur_info, peer_info, direction);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eth_ip_reassembly_dynfield_register)
 int
 rte_eth_ip_reassembly_dynfield_register(int *field_offset, int *flag_offset)
 {
@@ -818,6 +837,7 @@ rte_eth_ip_reassembly_dynfield_register(int *field_offset, int *flag_offset)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eth_pkt_burst_dummy)
 uint16_t
 rte_eth_pkt_burst_dummy(void *queue __rte_unused,
 		struct rte_mbuf **pkts __rte_unused,
@@ -826,6 +846,7 @@ rte_eth_pkt_burst_dummy(void *queue __rte_unused,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eth_representor_id_get)
 int
 rte_eth_representor_id_get(uint16_t port_id,
 			   enum rte_eth_representor_type type,
@@ -921,6 +942,7 @@ rte_eth_representor_id_get(uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eth_switch_domain_alloc)
 int
 rte_eth_switch_domain_alloc(uint16_t *domain_id)
 {
@@ -941,6 +963,7 @@ rte_eth_switch_domain_alloc(uint16_t *domain_id)
 	return -ENOSPC;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eth_switch_domain_free)
 int
 rte_eth_switch_domain_free(uint16_t domain_id)
 {
@@ -957,6 +980,7 @@ rte_eth_switch_domain_free(uint16_t domain_id)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eth_get_restore_flags)
 uint64_t
 rte_eth_get_restore_flags(struct rte_eth_dev *dev, enum rte_eth_dev_operation op)
 {
diff --git a/lib/ethdev/ethdev_linux_ethtool.c b/lib/ethdev/ethdev_linux_ethtool.c
index e792204b01..7c144bd800 100644
--- a/lib/ethdev/ethdev_linux_ethtool.c
+++ b/lib/ethdev/ethdev_linux_ethtool.c
@@ -111,6 +111,7 @@ static const uint32_t link_modes[] = {
 	[101] =      11, /* ETHTOOL_LINK_MODE_10baseT1S_P2MP_Half_BIT */
 };
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eth_link_speed_ethtool)
 uint32_t
 rte_eth_link_speed_ethtool(enum ethtool_link_mode_bit_indices bit)
 {
@@ -134,6 +135,7 @@ rte_eth_link_speed_ethtool(enum ethtool_link_mode_bit_indices bit)
 	return rte_eth_speed_bitflag(speed, duplex);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eth_link_speed_glink)
 uint32_t
 rte_eth_link_speed_glink(const uint32_t *bitmap, int8_t nwords)
 {
@@ -154,6 +156,7 @@ rte_eth_link_speed_glink(const uint32_t *bitmap, int8_t nwords)
 	return ethdev_bitmap;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eth_link_speed_gset)
 uint32_t
 rte_eth_link_speed_gset(uint32_t legacy_bitmap)
 {
diff --git a/lib/ethdev/ethdev_private.c b/lib/ethdev/ethdev_private.c
index cc7fd97d4a..67ea0f1fd9 100644
--- a/lib/ethdev/ethdev_private.c
+++ b/lib/ethdev/ethdev_private.c
@@ -285,6 +285,7 @@ eth_dev_fp_ops_setup(struct rte_eth_fp_ops *fpo,
 	fpo->txq.clbk = (void * __rte_atomic *)(uintptr_t)dev->pre_tx_burst_cbs;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_call_rx_callbacks)
 uint16_t
 rte_eth_call_rx_callbacks(uint16_t port_id, uint16_t queue_id,
 	struct rte_mbuf **rx_pkts, uint16_t nb_rx, uint16_t nb_pkts,
@@ -308,6 +309,7 @@ rte_eth_call_rx_callbacks(uint16_t port_id, uint16_t queue_id,
 	return nb_rx;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_call_tx_callbacks)
 uint16_t
 rte_eth_call_tx_callbacks(uint16_t port_id, uint16_t queue_id,
 	struct rte_mbuf **tx_pkts, uint16_t nb_pkts, void *opaque)
diff --git a/lib/ethdev/ethdev_trace_points.c b/lib/ethdev/ethdev_trace_points.c
index cb99cf91fc..67dc878eb6 100644
--- a/lib/ethdev/ethdev_trace_points.c
+++ b/lib/ethdev/ethdev_trace_points.c
@@ -25,24 +25,30 @@ RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_stop,
 RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_close,
 	lib.ethdev.close)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_ethdev_trace_rx_burst_empty, 24.11)
 RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_rx_burst_empty,
 	lib.ethdev.rx.burst.empty)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_ethdev_trace_rx_burst_nonempty, 24.11)
 RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_rx_burst_nonempty,
 	lib.ethdev.rx.burst.nonempty)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_ethdev_trace_tx_burst, 20.05)
 RTE_TRACE_POINT_REGISTER(rte_ethdev_trace_tx_burst,
 	lib.ethdev.tx.burst)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_eth_trace_call_rx_callbacks_empty, 24.11)
 RTE_TRACE_POINT_REGISTER(rte_eth_trace_call_rx_callbacks_empty,
 	lib.ethdev.call_rx_callbacks.empty)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_eth_trace_call_rx_callbacks_nonempty, 24.11)
 RTE_TRACE_POINT_REGISTER(rte_eth_trace_call_rx_callbacks_nonempty,
 	lib.ethdev.call_rx_callbacks.nonempty)
 
 RTE_TRACE_POINT_REGISTER(rte_eth_trace_call_tx_callbacks,
 	lib.ethdev.call_tx_callbacks)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_eth_trace_tx_queue_count, 24.03)
 RTE_TRACE_POINT_REGISTER(rte_eth_trace_tx_queue_count,
 	lib.ethdev.tx_queue_count)
 
diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index 85798d0ebc..db8e44ad61 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -38,9 +38,11 @@
 
 #define ETH_XSTATS_ITER_NUM	0x100
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eth_devices)
 struct rte_eth_dev rte_eth_devices[RTE_MAX_ETHPORTS];
 
 /* public fast-path API */
+RTE_EXPORT_SYMBOL(rte_eth_fp_ops)
 struct rte_eth_fp_ops rte_eth_fp_ops[RTE_MAX_ETHPORTS];
 
 /* spinlock for add/remove Rx callbacks */
@@ -173,6 +175,7 @@ static const struct {
 	{RTE_ETH_HASH_FUNCTION_SYMMETRIC_TOEPLITZ_SORT, "symmetric_toeplitz_sort"},
 };
 
+RTE_EXPORT_SYMBOL(rte_eth_iterator_init)
 int
 rte_eth_iterator_init(struct rte_dev_iterator *iter, const char *devargs_str)
 {
@@ -289,6 +292,7 @@ rte_eth_iterator_init(struct rte_dev_iterator *iter, const char *devargs_str)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_iterator_next)
 uint16_t
 rte_eth_iterator_next(struct rte_dev_iterator *iter)
 {
@@ -329,6 +333,7 @@ rte_eth_iterator_next(struct rte_dev_iterator *iter)
 	return RTE_MAX_ETHPORTS;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_iterator_cleanup)
 void
 rte_eth_iterator_cleanup(struct rte_dev_iterator *iter)
 {
@@ -347,6 +352,7 @@ rte_eth_iterator_cleanup(struct rte_dev_iterator *iter)
 	memset(iter, 0, sizeof(*iter));
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_find_next)
 uint16_t
 rte_eth_find_next(uint16_t port_id)
 {
@@ -371,6 +377,7 @@ rte_eth_find_next(uint16_t port_id)
 	     port_id < RTE_MAX_ETHPORTS; \
 	     port_id = rte_eth_find_next(port_id + 1))
 
+RTE_EXPORT_SYMBOL(rte_eth_find_next_of)
 uint16_t
 rte_eth_find_next_of(uint16_t port_id, const struct rte_device *parent)
 {
@@ -384,6 +391,7 @@ rte_eth_find_next_of(uint16_t port_id, const struct rte_device *parent)
 	return port_id;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_find_next_sibling)
 uint16_t
 rte_eth_find_next_sibling(uint16_t port_id, uint16_t ref_port_id)
 {
@@ -404,6 +412,7 @@ eth_dev_is_allocated(const struct rte_eth_dev *ethdev)
 	return ethdev->data != NULL && ethdev->data->name[0] != '\0';
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_is_valid_port)
 int
 rte_eth_dev_is_valid_port(uint16_t port_id)
 {
@@ -430,6 +439,7 @@ eth_is_valid_owner_id(uint64_t owner_id)
 	return 1;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_find_next_owned_by)
 uint64_t
 rte_eth_find_next_owned_by(uint16_t port_id, const uint64_t owner_id)
 {
@@ -443,6 +453,7 @@ rte_eth_find_next_owned_by(uint16_t port_id, const uint64_t owner_id)
 	return port_id;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_owner_new)
 int
 rte_eth_dev_owner_new(uint64_t *owner_id)
 {
@@ -518,6 +529,7 @@ eth_dev_owner_set(const uint16_t port_id, const uint64_t old_owner_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_owner_set)
 int
 rte_eth_dev_owner_set(const uint16_t port_id,
 		      const struct rte_eth_dev_owner *owner)
@@ -538,6 +550,7 @@ rte_eth_dev_owner_set(const uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_owner_unset)
 int
 rte_eth_dev_owner_unset(const uint16_t port_id, const uint64_t owner_id)
 {
@@ -559,6 +572,7 @@ rte_eth_dev_owner_unset(const uint16_t port_id, const uint64_t owner_id)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_owner_delete)
 int
 rte_eth_dev_owner_delete(const uint64_t owner_id)
 {
@@ -596,6 +610,7 @@ rte_eth_dev_owner_delete(const uint64_t owner_id)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_owner_get)
 int
 rte_eth_dev_owner_get(const uint16_t port_id, struct rte_eth_dev_owner *owner)
 {
@@ -634,6 +649,7 @@ rte_eth_dev_owner_get(const uint16_t port_id, struct rte_eth_dev_owner *owner)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_socket_id)
 int
 rte_eth_dev_socket_id(uint16_t port_id)
 {
@@ -659,6 +675,7 @@ rte_eth_dev_socket_id(uint16_t port_id)
 	return socket_id;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_get_sec_ctx)
 void *
 rte_eth_dev_get_sec_ctx(uint16_t port_id)
 {
@@ -672,6 +689,7 @@ rte_eth_dev_get_sec_ctx(uint16_t port_id)
 	return ctx;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_count_avail)
 uint16_t
 rte_eth_dev_count_avail(void)
 {
@@ -688,6 +706,7 @@ rte_eth_dev_count_avail(void)
 	return count;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_count_total)
 uint16_t
 rte_eth_dev_count_total(void)
 {
@@ -701,6 +720,7 @@ rte_eth_dev_count_total(void)
 	return count;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_get_name_by_port)
 int
 rte_eth_dev_get_name_by_port(uint16_t port_id, char *name)
 {
@@ -727,6 +747,7 @@ rte_eth_dev_get_name_by_port(uint16_t port_id, char *name)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_get_port_by_name)
 int
 rte_eth_dev_get_port_by_name(const char *name, uint16_t *port_id)
 {
@@ -817,6 +838,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)
 int
 rte_eth_rx_queue_is_valid(uint16_t port_id, uint16_t queue_id)
 {
@@ -828,6 +850,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)
 int
 rte_eth_tx_queue_is_valid(uint16_t port_id, uint16_t queue_id)
 {
@@ -839,6 +862,7 @@ rte_eth_tx_queue_is_valid(uint16_t port_id, uint16_t queue_id)
 	return eth_dev_validate_tx_queue(dev, queue_id);
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_rx_queue_start)
 int
 rte_eth_dev_rx_queue_start(uint16_t port_id, uint16_t rx_queue_id)
 {
@@ -883,6 +907,7 @@ rte_eth_dev_rx_queue_start(uint16_t port_id, uint16_t rx_queue_id)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_rx_queue_stop)
 int
 rte_eth_dev_rx_queue_stop(uint16_t port_id, uint16_t rx_queue_id)
 {
@@ -920,6 +945,7 @@ rte_eth_dev_rx_queue_stop(uint16_t port_id, uint16_t rx_queue_id)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_tx_queue_start)
 int
 rte_eth_dev_tx_queue_start(uint16_t port_id, uint16_t tx_queue_id)
 {
@@ -964,6 +990,7 @@ rte_eth_dev_tx_queue_start(uint16_t port_id, uint16_t tx_queue_id)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_tx_queue_stop)
 int
 rte_eth_dev_tx_queue_stop(uint16_t port_id, uint16_t tx_queue_id)
 {
@@ -1001,6 +1028,7 @@ rte_eth_dev_tx_queue_stop(uint16_t port_id, uint16_t tx_queue_id)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_speed_bitflag)
 uint32_t
 rte_eth_speed_bitflag(uint32_t speed, int duplex)
 {
@@ -1058,6 +1086,7 @@ rte_eth_speed_bitflag(uint32_t speed, int duplex)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_rx_offload_name)
 const char *
 rte_eth_dev_rx_offload_name(uint64_t offload)
 {
@@ -1076,6 +1105,7 @@ rte_eth_dev_rx_offload_name(uint64_t offload)
 	return name;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_tx_offload_name)
 const char *
 rte_eth_dev_tx_offload_name(uint64_t offload)
 {
@@ -1137,6 +1167,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)
 const char *
 rte_eth_dev_capability_name(uint64_t capability)
 {
@@ -1286,6 +1317,7 @@ eth_dev_validate_mtu(uint16_t port_id, struct rte_eth_dev_info *dev_info,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_configure)
 int
 rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,
 		      const struct rte_eth_conf *dev_conf)
@@ -1749,6 +1781,7 @@ eth_dev_config_restore(struct rte_eth_dev *dev,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_start)
 int
 rte_eth_dev_start(uint16_t port_id)
 {
@@ -1823,6 +1856,7 @@ rte_eth_dev_start(uint16_t port_id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_stop)
 int
 rte_eth_dev_stop(uint16_t port_id)
 {
@@ -1853,6 +1887,7 @@ rte_eth_dev_stop(uint16_t port_id)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_set_link_up)
 int
 rte_eth_dev_set_link_up(uint16_t port_id)
 {
@@ -1871,6 +1906,7 @@ rte_eth_dev_set_link_up(uint16_t port_id)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_set_link_down)
 int
 rte_eth_dev_set_link_down(uint16_t port_id)
 {
@@ -1889,6 +1925,7 @@ rte_eth_dev_set_link_down(uint16_t port_id)
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_speed_lanes_get, 24.11)
 int
 rte_eth_speed_lanes_get(uint16_t port_id, uint32_t *lane)
 {
@@ -1902,6 +1939,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)
 int
 rte_eth_speed_lanes_get_capability(uint16_t port_id,
 				   struct rte_eth_speed_lanes_capa *speed_lanes_capa,
@@ -1928,6 +1966,7 @@ rte_eth_speed_lanes_get_capability(uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_speed_lanes_set, 24.11)
 int
 rte_eth_speed_lanes_set(uint16_t port_id, uint32_t speed_lanes_capa)
 {
@@ -1941,6 +1980,7 @@ rte_eth_speed_lanes_set(uint16_t port_id, uint32_t speed_lanes_capa)
 	return eth_err(port_id, dev->dev_ops->speed_lanes_set(dev, speed_lanes_capa));
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_close)
 int
 rte_eth_dev_close(uint16_t port_id)
 {
@@ -1975,6 +2015,7 @@ rte_eth_dev_close(uint16_t port_id)
 	return firsterr;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_reset)
 int
 rte_eth_dev_reset(uint16_t port_id)
 {
@@ -2000,6 +2041,7 @@ rte_eth_dev_reset(uint16_t port_id)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_is_removed)
 int
 rte_eth_dev_is_removed(uint16_t port_id)
 {
@@ -2227,6 +2269,7 @@ rte_eth_rx_queue_check_mempools(struct rte_mempool **rx_mempools,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_rx_queue_setup)
 int
 rte_eth_rx_queue_setup(uint16_t port_id, uint16_t rx_queue_id,
 		       uint16_t nb_rx_desc, unsigned int socket_id,
@@ -2452,6 +2495,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)
 int
 rte_eth_rx_hairpin_queue_setup(uint16_t port_id, uint16_t rx_queue_id,
 			       uint16_t nb_rx_desc,
@@ -2557,6 +2601,7 @@ rte_eth_rx_hairpin_queue_setup(uint16_t port_id, uint16_t rx_queue_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_tx_queue_setup)
 int
 rte_eth_tx_queue_setup(uint16_t port_id, uint16_t tx_queue_id,
 		       uint16_t nb_tx_desc, unsigned int socket_id,
@@ -2668,6 +2713,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)
 int
 rte_eth_tx_hairpin_queue_setup(uint16_t port_id, uint16_t tx_queue_id,
 			       uint16_t nb_tx_desc,
@@ -2767,6 +2813,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)
 int
 rte_eth_hairpin_bind(uint16_t tx_port, uint16_t rx_port)
 {
@@ -2794,6 +2841,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)
 int
 rte_eth_hairpin_unbind(uint16_t tx_port, uint16_t rx_port)
 {
@@ -2821,6 +2869,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)
 int
 rte_eth_hairpin_get_peer_ports(uint16_t port_id, uint16_t *peer_ports,
 			       size_t len, uint32_t direction)
@@ -2859,6 +2908,7 @@ rte_eth_hairpin_get_peer_ports(uint16_t port_id, uint16_t *peer_ports,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_tx_buffer_drop_callback)
 void
 rte_eth_tx_buffer_drop_callback(struct rte_mbuf **pkts, uint16_t unsent,
 		void *userdata __rte_unused)
@@ -2868,6 +2918,7 @@ rte_eth_tx_buffer_drop_callback(struct rte_mbuf **pkts, uint16_t unsent,
 	rte_eth_trace_tx_buffer_drop_callback((void **)pkts, unsent);
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_tx_buffer_count_callback)
 void
 rte_eth_tx_buffer_count_callback(struct rte_mbuf **pkts, uint16_t unsent,
 		void *userdata)
@@ -2880,6 +2931,7 @@ rte_eth_tx_buffer_count_callback(struct rte_mbuf **pkts, uint16_t unsent,
 	rte_eth_trace_tx_buffer_count_callback((void **)pkts, unsent, *count);
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_tx_buffer_set_err_callback)
 int
 rte_eth_tx_buffer_set_err_callback(struct rte_eth_dev_tx_buffer *buffer,
 		buffer_tx_error_fn cbfn, void *userdata)
@@ -2898,6 +2950,7 @@ rte_eth_tx_buffer_set_err_callback(struct rte_eth_dev_tx_buffer *buffer,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_tx_buffer_init)
 int
 rte_eth_tx_buffer_init(struct rte_eth_dev_tx_buffer *buffer, uint16_t size)
 {
@@ -2919,6 +2972,7 @@ rte_eth_tx_buffer_init(struct rte_eth_dev_tx_buffer *buffer, uint16_t size)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_tx_done_cleanup)
 int
 rte_eth_tx_done_cleanup(uint16_t port_id, uint16_t queue_id, uint32_t free_cnt)
 {
@@ -2946,6 +3000,7 @@ rte_eth_tx_done_cleanup(uint16_t port_id, uint16_t queue_id, uint32_t free_cnt)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_promiscuous_enable)
 int
 rte_eth_promiscuous_enable(uint16_t port_id)
 {
@@ -2972,6 +3027,7 @@ rte_eth_promiscuous_enable(uint16_t port_id)
 	return diag;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_promiscuous_disable)
 int
 rte_eth_promiscuous_disable(uint16_t port_id)
 {
@@ -3000,6 +3056,7 @@ rte_eth_promiscuous_disable(uint16_t port_id)
 	return diag;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_promiscuous_get)
 int
 rte_eth_promiscuous_get(uint16_t port_id)
 {
@@ -3013,6 +3070,7 @@ rte_eth_promiscuous_get(uint16_t port_id)
 	return dev->data->promiscuous;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_allmulticast_enable)
 int
 rte_eth_allmulticast_enable(uint16_t port_id)
 {
@@ -3038,6 +3096,7 @@ rte_eth_allmulticast_enable(uint16_t port_id)
 	return diag;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_allmulticast_disable)
 int
 rte_eth_allmulticast_disable(uint16_t port_id)
 {
@@ -3065,6 +3124,7 @@ rte_eth_allmulticast_disable(uint16_t port_id)
 	return diag;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_allmulticast_get)
 int
 rte_eth_allmulticast_get(uint16_t port_id)
 {
@@ -3078,6 +3138,7 @@ rte_eth_allmulticast_get(uint16_t port_id)
 	return dev->data->all_multicast;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_link_get)
 int
 rte_eth_link_get(uint16_t port_id, struct rte_eth_link *eth_link)
 {
@@ -3106,6 +3167,7 @@ rte_eth_link_get(uint16_t port_id, struct rte_eth_link *eth_link)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_link_get_nowait)
 int
 rte_eth_link_get_nowait(uint16_t port_id, struct rte_eth_link *eth_link)
 {
@@ -3134,6 +3196,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)
 const char *
 rte_eth_link_speed_to_str(uint32_t link_speed)
 {
@@ -3197,6 +3260,7 @@ rte_eth_link_speed_to_str(uint32_t link_speed)
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_link_to_str, 20.11)
 int
 rte_eth_link_to_str(char *str, size_t len, const struct rte_eth_link *eth_link)
 {
@@ -3233,6 +3297,7 @@ rte_eth_link_to_str(char *str, size_t len, const struct rte_eth_link *eth_link)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_stats_get)
 int
 rte_eth_stats_get(uint16_t port_id, struct rte_eth_stats *stats)
 {
@@ -3260,6 +3325,7 @@ rte_eth_stats_get(uint16_t port_id, struct rte_eth_stats *stats)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_stats_reset)
 int
 rte_eth_stats_reset(uint16_t port_id)
 {
@@ -3321,6 +3387,7 @@ eth_dev_get_xstats_count(uint16_t port_id)
 	return count;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_xstats_get_id_by_name)
 int
 rte_eth_xstats_get_id_by_name(uint16_t port_id, const char *xstat_name,
 		uint64_t *id)
@@ -3456,6 +3523,7 @@ eth_xstats_get_by_name_by_id(struct rte_eth_dev *dev, const uint64_t *ids,
 
 
 /* retrieve ethdev extended statistics names */
+RTE_EXPORT_SYMBOL(rte_eth_xstats_get_names_by_id)
 int
 rte_eth_xstats_get_names_by_id(uint16_t port_id,
 	struct rte_eth_xstat_name *xstats_names, unsigned int size,
@@ -3548,6 +3616,7 @@ rte_eth_xstats_get_names_by_id(uint16_t port_id,
 	return size;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_xstats_get_names)
 int
 rte_eth_xstats_get_names(uint16_t port_id,
 	struct rte_eth_xstat_name *xstats_names,
@@ -3674,6 +3743,7 @@ eth_xtats_get_by_id(struct rte_eth_dev *dev, const uint64_t *ids,
 }
 
 /* retrieve ethdev extended statistics */
+RTE_EXPORT_SYMBOL(rte_eth_xstats_get_by_id)
 int
 rte_eth_xstats_get_by_id(uint16_t port_id, const uint64_t *ids,
 			 uint64_t *values, unsigned int size)
@@ -3760,6 +3830,7 @@ rte_eth_xstats_get_by_id(uint16_t port_id, const uint64_t *ids,
 	return (i == size) ? (int32_t)size : -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_xstats_get)
 int
 rte_eth_xstats_get(uint16_t port_id, struct rte_eth_xstat *xstats,
 	unsigned int n)
@@ -3811,6 +3882,7 @@ rte_eth_xstats_get(uint16_t port_id, struct rte_eth_xstat *xstats,
 }
 
 /* reset ethdev extended statistics */
+RTE_EXPORT_SYMBOL(rte_eth_xstats_reset)
 int
 rte_eth_xstats_reset(uint16_t port_id)
 {
@@ -3832,6 +3904,7 @@ rte_eth_xstats_reset(uint16_t port_id)
 	return rte_eth_stats_reset(port_id);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_xstats_set_counter, 25.03)
 int
 rte_eth_xstats_set_counter(uint16_t port_id, uint64_t id, int on_off)
 {
@@ -3861,6 +3934,7 @@ rte_eth_xstats_set_counter(uint16_t port_id, uint64_t id, int on_off)
 }
 
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_xstats_query_state, 25.03)
 int
 rte_eth_xstats_query_state(uint16_t port_id, uint64_t id)
 {
@@ -3904,6 +3978,7 @@ eth_dev_set_queue_stats_mapping(uint16_t port_id, uint16_t queue_id,
 	return dev->dev_ops->queue_stats_mapping_set(dev, queue_id, stat_idx, is_rx);
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_set_tx_queue_stats_mapping)
 int
 rte_eth_dev_set_tx_queue_stats_mapping(uint16_t port_id, uint16_t tx_queue_id,
 		uint8_t stat_idx)
@@ -3920,6 +3995,7 @@ rte_eth_dev_set_tx_queue_stats_mapping(uint16_t port_id, uint16_t tx_queue_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_set_rx_queue_stats_mapping)
 int
 rte_eth_dev_set_rx_queue_stats_mapping(uint16_t port_id, uint16_t rx_queue_id,
 		uint8_t stat_idx)
@@ -3936,6 +4012,7 @@ rte_eth_dev_set_rx_queue_stats_mapping(uint16_t port_id, uint16_t rx_queue_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_fw_version_get)
 int
 rte_eth_dev_fw_version_get(uint16_t port_id, char *fw_version, size_t fw_size)
 {
@@ -3961,6 +4038,7 @@ rte_eth_dev_fw_version_get(uint16_t port_id, char *fw_version, size_t fw_size)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_info_get)
 int
 rte_eth_dev_info_get(uint16_t port_id, struct rte_eth_dev_info *dev_info)
 {
@@ -4025,6 +4103,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)
 int
 rte_eth_dev_conf_get(uint16_t port_id, struct rte_eth_conf *dev_conf)
 {
@@ -4047,6 +4126,7 @@ rte_eth_dev_conf_get(uint16_t port_id, struct rte_eth_conf *dev_conf)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_get_supported_ptypes)
 int
 rte_eth_dev_get_supported_ptypes(uint16_t port_id, uint32_t ptype_mask,
 				 uint32_t *ptypes, int num)
@@ -4088,6 +4168,7 @@ rte_eth_dev_get_supported_ptypes(uint16_t port_id, uint32_t ptype_mask,
 	return j;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_set_ptypes)
 int
 rte_eth_dev_set_ptypes(uint16_t port_id, uint32_t ptype_mask,
 				 uint32_t *set_ptypes, unsigned int num)
@@ -4183,6 +4264,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)
 int
 rte_eth_macaddrs_get(uint16_t port_id, struct rte_ether_addr *ma,
 	unsigned int num)
@@ -4210,6 +4292,7 @@ rte_eth_macaddrs_get(uint16_t port_id, struct rte_ether_addr *ma,
 	return num;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_macaddr_get)
 int
 rte_eth_macaddr_get(uint16_t port_id, struct rte_ether_addr *mac_addr)
 {
@@ -4232,6 +4315,7 @@ rte_eth_macaddr_get(uint16_t port_id, struct rte_ether_addr *mac_addr)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_get_mtu)
 int
 rte_eth_dev_get_mtu(uint16_t port_id, uint16_t *mtu)
 {
@@ -4253,6 +4337,7 @@ rte_eth_dev_get_mtu(uint16_t port_id, uint16_t *mtu)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_set_mtu)
 int
 rte_eth_dev_set_mtu(uint16_t port_id, uint16_t mtu)
 {
@@ -4299,6 +4384,7 @@ rte_eth_dev_set_mtu(uint16_t port_id, uint16_t mtu)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_vlan_filter)
 int
 rte_eth_dev_vlan_filter(uint16_t port_id, uint16_t vlan_id, int on)
 {
@@ -4346,6 +4432,7 @@ rte_eth_dev_vlan_filter(uint16_t port_id, uint16_t vlan_id, int on)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_set_vlan_strip_on_queue)
 int
 rte_eth_dev_set_vlan_strip_on_queue(uint16_t port_id, uint16_t rx_queue_id,
 				    int on)
@@ -4369,6 +4456,7 @@ rte_eth_dev_set_vlan_strip_on_queue(uint16_t port_id, uint16_t rx_queue_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_set_vlan_ether_type)
 int
 rte_eth_dev_set_vlan_ether_type(uint16_t port_id,
 				enum rte_vlan_type vlan_type,
@@ -4389,6 +4477,7 @@ rte_eth_dev_set_vlan_ether_type(uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_set_vlan_offload)
 int
 rte_eth_dev_set_vlan_offload(uint16_t port_id, int offload_mask)
 {
@@ -4485,6 +4574,7 @@ rte_eth_dev_set_vlan_offload(uint16_t port_id, int offload_mask)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_get_vlan_offload)
 int
 rte_eth_dev_get_vlan_offload(uint16_t port_id)
 {
@@ -4513,6 +4603,7 @@ rte_eth_dev_get_vlan_offload(uint16_t port_id)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_set_vlan_pvid)
 int
 rte_eth_dev_set_vlan_pvid(uint16_t port_id, uint16_t pvid, int on)
 {
@@ -4531,6 +4622,7 @@ rte_eth_dev_set_vlan_pvid(uint16_t port_id, uint16_t pvid, int on)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_flow_ctrl_get)
 int
 rte_eth_dev_flow_ctrl_get(uint16_t port_id, struct rte_eth_fc_conf *fc_conf)
 {
@@ -4557,6 +4649,7 @@ rte_eth_dev_flow_ctrl_get(uint16_t port_id, struct rte_eth_fc_conf *fc_conf)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_flow_ctrl_set)
 int
 rte_eth_dev_flow_ctrl_set(uint16_t port_id, struct rte_eth_fc_conf *fc_conf)
 {
@@ -4587,6 +4680,7 @@ rte_eth_dev_flow_ctrl_set(uint16_t port_id, struct rte_eth_fc_conf *fc_conf)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_priority_flow_ctrl_set)
 int
 rte_eth_dev_priority_flow_ctrl_set(uint16_t port_id,
 				   struct rte_eth_pfc_conf *pfc_conf)
@@ -4669,6 +4763,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)
 int
 rte_eth_dev_priority_flow_ctrl_queue_info_get(uint16_t port_id,
 		struct rte_eth_pfc_queue_info *pfc_queue_info)
@@ -4696,6 +4791,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)
 int
 rte_eth_dev_priority_flow_ctrl_queue_configure(uint16_t port_id,
 		struct rte_eth_pfc_queue_conf *pfc_queue_conf)
@@ -4814,6 +4910,7 @@ eth_check_reta_entry(struct rte_eth_rss_reta_entry64 *reta_conf,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_rss_reta_update)
 int
 rte_eth_dev_rss_reta_update(uint16_t port_id,
 			    struct rte_eth_rss_reta_entry64 *reta_conf,
@@ -4866,6 +4963,7 @@ rte_eth_dev_rss_reta_update(uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_rss_reta_query)
 int
 rte_eth_dev_rss_reta_query(uint16_t port_id,
 			   struct rte_eth_rss_reta_entry64 *reta_conf,
@@ -4898,6 +4996,7 @@ rte_eth_dev_rss_reta_query(uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_rss_hash_update)
 int
 rte_eth_dev_rss_hash_update(uint16_t port_id,
 			    struct rte_eth_rss_conf *rss_conf)
@@ -4964,6 +5063,7 @@ rte_eth_dev_rss_hash_update(uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_rss_hash_conf_get)
 int
 rte_eth_dev_rss_hash_conf_get(uint16_t port_id,
 			      struct rte_eth_rss_conf *rss_conf)
@@ -5005,6 +5105,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)
 const char *
 rte_eth_dev_rss_algo_name(enum rte_eth_hash_function rss_algo)
 {
@@ -5019,6 +5120,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)
 int
 rte_eth_find_rss_algo(const char *name, uint32_t *algo)
 {
@@ -5034,6 +5136,7 @@ rte_eth_find_rss_algo(const char *name, uint32_t *algo)
 	return -EINVAL;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_udp_tunnel_port_add)
 int
 rte_eth_dev_udp_tunnel_port_add(uint16_t port_id,
 				struct rte_eth_udp_tunnel *udp_tunnel)
@@ -5065,6 +5168,7 @@ rte_eth_dev_udp_tunnel_port_add(uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_udp_tunnel_port_delete)
 int
 rte_eth_dev_udp_tunnel_port_delete(uint16_t port_id,
 				   struct rte_eth_udp_tunnel *udp_tunnel)
@@ -5096,6 +5200,7 @@ rte_eth_dev_udp_tunnel_port_delete(uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_led_on)
 int
 rte_eth_led_on(uint16_t port_id)
 {
@@ -5114,6 +5219,7 @@ rte_eth_led_on(uint16_t port_id)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_led_off)
 int
 rte_eth_led_off(uint16_t port_id)
 {
@@ -5132,6 +5238,7 @@ rte_eth_led_off(uint16_t port_id)
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_fec_get_capability, 20.11)
 int
 rte_eth_fec_get_capability(uint16_t port_id,
 			   struct rte_eth_fec_capa *speed_fec_capa,
@@ -5159,6 +5266,7 @@ rte_eth_fec_get_capability(uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_fec_get, 20.11)
 int
 rte_eth_fec_get(uint16_t port_id, uint32_t *fec_capa)
 {
@@ -5184,6 +5292,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)
 int
 rte_eth_fec_set(uint16_t port_id, uint32_t fec_capa)
 {
@@ -5233,6 +5342,7 @@ eth_dev_get_mac_addr_index(uint16_t port_id, const struct rte_ether_addr *addr)
 
 static const struct rte_ether_addr null_mac_addr;
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_mac_addr_add)
 int
 rte_eth_dev_mac_addr_add(uint16_t port_id, struct rte_ether_addr *addr,
 			uint32_t pool)
@@ -5299,6 +5409,7 @@ rte_eth_dev_mac_addr_add(uint16_t port_id, struct rte_ether_addr *addr,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_mac_addr_remove)
 int
 rte_eth_dev_mac_addr_remove(uint16_t port_id, struct rte_ether_addr *addr)
 {
@@ -5341,6 +5452,7 @@ rte_eth_dev_mac_addr_remove(uint16_t port_id, struct rte_ether_addr *addr)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_default_mac_addr_set)
 int
 rte_eth_dev_default_mac_addr_set(uint16_t port_id, struct rte_ether_addr *addr)
 {
@@ -5414,6 +5526,7 @@ eth_dev_get_hash_mac_addr_index(uint16_t port_id,
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_uc_hash_table_set)
 int
 rte_eth_dev_uc_hash_table_set(uint16_t port_id, struct rte_ether_addr *addr,
 				uint8_t on)
@@ -5479,6 +5592,7 @@ rte_eth_dev_uc_hash_table_set(uint16_t port_id, struct rte_ether_addr *addr,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_uc_all_hash_table_set)
 int
 rte_eth_dev_uc_all_hash_table_set(uint16_t port_id, uint8_t on)
 {
@@ -5497,6 +5611,7 @@ rte_eth_dev_uc_all_hash_table_set(uint16_t port_id, uint8_t on)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_set_queue_rate_limit)
 int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx,
 					uint32_t tx_rate)
 {
@@ -5537,6 +5652,7 @@ int rte_eth_set_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)
 int rte_eth_rx_avail_thresh_set(uint16_t port_id, uint16_t queue_id,
 			       uint8_t avail_thresh)
 {
@@ -5569,6 +5685,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)
 int rte_eth_rx_avail_thresh_query(uint16_t port_id, uint16_t *queue_id,
 				 uint8_t *avail_thresh)
 {
@@ -5609,6 +5726,7 @@ RTE_INIT(eth_dev_init_cb_lists)
 		TAILQ_INIT(&rte_eth_devices[i].link_intr_cbs);
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_callback_register)
 int
 rte_eth_dev_callback_register(uint16_t port_id,
 			enum rte_eth_event_type event,
@@ -5678,6 +5796,7 @@ rte_eth_dev_callback_register(uint16_t port_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_callback_unregister)
 int
 rte_eth_dev_callback_unregister(uint16_t port_id,
 			enum rte_eth_event_type event,
@@ -5743,6 +5862,7 @@ rte_eth_dev_callback_unregister(uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_rx_intr_ctl)
 int
 rte_eth_dev_rx_intr_ctl(uint16_t port_id, int epfd, int op, void *data)
 {
@@ -5782,6 +5902,7 @@ rte_eth_dev_rx_intr_ctl(uint16_t port_id, int epfd, int op, void *data)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_rx_intr_ctl_q_get_fd)
 int
 rte_eth_dev_rx_intr_ctl_q_get_fd(uint16_t port_id, uint16_t queue_id)
 {
@@ -5820,6 +5941,7 @@ rte_eth_dev_rx_intr_ctl_q_get_fd(uint16_t port_id, uint16_t queue_id)
 	return fd;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_rx_intr_ctl_q)
 int
 rte_eth_dev_rx_intr_ctl_q(uint16_t port_id, uint16_t queue_id,
 			  int epfd, int op, void *data)
@@ -5863,6 +5985,7 @@ rte_eth_dev_rx_intr_ctl_q(uint16_t port_id, uint16_t queue_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_rx_intr_enable)
 int
 rte_eth_dev_rx_intr_enable(uint16_t port_id,
 			   uint16_t queue_id)
@@ -5886,6 +6009,7 @@ rte_eth_dev_rx_intr_enable(uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_rx_intr_disable)
 int
 rte_eth_dev_rx_intr_disable(uint16_t port_id,
 			    uint16_t queue_id)
@@ -5910,6 +6034,7 @@ rte_eth_dev_rx_intr_disable(uint16_t port_id,
 }
 
 
+RTE_EXPORT_SYMBOL(rte_eth_add_rx_callback)
 const struct rte_eth_rxtx_callback *
 rte_eth_add_rx_callback(uint16_t port_id, uint16_t queue_id,
 		rte_rx_callback_fn fn, void *user_param)
@@ -5969,6 +6094,7 @@ rte_eth_add_rx_callback(uint16_t port_id, uint16_t queue_id,
 	return cb;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_add_first_rx_callback)
 const struct rte_eth_rxtx_callback *
 rte_eth_add_first_rx_callback(uint16_t port_id, uint16_t queue_id,
 		rte_rx_callback_fn fn, void *user_param)
@@ -6011,6 +6137,7 @@ rte_eth_add_first_rx_callback(uint16_t port_id, uint16_t queue_id,
 	return cb;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_add_tx_callback)
 const struct rte_eth_rxtx_callback *
 rte_eth_add_tx_callback(uint16_t port_id, uint16_t queue_id,
 		rte_tx_callback_fn fn, void *user_param)
@@ -6072,6 +6199,7 @@ rte_eth_add_tx_callback(uint16_t port_id, uint16_t queue_id,
 	return cb;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_remove_rx_callback)
 int
 rte_eth_remove_rx_callback(uint16_t port_id, uint16_t queue_id,
 		const struct rte_eth_rxtx_callback *user_cb)
@@ -6108,6 +6236,7 @@ rte_eth_remove_rx_callback(uint16_t port_id, uint16_t queue_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_remove_tx_callback)
 int
 rte_eth_remove_tx_callback(uint16_t port_id, uint16_t queue_id,
 		const struct rte_eth_rxtx_callback *user_cb)
@@ -6144,6 +6273,7 @@ rte_eth_remove_tx_callback(uint16_t port_id, uint16_t queue_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_rx_queue_info_get)
 int
 rte_eth_rx_queue_info_get(uint16_t port_id, uint16_t queue_id,
 	struct rte_eth_rxq_info *qinfo)
@@ -6192,6 +6322,7 @@ rte_eth_rx_queue_info_get(uint16_t port_id, uint16_t queue_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_tx_queue_info_get)
 int
 rte_eth_tx_queue_info_get(uint16_t port_id, uint16_t queue_id,
 	struct rte_eth_txq_info *qinfo)
@@ -6240,6 +6371,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)
 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)
@@ -6262,6 +6394,7 @@ rte_eth_recycle_rx_queue_info_get(uint16_t port_id, uint16_t queue_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_rx_burst_mode_get)
 int
 rte_eth_rx_burst_mode_get(uint16_t port_id, uint16_t queue_id,
 			  struct rte_eth_burst_mode *mode)
@@ -6295,6 +6428,7 @@ rte_eth_rx_burst_mode_get(uint16_t port_id, uint16_t queue_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_tx_burst_mode_get)
 int
 rte_eth_tx_burst_mode_get(uint16_t port_id, uint16_t queue_id,
 			  struct rte_eth_burst_mode *mode)
@@ -6328,6 +6462,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)
 int
 rte_eth_get_monitor_addr(uint16_t port_id, uint16_t queue_id,
 		struct rte_power_monitor_cond *pmc)
@@ -6360,6 +6495,7 @@ rte_eth_get_monitor_addr(uint16_t port_id, uint16_t queue_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_set_mc_addr_list)
 int
 rte_eth_dev_set_mc_addr_list(uint16_t port_id,
 			     struct rte_ether_addr *mc_addr_set,
@@ -6382,6 +6518,7 @@ rte_eth_dev_set_mc_addr_list(uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_timesync_enable)
 int
 rte_eth_timesync_enable(uint16_t port_id)
 {
@@ -6400,6 +6537,7 @@ rte_eth_timesync_enable(uint16_t port_id)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_timesync_disable)
 int
 rte_eth_timesync_disable(uint16_t port_id)
 {
@@ -6418,6 +6556,7 @@ rte_eth_timesync_disable(uint16_t port_id)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_timesync_read_rx_timestamp)
 int
 rte_eth_timesync_read_rx_timestamp(uint16_t port_id, struct timespec *timestamp,
 				   uint32_t flags)
@@ -6446,6 +6585,7 @@ rte_eth_timesync_read_rx_timestamp(uint16_t port_id, struct timespec *timestamp,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_timesync_read_tx_timestamp)
 int
 rte_eth_timesync_read_tx_timestamp(uint16_t port_id,
 				   struct timespec *timestamp)
@@ -6474,6 +6614,7 @@ rte_eth_timesync_read_tx_timestamp(uint16_t port_id,
 
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_timesync_adjust_time)
 int
 rte_eth_timesync_adjust_time(uint16_t port_id, int64_t delta)
 {
@@ -6492,6 +6633,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)
 int
 rte_eth_timesync_adjust_freq(uint16_t port_id, int64_t ppm)
 {
@@ -6510,6 +6652,7 @@ rte_eth_timesync_adjust_freq(uint16_t port_id, int64_t ppm)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_timesync_read_time)
 int
 rte_eth_timesync_read_time(uint16_t port_id, struct timespec *timestamp)
 {
@@ -6535,6 +6678,7 @@ rte_eth_timesync_read_time(uint16_t port_id, struct timespec *timestamp)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_timesync_write_time)
 int
 rte_eth_timesync_write_time(uint16_t port_id, const struct timespec *timestamp)
 {
@@ -6560,6 +6704,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)
 int
 rte_eth_read_clock(uint16_t port_id, uint64_t *clock)
 {
@@ -6584,6 +6729,7 @@ rte_eth_read_clock(uint16_t port_id, uint64_t *clock)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_get_reg_info)
 int
 rte_eth_dev_get_reg_info(uint16_t port_id, struct rte_dev_reg_info *info)
 {
@@ -6614,6 +6760,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)
 int
 rte_eth_dev_get_reg_info_ext(uint16_t port_id, struct rte_dev_reg_info *info)
 {
@@ -6649,6 +6796,7 @@ rte_eth_dev_get_reg_info_ext(uint16_t port_id, struct rte_dev_reg_info *info)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_get_eeprom_length)
 int
 rte_eth_dev_get_eeprom_length(uint16_t port_id)
 {
@@ -6667,6 +6815,7 @@ rte_eth_dev_get_eeprom_length(uint16_t port_id)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_get_eeprom)
 int
 rte_eth_dev_get_eeprom(uint16_t port_id, struct rte_dev_eeprom_info *info)
 {
@@ -6692,6 +6841,7 @@ rte_eth_dev_get_eeprom(uint16_t port_id, struct rte_dev_eeprom_info *info)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_set_eeprom)
 int
 rte_eth_dev_set_eeprom(uint16_t port_id, struct rte_dev_eeprom_info *info)
 {
@@ -6717,6 +6867,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)
 int
 rte_eth_dev_get_module_info(uint16_t port_id,
 			    struct rte_eth_dev_module_info *modinfo)
@@ -6743,6 +6894,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)
 int
 rte_eth_dev_get_module_eeprom(uint16_t port_id,
 			      struct rte_dev_eeprom_info *info)
@@ -6783,6 +6935,7 @@ rte_eth_dev_get_module_eeprom(uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_get_dcb_info)
 int
 rte_eth_dev_get_dcb_info(uint16_t port_id,
 			     struct rte_eth_dcb_info *dcb_info)
@@ -6830,6 +6983,7 @@ eth_dev_adjust_nb_desc(uint16_t *nb_desc,
 	*nb_desc = (uint16_t)nb_desc_32;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_adjust_nb_rx_tx_desc)
 int
 rte_eth_dev_adjust_nb_rx_tx_desc(uint16_t port_id,
 				 uint16_t *nb_rx_desc,
@@ -6855,6 +7009,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)
 int
 rte_eth_dev_hairpin_capability_get(uint16_t port_id,
 				   struct rte_eth_hairpin_cap *cap)
@@ -6882,6 +7037,7 @@ rte_eth_dev_hairpin_capability_get(uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_pool_ops_supported)
 int
 rte_eth_dev_pool_ops_supported(uint16_t port_id, const char *pool)
 {
@@ -6908,6 +7064,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)
 int
 rte_eth_representor_info_get(uint16_t port_id,
 			     struct rte_eth_representor_info *info)
@@ -6927,6 +7084,7 @@ rte_eth_representor_info_get(uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_rx_metadata_negotiate)
 int
 rte_eth_rx_metadata_negotiate(uint16_t port_id, uint64_t *features)
 {
@@ -6962,6 +7120,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)
 int
 rte_eth_ip_reassembly_capability_get(uint16_t port_id,
 		struct rte_eth_ip_reassembly_params *reassembly_capa)
@@ -6997,6 +7156,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)
 int
 rte_eth_ip_reassembly_conf_get(uint16_t port_id,
 		struct rte_eth_ip_reassembly_params *conf)
@@ -7030,6 +7190,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)
 int
 rte_eth_ip_reassembly_conf_set(uint16_t port_id,
 		const struct rte_eth_ip_reassembly_params *conf)
@@ -7070,6 +7231,7 @@ rte_eth_ip_reassembly_conf_set(uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_dev_priv_dump, 22.03)
 int
 rte_eth_dev_priv_dump(uint16_t port_id, FILE *file)
 {
@@ -7088,6 +7250,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)
 int
 rte_eth_rx_descriptor_dump(uint16_t port_id, uint16_t queue_id,
 			   uint16_t offset, uint16_t num, FILE *file)
@@ -7114,6 +7277,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)
 int
 rte_eth_tx_descriptor_dump(uint16_t port_id, uint16_t queue_id,
 			   uint16_t offset, uint16_t num, FILE *file)
@@ -7140,6 +7304,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)
 int
 rte_eth_buffer_split_get_supported_hdr_ptypes(uint16_t port_id, uint32_t *ptypes, int num)
 {
@@ -7179,6 +7344,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)
 int rte_eth_dev_count_aggr_ports(uint16_t port_id)
 {
 	struct rte_eth_dev *dev;
@@ -7196,6 +7362,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)
 int rte_eth_dev_map_aggr_tx_affinity(uint16_t port_id, uint16_t tx_queue_id,
 				     uint8_t affinity)
 {
@@ -7251,4 +7418,5 @@ int rte_eth_dev_map_aggr_tx_affinity(uint16_t port_id, uint16_t tx_queue_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_eth_dev_logtype)
 RTE_LOG_REGISTER_DEFAULT(rte_eth_dev_logtype, INFO);
diff --git a/lib/ethdev/rte_ethdev_cman.c b/lib/ethdev/rte_ethdev_cman.c
index 73262ffc5f..1e6c975a55 100644
--- a/lib/ethdev/rte_ethdev_cman.c
+++ b/lib/ethdev/rte_ethdev_cman.c
@@ -11,6 +11,7 @@
 #include "ethdev_trace.h"
 
 /* Get congestion management information for a port */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_cman_info_get, 22.11)
 int
 rte_eth_cman_info_get(uint16_t port_id, struct rte_eth_cman_info *info)
 {
@@ -39,6 +40,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)
 int
 rte_eth_cman_config_init(uint16_t port_id, struct rte_eth_cman_config *config)
 {
@@ -67,6 +69,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)
 int
 rte_eth_cman_config_set(uint16_t port_id, const struct rte_eth_cman_config *config)
 {
@@ -94,6 +97,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)
 int
 rte_eth_cman_config_get(uint16_t port_id, struct rte_eth_cman_config *config)
 {
diff --git a/lib/ethdev/rte_flow.c b/lib/ethdev/rte_flow.c
index 4a7735b5ab..ba08c1b6fb 100644
--- a/lib/ethdev/rte_flow.c
+++ b/lib/ethdev/rte_flow.c
@@ -22,9 +22,11 @@
 #define FLOW_LOG RTE_ETHDEV_LOG_LINE
 
 /* Mbuf dynamic field name for metadata. */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_dynf_metadata_offs, 19.11)
 int32_t rte_flow_dynf_metadata_offs = -1;
 
 /* Mbuf dynamic field flag bit number for metadata. */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_dynf_metadata_mask, 19.11)
 uint64_t rte_flow_dynf_metadata_mask;
 
 /**
@@ -278,6 +280,7 @@ static const struct rte_flow_desc_data rte_flow_desc_action[] = {
 	MK_FLOW_ACTION(JUMP_TO_TABLE_INDEX, sizeof(struct rte_flow_action_jump_to_table_index)),
 };
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_dynf_metadata_register, 19.11)
 int
 rte_flow_dynf_metadata_register(void)
 {
@@ -366,6 +369,7 @@ rte_flow_ops_get(uint16_t port_id, struct rte_flow_error *error)
 }
 
 /* Check whether a flow rule can be created on a given port. */
+RTE_EXPORT_SYMBOL(rte_flow_validate)
 int
 rte_flow_validate(uint16_t port_id,
 		  const struct rte_flow_attr *attr,
@@ -402,6 +406,7 @@ rte_flow_validate(uint16_t port_id,
 }
 
 /* Create a flow rule on a given port. */
+RTE_EXPORT_SYMBOL(rte_flow_create)
 struct rte_flow *
 rte_flow_create(uint16_t port_id,
 		const struct rte_flow_attr *attr,
@@ -432,6 +437,7 @@ rte_flow_create(uint16_t port_id,
 }
 
 /* Destroy a flow rule on a given port. */
+RTE_EXPORT_SYMBOL(rte_flow_destroy)
 int
 rte_flow_destroy(uint16_t port_id,
 		 struct rte_flow *flow,
@@ -458,6 +464,7 @@ rte_flow_destroy(uint16_t port_id,
 				  NULL, rte_strerror(ENOSYS));
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_actions_update, 23.07)
 int
 rte_flow_actions_update(uint16_t port_id,
 			struct rte_flow *flow,
@@ -485,6 +492,7 @@ rte_flow_actions_update(uint16_t port_id,
 }
 
 /* Destroy all flow rules associated with a port. */
+RTE_EXPORT_SYMBOL(rte_flow_flush)
 int
 rte_flow_flush(uint16_t port_id,
 	       struct rte_flow_error *error)
@@ -511,6 +519,7 @@ rte_flow_flush(uint16_t port_id,
 }
 
 /* Query an existing flow rule. */
+RTE_EXPORT_SYMBOL(rte_flow_query)
 int
 rte_flow_query(uint16_t port_id,
 	       struct rte_flow *flow,
@@ -540,6 +549,7 @@ rte_flow_query(uint16_t port_id,
 }
 
 /* Restrict ingress traffic to the defined flow rules. */
+RTE_EXPORT_SYMBOL(rte_flow_isolate)
 int
 rte_flow_isolate(uint16_t port_id,
 		 int set,
@@ -567,6 +577,7 @@ rte_flow_isolate(uint16_t port_id,
 }
 
 /* Initialize flow error structure. */
+RTE_EXPORT_SYMBOL(rte_flow_error_set)
 int
 rte_flow_error_set(struct rte_flow_error *error,
 		   int code,
@@ -1102,6 +1113,7 @@ rte_flow_conv_name(int is_action,
 }
 
 /** Helper function to convert flow API objects. */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_conv, 18.11)
 int
 rte_flow_conv(enum rte_flow_conv_op op,
 	      void *dst,
@@ -1173,6 +1185,7 @@ rte_flow_conv(enum rte_flow_conv_op op,
 }
 
 /** Store a full rte_flow description. */
+RTE_EXPORT_SYMBOL(rte_flow_copy)
 size_t
 rte_flow_copy(struct rte_flow_desc *desc, size_t len,
 	      const struct rte_flow_attr *attr,
@@ -1227,6 +1240,7 @@ rte_flow_copy(struct rte_flow_desc *desc, size_t len,
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_dev_dump, 20.02)
 int
 rte_flow_dev_dump(uint16_t port_id, struct rte_flow *flow,
 			FILE *file, struct rte_flow_error *error)
@@ -1248,6 +1262,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)
 int
 rte_flow_get_aged_flows(uint16_t port_id, void **contexts,
 		    uint32_t nb_contexts, struct rte_flow_error *error)
@@ -1273,6 +1288,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)
 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)
@@ -1300,6 +1316,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)
 struct rte_flow_action_handle *
 rte_flow_action_handle_create(uint16_t port_id,
 			      const struct rte_flow_indir_action_conf *conf,
@@ -1327,6 +1344,7 @@ rte_flow_action_handle_create(uint16_t port_id,
 	return handle;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_action_handle_destroy, 21.05)
 int
 rte_flow_action_handle_destroy(uint16_t port_id,
 			       struct rte_flow_action_handle *handle,
@@ -1350,6 +1368,7 @@ rte_flow_action_handle_destroy(uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_action_handle_update, 21.05)
 int
 rte_flow_action_handle_update(uint16_t port_id,
 			      struct rte_flow_action_handle *handle,
@@ -1374,6 +1393,7 @@ rte_flow_action_handle_update(uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_action_handle_query, 21.05)
 int
 rte_flow_action_handle_query(uint16_t port_id,
 			     const struct rte_flow_action_handle *handle,
@@ -1398,6 +1418,7 @@ rte_flow_action_handle_query(uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_tunnel_decap_set, 20.11)
 int
 rte_flow_tunnel_decap_set(uint16_t port_id,
 			  struct rte_flow_tunnel *tunnel,
@@ -1427,6 +1448,7 @@ rte_flow_tunnel_decap_set(uint16_t port_id,
 				  NULL, rte_strerror(ENOTSUP));
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_tunnel_match, 20.11)
 int
 rte_flow_tunnel_match(uint16_t port_id,
 		      struct rte_flow_tunnel *tunnel,
@@ -1456,6 +1478,7 @@ rte_flow_tunnel_match(uint16_t port_id,
 				  NULL, rte_strerror(ENOTSUP));
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_get_restore_info, 20.11)
 int
 rte_flow_get_restore_info(uint16_t port_id,
 			  struct rte_mbuf *m,
@@ -1490,6 +1513,7 @@ static struct {
 	.desc = { .name = "RTE_MBUF_F_RX_RESTORE_INFO", },
 };
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_restore_info_dynflag, 23.07)
 uint64_t
 rte_flow_restore_info_dynflag(void)
 {
@@ -1510,6 +1534,7 @@ rte_flow_restore_info_dynflag_register(void)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_tunnel_action_decap_release, 20.11)
 int
 rte_flow_tunnel_action_decap_release(uint16_t port_id,
 				     struct rte_flow_action *actions,
@@ -1539,6 +1564,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)
 int
 rte_flow_tunnel_item_release(uint16_t port_id,
 			     struct rte_flow_item *items,
@@ -1566,6 +1592,7 @@ rte_flow_tunnel_item_release(uint16_t port_id,
 				  NULL, rte_strerror(ENOTSUP));
 }
 
+RTE_EXPORT_SYMBOL(rte_flow_pick_transfer_proxy)
 int
 rte_flow_pick_transfer_proxy(uint16_t port_id, uint16_t *proxy_port_id,
 			     struct rte_flow_error *error)
@@ -1593,6 +1620,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)
 struct rte_flow_item_flex_handle *
 rte_flow_flex_item_create(uint16_t port_id,
 			  const struct rte_flow_item_flex_conf *conf,
@@ -1619,6 +1647,7 @@ rte_flow_flex_item_create(uint16_t port_id,
 	return handle;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_flex_item_release, 21.11)
 int
 rte_flow_flex_item_release(uint16_t port_id,
 			   const struct rte_flow_item_flex_handle *handle,
@@ -1640,6 +1669,7 @@ rte_flow_flex_item_release(uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_info_get, 22.03)
 int
 rte_flow_info_get(uint16_t port_id,
 		  struct rte_flow_port_info *port_info,
@@ -1676,6 +1706,7 @@ rte_flow_info_get(uint16_t port_id,
 				  NULL, rte_strerror(ENOTSUP));
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_configure, 22.03)
 int
 rte_flow_configure(uint16_t port_id,
 		   const struct rte_flow_port_attr *port_attr,
@@ -1730,6 +1761,7 @@ rte_flow_configure(uint16_t port_id,
 				  NULL, rte_strerror(ENOTSUP));
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_pattern_template_create, 22.03)
 struct rte_flow_pattern_template *
 rte_flow_pattern_template_create(uint16_t port_id,
 		const struct rte_flow_pattern_template_attr *template_attr,
@@ -1786,6 +1818,7 @@ rte_flow_pattern_template_create(uint16_t port_id,
 	return NULL;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_pattern_template_destroy, 22.03)
 int
 rte_flow_pattern_template_destroy(uint16_t port_id,
 		struct rte_flow_pattern_template *pattern_template,
@@ -1816,6 +1849,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)
 struct rte_flow_actions_template *
 rte_flow_actions_template_create(uint16_t port_id,
 			const struct rte_flow_actions_template_attr *template_attr,
@@ -1882,6 +1916,7 @@ rte_flow_actions_template_create(uint16_t port_id,
 	return NULL;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_actions_template_destroy, 22.03)
 int
 rte_flow_actions_template_destroy(uint16_t port_id,
 			struct rte_flow_actions_template *actions_template,
@@ -1912,6 +1947,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)
 struct rte_flow_template_table *
 rte_flow_template_table_create(uint16_t port_id,
 			const struct rte_flow_template_table_attr *table_attr,
@@ -1985,6 +2021,7 @@ rte_flow_template_table_create(uint16_t port_id,
 	return NULL;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_template_table_destroy, 22.03)
 int
 rte_flow_template_table_destroy(uint16_t port_id,
 				struct rte_flow_template_table *template_table,
@@ -2015,6 +2052,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)
 int
 rte_flow_group_set_miss_actions(uint16_t port_id,
 				uint32_t group_id,
@@ -2037,6 +2075,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)
 struct rte_flow *
 rte_flow_async_create(uint16_t port_id,
 		      uint32_t queue_id,
@@ -2078,6 +2117,7 @@ rte_flow_async_create(uint16_t port_id,
 	return flow;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_async_create_by_index, 23.03)
 struct rte_flow *
 rte_flow_async_create_by_index(uint16_t port_id,
 			       uint32_t queue_id,
@@ -2116,6 +2156,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)
 struct rte_flow *
 rte_flow_async_create_by_index_with_pattern(uint16_t port_id,
 					    uint32_t queue_id,
@@ -2160,6 +2201,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)
 int
 rte_flow_async_destroy(uint16_t port_id,
 		       uint32_t queue_id,
@@ -2190,6 +2232,7 @@ rte_flow_async_destroy(uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_async_actions_update, 23.07)
 int
 rte_flow_async_actions_update(uint16_t port_id,
 			      uint32_t queue_id,
@@ -2224,6 +2267,7 @@ rte_flow_async_actions_update(uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_push, 22.03)
 int
 rte_flow_push(uint16_t port_id,
 	      uint32_t queue_id,
@@ -2248,6 +2292,7 @@ rte_flow_push(uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_pull, 22.03)
 int
 rte_flow_pull(uint16_t port_id,
 	      uint32_t queue_id,
@@ -2274,6 +2319,7 @@ rte_flow_pull(uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_async_action_handle_create, 22.03)
 struct rte_flow_action_handle *
 rte_flow_async_action_handle_create(uint16_t port_id,
 		uint32_t queue_id,
@@ -2310,6 +2356,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)
 int
 rte_flow_async_action_handle_destroy(uint16_t port_id,
 		uint32_t queue_id,
@@ -2339,6 +2386,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)
 int
 rte_flow_async_action_handle_update(uint16_t port_id,
 		uint32_t queue_id,
@@ -2370,6 +2418,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)
 int
 rte_flow_async_action_handle_query(uint16_t port_id,
 		uint32_t queue_id,
@@ -2401,6 +2450,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)
 int
 rte_flow_action_handle_query_update(uint16_t port_id,
 				    struct rte_flow_action_handle *handle,
@@ -2426,6 +2476,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)
 int
 rte_flow_async_action_handle_query_update(uint16_t port_id, uint32_t queue_id,
 					  const struct rte_flow_op_attr *attr,
@@ -2452,6 +2503,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)
 struct rte_flow_action_list_handle *
 rte_flow_action_list_handle_create(uint16_t port_id,
 				   const
@@ -2479,6 +2531,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)
 int
 rte_flow_action_list_handle_destroy(uint16_t port_id,
 				    struct rte_flow_action_list_handle *handle,
@@ -2501,6 +2554,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)
 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,
@@ -2537,6 +2591,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)
 int
 rte_flow_async_action_list_handle_destroy(uint16_t port_id, uint32_t queue_id,
 				 const struct rte_flow_op_attr *op_attr,
@@ -2564,6 +2619,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)
 int
 rte_flow_action_list_handle_query_update(uint16_t port_id,
 			 const struct rte_flow_action_list_handle *handle,
@@ -2590,6 +2646,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)
 int
 rte_flow_async_action_list_handle_query_update(uint16_t port_id, uint32_t queue_id,
 			 const struct rte_flow_op_attr *attr,
@@ -2624,6 +2681,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)
 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,
@@ -2645,6 +2703,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)
 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,
@@ -2674,6 +2733,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)
 bool
 rte_flow_template_table_resizable(__rte_unused uint16_t port_id,
 				  const struct rte_flow_template_table_attr *tbl_attr)
@@ -2682,6 +2742,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)
 int
 rte_flow_template_table_resize(uint16_t port_id,
 			       struct rte_flow_template_table *table,
@@ -2705,6 +2766,7 @@ rte_flow_template_table_resize(uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_flow_async_update_resized, 24.03)
 int
 rte_flow_async_update_resized(uint16_t port_id, uint32_t queue,
 			      const struct rte_flow_op_attr *attr,
@@ -2729,6 +2791,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)
 int
 rte_flow_template_table_resize_complete(uint16_t port_id,
 					struct rte_flow_template_table *table,
@@ -2964,6 +3027,7 @@ rte_flow_dummy_async_action_list_handle_query_update(
 				  rte_strerror(ENOSYS));
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_flow_fp_default_ops)
 struct rte_flow_fp_ops rte_flow_fp_default_ops = {
 	.async_create = rte_flow_dummy_async_create,
 	.async_create_by_index = rte_flow_dummy_async_create_by_index,
diff --git a/lib/ethdev/rte_mtr.c b/lib/ethdev/rte_mtr.c
index 900837bc09..35b6ee3195 100644
--- a/lib/ethdev/rte_mtr.c
+++ b/lib/ethdev/rte_mtr.c
@@ -77,6 +77,7 @@ __extension__ ({					\
 })
 
 /* MTR capabilities get */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_capabilities_get, 17.11)
 int
 rte_mtr_capabilities_get(uint16_t port_id,
 	struct rte_mtr_capabilities *cap,
@@ -93,6 +94,7 @@ rte_mtr_capabilities_get(uint16_t port_id,
 }
 
 /* MTR meter profile add */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_profile_add, 17.11)
 int
 rte_mtr_meter_profile_add(uint16_t port_id,
 	uint32_t meter_profile_id,
@@ -111,6 +113,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)
 int
 rte_mtr_meter_profile_delete(uint16_t port_id,
 	uint32_t meter_profile_id,
@@ -127,6 +130,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)
 struct rte_flow_meter_profile *
 rte_mtr_meter_profile_get(uint16_t port_id,
 	uint32_t meter_profile_id,
@@ -143,6 +147,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)
 int
 rte_mtr_meter_policy_validate(uint16_t port_id,
 	struct rte_mtr_meter_policy_params *policy,
@@ -159,6 +164,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)
 int
 rte_mtr_meter_policy_add(uint16_t port_id,
 	uint32_t policy_id,
@@ -176,6 +182,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)
 int
 rte_mtr_meter_policy_delete(uint16_t port_id,
 	uint32_t policy_id,
@@ -192,6 +199,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)
 struct rte_flow_meter_policy *
 rte_mtr_meter_policy_get(uint16_t port_id,
 	uint32_t policy_id,
@@ -208,6 +216,7 @@ rte_mtr_meter_policy_get(uint16_t port_id,
 }
 
 /** MTR object create */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_create, 17.11)
 int
 rte_mtr_create(uint16_t port_id,
 	uint32_t mtr_id,
@@ -226,6 +235,7 @@ rte_mtr_create(uint16_t port_id,
 }
 
 /** MTR object destroy */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_destroy, 17.11)
 int
 rte_mtr_destroy(uint16_t port_id,
 	uint32_t mtr_id,
@@ -242,6 +252,7 @@ rte_mtr_destroy(uint16_t port_id,
 }
 
 /** MTR object meter enable */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_enable, 17.11)
 int
 rte_mtr_meter_enable(uint16_t port_id,
 	uint32_t mtr_id,
@@ -258,6 +269,7 @@ rte_mtr_meter_enable(uint16_t port_id,
 }
 
 /** MTR object meter disable */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_meter_disable, 17.11)
 int
 rte_mtr_meter_disable(uint16_t port_id,
 	uint32_t mtr_id,
@@ -274,6 +286,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)
 int
 rte_mtr_meter_profile_update(uint16_t port_id,
 	uint32_t mtr_id,
@@ -291,6 +304,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)
 int
 rte_mtr_meter_policy_update(uint16_t port_id,
 	uint32_t mtr_id,
@@ -308,6 +322,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)
 int
 rte_mtr_meter_dscp_table_update(uint16_t port_id,
 	uint32_t mtr_id, enum rte_mtr_color_in_protocol proto,
@@ -325,6 +340,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)
 int
 rte_mtr_meter_vlan_table_update(uint16_t port_id,
 	uint32_t mtr_id, enum rte_mtr_color_in_protocol proto,
@@ -342,6 +358,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)
 int
 rte_mtr_color_in_protocol_set(uint16_t port_id,
 	uint32_t mtr_id,
@@ -360,6 +377,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)
 int
 rte_mtr_color_in_protocol_get(uint16_t port_id,
 	uint32_t mtr_id,
@@ -377,6 +395,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)
 int
 rte_mtr_color_in_protocol_priority_get(uint16_t port_id,
 	uint32_t mtr_id,
@@ -395,6 +414,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)
 int
 rte_mtr_stats_update(uint16_t port_id,
 	uint32_t mtr_id,
@@ -412,6 +432,7 @@ rte_mtr_stats_update(uint16_t port_id,
 }
 
 /** MTR object stats read */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mtr_stats_read, 17.11)
 int
 rte_mtr_stats_read(uint16_t port_id,
 	uint32_t mtr_id,
diff --git a/lib/ethdev/rte_tm.c b/lib/ethdev/rte_tm.c
index 347dbb81f9..796c582149 100644
--- a/lib/ethdev/rte_tm.c
+++ b/lib/ethdev/rte_tm.c
@@ -58,6 +58,7 @@ __extension__ ({					\
 })
 
 /* Get number of leaf nodes */
+RTE_EXPORT_SYMBOL(rte_tm_get_number_of_leaf_nodes)
 int
 rte_tm_get_number_of_leaf_nodes(uint16_t port_id,
 	uint32_t *n_leaf_nodes,
@@ -87,6 +88,7 @@ rte_tm_get_number_of_leaf_nodes(uint16_t port_id,
 }
 
 /* Check node type (leaf or non-leaf) */
+RTE_EXPORT_SYMBOL(rte_tm_node_type_get)
 int
 rte_tm_node_type_get(uint16_t port_id,
 	uint32_t node_id,
@@ -104,6 +106,7 @@ rte_tm_node_type_get(uint16_t port_id,
 }
 
 /* Get capabilities */
+RTE_EXPORT_SYMBOL(rte_tm_capabilities_get)
 int rte_tm_capabilities_get(uint16_t port_id,
 	struct rte_tm_capabilities *cap,
 	struct rte_tm_error *error)
@@ -119,6 +122,7 @@ int rte_tm_capabilities_get(uint16_t port_id,
 }
 
 /* Get level capabilities */
+RTE_EXPORT_SYMBOL(rte_tm_level_capabilities_get)
 int rte_tm_level_capabilities_get(uint16_t port_id,
 	uint32_t level_id,
 	struct rte_tm_level_capabilities *cap,
@@ -135,6 +139,7 @@ int rte_tm_level_capabilities_get(uint16_t port_id,
 }
 
 /* Get node capabilities */
+RTE_EXPORT_SYMBOL(rte_tm_node_capabilities_get)
 int rte_tm_node_capabilities_get(uint16_t port_id,
 	uint32_t node_id,
 	struct rte_tm_node_capabilities *cap,
@@ -151,6 +156,7 @@ int rte_tm_node_capabilities_get(uint16_t port_id,
 }
 
 /* Add WRED profile */
+RTE_EXPORT_SYMBOL(rte_tm_wred_profile_add)
 int rte_tm_wred_profile_add(uint16_t port_id,
 	uint32_t wred_profile_id,
 	const struct rte_tm_wred_params *profile,
@@ -167,6 +173,7 @@ int rte_tm_wred_profile_add(uint16_t port_id,
 }
 
 /* Delete WRED profile */
+RTE_EXPORT_SYMBOL(rte_tm_wred_profile_delete)
 int rte_tm_wred_profile_delete(uint16_t port_id,
 	uint32_t wred_profile_id,
 	struct rte_tm_error *error)
@@ -182,6 +189,7 @@ int rte_tm_wred_profile_delete(uint16_t port_id,
 }
 
 /* Add/update shared WRED context */
+RTE_EXPORT_SYMBOL(rte_tm_shared_wred_context_add_update)
 int rte_tm_shared_wred_context_add_update(uint16_t port_id,
 	uint32_t shared_wred_context_id,
 	uint32_t wred_profile_id,
@@ -200,6 +208,7 @@ int rte_tm_shared_wred_context_add_update(uint16_t port_id,
 }
 
 /* Delete shared WRED context */
+RTE_EXPORT_SYMBOL(rte_tm_shared_wred_context_delete)
 int rte_tm_shared_wred_context_delete(uint16_t port_id,
 	uint32_t shared_wred_context_id,
 	struct rte_tm_error *error)
@@ -216,6 +225,7 @@ int rte_tm_shared_wred_context_delete(uint16_t port_id,
 }
 
 /* Add shaper profile */
+RTE_EXPORT_SYMBOL(rte_tm_shaper_profile_add)
 int rte_tm_shaper_profile_add(uint16_t port_id,
 	uint32_t shaper_profile_id,
 	const struct rte_tm_shaper_params *profile,
@@ -233,6 +243,7 @@ int rte_tm_shaper_profile_add(uint16_t port_id,
 }
 
 /* Delete WRED profile */
+RTE_EXPORT_SYMBOL(rte_tm_shaper_profile_delete)
 int rte_tm_shaper_profile_delete(uint16_t port_id,
 	uint32_t shaper_profile_id,
 	struct rte_tm_error *error)
@@ -248,6 +259,7 @@ int rte_tm_shaper_profile_delete(uint16_t port_id,
 }
 
 /* Add shared shaper */
+RTE_EXPORT_SYMBOL(rte_tm_shared_shaper_add_update)
 int rte_tm_shared_shaper_add_update(uint16_t port_id,
 	uint32_t shared_shaper_id,
 	uint32_t shaper_profile_id,
@@ -265,6 +277,7 @@ int rte_tm_shared_shaper_add_update(uint16_t port_id,
 }
 
 /* Delete shared shaper */
+RTE_EXPORT_SYMBOL(rte_tm_shared_shaper_delete)
 int rte_tm_shared_shaper_delete(uint16_t port_id,
 	uint32_t shared_shaper_id,
 	struct rte_tm_error *error)
@@ -280,6 +293,7 @@ int rte_tm_shared_shaper_delete(uint16_t port_id,
 }
 
 /* Add node to port traffic manager hierarchy */
+RTE_EXPORT_SYMBOL(rte_tm_node_add)
 int rte_tm_node_add(uint16_t port_id,
 	uint32_t node_id,
 	uint32_t parent_node_id,
@@ -301,6 +315,7 @@ int rte_tm_node_add(uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_tm_node_query, 24.11)
 int rte_tm_node_query(uint16_t port_id,
 	uint32_t node_id,
 	uint32_t *parent_node_id,
@@ -324,6 +339,7 @@ int rte_tm_node_query(uint16_t port_id,
 }
 
 /* Delete node from traffic manager hierarchy */
+RTE_EXPORT_SYMBOL(rte_tm_node_delete)
 int rte_tm_node_delete(uint16_t port_id,
 	uint32_t node_id,
 	struct rte_tm_error *error)
@@ -339,6 +355,7 @@ int rte_tm_node_delete(uint16_t port_id,
 }
 
 /* Suspend node */
+RTE_EXPORT_SYMBOL(rte_tm_node_suspend)
 int rte_tm_node_suspend(uint16_t port_id,
 	uint32_t node_id,
 	struct rte_tm_error *error)
@@ -354,6 +371,7 @@ int rte_tm_node_suspend(uint16_t port_id,
 }
 
 /* Resume node */
+RTE_EXPORT_SYMBOL(rte_tm_node_resume)
 int rte_tm_node_resume(uint16_t port_id,
 	uint32_t node_id,
 	struct rte_tm_error *error)
@@ -369,6 +387,7 @@ int rte_tm_node_resume(uint16_t port_id,
 }
 
 /* Commit the initial port traffic manager hierarchy */
+RTE_EXPORT_SYMBOL(rte_tm_hierarchy_commit)
 int rte_tm_hierarchy_commit(uint16_t port_id,
 	int clear_on_fail,
 	struct rte_tm_error *error)
@@ -384,6 +403,7 @@ int rte_tm_hierarchy_commit(uint16_t port_id,
 }
 
 /* Update node parent  */
+RTE_EXPORT_SYMBOL(rte_tm_node_parent_update)
 int rte_tm_node_parent_update(uint16_t port_id,
 	uint32_t node_id,
 	uint32_t parent_node_id,
@@ -403,6 +423,7 @@ int rte_tm_node_parent_update(uint16_t port_id,
 }
 
 /* Update node private shaper */
+RTE_EXPORT_SYMBOL(rte_tm_node_shaper_update)
 int rte_tm_node_shaper_update(uint16_t port_id,
 	uint32_t node_id,
 	uint32_t shaper_profile_id,
@@ -420,6 +441,7 @@ int rte_tm_node_shaper_update(uint16_t port_id,
 }
 
 /* Update node shared shapers */
+RTE_EXPORT_SYMBOL(rte_tm_node_shared_shaper_update)
 int rte_tm_node_shared_shaper_update(uint16_t port_id,
 	uint32_t node_id,
 	uint32_t shared_shaper_id,
@@ -438,6 +460,7 @@ int rte_tm_node_shared_shaper_update(uint16_t port_id,
 }
 
 /* Update node stats */
+RTE_EXPORT_SYMBOL(rte_tm_node_stats_update)
 int rte_tm_node_stats_update(uint16_t port_id,
 	uint32_t node_id,
 	uint64_t stats_mask,
@@ -454,6 +477,7 @@ int rte_tm_node_stats_update(uint16_t port_id,
 }
 
 /* Update WFQ weight mode */
+RTE_EXPORT_SYMBOL(rte_tm_node_wfq_weight_mode_update)
 int rte_tm_node_wfq_weight_mode_update(uint16_t port_id,
 	uint32_t node_id,
 	int *wfq_weight_mode,
@@ -473,6 +497,7 @@ int rte_tm_node_wfq_weight_mode_update(uint16_t port_id,
 }
 
 /* Update node congestion management mode */
+RTE_EXPORT_SYMBOL(rte_tm_node_cman_update)
 int rte_tm_node_cman_update(uint16_t port_id,
 	uint32_t node_id,
 	enum rte_tm_cman_mode cman,
@@ -489,6 +514,7 @@ int rte_tm_node_cman_update(uint16_t port_id,
 }
 
 /* Update node private WRED context */
+RTE_EXPORT_SYMBOL(rte_tm_node_wred_context_update)
 int rte_tm_node_wred_context_update(uint16_t port_id,
 	uint32_t node_id,
 	uint32_t wred_profile_id,
@@ -506,6 +532,7 @@ int rte_tm_node_wred_context_update(uint16_t port_id,
 }
 
 /* Update node shared WRED context */
+RTE_EXPORT_SYMBOL(rte_tm_node_shared_wred_context_update)
 int rte_tm_node_shared_wred_context_update(uint16_t port_id,
 	uint32_t node_id,
 	uint32_t shared_wred_context_id,
@@ -525,6 +552,7 @@ int rte_tm_node_shared_wred_context_update(uint16_t port_id,
 }
 
 /* Read and/or clear stats counters for specific node */
+RTE_EXPORT_SYMBOL(rte_tm_node_stats_read)
 int rte_tm_node_stats_read(uint16_t port_id,
 	uint32_t node_id,
 	struct rte_tm_node_stats *stats,
@@ -544,6 +572,7 @@ int rte_tm_node_stats_read(uint16_t port_id,
 }
 
 /* Packet marking - VLAN DEI */
+RTE_EXPORT_SYMBOL(rte_tm_mark_vlan_dei)
 int rte_tm_mark_vlan_dei(uint16_t port_id,
 	int mark_green,
 	int mark_yellow,
@@ -562,6 +591,7 @@ int rte_tm_mark_vlan_dei(uint16_t port_id,
 }
 
 /* Packet marking - IPv4/IPv6 ECN */
+RTE_EXPORT_SYMBOL(rte_tm_mark_ip_ecn)
 int rte_tm_mark_ip_ecn(uint16_t port_id,
 	int mark_green,
 	int mark_yellow,
@@ -580,6 +610,7 @@ int rte_tm_mark_ip_ecn(uint16_t port_id,
 }
 
 /* Packet marking - IPv4/IPv6 DSCP */
+RTE_EXPORT_SYMBOL(rte_tm_mark_ip_dscp)
 int rte_tm_mark_ip_dscp(uint16_t port_id,
 	int mark_green,
 	int mark_yellow,
diff --git a/lib/eventdev/eventdev_private.c b/lib/eventdev/eventdev_private.c
index 6df129fc2d..bec79952be 100644
--- a/lib/eventdev/eventdev_private.c
+++ b/lib/eventdev/eventdev_private.c
@@ -106,6 +106,7 @@ dummy_event_port_preschedule_hint(__rte_unused void *port,
 {
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(event_dev_fp_ops_reset)
 void
 event_dev_fp_ops_reset(struct rte_event_fp_ops *fp_op)
 {
@@ -129,6 +130,7 @@ event_dev_fp_ops_reset(struct rte_event_fp_ops *fp_op)
 	*fp_op = dummy;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(event_dev_fp_ops_set)
 void
 event_dev_fp_ops_set(struct rte_event_fp_ops *fp_op,
 		     const struct rte_eventdev *dev)
diff --git a/lib/eventdev/eventdev_trace_points.c b/lib/eventdev/eventdev_trace_points.c
index 8caf6353a1..c65feabf14 100644
--- a/lib/eventdev/eventdev_trace_points.c
+++ b/lib/eventdev/eventdev_trace_points.c
@@ -37,21 +37,27 @@ RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_stop,
 RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_close,
 	lib.eventdev.close)
 
+RTE_EXPORT_SYMBOL(__rte_eventdev_trace_enq_burst)
 RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_enq_burst,
 	lib.eventdev.enq.burst)
 
+RTE_EXPORT_SYMBOL(__rte_eventdev_trace_deq_burst)
 RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_deq_burst,
 	lib.eventdev.deq.burst)
 
+RTE_EXPORT_SYMBOL(__rte_eventdev_trace_maintain)
 RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_maintain,
 	lib.eventdev.maintain)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_eventdev_trace_port_profile_switch, 23.11)
 RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_port_profile_switch,
 	lib.eventdev.port.profile.switch)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_eventdev_trace_port_preschedule_modify, 24.11)
 RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_port_preschedule_modify,
 	lib.eventdev.port.preschedule.modify)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_eventdev_trace_port_preschedule, 24.11)
 RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_port_preschedule,
 	lib.eventdev.port.preschedule)
 
@@ -96,6 +102,7 @@ RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_eth_tx_adapter_start,
 RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_eth_tx_adapter_stop,
 	lib.eventdev.tx.adapter.stop)
 
+RTE_EXPORT_SYMBOL(__rte_eventdev_trace_eth_tx_adapter_enqueue)
 RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_eth_tx_adapter_enqueue,
 	lib.eventdev.tx.adapter.enq)
 
@@ -112,12 +119,15 @@ RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_timer_adapter_stop,
 RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_timer_adapter_free,
 	lib.eventdev.timer.free)
 
+RTE_EXPORT_SYMBOL(__rte_eventdev_trace_timer_arm_burst)
 RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_timer_arm_burst,
 	lib.eventdev.timer.burst)
 
+RTE_EXPORT_SYMBOL(__rte_eventdev_trace_timer_arm_tmo_tick_burst)
 RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_timer_arm_tmo_tick_burst,
 	lib.eventdev.timer.tick.burst)
 
+RTE_EXPORT_SYMBOL(__rte_eventdev_trace_timer_cancel_burst)
 RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_timer_cancel_burst,
 	lib.eventdev.timer.cancel)
 
@@ -140,6 +150,7 @@ RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_crypto_adapter_start,
 RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_crypto_adapter_stop,
 	lib.eventdev.crypto.stop)
 
+RTE_EXPORT_SYMBOL(__rte_eventdev_trace_crypto_adapter_enqueue)
 RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_crypto_adapter_enqueue,
 	lib.eventdev.crypto.enq)
 
diff --git a/lib/eventdev/rte_event_crypto_adapter.c b/lib/eventdev/rte_event_crypto_adapter.c
index fc43e056d7..ce9aeaa7be 100644
--- a/lib/eventdev/rte_event_crypto_adapter.c
+++ b/lib/eventdev/rte_event_crypto_adapter.c
@@ -362,6 +362,7 @@ eca_default_config_cb(uint8_t id, uint8_t dev_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_crypto_adapter_create_ext)
 int
 rte_event_crypto_adapter_create_ext(uint8_t id, uint8_t dev_id,
 				rte_event_crypto_adapter_conf_cb conf_cb,
@@ -437,6 +438,7 @@ rte_event_crypto_adapter_create_ext(uint8_t id, uint8_t dev_id,
 }
 
 
+RTE_EXPORT_SYMBOL(rte_event_crypto_adapter_create)
 int
 rte_event_crypto_adapter_create(uint8_t id, uint8_t dev_id,
 				struct rte_event_port_conf *port_config,
@@ -465,6 +467,7 @@ rte_event_crypto_adapter_create(uint8_t id, uint8_t dev_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_crypto_adapter_free)
 int
 rte_event_crypto_adapter_free(uint8_t id)
 {
@@ -1036,6 +1039,7 @@ eca_add_queue_pair(struct event_crypto_adapter *adapter, uint8_t cdev_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_crypto_adapter_queue_pair_add)
 int
 rte_event_crypto_adapter_queue_pair_add(uint8_t id,
 			uint8_t cdev_id,
@@ -1190,6 +1194,7 @@ rte_event_crypto_adapter_queue_pair_add(uint8_t id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_crypto_adapter_queue_pair_del)
 int
 rte_event_crypto_adapter_queue_pair_del(uint8_t id, uint8_t cdev_id,
 					int32_t queue_pair_id)
@@ -1315,6 +1320,7 @@ eca_adapter_ctrl(uint8_t id, int start)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_crypto_adapter_start)
 int
 rte_event_crypto_adapter_start(uint8_t id)
 {
@@ -1329,6 +1335,7 @@ rte_event_crypto_adapter_start(uint8_t id)
 	return eca_adapter_ctrl(id, 1);
 }
 
+RTE_EXPORT_SYMBOL(rte_event_crypto_adapter_stop)
 int
 rte_event_crypto_adapter_stop(uint8_t id)
 {
@@ -1336,6 +1343,7 @@ rte_event_crypto_adapter_stop(uint8_t id)
 	return eca_adapter_ctrl(id, 0);
 }
 
+RTE_EXPORT_SYMBOL(rte_event_crypto_adapter_stats_get)
 int
 rte_event_crypto_adapter_stats_get(uint8_t id,
 				struct rte_event_crypto_adapter_stats *stats)
@@ -1388,6 +1396,7 @@ rte_event_crypto_adapter_stats_get(uint8_t id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_crypto_adapter_stats_reset)
 int
 rte_event_crypto_adapter_stats_reset(uint8_t id)
 {
@@ -1420,6 +1429,7 @@ rte_event_crypto_adapter_stats_reset(uint8_t id)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_crypto_adapter_runtime_params_init, 23.03)
 int
 rte_event_crypto_adapter_runtime_params_init(
 		struct rte_event_crypto_adapter_runtime_params *params)
@@ -1458,6 +1468,7 @@ crypto_adapter_cap_check(struct event_crypto_adapter *adapter)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_crypto_adapter_runtime_params_set, 23.03)
 int
 rte_event_crypto_adapter_runtime_params_set(uint8_t id,
 		struct rte_event_crypto_adapter_runtime_params *params)
@@ -1490,6 +1501,7 @@ rte_event_crypto_adapter_runtime_params_set(uint8_t id,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_crypto_adapter_runtime_params_get, 23.03)
 int
 rte_event_crypto_adapter_runtime_params_get(uint8_t id,
 		struct rte_event_crypto_adapter_runtime_params *params)
@@ -1521,6 +1533,7 @@ rte_event_crypto_adapter_runtime_params_get(uint8_t id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_crypto_adapter_service_id_get)
 int
 rte_event_crypto_adapter_service_id_get(uint8_t id, uint32_t *service_id)
 {
@@ -1540,6 +1553,7 @@ rte_event_crypto_adapter_service_id_get(uint8_t id, uint32_t *service_id)
 	return adapter->service_inited ? 0 : -ESRCH;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_crypto_adapter_event_port_get)
 int
 rte_event_crypto_adapter_event_port_get(uint8_t id, uint8_t *event_port_id)
 {
@@ -1558,6 +1572,7 @@ rte_event_crypto_adapter_event_port_get(uint8_t id, uint8_t *event_port_id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_crypto_adapter_vector_limits_get)
 int
 rte_event_crypto_adapter_vector_limits_get(
 	uint8_t dev_id, uint16_t cdev_id,
diff --git a/lib/eventdev/rte_event_dma_adapter.c b/lib/eventdev/rte_event_dma_adapter.c
index d9a02a30f2..88ed4d252b 100644
--- a/lib/eventdev/rte_event_dma_adapter.c
+++ b/lib/eventdev/rte_event_dma_adapter.c
@@ -340,6 +340,7 @@ edma_default_config_cb(uint8_t id, uint8_t evdev_id, struct rte_event_dma_adapte
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_dma_adapter_create_ext, 23.11)
 int
 rte_event_dma_adapter_create_ext(uint8_t id, uint8_t evdev_id,
 				 rte_event_dma_adapter_conf_cb conf_cb,
@@ -433,6 +434,7 @@ rte_event_dma_adapter_create_ext(uint8_t id, uint8_t evdev_id,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_dma_adapter_create, 23.11)
 int
 rte_event_dma_adapter_create(uint8_t id, uint8_t evdev_id, struct rte_event_port_conf *port_config,
 			    enum rte_event_dma_adapter_mode mode)
@@ -457,6 +459,7 @@ rte_event_dma_adapter_create(uint8_t id, uint8_t evdev_id, struct rte_event_port
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_dma_adapter_free, 23.11)
 int
 rte_event_dma_adapter_free(uint8_t id)
 {
@@ -477,6 +480,7 @@ rte_event_dma_adapter_free(uint8_t id)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_dma_adapter_event_port_get, 23.11)
 int
 rte_event_dma_adapter_event_port_get(uint8_t id, uint8_t *event_port_id)
 {
@@ -983,6 +987,7 @@ edma_add_vchan(struct event_dma_adapter *adapter, int16_t dma_dev_id, uint16_t v
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_dma_adapter_vchan_add, 23.11)
 int
 rte_event_dma_adapter_vchan_add(uint8_t id, int16_t dma_dev_id, uint16_t vchan,
 				const struct rte_event *event)
@@ -1097,6 +1102,7 @@ rte_event_dma_adapter_vchan_add(uint8_t id, int16_t dma_dev_id, uint16_t vchan,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_dma_adapter_vchan_del, 23.11)
 int
 rte_event_dma_adapter_vchan_del(uint8_t id, int16_t dma_dev_id, uint16_t vchan)
 {
@@ -1163,6 +1169,7 @@ rte_event_dma_adapter_vchan_del(uint8_t id, int16_t dma_dev_id, uint16_t vchan)
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_dma_adapter_service_id_get, 23.11)
 int
 rte_event_dma_adapter_service_id_get(uint8_t id, uint32_t *service_id)
 {
@@ -1222,6 +1229,7 @@ edma_adapter_ctrl(uint8_t id, int start)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_dma_adapter_start, 23.11)
 int
 rte_event_dma_adapter_start(uint8_t id)
 {
@@ -1236,6 +1244,7 @@ rte_event_dma_adapter_start(uint8_t id)
 	return edma_adapter_ctrl(id, 1);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_dma_adapter_stop, 23.11)
 int
 rte_event_dma_adapter_stop(uint8_t id)
 {
@@ -1244,6 +1253,7 @@ rte_event_dma_adapter_stop(uint8_t id)
 
 #define DEFAULT_MAX_NB 128
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_dma_adapter_runtime_params_init, 23.11)
 int
 rte_event_dma_adapter_runtime_params_init(struct rte_event_dma_adapter_runtime_params *params)
 {
@@ -1279,6 +1289,7 @@ dma_adapter_cap_check(struct event_dma_adapter *adapter)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_dma_adapter_runtime_params_set, 23.11)
 int
 rte_event_dma_adapter_runtime_params_set(uint8_t id,
 					 struct rte_event_dma_adapter_runtime_params *params)
@@ -1308,6 +1319,7 @@ rte_event_dma_adapter_runtime_params_set(uint8_t id,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_dma_adapter_runtime_params_get, 23.11)
 int
 rte_event_dma_adapter_runtime_params_get(uint8_t id,
 					 struct rte_event_dma_adapter_runtime_params *params)
@@ -1335,6 +1347,7 @@ rte_event_dma_adapter_runtime_params_get(uint8_t id,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_dma_adapter_stats_get, 23.11)
 int
 rte_event_dma_adapter_stats_get(uint8_t id, struct rte_event_dma_adapter_stats *stats)
 {
@@ -1380,6 +1393,7 @@ rte_event_dma_adapter_stats_get(uint8_t id, struct rte_event_dma_adapter_stats *
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_dma_adapter_stats_reset, 23.11)
 int
 rte_event_dma_adapter_stats_reset(uint8_t id)
 {
@@ -1412,6 +1426,7 @@ rte_event_dma_adapter_stats_reset(uint8_t id)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_dma_adapter_enqueue, 23.11)
 uint16_t
 rte_event_dma_adapter_enqueue(uint8_t dev_id, uint8_t port_id, struct rte_event ev[],
 			      uint16_t nb_events)
diff --git a/lib/eventdev/rte_event_eth_rx_adapter.c b/lib/eventdev/rte_event_eth_rx_adapter.c
index ad832413d6..339fa75c82 100644
--- a/lib/eventdev/rte_event_eth_rx_adapter.c
+++ b/lib/eventdev/rte_event_eth_rx_adapter.c
@@ -2518,6 +2518,7 @@ rxa_config_params_validate(struct rte_event_eth_rx_adapter_params *rxa_params,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_rx_adapter_create_ext)
 int
 rte_event_eth_rx_adapter_create_ext(uint8_t id, uint8_t dev_id,
 				rte_event_eth_rx_adapter_conf_cb conf_cb,
@@ -2532,6 +2533,7 @@ rte_event_eth_rx_adapter_create_ext(uint8_t id, uint8_t dev_id,
 	return rxa_create(id, dev_id, &rxa_params, conf_cb, conf_arg);
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_rx_adapter_create_with_params)
 int
 rte_event_eth_rx_adapter_create_with_params(uint8_t id, uint8_t dev_id,
 			struct rte_event_port_conf *port_config,
@@ -2564,6 +2566,7 @@ rte_event_eth_rx_adapter_create_with_params(uint8_t id, uint8_t dev_id,
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_eth_rx_adapter_create_ext_with_params, 23.11)
 int
 rte_event_eth_rx_adapter_create_ext_with_params(uint8_t id, uint8_t dev_id,
 			rte_event_eth_rx_adapter_conf_cb conf_cb,
@@ -2580,6 +2583,7 @@ rte_event_eth_rx_adapter_create_ext_with_params(uint8_t id, uint8_t dev_id,
 	return rxa_create(id, dev_id, &temp_params, conf_cb, conf_arg);
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_rx_adapter_create)
 int
 rte_event_eth_rx_adapter_create(uint8_t id, uint8_t dev_id,
 		struct rte_event_port_conf *port_config)
@@ -2605,6 +2609,7 @@ rte_event_eth_rx_adapter_create(uint8_t id, uint8_t dev_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_rx_adapter_free)
 int
 rte_event_eth_rx_adapter_free(uint8_t id)
 {
@@ -2637,6 +2642,7 @@ rte_event_eth_rx_adapter_free(uint8_t id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_rx_adapter_queue_add)
 int
 rte_event_eth_rx_adapter_queue_add(uint8_t id,
 		uint16_t eth_dev_id,
@@ -2790,6 +2796,7 @@ rte_event_eth_rx_adapter_queue_add(uint8_t id,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_eth_rx_adapter_queues_add, 25.03)
 int
 rte_event_eth_rx_adapter_queues_add(uint8_t id, uint16_t eth_dev_id, int32_t rx_queue_id[],
 				    const struct rte_event_eth_rx_adapter_queue_conf queue_conf[],
@@ -2961,6 +2968,7 @@ rxa_sw_vector_limits(struct rte_event_eth_rx_adapter_vector_limits *limits)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_rx_adapter_queue_del)
 int
 rte_event_eth_rx_adapter_queue_del(uint8_t id, uint16_t eth_dev_id,
 				int32_t rx_queue_id)
@@ -3089,6 +3097,7 @@ rte_event_eth_rx_adapter_queue_del(uint8_t id, uint16_t eth_dev_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_rx_adapter_vector_limits_get)
 int
 rte_event_eth_rx_adapter_vector_limits_get(
 	uint8_t dev_id, uint16_t eth_port_id,
@@ -3130,6 +3139,7 @@ rte_event_eth_rx_adapter_vector_limits_get(
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_rx_adapter_start)
 int
 rte_event_eth_rx_adapter_start(uint8_t id)
 {
@@ -3137,6 +3147,7 @@ rte_event_eth_rx_adapter_start(uint8_t id)
 	return rxa_ctrl(id, 1);
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_rx_adapter_stop)
 int
 rte_event_eth_rx_adapter_stop(uint8_t id)
 {
@@ -3153,6 +3164,7 @@ rxa_queue_stats_reset(struct eth_rx_queue_info *queue_info)
 	memset(q_stats, 0, sizeof(*q_stats));
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_rx_adapter_stats_get)
 int
 rte_event_eth_rx_adapter_stats_get(uint8_t id,
 			       struct rte_event_eth_rx_adapter_stats *stats)
@@ -3227,6 +3239,7 @@ rte_event_eth_rx_adapter_stats_get(uint8_t id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_rx_adapter_queue_stats_get)
 int
 rte_event_eth_rx_adapter_queue_stats_get(uint8_t id,
 		uint16_t eth_dev_id,
@@ -3291,6 +3304,7 @@ rte_event_eth_rx_adapter_queue_stats_get(uint8_t id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_rx_adapter_stats_reset)
 int
 rte_event_eth_rx_adapter_stats_reset(uint8_t id)
 {
@@ -3338,6 +3352,7 @@ rte_event_eth_rx_adapter_stats_reset(uint8_t id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_rx_adapter_queue_stats_reset)
 int
 rte_event_eth_rx_adapter_queue_stats_reset(uint8_t id,
 		uint16_t eth_dev_id,
@@ -3392,6 +3407,7 @@ rte_event_eth_rx_adapter_queue_stats_reset(uint8_t id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_rx_adapter_service_id_get)
 int
 rte_event_eth_rx_adapter_service_id_get(uint8_t id, uint32_t *service_id)
 {
@@ -3414,6 +3430,7 @@ rte_event_eth_rx_adapter_service_id_get(uint8_t id, uint32_t *service_id)
 	return rx_adapter->service_inited ? 0 : -ESRCH;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_rx_adapter_event_port_get)
 int
 rte_event_eth_rx_adapter_event_port_get(uint8_t id, uint8_t *event_port_id)
 {
@@ -3436,6 +3453,7 @@ rte_event_eth_rx_adapter_event_port_get(uint8_t id, uint8_t *event_port_id)
 	return rx_adapter->service_inited ? 0 : -ESRCH;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_rx_adapter_cb_register)
 int
 rte_event_eth_rx_adapter_cb_register(uint8_t id,
 					uint16_t eth_dev_id,
@@ -3484,6 +3502,7 @@ rte_event_eth_rx_adapter_cb_register(uint8_t id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_rx_adapter_queue_conf_get)
 int
 rte_event_eth_rx_adapter_queue_conf_get(uint8_t id,
 			uint16_t eth_dev_id,
@@ -3585,6 +3604,7 @@ rxa_is_queue_added(struct event_eth_rx_adapter *rx_adapter,
 #define rxa_dev_instance_get(rx_adapter) \
 		rxa_evdev((rx_adapter))->dev_ops->eth_rx_adapter_instance_get
 
+RTE_EXPORT_SYMBOL(rte_event_eth_rx_adapter_instance_get)
 int
 rte_event_eth_rx_adapter_instance_get(uint16_t eth_dev_id,
 				      uint16_t rx_queue_id,
@@ -3663,6 +3683,7 @@ rxa_caps_check(struct event_eth_rx_adapter *rxa)
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_eth_rx_adapter_runtime_params_init, 23.03)
 int
 rte_event_eth_rx_adapter_runtime_params_init(
 		struct rte_event_eth_rx_adapter_runtime_params *params)
@@ -3676,6 +3697,7 @@ rte_event_eth_rx_adapter_runtime_params_init(
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_eth_rx_adapter_runtime_params_set, 23.03)
 int
 rte_event_eth_rx_adapter_runtime_params_set(uint8_t id,
 		struct rte_event_eth_rx_adapter_runtime_params *params)
@@ -3704,6 +3726,7 @@ rte_event_eth_rx_adapter_runtime_params_set(uint8_t id,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_eth_rx_adapter_runtime_params_get, 23.03)
 int
 rte_event_eth_rx_adapter_runtime_params_get(uint8_t id,
 		struct rte_event_eth_rx_adapter_runtime_params *params)
diff --git a/lib/eventdev/rte_event_eth_tx_adapter.c b/lib/eventdev/rte_event_eth_tx_adapter.c
index 67fff8b7d6..0ee12e5eae 100644
--- a/lib/eventdev/rte_event_eth_tx_adapter.c
+++ b/lib/eventdev/rte_event_eth_tx_adapter.c
@@ -1038,6 +1038,7 @@ txa_service_stop(uint8_t id)
 }
 
 
+RTE_EXPORT_SYMBOL(rte_event_eth_tx_adapter_create)
 int
 rte_event_eth_tx_adapter_create(uint8_t id, uint8_t dev_id,
 				struct rte_event_port_conf *port_conf)
@@ -1082,6 +1083,7 @@ rte_event_eth_tx_adapter_create(uint8_t id, uint8_t dev_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_tx_adapter_create_ext)
 int
 rte_event_eth_tx_adapter_create_ext(uint8_t id, uint8_t dev_id,
 				rte_event_eth_tx_adapter_conf_cb conf_cb,
@@ -1126,6 +1128,7 @@ rte_event_eth_tx_adapter_create_ext(uint8_t id, uint8_t dev_id,
 }
 
 
+RTE_EXPORT_SYMBOL(rte_event_eth_tx_adapter_event_port_get)
 int
 rte_event_eth_tx_adapter_event_port_get(uint8_t id, uint8_t *event_port_id)
 {
@@ -1136,6 +1139,7 @@ rte_event_eth_tx_adapter_event_port_get(uint8_t id, uint8_t *event_port_id)
 	return txa_service_event_port_get(id, event_port_id);
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_tx_adapter_free)
 int
 rte_event_eth_tx_adapter_free(uint8_t id)
 {
@@ -1155,6 +1159,7 @@ rte_event_eth_tx_adapter_free(uint8_t id)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_tx_adapter_queue_add)
 int
 rte_event_eth_tx_adapter_queue_add(uint8_t id,
 				uint16_t eth_dev_id,
@@ -1188,6 +1193,7 @@ rte_event_eth_tx_adapter_queue_add(uint8_t id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_tx_adapter_queue_del)
 int
 rte_event_eth_tx_adapter_queue_del(uint8_t id,
 				uint16_t eth_dev_id,
@@ -1220,6 +1226,7 @@ rte_event_eth_tx_adapter_queue_del(uint8_t id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_tx_adapter_service_id_get)
 int
 rte_event_eth_tx_adapter_service_id_get(uint8_t id, uint32_t *service_id)
 {
@@ -1228,6 +1235,7 @@ rte_event_eth_tx_adapter_service_id_get(uint8_t id, uint32_t *service_id)
 	return txa_service_id_get(id, service_id);
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_tx_adapter_start)
 int
 rte_event_eth_tx_adapter_start(uint8_t id)
 {
@@ -1242,6 +1250,7 @@ rte_event_eth_tx_adapter_start(uint8_t id)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_tx_adapter_stats_get)
 int
 rte_event_eth_tx_adapter_stats_get(uint8_t id,
 				struct rte_event_eth_tx_adapter_stats *stats)
@@ -1278,6 +1287,7 @@ rte_event_eth_tx_adapter_stats_get(uint8_t id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_tx_adapter_stats_reset)
 int
 rte_event_eth_tx_adapter_stats_reset(uint8_t id)
 {
@@ -1295,6 +1305,7 @@ rte_event_eth_tx_adapter_stats_reset(uint8_t id)
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_eth_tx_adapter_runtime_params_init, 23.03)
 int
 rte_event_eth_tx_adapter_runtime_params_init(
 		struct rte_event_eth_tx_adapter_runtime_params *txa_params)
@@ -1321,6 +1332,7 @@ txa_caps_check(struct txa_service_data *txa)
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_eth_tx_adapter_runtime_params_set, 23.03)
 int
 rte_event_eth_tx_adapter_runtime_params_set(uint8_t id,
 		struct rte_event_eth_tx_adapter_runtime_params *txa_params)
@@ -1352,6 +1364,7 @@ rte_event_eth_tx_adapter_runtime_params_set(uint8_t id,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_eth_tx_adapter_runtime_params_get, 23.03)
 int
 rte_event_eth_tx_adapter_runtime_params_get(uint8_t id,
 		struct rte_event_eth_tx_adapter_runtime_params *txa_params)
@@ -1383,6 +1396,7 @@ rte_event_eth_tx_adapter_runtime_params_get(uint8_t id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_tx_adapter_stop)
 int
 rte_event_eth_tx_adapter_stop(uint8_t id)
 {
@@ -1397,6 +1411,7 @@ rte_event_eth_tx_adapter_stop(uint8_t id)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_tx_adapter_instance_get)
 int
 rte_event_eth_tx_adapter_instance_get(uint16_t eth_dev_id,
 				      uint16_t tx_queue_id,
@@ -1530,6 +1545,7 @@ txa_queue_start_state_set(uint16_t eth_dev_id, uint16_t tx_queue_id,
 					    start_state, txa);
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_tx_adapter_queue_start)
 int
 rte_event_eth_tx_adapter_queue_start(uint16_t eth_dev_id, uint16_t tx_queue_id)
 {
@@ -1538,6 +1554,7 @@ rte_event_eth_tx_adapter_queue_start(uint16_t eth_dev_id, uint16_t tx_queue_id)
 	return txa_queue_start_state_set(eth_dev_id, tx_queue_id, true);
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_tx_adapter_queue_stop)
 int
 rte_event_eth_tx_adapter_queue_stop(uint16_t eth_dev_id, uint16_t tx_queue_id)
 {
diff --git a/lib/eventdev/rte_event_ring.c b/lib/eventdev/rte_event_ring.c
index b965970cf9..7b75584aef 100644
--- a/lib/eventdev/rte_event_ring.c
+++ b/lib/eventdev/rte_event_ring.c
@@ -7,6 +7,7 @@
 #include "rte_event_ring.h"
 #include "eventdev_trace.h"
 
+RTE_EXPORT_SYMBOL(rte_event_ring_init)
 int
 rte_event_ring_init(struct rte_event_ring *r, const char *name,
 	unsigned int count, unsigned int flags)
@@ -22,6 +23,7 @@ rte_event_ring_init(struct rte_event_ring *r, const char *name,
 }
 
 /* create the ring */
+RTE_EXPORT_SYMBOL(rte_event_ring_create)
 struct rte_event_ring *
 rte_event_ring_create(const char *name, unsigned int count, int socket_id,
 		unsigned int flags)
@@ -34,6 +36,7 @@ rte_event_ring_create(const char *name, unsigned int count, int socket_id,
 }
 
 
+RTE_EXPORT_SYMBOL(rte_event_ring_lookup)
 struct rte_event_ring *
 rte_event_ring_lookup(const char *name)
 {
@@ -43,6 +46,7 @@ rte_event_ring_lookup(const char *name)
 }
 
 /* free the ring */
+RTE_EXPORT_SYMBOL(rte_event_ring_free)
 void
 rte_event_ring_free(struct rte_event_ring *r)
 {
diff --git a/lib/eventdev/rte_event_timer_adapter.c b/lib/eventdev/rte_event_timer_adapter.c
index 5886965d14..1fb64ffc2d 100644
--- a/lib/eventdev/rte_event_timer_adapter.c
+++ b/lib/eventdev/rte_event_timer_adapter.c
@@ -132,6 +132,7 @@ default_port_conf_cb(uint16_t id, uint8_t event_dev_id, uint8_t *event_port_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_timer_adapter_create)
 struct rte_event_timer_adapter *
 rte_event_timer_adapter_create(const struct rte_event_timer_adapter_conf *conf)
 {
@@ -139,6 +140,7 @@ rte_event_timer_adapter_create(const struct rte_event_timer_adapter_conf *conf)
 						  NULL);
 }
 
+RTE_EXPORT_SYMBOL(rte_event_timer_adapter_create_ext)
 struct rte_event_timer_adapter *
 rte_event_timer_adapter_create_ext(
 		const struct rte_event_timer_adapter_conf *conf,
@@ -264,6 +266,7 @@ rte_event_timer_adapter_create_ext(
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_timer_adapter_get_info)
 int
 rte_event_timer_adapter_get_info(const struct rte_event_timer_adapter *adapter,
 		struct rte_event_timer_adapter_info *adapter_info)
@@ -284,6 +287,7 @@ rte_event_timer_adapter_get_info(const struct rte_event_timer_adapter *adapter,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_timer_adapter_start)
 int
 rte_event_timer_adapter_start(const struct rte_event_timer_adapter *adapter)
 {
@@ -307,6 +311,7 @@ rte_event_timer_adapter_start(const struct rte_event_timer_adapter *adapter)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_timer_adapter_stop)
 int
 rte_event_timer_adapter_stop(const struct rte_event_timer_adapter *adapter)
 {
@@ -330,6 +335,7 @@ rte_event_timer_adapter_stop(const struct rte_event_timer_adapter *adapter)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_timer_adapter_lookup)
 struct rte_event_timer_adapter *
 rte_event_timer_adapter_lookup(uint16_t adapter_id)
 {
@@ -397,6 +403,7 @@ rte_event_timer_adapter_lookup(uint16_t adapter_id)
 	return adapter;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_timer_adapter_free)
 int
 rte_event_timer_adapter_free(struct rte_event_timer_adapter *adapter)
 {
@@ -438,6 +445,7 @@ rte_event_timer_adapter_free(struct rte_event_timer_adapter *adapter)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_timer_adapter_service_id_get)
 int
 rte_event_timer_adapter_service_id_get(struct rte_event_timer_adapter *adapter,
 				       uint32_t *service_id)
@@ -455,6 +463,7 @@ rte_event_timer_adapter_service_id_get(struct rte_event_timer_adapter *adapter,
 	return adapter->data->service_inited ? 0 : -ESRCH;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_timer_adapter_stats_get)
 int
 rte_event_timer_adapter_stats_get(struct rte_event_timer_adapter *adapter,
 				  struct rte_event_timer_adapter_stats *stats)
@@ -469,6 +478,7 @@ rte_event_timer_adapter_stats_get(struct rte_event_timer_adapter *adapter,
 	return adapter->ops->stats_get(adapter, stats);
 }
 
+RTE_EXPORT_SYMBOL(rte_event_timer_adapter_stats_reset)
 int
 rte_event_timer_adapter_stats_reset(struct rte_event_timer_adapter *adapter)
 {
@@ -479,6 +489,7 @@ rte_event_timer_adapter_stats_reset(struct rte_event_timer_adapter *adapter)
 	return adapter->ops->stats_reset(adapter);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_timer_remaining_ticks_get, 23.03)
 int
 rte_event_timer_remaining_ticks_get(
 			const struct rte_event_timer_adapter *adapter,
diff --git a/lib/eventdev/rte_eventdev.c b/lib/eventdev/rte_eventdev.c
index 43cd95d765..c16e6672e5 100644
--- a/lib/eventdev/rte_eventdev.c
+++ b/lib/eventdev/rte_eventdev.c
@@ -29,10 +29,12 @@
 #include "eventdev_pmd.h"
 #include "eventdev_trace.h"
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_event_logtype)
 RTE_LOG_REGISTER_DEFAULT(rte_event_logtype, INFO);
 
 static struct rte_eventdev rte_event_devices[RTE_EVENT_MAX_DEVS];
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eventdevs)
 struct rte_eventdev *rte_eventdevs = rte_event_devices;
 
 static struct rte_eventdev_global eventdev_globals = {
@@ -40,16 +42,19 @@ static struct rte_eventdev_global eventdev_globals = {
 };
 
 /* Public fastpath APIs. */
+RTE_EXPORT_SYMBOL(rte_event_fp_ops)
 struct rte_event_fp_ops rte_event_fp_ops[RTE_EVENT_MAX_DEVS];
 
 /* Event dev north bound API implementation */
 
+RTE_EXPORT_SYMBOL(rte_event_dev_count)
 uint8_t
 rte_event_dev_count(void)
 {
 	return eventdev_globals.nb_devs;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_dev_get_dev_id)
 int
 rte_event_dev_get_dev_id(const char *name)
 {
@@ -74,6 +79,7 @@ rte_event_dev_get_dev_id(const char *name)
 	return -ENODEV;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_dev_socket_id)
 int
 rte_event_dev_socket_id(uint8_t dev_id)
 {
@@ -87,6 +93,7 @@ rte_event_dev_socket_id(uint8_t dev_id)
 	return dev->data->socket_id;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_dev_info_get)
 int
 rte_event_dev_info_get(uint8_t dev_id, struct rte_event_dev_info *dev_info)
 {
@@ -115,6 +122,7 @@ rte_event_dev_info_get(uint8_t dev_id, struct rte_event_dev_info *dev_info)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_rx_adapter_caps_get)
 int
 rte_event_eth_rx_adapter_caps_get(uint8_t dev_id, uint16_t eth_port_id,
 				uint32_t *caps)
@@ -141,6 +149,7 @@ rte_event_eth_rx_adapter_caps_get(uint8_t dev_id, uint16_t eth_port_id,
 		: 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_timer_adapter_caps_get)
 int
 rte_event_timer_adapter_caps_get(uint8_t dev_id, uint32_t *caps)
 {
@@ -166,6 +175,7 @@ rte_event_timer_adapter_caps_get(uint8_t dev_id, uint32_t *caps)
 		: 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_crypto_adapter_caps_get)
 int
 rte_event_crypto_adapter_caps_get(uint8_t dev_id, uint8_t cdev_id,
 				  uint32_t *caps)
@@ -194,6 +204,7 @@ rte_event_crypto_adapter_caps_get(uint8_t dev_id, uint8_t cdev_id,
 		dev->dev_ops->crypto_adapter_caps_get(dev, cdev, caps) : 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_eth_tx_adapter_caps_get)
 int
 rte_event_eth_tx_adapter_caps_get(uint8_t dev_id, uint16_t eth_port_id,
 				uint32_t *caps)
@@ -222,6 +233,7 @@ rte_event_eth_tx_adapter_caps_get(uint8_t dev_id, uint16_t eth_port_id,
 		: 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_dma_adapter_caps_get, 23.11)
 int
 rte_event_dma_adapter_caps_get(uint8_t dev_id, uint8_t dma_dev_id, uint32_t *caps)
 {
@@ -337,6 +349,7 @@ event_dev_port_config(struct rte_eventdev *dev, uint8_t nb_ports)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_dev_configure)
 int
 rte_event_dev_configure(uint8_t dev_id,
 			const struct rte_event_dev_config *dev_conf)
@@ -539,6 +552,7 @@ is_valid_queue(struct rte_eventdev *dev, uint8_t queue_id)
 		return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_queue_default_conf_get)
 int
 rte_event_queue_default_conf_get(uint8_t dev_id, uint8_t queue_id,
 				 struct rte_event_queue_conf *queue_conf)
@@ -599,6 +613,7 @@ is_valid_ordered_queue_conf(const struct rte_event_queue_conf *queue_conf)
 }
 
 
+RTE_EXPORT_SYMBOL(rte_event_queue_setup)
 int
 rte_event_queue_setup(uint8_t dev_id, uint8_t queue_id,
 		      const struct rte_event_queue_conf *queue_conf)
@@ -670,6 +685,7 @@ is_valid_port(struct rte_eventdev *dev, uint8_t port_id)
 		return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_port_default_conf_get)
 int
 rte_event_port_default_conf_get(uint8_t dev_id, uint8_t port_id,
 				 struct rte_event_port_conf *port_conf)
@@ -697,6 +713,7 @@ rte_event_port_default_conf_get(uint8_t dev_id, uint8_t port_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_port_setup)
 int
 rte_event_port_setup(uint8_t dev_id, uint8_t port_id,
 		     const struct rte_event_port_conf *port_conf)
@@ -787,6 +804,7 @@ rte_event_port_setup(uint8_t dev_id, uint8_t port_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_port_quiesce)
 void
 rte_event_port_quiesce(uint8_t dev_id, uint8_t port_id,
 		       rte_eventdev_port_flush_t release_cb, void *args)
@@ -807,6 +825,7 @@ rte_event_port_quiesce(uint8_t dev_id, uint8_t port_id,
 		dev->dev_ops->port_quiesce(dev, dev->data->ports[port_id], release_cb, args);
 }
 
+RTE_EXPORT_SYMBOL(rte_event_dev_attr_get)
 int
 rte_event_dev_attr_get(uint8_t dev_id, uint32_t attr_id,
 		       uint32_t *attr_value)
@@ -837,6 +856,7 @@ rte_event_dev_attr_get(uint8_t dev_id, uint32_t attr_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_port_attr_get)
 int
 rte_event_port_attr_get(uint8_t dev_id, uint8_t port_id, uint32_t attr_id,
 			uint32_t *attr_value)
@@ -888,6 +908,7 @@ rte_event_port_attr_get(uint8_t dev_id, uint8_t port_id, uint32_t attr_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_queue_attr_get)
 int
 rte_event_queue_attr_get(uint8_t dev_id, uint8_t queue_id, uint32_t attr_id,
 			uint32_t *attr_value)
@@ -947,6 +968,7 @@ rte_event_queue_attr_get(uint8_t dev_id, uint8_t queue_id, uint32_t attr_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_queue_attr_set)
 int
 rte_event_queue_attr_set(uint8_t dev_id, uint8_t queue_id, uint32_t attr_id,
 			 uint64_t attr_value)
@@ -975,6 +997,7 @@ rte_event_queue_attr_set(uint8_t dev_id, uint8_t queue_id, uint32_t attr_id,
 	return dev->dev_ops->queue_attr_set(dev, queue_id, attr_id, attr_value);
 }
 
+RTE_EXPORT_SYMBOL(rte_event_port_link)
 int
 rte_event_port_link(uint8_t dev_id, uint8_t port_id,
 		    const uint8_t queues[], const uint8_t priorities[],
@@ -983,6 +1006,7 @@ rte_event_port_link(uint8_t dev_id, uint8_t port_id,
 	return rte_event_port_profile_links_set(dev_id, port_id, queues, priorities, nb_links, 0);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_port_profile_links_set, 23.11)
 int
 rte_event_port_profile_links_set(uint8_t dev_id, uint8_t port_id, const uint8_t queues[],
 				 const uint8_t priorities[], uint16_t nb_links, uint8_t profile_id)
@@ -1065,6 +1089,7 @@ rte_event_port_profile_links_set(uint8_t dev_id, uint8_t port_id, const uint8_t
 	return diag;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_port_unlink)
 int
 rte_event_port_unlink(uint8_t dev_id, uint8_t port_id,
 		      uint8_t queues[], uint16_t nb_unlinks)
@@ -1072,6 +1097,7 @@ rte_event_port_unlink(uint8_t dev_id, uint8_t port_id,
 	return rte_event_port_profile_unlink(dev_id, port_id, queues, nb_unlinks, 0);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_port_profile_unlink, 23.11)
 int
 rte_event_port_profile_unlink(uint8_t dev_id, uint8_t port_id, uint8_t queues[],
 			      uint16_t nb_unlinks, uint8_t profile_id)
@@ -1158,6 +1184,7 @@ rte_event_port_profile_unlink(uint8_t dev_id, uint8_t port_id, uint8_t queues[],
 	return diag;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_port_unlinks_in_progress)
 int
 rte_event_port_unlinks_in_progress(uint8_t dev_id, uint8_t port_id)
 {
@@ -1182,6 +1209,7 @@ rte_event_port_unlinks_in_progress(uint8_t dev_id, uint8_t port_id)
 	return dev->dev_ops->port_unlinks_in_progress(dev, dev->data->ports[port_id]);
 }
 
+RTE_EXPORT_SYMBOL(rte_event_port_links_get)
 int
 rte_event_port_links_get(uint8_t dev_id, uint8_t port_id,
 			 uint8_t queues[], uint8_t priorities[])
@@ -1214,6 +1242,7 @@ rte_event_port_links_get(uint8_t dev_id, uint8_t port_id,
 	return count;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_event_port_profile_links_get, 23.11)
 int
 rte_event_port_profile_links_get(uint8_t dev_id, uint8_t port_id, uint8_t queues[],
 				 uint8_t priorities[], uint8_t profile_id)
@@ -1257,6 +1286,7 @@ rte_event_port_profile_links_get(uint8_t dev_id, uint8_t port_id, uint8_t queues
 	return count;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_dequeue_timeout_ticks)
 int
 rte_event_dequeue_timeout_ticks(uint8_t dev_id, uint64_t ns,
 				 uint64_t *timeout_ticks)
@@ -1276,6 +1306,7 @@ rte_event_dequeue_timeout_ticks(uint8_t dev_id, uint64_t ns,
 	return dev->dev_ops->timeout_ticks(dev, ns, timeout_ticks);
 }
 
+RTE_EXPORT_SYMBOL(rte_event_dev_service_id_get)
 int
 rte_event_dev_service_id_get(uint8_t dev_id, uint32_t *service_id)
 {
@@ -1295,6 +1326,7 @@ rte_event_dev_service_id_get(uint8_t dev_id, uint32_t *service_id)
 	return dev->data->service_inited ? 0 : -ESRCH;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_dev_dump)
 int
 rte_event_dev_dump(uint8_t dev_id, FILE *f)
 {
@@ -1322,6 +1354,7 @@ xstats_get_count(uint8_t dev_id, enum rte_event_dev_xstats_mode mode,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_dev_xstats_names_get)
 int
 rte_event_dev_xstats_names_get(uint8_t dev_id,
 		enum rte_event_dev_xstats_mode mode, uint8_t queue_port_id,
@@ -1346,6 +1379,7 @@ rte_event_dev_xstats_names_get(uint8_t dev_id,
 }
 
 /* retrieve eventdev extended statistics */
+RTE_EXPORT_SYMBOL(rte_event_dev_xstats_get)
 int
 rte_event_dev_xstats_get(uint8_t dev_id, enum rte_event_dev_xstats_mode mode,
 		uint8_t queue_port_id, const uint64_t ids[],
@@ -1361,6 +1395,7 @@ rte_event_dev_xstats_get(uint8_t dev_id, enum rte_event_dev_xstats_mode mode,
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_dev_xstats_by_name_get)
 uint64_t
 rte_event_dev_xstats_by_name_get(uint8_t dev_id, const char *name,
 		uint64_t *id)
@@ -1380,6 +1415,7 @@ rte_event_dev_xstats_by_name_get(uint8_t dev_id, const char *name,
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_dev_xstats_reset)
 int rte_event_dev_xstats_reset(uint8_t dev_id,
 		enum rte_event_dev_xstats_mode mode, int16_t queue_port_id,
 		const uint64_t ids[], uint32_t nb_ids)
@@ -1392,8 +1428,10 @@ int rte_event_dev_xstats_reset(uint8_t dev_id,
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_event_pmd_selftest_seqn_dynfield_offset)
 int rte_event_pmd_selftest_seqn_dynfield_offset = -1;
 
+RTE_EXPORT_SYMBOL(rte_event_dev_selftest)
 int rte_event_dev_selftest(uint8_t dev_id)
 {
 	RTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);
@@ -1414,6 +1452,7 @@ int rte_event_dev_selftest(uint8_t dev_id)
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_vector_pool_create)
 struct rte_mempool *
 rte_event_vector_pool_create(const char *name, unsigned int n,
 			     unsigned int cache_size, uint16_t nb_elem,
@@ -1459,6 +1498,7 @@ rte_event_vector_pool_create(const char *name, unsigned int n,
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_dev_start)
 int
 rte_event_dev_start(uint8_t dev_id)
 {
@@ -1490,6 +1530,7 @@ rte_event_dev_start(uint8_t dev_id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_dev_stop_flush_callback_register)
 int
 rte_event_dev_stop_flush_callback_register(uint8_t dev_id,
 					   rte_eventdev_stop_flush_t callback,
@@ -1510,6 +1551,7 @@ rte_event_dev_stop_flush_callback_register(uint8_t dev_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_event_dev_stop)
 void
 rte_event_dev_stop(uint8_t dev_id)
 {
@@ -1534,6 +1576,7 @@ rte_event_dev_stop(uint8_t dev_id)
 	event_dev_fp_ops_reset(rte_event_fp_ops + dev_id);
 }
 
+RTE_EXPORT_SYMBOL(rte_event_dev_close)
 int
 rte_event_dev_close(uint8_t dev_id)
 {
@@ -1604,6 +1647,7 @@ eventdev_find_free_device_index(void)
 	return RTE_EVENT_MAX_DEVS;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_event_pmd_allocate)
 struct rte_eventdev *
 rte_event_pmd_allocate(const char *name, int socket_id)
 {
@@ -1652,6 +1696,7 @@ rte_event_pmd_allocate(const char *name, int socket_id)
 	return eventdev;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_event_pmd_release)
 int
 rte_event_pmd_release(struct rte_eventdev *eventdev)
 {
@@ -1688,6 +1733,7 @@ rte_event_pmd_release(struct rte_eventdev *eventdev)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(event_dev_probing_finish)
 void
 event_dev_probing_finish(struct rte_eventdev *eventdev)
 {
diff --git a/lib/fib/rte_fib.c b/lib/fib/rte_fib.c
index 49211fe3fa..b69fda8236 100644
--- a/lib/fib/rte_fib.c
+++ b/lib/fib/rte_fib.c
@@ -120,6 +120,7 @@ init_dataplane(struct rte_fib *fib, __rte_unused int socket_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_fib_add)
 int
 rte_fib_add(struct rte_fib *fib, uint32_t ip, uint8_t depth, uint64_t next_hop)
 {
@@ -129,6 +130,7 @@ rte_fib_add(struct rte_fib *fib, uint32_t ip, uint8_t depth, uint64_t next_hop)
 	return fib->modify(fib, ip, depth, next_hop, RTE_FIB_ADD);
 }
 
+RTE_EXPORT_SYMBOL(rte_fib_delete)
 int
 rte_fib_delete(struct rte_fib *fib, uint32_t ip, uint8_t depth)
 {
@@ -138,6 +140,7 @@ rte_fib_delete(struct rte_fib *fib, uint32_t ip, uint8_t depth)
 	return fib->modify(fib, ip, depth, 0, RTE_FIB_DEL);
 }
 
+RTE_EXPORT_SYMBOL(rte_fib_lookup_bulk)
 int
 rte_fib_lookup_bulk(struct rte_fib *fib, uint32_t *ips,
 	uint64_t *next_hops, int n)
@@ -149,6 +152,7 @@ rte_fib_lookup_bulk(struct rte_fib *fib, uint32_t *ips,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_fib_create)
 struct rte_fib *
 rte_fib_create(const char *name, int socket_id, struct rte_fib_conf *conf)
 {
@@ -245,6 +249,7 @@ rte_fib_create(const char *name, int socket_id, struct rte_fib_conf *conf)
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_fib_find_existing)
 struct rte_fib *
 rte_fib_find_existing(const char *name)
 {
@@ -283,6 +288,7 @@ free_dataplane(struct rte_fib *fib)
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_fib_free)
 void
 rte_fib_free(struct rte_fib *fib)
 {
@@ -312,18 +318,21 @@ rte_fib_free(struct rte_fib *fib)
 	rte_free(te);
 }
 
+RTE_EXPORT_SYMBOL(rte_fib_get_dp)
 void *
 rte_fib_get_dp(struct rte_fib *fib)
 {
 	return (fib == NULL) ? NULL : fib->dp;
 }
 
+RTE_EXPORT_SYMBOL(rte_fib_get_rib)
 struct rte_rib *
 rte_fib_get_rib(struct rte_fib *fib)
 {
 	return (fib == NULL) ? NULL : fib->rib;
 }
 
+RTE_EXPORT_SYMBOL(rte_fib_select_lookup)
 int
 rte_fib_select_lookup(struct rte_fib *fib,
 	enum rte_fib_lookup_type type)
@@ -343,6 +352,7 @@ rte_fib_select_lookup(struct rte_fib *fib,
 	}
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_fib_rcu_qsbr_add, 24.11)
 int
 rte_fib_rcu_qsbr_add(struct rte_fib *fib, struct rte_fib_rcu_config *cfg)
 {
diff --git a/lib/fib/rte_fib6.c b/lib/fib/rte_fib6.c
index 9c7d4fde43..30c545cc1f 100644
--- a/lib/fib/rte_fib6.c
+++ b/lib/fib/rte_fib6.c
@@ -118,6 +118,7 @@ init_dataplane(struct rte_fib6 *fib, __rte_unused int socket_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_fib6_add)
 int
 rte_fib6_add(struct rte_fib6 *fib, const struct rte_ipv6_addr *ip,
 	uint8_t depth, uint64_t next_hop)
@@ -128,6 +129,7 @@ rte_fib6_add(struct rte_fib6 *fib, const struct rte_ipv6_addr *ip,
 	return fib->modify(fib, ip, depth, next_hop, RTE_FIB6_ADD);
 }
 
+RTE_EXPORT_SYMBOL(rte_fib6_delete)
 int
 rte_fib6_delete(struct rte_fib6 *fib, const struct rte_ipv6_addr *ip,
 	uint8_t depth)
@@ -138,6 +140,7 @@ rte_fib6_delete(struct rte_fib6 *fib, const struct rte_ipv6_addr *ip,
 	return fib->modify(fib, ip, depth, 0, RTE_FIB6_DEL);
 }
 
+RTE_EXPORT_SYMBOL(rte_fib6_lookup_bulk)
 int
 rte_fib6_lookup_bulk(struct rte_fib6 *fib,
 	const struct rte_ipv6_addr *ips,
@@ -149,6 +152,7 @@ rte_fib6_lookup_bulk(struct rte_fib6 *fib,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_fib6_create)
 struct rte_fib6 *
 rte_fib6_create(const char *name, int socket_id, struct rte_fib6_conf *conf)
 {
@@ -243,6 +247,7 @@ rte_fib6_create(const char *name, int socket_id, struct rte_fib6_conf *conf)
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_fib6_find_existing)
 struct rte_fib6 *
 rte_fib6_find_existing(const char *name)
 {
@@ -281,6 +286,7 @@ free_dataplane(struct rte_fib6 *fib)
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_fib6_free)
 void
 rte_fib6_free(struct rte_fib6 *fib)
 {
@@ -310,18 +316,21 @@ rte_fib6_free(struct rte_fib6 *fib)
 	rte_free(te);
 }
 
+RTE_EXPORT_SYMBOL(rte_fib6_get_dp)
 void *
 rte_fib6_get_dp(struct rte_fib6 *fib)
 {
 	return (fib == NULL) ? NULL : fib->dp;
 }
 
+RTE_EXPORT_SYMBOL(rte_fib6_get_rib)
 struct rte_rib6 *
 rte_fib6_get_rib(struct rte_fib6 *fib)
 {
 	return (fib == NULL) ? NULL : fib->rib;
 }
 
+RTE_EXPORT_SYMBOL(rte_fib6_select_lookup)
 int
 rte_fib6_select_lookup(struct rte_fib6 *fib,
 	enum rte_fib6_lookup_type type)
diff --git a/lib/gpudev/gpudev.c b/lib/gpudev/gpudev.c
index 1c2011b856..df91fbf0af 100644
--- a/lib/gpudev/gpudev.c
+++ b/lib/gpudev/gpudev.c
@@ -49,6 +49,7 @@ struct rte_gpu_callback {
 static rte_rwlock_t gpu_callback_lock = RTE_RWLOCK_INITIALIZER;
 static void gpu_free_callbacks(struct rte_gpu *dev);
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_gpu_init, 21.11)
 int
 rte_gpu_init(size_t dev_max)
 {
@@ -76,12 +77,14 @@ rte_gpu_init(size_t dev_max)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_gpu_count_avail, 21.11)
 uint16_t
 rte_gpu_count_avail(void)
 {
 	return gpu_count;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_gpu_is_valid, 21.11)
 bool
 rte_gpu_is_valid(int16_t dev_id)
 {
@@ -99,6 +102,7 @@ gpu_match_parent(int16_t dev_id, int16_t parent)
 	return gpus[dev_id].mpshared->info.parent == parent;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_gpu_find_next, 21.11)
 int16_t
 rte_gpu_find_next(int16_t dev_id, int16_t parent)
 {
@@ -134,6 +138,7 @@ gpu_get_by_id(int16_t dev_id)
 	return &gpus[dev_id];
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_gpu_get_by_name)
 struct rte_gpu *
 rte_gpu_get_by_name(const char *name)
 {
@@ -176,6 +181,7 @@ gpu_shared_mem_init(void)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_gpu_allocate)
 struct rte_gpu *
 rte_gpu_allocate(const char *name)
 {
@@ -237,6 +243,7 @@ rte_gpu_allocate(const char *name)
 	return dev;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_gpu_attach)
 struct rte_gpu *
 rte_gpu_attach(const char *name)
 {
@@ -286,6 +293,7 @@ rte_gpu_attach(const char *name)
 	return dev;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_gpu_add_child, 21.11)
 int16_t
 rte_gpu_add_child(const char *name, int16_t parent, uint64_t child_context)
 {
@@ -308,6 +316,7 @@ rte_gpu_add_child(const char *name, int16_t parent, uint64_t child_context)
 	return dev->mpshared->info.dev_id;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_gpu_complete_new)
 void
 rte_gpu_complete_new(struct rte_gpu *dev)
 {
@@ -318,6 +327,7 @@ rte_gpu_complete_new(struct rte_gpu *dev)
 	rte_gpu_notify(dev, RTE_GPU_EVENT_NEW);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_gpu_release)
 int
 rte_gpu_release(struct rte_gpu *dev)
 {
@@ -347,6 +357,7 @@ rte_gpu_release(struct rte_gpu *dev)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_gpu_close, 21.11)
 int
 rte_gpu_close(int16_t dev_id)
 {
@@ -373,6 +384,7 @@ rte_gpu_close(int16_t dev_id)
 	return firsterr;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_gpu_callback_register, 21.11)
 int
 rte_gpu_callback_register(int16_t dev_id, enum rte_gpu_event event,
 		rte_gpu_callback_t *function, void *user_data)
@@ -432,6 +444,7 @@ rte_gpu_callback_register(int16_t dev_id, enum rte_gpu_event event,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_gpu_callback_unregister, 21.11)
 int
 rte_gpu_callback_unregister(int16_t dev_id, enum rte_gpu_event event,
 		rte_gpu_callback_t *function, void *user_data)
@@ -491,6 +504,7 @@ gpu_free_callbacks(struct rte_gpu *dev)
 	rte_rwlock_write_unlock(&gpu_callback_lock);
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_gpu_notify)
 void
 rte_gpu_notify(struct rte_gpu *dev, enum rte_gpu_event event)
 {
@@ -507,6 +521,7 @@ rte_gpu_notify(struct rte_gpu *dev, enum rte_gpu_event event)
 	rte_rwlock_read_unlock(&gpu_callback_lock);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_gpu_info_get, 21.11)
 int
 rte_gpu_info_get(int16_t dev_id, struct rte_gpu_info *info)
 {
@@ -531,6 +546,7 @@ rte_gpu_info_get(int16_t dev_id, struct rte_gpu_info *info)
 	return GPU_DRV_RET(dev->ops.dev_info_get(dev, info));
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_gpu_mem_alloc, 21.11)
 void *
 rte_gpu_mem_alloc(int16_t dev_id, size_t size, unsigned int align)
 {
@@ -575,6 +591,7 @@ rte_gpu_mem_alloc(int16_t dev_id, size_t size, unsigned int align)
 	}
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_gpu_mem_free, 21.11)
 int
 rte_gpu_mem_free(int16_t dev_id, void *ptr)
 {
@@ -598,6 +615,7 @@ rte_gpu_mem_free(int16_t dev_id, void *ptr)
 	return GPU_DRV_RET(dev->ops.mem_free(dev, ptr));
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_gpu_mem_register, 21.11)
 int
 rte_gpu_mem_register(int16_t dev_id, size_t size, void *ptr)
 {
@@ -622,6 +640,7 @@ rte_gpu_mem_register(int16_t dev_id, size_t size, void *ptr)
 	return GPU_DRV_RET(dev->ops.mem_register(dev, size, ptr));
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_gpu_mem_unregister, 21.11)
 int
 rte_gpu_mem_unregister(int16_t dev_id, void *ptr)
 {
@@ -645,6 +664,7 @@ rte_gpu_mem_unregister(int16_t dev_id, void *ptr)
 	return GPU_DRV_RET(dev->ops.mem_unregister(dev, ptr));
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_gpu_mem_cpu_map, 21.11)
 void *
 rte_gpu_mem_cpu_map(int16_t dev_id, size_t size, void *ptr)
 {
@@ -683,6 +703,7 @@ rte_gpu_mem_cpu_map(int16_t dev_id, size_t size, void *ptr)
 	}
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_gpu_mem_cpu_unmap, 21.11)
 int
 rte_gpu_mem_cpu_unmap(int16_t dev_id, void *ptr)
 {
@@ -706,6 +727,7 @@ rte_gpu_mem_cpu_unmap(int16_t dev_id, void *ptr)
 	return GPU_DRV_RET(dev->ops.mem_cpu_unmap(dev, ptr));
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_gpu_wmb, 21.11)
 int
 rte_gpu_wmb(int16_t dev_id)
 {
@@ -725,6 +747,7 @@ rte_gpu_wmb(int16_t dev_id)
 	return GPU_DRV_RET(dev->ops.wmb(dev));
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_gpu_comm_create_flag, 21.11)
 int
 rte_gpu_comm_create_flag(uint16_t dev_id, struct rte_gpu_comm_flag *devflag,
 		enum rte_gpu_comm_flag_type mtype)
@@ -761,6 +784,7 @@ rte_gpu_comm_create_flag(uint16_t dev_id, struct rte_gpu_comm_flag *devflag,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_gpu_comm_destroy_flag, 21.11)
 int
 rte_gpu_comm_destroy_flag(struct rte_gpu_comm_flag *devflag)
 {
@@ -782,6 +806,7 @@ rte_gpu_comm_destroy_flag(struct rte_gpu_comm_flag *devflag)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_gpu_comm_set_flag, 21.11)
 int
 rte_gpu_comm_set_flag(struct rte_gpu_comm_flag *devflag, uint32_t val)
 {
@@ -800,6 +825,7 @@ rte_gpu_comm_set_flag(struct rte_gpu_comm_flag *devflag, uint32_t val)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_gpu_comm_get_flag_value, 21.11)
 int
 rte_gpu_comm_get_flag_value(struct rte_gpu_comm_flag *devflag, uint32_t *val)
 {
@@ -817,6 +843,7 @@ rte_gpu_comm_get_flag_value(struct rte_gpu_comm_flag *devflag, uint32_t *val)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_gpu_comm_create_list, 21.11)
 struct rte_gpu_comm_list *
 rte_gpu_comm_create_list(uint16_t dev_id,
 		uint32_t num_comm_items)
@@ -940,6 +967,7 @@ rte_gpu_comm_create_list(uint16_t dev_id,
 	return comm_list;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_gpu_comm_destroy_list, 21.11)
 int
 rte_gpu_comm_destroy_list(struct rte_gpu_comm_list *comm_list,
 		uint32_t num_comm_items)
@@ -985,6 +1013,7 @@ rte_gpu_comm_destroy_list(struct rte_gpu_comm_list *comm_list,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_gpu_comm_populate_list_pkts, 21.11)
 int
 rte_gpu_comm_populate_list_pkts(struct rte_gpu_comm_list *comm_list_item,
 		struct rte_mbuf **mbufs, uint32_t num_mbufs)
@@ -1023,6 +1052,7 @@ rte_gpu_comm_populate_list_pkts(struct rte_gpu_comm_list *comm_list_item,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_gpu_comm_set_status, 21.11)
 int
 rte_gpu_comm_set_status(struct rte_gpu_comm_list *comm_list_item,
 		enum rte_gpu_comm_list_status status)
@@ -1037,6 +1067,7 @@ rte_gpu_comm_set_status(struct rte_gpu_comm_list *comm_list_item,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_gpu_comm_get_status, 21.11)
 int
 rte_gpu_comm_get_status(struct rte_gpu_comm_list *comm_list_item,
 		enum rte_gpu_comm_list_status *status)
@@ -1051,6 +1082,7 @@ rte_gpu_comm_get_status(struct rte_gpu_comm_list *comm_list_item,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_gpu_comm_cleanup_list, 21.11)
 int
 rte_gpu_comm_cleanup_list(struct rte_gpu_comm_list *comm_list_item)
 {
diff --git a/lib/graph/graph.c b/lib/graph/graph.c
index dff8e690a8..828cf3168b 100644
--- a/lib/graph/graph.c
+++ b/lib/graph/graph.c
@@ -317,6 +317,7 @@ graph_src_node_avail(struct graph *graph)
 	return false;
 }
 
+RTE_EXPORT_SYMBOL(rte_graph_model_mcore_dispatch_core_bind)
 int
 rte_graph_model_mcore_dispatch_core_bind(rte_graph_t id, int lcore)
 {
@@ -348,6 +349,7 @@ rte_graph_model_mcore_dispatch_core_bind(rte_graph_t id, int lcore)
 	return -rte_errno;
 }
 
+RTE_EXPORT_SYMBOL(rte_graph_model_mcore_dispatch_core_unbind)
 void
 rte_graph_model_mcore_dispatch_core_unbind(rte_graph_t id)
 {
@@ -366,6 +368,7 @@ rte_graph_model_mcore_dispatch_core_unbind(rte_graph_t id)
 	return;
 }
 
+RTE_EXPORT_SYMBOL(rte_graph_lookup)
 struct rte_graph *
 rte_graph_lookup(const char *name)
 {
@@ -379,6 +382,7 @@ rte_graph_lookup(const char *name)
 	return graph_mem_fixup_secondary(rc);
 }
 
+RTE_EXPORT_SYMBOL(rte_graph_create)
 rte_graph_t
 rte_graph_create(const char *name, struct rte_graph_param *prm)
 {
@@ -483,6 +487,7 @@ rte_graph_create(const char *name, struct rte_graph_param *prm)
 	return RTE_GRAPH_ID_INVALID;
 }
 
+RTE_EXPORT_SYMBOL(rte_graph_destroy)
 int
 rte_graph_destroy(rte_graph_t id)
 {
@@ -598,6 +603,7 @@ graph_clone(struct graph *parent_graph, const char *name, struct rte_graph_param
 	return RTE_GRAPH_ID_INVALID;
 }
 
+RTE_EXPORT_SYMBOL(rte_graph_clone)
 rte_graph_t
 rte_graph_clone(rte_graph_t id, const char *name, struct rte_graph_param *prm)
 {
@@ -613,6 +619,7 @@ rte_graph_clone(rte_graph_t id, const char *name, struct rte_graph_param *prm)
 	return RTE_GRAPH_ID_INVALID;
 }
 
+RTE_EXPORT_SYMBOL(rte_graph_from_name)
 rte_graph_t
 rte_graph_from_name(const char *name)
 {
@@ -625,6 +632,7 @@ rte_graph_from_name(const char *name)
 	return RTE_GRAPH_ID_INVALID;
 }
 
+RTE_EXPORT_SYMBOL(rte_graph_id_to_name)
 char *
 rte_graph_id_to_name(rte_graph_t id)
 {
@@ -640,6 +648,7 @@ rte_graph_id_to_name(rte_graph_t id)
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_graph_node_get)
 struct rte_node *
 rte_graph_node_get(rte_graph_t gid, uint32_t nid)
 {
@@ -663,6 +672,7 @@ rte_graph_node_get(rte_graph_t gid, uint32_t nid)
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_graph_node_get_by_name)
 struct rte_node *
 rte_graph_node_get_by_name(const char *graph_name, const char *node_name)
 {
@@ -685,6 +695,7 @@ rte_graph_node_get_by_name(const char *graph_name, const char *node_name)
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(__rte_node_stream_alloc)
 void __rte_noinline
 __rte_node_stream_alloc(struct rte_graph *graph, struct rte_node *node)
 {
@@ -700,6 +711,7 @@ __rte_node_stream_alloc(struct rte_graph *graph, struct rte_node *node)
 	node->realloc_count++;
 }
 
+RTE_EXPORT_SYMBOL(__rte_node_stream_alloc_size)
 void __rte_noinline
 __rte_node_stream_alloc_size(struct rte_graph *graph, struct rte_node *node,
 			     uint16_t req_size)
@@ -773,6 +785,7 @@ graph_to_dot(FILE *f, struct graph *graph)
 	return -rte_errno;
 }
 
+RTE_EXPORT_SYMBOL(rte_graph_export)
 int
 rte_graph_export(const char *name, FILE *f)
 {
@@ -810,18 +823,21 @@ graph_scan_dump(FILE *f, rte_graph_t id, bool all)
 	return;
 }
 
+RTE_EXPORT_SYMBOL(rte_graph_dump)
 void
 rte_graph_dump(FILE *f, rte_graph_t id)
 {
 	graph_scan_dump(f, id, false);
 }
 
+RTE_EXPORT_SYMBOL(rte_graph_list_dump)
 void
 rte_graph_list_dump(FILE *f)
 {
 	graph_scan_dump(f, 0, true);
 }
 
+RTE_EXPORT_SYMBOL(rte_graph_max_count)
 rte_graph_t
 rte_graph_max_count(void)
 {
diff --git a/lib/graph/graph_debug.c b/lib/graph/graph_debug.c
index 37088ce2cf..dc0048a385 100644
--- a/lib/graph/graph_debug.c
+++ b/lib/graph/graph_debug.c
@@ -50,6 +50,7 @@ node_dump(FILE *f, struct node *n)
 		fprintf(f, "     edge[%d] <%s>\n", i, n->next_nodes[i]);
 }
 
+RTE_EXPORT_SYMBOL(rte_graph_obj_dump)
 void
 rte_graph_obj_dump(FILE *f, struct rte_graph *g, bool all)
 {
diff --git a/lib/graph/graph_stats.c b/lib/graph/graph_stats.c
index 0bbbd9fb7c..75a0f62a60 100644
--- a/lib/graph/graph_stats.c
+++ b/lib/graph/graph_stats.c
@@ -375,6 +375,7 @@ expand_pattern_to_cluster(struct cluster *cluster, const char *pattern)
 	return -rte_errno;
 }
 
+RTE_EXPORT_SYMBOL(rte_graph_cluster_stats_create)
 struct rte_graph_cluster_stats *
 rte_graph_cluster_stats_create(const struct rte_graph_cluster_stats_param *prm)
 {
@@ -438,6 +439,7 @@ rte_graph_cluster_stats_create(const struct rte_graph_cluster_stats_param *prm)
 	return rc;
 }
 
+RTE_EXPORT_SYMBOL(rte_graph_cluster_stats_destroy)
 void
 rte_graph_cluster_stats_destroy(struct rte_graph_cluster_stats *stat)
 {
@@ -512,6 +514,7 @@ cluster_node_store_prev_stats(struct cluster_node *cluster)
 	stat->prev_cycles = stat->cycles;
 }
 
+RTE_EXPORT_SYMBOL(rte_graph_cluster_stats_get)
 void
 rte_graph_cluster_stats_get(struct rte_graph_cluster_stats *stat, bool skip_cb)
 {
@@ -533,6 +536,7 @@ rte_graph_cluster_stats_get(struct rte_graph_cluster_stats *stat, bool skip_cb)
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_graph_cluster_stats_reset)
 void
 rte_graph_cluster_stats_reset(struct rte_graph_cluster_stats *stat)
 {
diff --git a/lib/graph/node.c b/lib/graph/node.c
index 63db629da8..d4096ce606 100644
--- a/lib/graph/node.c
+++ b/lib/graph/node.c
@@ -54,6 +54,7 @@ node_has_duplicate_entry(const char *name)
 }
 
 /* Public functions */
+RTE_EXPORT_SYMBOL(__rte_node_register)
 rte_node_t
 __rte_node_register(const struct rte_node_register *reg)
 {
@@ -189,6 +190,7 @@ node_clone(struct node *node, const char *name)
 	return rc;
 }
 
+RTE_EXPORT_SYMBOL(rte_node_clone)
 rte_node_t
 rte_node_clone(rte_node_t id, const char *name)
 {
@@ -203,6 +205,7 @@ rte_node_clone(rte_node_t id, const char *name)
 	return RTE_NODE_ID_INVALID;
 }
 
+RTE_EXPORT_SYMBOL(rte_node_from_name)
 rte_node_t
 rte_node_from_name(const char *name)
 {
@@ -215,6 +218,7 @@ rte_node_from_name(const char *name)
 	return RTE_NODE_ID_INVALID;
 }
 
+RTE_EXPORT_SYMBOL(rte_node_id_to_name)
 char *
 rte_node_id_to_name(rte_node_t id)
 {
@@ -229,6 +233,7 @@ rte_node_id_to_name(rte_node_t id)
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_node_edge_count)
 rte_edge_t
 rte_node_edge_count(rte_node_t id)
 {
@@ -297,6 +302,7 @@ edge_update(struct node *node, struct node *prev, rte_edge_t from,
 	return count;
 }
 
+RTE_EXPORT_SYMBOL(rte_node_edge_shrink)
 rte_edge_t
 rte_node_edge_shrink(rte_node_t id, rte_edge_t size)
 {
@@ -323,6 +329,7 @@ rte_node_edge_shrink(rte_node_t id, rte_edge_t size)
 	return rc;
 }
 
+RTE_EXPORT_SYMBOL(rte_node_edge_update)
 rte_edge_t
 rte_node_edge_update(rte_node_t id, rte_edge_t from, const char **next_nodes,
 		     uint16_t nb_edges)
@@ -358,6 +365,7 @@ node_copy_edges(struct node *node, char *next_nodes[])
 	return i;
 }
 
+RTE_EXPORT_SYMBOL(rte_node_edge_get)
 rte_node_t
 rte_node_edge_get(rte_node_t id, char *next_nodes[])
 {
@@ -402,18 +410,21 @@ node_scan_dump(FILE *f, rte_node_t id, bool all)
 	return;
 }
 
+RTE_EXPORT_SYMBOL(rte_node_dump)
 void
 rte_node_dump(FILE *f, rte_node_t id)
 {
 	node_scan_dump(f, id, false);
 }
 
+RTE_EXPORT_SYMBOL(rte_node_list_dump)
 void
 rte_node_list_dump(FILE *f)
 {
 	node_scan_dump(f, 0, true);
 }
 
+RTE_EXPORT_SYMBOL(rte_node_max_count)
 rte_node_t
 rte_node_max_count(void)
 {
diff --git a/lib/graph/rte_graph_model_mcore_dispatch.c b/lib/graph/rte_graph_model_mcore_dispatch.c
index a590fc9497..68d951fca7 100644
--- a/lib/graph/rte_graph_model_mcore_dispatch.c
+++ b/lib/graph/rte_graph_model_mcore_dispatch.c
@@ -113,6 +113,7 @@ __graph_sched_node_enqueue(struct rte_node *node, struct rte_graph *graph)
 	return false;
 }
 
+RTE_EXPORT_SYMBOL(__rte_graph_mcore_dispatch_sched_node_enqueue)
 bool __rte_noinline
 __rte_graph_mcore_dispatch_sched_node_enqueue(struct rte_node *node,
 					      struct rte_graph_rq_head *rq)
@@ -127,6 +128,7 @@ __rte_graph_mcore_dispatch_sched_node_enqueue(struct rte_node *node,
 	return graph != NULL ? __graph_sched_node_enqueue(node, graph) : false;
 }
 
+RTE_EXPORT_SYMBOL(__rte_graph_mcore_dispatch_sched_wq_process)
 void
 __rte_graph_mcore_dispatch_sched_wq_process(struct rte_graph *graph)
 {
@@ -166,6 +168,7 @@ __rte_graph_mcore_dispatch_sched_wq_process(struct rte_graph *graph)
 	rte_mempool_put_bulk(mp, (void **)wq_nodes, n);
 }
 
+RTE_EXPORT_SYMBOL(rte_graph_model_mcore_dispatch_node_lcore_affinity_set)
 int
 rte_graph_model_mcore_dispatch_node_lcore_affinity_set(const char *name, unsigned int lcore_id)
 {
diff --git a/lib/graph/rte_graph_worker.c b/lib/graph/rte_graph_worker.c
index 7e2a918fae..2641d4f446 100644
--- a/lib/graph/rte_graph_worker.c
+++ b/lib/graph/rte_graph_worker.c
@@ -5,6 +5,7 @@
 #include "rte_graph_worker_common.h"
 #include "graph_private.h"
 
+RTE_EXPORT_SYMBOL(rte_graph_model_is_valid)
 bool
 rte_graph_model_is_valid(uint8_t model)
 {
@@ -14,6 +15,7 @@ rte_graph_model_is_valid(uint8_t model)
 	return true;
 }
 
+RTE_EXPORT_SYMBOL(rte_graph_worker_model_set)
 int
 rte_graph_worker_model_set(uint8_t model)
 {
@@ -29,6 +31,7 @@ rte_graph_worker_model_set(uint8_t model)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_graph_worker_model_get)
 uint8_t
 rte_graph_worker_model_get(struct rte_graph *graph)
 {
diff --git a/lib/gro/rte_gro.c b/lib/gro/rte_gro.c
index 6d5aadf32a..0c9ac326b4 100644
--- a/lib/gro/rte_gro.c
+++ b/lib/gro/rte_gro.c
@@ -88,6 +88,7 @@ struct gro_ctx {
 	void *tbls[RTE_GRO_TYPE_MAX_NUM];
 };
 
+RTE_EXPORT_SYMBOL(rte_gro_ctx_create)
 void *
 rte_gro_ctx_create(const struct rte_gro_param *param)
 {
@@ -129,6 +130,7 @@ rte_gro_ctx_create(const struct rte_gro_param *param)
 	return gro_ctx;
 }
 
+RTE_EXPORT_SYMBOL(rte_gro_ctx_destroy)
 void
 rte_gro_ctx_destroy(void *ctx)
 {
@@ -148,6 +150,7 @@ rte_gro_ctx_destroy(void *ctx)
 	rte_free(gro_ctx);
 }
 
+RTE_EXPORT_SYMBOL(rte_gro_reassemble_burst)
 uint16_t
 rte_gro_reassemble_burst(struct rte_mbuf **pkts,
 		uint16_t nb_pkts,
@@ -348,6 +351,7 @@ rte_gro_reassemble_burst(struct rte_mbuf **pkts,
 	return nb_after_gro;
 }
 
+RTE_EXPORT_SYMBOL(rte_gro_reassemble)
 uint16_t
 rte_gro_reassemble(struct rte_mbuf **pkts,
 		uint16_t nb_pkts,
@@ -416,6 +420,7 @@ rte_gro_reassemble(struct rte_mbuf **pkts,
 	return unprocess_num;
 }
 
+RTE_EXPORT_SYMBOL(rte_gro_timeout_flush)
 uint16_t
 rte_gro_timeout_flush(void *ctx,
 		uint64_t timeout_cycles,
@@ -474,6 +479,7 @@ rte_gro_timeout_flush(void *ctx,
 	return num;
 }
 
+RTE_EXPORT_SYMBOL(rte_gro_get_pkt_count)
 uint64_t
 rte_gro_get_pkt_count(void *ctx)
 {
diff --git a/lib/gso/rte_gso.c b/lib/gso/rte_gso.c
index e29c7d884a..34394c652e 100644
--- a/lib/gso/rte_gso.c
+++ b/lib/gso/rte_gso.c
@@ -24,6 +24,7 @@
 		RTE_ETH_TX_OFFLOAD_GRE_TNL_TSO)) == 0) || \
 		(ctx)->gso_size < RTE_GSO_SEG_SIZE_MIN)
 
+RTE_EXPORT_SYMBOL(rte_gso_segment)
 int
 rte_gso_segment(struct rte_mbuf *pkt,
 		const struct rte_gso_ctx *gso_ctx,
diff --git a/lib/hash/rte_cuckoo_hash.c b/lib/hash/rte_cuckoo_hash.c
index e55e6e1c81..201443f3fe 100644
--- a/lib/hash/rte_cuckoo_hash.c
+++ b/lib/hash/rte_cuckoo_hash.c
@@ -76,6 +76,7 @@ struct __rte_hash_rcu_dq_entry {
 	uint32_t ext_bkt_idx;
 };
 
+RTE_EXPORT_SYMBOL(rte_hash_find_existing)
 struct rte_hash *
 rte_hash_find_existing(const char *name)
 {
@@ -108,6 +109,7 @@ rte_hash_get_last_bkt(struct rte_hash_bucket *lst_bkt)
 	return lst_bkt;
 }
 
+RTE_EXPORT_SYMBOL(rte_hash_set_cmp_func)
 void rte_hash_set_cmp_func(struct rte_hash *h, rte_hash_cmp_eq_t func)
 {
 	h->cmp_jump_table_idx = KEY_CUSTOM;
@@ -153,6 +155,7 @@ get_alt_bucket_index(const struct rte_hash *h,
 	return (cur_bkt_idx ^ sig) & h->bucket_bitmask;
 }
 
+RTE_EXPORT_SYMBOL(rte_hash_create)
 struct rte_hash *
 rte_hash_create(const struct rte_hash_parameters *params)
 {
@@ -524,6 +527,7 @@ rte_hash_create(const struct rte_hash_parameters *params)
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_hash_free)
 void
 rte_hash_free(struct rte_hash *h)
 {
@@ -571,6 +575,7 @@ rte_hash_free(struct rte_hash *h)
 	rte_free(te);
 }
 
+RTE_EXPORT_SYMBOL(rte_hash_hash)
 hash_sig_t
 rte_hash_hash(const struct rte_hash *h, const void *key)
 {
@@ -578,6 +583,7 @@ rte_hash_hash(const struct rte_hash *h, const void *key)
 	return h->hash_func(key, h->key_len, h->hash_func_init_val);
 }
 
+RTE_EXPORT_SYMBOL(rte_hash_max_key_id)
 int32_t
 rte_hash_max_key_id(const struct rte_hash *h)
 {
@@ -593,6 +599,7 @@ rte_hash_max_key_id(const struct rte_hash *h)
 		return h->entries;
 }
 
+RTE_EXPORT_SYMBOL(rte_hash_count)
 int32_t
 rte_hash_count(const struct rte_hash *h)
 {
@@ -662,6 +669,7 @@ __hash_rw_reader_unlock(const struct rte_hash *h)
 		rte_rwlock_read_unlock(h->readwrite_lock);
 }
 
+RTE_EXPORT_SYMBOL(rte_hash_reset)
 void
 rte_hash_reset(struct rte_hash *h)
 {
@@ -1245,6 +1253,7 @@ __rte_hash_add_key_with_hash(const struct rte_hash *h, const void *key,
 
 }
 
+RTE_EXPORT_SYMBOL(rte_hash_add_key_with_hash)
 int32_t
 rte_hash_add_key_with_hash(const struct rte_hash *h,
 			const void *key, hash_sig_t sig)
@@ -1253,6 +1262,7 @@ rte_hash_add_key_with_hash(const struct rte_hash *h,
 	return __rte_hash_add_key_with_hash(h, key, sig, 0);
 }
 
+RTE_EXPORT_SYMBOL(rte_hash_add_key)
 int32_t
 rte_hash_add_key(const struct rte_hash *h, const void *key)
 {
@@ -1260,6 +1270,7 @@ rte_hash_add_key(const struct rte_hash *h, const void *key)
 	return __rte_hash_add_key_with_hash(h, key, rte_hash_hash(h, key), 0);
 }
 
+RTE_EXPORT_SYMBOL(rte_hash_add_key_with_hash_data)
 int
 rte_hash_add_key_with_hash_data(const struct rte_hash *h,
 			const void *key, hash_sig_t sig, void *data)
@@ -1274,6 +1285,7 @@ rte_hash_add_key_with_hash_data(const struct rte_hash *h,
 		return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_hash_add_key_data)
 int
 rte_hash_add_key_data(const struct rte_hash *h, const void *key, void *data)
 {
@@ -1467,6 +1479,7 @@ __rte_hash_lookup_with_hash(const struct rte_hash *h, const void *key,
 		return __rte_hash_lookup_with_hash_l(h, key, sig, data);
 }
 
+RTE_EXPORT_SYMBOL(rte_hash_lookup_with_hash)
 int32_t
 rte_hash_lookup_with_hash(const struct rte_hash *h,
 			const void *key, hash_sig_t sig)
@@ -1475,6 +1488,7 @@ rte_hash_lookup_with_hash(const struct rte_hash *h,
 	return __rte_hash_lookup_with_hash(h, key, sig, NULL);
 }
 
+RTE_EXPORT_SYMBOL(rte_hash_lookup)
 int32_t
 rte_hash_lookup(const struct rte_hash *h, const void *key)
 {
@@ -1482,6 +1496,7 @@ rte_hash_lookup(const struct rte_hash *h, const void *key)
 	return __rte_hash_lookup_with_hash(h, key, rte_hash_hash(h, key), NULL);
 }
 
+RTE_EXPORT_SYMBOL(rte_hash_lookup_with_hash_data)
 int
 rte_hash_lookup_with_hash_data(const struct rte_hash *h,
 			const void *key, hash_sig_t sig, void **data)
@@ -1490,6 +1505,7 @@ rte_hash_lookup_with_hash_data(const struct rte_hash *h,
 	return __rte_hash_lookup_with_hash(h, key, sig, data);
 }
 
+RTE_EXPORT_SYMBOL(rte_hash_lookup_data)
 int
 rte_hash_lookup_data(const struct rte_hash *h, const void *key, void **data)
 {
@@ -1557,6 +1573,7 @@ __hash_rcu_qsbr_free_resource(void *p, void *e, unsigned int n)
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_hash_rcu_qsbr_add)
 int
 rte_hash_rcu_qsbr_add(struct rte_hash *h, struct rte_hash_rcu_config *cfg)
 {
@@ -1627,6 +1644,7 @@ rte_hash_rcu_qsbr_add(struct rte_hash *h, struct rte_hash_rcu_config *cfg)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_hash_rcu_qsbr_dq_reclaim, 24.07)
 int rte_hash_rcu_qsbr_dq_reclaim(struct rte_hash *h, unsigned int *freed, unsigned int *pending,
 				 unsigned int *available)
 {
@@ -1851,6 +1869,7 @@ __rte_hash_del_key_with_hash(const struct rte_hash *h, const void *key,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_hash_del_key_with_hash)
 int32_t
 rte_hash_del_key_with_hash(const struct rte_hash *h,
 			const void *key, hash_sig_t sig)
@@ -1859,6 +1878,7 @@ rte_hash_del_key_with_hash(const struct rte_hash *h,
 	return __rte_hash_del_key_with_hash(h, key, sig);
 }
 
+RTE_EXPORT_SYMBOL(rte_hash_del_key)
 int32_t
 rte_hash_del_key(const struct rte_hash *h, const void *key)
 {
@@ -1866,6 +1886,7 @@ rte_hash_del_key(const struct rte_hash *h, const void *key)
 	return __rte_hash_del_key_with_hash(h, key, rte_hash_hash(h, key));
 }
 
+RTE_EXPORT_SYMBOL(rte_hash_get_key_with_position)
 int
 rte_hash_get_key_with_position(const struct rte_hash *h, const int32_t position,
 			       void **key)
@@ -1886,6 +1907,7 @@ rte_hash_get_key_with_position(const struct rte_hash *h, const int32_t position,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_hash_free_key_with_position)
 int
 rte_hash_free_key_with_position(const struct rte_hash *h,
 				const int32_t position)
@@ -2398,6 +2420,7 @@ __rte_hash_lookup_bulk(const struct rte_hash *h, const void **keys,
 					 hit_mask, data);
 }
 
+RTE_EXPORT_SYMBOL(rte_hash_lookup_bulk)
 int
 rte_hash_lookup_bulk(const struct rte_hash *h, const void **keys,
 		      uint32_t num_keys, int32_t *positions)
@@ -2410,6 +2433,7 @@ rte_hash_lookup_bulk(const struct rte_hash *h, const void **keys,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_hash_lookup_bulk_data)
 int
 rte_hash_lookup_bulk_data(const struct rte_hash *h, const void **keys,
 		      uint32_t num_keys, uint64_t *hit_mask, void *data[])
@@ -2510,6 +2534,7 @@ __rte_hash_lookup_with_hash_bulk(const struct rte_hash *h, const void **keys,
 				num_keys, positions, hit_mask, data);
 }
 
+RTE_EXPORT_SYMBOL(rte_hash_lookup_with_hash_bulk)
 int
 rte_hash_lookup_with_hash_bulk(const struct rte_hash *h, const void **keys,
 		hash_sig_t *sig, uint32_t num_keys, int32_t *positions)
@@ -2524,6 +2549,7 @@ rte_hash_lookup_with_hash_bulk(const struct rte_hash *h, const void **keys,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_hash_lookup_with_hash_bulk_data)
 int
 rte_hash_lookup_with_hash_bulk_data(const struct rte_hash *h,
 		const void **keys, hash_sig_t *sig,
@@ -2543,6 +2569,7 @@ rte_hash_lookup_with_hash_bulk_data(const struct rte_hash *h,
 	return rte_popcount64(*hit_mask);
 }
 
+RTE_EXPORT_SYMBOL(rte_hash_iterate)
 int32_t
 rte_hash_iterate(const struct rte_hash *h, const void **key, void **data, uint32_t *next)
 {
diff --git a/lib/hash/rte_fbk_hash.c b/lib/hash/rte_fbk_hash.c
index dacb7e8b09..00d603ff9b 100644
--- a/lib/hash/rte_fbk_hash.c
+++ b/lib/hash/rte_fbk_hash.c
@@ -41,6 +41,7 @@ EAL_REGISTER_TAILQ(rte_fbk_hash_tailq)
  * @return
  *   pointer to hash table structure or NULL on error.
  */
+RTE_EXPORT_SYMBOL(rte_fbk_hash_find_existing)
 struct rte_fbk_hash_table *
 rte_fbk_hash_find_existing(const char *name)
 {
@@ -75,6 +76,7 @@ rte_fbk_hash_find_existing(const char *name)
  *   Pointer to hash table structure that is used in future hash table
  *   operations, or NULL on error.
  */
+RTE_EXPORT_SYMBOL(rte_fbk_hash_create)
 struct rte_fbk_hash_table *
 rte_fbk_hash_create(const struct rte_fbk_hash_params *params)
 {
@@ -177,6 +179,7 @@ rte_fbk_hash_create(const struct rte_fbk_hash_params *params)
  * @param ht
  *   Hash table to deallocate.
  */
+RTE_EXPORT_SYMBOL(rte_fbk_hash_free)
 void
 rte_fbk_hash_free(struct rte_fbk_hash_table *ht)
 {
diff --git a/lib/hash/rte_hash_crc.c b/lib/hash/rte_hash_crc.c
index c037cdb0f0..fc5868a26e 100644
--- a/lib/hash/rte_hash_crc.c
+++ b/lib/hash/rte_hash_crc.c
@@ -12,6 +12,7 @@ RTE_LOG_REGISTER_SUFFIX(hash_crc_logtype, crc, INFO);
 #define HASH_CRC_LOG(level, ...) \
 	RTE_LOG_LINE(level, HASH_CRC, "" __VA_ARGS__)
 
+RTE_EXPORT_SYMBOL(rte_hash_crc32_alg)
 uint8_t rte_hash_crc32_alg = CRC32_SW;
 
 /**
@@ -26,6 +27,7 @@ uint8_t rte_hash_crc32_alg = CRC32_SW;
  *   - (CRC32_ARM64) Use ARMv8 CRC intrinsic if available (default ARMv8)
  *
  */
+RTE_EXPORT_SYMBOL(rte_hash_crc_set_alg)
 void
 rte_hash_crc_set_alg(uint8_t alg)
 {
diff --git a/lib/hash/rte_thash.c b/lib/hash/rte_thash.c
index 1f9700258d..2712310548 100644
--- a/lib/hash/rte_thash.c
+++ b/lib/hash/rte_thash.c
@@ -70,6 +70,7 @@ struct rte_thash_ctx {
 	uint8_t		hash_key[];
 };
 
+RTE_EXPORT_SYMBOL(rte_thash_gfni_supported)
 int
 rte_thash_gfni_supported(void)
 {
@@ -83,6 +84,7 @@ rte_thash_gfni_supported(void)
 	return 0;
 };
 
+RTE_EXPORT_SYMBOL(rte_thash_complete_matrix)
 void
 rte_thash_complete_matrix(uint64_t *matrixes, const uint8_t *rss_key, int size)
 {
@@ -203,6 +205,7 @@ free_lfsr(struct thash_lfsr *lfsr)
 		rte_free(lfsr);
 }
 
+RTE_EXPORT_SYMBOL(rte_thash_init_ctx)
 struct rte_thash_ctx *
 rte_thash_init_ctx(const char *name, uint32_t key_len, uint32_t reta_sz,
 	uint8_t *key, uint32_t flags)
@@ -293,6 +296,7 @@ rte_thash_init_ctx(const char *name, uint32_t key_len, uint32_t reta_sz,
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_thash_find_existing)
 struct rte_thash_ctx *
 rte_thash_find_existing(const char *name)
 {
@@ -319,6 +323,7 @@ rte_thash_find_existing(const char *name)
 	return ctx;
 }
 
+RTE_EXPORT_SYMBOL(rte_thash_free_ctx)
 void
 rte_thash_free_ctx(struct rte_thash_ctx *ctx)
 {
@@ -540,6 +545,7 @@ insert_after(struct rte_thash_ctx *ctx,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_thash_add_helper)
 int
 rte_thash_add_helper(struct rte_thash_ctx *ctx, const char *name, uint32_t len,
 	uint32_t offset)
@@ -630,6 +636,7 @@ rte_thash_add_helper(struct rte_thash_ctx *ctx, const char *name, uint32_t len,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_thash_get_helper)
 struct rte_thash_subtuple_helper *
 rte_thash_get_helper(struct rte_thash_ctx *ctx, const char *name)
 {
@@ -646,6 +653,7 @@ rte_thash_get_helper(struct rte_thash_ctx *ctx, const char *name)
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_thash_get_complement)
 uint32_t
 rte_thash_get_complement(struct rte_thash_subtuple_helper *h,
 	uint32_t hash, uint32_t desired_hash)
@@ -653,12 +661,14 @@ rte_thash_get_complement(struct rte_thash_subtuple_helper *h,
 	return h->compl_table[(hash ^ desired_hash) & h->lsb_msk];
 }
 
+RTE_EXPORT_SYMBOL(rte_thash_get_key)
 const uint8_t *
 rte_thash_get_key(struct rte_thash_ctx *ctx)
 {
 	return ctx->hash_key;
 }
 
+RTE_EXPORT_SYMBOL(rte_thash_get_gfni_matrices)
 const uint64_t *
 rte_thash_get_gfni_matrices(struct rte_thash_ctx *ctx)
 {
@@ -754,6 +764,7 @@ write_unaligned_bits(uint8_t *ptr, int len, int offset, uint32_t val)
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_thash_adjust_tuple)
 int
 rte_thash_adjust_tuple(struct rte_thash_ctx *ctx,
 	struct rte_thash_subtuple_helper *h,
@@ -823,6 +834,7 @@ rte_thash_adjust_tuple(struct rte_thash_ctx *ctx,
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_thash_gen_key, 24.11)
 int
 rte_thash_gen_key(uint8_t *key, size_t key_len, size_t reta_sz_log,
 	uint32_t entropy_start, size_t entropy_sz)
diff --git a/lib/hash/rte_thash_gf2_poly_math.c b/lib/hash/rte_thash_gf2_poly_math.c
index 858884b4d4..467a610c79 100644
--- a/lib/hash/rte_thash_gf2_poly_math.c
+++ b/lib/hash/rte_thash_gf2_poly_math.c
@@ -241,6 +241,7 @@ thash_test_poly_order(uint32_t poly, int degree)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(thash_get_rand_poly)
 uint32_t
 thash_get_rand_poly(uint32_t poly_degree)
 {
diff --git a/lib/hash/rte_thash_gfni.c b/lib/hash/rte_thash_gfni.c
index c94640d30d..8dd747bd4d 100644
--- a/lib/hash/rte_thash_gfni.c
+++ b/lib/hash/rte_thash_gfni.c
@@ -12,6 +12,7 @@ RTE_LOG_REGISTER_SUFFIX(hash_gfni_logtype, gfni, INFO);
 #define HASH_LOG(level, ...) \
 	RTE_LOG_LINE(level, HASH, "" __VA_ARGS__)
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_thash_gfni_stub)
 uint32_t
 rte_thash_gfni_stub(const uint64_t *mtrx __rte_unused,
 	const uint8_t *key __rte_unused, int len __rte_unused)
@@ -27,6 +28,7 @@ rte_thash_gfni_stub(const uint64_t *mtrx __rte_unused,
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_thash_gfni_bulk_stub)
 void
 rte_thash_gfni_bulk_stub(const uint64_t *mtrx __rte_unused,
 	int len __rte_unused, uint8_t *tuple[] __rte_unused,
diff --git a/lib/ip_frag/rte_ip_frag_common.c b/lib/ip_frag/rte_ip_frag_common.c
index 05f9e479c2..4d83f1536c 100644
--- a/lib/ip_frag/rte_ip_frag_common.c
+++ b/lib/ip_frag/rte_ip_frag_common.c
@@ -14,6 +14,7 @@ RTE_LOG_REGISTER_DEFAULT(ipfrag_logtype, INFO);
 #define	IP_FRAG_HASH_FNUM	2
 
 /* free mbufs from death row */
+RTE_EXPORT_SYMBOL(rte_ip_frag_free_death_row)
 void
 rte_ip_frag_free_death_row(struct rte_ip_frag_death_row *dr,
 		uint32_t prefetch)
@@ -38,6 +39,7 @@ rte_ip_frag_free_death_row(struct rte_ip_frag_death_row *dr,
 }
 
 /* create fragmentation table */
+RTE_EXPORT_SYMBOL(rte_ip_frag_table_create)
 struct rte_ip_frag_tbl *
 rte_ip_frag_table_create(uint32_t bucket_num, uint32_t bucket_entries,
 	uint32_t max_entries, uint64_t max_cycles, int socket_id)
@@ -82,6 +84,7 @@ rte_ip_frag_table_create(uint32_t bucket_num, uint32_t bucket_entries,
 }
 
 /* delete fragmentation table */
+RTE_EXPORT_SYMBOL(rte_ip_frag_table_destroy)
 void
 rte_ip_frag_table_destroy(struct rte_ip_frag_tbl *tbl)
 {
@@ -95,6 +98,7 @@ rte_ip_frag_table_destroy(struct rte_ip_frag_tbl *tbl)
 }
 
 /* dump frag table statistics to file */
+RTE_EXPORT_SYMBOL(rte_ip_frag_table_statistics_dump)
 void
 rte_ip_frag_table_statistics_dump(FILE *f, const struct rte_ip_frag_tbl *tbl)
 {
@@ -124,6 +128,7 @@ rte_ip_frag_table_statistics_dump(FILE *f, const struct rte_ip_frag_tbl *tbl)
 }
 
 /* Delete expired fragments */
+RTE_EXPORT_SYMBOL(rte_ip_frag_table_del_expired_entries)
 void
 rte_ip_frag_table_del_expired_entries(struct rte_ip_frag_tbl *tbl,
 	struct rte_ip_frag_death_row *dr, uint64_t tms)
diff --git a/lib/ip_frag/rte_ipv4_fragmentation.c b/lib/ip_frag/rte_ipv4_fragmentation.c
index e04cf5738e..47a2aa86d6 100644
--- a/lib/ip_frag/rte_ipv4_fragmentation.c
+++ b/lib/ip_frag/rte_ipv4_fragmentation.c
@@ -104,6 +104,7 @@ static inline uint16_t __create_ipopt_frag_hdr(uint8_t *iph,
  *   in the pkts_out array.
  *   Otherwise - (-1) * <errno>.
  */
+RTE_EXPORT_SYMBOL(rte_ipv4_fragment_packet)
 int32_t
 rte_ipv4_fragment_packet(struct rte_mbuf *pkt_in,
 	struct rte_mbuf **pkts_out,
@@ -286,6 +287,7 @@ rte_ipv4_fragment_packet(struct rte_mbuf *pkt_in,
  *   in the pkts_out array.
  *   Otherwise - (-1) * errno.
  */
+RTE_EXPORT_SYMBOL(rte_ipv4_fragment_copy_nonseg_packet)
 int32_t
 rte_ipv4_fragment_copy_nonseg_packet(struct rte_mbuf *pkt_in,
 	struct rte_mbuf **pkts_out,
diff --git a/lib/ip_frag/rte_ipv4_reassembly.c b/lib/ip_frag/rte_ipv4_reassembly.c
index 5818f50f40..ee41877aaa 100644
--- a/lib/ip_frag/rte_ipv4_reassembly.c
+++ b/lib/ip_frag/rte_ipv4_reassembly.c
@@ -94,6 +94,7 @@ ipv4_frag_reassemble(struct ip_frag_pkt *fp)
  *   - an error occurred.
  *   - not all fragments of the packet are collected yet.
  */
+RTE_EXPORT_SYMBOL(rte_ipv4_frag_reassemble_packet)
 struct rte_mbuf *
 rte_ipv4_frag_reassemble_packet(struct rte_ip_frag_tbl *tbl,
 	struct rte_ip_frag_death_row *dr, struct rte_mbuf *mb, uint64_t tms,
diff --git a/lib/ip_frag/rte_ipv6_fragmentation.c b/lib/ip_frag/rte_ipv6_fragmentation.c
index 56696f32f8..53da1a6129 100644
--- a/lib/ip_frag/rte_ipv6_fragmentation.c
+++ b/lib/ip_frag/rte_ipv6_fragmentation.c
@@ -63,6 +63,7 @@ __free_fragments(struct rte_mbuf *mb[], uint32_t num)
  *   in the pkts_out array.
  *   Otherwise - (-1) * <errno>.
  */
+RTE_EXPORT_SYMBOL(rte_ipv6_fragment_packet)
 int32_t
 rte_ipv6_fragment_packet(struct rte_mbuf *pkt_in,
 	struct rte_mbuf **pkts_out,
diff --git a/lib/ip_frag/rte_ipv6_reassembly.c b/lib/ip_frag/rte_ipv6_reassembly.c
index 9471ce5333..96cb275912 100644
--- a/lib/ip_frag/rte_ipv6_reassembly.c
+++ b/lib/ip_frag/rte_ipv6_reassembly.c
@@ -132,6 +132,7 @@ ipv6_frag_reassemble(struct ip_frag_pkt *fp)
  */
 #define MORE_FRAGS(x) (((x) & 0x100) >> 8)
 #define FRAG_OFFSET(x) (rte_cpu_to_be_16(x) >> 3)
+RTE_EXPORT_SYMBOL(rte_ipv6_frag_reassemble_packet)
 struct rte_mbuf *
 rte_ipv6_frag_reassemble_packet(struct rte_ip_frag_tbl *tbl,
 	struct rte_ip_frag_death_row *dr, struct rte_mbuf *mb, uint64_t tms,
diff --git a/lib/ipsec/ipsec_sad.c b/lib/ipsec/ipsec_sad.c
index 7e147e729c..680cc7fc5b 100644
--- a/lib/ipsec/ipsec_sad.c
+++ b/lib/ipsec/ipsec_sad.c
@@ -113,6 +113,7 @@ add_specific(struct rte_ipsec_sad *sad, const void *key,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_ipsec_sad_add)
 int
 rte_ipsec_sad_add(struct rte_ipsec_sad *sad,
 		const union rte_ipsec_sad_key *key,
@@ -212,6 +213,7 @@ del_specific(struct rte_ipsec_sad *sad, const void *key, int key_type)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_ipsec_sad_del)
 int
 rte_ipsec_sad_del(struct rte_ipsec_sad *sad,
 		const union rte_ipsec_sad_key *key,
@@ -251,6 +253,7 @@ rte_ipsec_sad_del(struct rte_ipsec_sad *sad,
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_ipsec_sad_create)
 struct rte_ipsec_sad *
 rte_ipsec_sad_create(const char *name, const struct rte_ipsec_sad_conf *conf)
 {
@@ -380,6 +383,7 @@ rte_ipsec_sad_create(const char *name, const struct rte_ipsec_sad_conf *conf)
 	return sad;
 }
 
+RTE_EXPORT_SYMBOL(rte_ipsec_sad_find_existing)
 struct rte_ipsec_sad *
 rte_ipsec_sad_find_existing(const char *name)
 {
@@ -414,6 +418,7 @@ rte_ipsec_sad_find_existing(const char *name)
 	return sad;
 }
 
+RTE_EXPORT_SYMBOL(rte_ipsec_sad_destroy)
 void
 rte_ipsec_sad_destroy(struct rte_ipsec_sad *sad)
 {
@@ -536,6 +541,7 @@ __ipsec_sad_lookup(const struct rte_ipsec_sad *sad,
 	return found;
 }
 
+RTE_EXPORT_SYMBOL(rte_ipsec_sad_lookup)
 int
 rte_ipsec_sad_lookup(const struct rte_ipsec_sad *sad,
 		const union rte_ipsec_sad_key *keys[], void *sa[], uint32_t n)
diff --git a/lib/ipsec/ipsec_telemetry.c b/lib/ipsec/ipsec_telemetry.c
index 68a91108dd..6fd41d6afa 100644
--- a/lib/ipsec/ipsec_telemetry.c
+++ b/lib/ipsec/ipsec_telemetry.c
@@ -204,6 +204,7 @@ handle_telemetry_cmd_ipsec_sa_details(const char *cmd __rte_unused,
 }
 
 
+RTE_EXPORT_SYMBOL(rte_ipsec_telemetry_sa_add)
 int
 rte_ipsec_telemetry_sa_add(const struct rte_ipsec_sa *sa)
 {
@@ -216,6 +217,7 @@ rte_ipsec_telemetry_sa_add(const struct rte_ipsec_sa *sa)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_ipsec_telemetry_sa_del)
 void
 rte_ipsec_telemetry_sa_del(const struct rte_ipsec_sa *sa)
 {
diff --git a/lib/ipsec/sa.c b/lib/ipsec/sa.c
index 741e079831..c211213d12 100644
--- a/lib/ipsec/sa.c
+++ b/lib/ipsec/sa.c
@@ -84,6 +84,7 @@ fill_crypto_xform(struct crypto_xform *xform, uint64_t type,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_ipsec_sa_type)
 uint64_t
 rte_ipsec_sa_type(const struct rte_ipsec_sa *sa)
 {
@@ -156,6 +157,7 @@ ipsec_sa_size(uint64_t type, uint32_t *wnd_sz, uint32_t *nb_bucket)
 	return sz;
 }
 
+RTE_EXPORT_SYMBOL(rte_ipsec_sa_fini)
 void
 rte_ipsec_sa_fini(struct rte_ipsec_sa *sa)
 {
@@ -525,6 +527,7 @@ fill_sa_replay(struct rte_ipsec_sa *sa, uint32_t wnd_sz, uint32_t nb_bucket,
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_ipsec_sa_size)
 int
 rte_ipsec_sa_size(const struct rte_ipsec_sa_prm *prm)
 {
@@ -545,6 +548,7 @@ rte_ipsec_sa_size(const struct rte_ipsec_sa_prm *prm)
 	return ipsec_sa_size(type, &wsz, &nb);
 }
 
+RTE_EXPORT_SYMBOL(rte_ipsec_sa_init)
 int
 rte_ipsec_sa_init(struct rte_ipsec_sa *sa, const struct rte_ipsec_sa_prm *prm,
 	uint32_t size)
diff --git a/lib/ipsec/ses.c b/lib/ipsec/ses.c
index d9ab1e6d2b..97dc126f60 100644
--- a/lib/ipsec/ses.c
+++ b/lib/ipsec/ses.c
@@ -28,6 +28,7 @@ session_check(struct rte_ipsec_session *ss)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_ipsec_session_prepare)
 int
 rte_ipsec_session_prepare(struct rte_ipsec_session *ss)
 {
diff --git a/lib/jobstats/rte_jobstats.c b/lib/jobstats/rte_jobstats.c
index af565a14ea..f3012f4bd0 100644
--- a/lib/jobstats/rte_jobstats.c
+++ b/lib/jobstats/rte_jobstats.c
@@ -63,6 +63,7 @@ default_update_function(struct rte_jobstats *job, int64_t result)
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_jobstats_context_init)
 int
 rte_jobstats_context_init(struct rte_jobstats_context *ctx)
 {
@@ -77,6 +78,7 @@ rte_jobstats_context_init(struct rte_jobstats_context *ctx)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_jobstats_context_start)
 void
 rte_jobstats_context_start(struct rte_jobstats_context *ctx)
 {
@@ -89,6 +91,7 @@ rte_jobstats_context_start(struct rte_jobstats_context *ctx)
 	ctx->state_time = now;
 }
 
+RTE_EXPORT_SYMBOL(rte_jobstats_context_finish)
 void
 rte_jobstats_context_finish(struct rte_jobstats_context *ctx)
 {
@@ -102,6 +105,7 @@ rte_jobstats_context_finish(struct rte_jobstats_context *ctx)
 	ctx->state_time = now;
 }
 
+RTE_EXPORT_SYMBOL(rte_jobstats_context_reset)
 void
 rte_jobstats_context_reset(struct rte_jobstats_context *ctx)
 {
@@ -113,12 +117,14 @@ rte_jobstats_context_reset(struct rte_jobstats_context *ctx)
 	ctx->loop_cnt = 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_jobstats_set_target)
 void
 rte_jobstats_set_target(struct rte_jobstats *job, int64_t target)
 {
 	job->target = target;
 }
 
+RTE_EXPORT_SYMBOL(rte_jobstats_start)
 int
 rte_jobstats_start(struct rte_jobstats_context *ctx, struct rte_jobstats *job)
 {
@@ -138,6 +144,7 @@ rte_jobstats_start(struct rte_jobstats_context *ctx, struct rte_jobstats *job)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_jobstats_abort)
 int
 rte_jobstats_abort(struct rte_jobstats *job)
 {
@@ -158,6 +165,7 @@ rte_jobstats_abort(struct rte_jobstats *job)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_jobstats_finish)
 int
 rte_jobstats_finish(struct rte_jobstats *job, int64_t job_value)
 {
@@ -194,6 +202,7 @@ rte_jobstats_finish(struct rte_jobstats *job, int64_t job_value)
 	return need_update;
 }
 
+RTE_EXPORT_SYMBOL(rte_jobstats_set_period)
 void
 rte_jobstats_set_period(struct rte_jobstats *job, uint64_t period,
 		uint8_t saturate)
@@ -208,6 +217,7 @@ rte_jobstats_set_period(struct rte_jobstats *job, uint64_t period,
 	job->period = period;
 }
 
+RTE_EXPORT_SYMBOL(rte_jobstats_set_min)
 void
 rte_jobstats_set_min(struct rte_jobstats *job, uint64_t period)
 {
@@ -216,6 +226,7 @@ rte_jobstats_set_min(struct rte_jobstats *job, uint64_t period)
 		job->period = period;
 }
 
+RTE_EXPORT_SYMBOL(rte_jobstats_set_max)
 void
 rte_jobstats_set_max(struct rte_jobstats *job, uint64_t period)
 {
@@ -224,6 +235,7 @@ rte_jobstats_set_max(struct rte_jobstats *job, uint64_t period)
 		job->period = period;
 }
 
+RTE_EXPORT_SYMBOL(rte_jobstats_init)
 int
 rte_jobstats_init(struct rte_jobstats *job, const char *name,
 		uint64_t min_period, uint64_t max_period, uint64_t initial_period,
@@ -244,6 +256,7 @@ rte_jobstats_init(struct rte_jobstats *job, const char *name,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_jobstats_set_update_period_function)
 void
 rte_jobstats_set_update_period_function(struct rte_jobstats *job,
 		rte_job_update_period_cb_t update_period_cb)
@@ -254,6 +267,7 @@ rte_jobstats_set_update_period_function(struct rte_jobstats *job,
 	job->update_period_cb = update_period_cb;
 }
 
+RTE_EXPORT_SYMBOL(rte_jobstats_reset)
 void
 rte_jobstats_reset(struct rte_jobstats *job)
 {
diff --git a/lib/kvargs/rte_kvargs.c b/lib/kvargs/rte_kvargs.c
index 1d355516bc..cce7d823fe 100644
--- a/lib/kvargs/rte_kvargs.c
+++ b/lib/kvargs/rte_kvargs.c
@@ -151,6 +151,7 @@ check_for_valid_keys(struct rte_kvargs *kvlist,
  * E.g. given a list = { rx = 0, rx = 1, tx = 2 } the number of args for
  * arg "rx" will be 2.
  */
+RTE_EXPORT_SYMBOL(rte_kvargs_count)
 unsigned
 rte_kvargs_count(const struct rte_kvargs *kvlist, const char *key_match)
 {
@@ -193,6 +194,7 @@ kvargs_process_common(const struct rte_kvargs *kvlist, const char *key_match,
 /*
  * For each matching key in key=value, call the given handler function.
  */
+RTE_EXPORT_SYMBOL(rte_kvargs_process)
 int
 rte_kvargs_process(const struct rte_kvargs *kvlist, const char *key_match, arg_handler_t handler,
 		   void *opaque_arg)
@@ -203,6 +205,7 @@ rte_kvargs_process(const struct rte_kvargs *kvlist, const char *key_match, arg_h
 /*
  * For each matching key in key=value or only-key, call the given handler function.
  */
+RTE_EXPORT_SYMBOL(rte_kvargs_process_opt)
 int
 rte_kvargs_process_opt(const struct rte_kvargs *kvlist, const char *key_match,
 		       arg_handler_t handler, void *opaque_arg)
@@ -211,6 +214,7 @@ rte_kvargs_process_opt(const struct rte_kvargs *kvlist, const char *key_match,
 }
 
 /* free the rte_kvargs structure */
+RTE_EXPORT_SYMBOL(rte_kvargs_free)
 void
 rte_kvargs_free(struct rte_kvargs *kvlist)
 {
@@ -222,6 +226,7 @@ rte_kvargs_free(struct rte_kvargs *kvlist)
 }
 
 /* Lookup a value in an rte_kvargs list by its key and value. */
+RTE_EXPORT_SYMBOL(rte_kvargs_get_with_value)
 const char *
 rte_kvargs_get_with_value(const struct rte_kvargs *kvlist, const char *key,
 			  const char *value)
@@ -241,6 +246,7 @@ rte_kvargs_get_with_value(const struct rte_kvargs *kvlist, const char *key,
 }
 
 /* Lookup a value in an rte_kvargs list by its key. */
+RTE_EXPORT_SYMBOL(rte_kvargs_get)
 const char *
 rte_kvargs_get(const struct rte_kvargs *kvlist, const char *key)
 {
@@ -254,6 +260,7 @@ rte_kvargs_get(const struct rte_kvargs *kvlist, const char *key)
  * an allocated structure that contains a key/value list. Also
  * check if only valid keys were used.
  */
+RTE_EXPORT_SYMBOL(rte_kvargs_parse)
 struct rte_kvargs *
 rte_kvargs_parse(const char *args, const char * const valid_keys[])
 {
@@ -277,6 +284,7 @@ rte_kvargs_parse(const char *args, const char * const valid_keys[])
 	return kvlist;
 }
 
+RTE_EXPORT_SYMBOL(rte_kvargs_parse_delim)
 struct rte_kvargs *
 rte_kvargs_parse_delim(const char *args, const char * const valid_keys[],
 		       const char *valid_ends)
diff --git a/lib/latencystats/rte_latencystats.c b/lib/latencystats/rte_latencystats.c
index 6a261309f9..c19b671b33 100644
--- a/lib/latencystats/rte_latencystats.c
+++ b/lib/latencystats/rte_latencystats.c
@@ -78,6 +78,7 @@ static const struct latency_stats_nameoff lat_stats_strings[] = {
 #define NUM_LATENCY_STATS (sizeof(lat_stats_strings) / \
 				sizeof(lat_stats_strings[0]))
 
+RTE_EXPORT_SYMBOL(rte_latencystats_update)
 int32_t
 rte_latencystats_update(void)
 {
@@ -210,6 +211,7 @@ calc_latency(uint16_t pid __rte_unused,
 	return nb_pkts;
 }
 
+RTE_EXPORT_SYMBOL(rte_latencystats_init)
 int
 rte_latencystats_init(uint64_t app_samp_intvl,
 		rte_latency_stats_flow_type_fn user_cb)
@@ -295,6 +297,7 @@ rte_latencystats_init(uint64_t app_samp_intvl,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_latencystats_uninit)
 int
 rte_latencystats_uninit(void)
 {
@@ -342,6 +345,7 @@ rte_latencystats_uninit(void)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_latencystats_get_names)
 int
 rte_latencystats_get_names(struct rte_metric_name *names, uint16_t size)
 {
@@ -357,6 +361,7 @@ rte_latencystats_get_names(struct rte_metric_name *names, uint16_t size)
 	return NUM_LATENCY_STATS;
 }
 
+RTE_EXPORT_SYMBOL(rte_latencystats_get)
 int
 rte_latencystats_get(struct rte_metric_value *values, uint16_t size)
 {
diff --git a/lib/log/log.c b/lib/log/log.c
index e1c18a8e53..3fd0e5d3d8 100644
--- a/lib/log/log.c
+++ b/lib/log/log.c
@@ -78,6 +78,7 @@ struct log_cur_msg {
 static RTE_DEFINE_PER_LCORE(struct log_cur_msg, log_cur_msg);
 
 /* Change the stream that will be used by logging system */
+RTE_EXPORT_SYMBOL(rte_openlog_stream)
 int
 rte_openlog_stream(FILE *f)
 {
@@ -89,6 +90,7 @@ rte_openlog_stream(FILE *f)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_log_get_stream)
 FILE *
 rte_log_get_stream(void)
 {
@@ -98,6 +100,7 @@ rte_log_get_stream(void)
 }
 
 /* Set global log level */
+RTE_EXPORT_SYMBOL(rte_log_set_global_level)
 void
 rte_log_set_global_level(uint32_t level)
 {
@@ -105,12 +108,14 @@ rte_log_set_global_level(uint32_t level)
 }
 
 /* Get global log level */
+RTE_EXPORT_SYMBOL(rte_log_get_global_level)
 uint32_t
 rte_log_get_global_level(void)
 {
 	return rte_logs.level;
 }
 
+RTE_EXPORT_SYMBOL(rte_log_get_level)
 int
 rte_log_get_level(uint32_t type)
 {
@@ -120,6 +125,7 @@ rte_log_get_level(uint32_t type)
 	return rte_logs.dynamic_types[type].loglevel;
 }
 
+RTE_EXPORT_SYMBOL(rte_log_can_log)
 bool
 rte_log_can_log(uint32_t logtype, uint32_t level)
 {
@@ -153,6 +159,7 @@ logtype_set_level(uint32_t type, uint32_t level)
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_log_set_level)
 int
 rte_log_set_level(uint32_t type, uint32_t level)
 {
@@ -167,6 +174,7 @@ rte_log_set_level(uint32_t type, uint32_t level)
 }
 
 /* set log level by regular expression */
+RTE_EXPORT_SYMBOL(rte_log_set_level_regexp)
 int
 rte_log_set_level_regexp(const char *regex, uint32_t level)
 {
@@ -225,6 +233,7 @@ log_save_level(uint32_t priority, const char *regex, const char *pattern)
 	return -1;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(eal_log_save_regexp)
 int
 eal_log_save_regexp(const char *regex, uint32_t level)
 {
@@ -232,6 +241,7 @@ eal_log_save_regexp(const char *regex, uint32_t level)
 }
 
 /* set log level based on globbing pattern */
+RTE_EXPORT_SYMBOL(rte_log_set_level_pattern)
 int
 rte_log_set_level_pattern(const char *pattern, uint32_t level)
 {
@@ -251,6 +261,7 @@ rte_log_set_level_pattern(const char *pattern, uint32_t level)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(eal_log_save_pattern)
 int
 eal_log_save_pattern(const char *pattern, uint32_t level)
 {
@@ -258,12 +269,14 @@ eal_log_save_pattern(const char *pattern, uint32_t level)
 }
 
 /* get the current loglevel for the message being processed */
+RTE_EXPORT_SYMBOL(rte_log_cur_msg_loglevel)
 int rte_log_cur_msg_loglevel(void)
 {
 	return RTE_PER_LCORE(log_cur_msg).loglevel;
 }
 
 /* get the current logtype for the message being processed */
+RTE_EXPORT_SYMBOL(rte_log_cur_msg_logtype)
 int rte_log_cur_msg_logtype(void)
 {
 	return RTE_PER_LCORE(log_cur_msg).logtype;
@@ -315,6 +328,7 @@ log_register(const char *name, uint32_t level)
 }
 
 /* register an extended log type */
+RTE_EXPORT_SYMBOL(rte_log_register)
 int
 rte_log_register(const char *name)
 {
@@ -322,6 +336,7 @@ rte_log_register(const char *name)
 }
 
 /* Register an extended log type and try to pick its level from EAL options */
+RTE_EXPORT_SYMBOL(rte_log_register_type_and_pick_level)
 int
 rte_log_register_type_and_pick_level(const char *name, uint32_t level_def)
 {
@@ -384,6 +399,7 @@ RTE_INIT_PRIO(log_init, LOG)
 	rte_logs.dynamic_types_len = RTE_LOGTYPE_FIRST_EXT_ID;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(eal_log_level2str)
 const char *
 eal_log_level2str(uint32_t level)
 {
@@ -417,6 +433,7 @@ log_type_compare(const void *a, const void *b)
 }
 
 /* Dump name of each logtype, one per line. */
+RTE_EXPORT_SYMBOL(rte_log_list_types)
 void
 rte_log_list_types(FILE *out, const char *prefix)
 {
@@ -446,6 +463,7 @@ rte_log_list_types(FILE *out, const char *prefix)
 }
 
 /* dump global level and registered log types */
+RTE_EXPORT_SYMBOL(rte_log_dump)
 void
 rte_log_dump(FILE *f)
 {
@@ -467,6 +485,7 @@ rte_log_dump(FILE *f)
  * Generates a log message The message will be sent in the stream
  * defined by the previous call to rte_openlog_stream().
  */
+RTE_EXPORT_SYMBOL(rte_vlog)
 int
 rte_vlog(uint32_t level, uint32_t logtype, const char *format, va_list ap)
 {
@@ -492,6 +511,7 @@ rte_vlog(uint32_t level, uint32_t logtype, const char *format, va_list ap)
  * defined by the previous call to rte_openlog_stream().
  * No need to check level here, done by rte_vlog().
  */
+RTE_EXPORT_SYMBOL(rte_log)
 int
 rte_log(uint32_t level, uint32_t logtype, const char *format, ...)
 {
@@ -507,6 +527,7 @@ rte_log(uint32_t level, uint32_t logtype, const char *format, ...)
 /*
  * Called by rte_eal_init
  */
+RTE_EXPORT_INTERNAL_SYMBOL(eal_log_init)
 void
 eal_log_init(const char *id)
 {
@@ -552,6 +573,7 @@ eal_log_init(const char *id)
 /*
  * Called by eal_cleanup
  */
+RTE_EXPORT_INTERNAL_SYMBOL(rte_eal_log_cleanup)
 void
 rte_eal_log_cleanup(void)
 {
diff --git a/lib/log/log_color.c b/lib/log/log_color.c
index 04eb5aa485..603fbdcf35 100644
--- a/lib/log/log_color.c
+++ b/lib/log/log_color.c
@@ -99,6 +99,7 @@ color_snprintf(char *buf, size_t len, enum log_field field,
  *   auto - enable if stderr is a terminal
  *   never - color output is disabled.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(eal_log_color)
 int
 eal_log_color(const char *mode)
 {
diff --git a/lib/log/log_syslog.c b/lib/log/log_syslog.c
index 6b34831bf3..ca52c336ee 100644
--- a/lib/log/log_syslog.c
+++ b/lib/log/log_syslog.c
@@ -45,6 +45,7 @@ static const struct {
 	{ "local7", LOG_LOCAL7 },
 };
 
+RTE_EXPORT_INTERNAL_SYMBOL(eal_log_syslog)
 int
 eal_log_syslog(const char *name)
 {
diff --git a/lib/log/log_timestamp.c b/lib/log/log_timestamp.c
index b4b0bca6a8..02ddadb454 100644
--- a/lib/log/log_timestamp.c
+++ b/lib/log/log_timestamp.c
@@ -40,6 +40,7 @@ static struct {
 } log_time;
 
 /* Set the log timestamp format */
+RTE_EXPORT_INTERNAL_SYMBOL(eal_log_timestamp)
 int
 eal_log_timestamp(const char *str)
 {
diff --git a/lib/lpm/rte_lpm.c b/lib/lpm/rte_lpm.c
index a5c9e7c9fc..e1d9303116 100644
--- a/lib/lpm/rte_lpm.c
+++ b/lib/lpm/rte_lpm.c
@@ -117,6 +117,7 @@ depth_to_range(uint8_t depth)
 /*
  * Find an existing lpm table and return a pointer to it.
  */
+RTE_EXPORT_SYMBOL(rte_lpm_find_existing)
 struct rte_lpm *
 rte_lpm_find_existing(const char *name)
 {
@@ -145,6 +146,7 @@ rte_lpm_find_existing(const char *name)
 /*
  * Allocates memory for LPM object
  */
+RTE_EXPORT_SYMBOL(rte_lpm_create)
 struct rte_lpm *
 rte_lpm_create(const char *name, int socket_id,
 		const struct rte_lpm_config *config)
@@ -251,6 +253,7 @@ rte_lpm_create(const char *name, int socket_id,
 /*
  * Deallocates memory for given LPM table.
  */
+RTE_EXPORT_SYMBOL(rte_lpm_free)
 void
 rte_lpm_free(struct rte_lpm *lpm)
 {
@@ -300,6 +303,7 @@ __lpm_rcu_qsbr_free_resource(void *p, void *data, unsigned int n)
 
 /* Associate QSBR variable with an LPM object.
  */
+RTE_EXPORT_SYMBOL(rte_lpm_rcu_qsbr_add)
 int
 rte_lpm_rcu_qsbr_add(struct rte_lpm *lpm, struct rte_lpm_rcu_config *cfg)
 {
@@ -798,6 +802,7 @@ add_depth_big(struct __rte_lpm *i_lpm, uint32_t ip_masked, uint8_t depth,
 /*
  * Add a route
  */
+RTE_EXPORT_SYMBOL(rte_lpm_add)
 int
 rte_lpm_add(struct rte_lpm *lpm, uint32_t ip, uint8_t depth,
 		uint32_t next_hop)
@@ -849,6 +854,7 @@ rte_lpm_add(struct rte_lpm *lpm, uint32_t ip, uint8_t depth,
 /*
  * Look for a rule in the high-level rules table
  */
+RTE_EXPORT_SYMBOL(rte_lpm_is_rule_present)
 int
 rte_lpm_is_rule_present(struct rte_lpm *lpm, uint32_t ip, uint8_t depth,
 uint32_t *next_hop)
@@ -1142,6 +1148,7 @@ delete_depth_big(struct __rte_lpm *i_lpm, uint32_t ip_masked,
 /*
  * Deletes a rule
  */
+RTE_EXPORT_SYMBOL(rte_lpm_delete)
 int
 rte_lpm_delete(struct rte_lpm *lpm, uint32_t ip, uint8_t depth)
 {
@@ -1200,6 +1207,7 @@ rte_lpm_delete(struct rte_lpm *lpm, uint32_t ip, uint8_t depth)
 /*
  * Delete all rules from the LPM table.
  */
+RTE_EXPORT_SYMBOL(rte_lpm_delete_all)
 void
 rte_lpm_delete_all(struct rte_lpm *lpm)
 {
diff --git a/lib/lpm/rte_lpm6.c b/lib/lpm/rte_lpm6.c
index 8beb394c47..60d27903e4 100644
--- a/lib/lpm/rte_lpm6.c
+++ b/lib/lpm/rte_lpm6.c
@@ -207,6 +207,7 @@ rebuild_lpm(struct rte_lpm6 *lpm)
 /*
  * Allocates memory for LPM object
  */
+RTE_EXPORT_SYMBOL(rte_lpm6_create)
 struct rte_lpm6 *
 rte_lpm6_create(const char *name, int socket_id,
 		const struct rte_lpm6_config *config)
@@ -347,6 +348,7 @@ rte_lpm6_create(const char *name, int socket_id,
 /*
  * Find an existing lpm table and return a pointer to it.
  */
+RTE_EXPORT_SYMBOL(rte_lpm6_find_existing)
 struct rte_lpm6 *
 rte_lpm6_find_existing(const char *name)
 {
@@ -375,6 +377,7 @@ rte_lpm6_find_existing(const char *name)
 /*
  * Deallocates memory for given LPM table.
  */
+RTE_EXPORT_SYMBOL(rte_lpm6_free)
 void
 rte_lpm6_free(struct rte_lpm6 *lpm)
 {
@@ -819,6 +822,7 @@ simulate_add(struct rte_lpm6 *lpm, const struct rte_ipv6_addr *masked_ip, uint8_
 /*
  * Add a route
  */
+RTE_EXPORT_SYMBOL(rte_lpm6_add)
 int
 rte_lpm6_add(struct rte_lpm6 *lpm, const struct rte_ipv6_addr *ip, uint8_t depth,
 	     uint32_t next_hop)
@@ -908,6 +912,7 @@ lookup_step(const struct rte_lpm6 *lpm, const struct rte_lpm6_tbl_entry *tbl,
 /*
  * Looks up an IP
  */
+RTE_EXPORT_SYMBOL(rte_lpm6_lookup)
 int
 rte_lpm6_lookup(const struct rte_lpm6 *lpm, const struct rte_ipv6_addr *ip,
 		uint32_t *next_hop)
@@ -940,6 +945,7 @@ rte_lpm6_lookup(const struct rte_lpm6 *lpm, const struct rte_ipv6_addr *ip,
 /*
  * Looks up a group of IP addresses
  */
+RTE_EXPORT_SYMBOL(rte_lpm6_lookup_bulk_func)
 int
 rte_lpm6_lookup_bulk_func(const struct rte_lpm6 *lpm,
 		struct rte_ipv6_addr *ips,
@@ -985,6 +991,7 @@ rte_lpm6_lookup_bulk_func(const struct rte_lpm6 *lpm,
 /*
  * Look for a rule in the high-level rules table
  */
+RTE_EXPORT_SYMBOL(rte_lpm6_is_rule_present)
 int
 rte_lpm6_is_rule_present(struct rte_lpm6 *lpm, const struct rte_ipv6_addr *ip, uint8_t depth,
 			 uint32_t *next_hop)
@@ -1034,6 +1041,7 @@ rule_delete(struct rte_lpm6 *lpm, struct rte_ipv6_addr *ip, uint8_t depth)
  * rather than doing incremental updates like
  * the regular delete function
  */
+RTE_EXPORT_SYMBOL(rte_lpm6_delete_bulk_func)
 int
 rte_lpm6_delete_bulk_func(struct rte_lpm6 *lpm,
 		struct rte_ipv6_addr *ips, uint8_t *depths,
@@ -1073,6 +1081,7 @@ rte_lpm6_delete_bulk_func(struct rte_lpm6 *lpm,
 /*
  * Delete all rules from the LPM table.
  */
+RTE_EXPORT_SYMBOL(rte_lpm6_delete_all)
 void
 rte_lpm6_delete_all(struct rte_lpm6 *lpm)
 {
@@ -1257,6 +1266,7 @@ remove_tbl(struct rte_lpm6 *lpm, struct rte_lpm_tbl8_hdr *tbl_hdr,
 /*
  * Deletes a rule
  */
+RTE_EXPORT_SYMBOL(rte_lpm6_delete)
 int
 rte_lpm6_delete(struct rte_lpm6 *lpm, const struct rte_ipv6_addr *ip, uint8_t depth)
 {
diff --git a/lib/mbuf/rte_mbuf.c b/lib/mbuf/rte_mbuf.c
index 559d5ad8a7..908822fdd7 100644
--- a/lib/mbuf/rte_mbuf.c
+++ b/lib/mbuf/rte_mbuf.c
@@ -29,6 +29,7 @@ RTE_LOG_REGISTER_DEFAULT(mbuf_logtype, INFO);
  * rte_mempool_create(), or called directly if using
  * rte_mempool_create_empty()/rte_mempool_populate()
  */
+RTE_EXPORT_SYMBOL(rte_pktmbuf_pool_init)
 void
 rte_pktmbuf_pool_init(struct rte_mempool *mp, void *opaque_arg)
 {
@@ -69,6 +70,7 @@ rte_pktmbuf_pool_init(struct rte_mempool *mp, void *opaque_arg)
  * rte_mempool_obj_iter() or rte_mempool_create().
  * Set the fields of a packet mbuf to their default values.
  */
+RTE_EXPORT_SYMBOL(rte_pktmbuf_init)
 void
 rte_pktmbuf_init(struct rte_mempool *mp,
 		 __rte_unused void *opaque_arg,
@@ -219,6 +221,7 @@ __rte_pktmbuf_init_extmem(struct rte_mempool *mp,
 }
 
 /* Helper to create a mbuf pool with given mempool ops name*/
+RTE_EXPORT_SYMBOL(rte_pktmbuf_pool_create_by_ops)
 struct rte_mempool *
 rte_pktmbuf_pool_create_by_ops(const char *name, unsigned int n,
 	unsigned int cache_size, uint16_t priv_size, uint16_t data_room_size,
@@ -271,6 +274,7 @@ rte_pktmbuf_pool_create_by_ops(const char *name, unsigned int n,
 }
 
 /* helper to create a mbuf pool */
+RTE_EXPORT_SYMBOL(rte_pktmbuf_pool_create)
 struct rte_mempool *
 rte_pktmbuf_pool_create(const char *name, unsigned int n,
 	unsigned int cache_size, uint16_t priv_size, uint16_t data_room_size,
@@ -281,6 +285,7 @@ rte_pktmbuf_pool_create(const char *name, unsigned int n,
 }
 
 /* Helper to create a mbuf pool with pinned external data buffers. */
+RTE_EXPORT_SYMBOL(rte_pktmbuf_pool_create_extbuf)
 struct rte_mempool *
 rte_pktmbuf_pool_create_extbuf(const char *name, unsigned int n,
 	unsigned int cache_size, uint16_t priv_size,
@@ -368,6 +373,7 @@ rte_pktmbuf_pool_create_extbuf(const char *name, unsigned int n,
 }
 
 /* do some sanity checks on a mbuf: panic if it fails */
+RTE_EXPORT_SYMBOL(rte_mbuf_sanity_check)
 void
 rte_mbuf_sanity_check(const struct rte_mbuf *m, int is_header)
 {
@@ -377,6 +383,7 @@ rte_mbuf_sanity_check(const struct rte_mbuf *m, int is_header)
 		rte_panic("%s\n", reason);
 }
 
+RTE_EXPORT_SYMBOL(rte_mbuf_check)
 int rte_mbuf_check(const struct rte_mbuf *m, int is_header,
 		   const char **reason)
 {
@@ -486,6 +493,7 @@ __rte_pktmbuf_free_seg_via_array(struct rte_mbuf *m,
 #define RTE_PKTMBUF_FREE_PENDING_SZ 64
 
 /* Free a bulk of packet mbufs back into their original mempools. */
+RTE_EXPORT_SYMBOL(rte_pktmbuf_free_bulk)
 void rte_pktmbuf_free_bulk(struct rte_mbuf **mbufs, unsigned int count)
 {
 	struct rte_mbuf *m, *m_next, *pending[RTE_PKTMBUF_FREE_PENDING_SZ];
@@ -512,6 +520,7 @@ void rte_pktmbuf_free_bulk(struct rte_mbuf **mbufs, unsigned int count)
 }
 
 /* Creates a shallow copy of mbuf */
+RTE_EXPORT_SYMBOL(rte_pktmbuf_clone)
 struct rte_mbuf *
 rte_pktmbuf_clone(struct rte_mbuf *md, struct rte_mempool *mp)
 {
@@ -551,6 +560,7 @@ rte_pktmbuf_clone(struct rte_mbuf *md, struct rte_mempool *mp)
 }
 
 /* convert multi-segment mbuf to single mbuf */
+RTE_EXPORT_SYMBOL(__rte_pktmbuf_linearize)
 int
 __rte_pktmbuf_linearize(struct rte_mbuf *mbuf)
 {
@@ -588,6 +598,7 @@ __rte_pktmbuf_linearize(struct rte_mbuf *mbuf)
 }
 
 /* Create a deep copy of mbuf */
+RTE_EXPORT_SYMBOL(rte_pktmbuf_copy)
 struct rte_mbuf *
 rte_pktmbuf_copy(const struct rte_mbuf *m, struct rte_mempool *mp,
 		 uint32_t off, uint32_t len)
@@ -665,6 +676,7 @@ rte_pktmbuf_copy(const struct rte_mbuf *m, struct rte_mempool *mp,
 }
 
 /* dump a mbuf on console */
+RTE_EXPORT_SYMBOL(rte_pktmbuf_dump)
 void
 rte_pktmbuf_dump(FILE *f, const struct rte_mbuf *m, unsigned dump_len)
 {
@@ -707,6 +719,7 @@ rte_pktmbuf_dump(FILE *f, const struct rte_mbuf *m, unsigned dump_len)
 }
 
 /* read len data bytes in a mbuf at specified offset (internal) */
+RTE_EXPORT_SYMBOL(__rte_pktmbuf_read)
 const void *__rte_pktmbuf_read(const struct rte_mbuf *m, uint32_t off,
 	uint32_t len, void *buf)
 {
@@ -744,6 +757,7 @@ const void *__rte_pktmbuf_read(const struct rte_mbuf *m, uint32_t off,
  * Get the name of a RX offload flag. Must be kept synchronized with flag
  * definitions in rte_mbuf.h.
  */
+RTE_EXPORT_SYMBOL(rte_get_rx_ol_flag_name)
 const char *rte_get_rx_ol_flag_name(uint64_t mask)
 {
 	switch (mask) {
@@ -783,6 +797,7 @@ struct flag_mask {
 };
 
 /* write the list of rx ol flags in buffer buf */
+RTE_EXPORT_SYMBOL(rte_get_rx_ol_flag_list)
 int
 rte_get_rx_ol_flag_list(uint64_t mask, char *buf, size_t buflen)
 {
@@ -849,6 +864,7 @@ rte_get_rx_ol_flag_list(uint64_t mask, char *buf, size_t buflen)
  * Get the name of a TX offload flag. Must be kept synchronized with flag
  * definitions in rte_mbuf.h.
  */
+RTE_EXPORT_SYMBOL(rte_get_tx_ol_flag_name)
 const char *rte_get_tx_ol_flag_name(uint64_t mask)
 {
 	switch (mask) {
@@ -883,6 +899,7 @@ const char *rte_get_tx_ol_flag_name(uint64_t mask)
 }
 
 /* write the list of tx ol flags in buffer buf */
+RTE_EXPORT_SYMBOL(rte_get_tx_ol_flag_list)
 int
 rte_get_tx_ol_flag_list(uint64_t mask, char *buf, size_t buflen)
 {
diff --git a/lib/mbuf/rte_mbuf_dyn.c b/lib/mbuf/rte_mbuf_dyn.c
index 1cfb329c3a..3adac4a4a8 100644
--- a/lib/mbuf/rte_mbuf_dyn.c
+++ b/lib/mbuf/rte_mbuf_dyn.c
@@ -189,6 +189,7 @@ __mbuf_dynfield_lookup(const char *name)
 	return mbuf_dynfield;
 }
 
+RTE_EXPORT_SYMBOL(rte_mbuf_dynfield_lookup)
 int
 rte_mbuf_dynfield_lookup(const char *name, struct rte_mbuf_dynfield *params)
 {
@@ -325,6 +326,7 @@ __rte_mbuf_dynfield_register_offset(const struct rte_mbuf_dynfield *params,
 	return offset;
 }
 
+RTE_EXPORT_SYMBOL(rte_mbuf_dynfield_register_offset)
 int
 rte_mbuf_dynfield_register_offset(const struct rte_mbuf_dynfield *params,
 				size_t req)
@@ -351,6 +353,7 @@ rte_mbuf_dynfield_register_offset(const struct rte_mbuf_dynfield *params,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_mbuf_dynfield_register)
 int
 rte_mbuf_dynfield_register(const struct rte_mbuf_dynfield *params)
 {
@@ -383,6 +386,7 @@ __mbuf_dynflag_lookup(const char *name)
 	return mbuf_dynflag;
 }
 
+RTE_EXPORT_SYMBOL(rte_mbuf_dynflag_lookup)
 int
 rte_mbuf_dynflag_lookup(const char *name,
 			struct rte_mbuf_dynflag *params)
@@ -498,6 +502,7 @@ __rte_mbuf_dynflag_register_bitnum(const struct rte_mbuf_dynflag *params,
 	return bitnum;
 }
 
+RTE_EXPORT_SYMBOL(rte_mbuf_dynflag_register_bitnum)
 int
 rte_mbuf_dynflag_register_bitnum(const struct rte_mbuf_dynflag *params,
 				unsigned int req)
@@ -521,12 +526,14 @@ rte_mbuf_dynflag_register_bitnum(const struct rte_mbuf_dynflag *params,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_mbuf_dynflag_register)
 int
 rte_mbuf_dynflag_register(const struct rte_mbuf_dynflag *params)
 {
 	return rte_mbuf_dynflag_register_bitnum(params, UINT_MAX);
 }
 
+RTE_EXPORT_SYMBOL(rte_mbuf_dyn_dump)
 void rte_mbuf_dyn_dump(FILE *out)
 {
 	struct mbuf_dynfield_list *mbuf_dynfield_list;
@@ -614,6 +621,7 @@ rte_mbuf_dyn_timestamp_register(int *field_offset, uint64_t *flag,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_mbuf_dyn_rx_timestamp_register)
 int
 rte_mbuf_dyn_rx_timestamp_register(int *field_offset, uint64_t *rx_flag)
 {
@@ -621,6 +629,7 @@ rte_mbuf_dyn_rx_timestamp_register(int *field_offset, uint64_t *rx_flag)
 			"Rx", RTE_MBUF_DYNFLAG_RX_TIMESTAMP_NAME);
 }
 
+RTE_EXPORT_SYMBOL(rte_mbuf_dyn_tx_timestamp_register)
 int
 rte_mbuf_dyn_tx_timestamp_register(int *field_offset, uint64_t *tx_flag)
 {
diff --git a/lib/mbuf/rte_mbuf_pool_ops.c b/lib/mbuf/rte_mbuf_pool_ops.c
index 8e93c6acbd..79d6ee5561 100644
--- a/lib/mbuf/rte_mbuf_pool_ops.c
+++ b/lib/mbuf/rte_mbuf_pool_ops.c
@@ -10,6 +10,7 @@
 
 #include "mbuf_log.h"
 
+RTE_EXPORT_SYMBOL(rte_mbuf_set_platform_mempool_ops)
 int
 rte_mbuf_set_platform_mempool_ops(const char *ops_name)
 {
@@ -39,6 +40,7 @@ rte_mbuf_set_platform_mempool_ops(const char *ops_name)
 	return -EEXIST;
 }
 
+RTE_EXPORT_SYMBOL(rte_mbuf_platform_mempool_ops)
 const char *
 rte_mbuf_platform_mempool_ops(void)
 {
@@ -50,6 +52,7 @@ rte_mbuf_platform_mempool_ops(void)
 	return mz->addr;
 }
 
+RTE_EXPORT_SYMBOL(rte_mbuf_set_user_mempool_ops)
 int
 rte_mbuf_set_user_mempool_ops(const char *ops_name)
 {
@@ -74,6 +77,7 @@ rte_mbuf_set_user_mempool_ops(const char *ops_name)
 
 }
 
+RTE_EXPORT_SYMBOL(rte_mbuf_user_mempool_ops)
 const char *
 rte_mbuf_user_mempool_ops(void)
 {
@@ -86,6 +90,7 @@ rte_mbuf_user_mempool_ops(void)
 }
 
 /* Return mbuf pool ops name */
+RTE_EXPORT_SYMBOL(rte_mbuf_best_mempool_ops)
 const char *
 rte_mbuf_best_mempool_ops(void)
 {
diff --git a/lib/mbuf/rte_mbuf_ptype.c b/lib/mbuf/rte_mbuf_ptype.c
index ab180b3dda..7e111e000f 100644
--- a/lib/mbuf/rte_mbuf_ptype.c
+++ b/lib/mbuf/rte_mbuf_ptype.c
@@ -8,6 +8,7 @@
 #include <rte_mbuf_ptype.h>
 
 /* get the name of the l2 packet type */
+RTE_EXPORT_SYMBOL(rte_get_ptype_l2_name)
 const char *rte_get_ptype_l2_name(uint32_t ptype)
 {
 	switch (ptype & RTE_PTYPE_L2_MASK) {
@@ -26,6 +27,7 @@ const char *rte_get_ptype_l2_name(uint32_t ptype)
 }
 
 /* get the name of the l3 packet type */
+RTE_EXPORT_SYMBOL(rte_get_ptype_l3_name)
 const char *rte_get_ptype_l3_name(uint32_t ptype)
 {
 	switch (ptype & RTE_PTYPE_L3_MASK) {
@@ -40,6 +42,7 @@ const char *rte_get_ptype_l3_name(uint32_t ptype)
 }
 
 /* get the name of the l4 packet type */
+RTE_EXPORT_SYMBOL(rte_get_ptype_l4_name)
 const char *rte_get_ptype_l4_name(uint32_t ptype)
 {
 	switch (ptype & RTE_PTYPE_L4_MASK) {
@@ -56,6 +59,7 @@ const char *rte_get_ptype_l4_name(uint32_t ptype)
 }
 
 /* get the name of the tunnel packet type */
+RTE_EXPORT_SYMBOL(rte_get_ptype_tunnel_name)
 const char *rte_get_ptype_tunnel_name(uint32_t ptype)
 {
 	switch (ptype & RTE_PTYPE_TUNNEL_MASK) {
@@ -77,6 +81,7 @@ const char *rte_get_ptype_tunnel_name(uint32_t ptype)
 }
 
 /* get the name of the inner_l2 packet type */
+RTE_EXPORT_SYMBOL(rte_get_ptype_inner_l2_name)
 const char *rte_get_ptype_inner_l2_name(uint32_t ptype)
 {
 	switch (ptype & RTE_PTYPE_INNER_L2_MASK) {
@@ -88,6 +93,7 @@ const char *rte_get_ptype_inner_l2_name(uint32_t ptype)
 }
 
 /* get the name of the inner_l3 packet type */
+RTE_EXPORT_SYMBOL(rte_get_ptype_inner_l3_name)
 const char *rte_get_ptype_inner_l3_name(uint32_t ptype)
 {
 	switch (ptype & RTE_PTYPE_INNER_L3_MASK) {
@@ -104,6 +110,7 @@ const char *rte_get_ptype_inner_l3_name(uint32_t ptype)
 }
 
 /* get the name of the inner_l4 packet type */
+RTE_EXPORT_SYMBOL(rte_get_ptype_inner_l4_name)
 const char *rte_get_ptype_inner_l4_name(uint32_t ptype)
 {
 	switch (ptype & RTE_PTYPE_INNER_L4_MASK) {
@@ -119,6 +126,7 @@ const char *rte_get_ptype_inner_l4_name(uint32_t ptype)
 }
 
 /* write the packet type name into the buffer */
+RTE_EXPORT_SYMBOL(rte_get_ptype_name)
 int rte_get_ptype_name(uint32_t ptype, char *buf, size_t buflen)
 {
 	int ret;
diff --git a/lib/member/rte_member.c b/lib/member/rte_member.c
index 57eb7affab..2756fd3327 100644
--- a/lib/member/rte_member.c
+++ b/lib/member/rte_member.c
@@ -23,6 +23,7 @@ static struct rte_tailq_elem rte_member_tailq = {
 };
 EAL_REGISTER_TAILQ(rte_member_tailq)
 
+RTE_EXPORT_SYMBOL(rte_member_find_existing)
 struct rte_member_setsum *
 rte_member_find_existing(const char *name)
 {
@@ -47,6 +48,7 @@ rte_member_find_existing(const char *name)
 	return setsum;
 }
 
+RTE_EXPORT_SYMBOL(rte_member_free)
 void
 rte_member_free(struct rte_member_setsum *setsum)
 {
@@ -85,6 +87,7 @@ rte_member_free(struct rte_member_setsum *setsum)
 	rte_free(te);
 }
 
+RTE_EXPORT_SYMBOL(rte_member_create)
 struct rte_member_setsum *
 rte_member_create(const struct rte_member_parameters *params)
 {
@@ -188,6 +191,7 @@ rte_member_create(const struct rte_member_parameters *params)
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_member_add)
 int
 rte_member_add(const struct rte_member_setsum *setsum, const void *key,
 			member_set_t set_id)
@@ -207,6 +211,7 @@ rte_member_add(const struct rte_member_setsum *setsum, const void *key,
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_member_add_byte_count)
 int
 rte_member_add_byte_count(const struct rte_member_setsum *setsum,
 			  const void *key, uint32_t byte_count)
@@ -222,6 +227,7 @@ rte_member_add_byte_count(const struct rte_member_setsum *setsum,
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_member_lookup)
 int
 rte_member_lookup(const struct rte_member_setsum *setsum, const void *key,
 			member_set_t *set_id)
@@ -241,6 +247,7 @@ rte_member_lookup(const struct rte_member_setsum *setsum, const void *key,
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_member_lookup_bulk)
 int
 rte_member_lookup_bulk(const struct rte_member_setsum *setsum,
 				const void **keys, uint32_t num_keys,
@@ -261,6 +268,7 @@ rte_member_lookup_bulk(const struct rte_member_setsum *setsum,
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_member_lookup_multi)
 int
 rte_member_lookup_multi(const struct rte_member_setsum *setsum, const void *key,
 				uint32_t match_per_key, member_set_t *set_id)
@@ -280,6 +288,7 @@ rte_member_lookup_multi(const struct rte_member_setsum *setsum, const void *key,
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_member_lookup_multi_bulk)
 int
 rte_member_lookup_multi_bulk(const struct rte_member_setsum *setsum,
 			const void **keys, uint32_t num_keys,
@@ -302,6 +311,7 @@ rte_member_lookup_multi_bulk(const struct rte_member_setsum *setsum,
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_member_query_count)
 int
 rte_member_query_count(const struct rte_member_setsum *setsum,
 		       const void *key, uint64_t *output)
@@ -317,6 +327,7 @@ rte_member_query_count(const struct rte_member_setsum *setsum,
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_member_report_heavyhitter)
 int
 rte_member_report_heavyhitter(const struct rte_member_setsum *setsum,
 				void **key, uint64_t *count)
@@ -332,6 +343,7 @@ rte_member_report_heavyhitter(const struct rte_member_setsum *setsum,
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_member_delete)
 int
 rte_member_delete(const struct rte_member_setsum *setsum, const void *key,
 			member_set_t set_id)
@@ -351,6 +363,7 @@ rte_member_delete(const struct rte_member_setsum *setsum, const void *key,
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_member_reset)
 void
 rte_member_reset(const struct rte_member_setsum *setsum)
 {
diff --git a/lib/mempool/mempool_trace_points.c b/lib/mempool/mempool_trace_points.c
index 307018094d..6667a75f28 100644
--- a/lib/mempool/mempool_trace_points.c
+++ b/lib/mempool/mempool_trace_points.c
@@ -6,27 +6,35 @@
 
 #include "mempool_trace.h"
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_mempool_trace_ops_dequeue_bulk, 20.05)
 RTE_TRACE_POINT_REGISTER(rte_mempool_trace_ops_dequeue_bulk,
 	lib.mempool.ops.deq.bulk)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_mempool_trace_ops_dequeue_contig_blocks, 20.05)
 RTE_TRACE_POINT_REGISTER(rte_mempool_trace_ops_dequeue_contig_blocks,
 	lib.mempool.ops.deq.contig)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_mempool_trace_ops_enqueue_bulk, 20.05)
 RTE_TRACE_POINT_REGISTER(rte_mempool_trace_ops_enqueue_bulk,
 	lib.mempool.ops.enq.bulk)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_mempool_trace_generic_put, 20.05)
 RTE_TRACE_POINT_REGISTER(rte_mempool_trace_generic_put,
 	lib.mempool.generic.put)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_mempool_trace_put_bulk, 20.05)
 RTE_TRACE_POINT_REGISTER(rte_mempool_trace_put_bulk,
 	lib.mempool.put.bulk)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_mempool_trace_generic_get, 20.05)
 RTE_TRACE_POINT_REGISTER(rte_mempool_trace_generic_get,
 	lib.mempool.generic.get)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_mempool_trace_get_bulk, 20.05)
 RTE_TRACE_POINT_REGISTER(rte_mempool_trace_get_bulk,
 	lib.mempool.get.bulk)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_mempool_trace_get_contig_blocks, 20.05)
 RTE_TRACE_POINT_REGISTER(rte_mempool_trace_get_contig_blocks,
 	lib.mempool.get.blocks)
 
@@ -57,12 +65,14 @@ RTE_TRACE_POINT_REGISTER(rte_mempool_trace_cache_create,
 RTE_TRACE_POINT_REGISTER(rte_mempool_trace_cache_free,
 	lib.mempool.cache.free)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_mempool_trace_default_cache, 20.05)
 RTE_TRACE_POINT_REGISTER(rte_mempool_trace_default_cache,
 	lib.mempool.default.cache)
 
 RTE_TRACE_POINT_REGISTER(rte_mempool_trace_get_page_size,
 	lib.mempool.get.page.size)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(__rte_mempool_trace_cache_flush, 20.05)
 RTE_TRACE_POINT_REGISTER(rte_mempool_trace_cache_flush,
 	lib.mempool.cache.flush)
 
diff --git a/lib/mempool/rte_mempool.c b/lib/mempool/rte_mempool.c
index 1e4f24783c..aa38157e05 100644
--- a/lib/mempool/rte_mempool.c
+++ b/lib/mempool/rte_mempool.c
@@ -31,6 +31,7 @@
 #include "mempool_trace.h"
 #include "rte_mempool.h"
 
+RTE_EXPORT_SYMBOL(rte_mempool_logtype)
 RTE_LOG_REGISTER_DEFAULT(rte_mempool_logtype, INFO);
 
 TAILQ_HEAD(rte_mempool_list, rte_tailq_entry);
@@ -179,6 +180,7 @@ mempool_add_elem(struct rte_mempool *mp, __rte_unused void *opaque,
 }
 
 /* call obj_cb() for each mempool element */
+RTE_EXPORT_SYMBOL(rte_mempool_obj_iter)
 uint32_t
 rte_mempool_obj_iter(struct rte_mempool *mp,
 	rte_mempool_obj_cb_t *obj_cb, void *obj_cb_arg)
@@ -197,6 +199,7 @@ rte_mempool_obj_iter(struct rte_mempool *mp,
 }
 
 /* call mem_cb() for each mempool memory chunk */
+RTE_EXPORT_SYMBOL(rte_mempool_mem_iter)
 uint32_t
 rte_mempool_mem_iter(struct rte_mempool *mp,
 	rte_mempool_mem_cb_t *mem_cb, void *mem_cb_arg)
@@ -213,6 +216,7 @@ rte_mempool_mem_iter(struct rte_mempool *mp,
 }
 
 /* get the header, trailer and total size of a mempool element. */
+RTE_EXPORT_SYMBOL(rte_mempool_calc_obj_size)
 uint32_t
 rte_mempool_calc_obj_size(uint32_t elt_size, uint32_t flags,
 	struct rte_mempool_objsz *sz)
@@ -313,6 +317,7 @@ mempool_ops_alloc_once(struct rte_mempool *mp)
  * zone. Return the number of objects added, or a negative value
  * on error.
  */
+RTE_EXPORT_SYMBOL(rte_mempool_populate_iova)
 int
 rte_mempool_populate_iova(struct rte_mempool *mp, char *vaddr,
 	rte_iova_t iova, size_t len, rte_mempool_memchunk_free_cb_t *free_cb,
@@ -398,6 +403,7 @@ get_iova(void *addr)
 /* Populate the mempool with a virtual area. Return the number of
  * objects added, or a negative value on error.
  */
+RTE_EXPORT_SYMBOL(rte_mempool_populate_virt)
 int
 rte_mempool_populate_virt(struct rte_mempool *mp, char *addr,
 	size_t len, size_t pg_sz, rte_mempool_memchunk_free_cb_t *free_cb,
@@ -452,6 +458,7 @@ rte_mempool_populate_virt(struct rte_mempool *mp, char *addr,
 }
 
 /* Get the minimal page size used in a mempool before populating it. */
+RTE_EXPORT_SYMBOL(rte_mempool_get_page_size)
 int
 rte_mempool_get_page_size(struct rte_mempool *mp, size_t *pg_sz)
 {
@@ -481,6 +488,7 @@ rte_mempool_get_page_size(struct rte_mempool *mp, size_t *pg_sz)
  * and populate them. Return the number of objects added, or a negative
  * value on error.
  */
+RTE_EXPORT_SYMBOL(rte_mempool_populate_default)
 int
 rte_mempool_populate_default(struct rte_mempool *mp)
 {
@@ -659,6 +667,7 @@ rte_mempool_memchunk_anon_free(struct rte_mempool_memhdr *memhdr,
 }
 
 /* populate the mempool with an anonymous mapping */
+RTE_EXPORT_SYMBOL(rte_mempool_populate_anon)
 int
 rte_mempool_populate_anon(struct rte_mempool *mp)
 {
@@ -713,6 +722,7 @@ rte_mempool_populate_anon(struct rte_mempool *mp)
 }
 
 /* free a mempool */
+RTE_EXPORT_SYMBOL(rte_mempool_free)
 void
 rte_mempool_free(struct rte_mempool *mp)
 {
@@ -761,6 +771,7 @@ mempool_cache_init(struct rte_mempool_cache *cache, uint32_t size)
  * returned to an underlying mempool. This structure is identical to the
  * local_cache[lcore_id] pointed to by the mempool structure.
  */
+RTE_EXPORT_SYMBOL(rte_mempool_cache_create)
 struct rte_mempool_cache *
 rte_mempool_cache_create(uint32_t size, int socket_id)
 {
@@ -790,6 +801,7 @@ rte_mempool_cache_create(uint32_t size, int socket_id)
  * remaining objects in the cache are flushed to the corresponding
  * mempool.
  */
+RTE_EXPORT_SYMBOL(rte_mempool_cache_free)
 void
 rte_mempool_cache_free(struct rte_mempool_cache *cache)
 {
@@ -798,6 +810,7 @@ rte_mempool_cache_free(struct rte_mempool_cache *cache)
 }
 
 /* create an empty mempool */
+RTE_EXPORT_SYMBOL(rte_mempool_create_empty)
 struct rte_mempool *
 rte_mempool_create_empty(const char *name, unsigned n, unsigned elt_size,
 	unsigned cache_size, unsigned private_data_size,
@@ -966,6 +979,7 @@ rte_mempool_create_empty(const char *name, unsigned n, unsigned elt_size,
 }
 
 /* create the mempool */
+RTE_EXPORT_SYMBOL(rte_mempool_create)
 struct rte_mempool *
 rte_mempool_create(const char *name, unsigned n, unsigned elt_size,
 	unsigned cache_size, unsigned private_data_size,
@@ -1002,6 +1016,7 @@ rte_mempool_create(const char *name, unsigned n, unsigned elt_size,
 }
 
 /* Return the number of entries in the mempool */
+RTE_EXPORT_SYMBOL(rte_mempool_avail_count)
 unsigned int
 rte_mempool_avail_count(const struct rte_mempool *mp)
 {
@@ -1026,6 +1041,7 @@ rte_mempool_avail_count(const struct rte_mempool *mp)
 }
 
 /* return the number of entries allocated from the mempool */
+RTE_EXPORT_SYMBOL(rte_mempool_in_use_count)
 unsigned int
 rte_mempool_in_use_count(const struct rte_mempool *mp)
 {
@@ -1057,6 +1073,7 @@ rte_mempool_dump_cache(FILE *f, const struct rte_mempool *mp)
 }
 
 /* check and update cookies or panic (internal) */
+RTE_EXPORT_SYMBOL(rte_mempool_check_cookies)
 void rte_mempool_check_cookies(const struct rte_mempool *mp,
 	void * const *obj_table_const, unsigned n, int free)
 {
@@ -1125,6 +1142,7 @@ void rte_mempool_check_cookies(const struct rte_mempool *mp,
 #endif
 }
 
+RTE_EXPORT_SYMBOL(rte_mempool_contig_blocks_check_cookies)
 void
 rte_mempool_contig_blocks_check_cookies(const struct rte_mempool *mp,
 	void * const *first_obj_table_const, unsigned int n, int free)
@@ -1201,6 +1219,7 @@ mempool_audit_cache(const struct rte_mempool *mp)
 }
 
 /* check the consistency of mempool (size, cookies, ...) */
+RTE_EXPORT_SYMBOL(rte_mempool_audit)
 void
 rte_mempool_audit(struct rte_mempool *mp)
 {
@@ -1212,6 +1231,7 @@ rte_mempool_audit(struct rte_mempool *mp)
 }
 
 /* dump the status of the mempool on the console */
+RTE_EXPORT_SYMBOL(rte_mempool_dump)
 void
 rte_mempool_dump(FILE *f, struct rte_mempool *mp)
 {
@@ -1316,6 +1336,7 @@ rte_mempool_dump(FILE *f, struct rte_mempool *mp)
 }
 
 /* dump the status of all mempools on the console */
+RTE_EXPORT_SYMBOL(rte_mempool_list_dump)
 void
 rte_mempool_list_dump(FILE *f)
 {
@@ -1336,6 +1357,7 @@ rte_mempool_list_dump(FILE *f)
 }
 
 /* search a mempool from its name */
+RTE_EXPORT_SYMBOL(rte_mempool_lookup)
 struct rte_mempool *
 rte_mempool_lookup(const char *name)
 {
@@ -1363,6 +1385,7 @@ rte_mempool_lookup(const char *name)
 	return mp;
 }
 
+RTE_EXPORT_SYMBOL(rte_mempool_walk)
 void rte_mempool_walk(void (*func)(struct rte_mempool *, void *),
 		      void *arg)
 {
@@ -1381,6 +1404,7 @@ void rte_mempool_walk(void (*func)(struct rte_mempool *, void *),
 	rte_mcfg_mempool_read_unlock();
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mempool_get_mem_range, 24.07)
 int rte_mempool_get_mem_range(const struct rte_mempool *mp,
 		struct rte_mempool_mem_range_info *mem_range)
 {
@@ -1415,6 +1439,7 @@ int rte_mempool_get_mem_range(const struct rte_mempool *mp,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_mempool_get_obj_alignment, 24.07)
 size_t rte_mempool_get_obj_alignment(const struct rte_mempool *mp)
 {
 	if (mp == NULL)
@@ -1448,6 +1473,7 @@ mempool_event_callback_invoke(enum rte_mempool_event event,
 	rte_mcfg_tailq_read_unlock();
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_mempool_event_callback_register)
 int
 rte_mempool_event_callback_register(rte_mempool_event_callback *func,
 				    void *user_data)
@@ -1486,6 +1512,7 @@ rte_mempool_event_callback_register(rte_mempool_event_callback *func,
 	return ret;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_mempool_event_callback_unregister)
 int
 rte_mempool_event_callback_unregister(rte_mempool_event_callback *func,
 				      void *user_data)
diff --git a/lib/mempool/rte_mempool_ops.c b/lib/mempool/rte_mempool_ops.c
index 1b33380259..74bd0fd7e1 100644
--- a/lib/mempool/rte_mempool_ops.c
+++ b/lib/mempool/rte_mempool_ops.c
@@ -14,12 +14,14 @@
 #include "mempool_trace.h"
 
 /* indirect jump table to support external memory pools. */
+RTE_EXPORT_SYMBOL(rte_mempool_ops_table)
 struct rte_mempool_ops_table rte_mempool_ops_table = {
 	.sl =  RTE_SPINLOCK_INITIALIZER,
 	.num_ops = 0
 };
 
 /* add a new ops struct in rte_mempool_ops_table, return its index. */
+RTE_EXPORT_SYMBOL(rte_mempool_register_ops)
 int
 rte_mempool_register_ops(const struct rte_mempool_ops *h)
 {
@@ -146,6 +148,7 @@ rte_mempool_ops_populate(struct rte_mempool *mp, unsigned int max_objs,
 }
 
 /* wrapper to get additional mempool info */
+RTE_EXPORT_SYMBOL(rte_mempool_ops_get_info)
 int
 rte_mempool_ops_get_info(const struct rte_mempool *mp,
 			 struct rte_mempool_info *info)
@@ -161,6 +164,7 @@ rte_mempool_ops_get_info(const struct rte_mempool *mp,
 
 
 /* sets mempool ops previously registered by rte_mempool_register_ops. */
+RTE_EXPORT_SYMBOL(rte_mempool_set_ops_byname)
 int
 rte_mempool_set_ops_byname(struct rte_mempool *mp, const char *name,
 	void *pool_config)
diff --git a/lib/mempool/rte_mempool_ops_default.c b/lib/mempool/rte_mempool_ops_default.c
index 22fccf9d76..b82713ca5e 100644
--- a/lib/mempool/rte_mempool_ops_default.c
+++ b/lib/mempool/rte_mempool_ops_default.c
@@ -6,6 +6,7 @@
 
 #include <rte_mempool.h>
 
+RTE_EXPORT_SYMBOL(rte_mempool_op_calc_mem_size_helper)
 ssize_t
 rte_mempool_op_calc_mem_size_helper(const struct rte_mempool *mp,
 				uint32_t obj_num, uint32_t pg_shift,
@@ -65,6 +66,7 @@ rte_mempool_op_calc_mem_size_helper(const struct rte_mempool *mp,
 	return mem_size;
 }
 
+RTE_EXPORT_SYMBOL(rte_mempool_op_calc_mem_size_default)
 ssize_t
 rte_mempool_op_calc_mem_size_default(const struct rte_mempool *mp,
 				uint32_t obj_num, uint32_t pg_shift,
@@ -87,6 +89,7 @@ check_obj_bounds(char *obj, size_t pg_sz, size_t elt_sz)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_mempool_op_populate_helper)
 int
 rte_mempool_op_populate_helper(struct rte_mempool *mp, unsigned int flags,
 			unsigned int max_objs, void *vaddr, rte_iova_t iova,
@@ -134,6 +137,7 @@ rte_mempool_op_populate_helper(struct rte_mempool *mp, unsigned int flags,
 	return i;
 }
 
+RTE_EXPORT_SYMBOL(rte_mempool_op_populate_default)
 int
 rte_mempool_op_populate_default(struct rte_mempool *mp, unsigned int max_objs,
 				void *vaddr, rte_iova_t iova, size_t len,
diff --git a/lib/meter/rte_meter.c b/lib/meter/rte_meter.c
index 6545803d36..58166bc974 100644
--- a/lib/meter/rte_meter.c
+++ b/lib/meter/rte_meter.c
@@ -36,6 +36,7 @@ rte_meter_get_tb_params(uint64_t hz, uint64_t rate, uint64_t *tb_period, uint64_
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_meter_srtcm_profile_config)
 int
 rte_meter_srtcm_profile_config(struct rte_meter_srtcm_profile *p,
 	struct rte_meter_srtcm_params *params)
@@ -58,6 +59,7 @@ rte_meter_srtcm_profile_config(struct rte_meter_srtcm_profile *p,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_meter_srtcm_config)
 int
 rte_meter_srtcm_config(struct rte_meter_srtcm *m,
 	struct rte_meter_srtcm_profile *p)
@@ -74,6 +76,7 @@ rte_meter_srtcm_config(struct rte_meter_srtcm *m,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_meter_trtcm_profile_config)
 int
 rte_meter_trtcm_profile_config(struct rte_meter_trtcm_profile *p,
 	struct rte_meter_trtcm_params *params)
@@ -101,6 +104,7 @@ rte_meter_trtcm_profile_config(struct rte_meter_trtcm_profile *p,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_meter_trtcm_config)
 int
 rte_meter_trtcm_config(struct rte_meter_trtcm *m,
 	struct rte_meter_trtcm_profile *p)
@@ -117,6 +121,7 @@ rte_meter_trtcm_config(struct rte_meter_trtcm *m,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_meter_trtcm_rfc4115_profile_config)
 int
 rte_meter_trtcm_rfc4115_profile_config(
 	struct rte_meter_trtcm_rfc4115_profile *p,
@@ -142,6 +147,7 @@ rte_meter_trtcm_rfc4115_profile_config(
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_meter_trtcm_rfc4115_config)
 int
 rte_meter_trtcm_rfc4115_config(
 	struct rte_meter_trtcm_rfc4115 *m,
diff --git a/lib/metrics/rte_metrics.c b/lib/metrics/rte_metrics.c
index 0ccdbabc04..30a8aeaf5c 100644
--- a/lib/metrics/rte_metrics.c
+++ b/lib/metrics/rte_metrics.c
@@ -55,6 +55,7 @@ struct rte_metrics_data_s {
 	rte_spinlock_t lock;
 };
 
+RTE_EXPORT_SYMBOL(rte_metrics_init)
 int
 rte_metrics_init(int socket_id)
 {
@@ -80,6 +81,7 @@ rte_metrics_init(int socket_id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_metrics_deinit)
 int
 rte_metrics_deinit(void)
 {
@@ -103,6 +105,7 @@ rte_metrics_deinit(void)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_metrics_reg_name)
 int
 rte_metrics_reg_name(const char *name)
 {
@@ -111,6 +114,7 @@ rte_metrics_reg_name(const char *name)
 	return rte_metrics_reg_names(list_names, 1);
 }
 
+RTE_EXPORT_SYMBOL(rte_metrics_reg_names)
 int
 rte_metrics_reg_names(const char * const *names, uint16_t cnt_names)
 {
@@ -157,12 +161,14 @@ rte_metrics_reg_names(const char * const *names, uint16_t cnt_names)
 	return idx_base;
 }
 
+RTE_EXPORT_SYMBOL(rte_metrics_update_value)
 int
 rte_metrics_update_value(int port_id, uint16_t key, const uint64_t value)
 {
 	return rte_metrics_update_values(port_id, key, &value, 1);
 }
 
+RTE_EXPORT_SYMBOL(rte_metrics_update_values)
 int
 rte_metrics_update_values(int port_id,
 	uint16_t key,
@@ -225,6 +231,7 @@ rte_metrics_update_values(int port_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_metrics_get_names)
 int
 rte_metrics_get_names(struct rte_metric_name *names,
 	uint16_t capacity)
@@ -256,6 +263,7 @@ rte_metrics_get_names(struct rte_metric_name *names,
 	return return_value;
 }
 
+RTE_EXPORT_SYMBOL(rte_metrics_get_values)
 int
 rte_metrics_get_values(int port_id,
 	struct rte_metric_value *values,
diff --git a/lib/metrics/rte_metrics_telemetry.c b/lib/metrics/rte_metrics_telemetry.c
index dc43611d29..c187ab54f0 100644
--- a/lib/metrics/rte_metrics_telemetry.c
+++ b/lib/metrics/rte_metrics_telemetry.c
@@ -71,6 +71,7 @@ rte_metrics_tel_reg_port_ethdev_to_metrics(uint16_t port_id)
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_metrics_tel_reg_all_ethdev, 20.05)
 int32_t
 rte_metrics_tel_reg_all_ethdev(int *metrics_register_done, int *reg_index_list)
 {
@@ -225,6 +226,7 @@ rte_metrics_tel_format_port(uint32_t pid, json_t *ports,
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_metrics_tel_encode_json_format, 20.05)
 int32_t
 rte_metrics_tel_encode_json_format(struct telemetry_encode_param *ep,
 		char **json_buffer)
@@ -278,6 +280,7 @@ rte_metrics_tel_encode_json_format(struct telemetry_encode_param *ep,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_metrics_tel_get_ports_stats_json, 20.05)
 int32_t
 rte_metrics_tel_get_ports_stats_json(struct telemetry_encode_param *ep,
 		int *reg_index, char **json_buffer)
@@ -308,6 +311,7 @@ rte_metrics_tel_get_ports_stats_json(struct telemetry_encode_param *ep,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_metrics_tel_get_port_stats_ids, 20.05)
 int32_t
 rte_metrics_tel_get_port_stats_ids(struct telemetry_encode_param *ep)
 {
@@ -374,6 +378,7 @@ rte_metrics_tel_stat_names_to_ids(const char * const *stat_names,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_metrics_tel_extract_data, 20.05)
 int32_t
 rte_metrics_tel_extract_data(struct telemetry_encode_param *ep, json_t *data)
 {
@@ -544,6 +549,7 @@ RTE_INIT(metrics_ctor)
 
 #else /* !RTE_HAS_JANSSON */
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_metrics_tel_reg_all_ethdev, 20.05)
 int32_t
 rte_metrics_tel_reg_all_ethdev(int *metrics_register_done, int *reg_index_list)
 {
@@ -553,6 +559,7 @@ rte_metrics_tel_reg_all_ethdev(int *metrics_register_done, int *reg_index_list)
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_metrics_tel_encode_json_format, 20.05)
 int32_t
 rte_metrics_tel_encode_json_format(struct telemetry_encode_param *ep,
 	char **json_buffer)
@@ -563,6 +570,7 @@ rte_metrics_tel_encode_json_format(struct telemetry_encode_param *ep,
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_metrics_tel_get_ports_stats_json, 20.05)
 int32_t
 rte_metrics_tel_get_ports_stats_json(struct telemetry_encode_param *ep,
 	int *reg_index, char **json_buffer)
@@ -574,6 +582,7 @@ rte_metrics_tel_get_ports_stats_json(struct telemetry_encode_param *ep,
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_metrics_tel_get_port_stats_ids, 20.05)
 int32_t
 rte_metrics_tel_get_port_stats_ids(struct telemetry_encode_param *ep)
 {
@@ -582,6 +591,7 @@ rte_metrics_tel_get_port_stats_ids(struct telemetry_encode_param *ep)
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_metrics_tel_extract_data, 20.05)
 int32_t
 rte_metrics_tel_extract_data(struct telemetry_encode_param *ep, json_t *data)
 {
@@ -591,6 +601,7 @@ rte_metrics_tel_extract_data(struct telemetry_encode_param *ep, json_t *data)
 	return -ENOTSUP;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_metrics_tel_get_global_stats, 20.05)
 int32_t
 rte_metrics_tel_get_global_stats(struct telemetry_encode_param *ep)
 {
diff --git a/lib/mldev/mldev_utils.c b/lib/mldev/mldev_utils.c
index 13ac615e9f..c33fd78d28 100644
--- a/lib/mldev/mldev_utils.c
+++ b/lib/mldev/mldev_utils.c
@@ -14,6 +14,7 @@
  * This file implements Machine Learning utility routines, except type conversion routines.
  */
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_ml_io_type_size_get)
 int
 rte_ml_io_type_size_get(enum rte_ml_io_type type)
 {
@@ -49,6 +50,7 @@ rte_ml_io_type_size_get(enum rte_ml_io_type type)
 	}
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_ml_io_type_to_str)
 void
 rte_ml_io_type_to_str(enum rte_ml_io_type type, char *str, int len)
 {
diff --git a/lib/mldev/mldev_utils_neon.c b/lib/mldev/mldev_utils_neon.c
index 8751a40863..08d114af42 100644
--- a/lib/mldev/mldev_utils_neon.c
+++ b/lib/mldev/mldev_utils_neon.c
@@ -75,6 +75,7 @@ __float32_to_int8_neon_s8x1(const float *input, int8_t *output, float scale, int
 	*output = vqmovnh_s16(s16);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_float32_to_int8, 22.11)
 int
 rte_ml_io_float32_to_int8(const void *input, void *output, uint64_t nb_elements, float scale,
 			  int8_t zero_point)
@@ -149,6 +150,7 @@ __int8_to_float32_neon_f32x1(const int8_t *input, float *output, float scale, in
 	*output = scale * (vcvts_f32_s32((int32_t)*input) - (float)zero_point);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_int8_to_float32, 22.11)
 int
 rte_ml_io_int8_to_float32(const void *input, void *output, uint64_t nb_elements, float scale,
 			  int8_t zero_point)
@@ -242,6 +244,7 @@ __float32_to_uint8_neon_u8x1(const float *input, uint8_t *output, float scale, u
 	*output = vqmovnh_u16(u16);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_float32_to_uint8, 22.11)
 int
 rte_ml_io_float32_to_uint8(const void *input, void *output, uint64_t nb_elements, float scale,
 			   uint8_t zero_point)
@@ -316,6 +319,7 @@ __uint8_to_float32_neon_f32x1(const uint8_t *input, float *output, float scale,
 	*output = scale * (vcvts_f32_u32((uint32_t)*input) - (float)zero_point);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_uint8_to_float32, 22.11)
 int
 rte_ml_io_uint8_to_float32(const void *input, void *output, uint64_t nb_elements, float scale,
 			   uint8_t zero_point)
@@ -395,6 +399,7 @@ __float32_to_int16_neon_s16x1(const float *input, int16_t *output, float scale,
 	*output = vqmovns_s32(vget_lane_s32(s32x2, 0));
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_float32_to_int16, 22.11)
 int
 rte_ml_io_float32_to_int16(const void *input, void *output, uint64_t nb_elements, float scale,
 			   int16_t zero_point)
@@ -463,6 +468,7 @@ __int16_to_float32_neon_f32x1(const int16_t *input, float *output, float scale,
 	*output = scale * (vcvts_f32_s32((int32_t)*input) - (float)zero_point);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_int16_to_float32, 22.11)
 int
 rte_ml_io_int16_to_float32(const void *input, void *output, uint64_t nb_elements, float scale,
 			   int16_t zero_point)
@@ -539,6 +545,7 @@ __float32_to_uint16_neon_u16x1(const float *input, uint16_t *output, float scale
 	*output = vqmovns_u32(u32) + zero_point;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_float32_to_uint16, 22.11)
 int
 rte_ml_io_float32_to_uint16(const void *input, void *output, uint64_t nb_elements, float scale,
 			   uint16_t zero_point)
@@ -609,6 +616,7 @@ __uint16_to_float32_neon_f32x1(const uint16_t *input, float *output, float scale
 	*output = scale * (vcvts_f32_u32((uint32_t)*input) - (float)zero_point);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_uint16_to_float32, 22.11)
 int
 rte_ml_io_uint16_to_float32(const void *input, void *output, uint64_t nb_elements, float scale,
 			   uint16_t zero_point)
@@ -687,6 +695,7 @@ __float32_to_int32_neon_s32x1(const float *input, int32_t *output, float scale,
 	vst1_lane_s32(output, s32x2, 0);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_float32_to_int32, 22.11)
 int
 rte_ml_io_float32_to_int32(const void *input, void *output, uint64_t nb_elements, float scale,
 			   int32_t zero_point)
@@ -751,6 +760,7 @@ __int32_to_float32_neon_f32x1(const int32_t *input, float *output, float scale,
 	*output = scale * (vcvts_f32_s32(*input) - (float)zero_point);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_int32_to_float32, 22.11)
 int
 rte_ml_io_int32_to_float32(const void *input, void *output, uint64_t nb_elements, float scale,
 			   int32_t zero_point)
@@ -818,6 +828,7 @@ __float32_to_uint32_neon_u32x1(const float *input, uint32_t *output, float scale
 	*output = vcvtas_u32_f32((*input) / scale + (float)zero_point);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_float32_to_uint32, 22.11)
 int
 rte_ml_io_float32_to_uint32(const void *input, void *output, uint64_t nb_elements, float scale,
 			   uint32_t zero_point)
@@ -884,6 +895,7 @@ __uint32_to_float32_neon_f32x1(const uint32_t *input, float *output, float scale
 	*output = scale * (vcvts_f32_u32(*input) - (float)zero_point);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_uint32_to_float32, 22.11)
 int
 rte_ml_io_uint32_to_float32(const void *input, void *output, uint64_t nb_elements, float scale,
 			   uint32_t zero_point)
@@ -978,6 +990,7 @@ __float32_to_int64_neon_s64x1(const float *input, int64_t *output, float scale,
 	*output = s64;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_float32_to_int64, 22.11)
 int
 rte_ml_io_float32_to_int64(const void *input, void *output, uint64_t nb_elements, float scale,
 			   int64_t zero_point)
@@ -1066,6 +1079,7 @@ __int64_to_float32_neon_f32x1(const int64_t *input, float *output, float scale,
 	vst1_lane_f32(output, f32x2, 0);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_int64_to_float32, 22.11)
 int
 rte_ml_io_int64_to_float32(const void *input, void *output, uint64_t nb_elements, float scale,
 			   int64_t zero_point)
@@ -1156,6 +1170,7 @@ __float32_to_uint64_neon_u64x1(const float *input, uint64_t *output, float scale
 	vst1q_lane_u64(output, u64x2, 0);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_float32_to_uint64, 22.11)
 int
 rte_ml_io_float32_to_uint64(const void *input, void *output, uint64_t nb_elements, float scale,
 			   uint64_t zero_point)
@@ -1246,6 +1261,7 @@ __uint64_to_float32_neon_f32x1(const uint64_t *input, float *output, float scale
 	vst1_lane_f32(output, f32x2, 0);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_uint64_to_float32, 22.11)
 int
 rte_ml_io_uint64_to_float32(const void *input, void *output, uint64_t nb_elements, float scale,
 			   uint64_t zero_point)
@@ -1314,6 +1330,7 @@ __float32_to_float16_neon_f16x1(const float32_t *input, float16_t *output)
 	vst1_lane_f16(output, f16x4, 0);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_float32_to_float16, 22.11)
 int
 rte_ml_io_float32_to_float16(const void *input, void *output, uint64_t nb_elements)
 {
@@ -1381,6 +1398,7 @@ __float16_to_float32_neon_f32x1(const float16_t *input, float32_t *output)
 	vst1q_lane_f32(output, f32x4, 0);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_float16_to_float32, 22.11)
 int
 rte_ml_io_float16_to_float32(const void *input, void *output, uint64_t nb_elements)
 {
diff --git a/lib/mldev/mldev_utils_neon_bfloat16.c b/lib/mldev/mldev_utils_neon_bfloat16.c
index b8e6853266..8789363e83 100644
--- a/lib/mldev/mldev_utils_neon_bfloat16.c
+++ b/lib/mldev/mldev_utils_neon_bfloat16.c
@@ -49,6 +49,7 @@ __float32_to_bfloat16_neon_f16x1(const float32_t *input, bfloat16_t *output)
 	vst1_lane_bf16(output, bf16x4, 0);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_float32_to_bfloat16, 22.11)
 int
 rte_ml_io_float32_to_bfloat16(const void *input, void *output, uint64_t nb_elements)
 {
@@ -116,6 +117,7 @@ __bfloat16_to_float32_neon_f32x1(const bfloat16_t *input, float32_t *output)
 	vst1q_lane_f32(output, f32x4, 0);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_bfloat16_to_float32, 22.11)
 int
 rte_ml_io_bfloat16_to_float32(const void *input, void *output, uint64_t nb_elements)
 {
diff --git a/lib/mldev/mldev_utils_scalar.c b/lib/mldev/mldev_utils_scalar.c
index e1fefdec3b..e12b08e983 100644
--- a/lib/mldev/mldev_utils_scalar.c
+++ b/lib/mldev/mldev_utils_scalar.c
@@ -9,6 +9,7 @@
  * types from higher precision to lower precision and vice-versa, except bfloat16.
  */
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_float32_to_int8, 22.11)
 int
 rte_ml_io_float32_to_int8(const void *input, void *output, uint64_t nb_elements, float scale,
 			  int8_t zero_point)
@@ -42,6 +43,7 @@ rte_ml_io_float32_to_int8(const void *input, void *output, uint64_t nb_elements,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_int8_to_float32, 22.11)
 int
 rte_ml_io_int8_to_float32(const void *input, void *output, uint64_t nb_elements, float scale,
 			  int8_t zero_point)
@@ -66,6 +68,7 @@ rte_ml_io_int8_to_float32(const void *input, void *output, uint64_t nb_elements,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_float32_to_uint8, 22.11)
 int
 rte_ml_io_float32_to_uint8(const void *input, void *output, uint64_t nb_elements, float scale,
 			   uint8_t zero_point)
@@ -99,6 +102,7 @@ rte_ml_io_float32_to_uint8(const void *input, void *output, uint64_t nb_elements
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_uint8_to_float32, 22.11)
 int
 rte_ml_io_uint8_to_float32(const void *input, void *output, uint64_t nb_elements, float scale,
 			   uint8_t zero_point)
@@ -123,6 +127,7 @@ rte_ml_io_uint8_to_float32(const void *input, void *output, uint64_t nb_elements
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_float32_to_int16, 22.11)
 int
 rte_ml_io_float32_to_int16(const void *input, void *output, uint64_t nb_elements, float scale,
 			   int16_t zero_point)
@@ -156,6 +161,7 @@ rte_ml_io_float32_to_int16(const void *input, void *output, uint64_t nb_elements
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_int16_to_float32, 22.11)
 int
 rte_ml_io_int16_to_float32(const void *input, void *output, uint64_t nb_elements, float scale,
 			   int16_t zero_point)
@@ -180,6 +186,7 @@ rte_ml_io_int16_to_float32(const void *input, void *output, uint64_t nb_elements
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_float32_to_uint16, 22.11)
 int
 rte_ml_io_float32_to_uint16(const void *input, void *output, uint64_t nb_elements, float scale,
 			    uint16_t zero_point)
@@ -213,6 +220,7 @@ rte_ml_io_float32_to_uint16(const void *input, void *output, uint64_t nb_element
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_uint16_to_float32, 22.11)
 int
 rte_ml_io_uint16_to_float32(const void *input, void *output, uint64_t nb_elements, float scale,
 			    uint16_t zero_point)
@@ -237,6 +245,7 @@ rte_ml_io_uint16_to_float32(const void *input, void *output, uint64_t nb_element
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_float32_to_int32, 22.11)
 int
 rte_ml_io_float32_to_int32(const void *input, void *output, uint64_t nb_elements, float scale,
 			   int32_t zero_point)
@@ -261,6 +270,7 @@ rte_ml_io_float32_to_int32(const void *input, void *output, uint64_t nb_elements
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_int32_to_float32, 22.11)
 int
 rte_ml_io_int32_to_float32(const void *input, void *output, uint64_t nb_elements, float scale,
 			   int32_t zero_point)
@@ -285,6 +295,7 @@ rte_ml_io_int32_to_float32(const void *input, void *output, uint64_t nb_elements
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_float32_to_uint32, 22.11)
 int
 rte_ml_io_float32_to_uint32(const void *input, void *output, uint64_t nb_elements, float scale,
 			    uint32_t zero_point)
@@ -315,6 +326,7 @@ rte_ml_io_float32_to_uint32(const void *input, void *output, uint64_t nb_element
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_uint32_to_float32, 22.11)
 int
 rte_ml_io_uint32_to_float32(const void *input, void *output, uint64_t nb_elements, float scale,
 			    uint32_t zero_point)
@@ -339,6 +351,7 @@ rte_ml_io_uint32_to_float32(const void *input, void *output, uint64_t nb_element
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_float32_to_int64, 22.11)
 int
 rte_ml_io_float32_to_int64(const void *input, void *output, uint64_t nb_elements, float scale,
 			   int64_t zero_point)
@@ -363,6 +376,7 @@ rte_ml_io_float32_to_int64(const void *input, void *output, uint64_t nb_elements
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_int64_to_float32, 22.11)
 int
 rte_ml_io_int64_to_float32(const void *input, void *output, uint64_t nb_elements, float scale,
 			   int64_t zero_point)
@@ -387,6 +401,7 @@ rte_ml_io_int64_to_float32(const void *input, void *output, uint64_t nb_elements
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_float32_to_uint64, 22.11)
 int
 rte_ml_io_float32_to_uint64(const void *input, void *output, uint64_t nb_elements, float scale,
 			    uint64_t zero_point)
@@ -417,6 +432,7 @@ rte_ml_io_float32_to_uint64(const void *input, void *output, uint64_t nb_element
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_uint64_to_float32, 22.11)
 int
 rte_ml_io_uint64_to_float32(const void *input, void *output, uint64_t nb_elements, float scale,
 			    uint64_t zero_point)
@@ -563,6 +579,7 @@ __float32_to_float16_scalar_rtn(float x)
 	return u16;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_float32_to_float16, 22.11)
 int
 rte_ml_io_float32_to_float16(const void *input, void *output, uint64_t nb_elements)
 {
@@ -647,6 +664,7 @@ __float16_to_float32_scalar_rtx(uint16_t f16)
 	return f32.f;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_float16_to_float32, 22.11)
 int
 rte_ml_io_float16_to_float32(const void *input, void *output, uint64_t nb_elements)
 {
diff --git a/lib/mldev/mldev_utils_scalar_bfloat16.c b/lib/mldev/mldev_utils_scalar_bfloat16.c
index 3f93272518..795c62c4e4 100644
--- a/lib/mldev/mldev_utils_scalar_bfloat16.c
+++ b/lib/mldev/mldev_utils_scalar_bfloat16.c
@@ -91,6 +91,7 @@ __float32_to_bfloat16_scalar_rtn(float x)
 	return u16;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_float32_to_bfloat16, 22.11)
 int
 rte_ml_io_float32_to_bfloat16(const void *input, void *output, uint64_t nb_elements)
 {
@@ -173,6 +174,7 @@ __bfloat16_to_float32_scalar_rtx(uint16_t f16)
 	return f32.f;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_bfloat16_to_float32, 22.11)
 int
 rte_ml_io_bfloat16_to_float32(const void *input, void *output, uint64_t nb_elements)
 {
diff --git a/lib/mldev/rte_mldev.c b/lib/mldev/rte_mldev.c
index a81ece07b6..ebce2f1d28 100644
--- a/lib/mldev/rte_mldev.c
+++ b/lib/mldev/rte_mldev.c
@@ -23,12 +23,14 @@ struct rte_ml_op_pool_private {
 	/*< Size of private user data with each operation. */
 };
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_ml_dev_pmd_get_dev)
 struct rte_ml_dev *
 rte_ml_dev_pmd_get_dev(int16_t dev_id)
 {
 	return &ml_dev_globals.devs[dev_id];
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_ml_dev_pmd_get_named_dev)
 struct rte_ml_dev *
 rte_ml_dev_pmd_get_named_dev(const char *name)
 {
@@ -47,6 +49,7 @@ rte_ml_dev_pmd_get_named_dev(const char *name)
 	return NULL;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_ml_dev_pmd_allocate)
 struct rte_ml_dev *
 rte_ml_dev_pmd_allocate(const char *name, uint8_t socket_id)
 {
@@ -120,6 +123,7 @@ rte_ml_dev_pmd_allocate(const char *name, uint8_t socket_id)
 	return dev;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_ml_dev_pmd_release)
 int
 rte_ml_dev_pmd_release(struct rte_ml_dev *dev)
 {
@@ -155,6 +159,7 @@ rte_ml_dev_pmd_release(struct rte_ml_dev *dev)
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_dev_init, 22.11)
 int
 rte_ml_dev_init(size_t dev_max)
 {
@@ -190,12 +195,14 @@ rte_ml_dev_init(size_t dev_max)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_dev_count, 22.11)
 uint16_t
 rte_ml_dev_count(void)
 {
 	return ml_dev_globals.nb_devs;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_dev_is_valid_dev, 22.11)
 int
 rte_ml_dev_is_valid_dev(int16_t dev_id)
 {
@@ -211,6 +218,7 @@ rte_ml_dev_is_valid_dev(int16_t dev_id)
 		return 1;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_dev_socket_id, 22.11)
 int
 rte_ml_dev_socket_id(int16_t dev_id)
 {
@@ -226,6 +234,7 @@ rte_ml_dev_socket_id(int16_t dev_id)
 	return dev->data->socket_id;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_dev_info_get, 22.11)
 int
 rte_ml_dev_info_get(int16_t dev_id, struct rte_ml_dev_info *dev_info)
 {
@@ -249,6 +258,7 @@ rte_ml_dev_info_get(int16_t dev_id, struct rte_ml_dev_info *dev_info)
 	return dev->dev_ops->dev_info_get(dev, dev_info);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_dev_configure, 22.11)
 int
 rte_ml_dev_configure(int16_t dev_id, const struct rte_ml_dev_config *config)
 {
@@ -288,6 +298,7 @@ rte_ml_dev_configure(int16_t dev_id, const struct rte_ml_dev_config *config)
 	return dev->dev_ops->dev_configure(dev, config);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_dev_close, 22.11)
 int
 rte_ml_dev_close(int16_t dev_id)
 {
@@ -311,6 +322,7 @@ rte_ml_dev_close(int16_t dev_id)
 	return dev->dev_ops->dev_close(dev);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_dev_start, 22.11)
 int
 rte_ml_dev_start(int16_t dev_id)
 {
@@ -338,6 +350,7 @@ rte_ml_dev_start(int16_t dev_id)
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_dev_stop, 22.11)
 int
 rte_ml_dev_stop(int16_t dev_id)
 {
@@ -365,6 +378,7 @@ rte_ml_dev_stop(int16_t dev_id)
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_dev_queue_pair_count, 22.11)
 uint16_t
 rte_ml_dev_queue_pair_count(int16_t dev_id)
 {
@@ -380,6 +394,7 @@ rte_ml_dev_queue_pair_count(int16_t dev_id)
 	return dev->data->nb_queue_pairs;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_dev_queue_pair_setup, 22.11)
 int
 rte_ml_dev_queue_pair_setup(int16_t dev_id, uint16_t queue_pair_id,
 			    const struct rte_ml_dev_qp_conf *qp_conf, int socket_id)
@@ -413,6 +428,7 @@ rte_ml_dev_queue_pair_setup(int16_t dev_id, uint16_t queue_pair_id,
 	return dev->dev_ops->dev_queue_pair_setup(dev, queue_pair_id, qp_conf, socket_id);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_dev_stats_get, 22.11)
 int
 rte_ml_dev_stats_get(int16_t dev_id, struct rte_ml_dev_stats *stats)
 {
@@ -436,6 +452,7 @@ rte_ml_dev_stats_get(int16_t dev_id, struct rte_ml_dev_stats *stats)
 	return dev->dev_ops->dev_stats_get(dev, stats);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_dev_stats_reset, 22.11)
 void
 rte_ml_dev_stats_reset(int16_t dev_id)
 {
@@ -453,6 +470,7 @@ rte_ml_dev_stats_reset(int16_t dev_id)
 	dev->dev_ops->dev_stats_reset(dev);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_dev_xstats_names_get, 22.11)
 int
 rte_ml_dev_xstats_names_get(int16_t dev_id, enum rte_ml_dev_xstats_mode mode, int32_t model_id,
 			    struct rte_ml_dev_xstats_map *xstats_map, uint32_t size)
@@ -471,6 +489,7 @@ rte_ml_dev_xstats_names_get(int16_t dev_id, enum rte_ml_dev_xstats_mode mode, in
 	return dev->dev_ops->dev_xstats_names_get(dev, mode, model_id, xstats_map, size);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_dev_xstats_by_name_get, 22.11)
 int
 rte_ml_dev_xstats_by_name_get(int16_t dev_id, const char *name, uint16_t *stat_id, uint64_t *value)
 {
@@ -498,6 +517,7 @@ rte_ml_dev_xstats_by_name_get(int16_t dev_id, const char *name, uint16_t *stat_i
 	return dev->dev_ops->dev_xstats_by_name_get(dev, name, stat_id, value);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_dev_xstats_get, 22.11)
 int
 rte_ml_dev_xstats_get(int16_t dev_id, enum rte_ml_dev_xstats_mode mode, int32_t model_id,
 		      const uint16_t stat_ids[], uint64_t values[], uint16_t nb_ids)
@@ -526,6 +546,7 @@ rte_ml_dev_xstats_get(int16_t dev_id, enum rte_ml_dev_xstats_mode mode, int32_t
 	return dev->dev_ops->dev_xstats_get(dev, mode, model_id, stat_ids, values, nb_ids);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_dev_xstats_reset, 22.11)
 int
 rte_ml_dev_xstats_reset(int16_t dev_id, enum rte_ml_dev_xstats_mode mode, int32_t model_id,
 			const uint16_t stat_ids[], uint16_t nb_ids)
@@ -544,6 +565,7 @@ rte_ml_dev_xstats_reset(int16_t dev_id, enum rte_ml_dev_xstats_mode mode, int32_
 	return dev->dev_ops->dev_xstats_reset(dev, mode, model_id, stat_ids, nb_ids);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_dev_dump, 22.11)
 int
 rte_ml_dev_dump(int16_t dev_id, FILE *fd)
 {
@@ -566,6 +588,7 @@ rte_ml_dev_dump(int16_t dev_id, FILE *fd)
 	return dev->dev_ops->dev_dump(dev, fd);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_dev_selftest, 22.11)
 int
 rte_ml_dev_selftest(int16_t dev_id)
 {
@@ -583,6 +606,7 @@ rte_ml_dev_selftest(int16_t dev_id)
 	return dev->dev_ops->dev_selftest(dev);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_model_load, 22.11)
 int
 rte_ml_model_load(int16_t dev_id, struct rte_ml_model_params *params, uint16_t *model_id)
 {
@@ -610,6 +634,7 @@ rte_ml_model_load(int16_t dev_id, struct rte_ml_model_params *params, uint16_t *
 	return dev->dev_ops->model_load(dev, params, model_id);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_model_unload, 22.11)
 int
 rte_ml_model_unload(int16_t dev_id, uint16_t model_id)
 {
@@ -627,6 +652,7 @@ rte_ml_model_unload(int16_t dev_id, uint16_t model_id)
 	return dev->dev_ops->model_unload(dev, model_id);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_model_start, 22.11)
 int
 rte_ml_model_start(int16_t dev_id, uint16_t model_id)
 {
@@ -644,6 +670,7 @@ rte_ml_model_start(int16_t dev_id, uint16_t model_id)
 	return dev->dev_ops->model_start(dev, model_id);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_model_stop, 22.11)
 int
 rte_ml_model_stop(int16_t dev_id, uint16_t model_id)
 {
@@ -661,6 +688,7 @@ rte_ml_model_stop(int16_t dev_id, uint16_t model_id)
 	return dev->dev_ops->model_stop(dev, model_id);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_model_info_get, 22.11)
 int
 rte_ml_model_info_get(int16_t dev_id, uint16_t model_id, struct rte_ml_model_info *model_info)
 {
@@ -684,6 +712,7 @@ rte_ml_model_info_get(int16_t dev_id, uint16_t model_id, struct rte_ml_model_inf
 	return dev->dev_ops->model_info_get(dev, model_id, model_info);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_model_params_update, 22.11)
 int
 rte_ml_model_params_update(int16_t dev_id, uint16_t model_id, void *buffer)
 {
@@ -706,6 +735,7 @@ rte_ml_model_params_update(int16_t dev_id, uint16_t model_id, void *buffer)
 	return dev->dev_ops->model_params_update(dev, model_id, buffer);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_quantize, 22.11)
 int
 rte_ml_io_quantize(int16_t dev_id, uint16_t model_id, struct rte_ml_buff_seg **dbuffer,
 		   struct rte_ml_buff_seg **qbuffer)
@@ -734,6 +764,7 @@ rte_ml_io_quantize(int16_t dev_id, uint16_t model_id, struct rte_ml_buff_seg **d
 	return dev->dev_ops->io_quantize(dev, model_id, dbuffer, qbuffer);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_io_dequantize, 22.11)
 int
 rte_ml_io_dequantize(int16_t dev_id, uint16_t model_id, struct rte_ml_buff_seg **qbuffer,
 		     struct rte_ml_buff_seg **dbuffer)
@@ -774,6 +805,7 @@ ml_op_init(struct rte_mempool *mempool, __rte_unused void *opaque_arg, void *_op
 	op->mempool = mempool;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_op_pool_create, 22.11)
 struct rte_mempool *
 rte_ml_op_pool_create(const char *name, unsigned int nb_elts, unsigned int cache_size,
 		      uint16_t user_size, int socket_id)
@@ -813,12 +845,14 @@ rte_ml_op_pool_create(const char *name, unsigned int nb_elts, unsigned int cache
 	return mp;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_op_pool_free, 22.11)
 void
 rte_ml_op_pool_free(struct rte_mempool *mempool)
 {
 	rte_mempool_free(mempool);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_enqueue_burst, 22.11)
 uint16_t
 rte_ml_enqueue_burst(int16_t dev_id, uint16_t qp_id, struct rte_ml_op **ops, uint16_t nb_ops)
 {
@@ -855,6 +889,7 @@ rte_ml_enqueue_burst(int16_t dev_id, uint16_t qp_id, struct rte_ml_op **ops, uin
 	return dev->enqueue_burst(dev, qp_id, ops, nb_ops);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_dequeue_burst, 22.11)
 uint16_t
 rte_ml_dequeue_burst(int16_t dev_id, uint16_t qp_id, struct rte_ml_op **ops, uint16_t nb_ops)
 {
@@ -891,6 +926,7 @@ rte_ml_dequeue_burst(int16_t dev_id, uint16_t qp_id, struct rte_ml_op **ops, uin
 	return dev->dequeue_burst(dev, qp_id, ops, nb_ops);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_op_error_get, 22.11)
 int
 rte_ml_op_error_get(int16_t dev_id, struct rte_ml_op *op, struct rte_ml_op_error *error)
 {
@@ -922,4 +958,5 @@ rte_ml_op_error_get(int16_t dev_id, struct rte_ml_op *op, struct rte_ml_op_error
 	return dev->op_error_get(dev, op, error);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ml_dev_logtype, 22.11)
 RTE_LOG_REGISTER_DEFAULT(rte_ml_dev_logtype, INFO);
diff --git a/lib/mldev/rte_mldev_pmd.c b/lib/mldev/rte_mldev_pmd.c
index 3169e5d4fa..70604f2cf1 100644
--- a/lib/mldev/rte_mldev_pmd.c
+++ b/lib/mldev/rte_mldev_pmd.c
@@ -8,6 +8,7 @@
 
 #include "rte_mldev_pmd.h"
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_ml_dev_pmd_create)
 struct rte_ml_dev *
 rte_ml_dev_pmd_create(const char *name, struct rte_device *device,
 		      struct rte_ml_dev_pmd_init_params *params)
@@ -42,6 +43,7 @@ rte_ml_dev_pmd_create(const char *name, struct rte_device *device,
 	return dev;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_ml_dev_pmd_destroy)
 int
 rte_ml_dev_pmd_destroy(struct rte_ml_dev *dev)
 {
diff --git a/lib/net/rte_arp.c b/lib/net/rte_arp.c
index 22af519586..05e6c379bf 100644
--- a/lib/net/rte_arp.c
+++ b/lib/net/rte_arp.c
@@ -5,6 +5,7 @@
 #include <rte_arp.h>
 
 #define RARP_PKT_SIZE	64
+RTE_EXPORT_SYMBOL(rte_net_make_rarp_packet)
 struct rte_mbuf *
 rte_net_make_rarp_packet(struct rte_mempool *mpool,
 		const struct rte_ether_addr *mac)
diff --git a/lib/net/rte_ether.c b/lib/net/rte_ether.c
index f59c20289d..471afadfb0 100644
--- a/lib/net/rte_ether.c
+++ b/lib/net/rte_ether.c
@@ -7,6 +7,7 @@
 #include <rte_ether.h>
 #include <rte_errno.h>
 
+RTE_EXPORT_SYMBOL(rte_eth_random_addr)
 void
 rte_eth_random_addr(uint8_t *addr)
 {
@@ -18,6 +19,7 @@ rte_eth_random_addr(uint8_t *addr)
 	addr[0] |= RTE_ETHER_LOCAL_ADMIN_ADDR;	/* set local assignment bit */
 }
 
+RTE_EXPORT_SYMBOL(rte_ether_format_addr)
 void
 rte_ether_format_addr(char *buf, uint16_t size,
 		      const struct rte_ether_addr *eth_addr)
@@ -130,6 +132,7 @@ static unsigned int get_ether_sep(const char *s, char *sep)
  *  - Windows format six groups separated by hyphen
  *  - two groups hexadecimal digits
  */
+RTE_EXPORT_SYMBOL(rte_ether_unformat_addr)
 int
 rte_ether_unformat_addr(const char *s, struct rte_ether_addr *ea)
 {
diff --git a/lib/net/rte_net.c b/lib/net/rte_net.c
index 0c32e78a13..fde7e84048 100644
--- a/lib/net/rte_net.c
+++ b/lib/net/rte_net.c
@@ -262,6 +262,7 @@ ptype_tunnel_with_udp(uint16_t *proto, const struct rte_mbuf *m,
 }
 
 /* parse ipv6 extended headers, update offset and return next proto */
+RTE_EXPORT_SYMBOL(rte_net_skip_ip6_ext)
 int
 rte_net_skip_ip6_ext(uint16_t proto, const struct rte_mbuf *m, uint32_t *off,
 	int *frag)
@@ -308,6 +309,7 @@ rte_net_skip_ip6_ext(uint16_t proto, const struct rte_mbuf *m, uint32_t *off,
 }
 
 /* parse mbuf data to get packet type */
+RTE_EXPORT_SYMBOL(rte_net_get_ptype)
 uint32_t rte_net_get_ptype(const struct rte_mbuf *m,
 	struct rte_net_hdr_lens *hdr_lens, uint32_t layers)
 {
diff --git a/lib/net/rte_net_crc.c b/lib/net/rte_net_crc.c
index 1943d46295..6133a9c495 100644
--- a/lib/net/rte_net_crc.c
+++ b/lib/net/rte_net_crc.c
@@ -413,6 +413,7 @@ RTE_DEFAULT_SYMBOL(26, struct rte_net_crc *, rte_net_crc_set_alg, (enum rte_net_
 	return crc;
 }
 
+RTE_EXPORT_SYMBOL(rte_net_crc_free)
 void rte_net_crc_free(struct rte_net_crc *crc)
 {
 	rte_free(crc);
diff --git a/lib/node/ethdev_ctrl.c b/lib/node/ethdev_ctrl.c
index cd52e8be08..8218fd8703 100644
--- a/lib/node/ethdev_ctrl.c
+++ b/lib/node/ethdev_ctrl.c
@@ -20,6 +20,7 @@ static struct ethdev_ctrl {
 	uint16_t nb_graphs;
 } ctrl;
 
+RTE_EXPORT_SYMBOL(rte_node_eth_config)
 int
 rte_node_eth_config(struct rte_node_ethdev_config *conf, uint16_t nb_confs,
 		    uint16_t nb_graphs)
@@ -131,6 +132,7 @@ rte_node_eth_config(struct rte_node_ethdev_config *conf, uint16_t nb_confs,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_node_ethdev_rx_next_update, 24.03)
 int
 rte_node_ethdev_rx_next_update(rte_node_t id, const char *edge_name)
 {
diff --git a/lib/node/ip4_lookup.c b/lib/node/ip4_lookup.c
index 0b474cd2bc..e50df3925e 100644
--- a/lib/node/ip4_lookup.c
+++ b/lib/node/ip4_lookup.c
@@ -119,6 +119,7 @@ ip4_lookup_node_process_scalar(struct rte_graph *graph, struct rte_node *node,
 	return nb_objs;
 }
 
+RTE_EXPORT_SYMBOL(rte_node_ip4_route_add)
 int
 rte_node_ip4_route_add(uint32_t ip, uint8_t depth, uint16_t next_hop,
 		       enum rte_node_ip4_lookup_next next_node)
diff --git a/lib/node/ip4_reassembly.c b/lib/node/ip4_reassembly.c
index eb5f391114..9f9cf2d326 100644
--- a/lib/node/ip4_reassembly.c
+++ b/lib/node/ip4_reassembly.c
@@ -127,6 +127,7 @@ ip4_reassembly_node_process(struct rte_graph *graph, struct rte_node *node, void
 	return idx;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_node_ip4_reassembly_configure, 23.11)
 int
 rte_node_ip4_reassembly_configure(struct rte_node_ip4_reassembly_cfg *cfg, uint16_t cnt)
 {
diff --git a/lib/node/ip4_rewrite.c b/lib/node/ip4_rewrite.c
index 34a920df5e..8916bc9a1c 100644
--- a/lib/node/ip4_rewrite.c
+++ b/lib/node/ip4_rewrite.c
@@ -292,6 +292,7 @@ ip4_rewrite_set_next(uint16_t port_id, uint16_t next_index)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_node_ip4_rewrite_add)
 int
 rte_node_ip4_rewrite_add(uint16_t next_hop, uint8_t *rewrite_data,
 			 uint8_t rewrite_len, uint16_t dst_port)
diff --git a/lib/node/ip6_lookup.c b/lib/node/ip6_lookup.c
index f378d2d064..6df326c36f 100644
--- a/lib/node/ip6_lookup.c
+++ b/lib/node/ip6_lookup.c
@@ -257,6 +257,7 @@ ip6_lookup_node_process_scalar(struct rte_graph *graph, struct rte_node *node,
 	return nb_objs;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_node_ip6_route_add, 23.07)
 int
 rte_node_ip6_route_add(const struct rte_ipv6_addr *ip, uint8_t depth, uint16_t next_hop,
 		       enum rte_node_ip6_lookup_next next_node)
diff --git a/lib/node/ip6_rewrite.c b/lib/node/ip6_rewrite.c
index 198d8d8820..9a0b8e62c2 100644
--- a/lib/node/ip6_rewrite.c
+++ b/lib/node/ip6_rewrite.c
@@ -276,6 +276,7 @@ ip6_rewrite_set_next(uint16_t port_id, uint16_t next_index)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_node_ip6_rewrite_add, 23.07)
 int
 rte_node_ip6_rewrite_add(uint16_t next_hop, uint8_t *rewrite_data,
 			 uint8_t rewrite_len, uint16_t dst_port)
diff --git a/lib/node/udp4_input.c b/lib/node/udp4_input.c
index bbcb2c70e7..7aa9b31a8b 100644
--- a/lib/node/udp4_input.c
+++ b/lib/node/udp4_input.c
@@ -55,6 +55,7 @@ static struct rte_hash_parameters udp4_params = {
 	.socket_id = 0,
 };
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_node_udp4_dst_port_add, 23.11)
 int
 rte_node_udp4_dst_port_add(uint32_t dst_port, rte_edge_t next_node)
 {
@@ -76,6 +77,7 @@ rte_node_udp4_dst_port_add(uint32_t dst_port, rte_edge_t next_node)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_node_udp4_usr_node_add, 23.11)
 int
 rte_node_udp4_usr_node_add(const char *usr_node)
 {
diff --git a/lib/pcapng/rte_pcapng.c b/lib/pcapng/rte_pcapng.c
index 16485b27cb..a8b64c1a8f 100644
--- a/lib/pcapng/rte_pcapng.c
+++ b/lib/pcapng/rte_pcapng.c
@@ -199,6 +199,7 @@ pcapng_section_block(rte_pcapng_t *self,
 }
 
 /* Write an interface block for a DPDK port */
+RTE_EXPORT_SYMBOL(rte_pcapng_add_interface)
 int
 rte_pcapng_add_interface(rte_pcapng_t *self, uint16_t port,
 			 const char *ifname, const char *ifdescr,
@@ -320,6 +321,7 @@ rte_pcapng_add_interface(rte_pcapng_t *self, uint16_t port,
 /*
  * Write an Interface statistics block at the end of capture.
  */
+RTE_EXPORT_SYMBOL(rte_pcapng_write_stats)
 ssize_t
 rte_pcapng_write_stats(rte_pcapng_t *self, uint16_t port_id,
 		       uint64_t ifrecv, uint64_t ifdrop,
@@ -385,6 +387,7 @@ rte_pcapng_write_stats(rte_pcapng_t *self, uint16_t port_id,
 	return write(self->outfd, buf, len);
 }
 
+RTE_EXPORT_SYMBOL(rte_pcapng_mbuf_size)
 uint32_t
 rte_pcapng_mbuf_size(uint32_t length)
 {
@@ -466,6 +469,7 @@ pcapng_vlan_insert(struct rte_mbuf *m, uint16_t ether_type, uint16_t tci)
  */
 
 /* Make a copy of original mbuf with pcapng header and options */
+RTE_EXPORT_SYMBOL(rte_pcapng_copy)
 struct rte_mbuf *
 rte_pcapng_copy(uint16_t port_id, uint32_t queue,
 		const struct rte_mbuf *md,
@@ -607,6 +611,7 @@ rte_pcapng_copy(uint16_t port_id, uint32_t queue,
 }
 
 /* Write pre-formatted packets to file. */
+RTE_EXPORT_SYMBOL(rte_pcapng_write_packets)
 ssize_t
 rte_pcapng_write_packets(rte_pcapng_t *self,
 			 struct rte_mbuf *pkts[], uint16_t nb_pkts)
@@ -676,6 +681,7 @@ rte_pcapng_write_packets(rte_pcapng_t *self,
 }
 
 /* Create new pcapng writer handle */
+RTE_EXPORT_SYMBOL(rte_pcapng_fdopen)
 rte_pcapng_t *
 rte_pcapng_fdopen(int fd,
 		  const char *osname, const char *hardware,
@@ -713,6 +719,7 @@ rte_pcapng_fdopen(int fd,
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_pcapng_close)
 void
 rte_pcapng_close(rte_pcapng_t *self)
 {
diff --git a/lib/pci/rte_pci.c b/lib/pci/rte_pci.c
index 1c5ef951d3..89c4c578af 100644
--- a/lib/pci/rte_pci.c
+++ b/lib/pci/rte_pci.c
@@ -92,6 +92,7 @@ pci_dbdf_parse(const char *input, struct rte_pci_addr *dev_addr)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pci_device_name)
 void
 rte_pci_device_name(const struct rte_pci_addr *addr,
 		char *output, size_t size)
@@ -102,6 +103,7 @@ rte_pci_device_name(const struct rte_pci_addr *addr,
 			    addr->devid, addr->function) >= 0);
 }
 
+RTE_EXPORT_SYMBOL(rte_pci_addr_cmp)
 int
 rte_pci_addr_cmp(const struct rte_pci_addr *addr,
 	     const struct rte_pci_addr *addr2)
@@ -124,6 +126,7 @@ rte_pci_addr_cmp(const struct rte_pci_addr *addr,
 		return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pci_addr_parse)
 int
 rte_pci_addr_parse(const char *str, struct rte_pci_addr *addr)
 {
diff --git a/lib/pdcp/rte_pdcp.c b/lib/pdcp/rte_pdcp.c
index 1c076fb448..d756d1a4f4 100644
--- a/lib/pdcp/rte_pdcp.c
+++ b/lib/pdcp/rte_pdcp.c
@@ -97,6 +97,7 @@ pdcp_dl_establish(struct rte_pdcp_entity *entity, const struct rte_pdcp_entity_c
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pdcp_entity_establish, 23.07)
 struct rte_pdcp_entity *
 rte_pdcp_entity_establish(const struct rte_pdcp_entity_conf *conf)
 {
@@ -197,6 +198,7 @@ pdcp_dl_release(struct rte_pdcp_entity *entity, struct rte_mbuf *out_mb[])
 	return nb_out;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pdcp_entity_release, 23.07)
 int
 rte_pdcp_entity_release(struct rte_pdcp_entity *pdcp_entity, struct rte_mbuf *out_mb[])
 {
@@ -219,6 +221,7 @@ rte_pdcp_entity_release(struct rte_pdcp_entity *pdcp_entity, struct rte_mbuf *ou
 	return nb_out;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pdcp_entity_suspend, 23.07)
 int
 rte_pdcp_entity_suspend(struct rte_pdcp_entity *pdcp_entity,
 			struct rte_mbuf *out_mb[])
@@ -246,6 +249,7 @@ rte_pdcp_entity_suspend(struct rte_pdcp_entity *pdcp_entity,
 	return nb_out;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pdcp_control_pdu_create, 23.07)
 struct rte_mbuf *
 rte_pdcp_control_pdu_create(struct rte_pdcp_entity *pdcp_entity,
 			    enum rte_pdcp_ctrl_pdu_type type)
@@ -286,6 +290,7 @@ rte_pdcp_control_pdu_create(struct rte_pdcp_entity *pdcp_entity,
 	return m;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_pdcp_t_reordering_expiry_handle, 23.07)
 uint16_t
 rte_pdcp_t_reordering_expiry_handle(const struct rte_pdcp_entity *entity, struct rte_mbuf *out_mb[])
 {
diff --git a/lib/pdump/rte_pdump.c b/lib/pdump/rte_pdump.c
index 679c3dd0b5..08b6863da3 100644
--- a/lib/pdump/rte_pdump.c
+++ b/lib/pdump/rte_pdump.c
@@ -414,6 +414,7 @@ pdump_server(const struct rte_mp_msg *mp_msg, const void *peer)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pdump_init)
 int
 rte_pdump_init(void)
 {
@@ -436,6 +437,7 @@ rte_pdump_init(void)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pdump_uninit)
 int
 rte_pdump_uninit(void)
 {
@@ -606,6 +608,7 @@ pdump_enable(uint16_t port, uint16_t queue,
 					    ENABLE, ring, mp, prm);
 }
 
+RTE_EXPORT_SYMBOL(rte_pdump_enable)
 int
 rte_pdump_enable(uint16_t port, uint16_t queue, uint32_t flags,
 		 struct rte_ring *ring,
@@ -616,6 +619,7 @@ rte_pdump_enable(uint16_t port, uint16_t queue, uint32_t flags,
 			    ring, mp, NULL);
 }
 
+RTE_EXPORT_SYMBOL(rte_pdump_enable_bpf)
 int
 rte_pdump_enable_bpf(uint16_t port, uint16_t queue,
 		     uint32_t flags, uint32_t snaplen,
@@ -650,6 +654,7 @@ pdump_enable_by_deviceid(const char *device_id, uint16_t queue,
 					    ENABLE, ring, mp, prm);
 }
 
+RTE_EXPORT_SYMBOL(rte_pdump_enable_by_deviceid)
 int
 rte_pdump_enable_by_deviceid(char *device_id, uint16_t queue,
 			     uint32_t flags,
@@ -661,6 +666,7 @@ rte_pdump_enable_by_deviceid(char *device_id, uint16_t queue,
 					ring, mp, NULL);
 }
 
+RTE_EXPORT_SYMBOL(rte_pdump_enable_bpf_by_deviceid)
 int
 rte_pdump_enable_bpf_by_deviceid(const char *device_id, uint16_t queue,
 				 uint32_t flags, uint32_t snaplen,
@@ -672,6 +678,7 @@ rte_pdump_enable_bpf_by_deviceid(const char *device_id, uint16_t queue,
 					ring, mp, prm);
 }
 
+RTE_EXPORT_SYMBOL(rte_pdump_disable)
 int
 rte_pdump_disable(uint16_t port, uint16_t queue, uint32_t flags)
 {
@@ -691,6 +698,7 @@ rte_pdump_disable(uint16_t port, uint16_t queue, uint32_t flags)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_pdump_disable_by_deviceid)
 int
 rte_pdump_disable_by_deviceid(char *device_id, uint16_t queue,
 				uint32_t flags)
@@ -727,6 +735,7 @@ pdump_sum_stats(uint16_t port, uint16_t nq,
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_pdump_stats)
 int
 rte_pdump_stats(uint16_t port, struct rte_pdump_stats *stats)
 {
diff --git a/lib/pipeline/rte_pipeline.c b/lib/pipeline/rte_pipeline.c
index a09a89f746..0fc6417b7b 100644
--- a/lib/pipeline/rte_pipeline.c
+++ b/lib/pipeline/rte_pipeline.c
@@ -189,6 +189,7 @@ rte_pipeline_check_params(struct rte_pipeline_params *params)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pipeline_create)
 struct rte_pipeline *
 rte_pipeline_create(struct rte_pipeline_params *params)
 {
@@ -231,6 +232,7 @@ rte_pipeline_create(struct rte_pipeline_params *params)
 	return p;
 }
 
+RTE_EXPORT_SYMBOL(rte_pipeline_free)
 int
 rte_pipeline_free(struct rte_pipeline *p)
 {
@@ -324,6 +326,7 @@ rte_table_check_params(struct rte_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pipeline_table_create)
 int
 rte_pipeline_table_create(struct rte_pipeline *p,
 		struct rte_pipeline_table_params *params,
@@ -395,6 +398,7 @@ rte_pipeline_table_free(struct rte_table *table)
 	rte_free(table->default_entry);
 }
 
+RTE_EXPORT_SYMBOL(rte_pipeline_table_default_entry_add)
 int
 rte_pipeline_table_default_entry_add(struct rte_pipeline *p,
 	uint32_t table_id,
@@ -445,6 +449,7 @@ rte_pipeline_table_default_entry_add(struct rte_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pipeline_table_default_entry_delete)
 int
 rte_pipeline_table_default_entry_delete(struct rte_pipeline *p,
 		uint32_t table_id,
@@ -478,6 +483,7 @@ rte_pipeline_table_default_entry_delete(struct rte_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pipeline_table_entry_add)
 int
 rte_pipeline_table_entry_add(struct rte_pipeline *p,
 		uint32_t table_id,
@@ -539,6 +545,7 @@ rte_pipeline_table_entry_add(struct rte_pipeline *p,
 		key_found, (void **) entry_ptr);
 }
 
+RTE_EXPORT_SYMBOL(rte_pipeline_table_entry_delete)
 int
 rte_pipeline_table_entry_delete(struct rte_pipeline *p,
 		uint32_t table_id,
@@ -578,6 +585,7 @@ rte_pipeline_table_entry_delete(struct rte_pipeline *p,
 	return (table->ops.f_delete)(table->h_table, key, key_found, entry);
 }
 
+RTE_EXPORT_SYMBOL(rte_pipeline_table_entry_add_bulk)
 int rte_pipeline_table_entry_add_bulk(struct rte_pipeline *p,
 	uint32_t table_id,
 	void **keys,
@@ -644,6 +652,7 @@ int rte_pipeline_table_entry_add_bulk(struct rte_pipeline *p,
 		n_keys, key_found, (void **) entries_ptr);
 }
 
+RTE_EXPORT_SYMBOL(rte_pipeline_table_entry_delete_bulk)
 int rte_pipeline_table_entry_delete_bulk(struct rte_pipeline *p,
 	uint32_t table_id,
 	void **keys,
@@ -801,6 +810,7 @@ rte_pipeline_port_out_check_params(struct rte_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pipeline_port_in_create)
 int
 rte_pipeline_port_in_create(struct rte_pipeline *p,
 		struct rte_pipeline_port_in_params *params,
@@ -851,6 +861,7 @@ rte_pipeline_port_in_free(struct rte_port_in *port)
 		port->ops.f_free(port->h_port);
 }
 
+RTE_EXPORT_SYMBOL(rte_pipeline_port_out_create)
 int
 rte_pipeline_port_out_create(struct rte_pipeline *p,
 		struct rte_pipeline_port_out_params *params,
@@ -898,6 +909,7 @@ rte_pipeline_port_out_free(struct rte_port_out *port)
 		port->ops.f_free(port->h_port);
 }
 
+RTE_EXPORT_SYMBOL(rte_pipeline_port_in_connect_to_table)
 int
 rte_pipeline_port_in_connect_to_table(struct rte_pipeline *p,
 		uint32_t port_id,
@@ -932,6 +944,7 @@ rte_pipeline_port_in_connect_to_table(struct rte_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pipeline_port_in_enable)
 int
 rte_pipeline_port_in_enable(struct rte_pipeline *p, uint32_t port_id)
 {
@@ -979,6 +992,7 @@ rte_pipeline_port_in_enable(struct rte_pipeline *p, uint32_t port_id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pipeline_port_in_disable)
 int
 rte_pipeline_port_in_disable(struct rte_pipeline *p, uint32_t port_id)
 {
@@ -1034,6 +1048,7 @@ rte_pipeline_port_in_disable(struct rte_pipeline *p, uint32_t port_id)
 /*
  * Pipeline run-time
  */
+RTE_EXPORT_SYMBOL(rte_pipeline_check)
 int
 rte_pipeline_check(struct rte_pipeline *p)
 {
@@ -1307,6 +1322,7 @@ rte_pipeline_action_handler_drop(struct rte_pipeline *p, uint64_t pkts_mask)
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_pipeline_run)
 int
 rte_pipeline_run(struct rte_pipeline *p)
 {
@@ -1446,6 +1462,7 @@ rte_pipeline_run(struct rte_pipeline *p)
 	return (int) n_pkts;
 }
 
+RTE_EXPORT_SYMBOL(rte_pipeline_flush)
 int
 rte_pipeline_flush(struct rte_pipeline *p)
 {
@@ -1468,6 +1485,7 @@ rte_pipeline_flush(struct rte_pipeline *p)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pipeline_port_out_packet_insert)
 int
 rte_pipeline_port_out_packet_insert(struct rte_pipeline *p,
 	uint32_t port_id, struct rte_mbuf *pkt)
@@ -1479,6 +1497,7 @@ rte_pipeline_port_out_packet_insert(struct rte_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pipeline_ah_packet_hijack)
 int rte_pipeline_ah_packet_hijack(struct rte_pipeline *p,
 	uint64_t pkts_mask)
 {
@@ -1488,6 +1507,7 @@ int rte_pipeline_ah_packet_hijack(struct rte_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pipeline_ah_packet_drop)
 int rte_pipeline_ah_packet_drop(struct rte_pipeline *p,
 	uint64_t pkts_mask)
 {
@@ -1499,6 +1519,7 @@ int rte_pipeline_ah_packet_drop(struct rte_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pipeline_port_in_stats_read)
 int rte_pipeline_port_in_stats_read(struct rte_pipeline *p, uint32_t port_id,
 	struct rte_pipeline_port_in_stats *stats, int clear)
 {
@@ -1536,6 +1557,7 @@ int rte_pipeline_port_in_stats_read(struct rte_pipeline *p, uint32_t port_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pipeline_port_out_stats_read)
 int rte_pipeline_port_out_stats_read(struct rte_pipeline *p, uint32_t port_id,
 	struct rte_pipeline_port_out_stats *stats, int clear)
 {
@@ -1570,6 +1592,7 @@ int rte_pipeline_port_out_stats_read(struct rte_pipeline *p, uint32_t port_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pipeline_table_stats_read)
 int rte_pipeline_table_stats_read(struct rte_pipeline *p, uint32_t table_id,
 	struct rte_pipeline_table_stats *stats, int clear)
 {
diff --git a/lib/pipeline/rte_port_in_action.c b/lib/pipeline/rte_port_in_action.c
index 4127bd2cab..2d018966b0 100644
--- a/lib/pipeline/rte_port_in_action.c
+++ b/lib/pipeline/rte_port_in_action.c
@@ -200,6 +200,7 @@ struct rte_port_in_action_profile {
 	int frozen;
 };
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_port_in_action_profile_create, 18.05)
 struct rte_port_in_action_profile *
 rte_port_in_action_profile_create(uint32_t socket_id)
 {
@@ -216,6 +217,7 @@ rte_port_in_action_profile_create(uint32_t socket_id)
 	return ap;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_port_in_action_profile_action_register, 18.05)
 int
 rte_port_in_action_profile_action_register(struct rte_port_in_action_profile *profile,
 	enum rte_port_in_action_type type,
@@ -255,6 +257,7 @@ rte_port_in_action_profile_action_register(struct rte_port_in_action_profile *pr
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_port_in_action_profile_freeze, 18.05)
 int
 rte_port_in_action_profile_freeze(struct rte_port_in_action_profile *profile)
 {
@@ -267,6 +270,7 @@ rte_port_in_action_profile_freeze(struct rte_port_in_action_profile *profile)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_port_in_action_profile_free, 18.05)
 int
 rte_port_in_action_profile_free(struct rte_port_in_action_profile *profile)
 {
@@ -315,6 +319,7 @@ action_data_init(struct rte_port_in_action *action,
 	}
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_port_in_action_create, 18.05)
 struct rte_port_in_action *
 rte_port_in_action_create(struct rte_port_in_action_profile *profile,
 	uint32_t socket_id)
@@ -351,6 +356,7 @@ rte_port_in_action_create(struct rte_port_in_action_profile *profile,
 	return action;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_port_in_action_apply, 18.05)
 int
 rte_port_in_action_apply(struct rte_port_in_action *action,
 	enum rte_port_in_action_type type,
@@ -498,6 +504,7 @@ ah_selector(struct rte_port_in_action *action)
 	return NULL;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_port_in_action_params_get, 18.05)
 int
 rte_port_in_action_params_get(struct rte_port_in_action *action,
 	struct rte_pipeline_port_in_params *params)
@@ -518,6 +525,7 @@ rte_port_in_action_params_get(struct rte_port_in_action *action,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_port_in_action_free, 18.05)
 int
 rte_port_in_action_free(struct rte_port_in_action *action)
 {
diff --git a/lib/pipeline/rte_swx_ctl.c b/lib/pipeline/rte_swx_ctl.c
index 857770d297..fddf30fa1c 100644
--- a/lib/pipeline/rte_swx_ctl.c
+++ b/lib/pipeline/rte_swx_ctl.c
@@ -1170,6 +1170,7 @@ static struct rte_tailq_elem rte_swx_ctl_pipeline_tailq = {
 
 EAL_REGISTER_TAILQ(rte_swx_ctl_pipeline_tailq)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_find, 22.11)
 struct rte_swx_ctl_pipeline *
 rte_swx_ctl_pipeline_find(const char *name)
 {
@@ -1249,6 +1250,7 @@ ctl_unregister(struct rte_swx_ctl_pipeline *ctl)
 	rte_mcfg_tailq_write_unlock();
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_free, 20.11)
 void
 rte_swx_ctl_pipeline_free(struct rte_swx_ctl_pipeline *ctl)
 {
@@ -1271,6 +1273,7 @@ rte_swx_ctl_pipeline_free(struct rte_swx_ctl_pipeline *ctl)
 	free(ctl);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_create, 20.11)
 struct rte_swx_ctl_pipeline *
 rte_swx_ctl_pipeline_create(struct rte_swx_pipeline *p)
 {
@@ -1549,6 +1552,7 @@ rte_swx_ctl_pipeline_create(struct rte_swx_pipeline *p)
 	return NULL;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_table_entry_add, 20.11)
 int
 rte_swx_ctl_pipeline_table_entry_add(struct rte_swx_ctl_pipeline *ctl,
 				     const char *table_name,
@@ -1663,6 +1667,7 @@ rte_swx_ctl_pipeline_table_entry_add(struct rte_swx_ctl_pipeline *ctl,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_table_entry_delete, 20.11)
 int
 rte_swx_ctl_pipeline_table_entry_delete(struct rte_swx_ctl_pipeline *ctl,
 					const char *table_name,
@@ -1753,6 +1758,7 @@ rte_swx_ctl_pipeline_table_entry_delete(struct rte_swx_ctl_pipeline *ctl,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_table_default_entry_add, 20.11)
 int
 rte_swx_ctl_pipeline_table_default_entry_add(struct rte_swx_ctl_pipeline *ctl,
 					     const char *table_name,
@@ -2090,6 +2096,7 @@ table_abort(struct rte_swx_ctl_pipeline *ctl, uint32_t table_id)
 	table_pending_default_free(table);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_selector_group_add, 21.08)
 int
 rte_swx_ctl_pipeline_selector_group_add(struct rte_swx_ctl_pipeline *ctl,
 					const char *selector_name,
@@ -2117,6 +2124,7 @@ rte_swx_ctl_pipeline_selector_group_add(struct rte_swx_ctl_pipeline *ctl,
 	return -ENOSPC;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_selector_group_delete, 21.08)
 int
 rte_swx_ctl_pipeline_selector_group_delete(struct rte_swx_ctl_pipeline *ctl,
 					   const char *selector_name,
@@ -2168,6 +2176,7 @@ rte_swx_ctl_pipeline_selector_group_delete(struct rte_swx_ctl_pipeline *ctl,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_selector_group_member_add, 21.08)
 int
 rte_swx_ctl_pipeline_selector_group_member_add(struct rte_swx_ctl_pipeline *ctl,
 					       const char *selector_name,
@@ -2227,6 +2236,7 @@ rte_swx_ctl_pipeline_selector_group_member_add(struct rte_swx_ctl_pipeline *ctl,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_selector_group_member_delete, 21.08)
 int
 rte_swx_ctl_pipeline_selector_group_member_delete(struct rte_swx_ctl_pipeline *ctl,
 						  const char *selector_name,
@@ -2480,6 +2490,7 @@ learner_default_entry_duplicate(struct rte_swx_ctl_pipeline *ctl,
 	return NULL;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_learner_default_entry_add, 21.11)
 int
 rte_swx_ctl_pipeline_learner_default_entry_add(struct rte_swx_ctl_pipeline *ctl,
 					       const char *learner_name,
@@ -2553,6 +2564,7 @@ learner_abort(struct rte_swx_ctl_pipeline *ctl, uint32_t learner_id)
 	learner_pending_default_free(l);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_commit, 20.11)
 int
 rte_swx_ctl_pipeline_commit(struct rte_swx_ctl_pipeline *ctl, int abort_on_fail)
 {
@@ -2639,6 +2651,7 @@ rte_swx_ctl_pipeline_commit(struct rte_swx_ctl_pipeline *ctl, int abort_on_fail)
 	return status;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_abort, 20.11)
 void
 rte_swx_ctl_pipeline_abort(struct rte_swx_ctl_pipeline *ctl)
 {
@@ -2973,6 +2986,7 @@ token_is_comment(const char *token)
 
 #define RTE_SWX_CTL_ENTRY_TOKENS_MAX 256
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_table_entry_read, 20.11)
 struct rte_swx_table_entry *
 rte_swx_ctl_pipeline_table_entry_read(struct rte_swx_ctl_pipeline *ctl,
 				      const char *table_name,
@@ -3172,6 +3186,7 @@ rte_swx_ctl_pipeline_table_entry_read(struct rte_swx_ctl_pipeline *ctl,
 	return NULL;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_learner_default_entry_read, 21.11)
 struct rte_swx_table_entry *
 rte_swx_ctl_pipeline_learner_default_entry_read(struct rte_swx_ctl_pipeline *ctl,
 						const char *learner_name,
@@ -3324,6 +3339,7 @@ table_entry_printf(FILE *f,
 	fprintf(f, "\n");
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_table_fprintf, 20.11)
 int
 rte_swx_ctl_pipeline_table_fprintf(FILE *f,
 				   struct rte_swx_ctl_pipeline *ctl,
@@ -3374,6 +3390,7 @@ rte_swx_ctl_pipeline_table_fprintf(FILE *f,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_selector_fprintf, 21.08)
 int
 rte_swx_ctl_pipeline_selector_fprintf(FILE *f,
 				      struct rte_swx_ctl_pipeline *ctl,
diff --git a/lib/pipeline/rte_swx_ipsec.c b/lib/pipeline/rte_swx_ipsec.c
index 17a9d2b98b..ee97a70c30 100644
--- a/lib/pipeline/rte_swx_ipsec.c
+++ b/lib/pipeline/rte_swx_ipsec.c
@@ -177,6 +177,7 @@ static struct rte_tailq_elem rte_swx_ipsec_tailq = {
 
 EAL_REGISTER_TAILQ(rte_swx_ipsec_tailq)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ipsec_find, 23.03)
 struct rte_swx_ipsec *
 rte_swx_ipsec_find(const char *name)
 {
@@ -261,6 +262,7 @@ ipsec_unregister(struct rte_swx_ipsec *ipsec)
 static void
 ipsec_session_free(struct rte_swx_ipsec *ipsec, struct rte_ipsec_session *s);
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ipsec_free, 23.03)
 void
 rte_swx_ipsec_free(struct rte_swx_ipsec *ipsec)
 {
@@ -291,6 +293,7 @@ rte_swx_ipsec_free(struct rte_swx_ipsec *ipsec)
 	env_free(ipsec, ipsec->total_size);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ipsec_create, 23.03)
 int
 rte_swx_ipsec_create(struct rte_swx_ipsec **ipsec_out,
 		     const char *name,
@@ -718,6 +721,7 @@ rte_swx_ipsec_post_crypto(struct rte_swx_ipsec *ipsec)
 	}
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ipsec_run, 23.03)
 void
 rte_swx_ipsec_run(struct rte_swx_ipsec *ipsec)
 {
@@ -1129,6 +1133,7 @@ do {                                   \
 	}                              \
 } while (0)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ipsec_sa_read, 23.03)
 struct rte_swx_ipsec_sa_params *
 rte_swx_ipsec_sa_read(struct rte_swx_ipsec *ipsec __rte_unused,
 		      const char *string,
@@ -1762,6 +1767,7 @@ ipsec_session_free(struct rte_swx_ipsec *ipsec,
 	memset(s, 0, sizeof(*s));
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ipsec_sa_add, 23.03)
 int
 rte_swx_ipsec_sa_add(struct rte_swx_ipsec *ipsec,
 		     struct rte_swx_ipsec_sa_params *sa_params,
@@ -1801,6 +1807,7 @@ rte_swx_ipsec_sa_add(struct rte_swx_ipsec *ipsec,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ipsec_sa_delete, 23.03)
 void
 rte_swx_ipsec_sa_delete(struct rte_swx_ipsec *ipsec,
 			uint32_t sa_id)
diff --git a/lib/pipeline/rte_swx_pipeline.c b/lib/pipeline/rte_swx_pipeline.c
index 6ba86bee1f..f39626b334 100644
--- a/lib/pipeline/rte_swx_pipeline.c
+++ b/lib/pipeline/rte_swx_pipeline.c
@@ -121,6 +121,7 @@ struct_type_field_find(struct struct_type *st, const char *name)
 	return NULL;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_struct_type_register, 20.11)
 int
 rte_swx_pipeline_struct_type_register(struct rte_swx_pipeline *p,
 				      const char *name,
@@ -252,6 +253,7 @@ port_in_type_find(struct rte_swx_pipeline *p, const char *name)
 	return NULL;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_port_in_type_register, 20.11)
 int
 rte_swx_pipeline_port_in_type_register(struct rte_swx_pipeline *p,
 				       const char *name,
@@ -295,6 +297,7 @@ port_in_find(struct rte_swx_pipeline *p, uint32_t port_id)
 	return NULL;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_port_in_config, 20.11)
 int
 rte_swx_pipeline_port_in_config(struct rte_swx_pipeline *p,
 				uint32_t port_id,
@@ -413,6 +416,7 @@ port_out_type_find(struct rte_swx_pipeline *p, const char *name)
 	return NULL;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_port_out_type_register, 20.11)
 int
 rte_swx_pipeline_port_out_type_register(struct rte_swx_pipeline *p,
 					const char *name,
@@ -458,6 +462,7 @@ port_out_find(struct rte_swx_pipeline *p, uint32_t port_id)
 	return NULL;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_port_out_config, 20.11)
 int
 rte_swx_pipeline_port_out_config(struct rte_swx_pipeline *p,
 				 uint32_t port_id,
@@ -564,6 +569,7 @@ port_out_free(struct rte_swx_pipeline *p)
 /*
  * Packet mirroring.
  */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_mirroring_config, 20.11)
 int
 rte_swx_pipeline_mirroring_config(struct rte_swx_pipeline *p,
 				  struct rte_swx_pipeline_mirroring_params *params)
@@ -760,6 +766,7 @@ extern_obj_mailbox_field_parse(struct rte_swx_pipeline *p,
 	return f;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_extern_type_register, 20.11)
 int
 rte_swx_pipeline_extern_type_register(struct rte_swx_pipeline *p,
 	const char *name,
@@ -800,6 +807,7 @@ rte_swx_pipeline_extern_type_register(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_extern_type_member_func_register, 20.11)
 int
 rte_swx_pipeline_extern_type_member_func_register(struct rte_swx_pipeline *p,
 	const char *extern_type_name,
@@ -837,6 +845,7 @@ rte_swx_pipeline_extern_type_member_func_register(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_extern_object_config, 20.11)
 int
 rte_swx_pipeline_extern_object_config(struct rte_swx_pipeline *p,
 				      const char *extern_type_name,
@@ -1053,6 +1062,7 @@ extern_func_mailbox_field_parse(struct rte_swx_pipeline *p,
 	return f;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_extern_func_register, 20.11)
 int
 rte_swx_pipeline_extern_func_register(struct rte_swx_pipeline *p,
 				      const char *name,
@@ -1181,6 +1191,7 @@ hash_func_find(struct rte_swx_pipeline *p, const char *name)
 	return NULL;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_hash_func_register, 22.07)
 int
 rte_swx_pipeline_hash_func_register(struct rte_swx_pipeline *p,
 				    const char *name,
@@ -1281,6 +1292,7 @@ rss_find_by_id(struct rte_swx_pipeline *p, uint32_t rss_obj_id)
 	return NULL;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_rss_config, 23.03)
 int
 rte_swx_pipeline_rss_config(struct rte_swx_pipeline *p, const char *name)
 {
@@ -1458,6 +1470,7 @@ header_field_parse(struct rte_swx_pipeline *p,
 	return f;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_packet_header_register, 20.11)
 int
 rte_swx_pipeline_packet_header_register(struct rte_swx_pipeline *p,
 					const char *name,
@@ -1596,6 +1609,7 @@ metadata_field_parse(struct rte_swx_pipeline *p, const char *name)
 	return struct_type_field_find(p->metadata_st, &name[2]);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_packet_metadata_register, 20.11)
 int
 rte_swx_pipeline_packet_metadata_register(struct rte_swx_pipeline *p,
 					  const char *struct_type_name)
@@ -7855,6 +7869,7 @@ action_does_learning(struct action *a)
 	return 0; /* FALSE */
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_action_config, 20.11)
 int
 rte_swx_pipeline_action_config(struct rte_swx_pipeline *p,
 			       const char *name,
@@ -8219,6 +8234,7 @@ table_find_by_id(struct rte_swx_pipeline *p, uint32_t id)
 	return NULL;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_table_type_register, 20.11)
 int
 rte_swx_pipeline_table_type_register(struct rte_swx_pipeline *p,
 				     const char *name,
@@ -8388,6 +8404,7 @@ table_match_fields_check(struct rte_swx_pipeline *p,
 	return status;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_table_config, 20.11)
 int
 rte_swx_pipeline_table_config(struct rte_swx_pipeline *p,
 			      const char *name,
@@ -8891,6 +8908,7 @@ selector_fields_check(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_selector_config, 21.08)
 int
 rte_swx_pipeline_selector_config(struct rte_swx_pipeline *p,
 				 const char *name,
@@ -9363,6 +9381,7 @@ learner_action_learning_check(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_learner_config, 21.11)
 int
 rte_swx_pipeline_learner_config(struct rte_swx_pipeline *p,
 			      const char *name,
@@ -9936,6 +9955,7 @@ regarray_find_by_id(struct rte_swx_pipeline *p, uint32_t id)
 	return NULL;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_regarray_config, 21.05)
 int
 rte_swx_pipeline_regarray_config(struct rte_swx_pipeline *p,
 			      const char *name,
@@ -10074,6 +10094,7 @@ metarray_find_by_id(struct rte_swx_pipeline *p, uint32_t id)
 	return NULL;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_metarray_config, 21.05)
 int
 rte_swx_pipeline_metarray_config(struct rte_swx_pipeline *p,
 				 const char *name,
@@ -10224,6 +10245,7 @@ static struct rte_tailq_elem rte_swx_pipeline_tailq = {
 
 EAL_REGISTER_TAILQ(rte_swx_pipeline_tailq)
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_find, 22.11)
 struct rte_swx_pipeline *
 rte_swx_pipeline_find(const char *name)
 {
@@ -10303,6 +10325,7 @@ pipeline_unregister(struct rte_swx_pipeline *p)
 	rte_mcfg_tailq_write_unlock();
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_free, 20.11)
 void
 rte_swx_pipeline_free(struct rte_swx_pipeline *p)
 {
@@ -10448,6 +10471,7 @@ hash_funcs_register(struct rte_swx_pipeline *p)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_config, 20.11)
 int
 rte_swx_pipeline_config(struct rte_swx_pipeline **p, const char *name, int numa_node)
 {
@@ -10524,6 +10548,7 @@ rte_swx_pipeline_config(struct rte_swx_pipeline **p, const char *name, int numa_
 	return status;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_instructions_config, 20.11)
 int
 rte_swx_pipeline_instructions_config(struct rte_swx_pipeline *p,
 				     const char **instructions,
@@ -10546,6 +10571,7 @@ rte_swx_pipeline_instructions_config(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_build, 20.11)
 int
 rte_swx_pipeline_build(struct rte_swx_pipeline *p)
 {
@@ -10664,6 +10690,7 @@ rte_swx_pipeline_build(struct rte_swx_pipeline *p)
 	return status;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_run, 20.11)
 void
 rte_swx_pipeline_run(struct rte_swx_pipeline *p, uint32_t n_instructions)
 {
@@ -10673,6 +10700,7 @@ rte_swx_pipeline_run(struct rte_swx_pipeline *p, uint32_t n_instructions)
 		instr_exec(p);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_flush, 20.11)
 void
 rte_swx_pipeline_flush(struct rte_swx_pipeline *p)
 {
@@ -10689,6 +10717,7 @@ rte_swx_pipeline_flush(struct rte_swx_pipeline *p)
 /*
  * Control.
  */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_info_get, 20.11)
 int
 rte_swx_ctl_pipeline_info_get(struct rte_swx_pipeline *p,
 			      struct rte_swx_ctl_pipeline_info *pipeline)
@@ -10722,6 +10751,7 @@ rte_swx_ctl_pipeline_info_get(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_numa_node_get, 20.11)
 int
 rte_swx_ctl_pipeline_numa_node_get(struct rte_swx_pipeline *p, int *numa_node)
 {
@@ -10732,6 +10762,7 @@ rte_swx_ctl_pipeline_numa_node_get(struct rte_swx_pipeline *p, int *numa_node)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_action_info_get, 20.11)
 int
 rte_swx_ctl_action_info_get(struct rte_swx_pipeline *p,
 			    uint32_t action_id,
@@ -10751,6 +10782,7 @@ rte_swx_ctl_action_info_get(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_action_arg_info_get, 20.11)
 int
 rte_swx_ctl_action_arg_info_get(struct rte_swx_pipeline *p,
 				uint32_t action_id,
@@ -10775,6 +10807,7 @@ rte_swx_ctl_action_arg_info_get(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_table_info_get, 20.11)
 int
 rte_swx_ctl_table_info_get(struct rte_swx_pipeline *p,
 			   uint32_t table_id,
@@ -10799,6 +10832,7 @@ rte_swx_ctl_table_info_get(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_table_match_field_info_get, 20.11)
 int
 rte_swx_ctl_table_match_field_info_get(struct rte_swx_pipeline *p,
 	uint32_t table_id,
@@ -10824,6 +10858,7 @@ rte_swx_ctl_table_match_field_info_get(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_table_action_info_get, 20.11)
 int
 rte_swx_ctl_table_action_info_get(struct rte_swx_pipeline *p,
 	uint32_t table_id,
@@ -10847,6 +10882,7 @@ rte_swx_ctl_table_action_info_get(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_table_ops_get, 20.11)
 int
 rte_swx_ctl_table_ops_get(struct rte_swx_pipeline *p,
 			  uint32_t table_id,
@@ -10873,6 +10909,7 @@ rte_swx_ctl_table_ops_get(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_selector_info_get, 21.08)
 int
 rte_swx_ctl_selector_info_get(struct rte_swx_pipeline *p,
 			      uint32_t selector_id,
@@ -10896,6 +10933,7 @@ rte_swx_ctl_selector_info_get(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_selector_group_id_field_info_get, 21.08)
 int
 rte_swx_ctl_selector_group_id_field_info_get(struct rte_swx_pipeline *p,
 	 uint32_t selector_id,
@@ -10918,6 +10956,7 @@ rte_swx_ctl_selector_group_id_field_info_get(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_selector_field_info_get, 21.08)
 int
 rte_swx_ctl_selector_field_info_get(struct rte_swx_pipeline *p,
 	 uint32_t selector_id,
@@ -10943,6 +10982,7 @@ rte_swx_ctl_selector_field_info_get(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_selector_member_id_field_info_get, 21.08)
 int
 rte_swx_ctl_selector_member_id_field_info_get(struct rte_swx_pipeline *p,
 	 uint32_t selector_id,
@@ -10965,6 +11005,7 @@ rte_swx_ctl_selector_member_id_field_info_get(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_learner_info_get, 21.11)
 int
 rte_swx_ctl_learner_info_get(struct rte_swx_pipeline *p,
 			     uint32_t learner_id,
@@ -10990,6 +11031,7 @@ rte_swx_ctl_learner_info_get(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_learner_match_field_info_get, 21.11)
 int
 rte_swx_ctl_learner_match_field_info_get(struct rte_swx_pipeline *p,
 					 uint32_t learner_id,
@@ -11015,6 +11057,7 @@ rte_swx_ctl_learner_match_field_info_get(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_learner_action_info_get, 21.11)
 int
 rte_swx_ctl_learner_action_info_get(struct rte_swx_pipeline *p,
 				    uint32_t learner_id,
@@ -11041,6 +11084,7 @@ rte_swx_ctl_learner_action_info_get(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_learner_timeout_get, 22.07)
 int
 rte_swx_ctl_pipeline_learner_timeout_get(struct rte_swx_pipeline *p,
 					 uint32_t learner_id,
@@ -11060,6 +11104,7 @@ rte_swx_ctl_pipeline_learner_timeout_get(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_learner_timeout_set, 22.07)
 int
 rte_swx_ctl_pipeline_learner_timeout_set(struct rte_swx_pipeline *p,
 					 uint32_t learner_id,
@@ -11091,6 +11136,7 @@ rte_swx_ctl_pipeline_learner_timeout_set(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_table_state_get, 20.11)
 int
 rte_swx_pipeline_table_state_get(struct rte_swx_pipeline *p,
 				 struct rte_swx_table_state **table_state)
@@ -11102,6 +11148,7 @@ rte_swx_pipeline_table_state_get(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_table_state_set, 20.11)
 int
 rte_swx_pipeline_table_state_set(struct rte_swx_pipeline *p,
 				 struct rte_swx_table_state *table_state)
@@ -11113,6 +11160,7 @@ rte_swx_pipeline_table_state_set(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_port_in_stats_read, 20.11)
 int
 rte_swx_ctl_pipeline_port_in_stats_read(struct rte_swx_pipeline *p,
 					uint32_t port_id,
@@ -11131,6 +11179,7 @@ rte_swx_ctl_pipeline_port_in_stats_read(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_port_out_stats_read, 20.11)
 int
 rte_swx_ctl_pipeline_port_out_stats_read(struct rte_swx_pipeline *p,
 					 uint32_t port_id,
@@ -11149,6 +11198,7 @@ rte_swx_ctl_pipeline_port_out_stats_read(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_table_stats_read, 21.05)
 int
 rte_swx_ctl_pipeline_table_stats_read(struct rte_swx_pipeline *p,
 				      const char *table_name,
@@ -11176,6 +11226,7 @@ rte_swx_ctl_pipeline_table_stats_read(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_selector_stats_read, 21.08)
 int
 rte_swx_ctl_pipeline_selector_stats_read(struct rte_swx_pipeline *p,
 	const char *selector_name,
@@ -11195,6 +11246,7 @@ rte_swx_ctl_pipeline_selector_stats_read(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_learner_stats_read, 21.11)
 int
 rte_swx_ctl_pipeline_learner_stats_read(struct rte_swx_pipeline *p,
 					const char *learner_name,
@@ -11228,6 +11280,7 @@ rte_swx_ctl_pipeline_learner_stats_read(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_regarray_info_get, 21.05)
 int
 rte_swx_ctl_regarray_info_get(struct rte_swx_pipeline *p,
 			      uint32_t regarray_id,
@@ -11247,6 +11300,7 @@ rte_swx_ctl_regarray_info_get(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_regarray_read, 21.05)
 int
 rte_swx_ctl_pipeline_regarray_read(struct rte_swx_pipeline *p,
 				   const char *regarray_name,
@@ -11268,6 +11322,7 @@ rte_swx_ctl_pipeline_regarray_read(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_regarray_write, 21.05)
 int
 rte_swx_ctl_pipeline_regarray_write(struct rte_swx_pipeline *p,
 				   const char *regarray_name,
@@ -11289,6 +11344,7 @@ rte_swx_ctl_pipeline_regarray_write(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_metarray_info_get, 21.05)
 int
 rte_swx_ctl_metarray_info_get(struct rte_swx_pipeline *p,
 			      uint32_t metarray_id,
@@ -11308,6 +11364,7 @@ rte_swx_ctl_metarray_info_get(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_meter_profile_add, 21.05)
 int
 rte_swx_ctl_meter_profile_add(struct rte_swx_pipeline *p,
 			      const char *name,
@@ -11340,6 +11397,7 @@ rte_swx_ctl_meter_profile_add(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_meter_profile_delete, 21.05)
 int
 rte_swx_ctl_meter_profile_delete(struct rte_swx_pipeline *p,
 				 const char *name)
@@ -11360,6 +11418,7 @@ rte_swx_ctl_meter_profile_delete(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_meter_reset, 21.05)
 int
 rte_swx_ctl_meter_reset(struct rte_swx_pipeline *p,
 			const char *metarray_name,
@@ -11388,6 +11447,7 @@ rte_swx_ctl_meter_reset(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_meter_set, 21.05)
 int
 rte_swx_ctl_meter_set(struct rte_swx_pipeline *p,
 		      const char *metarray_name,
@@ -11424,6 +11484,7 @@ rte_swx_ctl_meter_set(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_meter_stats_read, 21.05)
 int
 rte_swx_ctl_meter_stats_read(struct rte_swx_pipeline *p,
 			     const char *metarray_name,
@@ -11452,6 +11513,7 @@ rte_swx_ctl_meter_stats_read(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_mirroring_session_set, 20.11)
 int
 rte_swx_ctl_pipeline_mirroring_session_set(struct rte_swx_pipeline *p,
 					   uint32_t session_id,
@@ -11658,6 +11720,7 @@ rte_swx_ctl_pipeline_table_entry_id_get(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_regarray_read_with_key, 22.11)
 int
 rte_swx_ctl_pipeline_regarray_read_with_key(struct rte_swx_pipeline *p,
 					    const char *regarray_name,
@@ -11675,6 +11738,7 @@ rte_swx_ctl_pipeline_regarray_read_with_key(struct rte_swx_pipeline *p,
 	return rte_swx_ctl_pipeline_regarray_read(p, regarray_name, entry_id, value);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_regarray_write_with_key, 22.11)
 int
 rte_swx_ctl_pipeline_regarray_write_with_key(struct rte_swx_pipeline *p,
 					     const char *regarray_name,
@@ -11692,6 +11756,7 @@ rte_swx_ctl_pipeline_regarray_write_with_key(struct rte_swx_pipeline *p,
 	return rte_swx_ctl_pipeline_regarray_write(p, regarray_name, entry_id, value);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_meter_reset_with_key, 22.11)
 int
 rte_swx_ctl_meter_reset_with_key(struct rte_swx_pipeline *p,
 				 const char *metarray_name,
@@ -11708,6 +11773,7 @@ rte_swx_ctl_meter_reset_with_key(struct rte_swx_pipeline *p,
 	return rte_swx_ctl_meter_reset(p, metarray_name, entry_id);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_meter_set_with_key, 22.11)
 int
 rte_swx_ctl_meter_set_with_key(struct rte_swx_pipeline *p,
 			       const char *metarray_name,
@@ -11725,6 +11791,7 @@ rte_swx_ctl_meter_set_with_key(struct rte_swx_pipeline *p,
 	return rte_swx_ctl_meter_set(p, metarray_name, entry_id, profile_name);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_meter_stats_read_with_key, 22.11)
 int
 rte_swx_ctl_meter_stats_read_with_key(struct rte_swx_pipeline *p,
 				      const char *metarray_name,
@@ -11742,6 +11809,7 @@ rte_swx_ctl_meter_stats_read_with_key(struct rte_swx_pipeline *p,
 	return rte_swx_ctl_meter_stats_read(p, metarray_name, entry_id, stats);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_rss_info_get, 23.03)
 int
 rte_swx_ctl_rss_info_get(struct rte_swx_pipeline *p,
 			 uint32_t rss_obj_id,
@@ -11762,6 +11830,7 @@ rte_swx_ctl_rss_info_get(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_rss_key_size_read, 23.03)
 int
 rte_swx_ctl_pipeline_rss_key_size_read(struct rte_swx_pipeline *p,
 				       const char *rss_name,
@@ -11786,6 +11855,7 @@ rte_swx_ctl_pipeline_rss_key_size_read(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_rss_key_read, 23.03)
 int
 rte_swx_ctl_pipeline_rss_key_read(struct rte_swx_pipeline *p,
 				  const char *rss_name,
@@ -11810,6 +11880,7 @@ rte_swx_ctl_pipeline_rss_key_read(struct rte_swx_pipeline *p,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_ctl_pipeline_rss_key_write, 23.03)
 int
 rte_swx_ctl_pipeline_rss_key_write(struct rte_swx_pipeline *p,
 				   const char *rss_name,
@@ -14512,6 +14583,7 @@ pipeline_adjust(struct rte_swx_pipeline *p, struct instruction_group_list *igl)
 	instr_jmp_resolve(p->instructions, p->instruction_data, p->n_instructions);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_codegen, 22.11)
 int
 rte_swx_pipeline_codegen(FILE *spec_file,
 			 FILE *code_file,
@@ -14605,6 +14677,7 @@ rte_swx_pipeline_codegen(FILE *spec_file,
 	return status;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_pipeline_build_from_lib, 22.11)
 int
 rte_swx_pipeline_build_from_lib(struct rte_swx_pipeline **pipeline,
 				const char *name,
diff --git a/lib/pipeline/rte_table_action.c b/lib/pipeline/rte_table_action.c
index 3a408e81b8..7873d5342c 100644
--- a/lib/pipeline/rte_table_action.c
+++ b/lib/pipeline/rte_table_action.c
@@ -2362,6 +2362,7 @@ struct rte_table_action_profile {
 	int frozen;
 };
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_table_action_profile_create, 18.05)
 struct rte_table_action_profile *
 rte_table_action_profile_create(struct rte_table_action_common_config *common)
 {
@@ -2383,6 +2384,7 @@ rte_table_action_profile_create(struct rte_table_action_common_config *common)
 }
 
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_table_action_profile_action_register, 18.05)
 int
 rte_table_action_profile_action_register(struct rte_table_action_profile *profile,
 	enum rte_table_action_type type,
@@ -2446,6 +2448,7 @@ rte_table_action_profile_action_register(struct rte_table_action_profile *profil
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_table_action_profile_freeze, 18.05)
 int
 rte_table_action_profile_freeze(struct rte_table_action_profile *profile)
 {
@@ -2459,6 +2462,7 @@ rte_table_action_profile_freeze(struct rte_table_action_profile *profile)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_table_action_profile_free, 18.05)
 int
 rte_table_action_profile_free(struct rte_table_action_profile *profile)
 {
@@ -2481,6 +2485,7 @@ struct rte_table_action {
 	struct meter_profile_data mp[METER_PROFILES_MAX];
 };
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_table_action_create, 18.05)
 struct rte_table_action *
 rte_table_action_create(struct rte_table_action_profile *profile,
 	uint32_t socket_id)
@@ -2518,6 +2523,7 @@ action_data_get(void *data,
 	return &data_bytes[offset];
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_table_action_apply, 18.05)
 int
 rte_table_action_apply(struct rte_table_action *action,
 	void *data,
@@ -2599,6 +2605,7 @@ rte_table_action_apply(struct rte_table_action *action,
 	}
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_table_action_dscp_table_update, 18.05)
 int
 rte_table_action_dscp_table_update(struct rte_table_action *action,
 	uint64_t dscp_mask,
@@ -2631,6 +2638,7 @@ rte_table_action_dscp_table_update(struct rte_table_action *action,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_table_action_meter_profile_add, 18.05)
 int
 rte_table_action_meter_profile_add(struct rte_table_action *action,
 	uint32_t meter_profile_id,
@@ -2671,6 +2679,7 @@ rte_table_action_meter_profile_add(struct rte_table_action *action,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_table_action_meter_profile_delete, 18.05)
 int
 rte_table_action_meter_profile_delete(struct rte_table_action *action,
 	uint32_t meter_profile_id)
@@ -2694,6 +2703,7 @@ rte_table_action_meter_profile_delete(struct rte_table_action *action,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_table_action_meter_read, 18.05)
 int
 rte_table_action_meter_read(struct rte_table_action *action,
 	void *data,
@@ -2756,6 +2766,7 @@ rte_table_action_meter_read(struct rte_table_action *action,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_table_action_ttl_read, 18.05)
 int
 rte_table_action_ttl_read(struct rte_table_action *action,
 	void *data,
@@ -2784,6 +2795,7 @@ rte_table_action_ttl_read(struct rte_table_action *action,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_table_action_stats_read, 18.05)
 int
 rte_table_action_stats_read(struct rte_table_action *action,
 	void *data,
@@ -2819,6 +2831,7 @@ rte_table_action_stats_read(struct rte_table_action *action,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_table_action_time_read, 18.05)
 int
 rte_table_action_time_read(struct rte_table_action *action,
 	void *data,
@@ -2842,6 +2855,7 @@ rte_table_action_time_read(struct rte_table_action *action,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_table_action_crypto_sym_session_get, 18.11)
 struct rte_cryptodev_sym_session *
 rte_table_action_crypto_sym_session_get(struct rte_table_action *action,
 	void *data)
@@ -3429,6 +3443,7 @@ ah_selector(struct rte_table_action *action)
 	return ah_default;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_table_action_table_params_get, 18.05)
 int
 rte_table_action_table_params_get(struct rte_table_action *action,
 	struct rte_pipeline_table_params *params)
@@ -3454,6 +3469,7 @@ rte_table_action_table_params_get(struct rte_table_action *action,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_table_action_free, 18.05)
 int
 rte_table_action_free(struct rte_table_action *action)
 {
diff --git a/lib/port/rte_port_ethdev.c b/lib/port/rte_port_ethdev.c
index d57f680e98..2aa644f08b 100644
--- a/lib/port/rte_port_ethdev.c
+++ b/lib/port/rte_port_ethdev.c
@@ -500,6 +500,7 @@ static int rte_port_ethdev_writer_nodrop_stats_read(void *port,
 /*
  * Summary of port operations
  */
+RTE_EXPORT_SYMBOL(rte_port_ethdev_reader_ops)
 struct rte_port_in_ops rte_port_ethdev_reader_ops = {
 	.f_create = rte_port_ethdev_reader_create,
 	.f_free = rte_port_ethdev_reader_free,
@@ -507,6 +508,7 @@ struct rte_port_in_ops rte_port_ethdev_reader_ops = {
 	.f_stats = rte_port_ethdev_reader_stats_read,
 };
 
+RTE_EXPORT_SYMBOL(rte_port_ethdev_writer_ops)
 struct rte_port_out_ops rte_port_ethdev_writer_ops = {
 	.f_create = rte_port_ethdev_writer_create,
 	.f_free = rte_port_ethdev_writer_free,
@@ -516,6 +518,7 @@ struct rte_port_out_ops rte_port_ethdev_writer_ops = {
 	.f_stats = rte_port_ethdev_writer_stats_read,
 };
 
+RTE_EXPORT_SYMBOL(rte_port_ethdev_writer_nodrop_ops)
 struct rte_port_out_ops rte_port_ethdev_writer_nodrop_ops = {
 	.f_create = rte_port_ethdev_writer_nodrop_create,
 	.f_free = rte_port_ethdev_writer_nodrop_free,
diff --git a/lib/port/rte_port_eventdev.c b/lib/port/rte_port_eventdev.c
index 6acf22998d..b0bd752707 100644
--- a/lib/port/rte_port_eventdev.c
+++ b/lib/port/rte_port_eventdev.c
@@ -560,6 +560,7 @@ static int rte_port_eventdev_writer_nodrop_stats_read(void *port,
 /*
  * Summary of port operations
  */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_port_eventdev_reader_ops, 19.11)
 struct rte_port_in_ops rte_port_eventdev_reader_ops = {
 	.f_create = rte_port_eventdev_reader_create,
 	.f_free = rte_port_eventdev_reader_free,
@@ -567,6 +568,7 @@ struct rte_port_in_ops rte_port_eventdev_reader_ops = {
 	.f_stats = rte_port_eventdev_reader_stats_read,
 };
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_port_eventdev_writer_ops, 19.11)
 struct rte_port_out_ops rte_port_eventdev_writer_ops = {
 	.f_create = rte_port_eventdev_writer_create,
 	.f_free = rte_port_eventdev_writer_free,
@@ -576,6 +578,7 @@ struct rte_port_out_ops rte_port_eventdev_writer_ops = {
 	.f_stats = rte_port_eventdev_writer_stats_read,
 };
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_port_eventdev_writer_nodrop_ops, 19.11)
 struct rte_port_out_ops rte_port_eventdev_writer_nodrop_ops = {
 	.f_create = rte_port_eventdev_writer_nodrop_create,
 	.f_free = rte_port_eventdev_writer_nodrop_free,
diff --git a/lib/port/rte_port_fd.c b/lib/port/rte_port_fd.c
index 281cba20c2..1094f0769d 100644
--- a/lib/port/rte_port_fd.c
+++ b/lib/port/rte_port_fd.c
@@ -494,6 +494,7 @@ static int rte_port_fd_writer_nodrop_stats_read(void *port,
 /*
  * Summary of port operations
  */
+RTE_EXPORT_SYMBOL(rte_port_fd_reader_ops)
 struct rte_port_in_ops rte_port_fd_reader_ops = {
 	.f_create = rte_port_fd_reader_create,
 	.f_free = rte_port_fd_reader_free,
@@ -501,6 +502,7 @@ struct rte_port_in_ops rte_port_fd_reader_ops = {
 	.f_stats = rte_port_fd_reader_stats_read,
 };
 
+RTE_EXPORT_SYMBOL(rte_port_fd_writer_ops)
 struct rte_port_out_ops rte_port_fd_writer_ops = {
 	.f_create = rte_port_fd_writer_create,
 	.f_free = rte_port_fd_writer_free,
@@ -510,6 +512,7 @@ struct rte_port_out_ops rte_port_fd_writer_ops = {
 	.f_stats = rte_port_fd_writer_stats_read,
 };
 
+RTE_EXPORT_SYMBOL(rte_port_fd_writer_nodrop_ops)
 struct rte_port_out_ops rte_port_fd_writer_nodrop_ops = {
 	.f_create = rte_port_fd_writer_nodrop_create,
 	.f_free = rte_port_fd_writer_nodrop_free,
diff --git a/lib/port/rte_port_frag.c b/lib/port/rte_port_frag.c
index 0940f945bd..7adb88f8c7 100644
--- a/lib/port/rte_port_frag.c
+++ b/lib/port/rte_port_frag.c
@@ -262,6 +262,7 @@ rte_port_frag_reader_stats_read(void *port,
 /*
  * Summary of port operations
  */
+RTE_EXPORT_SYMBOL(rte_port_ring_reader_ipv4_frag_ops)
 struct rte_port_in_ops rte_port_ring_reader_ipv4_frag_ops = {
 	.f_create = rte_port_ring_reader_ipv4_frag_create,
 	.f_free = rte_port_ring_reader_frag_free,
@@ -269,6 +270,7 @@ struct rte_port_in_ops rte_port_ring_reader_ipv4_frag_ops = {
 	.f_stats = rte_port_frag_reader_stats_read,
 };
 
+RTE_EXPORT_SYMBOL(rte_port_ring_reader_ipv6_frag_ops)
 struct rte_port_in_ops rte_port_ring_reader_ipv6_frag_ops = {
 	.f_create = rte_port_ring_reader_ipv6_frag_create,
 	.f_free = rte_port_ring_reader_frag_free,
diff --git a/lib/port/rte_port_ras.c b/lib/port/rte_port_ras.c
index 42cf1ddf45..e5d543a1d8 100644
--- a/lib/port/rte_port_ras.c
+++ b/lib/port/rte_port_ras.c
@@ -314,6 +314,7 @@ rte_port_ras_writer_stats_read(void *port,
 /*
  * Summary of port operations
  */
+RTE_EXPORT_SYMBOL(rte_port_ring_writer_ipv4_ras_ops)
 struct rte_port_out_ops rte_port_ring_writer_ipv4_ras_ops = {
 	.f_create = rte_port_ring_writer_ipv4_ras_create,
 	.f_free = rte_port_ring_writer_ras_free,
@@ -323,6 +324,7 @@ struct rte_port_out_ops rte_port_ring_writer_ipv4_ras_ops = {
 	.f_stats = rte_port_ras_writer_stats_read,
 };
 
+RTE_EXPORT_SYMBOL(rte_port_ring_writer_ipv6_ras_ops)
 struct rte_port_out_ops rte_port_ring_writer_ipv6_ras_ops = {
 	.f_create = rte_port_ring_writer_ipv6_ras_create,
 	.f_free = rte_port_ring_writer_ras_free,
diff --git a/lib/port/rte_port_ring.c b/lib/port/rte_port_ring.c
index 680d208f45..53af32f55c 100644
--- a/lib/port/rte_port_ring.c
+++ b/lib/port/rte_port_ring.c
@@ -738,6 +738,7 @@ rte_port_ring_writer_nodrop_stats_read(void *port,
 /*
  * Summary of port operations
  */
+RTE_EXPORT_SYMBOL(rte_port_ring_reader_ops)
 struct rte_port_in_ops rte_port_ring_reader_ops = {
 	.f_create = rte_port_ring_reader_create,
 	.f_free = rte_port_ring_reader_free,
@@ -745,6 +746,7 @@ struct rte_port_in_ops rte_port_ring_reader_ops = {
 	.f_stats = rte_port_ring_reader_stats_read,
 };
 
+RTE_EXPORT_SYMBOL(rte_port_ring_writer_ops)
 struct rte_port_out_ops rte_port_ring_writer_ops = {
 	.f_create = rte_port_ring_writer_create,
 	.f_free = rte_port_ring_writer_free,
@@ -754,6 +756,7 @@ struct rte_port_out_ops rte_port_ring_writer_ops = {
 	.f_stats = rte_port_ring_writer_stats_read,
 };
 
+RTE_EXPORT_SYMBOL(rte_port_ring_writer_nodrop_ops)
 struct rte_port_out_ops rte_port_ring_writer_nodrop_ops = {
 	.f_create = rte_port_ring_writer_nodrop_create,
 	.f_free = rte_port_ring_writer_nodrop_free,
@@ -763,6 +766,7 @@ struct rte_port_out_ops rte_port_ring_writer_nodrop_ops = {
 	.f_stats = rte_port_ring_writer_nodrop_stats_read,
 };
 
+RTE_EXPORT_SYMBOL(rte_port_ring_multi_reader_ops)
 struct rte_port_in_ops rte_port_ring_multi_reader_ops = {
 	.f_create = rte_port_ring_multi_reader_create,
 	.f_free = rte_port_ring_reader_free,
@@ -770,6 +774,7 @@ struct rte_port_in_ops rte_port_ring_multi_reader_ops = {
 	.f_stats = rte_port_ring_reader_stats_read,
 };
 
+RTE_EXPORT_SYMBOL(rte_port_ring_multi_writer_ops)
 struct rte_port_out_ops rte_port_ring_multi_writer_ops = {
 	.f_create = rte_port_ring_multi_writer_create,
 	.f_free = rte_port_ring_writer_free,
@@ -779,6 +784,7 @@ struct rte_port_out_ops rte_port_ring_multi_writer_ops = {
 	.f_stats = rte_port_ring_writer_stats_read,
 };
 
+RTE_EXPORT_SYMBOL(rte_port_ring_multi_writer_nodrop_ops)
 struct rte_port_out_ops rte_port_ring_multi_writer_nodrop_ops = {
 	.f_create = rte_port_ring_multi_writer_nodrop_create,
 	.f_free = rte_port_ring_writer_nodrop_free,
diff --git a/lib/port/rte_port_sched.c b/lib/port/rte_port_sched.c
index da7a6240d7..c85ed61633 100644
--- a/lib/port/rte_port_sched.c
+++ b/lib/port/rte_port_sched.c
@@ -278,6 +278,7 @@ rte_port_sched_writer_stats_read(void *port,
 /*
  * Summary of port operations
  */
+RTE_EXPORT_SYMBOL(rte_port_sched_reader_ops)
 struct rte_port_in_ops rte_port_sched_reader_ops = {
 	.f_create = rte_port_sched_reader_create,
 	.f_free = rte_port_sched_reader_free,
@@ -285,6 +286,7 @@ struct rte_port_in_ops rte_port_sched_reader_ops = {
 	.f_stats = rte_port_sched_reader_stats_read,
 };
 
+RTE_EXPORT_SYMBOL(rte_port_sched_writer_ops)
 struct rte_port_out_ops rte_port_sched_writer_ops = {
 	.f_create = rte_port_sched_writer_create,
 	.f_free = rte_port_sched_writer_free,
diff --git a/lib/port/rte_port_source_sink.c b/lib/port/rte_port_source_sink.c
index a4486a7199..f832d4c40e 100644
--- a/lib/port/rte_port_source_sink.c
+++ b/lib/port/rte_port_source_sink.c
@@ -596,6 +596,7 @@ rte_port_sink_stats_read(void *port, struct rte_port_out_stats *stats,
 /*
  * Summary of port operations
  */
+RTE_EXPORT_SYMBOL(rte_port_source_ops)
 struct rte_port_in_ops rte_port_source_ops = {
 	.f_create = rte_port_source_create,
 	.f_free = rte_port_source_free,
@@ -603,6 +604,7 @@ struct rte_port_in_ops rte_port_source_ops = {
 	.f_stats = rte_port_source_stats_read,
 };
 
+RTE_EXPORT_SYMBOL(rte_port_sink_ops)
 struct rte_port_out_ops rte_port_sink_ops = {
 	.f_create = rte_port_sink_create,
 	.f_free = rte_port_sink_free,
diff --git a/lib/port/rte_port_sym_crypto.c b/lib/port/rte_port_sym_crypto.c
index a68a2396a5..74f7defbec 100644
--- a/lib/port/rte_port_sym_crypto.c
+++ b/lib/port/rte_port_sym_crypto.c
@@ -528,6 +528,7 @@ static int rte_port_sym_crypto_writer_nodrop_stats_read(void *port,
 /*
  * Summary of port operations
  */
+RTE_EXPORT_SYMBOL(rte_port_sym_crypto_reader_ops)
 struct rte_port_in_ops rte_port_sym_crypto_reader_ops = {
 	.f_create = rte_port_sym_crypto_reader_create,
 	.f_free = rte_port_sym_crypto_reader_free,
@@ -535,6 +536,7 @@ struct rte_port_in_ops rte_port_sym_crypto_reader_ops = {
 	.f_stats = rte_port_sym_crypto_reader_stats_read,
 };
 
+RTE_EXPORT_SYMBOL(rte_port_sym_crypto_writer_ops)
 struct rte_port_out_ops rte_port_sym_crypto_writer_ops = {
 	.f_create = rte_port_sym_crypto_writer_create,
 	.f_free = rte_port_sym_crypto_writer_free,
@@ -544,6 +546,7 @@ struct rte_port_out_ops rte_port_sym_crypto_writer_ops = {
 	.f_stats = rte_port_sym_crypto_writer_stats_read,
 };
 
+RTE_EXPORT_SYMBOL(rte_port_sym_crypto_writer_nodrop_ops)
 struct rte_port_out_ops rte_port_sym_crypto_writer_nodrop_ops = {
 	.f_create = rte_port_sym_crypto_writer_nodrop_create,
 	.f_free = rte_port_sym_crypto_writer_nodrop_free,
diff --git a/lib/port/rte_swx_port_ethdev.c b/lib/port/rte_swx_port_ethdev.c
index 7cb3c4dfb1..3685e8a0a3 100644
--- a/lib/port/rte_swx_port_ethdev.c
+++ b/lib/port/rte_swx_port_ethdev.c
@@ -401,6 +401,7 @@ writer_stats_read(void *port, struct rte_swx_port_out_stats *stats)
 /*
  * Summary of port operations
  */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_port_ethdev_reader_ops, 20.11)
 struct rte_swx_port_in_ops rte_swx_port_ethdev_reader_ops = {
 	.create = reader_create,
 	.free = reader_free,
@@ -408,6 +409,7 @@ struct rte_swx_port_in_ops rte_swx_port_ethdev_reader_ops = {
 	.stats_read = reader_stats_read,
 };
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_port_ethdev_writer_ops, 20.11)
 struct rte_swx_port_out_ops rte_swx_port_ethdev_writer_ops = {
 	.create = writer_create,
 	.free = writer_free,
diff --git a/lib/port/rte_swx_port_fd.c b/lib/port/rte_swx_port_fd.c
index 4bbad2eaa7..cd3d45796e 100644
--- a/lib/port/rte_swx_port_fd.c
+++ b/lib/port/rte_swx_port_fd.c
@@ -344,6 +344,7 @@ writer_stats_read(void *port, struct rte_swx_port_out_stats *stats)
 /*
  * Summary of port operations
  */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_port_fd_reader_ops, 21.05)
 struct rte_swx_port_in_ops rte_swx_port_fd_reader_ops = {
 	.create = reader_create,
 	.free = reader_free,
@@ -351,6 +352,7 @@ struct rte_swx_port_in_ops rte_swx_port_fd_reader_ops = {
 	.stats_read = reader_stats_read,
 };
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_port_fd_writer_ops, 21.05)
 struct rte_swx_port_out_ops rte_swx_port_fd_writer_ops = {
 	.create = writer_create,
 	.free = writer_free,
diff --git a/lib/port/rte_swx_port_ring.c b/lib/port/rte_swx_port_ring.c
index af541a2fa2..fbdd8e05f2 100644
--- a/lib/port/rte_swx_port_ring.c
+++ b/lib/port/rte_swx_port_ring.c
@@ -406,6 +406,7 @@ writer_stats_read(void *port, struct rte_swx_port_out_stats *stats)
 /*
  * Summary of port operations
  */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_port_ring_reader_ops, 21.05)
 struct rte_swx_port_in_ops rte_swx_port_ring_reader_ops = {
 	.create = reader_create,
 	.free = reader_free,
@@ -413,6 +414,7 @@ struct rte_swx_port_in_ops rte_swx_port_ring_reader_ops = {
 	.stats_read = reader_stats_read,
 };
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_port_ring_writer_ops, 21.05)
 struct rte_swx_port_out_ops rte_swx_port_ring_writer_ops = {
 	.create = writer_create,
 	.free = writer_free,
diff --git a/lib/port/rte_swx_port_source_sink.c b/lib/port/rte_swx_port_source_sink.c
index 757a2c4a2e..fd37d66803 100644
--- a/lib/port/rte_swx_port_source_sink.c
+++ b/lib/port/rte_swx_port_source_sink.c
@@ -201,6 +201,7 @@ source_stats_read(void *port, struct rte_swx_port_in_stats *stats)
 	memcpy(stats, &p->stats, sizeof(p->stats));
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_port_source_ops, 20.11)
 struct rte_swx_port_in_ops rte_swx_port_source_ops = {
 	.create = source_create,
 	.free = source_free,
@@ -210,6 +211,7 @@ struct rte_swx_port_in_ops rte_swx_port_source_ops = {
 
 #else
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_port_source_ops, 20.11)
 struct rte_swx_port_in_ops rte_swx_port_source_ops = {
 	.create = NULL,
 	.free = NULL,
@@ -380,6 +382,7 @@ sink_stats_read(void *port, struct rte_swx_port_out_stats *stats)
 /*
  * Summary of port operations
  */
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_port_sink_ops, 20.11)
 struct rte_swx_port_out_ops rte_swx_port_sink_ops = {
 	.create = sink_create,
 	.free = sink_free,
diff --git a/lib/power/power_common.c b/lib/power/power_common.c
index e482f71c64..28314b039a 100644
--- a/lib/power/power_common.c
+++ b/lib/power/power_common.c
@@ -13,6 +13,7 @@
 
 #include "power_common.h"
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_power_logtype)
 RTE_LOG_REGISTER_DEFAULT(rte_power_logtype, INFO);
 
 #define POWER_SYSFILE_SCALING_DRIVER   \
@@ -21,6 +22,7 @@ RTE_LOG_REGISTER_DEFAULT(rte_power_logtype, INFO);
 		"/sys/devices/system/cpu/cpu%u/cpufreq/scaling_governor"
 #define POWER_CONVERT_TO_DECIMAL 10
 
+RTE_EXPORT_INTERNAL_SYMBOL(cpufreq_check_scaling_driver)
 int
 cpufreq_check_scaling_driver(const char *driver_name)
 {
@@ -66,6 +68,7 @@ cpufreq_check_scaling_driver(const char *driver_name)
 	return 1;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(open_core_sysfs_file)
 int
 open_core_sysfs_file(FILE **f, const char *mode, const char *format, ...)
 {
@@ -84,6 +87,7 @@ open_core_sysfs_file(FILE **f, const char *mode, const char *format, ...)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(read_core_sysfs_u32)
 int
 read_core_sysfs_u32(FILE *f, uint32_t *val)
 {
@@ -109,6 +113,7 @@ read_core_sysfs_u32(FILE *f, uint32_t *val)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(read_core_sysfs_s)
 int
 read_core_sysfs_s(FILE *f, char *buf, unsigned int len)
 {
@@ -127,6 +132,7 @@ read_core_sysfs_s(FILE *f, char *buf, unsigned int len)
 	return 0;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(write_core_sysfs_s)
 int
 write_core_sysfs_s(FILE *f, const char *str)
 {
@@ -153,6 +159,7 @@ write_core_sysfs_s(FILE *f, const char *str)
  * set it into 'performance' if it is not by writing the sys file. The original
  * governor will be saved for rolling back.
  */
+RTE_EXPORT_INTERNAL_SYMBOL(power_set_governor)
 int
 power_set_governor(unsigned int lcore_id, const char *new_governor,
 		char *orig_governor, size_t orig_governor_len)
@@ -206,6 +213,7 @@ power_set_governor(unsigned int lcore_id, const char *new_governor,
 	return ret;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(power_get_lcore_mapped_cpu_id)
 int power_get_lcore_mapped_cpu_id(uint32_t lcore_id, uint32_t *cpu_id)
 {
 	rte_cpuset_t lcore_cpus;
diff --git a/lib/power/rte_power_cpufreq.c b/lib/power/rte_power_cpufreq.c
index 3576017239..f2dc5d2af4 100644
--- a/lib/power/rte_power_cpufreq.c
+++ b/lib/power/rte_power_cpufreq.c
@@ -25,6 +25,7 @@ const char *power_env_str[] = {
 };
 
 /* register the ops struct in rte_power_cpufreq_ops, return 0 on success. */
+RTE_EXPORT_INTERNAL_SYMBOL(rte_power_register_cpufreq_ops)
 int
 rte_power_register_cpufreq_ops(struct rte_power_cpufreq_ops *driver_ops)
 {
@@ -44,6 +45,7 @@ rte_power_register_cpufreq_ops(struct rte_power_cpufreq_ops *driver_ops)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_power_check_env_supported)
 int
 rte_power_check_env_supported(enum power_management_env env)
 {
@@ -60,6 +62,7 @@ rte_power_check_env_supported(enum power_management_env env)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_power_set_env)
 int
 rte_power_set_env(enum power_management_env env)
 {
@@ -89,6 +92,7 @@ rte_power_set_env(enum power_management_env env)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_power_unset_env)
 void
 rte_power_unset_env(void)
 {
@@ -98,11 +102,13 @@ rte_power_unset_env(void)
 	rte_spinlock_unlock(&global_env_cfg_lock);
 }
 
+RTE_EXPORT_SYMBOL(rte_power_get_env)
 enum power_management_env
 rte_power_get_env(void) {
 	return global_default_env;
 }
 
+RTE_EXPORT_SYMBOL(rte_power_init)
 int
 rte_power_init(unsigned int lcore_id)
 {
@@ -136,6 +142,7 @@ rte_power_init(unsigned int lcore_id)
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_power_exit)
 int
 rte_power_exit(unsigned int lcore_id)
 {
@@ -148,6 +155,7 @@ rte_power_exit(unsigned int lcore_id)
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_power_freqs)
 uint32_t
 rte_power_freqs(unsigned int lcore_id, uint32_t *freqs, uint32_t n)
 {
@@ -155,6 +163,7 @@ rte_power_freqs(unsigned int lcore_id, uint32_t *freqs, uint32_t n)
 	return global_cpufreq_ops->get_avail_freqs(lcore_id, freqs, n);
 }
 
+RTE_EXPORT_SYMBOL(rte_power_get_freq)
 uint32_t
 rte_power_get_freq(unsigned int lcore_id)
 {
@@ -162,6 +171,7 @@ rte_power_get_freq(unsigned int lcore_id)
 	return global_cpufreq_ops->get_freq(lcore_id);
 }
 
+RTE_EXPORT_SYMBOL(rte_power_set_freq)
 uint32_t
 rte_power_set_freq(unsigned int lcore_id, uint32_t index)
 {
@@ -169,6 +179,7 @@ rte_power_set_freq(unsigned int lcore_id, uint32_t index)
 	return global_cpufreq_ops->set_freq(lcore_id, index);
 }
 
+RTE_EXPORT_SYMBOL(rte_power_freq_up)
 int
 rte_power_freq_up(unsigned int lcore_id)
 {
@@ -176,6 +187,7 @@ rte_power_freq_up(unsigned int lcore_id)
 	return global_cpufreq_ops->freq_up(lcore_id);
 }
 
+RTE_EXPORT_SYMBOL(rte_power_freq_down)
 int
 rte_power_freq_down(unsigned int lcore_id)
 {
@@ -183,6 +195,7 @@ rte_power_freq_down(unsigned int lcore_id)
 	return global_cpufreq_ops->freq_down(lcore_id);
 }
 
+RTE_EXPORT_SYMBOL(rte_power_freq_max)
 int
 rte_power_freq_max(unsigned int lcore_id)
 {
@@ -190,6 +203,7 @@ rte_power_freq_max(unsigned int lcore_id)
 	return global_cpufreq_ops->freq_max(lcore_id);
 }
 
+RTE_EXPORT_SYMBOL(rte_power_freq_min)
 int
 rte_power_freq_min(unsigned int lcore_id)
 {
@@ -197,6 +211,7 @@ rte_power_freq_min(unsigned int lcore_id)
 	return global_cpufreq_ops->freq_min(lcore_id);
 }
 
+RTE_EXPORT_SYMBOL(rte_power_turbo_status)
 int
 rte_power_turbo_status(unsigned int lcore_id)
 {
@@ -204,6 +219,7 @@ rte_power_turbo_status(unsigned int lcore_id)
 	return global_cpufreq_ops->turbo_status(lcore_id);
 }
 
+RTE_EXPORT_SYMBOL(rte_power_freq_enable_turbo)
 int
 rte_power_freq_enable_turbo(unsigned int lcore_id)
 {
@@ -211,6 +227,7 @@ rte_power_freq_enable_turbo(unsigned int lcore_id)
 	return global_cpufreq_ops->enable_turbo(lcore_id);
 }
 
+RTE_EXPORT_SYMBOL(rte_power_freq_disable_turbo)
 int
 rte_power_freq_disable_turbo(unsigned int lcore_id)
 {
@@ -218,6 +235,7 @@ rte_power_freq_disable_turbo(unsigned int lcore_id)
 	return global_cpufreq_ops->disable_turbo(lcore_id);
 }
 
+RTE_EXPORT_SYMBOL(rte_power_get_capabilities)
 int
 rte_power_get_capabilities(unsigned int lcore_id,
 		struct rte_power_core_capabilities *caps)
diff --git a/lib/power/rte_power_pmd_mgmt.c b/lib/power/rte_power_pmd_mgmt.c
index 8ec925bd65..01ea38bf98 100644
--- a/lib/power/rte_power_pmd_mgmt.c
+++ b/lib/power/rte_power_pmd_mgmt.c
@@ -496,6 +496,7 @@ get_monitor_callback(void)
 		clb_multiwait : clb_umwait;
 }
 
+RTE_EXPORT_SYMBOL(rte_power_ethdev_pmgmt_queue_enable)
 int
 rte_power_ethdev_pmgmt_queue_enable(unsigned int lcore_id, uint16_t port_id,
 		uint16_t queue_id, enum rte_power_pmd_mgmt_type mode)
@@ -613,6 +614,7 @@ rte_power_ethdev_pmgmt_queue_enable(unsigned int lcore_id, uint16_t port_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_power_ethdev_pmgmt_queue_disable)
 int
 rte_power_ethdev_pmgmt_queue_disable(unsigned int lcore_id,
 		uint16_t port_id, uint16_t queue_id)
@@ -688,18 +690,21 @@ rte_power_ethdev_pmgmt_queue_disable(unsigned int lcore_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_power_pmd_mgmt_set_emptypoll_max)
 void
 rte_power_pmd_mgmt_set_emptypoll_max(unsigned int max)
 {
 	emptypoll_max = max;
 }
 
+RTE_EXPORT_SYMBOL(rte_power_pmd_mgmt_get_emptypoll_max)
 unsigned int
 rte_power_pmd_mgmt_get_emptypoll_max(void)
 {
 	return emptypoll_max;
 }
 
+RTE_EXPORT_SYMBOL(rte_power_pmd_mgmt_set_pause_duration)
 int
 rte_power_pmd_mgmt_set_pause_duration(unsigned int duration)
 {
@@ -712,12 +717,14 @@ rte_power_pmd_mgmt_set_pause_duration(unsigned int duration)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_power_pmd_mgmt_get_pause_duration)
 unsigned int
 rte_power_pmd_mgmt_get_pause_duration(void)
 {
 	return pause_duration;
 }
 
+RTE_EXPORT_SYMBOL(rte_power_pmd_mgmt_set_scaling_freq_min)
 int
 rte_power_pmd_mgmt_set_scaling_freq_min(unsigned int lcore, unsigned int min)
 {
@@ -735,6 +742,7 @@ rte_power_pmd_mgmt_set_scaling_freq_min(unsigned int lcore, unsigned int min)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_power_pmd_mgmt_set_scaling_freq_max)
 int
 rte_power_pmd_mgmt_set_scaling_freq_max(unsigned int lcore, unsigned int max)
 {
@@ -756,6 +764,7 @@ rte_power_pmd_mgmt_set_scaling_freq_max(unsigned int lcore, unsigned int max)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_power_pmd_mgmt_get_scaling_freq_min)
 int
 rte_power_pmd_mgmt_get_scaling_freq_min(unsigned int lcore)
 {
@@ -770,6 +779,7 @@ rte_power_pmd_mgmt_get_scaling_freq_min(unsigned int lcore)
 	return scale_freq_min[lcore];
 }
 
+RTE_EXPORT_SYMBOL(rte_power_pmd_mgmt_get_scaling_freq_max)
 int
 rte_power_pmd_mgmt_get_scaling_freq_max(unsigned int lcore)
 {
diff --git a/lib/power/rte_power_qos.c b/lib/power/rte_power_qos.c
index 4dd0532b36..e828a87c8b 100644
--- a/lib/power/rte_power_qos.c
+++ b/lib/power/rte_power_qos.c
@@ -17,6 +17,7 @@
 
 #define PM_QOS_CPU_RESUME_LATENCY_BUF_LEN	32
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_power_qos_set_cpu_resume_latency, 24.11)
 int
 rte_power_qos_set_cpu_resume_latency(uint16_t lcore_id, int latency)
 {
@@ -70,6 +71,7 @@ rte_power_qos_set_cpu_resume_latency(uint16_t lcore_id, int latency)
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_power_qos_get_cpu_resume_latency, 24.11)
 int
 rte_power_qos_get_cpu_resume_latency(uint16_t lcore_id)
 {
diff --git a/lib/power/rte_power_uncore.c b/lib/power/rte_power_uncore.c
index 741e067932..c1f47ab6e5 100644
--- a/lib/power/rte_power_uncore.c
+++ b/lib/power/rte_power_uncore.c
@@ -24,6 +24,7 @@ const char *uncore_env_str[] = {
 };
 
 /* register the ops struct in rte_power_uncore_ops, return 0 on success. */
+RTE_EXPORT_INTERNAL_SYMBOL(rte_power_register_uncore_ops)
 int
 rte_power_register_uncore_ops(struct rte_power_uncore_ops *driver_ops)
 {
@@ -44,6 +45,7 @@ rte_power_register_uncore_ops(struct rte_power_uncore_ops *driver_ops)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_power_set_uncore_env, 23.11)
 int
 rte_power_set_uncore_env(enum rte_uncore_power_mgmt_env env)
 {
@@ -83,6 +85,7 @@ rte_power_set_uncore_env(enum rte_uncore_power_mgmt_env env)
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_power_unset_uncore_env, 23.11)
 void
 rte_power_unset_uncore_env(void)
 {
@@ -91,12 +94,14 @@ rte_power_unset_uncore_env(void)
 	rte_spinlock_unlock(&global_env_cfg_lock);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_power_get_uncore_env, 23.11)
 enum rte_uncore_power_mgmt_env
 rte_power_get_uncore_env(void)
 {
 	return global_uncore_env;
 }
 
+RTE_EXPORT_SYMBOL(rte_power_uncore_init)
 int
 rte_power_uncore_init(unsigned int pkg, unsigned int die)
 {
@@ -128,6 +133,7 @@ rte_power_uncore_init(unsigned int pkg, unsigned int die)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_power_uncore_exit)
 int
 rte_power_uncore_exit(unsigned int pkg, unsigned int die)
 {
@@ -141,6 +147,7 @@ rte_power_uncore_exit(unsigned int pkg, unsigned int die)
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_power_get_uncore_freq)
 uint32_t
 rte_power_get_uncore_freq(unsigned int pkg, unsigned int die)
 {
@@ -148,6 +155,7 @@ rte_power_get_uncore_freq(unsigned int pkg, unsigned int die)
 	return global_uncore_ops->get_freq(pkg, die);
 }
 
+RTE_EXPORT_SYMBOL(rte_power_set_uncore_freq)
 int
 rte_power_set_uncore_freq(unsigned int pkg, unsigned int die, uint32_t index)
 {
@@ -155,6 +163,7 @@ rte_power_set_uncore_freq(unsigned int pkg, unsigned int die, uint32_t index)
 	return global_uncore_ops->set_freq(pkg, die, index);
 }
 
+RTE_EXPORT_SYMBOL(rte_power_uncore_freq_max)
 int
 rte_power_uncore_freq_max(unsigned int pkg, unsigned int die)
 {
@@ -162,6 +171,7 @@ rte_power_uncore_freq_max(unsigned int pkg, unsigned int die)
 	return global_uncore_ops->freq_max(pkg, die);
 }
 
+RTE_EXPORT_SYMBOL(rte_power_uncore_freq_min)
 int
 rte_power_uncore_freq_min(unsigned int pkg, unsigned int die)
 {
@@ -169,6 +179,7 @@ rte_power_uncore_freq_min(unsigned int pkg, unsigned int die)
 	return global_uncore_ops->freq_min(pkg, die);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_power_uncore_freqs, 23.11)
 int
 rte_power_uncore_freqs(unsigned int pkg, unsigned int die,
 			uint32_t *freqs, uint32_t num)
@@ -177,6 +188,7 @@ rte_power_uncore_freqs(unsigned int pkg, unsigned int die,
 	return global_uncore_ops->get_avail_freqs(pkg, die, freqs, num);
 }
 
+RTE_EXPORT_SYMBOL(rte_power_uncore_get_num_freqs)
 int
 rte_power_uncore_get_num_freqs(unsigned int pkg, unsigned int die)
 {
@@ -184,6 +196,7 @@ rte_power_uncore_get_num_freqs(unsigned int pkg, unsigned int die)
 	return global_uncore_ops->get_num_freqs(pkg, die);
 }
 
+RTE_EXPORT_SYMBOL(rte_power_uncore_get_num_pkgs)
 unsigned int
 rte_power_uncore_get_num_pkgs(void)
 {
@@ -191,6 +204,7 @@ rte_power_uncore_get_num_pkgs(void)
 	return global_uncore_ops->get_num_pkgs();
 }
 
+RTE_EXPORT_SYMBOL(rte_power_uncore_get_num_dies)
 unsigned int
 rte_power_uncore_get_num_dies(unsigned int pkg)
 {
diff --git a/lib/rawdev/rte_rawdev.c b/lib/rawdev/rte_rawdev.c
index 810e95a440..f2e98e2be8 100644
--- a/lib/rawdev/rte_rawdev.c
+++ b/lib/rawdev/rte_rawdev.c
@@ -22,6 +22,7 @@
 
 static struct rte_rawdev rte_rawdevices[RTE_RAWDEV_MAX_DEVS];
 
+RTE_EXPORT_SYMBOL(rte_rawdevs)
 struct rte_rawdev *rte_rawdevs = rte_rawdevices;
 
 static struct rte_rawdev_global rawdev_globals = {
@@ -29,12 +30,14 @@ static struct rte_rawdev_global rawdev_globals = {
 };
 
 /* Raw device, northbound API implementation */
+RTE_EXPORT_SYMBOL(rte_rawdev_count)
 uint8_t
 rte_rawdev_count(void)
 {
 	return rawdev_globals.nb_devs;
 }
 
+RTE_EXPORT_SYMBOL(rte_rawdev_get_dev_id)
 uint16_t
 rte_rawdev_get_dev_id(const char *name)
 {
@@ -52,6 +55,7 @@ rte_rawdev_get_dev_id(const char *name)
 	return -ENODEV;
 }
 
+RTE_EXPORT_SYMBOL(rte_rawdev_socket_id)
 int
 rte_rawdev_socket_id(uint16_t dev_id)
 {
@@ -63,6 +67,7 @@ rte_rawdev_socket_id(uint16_t dev_id)
 	return dev->socket_id;
 }
 
+RTE_EXPORT_SYMBOL(rte_rawdev_info_get)
 int
 rte_rawdev_info_get(uint16_t dev_id, struct rte_rawdev_info *dev_info,
 		size_t dev_private_size)
@@ -91,6 +96,7 @@ rte_rawdev_info_get(uint16_t dev_id, struct rte_rawdev_info *dev_info,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_rawdev_configure)
 int
 rte_rawdev_configure(uint16_t dev_id, struct rte_rawdev_info *dev_conf,
 		size_t dev_private_size)
@@ -123,6 +129,7 @@ rte_rawdev_configure(uint16_t dev_id, struct rte_rawdev_info *dev_conf,
 	return diag;
 }
 
+RTE_EXPORT_SYMBOL(rte_rawdev_queue_conf_get)
 int
 rte_rawdev_queue_conf_get(uint16_t dev_id,
 			  uint16_t queue_id,
@@ -139,6 +146,7 @@ rte_rawdev_queue_conf_get(uint16_t dev_id,
 	return dev->dev_ops->queue_def_conf(dev, queue_id, queue_conf, queue_conf_size);
 }
 
+RTE_EXPORT_SYMBOL(rte_rawdev_queue_setup)
 int
 rte_rawdev_queue_setup(uint16_t dev_id,
 		       uint16_t queue_id,
@@ -155,6 +163,7 @@ rte_rawdev_queue_setup(uint16_t dev_id,
 	return dev->dev_ops->queue_setup(dev, queue_id, queue_conf, queue_conf_size);
 }
 
+RTE_EXPORT_SYMBOL(rte_rawdev_queue_release)
 int
 rte_rawdev_queue_release(uint16_t dev_id, uint16_t queue_id)
 {
@@ -168,6 +177,7 @@ rte_rawdev_queue_release(uint16_t dev_id, uint16_t queue_id)
 	return dev->dev_ops->queue_release(dev, queue_id);
 }
 
+RTE_EXPORT_SYMBOL(rte_rawdev_queue_count)
 uint16_t
 rte_rawdev_queue_count(uint16_t dev_id)
 {
@@ -181,6 +191,7 @@ rte_rawdev_queue_count(uint16_t dev_id)
 	return dev->dev_ops->queue_count(dev);
 }
 
+RTE_EXPORT_SYMBOL(rte_rawdev_get_attr)
 int
 rte_rawdev_get_attr(uint16_t dev_id,
 		    const char *attr_name,
@@ -196,6 +207,7 @@ rte_rawdev_get_attr(uint16_t dev_id,
 	return dev->dev_ops->attr_get(dev, attr_name, attr_value);
 }
 
+RTE_EXPORT_SYMBOL(rte_rawdev_set_attr)
 int
 rte_rawdev_set_attr(uint16_t dev_id,
 		    const char *attr_name,
@@ -211,6 +223,7 @@ rte_rawdev_set_attr(uint16_t dev_id,
 	return dev->dev_ops->attr_set(dev, attr_name, attr_value);
 }
 
+RTE_EXPORT_SYMBOL(rte_rawdev_enqueue_buffers)
 int
 rte_rawdev_enqueue_buffers(uint16_t dev_id,
 			   struct rte_rawdev_buf **buffers,
@@ -227,6 +240,7 @@ rte_rawdev_enqueue_buffers(uint16_t dev_id,
 	return dev->dev_ops->enqueue_bufs(dev, buffers, count, context);
 }
 
+RTE_EXPORT_SYMBOL(rte_rawdev_dequeue_buffers)
 int
 rte_rawdev_dequeue_buffers(uint16_t dev_id,
 			   struct rte_rawdev_buf **buffers,
@@ -243,6 +257,7 @@ rte_rawdev_dequeue_buffers(uint16_t dev_id,
 	return dev->dev_ops->dequeue_bufs(dev, buffers, count, context);
 }
 
+RTE_EXPORT_SYMBOL(rte_rawdev_dump)
 int
 rte_rawdev_dump(uint16_t dev_id, FILE *f)
 {
@@ -266,6 +281,7 @@ xstats_get_count(uint16_t dev_id)
 	return dev->dev_ops->xstats_get_names(dev, NULL, 0);
 }
 
+RTE_EXPORT_SYMBOL(rte_rawdev_xstats_names_get)
 int
 rte_rawdev_xstats_names_get(uint16_t dev_id,
 		struct rte_rawdev_xstats_name *xstats_names,
@@ -290,6 +306,7 @@ rte_rawdev_xstats_names_get(uint16_t dev_id,
 }
 
 /* retrieve rawdev extended statistics */
+RTE_EXPORT_SYMBOL(rte_rawdev_xstats_get)
 int
 rte_rawdev_xstats_get(uint16_t dev_id,
 		      const unsigned int ids[],
@@ -304,6 +321,7 @@ rte_rawdev_xstats_get(uint16_t dev_id,
 	return dev->dev_ops->xstats_get(dev, ids, values, n);
 }
 
+RTE_EXPORT_SYMBOL(rte_rawdev_xstats_by_name_get)
 uint64_t
 rte_rawdev_xstats_by_name_get(uint16_t dev_id,
 			      const char *name,
@@ -324,6 +342,7 @@ rte_rawdev_xstats_by_name_get(uint16_t dev_id,
 	return dev->dev_ops->xstats_get_by_name(dev, name, id);
 }
 
+RTE_EXPORT_SYMBOL(rte_rawdev_xstats_reset)
 int
 rte_rawdev_xstats_reset(uint16_t dev_id,
 			const uint32_t ids[], uint32_t nb_ids)
@@ -336,6 +355,7 @@ rte_rawdev_xstats_reset(uint16_t dev_id,
 	return dev->dev_ops->xstats_reset(dev, ids, nb_ids);
 }
 
+RTE_EXPORT_SYMBOL(rte_rawdev_firmware_status_get)
 int
 rte_rawdev_firmware_status_get(uint16_t dev_id, rte_rawdev_obj_t status_info)
 {
@@ -347,6 +367,7 @@ rte_rawdev_firmware_status_get(uint16_t dev_id, rte_rawdev_obj_t status_info)
 	return dev->dev_ops->firmware_status_get(dev, status_info);
 }
 
+RTE_EXPORT_SYMBOL(rte_rawdev_firmware_version_get)
 int
 rte_rawdev_firmware_version_get(uint16_t dev_id, rte_rawdev_obj_t version_info)
 {
@@ -358,6 +379,7 @@ rte_rawdev_firmware_version_get(uint16_t dev_id, rte_rawdev_obj_t version_info)
 	return dev->dev_ops->firmware_version_get(dev, version_info);
 }
 
+RTE_EXPORT_SYMBOL(rte_rawdev_firmware_load)
 int
 rte_rawdev_firmware_load(uint16_t dev_id, rte_rawdev_obj_t firmware_image)
 {
@@ -372,6 +394,7 @@ rte_rawdev_firmware_load(uint16_t dev_id, rte_rawdev_obj_t firmware_image)
 	return dev->dev_ops->firmware_load(dev, firmware_image);
 }
 
+RTE_EXPORT_SYMBOL(rte_rawdev_firmware_unload)
 int
 rte_rawdev_firmware_unload(uint16_t dev_id)
 {
@@ -383,6 +406,7 @@ rte_rawdev_firmware_unload(uint16_t dev_id)
 	return dev->dev_ops->firmware_unload(dev);
 }
 
+RTE_EXPORT_SYMBOL(rte_rawdev_selftest)
 int
 rte_rawdev_selftest(uint16_t dev_id)
 {
@@ -394,6 +418,7 @@ rte_rawdev_selftest(uint16_t dev_id)
 	return dev->dev_ops->dev_selftest(dev_id);
 }
 
+RTE_EXPORT_SYMBOL(rte_rawdev_start)
 int
 rte_rawdev_start(uint16_t dev_id)
 {
@@ -422,6 +447,7 @@ rte_rawdev_start(uint16_t dev_id)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_rawdev_stop)
 void
 rte_rawdev_stop(uint16_t dev_id)
 {
@@ -447,6 +473,7 @@ rte_rawdev_stop(uint16_t dev_id)
 	dev->started = 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_rawdev_close)
 int
 rte_rawdev_close(uint16_t dev_id)
 {
@@ -467,6 +494,7 @@ rte_rawdev_close(uint16_t dev_id)
 	return dev->dev_ops->dev_close(dev);
 }
 
+RTE_EXPORT_SYMBOL(rte_rawdev_reset)
 int
 rte_rawdev_reset(uint16_t dev_id)
 {
@@ -495,6 +523,7 @@ rte_rawdev_find_free_device_index(void)
 	return RTE_RAWDEV_MAX_DEVS;
 }
 
+RTE_EXPORT_SYMBOL(rte_rawdev_pmd_allocate)
 struct rte_rawdev *
 rte_rawdev_pmd_allocate(const char *name, size_t dev_priv_size, int socket_id)
 {
@@ -536,6 +565,7 @@ rte_rawdev_pmd_allocate(const char *name, size_t dev_priv_size, int socket_id)
 	return rawdev;
 }
 
+RTE_EXPORT_SYMBOL(rte_rawdev_pmd_release)
 int
 rte_rawdev_pmd_release(struct rte_rawdev *rawdev)
 {
diff --git a/lib/rcu/rte_rcu_qsbr.c b/lib/rcu/rte_rcu_qsbr.c
index dbf31501a6..dc8d8de7fa 100644
--- a/lib/rcu/rte_rcu_qsbr.c
+++ b/lib/rcu/rte_rcu_qsbr.c
@@ -23,6 +23,7 @@
 	RTE_LOG_LINE_PREFIX(level, RCU, "%s(): ", __func__, __VA_ARGS__)
 
 /* Get the memory size of QSBR variable */
+RTE_EXPORT_SYMBOL(rte_rcu_qsbr_get_memsize)
 size_t
 rte_rcu_qsbr_get_memsize(uint32_t max_threads)
 {
@@ -47,6 +48,7 @@ rte_rcu_qsbr_get_memsize(uint32_t max_threads)
 }
 
 /* Initialize a quiescent state variable */
+RTE_EXPORT_SYMBOL(rte_rcu_qsbr_init)
 int
 rte_rcu_qsbr_init(struct rte_rcu_qsbr *v, uint32_t max_threads)
 {
@@ -78,6 +80,7 @@ rte_rcu_qsbr_init(struct rte_rcu_qsbr *v, uint32_t max_threads)
 /* Register a reader thread to report its quiescent state
  * on a QS variable.
  */
+RTE_EXPORT_SYMBOL(rte_rcu_qsbr_thread_register)
 int
 rte_rcu_qsbr_thread_register(struct rte_rcu_qsbr *v, unsigned int thread_id)
 {
@@ -113,6 +116,7 @@ rte_rcu_qsbr_thread_register(struct rte_rcu_qsbr *v, unsigned int thread_id)
 /* Remove a reader thread, from the list of threads reporting their
  * quiescent state on a QS variable.
  */
+RTE_EXPORT_SYMBOL(rte_rcu_qsbr_thread_unregister)
 int
 rte_rcu_qsbr_thread_unregister(struct rte_rcu_qsbr *v, unsigned int thread_id)
 {
@@ -149,6 +153,7 @@ rte_rcu_qsbr_thread_unregister(struct rte_rcu_qsbr *v, unsigned int thread_id)
 }
 
 /* Wait till the reader threads have entered quiescent state. */
+RTE_EXPORT_SYMBOL(rte_rcu_qsbr_synchronize)
 void
 rte_rcu_qsbr_synchronize(struct rte_rcu_qsbr *v, unsigned int thread_id)
 {
@@ -169,6 +174,7 @@ rte_rcu_qsbr_synchronize(struct rte_rcu_qsbr *v, unsigned int thread_id)
 }
 
 /* Dump the details of a single quiescent state variable to a file. */
+RTE_EXPORT_SYMBOL(rte_rcu_qsbr_dump)
 int
 rte_rcu_qsbr_dump(FILE *f, struct rte_rcu_qsbr *v)
 {
@@ -235,6 +241,7 @@ rte_rcu_qsbr_dump(FILE *f, struct rte_rcu_qsbr *v)
 /* Create a queue used to store the data structure elements that can
  * be freed later. This queue is referred to as 'defer queue'.
  */
+RTE_EXPORT_SYMBOL(rte_rcu_qsbr_dq_create)
 struct rte_rcu_qsbr_dq *
 rte_rcu_qsbr_dq_create(const struct rte_rcu_qsbr_dq_parameters *params)
 {
@@ -311,6 +318,7 @@ rte_rcu_qsbr_dq_create(const struct rte_rcu_qsbr_dq_parameters *params)
 /* Enqueue one resource to the defer queue to free after the grace
  * period is over.
  */
+RTE_EXPORT_SYMBOL(rte_rcu_qsbr_dq_enqueue)
 int rte_rcu_qsbr_dq_enqueue(struct rte_rcu_qsbr_dq *dq, void *e)
 {
 	__rte_rcu_qsbr_dq_elem_t *dq_elem;
@@ -369,6 +377,7 @@ int rte_rcu_qsbr_dq_enqueue(struct rte_rcu_qsbr_dq *dq, void *e)
 }
 
 /* Reclaim resources from the defer queue. */
+RTE_EXPORT_SYMBOL(rte_rcu_qsbr_dq_reclaim)
 int
 rte_rcu_qsbr_dq_reclaim(struct rte_rcu_qsbr_dq *dq, unsigned int n,
 			unsigned int *freed, unsigned int *pending,
@@ -418,6 +427,7 @@ rte_rcu_qsbr_dq_reclaim(struct rte_rcu_qsbr_dq *dq, unsigned int n,
 }
 
 /* Delete a defer queue. */
+RTE_EXPORT_SYMBOL(rte_rcu_qsbr_dq_delete)
 int
 rte_rcu_qsbr_dq_delete(struct rte_rcu_qsbr_dq *dq)
 {
@@ -443,4 +453,5 @@ rte_rcu_qsbr_dq_delete(struct rte_rcu_qsbr_dq *dq)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_rcu_log_type)
 RTE_LOG_REGISTER_DEFAULT(rte_rcu_log_type, ERR);
diff --git a/lib/regexdev/rte_regexdev.c b/lib/regexdev/rte_regexdev.c
index 431ed911a1..6ff4d871cf 100644
--- a/lib/regexdev/rte_regexdev.c
+++ b/lib/regexdev/rte_regexdev.c
@@ -13,12 +13,14 @@
 #include "rte_regexdev_driver.h"
 
 static const char *MZ_RTE_REGEXDEV_DATA = "rte_regexdev_data";
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_regex_devices, 22.03)
 struct rte_regexdev rte_regex_devices[RTE_MAX_REGEXDEV_DEVS];
 /* Shared memory between primary and secondary processes. */
 static struct {
 	struct rte_regexdev_data data[RTE_MAX_REGEXDEV_DEVS];
 } *rte_regexdev_shared_data;
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_regexdev_logtype, 22.03)
 RTE_LOG_REGISTER_DEFAULT(rte_regexdev_logtype, INFO);
 
 static uint16_t
@@ -89,6 +91,7 @@ regexdev_check_name(const char *name)
 
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_regexdev_register)
 struct rte_regexdev *
 rte_regexdev_register(const char *name)
 {
@@ -126,12 +129,14 @@ rte_regexdev_register(const char *name)
 	return dev;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_regexdev_unregister)
 void
 rte_regexdev_unregister(struct rte_regexdev *dev)
 {
 	dev->state = RTE_REGEXDEV_UNUSED;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_regexdev_get_device_by_name)
 struct rte_regexdev *
 rte_regexdev_get_device_by_name(const char *name)
 {
@@ -140,6 +145,7 @@ rte_regexdev_get_device_by_name(const char *name)
 	return regexdev_allocated(name);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_regexdev_count, 20.08)
 uint8_t
 rte_regexdev_count(void)
 {
@@ -153,6 +159,7 @@ rte_regexdev_count(void)
 	return count;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_regexdev_get_dev_id, 20.08)
 int
 rte_regexdev_get_dev_id(const char *name)
 {
@@ -171,6 +178,7 @@ rte_regexdev_get_dev_id(const char *name)
 	return id;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_regexdev_is_valid_dev, 22.03)
 int
 rte_regexdev_is_valid_dev(uint16_t dev_id)
 {
@@ -195,12 +203,14 @@ regexdev_info_get(uint8_t dev_id, struct rte_regexdev_info *dev_info)
 
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_regexdev_info_get, 20.08)
 int
 rte_regexdev_info_get(uint8_t dev_id, struct rte_regexdev_info *dev_info)
 {
 	return regexdev_info_get(dev_id, dev_info);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_regexdev_configure, 20.08)
 int
 rte_regexdev_configure(uint8_t dev_id, const struct rte_regexdev_config *cfg)
 {
@@ -295,6 +305,7 @@ rte_regexdev_configure(uint8_t dev_id, const struct rte_regexdev_config *cfg)
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_regexdev_queue_pair_setup, 20.08)
 int
 rte_regexdev_queue_pair_setup(uint8_t dev_id, uint16_t queue_pair_id,
 			   const struct rte_regexdev_qp_conf *qp_conf)
@@ -327,6 +338,7 @@ rte_regexdev_queue_pair_setup(uint8_t dev_id, uint16_t queue_pair_id,
 	return dev->dev_ops->dev_qp_setup(dev, queue_pair_id, qp_conf);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_regexdev_start, 20.08)
 int
 rte_regexdev_start(uint8_t dev_id)
 {
@@ -343,6 +355,7 @@ rte_regexdev_start(uint8_t dev_id)
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_regexdev_stop, 20.08)
 int
 rte_regexdev_stop(uint8_t dev_id)
 {
@@ -357,6 +370,7 @@ rte_regexdev_stop(uint8_t dev_id)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_regexdev_close, 20.08)
 int
 rte_regexdev_close(uint8_t dev_id)
 {
@@ -372,6 +386,7 @@ rte_regexdev_close(uint8_t dev_id)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_regexdev_attr_get, 20.08)
 int
 rte_regexdev_attr_get(uint8_t dev_id, enum rte_regexdev_attr_id attr_id,
 		      void *attr_value)
@@ -390,6 +405,7 @@ rte_regexdev_attr_get(uint8_t dev_id, enum rte_regexdev_attr_id attr_id,
 	return dev->dev_ops->dev_attr_get(dev, attr_id, attr_value);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_regexdev_attr_set, 20.08)
 int
 rte_regexdev_attr_set(uint8_t dev_id, enum rte_regexdev_attr_id attr_id,
 		      const void *attr_value)
@@ -408,6 +424,7 @@ rte_regexdev_attr_set(uint8_t dev_id, enum rte_regexdev_attr_id attr_id,
 	return dev->dev_ops->dev_attr_set(dev, attr_id, attr_value);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_regexdev_rule_db_update, 20.08)
 int
 rte_regexdev_rule_db_update(uint8_t dev_id,
 			    const struct rte_regexdev_rule *rules,
@@ -427,6 +444,7 @@ rte_regexdev_rule_db_update(uint8_t dev_id,
 	return dev->dev_ops->dev_rule_db_update(dev, rules, nb_rules);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_regexdev_rule_db_compile_activate, 20.08)
 int
 rte_regexdev_rule_db_compile_activate(uint8_t dev_id)
 {
@@ -439,6 +457,7 @@ rte_regexdev_rule_db_compile_activate(uint8_t dev_id)
 	return dev->dev_ops->dev_rule_db_compile_activate(dev);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_regexdev_rule_db_import, 20.08)
 int
 rte_regexdev_rule_db_import(uint8_t dev_id, const char *rule_db,
 			    uint32_t rule_db_len)
@@ -457,6 +476,7 @@ rte_regexdev_rule_db_import(uint8_t dev_id, const char *rule_db,
 	return dev->dev_ops->dev_db_import(dev, rule_db, rule_db_len);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_regexdev_rule_db_export, 20.08)
 int
 rte_regexdev_rule_db_export(uint8_t dev_id, char *rule_db)
 {
@@ -469,6 +489,7 @@ rte_regexdev_rule_db_export(uint8_t dev_id, char *rule_db)
 	return dev->dev_ops->dev_db_export(dev, rule_db);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_regexdev_xstats_names_get, 20.08)
 int
 rte_regexdev_xstats_names_get(uint8_t dev_id,
 			      struct rte_regexdev_xstats_map *xstats_map)
@@ -487,6 +508,7 @@ rte_regexdev_xstats_names_get(uint8_t dev_id,
 	return dev->dev_ops->dev_xstats_names_get(dev, xstats_map);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_regexdev_xstats_get, 20.08)
 int
 rte_regexdev_xstats_get(uint8_t dev_id, const uint16_t *ids,
 			uint64_t *values, uint16_t n)
@@ -508,6 +530,7 @@ rte_regexdev_xstats_get(uint8_t dev_id, const uint16_t *ids,
 	return dev->dev_ops->dev_xstats_get(dev, ids, values, n);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_regexdev_xstats_by_name_get, 20.08)
 int
 rte_regexdev_xstats_by_name_get(uint8_t dev_id, const char *name,
 				uint16_t *id, uint64_t *value)
@@ -533,6 +556,7 @@ rte_regexdev_xstats_by_name_get(uint8_t dev_id, const char *name,
 	return dev->dev_ops->dev_xstats_by_name_get(dev, name, id, value);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_regexdev_xstats_reset, 20.08)
 int
 rte_regexdev_xstats_reset(uint8_t dev_id, const uint16_t *ids,
 			  uint16_t nb_ids)
@@ -550,6 +574,7 @@ rte_regexdev_xstats_reset(uint8_t dev_id, const uint16_t *ids,
 	return dev->dev_ops->dev_xstats_reset(dev, ids, nb_ids);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_regexdev_selftest, 20.08)
 int
 rte_regexdev_selftest(uint8_t dev_id)
 {
@@ -562,6 +587,7 @@ rte_regexdev_selftest(uint8_t dev_id)
 	return dev->dev_ops->dev_selftest(dev);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_regexdev_dump, 20.08)
 int
 rte_regexdev_dump(uint8_t dev_id, FILE *f)
 {
diff --git a/lib/reorder/rte_reorder.c b/lib/reorder/rte_reorder.c
index ae97e1a34d..d5828a1a88 100644
--- a/lib/reorder/rte_reorder.c
+++ b/lib/reorder/rte_reorder.c
@@ -34,6 +34,7 @@ EAL_REGISTER_TAILQ(rte_reorder_tailq)
 #define RTE_REORDER_NAMESIZE 32
 
 #define RTE_REORDER_SEQN_DYNFIELD_NAME "rte_reorder_seqn_dynfield"
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_reorder_seqn_dynfield_offset, 20.11)
 int rte_reorder_seqn_dynfield_offset = -1;
 
 /* A generic circular buffer */
@@ -59,12 +60,14 @@ struct __rte_cache_aligned rte_reorder_buffer {
 static void
 rte_reorder_free_mbufs(struct rte_reorder_buffer *b);
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_reorder_memory_footprint_get, 23.07)
 unsigned int
 rte_reorder_memory_footprint_get(unsigned int size)
 {
 	return sizeof(struct rte_reorder_buffer) + (2 * size * sizeof(struct rte_mbuf *));
 }
 
+RTE_EXPORT_SYMBOL(rte_reorder_init)
 struct rte_reorder_buffer *
 rte_reorder_init(struct rte_reorder_buffer *b, unsigned int bufsize,
 		const char *name, unsigned int size)
@@ -154,6 +157,7 @@ rte_reorder_entry_insert(struct rte_tailq_entry *new_te)
 	return te;
 }
 
+RTE_EXPORT_SYMBOL(rte_reorder_create)
 struct rte_reorder_buffer*
 rte_reorder_create(const char *name, unsigned socket_id, unsigned int size)
 {
@@ -210,6 +214,7 @@ rte_reorder_create(const char *name, unsigned socket_id, unsigned int size)
 	return b;
 }
 
+RTE_EXPORT_SYMBOL(rte_reorder_reset)
 void
 rte_reorder_reset(struct rte_reorder_buffer *b)
 {
@@ -233,6 +238,7 @@ rte_reorder_free_mbufs(struct rte_reorder_buffer *b)
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_reorder_free)
 void
 rte_reorder_free(struct rte_reorder_buffer *b)
 {
@@ -267,6 +273,7 @@ rte_reorder_free(struct rte_reorder_buffer *b)
 	rte_free(te);
 }
 
+RTE_EXPORT_SYMBOL(rte_reorder_find_existing)
 struct rte_reorder_buffer *
 rte_reorder_find_existing(const char *name)
 {
@@ -348,6 +355,7 @@ rte_reorder_fill_overflow(struct rte_reorder_buffer *b, unsigned n)
 	return order_head_adv;
 }
 
+RTE_EXPORT_SYMBOL(rte_reorder_insert)
 int
 rte_reorder_insert(struct rte_reorder_buffer *b, struct rte_mbuf *mbuf)
 {
@@ -414,6 +422,7 @@ rte_reorder_insert(struct rte_reorder_buffer *b, struct rte_mbuf *mbuf)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_reorder_drain)
 unsigned int
 rte_reorder_drain(struct rte_reorder_buffer *b, struct rte_mbuf **mbufs,
 		unsigned max_mbufs)
@@ -472,6 +481,7 @@ ready_buffer_seqn_find(const struct cir_buffer *ready_buf, const uint32_t seqn)
 	return low;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_reorder_drain_up_to_seqn, 23.03)
 unsigned int
 rte_reorder_drain_up_to_seqn(struct rte_reorder_buffer *b, struct rte_mbuf **mbufs,
 		const unsigned int max_mbufs, const rte_reorder_seqn_t seqn)
@@ -542,6 +552,7 @@ rte_reorder_is_empty(const struct rte_reorder_buffer *b)
 	return true;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_reorder_min_seqn_set, 23.03)
 unsigned int
 rte_reorder_min_seqn_set(struct rte_reorder_buffer *b, rte_reorder_seqn_t min_seqn)
 {
diff --git a/lib/rib/rte_rib.c b/lib/rib/rte_rib.c
index b95d329c8b..a144faa69a 100644
--- a/lib/rib/rte_rib.c
+++ b/lib/rib/rte_rib.c
@@ -101,6 +101,7 @@ node_free(struct rte_rib *rib, struct rte_rib_node *ent)
 	rte_mempool_put(rib->node_pool, ent);
 }
 
+RTE_EXPORT_SYMBOL(rte_rib_lookup)
 struct rte_rib_node *
 rte_rib_lookup(struct rte_rib *rib, uint32_t ip)
 {
@@ -120,6 +121,7 @@ rte_rib_lookup(struct rte_rib *rib, uint32_t ip)
 	return prev;
 }
 
+RTE_EXPORT_SYMBOL(rte_rib_lookup_parent)
 struct rte_rib_node *
 rte_rib_lookup_parent(struct rte_rib_node *ent)
 {
@@ -151,6 +153,7 @@ __rib_lookup_exact(struct rte_rib *rib, uint32_t ip, uint8_t depth)
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_rib_lookup_exact)
 struct rte_rib_node *
 rte_rib_lookup_exact(struct rte_rib *rib, uint32_t ip, uint8_t depth)
 {
@@ -168,6 +171,7 @@ rte_rib_lookup_exact(struct rte_rib *rib, uint32_t ip, uint8_t depth)
  *  for a given in args ip/depth prefix
  *  last = NULL means the first invocation
  */
+RTE_EXPORT_SYMBOL(rte_rib_get_nxt)
 struct rte_rib_node *
 rte_rib_get_nxt(struct rte_rib *rib, uint32_t ip,
 	uint8_t depth, struct rte_rib_node *last, int flag)
@@ -208,6 +212,7 @@ rte_rib_get_nxt(struct rte_rib *rib, uint32_t ip,
 	return prev;
 }
 
+RTE_EXPORT_SYMBOL(rte_rib_remove)
 void
 rte_rib_remove(struct rte_rib *rib, uint32_t ip, uint8_t depth)
 {
@@ -240,6 +245,7 @@ rte_rib_remove(struct rte_rib *rib, uint32_t ip, uint8_t depth)
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_rib_insert)
 struct rte_rib_node *
 rte_rib_insert(struct rte_rib *rib, uint32_t ip, uint8_t depth)
 {
@@ -346,6 +352,7 @@ rte_rib_insert(struct rte_rib *rib, uint32_t ip, uint8_t depth)
 	return new_node;
 }
 
+RTE_EXPORT_SYMBOL(rte_rib_get_ip)
 int
 rte_rib_get_ip(const struct rte_rib_node *node, uint32_t *ip)
 {
@@ -357,6 +364,7 @@ rte_rib_get_ip(const struct rte_rib_node *node, uint32_t *ip)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_rib_get_depth)
 int
 rte_rib_get_depth(const struct rte_rib_node *node, uint8_t *depth)
 {
@@ -368,12 +376,14 @@ rte_rib_get_depth(const struct rte_rib_node *node, uint8_t *depth)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_rib_get_ext)
 void *
 rte_rib_get_ext(struct rte_rib_node *node)
 {
 	return (node == NULL) ? NULL : &node->ext[0];
 }
 
+RTE_EXPORT_SYMBOL(rte_rib_get_nh)
 int
 rte_rib_get_nh(const struct rte_rib_node *node, uint64_t *nh)
 {
@@ -385,6 +395,7 @@ rte_rib_get_nh(const struct rte_rib_node *node, uint64_t *nh)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_rib_set_nh)
 int
 rte_rib_set_nh(struct rte_rib_node *node, uint64_t nh)
 {
@@ -396,6 +407,7 @@ rte_rib_set_nh(struct rte_rib_node *node, uint64_t nh)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_rib_create)
 struct rte_rib *
 rte_rib_create(const char *name, int socket_id, const struct rte_rib_conf *conf)
 {
@@ -477,6 +489,7 @@ rte_rib_create(const char *name, int socket_id, const struct rte_rib_conf *conf)
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_rib_find_existing)
 struct rte_rib *
 rte_rib_find_existing(const char *name)
 {
@@ -502,6 +515,7 @@ rte_rib_find_existing(const char *name)
 	return rib;
 }
 
+RTE_EXPORT_SYMBOL(rte_rib_free)
 void
 rte_rib_free(struct rte_rib *rib)
 {
diff --git a/lib/rib/rte_rib6.c b/lib/rib/rte_rib6.c
index 84c47fed6d..b05ff89322 100644
--- a/lib/rib/rte_rib6.c
+++ b/lib/rib/rte_rib6.c
@@ -114,6 +114,7 @@ node_free(struct rte_rib6 *rib, struct rte_rib6_node *ent)
 	rte_mempool_put(rib->node_pool, ent);
 }
 
+RTE_EXPORT_SYMBOL(rte_rib6_lookup)
 struct rte_rib6_node *
 rte_rib6_lookup(struct rte_rib6 *rib,
 	const struct rte_ipv6_addr *ip)
@@ -135,6 +136,7 @@ rte_rib6_lookup(struct rte_rib6 *rib,
 	return prev;
 }
 
+RTE_EXPORT_SYMBOL(rte_rib6_lookup_parent)
 struct rte_rib6_node *
 rte_rib6_lookup_parent(struct rte_rib6_node *ent)
 {
@@ -150,6 +152,7 @@ rte_rib6_lookup_parent(struct rte_rib6_node *ent)
 	return tmp;
 }
 
+RTE_EXPORT_SYMBOL(rte_rib6_lookup_exact)
 struct rte_rib6_node *
 rte_rib6_lookup_exact(struct rte_rib6 *rib,
 	const struct rte_ipv6_addr *ip, uint8_t depth)
@@ -187,6 +190,7 @@ rte_rib6_lookup_exact(struct rte_rib6 *rib,
  *  for a given in args ip/depth prefix
  *  last = NULL means the first invocation
  */
+RTE_EXPORT_SYMBOL(rte_rib6_get_nxt)
 struct rte_rib6_node *
 rte_rib6_get_nxt(struct rte_rib6 *rib,
 	const struct rte_ipv6_addr *ip,
@@ -232,6 +236,7 @@ rte_rib6_get_nxt(struct rte_rib6 *rib,
 	return prev;
 }
 
+RTE_EXPORT_SYMBOL(rte_rib6_remove)
 void
 rte_rib6_remove(struct rte_rib6 *rib,
 	const struct rte_ipv6_addr *ip, uint8_t depth)
@@ -265,6 +270,7 @@ rte_rib6_remove(struct rte_rib6 *rib,
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_rib6_insert)
 struct rte_rib6_node *
 rte_rib6_insert(struct rte_rib6 *rib,
 	const struct rte_ipv6_addr *ip, uint8_t depth)
@@ -392,6 +398,7 @@ rte_rib6_insert(struct rte_rib6 *rib,
 	return new_node;
 }
 
+RTE_EXPORT_SYMBOL(rte_rib6_get_ip)
 int
 rte_rib6_get_ip(const struct rte_rib6_node *node,
 		struct rte_ipv6_addr *ip)
@@ -404,6 +411,7 @@ rte_rib6_get_ip(const struct rte_rib6_node *node,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_rib6_get_depth)
 int
 rte_rib6_get_depth(const struct rte_rib6_node *node, uint8_t *depth)
 {
@@ -415,12 +423,14 @@ rte_rib6_get_depth(const struct rte_rib6_node *node, uint8_t *depth)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_rib6_get_ext)
 void *
 rte_rib6_get_ext(struct rte_rib6_node *node)
 {
 	return (node == NULL) ? NULL : &node->ext[0];
 }
 
+RTE_EXPORT_SYMBOL(rte_rib6_get_nh)
 int
 rte_rib6_get_nh(const struct rte_rib6_node *node, uint64_t *nh)
 {
@@ -432,6 +442,7 @@ rte_rib6_get_nh(const struct rte_rib6_node *node, uint64_t *nh)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_rib6_set_nh)
 int
 rte_rib6_set_nh(struct rte_rib6_node *node, uint64_t nh)
 {
@@ -443,6 +454,7 @@ rte_rib6_set_nh(struct rte_rib6_node *node, uint64_t nh)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_rib6_create)
 struct rte_rib6 *
 rte_rib6_create(const char *name, int socket_id,
 		const struct rte_rib6_conf *conf)
@@ -526,6 +538,7 @@ rte_rib6_create(const char *name, int socket_id,
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_rib6_find_existing)
 struct rte_rib6 *
 rte_rib6_find_existing(const char *name)
 {
@@ -556,6 +569,7 @@ rte_rib6_find_existing(const char *name)
 	return rib;
 }
 
+RTE_EXPORT_SYMBOL(rte_rib6_free)
 void
 rte_rib6_free(struct rte_rib6 *rib)
 {
diff --git a/lib/ring/rte_ring.c b/lib/ring/rte_ring.c
index a7d9d6b037..8d476b9a3c 100644
--- a/lib/ring/rte_ring.c
+++ b/lib/ring/rte_ring.c
@@ -52,6 +52,7 @@ EAL_REGISTER_TAILQ(rte_ring_tailq)
 #define HTD_MAX_DEF	8
 
 /* return the size of memory occupied by a ring */
+RTE_EXPORT_SYMBOL(rte_ring_get_memsize_elem)
 ssize_t
 rte_ring_get_memsize_elem(unsigned int esize, unsigned int count)
 {
@@ -79,6 +80,7 @@ rte_ring_get_memsize_elem(unsigned int esize, unsigned int count)
 }
 
 /* return the size of memory occupied by a ring */
+RTE_EXPORT_SYMBOL(rte_ring_get_memsize)
 ssize_t
 rte_ring_get_memsize(unsigned int count)
 {
@@ -118,6 +120,7 @@ reset_headtail(void *p)
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_ring_reset)
 void
 rte_ring_reset(struct rte_ring *r)
 {
@@ -176,6 +179,7 @@ get_sync_type(uint32_t flags, enum rte_ring_sync_type *prod_st,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_ring_init)
 int
 rte_ring_init(struct rte_ring *r, const char *name, unsigned int count,
 	unsigned int flags)
@@ -243,6 +247,7 @@ rte_ring_init(struct rte_ring *r, const char *name, unsigned int count,
 }
 
 /* create the ring for a given element size */
+RTE_EXPORT_SYMBOL(rte_ring_create_elem)
 struct rte_ring *
 rte_ring_create_elem(const char *name, unsigned int esize, unsigned int count,
 		int socket_id, unsigned int flags)
@@ -312,6 +317,7 @@ rte_ring_create_elem(const char *name, unsigned int esize, unsigned int count,
 }
 
 /* create the ring */
+RTE_EXPORT_SYMBOL(rte_ring_create)
 struct rte_ring *
 rte_ring_create(const char *name, unsigned int count, int socket_id,
 		unsigned int flags)
@@ -321,6 +327,7 @@ rte_ring_create(const char *name, unsigned int count, int socket_id,
 }
 
 /* free the ring */
+RTE_EXPORT_SYMBOL(rte_ring_free)
 void
 rte_ring_free(struct rte_ring *r)
 {
@@ -414,6 +421,7 @@ ring_dump_hts_headtail(FILE *f, const char *prefix,
 	fprintf(f, "%stail=%"PRIu32"\n", prefix, hts->ht.pos.tail);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_ring_headtail_dump, 25.03)
 void
 rte_ring_headtail_dump(FILE *f, const char *prefix,
 		const struct rte_ring_headtail *r)
@@ -442,6 +450,7 @@ rte_ring_headtail_dump(FILE *f, const char *prefix,
 }
 
 /* dump the status of the ring on the console */
+RTE_EXPORT_SYMBOL(rte_ring_dump)
 void
 rte_ring_dump(FILE *f, const struct rte_ring *r)
 {
@@ -460,6 +469,7 @@ rte_ring_dump(FILE *f, const struct rte_ring *r)
 }
 
 /* dump the status of all rings on the console */
+RTE_EXPORT_SYMBOL(rte_ring_list_dump)
 void
 rte_ring_list_dump(FILE *f)
 {
@@ -478,6 +488,7 @@ rte_ring_list_dump(FILE *f)
 }
 
 /* search a ring from its name */
+RTE_EXPORT_SYMBOL(rte_ring_lookup)
 struct rte_ring *
 rte_ring_lookup(const char *name)
 {
diff --git a/lib/ring/rte_soring.c b/lib/ring/rte_soring.c
index 8cee926b11..1c9452eb24 100644
--- a/lib/ring/rte_soring.c
+++ b/lib/ring/rte_soring.c
@@ -91,6 +91,7 @@ soring_dump_stage_headtail(FILE *f, const char *prefix,
 	fprintf(f, "%shead=%"PRIu32"\n", prefix, st->sht.head);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_soring_dump, 25.03)
 void
 rte_soring_dump(FILE *f, const struct rte_soring *r)
 {
@@ -118,6 +119,7 @@ rte_soring_dump(FILE *f, const struct rte_soring *r)
 	}
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_soring_get_memsize, 25.03)
 ssize_t
 rte_soring_get_memsize(const struct rte_soring_param *prm)
 {
@@ -151,6 +153,7 @@ soring_compilation_checks(void)
 		offsetof(struct soring_stage_headtail, unused));
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_soring_init, 25.03)
 int
 rte_soring_init(struct rte_soring *r, const struct rte_soring_param *prm)
 {
diff --git a/lib/ring/soring.c b/lib/ring/soring.c
index 4fec7efae7..9d77404aee 100644
--- a/lib/ring/soring.c
+++ b/lib/ring/soring.c
@@ -489,6 +489,7 @@ soring_release(struct rte_soring *r, const void *objs,
  * Public functions (data-path) start here.
  */
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_soring_release, 25.03)
 void
 rte_soring_release(struct rte_soring *r, const void *objs,
 	uint32_t stage, uint32_t n, uint32_t ftoken)
@@ -497,6 +498,7 @@ rte_soring_release(struct rte_soring *r, const void *objs,
 }
 
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_soring_releasx, 25.03)
 void
 rte_soring_releasx(struct rte_soring *r, const void *objs,
 	const void *meta, uint32_t stage, uint32_t n, uint32_t ftoken)
@@ -504,6 +506,7 @@ rte_soring_releasx(struct rte_soring *r, const void *objs,
 	soring_release(r, objs, meta, stage, n, ftoken);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_soring_enqueue_bulk, 25.03)
 uint32_t
 rte_soring_enqueue_bulk(struct rte_soring *r, const void *objs, uint32_t n,
 	uint32_t *free_space)
@@ -512,6 +515,7 @@ rte_soring_enqueue_bulk(struct rte_soring *r, const void *objs, uint32_t n,
 			free_space);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_soring_enqueux_bulk, 25.03)
 uint32_t
 rte_soring_enqueux_bulk(struct rte_soring *r, const void *objs,
 	const void *meta, uint32_t n, uint32_t *free_space)
@@ -520,6 +524,7 @@ rte_soring_enqueux_bulk(struct rte_soring *r, const void *objs,
 			free_space);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_soring_enqueue_burst, 25.03)
 uint32_t
 rte_soring_enqueue_burst(struct rte_soring *r, const void *objs, uint32_t n,
 	uint32_t *free_space)
@@ -528,6 +533,7 @@ rte_soring_enqueue_burst(struct rte_soring *r, const void *objs, uint32_t n,
 			free_space);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_soring_enqueux_burst, 25.03)
 uint32_t
 rte_soring_enqueux_burst(struct rte_soring *r, const void *objs,
 	const void *meta, uint32_t n, uint32_t *free_space)
@@ -536,6 +542,7 @@ rte_soring_enqueux_burst(struct rte_soring *r, const void *objs,
 			free_space);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_soring_dequeue_bulk, 25.03)
 uint32_t
 rte_soring_dequeue_bulk(struct rte_soring *r, void *objs, uint32_t num,
 	uint32_t *available)
@@ -544,6 +551,7 @@ rte_soring_dequeue_bulk(struct rte_soring *r, void *objs, uint32_t num,
 			available);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_soring_dequeux_bulk, 25.03)
 uint32_t
 rte_soring_dequeux_bulk(struct rte_soring *r, void *objs, void *meta,
 	uint32_t num, uint32_t *available)
@@ -552,6 +560,7 @@ rte_soring_dequeux_bulk(struct rte_soring *r, void *objs, void *meta,
 			available);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_soring_dequeue_burst, 25.03)
 uint32_t
 rte_soring_dequeue_burst(struct rte_soring *r, void *objs, uint32_t num,
 	uint32_t *available)
@@ -560,6 +569,7 @@ rte_soring_dequeue_burst(struct rte_soring *r, void *objs, uint32_t num,
 			available);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_soring_dequeux_burst, 25.03)
 uint32_t
 rte_soring_dequeux_burst(struct rte_soring *r, void *objs, void *meta,
 	uint32_t num, uint32_t *available)
@@ -568,6 +578,7 @@ rte_soring_dequeux_burst(struct rte_soring *r, void *objs, void *meta,
 			available);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_soring_acquire_bulk, 25.03)
 uint32_t
 rte_soring_acquire_bulk(struct rte_soring *r, void *objs,
 	uint32_t stage, uint32_t num, uint32_t *ftoken, uint32_t *available)
@@ -576,6 +587,7 @@ rte_soring_acquire_bulk(struct rte_soring *r, void *objs,
 			RTE_RING_QUEUE_FIXED, ftoken, available);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_soring_acquirx_bulk, 25.03)
 uint32_t
 rte_soring_acquirx_bulk(struct rte_soring *r, void *objs, void *meta,
 	uint32_t stage, uint32_t num, uint32_t *ftoken, uint32_t *available)
@@ -584,6 +596,7 @@ rte_soring_acquirx_bulk(struct rte_soring *r, void *objs, void *meta,
 			RTE_RING_QUEUE_FIXED, ftoken, available);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_soring_acquire_burst, 25.03)
 uint32_t
 rte_soring_acquire_burst(struct rte_soring *r, void *objs,
 	uint32_t stage, uint32_t num, uint32_t *ftoken, uint32_t *available)
@@ -592,6 +605,7 @@ rte_soring_acquire_burst(struct rte_soring *r, void *objs,
 			RTE_RING_QUEUE_VARIABLE, ftoken, available);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_soring_acquirx_burst, 25.03)
 uint32_t
 rte_soring_acquirx_burst(struct rte_soring *r, void *objs, void *meta,
 	uint32_t stage, uint32_t num, uint32_t *ftoken, uint32_t *available)
@@ -600,6 +614,7 @@ rte_soring_acquirx_burst(struct rte_soring *r, void *objs, void *meta,
 			RTE_RING_QUEUE_VARIABLE, ftoken, available);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_soring_count, 25.03)
 unsigned int
 rte_soring_count(const struct rte_soring *r)
 {
@@ -609,6 +624,7 @@ rte_soring_count(const struct rte_soring *r)
 	return (count > r->capacity) ? r->capacity : count;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_soring_free_count, 25.03)
 unsigned int
 rte_soring_free_count(const struct rte_soring *r)
 {
diff --git a/lib/sched/rte_approx.c b/lib/sched/rte_approx.c
index edc8d9113b..ac06dffb88 100644
--- a/lib/sched/rte_approx.c
+++ b/lib/sched/rte_approx.c
@@ -139,6 +139,7 @@ find_best_rational_approximation(uint32_t alpha_num, uint32_t d_num, uint32_t de
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_approx)
 int rte_approx(double alpha, double d, uint32_t *p, uint32_t *q)
 {
 	uint32_t alpha_num, d_num, denum;
diff --git a/lib/sched/rte_pie.c b/lib/sched/rte_pie.c
index a9f650e60f..94fc756f16 100644
--- a/lib/sched/rte_pie.c
+++ b/lib/sched/rte_pie.c
@@ -9,6 +9,7 @@
 #include "rte_sched_log.h"
 #include "rte_pie.h"
 
+RTE_EXPORT_SYMBOL(rte_pie_rt_data_init)
 int
 rte_pie_rt_data_init(struct rte_pie *pie)
 {
@@ -22,6 +23,7 @@ rte_pie_rt_data_init(struct rte_pie *pie)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_pie_config_init)
 int
 rte_pie_config_init(struct rte_pie_config *pie_cfg,
 	const uint16_t qdelay_ref,
diff --git a/lib/sched/rte_red.c b/lib/sched/rte_red.c
index fa27a141ed..2e3e7efee1 100644
--- a/lib/sched/rte_red.c
+++ b/lib/sched/rte_red.c
@@ -8,18 +8,22 @@
 #include <rte_common.h>
 
 static int rte_red_init_done = 0;     /**< Flag to indicate that global initialisation is done */
+RTE_EXPORT_SYMBOL(rte_red_rand_val)
 uint32_t rte_red_rand_val = 0;        /**< Random value cache */
+RTE_EXPORT_SYMBOL(rte_red_rand_seed)
 uint32_t rte_red_rand_seed = 0;       /**< Seed for random number generation */
 
 /**
  * table[i] = log2(1-Wq) * Scale * -1
  *       Wq = 1/(2^i)
  */
+RTE_EXPORT_SYMBOL(rte_red_log2_1_minus_Wq)
 uint16_t rte_red_log2_1_minus_Wq[RTE_RED_WQ_LOG2_NUM];
 
 /**
  * table[i] = 2^(i/16) * Scale
  */
+RTE_EXPORT_SYMBOL(rte_red_pow2_frac_inv)
 uint16_t rte_red_pow2_frac_inv[16];
 
 /**
@@ -64,6 +68,7 @@ __rte_red_init_tables(void)
 	}
 }
 
+RTE_EXPORT_SYMBOL(rte_red_rt_data_init)
 int
 rte_red_rt_data_init(struct rte_red *red)
 {
@@ -76,6 +81,7 @@ rte_red_rt_data_init(struct rte_red *red)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_red_config_init)
 int
 rte_red_config_init(struct rte_red_config *red_cfg,
 	const uint16_t wq_log2,
diff --git a/lib/sched/rte_sched.c b/lib/sched/rte_sched.c
index d8ee4e7e91..a5f2051bed 100644
--- a/lib/sched/rte_sched.c
+++ b/lib/sched/rte_sched.c
@@ -883,6 +883,7 @@ rte_sched_subport_check_params(struct rte_sched_subport_params *params,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_sched_port_get_memory_footprint)
 uint32_t
 rte_sched_port_get_memory_footprint(struct rte_sched_port_params *port_params,
 	struct rte_sched_subport_params **subport_params)
@@ -926,6 +927,7 @@ rte_sched_port_get_memory_footprint(struct rte_sched_port_params *port_params,
 	return size0 + size1;
 }
 
+RTE_EXPORT_SYMBOL(rte_sched_port_config)
 struct rte_sched_port *
 rte_sched_port_config(struct rte_sched_port_params *params)
 {
@@ -1046,6 +1048,7 @@ rte_sched_subport_free(struct rte_sched_port *port,
 	rte_free(subport);
 }
 
+RTE_EXPORT_SYMBOL(rte_sched_port_free)
 void
 rte_sched_port_free(struct rte_sched_port *port)
 {
@@ -1159,6 +1162,7 @@ rte_sched_cman_config(struct rte_sched_port *port,
 	return -EINVAL;
 }
 
+RTE_EXPORT_SYMBOL(rte_sched_subport_tc_ov_config)
 int
 rte_sched_subport_tc_ov_config(struct rte_sched_port *port,
 	uint32_t subport_id,
@@ -1184,6 +1188,7 @@ rte_sched_subport_tc_ov_config(struct rte_sched_port *port,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_sched_subport_config)
 int
 rte_sched_subport_config(struct rte_sched_port *port,
 	uint32_t subport_id,
@@ -1377,6 +1382,7 @@ rte_sched_subport_config(struct rte_sched_port *port,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_sched_pipe_config)
 int
 rte_sched_pipe_config(struct rte_sched_port *port,
 	uint32_t subport_id,
@@ -1501,6 +1507,7 @@ rte_sched_pipe_config(struct rte_sched_port *port,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_sched_subport_pipe_profile_add)
 int
 rte_sched_subport_pipe_profile_add(struct rte_sched_port *port,
 	uint32_t subport_id,
@@ -1566,6 +1573,7 @@ rte_sched_subport_pipe_profile_add(struct rte_sched_port *port,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_sched_port_subport_profile_add)
 int
 rte_sched_port_subport_profile_add(struct rte_sched_port *port,
 	struct rte_sched_subport_profile_params *params,
@@ -1647,6 +1655,7 @@ rte_sched_port_qindex(struct rte_sched_port *port,
 		(RTE_SCHED_QUEUES_PER_PIPE - 1));
 }
 
+RTE_EXPORT_SYMBOL(rte_sched_port_pkt_write)
 void
 rte_sched_port_pkt_write(struct rte_sched_port *port,
 			 struct rte_mbuf *pkt,
@@ -1660,6 +1669,7 @@ rte_sched_port_pkt_write(struct rte_sched_port *port,
 	rte_mbuf_sched_set(pkt, queue_id, traffic_class, (uint8_t)color);
 }
 
+RTE_EXPORT_SYMBOL(rte_sched_port_pkt_read_tree_path)
 void
 rte_sched_port_pkt_read_tree_path(struct rte_sched_port *port,
 				  const struct rte_mbuf *pkt,
@@ -1675,12 +1685,14 @@ rte_sched_port_pkt_read_tree_path(struct rte_sched_port *port,
 	*queue = rte_sched_port_tc_queue(port, queue_id);
 }
 
+RTE_EXPORT_SYMBOL(rte_sched_port_pkt_read_color)
 enum rte_color
 rte_sched_port_pkt_read_color(const struct rte_mbuf *pkt)
 {
 	return (enum rte_color)rte_mbuf_sched_color_get(pkt);
 }
 
+RTE_EXPORT_SYMBOL(rte_sched_subport_read_stats)
 int
 rte_sched_subport_read_stats(struct rte_sched_port *port,
 			     uint32_t subport_id,
@@ -1726,6 +1738,7 @@ rte_sched_subport_read_stats(struct rte_sched_port *port,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_sched_queue_read_stats)
 int
 rte_sched_queue_read_stats(struct rte_sched_port *port,
 	uint32_t queue_id,
@@ -2041,6 +2054,7 @@ rte_sched_port_enqueue_qwa(struct rte_sched_port *port,
  * ----->|_______|----->|_______|----->|_______|----->|_______|----->
  *   p01            p11            p21            p31
  */
+RTE_EXPORT_SYMBOL(rte_sched_port_enqueue)
 int
 rte_sched_port_enqueue(struct rte_sched_port *port, struct rte_mbuf **pkts,
 		       uint32_t n_pkts)
@@ -2952,6 +2966,7 @@ rte_sched_port_exceptions(struct rte_sched_subport *subport, int second_pass)
 	return exceptions;
 }
 
+RTE_EXPORT_SYMBOL(rte_sched_port_dequeue)
 int
 rte_sched_port_dequeue(struct rte_sched_port *port, struct rte_mbuf **pkts, uint32_t n_pkts)
 {
diff --git a/lib/security/rte_security.c b/lib/security/rte_security.c
index 1e980343fe..154d5e1a1a 100644
--- a/lib/security/rte_security.c
+++ b/lib/security/rte_security.c
@@ -30,9 +30,12 @@
 #define RTE_SECURITY_DYNFIELD_NAME "rte_security_dynfield_metadata"
 #define RTE_SECURITY_OOP_DYNFIELD_NAME "rte_security_oop_dynfield_metadata"
 
+RTE_EXPORT_SYMBOL(rte_security_dynfield_offset)
 int rte_security_dynfield_offset = -1;
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_security_oop_dynfield_offset, 23.11)
 int rte_security_oop_dynfield_offset = -1;
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_security_dynfield_register)
 int
 rte_security_dynfield_register(void)
 {
@@ -46,6 +49,7 @@ rte_security_dynfield_register(void)
 	return rte_security_dynfield_offset;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_security_oop_dynfield_register)
 int
 rte_security_oop_dynfield_register(void)
 {
@@ -60,6 +64,7 @@ rte_security_oop_dynfield_register(void)
 	return rte_security_oop_dynfield_offset;
 }
 
+RTE_EXPORT_SYMBOL(rte_security_session_create)
 void *
 rte_security_session_create(void *ctx,
 			    struct rte_security_session_conf *conf,
@@ -94,6 +99,7 @@ rte_security_session_create(void *ctx,
 	return (void *)sess;
 }
 
+RTE_EXPORT_SYMBOL(rte_security_session_update)
 int
 rte_security_session_update(void *ctx, void *sess, struct rte_security_session_conf *conf)
 {
@@ -107,6 +113,7 @@ rte_security_session_update(void *ctx, void *sess, struct rte_security_session_c
 	return instance->ops->session_update(instance->device, sess, conf);
 }
 
+RTE_EXPORT_SYMBOL(rte_security_session_get_size)
 unsigned int
 rte_security_session_get_size(void *ctx)
 {
@@ -118,6 +125,7 @@ rte_security_session_get_size(void *ctx)
 			instance->ops->session_get_size(instance->device));
 }
 
+RTE_EXPORT_SYMBOL(rte_security_session_stats_get)
 int
 rte_security_session_stats_get(void *ctx, void *sess, struct rte_security_stats *stats)
 {
@@ -131,6 +139,7 @@ rte_security_session_stats_get(void *ctx, void *sess, struct rte_security_stats
 	return instance->ops->session_stats_get(instance->device, sess, stats);
 }
 
+RTE_EXPORT_SYMBOL(rte_security_session_destroy)
 int
 rte_security_session_destroy(void *ctx, void *sess)
 {
@@ -153,6 +162,7 @@ rte_security_session_destroy(void *ctx, void *sess)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_security_macsec_sc_create)
 int
 rte_security_macsec_sc_create(void *ctx, struct rte_security_macsec_sc *conf)
 {
@@ -169,6 +179,7 @@ rte_security_macsec_sc_create(void *ctx, struct rte_security_macsec_sc *conf)
 	return sc_id;
 }
 
+RTE_EXPORT_SYMBOL(rte_security_macsec_sa_create)
 int
 rte_security_macsec_sa_create(void *ctx, struct rte_security_macsec_sa *conf)
 {
@@ -185,6 +196,7 @@ rte_security_macsec_sa_create(void *ctx, struct rte_security_macsec_sa *conf)
 	return sa_id;
 }
 
+RTE_EXPORT_SYMBOL(rte_security_macsec_sc_destroy)
 int
 rte_security_macsec_sc_destroy(void *ctx, uint16_t sc_id,
 			       enum rte_security_macsec_direction dir)
@@ -204,6 +216,7 @@ rte_security_macsec_sc_destroy(void *ctx, uint16_t sc_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_security_macsec_sa_destroy)
 int
 rte_security_macsec_sa_destroy(void *ctx, uint16_t sa_id,
 			       enum rte_security_macsec_direction dir)
@@ -223,6 +236,7 @@ rte_security_macsec_sa_destroy(void *ctx, uint16_t sa_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_security_macsec_sc_stats_get)
 int
 rte_security_macsec_sc_stats_get(void *ctx, uint16_t sc_id,
 				 enum rte_security_macsec_direction dir,
@@ -236,6 +250,7 @@ rte_security_macsec_sc_stats_get(void *ctx, uint16_t sc_id,
 	return instance->ops->macsec_sc_stats_get(instance->device, sc_id, dir, stats);
 }
 
+RTE_EXPORT_SYMBOL(rte_security_macsec_sa_stats_get)
 int
 rte_security_macsec_sa_stats_get(void *ctx, uint16_t sa_id,
 				 enum rte_security_macsec_direction dir,
@@ -249,6 +264,7 @@ rte_security_macsec_sa_stats_get(void *ctx, uint16_t sa_id,
 	return instance->ops->macsec_sa_stats_get(instance->device, sa_id, dir, stats);
 }
 
+RTE_EXPORT_SYMBOL(__rte_security_set_pkt_metadata)
 int
 __rte_security_set_pkt_metadata(void *ctx, void *sess, struct rte_mbuf *m, void *params)
 {
@@ -263,6 +279,7 @@ __rte_security_set_pkt_metadata(void *ctx, void *sess, struct rte_mbuf *m, void
 	return instance->ops->set_pkt_metadata(instance->device, sess, m, params);
 }
 
+RTE_EXPORT_SYMBOL(rte_security_capabilities_get)
 const struct rte_security_capability *
 rte_security_capabilities_get(void *ctx)
 {
@@ -273,6 +290,7 @@ rte_security_capabilities_get(void *ctx)
 	return instance->ops->capabilities_get(instance->device);
 }
 
+RTE_EXPORT_SYMBOL(rte_security_capability_get)
 const struct rte_security_capability *
 rte_security_capability_get(void *ctx, struct rte_security_capability_idx *idx)
 {
@@ -325,6 +343,7 @@ rte_security_capability_get(void *ctx, struct rte_security_capability_idx *idx)
 	return NULL;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_security_rx_inject_configure, 23.11)
 int
 rte_security_rx_inject_configure(void *ctx, uint16_t port_id, bool enable)
 {
@@ -337,6 +356,7 @@ rte_security_rx_inject_configure(void *ctx, uint16_t port_id, bool enable)
 	return instance->ops->rx_inject_configure(instance->device, port_id, enable);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_security_inb_pkt_rx_inject, 23.11)
 uint16_t
 rte_security_inb_pkt_rx_inject(void *ctx, struct rte_mbuf **pkts, void **sess,
 			       uint16_t nb_pkts)
diff --git a/lib/stack/rte_stack.c b/lib/stack/rte_stack.c
index 7261281dc1..f9a1f58a86 100644
--- a/lib/stack/rte_stack.c
+++ b/lib/stack/rte_stack.c
@@ -44,6 +44,7 @@ rte_stack_get_memsize(unsigned int count, uint32_t flags)
 		return rte_stack_std_get_memsize(count);
 }
 
+RTE_EXPORT_SYMBOL(rte_stack_create)
 struct rte_stack *
 rte_stack_create(const char *name, unsigned int count, int socket_id,
 		 uint32_t flags)
@@ -129,6 +130,7 @@ rte_stack_create(const char *name, unsigned int count, int socket_id,
 	return s;
 }
 
+RTE_EXPORT_SYMBOL(rte_stack_free)
 void
 rte_stack_free(struct rte_stack *s)
 {
@@ -161,6 +163,7 @@ rte_stack_free(struct rte_stack *s)
 	rte_memzone_free(s->memzone);
 }
 
+RTE_EXPORT_SYMBOL(rte_stack_lookup)
 struct rte_stack *
 rte_stack_lookup(const char *name)
 {
diff --git a/lib/table/rte_swx_table_em.c b/lib/table/rte_swx_table_em.c
index 2f042d74b3..c6a561871e 100644
--- a/lib/table/rte_swx_table_em.c
+++ b/lib/table/rte_swx_table_em.c
@@ -647,6 +647,7 @@ table_footprint(struct rte_swx_table_params *params,
 	return memory_footprint;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_exact_match_unoptimized_ops, 20.11)
 struct rte_swx_table_ops rte_swx_table_exact_match_unoptimized_ops = {
 	.footprint_get = table_footprint,
 	.mailbox_size_get = table_mailbox_size_get_unoptimized,
@@ -657,6 +658,7 @@ struct rte_swx_table_ops rte_swx_table_exact_match_unoptimized_ops = {
 	.free = table_free,
 };
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_exact_match_ops, 20.11)
 struct rte_swx_table_ops rte_swx_table_exact_match_ops = {
 	.footprint_get = table_footprint,
 	.mailbox_size_get = table_mailbox_size_get,
diff --git a/lib/table/rte_swx_table_learner.c b/lib/table/rte_swx_table_learner.c
index 55a3645e06..faf69a5e77 100644
--- a/lib/table/rte_swx_table_learner.c
+++ b/lib/table/rte_swx_table_learner.c
@@ -272,6 +272,7 @@ table_entry_id_get(struct table *t, struct table_bucket *b, size_t bucket_key_po
 	return (bucket_id << TABLE_KEYS_PER_BUCKET_LOG2) + bucket_key_pos;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_learner_footprint_get, 21.11)
 uint64_t
 rte_swx_table_learner_footprint_get(struct rte_swx_table_learner_params *params)
 {
@@ -283,6 +284,7 @@ rte_swx_table_learner_footprint_get(struct rte_swx_table_learner_params *params)
 	return status ? 0 : p.total_size;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_learner_create, 21.11)
 void *
 rte_swx_table_learner_create(struct rte_swx_table_learner_params *params, int numa_node)
 {
@@ -306,6 +308,7 @@ rte_swx_table_learner_create(struct rte_swx_table_learner_params *params, int nu
 	return t;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_learner_free, 21.11)
 void
 rte_swx_table_learner_free(void *table)
 {
@@ -317,6 +320,7 @@ rte_swx_table_learner_free(void *table)
 	env_free(t, t->params.total_size);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_learner_timeout_update, 22.07)
 int
 rte_swx_table_learner_timeout_update(void *table,
 				     uint32_t key_timeout_id,
@@ -354,12 +358,14 @@ struct mailbox {
 	int state;
 };
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_learner_mailbox_size_get, 21.11)
 uint64_t
 rte_swx_table_learner_mailbox_size_get(void)
 {
 	return sizeof(struct mailbox);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_learner_lookup, 21.11)
 int
 rte_swx_table_learner_lookup(void *table,
 			     void *mailbox,
@@ -446,6 +452,7 @@ rte_swx_table_learner_lookup(void *table,
 	}
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_learner_rearm, 22.07)
 void
 rte_swx_table_learner_rearm(void *table,
 			    void *mailbox,
@@ -469,6 +476,7 @@ rte_swx_table_learner_rearm(void *table,
 	b->time[bucket_key_pos] = (input_time + key_timeout) >> 32;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_learner_rearm_new, 22.07)
 void
 rte_swx_table_learner_rearm_new(void *table,
 				void *mailbox,
@@ -493,6 +501,7 @@ rte_swx_table_learner_rearm_new(void *table,
 	b->key_timeout_id[bucket_key_pos] = (uint8_t)key_timeout_id;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_learner_add, 21.11)
 uint32_t
 rte_swx_table_learner_add(void *table,
 			  void *mailbox,
@@ -569,6 +578,7 @@ rte_swx_table_learner_add(void *table,
 	return 1;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_learner_delete, 21.11)
 void
 rte_swx_table_learner_delete(void *table __rte_unused,
 			     void *mailbox)
diff --git a/lib/table/rte_swx_table_selector.c b/lib/table/rte_swx_table_selector.c
index 18e021fe6f..400c7e7574 100644
--- a/lib/table/rte_swx_table_selector.c
+++ b/lib/table/rte_swx_table_selector.c
@@ -170,6 +170,7 @@ struct table {
 	uint32_t n_members_per_group_max_log2;
 };
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_selector_footprint_get, 21.08)
 uint64_t
 rte_swx_table_selector_footprint_get(uint32_t n_groups_max, uint32_t n_members_per_group_max)
 {
@@ -182,6 +183,7 @@ rte_swx_table_selector_footprint_get(uint32_t n_groups_max, uint32_t n_members_p
 	return sizeof(struct table) + group_table_size + members_size;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_selector_free, 21.08)
 void
 rte_swx_table_selector_free(void *table)
 {
@@ -259,6 +261,7 @@ group_set(struct table *t,
 	  uint32_t group_id,
 	  struct rte_swx_table_selector_group *group);
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_selector_create, 21.08)
 void *
 rte_swx_table_selector_create(struct rte_swx_table_selector_params *params,
 			      struct rte_swx_table_selector_group **groups,
@@ -528,6 +531,7 @@ group_set(struct table *t,
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_selector_group_set, 21.08)
 int
 rte_swx_table_selector_group_set(void *table,
 				 uint32_t group_id,
@@ -542,12 +546,14 @@ struct mailbox {
 
 };
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_selector_mailbox_size_get, 21.08)
 uint64_t
 rte_swx_table_selector_mailbox_size_get(void)
 {
 	return sizeof(struct mailbox);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_selector_select, 21.08)
 int
 rte_swx_table_selector_select(void *table,
 			      void *mailbox __rte_unused,
diff --git a/lib/table/rte_swx_table_wm.c b/lib/table/rte_swx_table_wm.c
index 58afb35d46..5f7880b282 100644
--- a/lib/table/rte_swx_table_wm.c
+++ b/lib/table/rte_swx_table_wm.c
@@ -457,6 +457,7 @@ table_lookup(void *table,
 	return 1;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_swx_table_wildcard_match_ops, 21.05)
 struct rte_swx_table_ops rte_swx_table_wildcard_match_ops = {
 	.footprint_get = NULL,
 	.mailbox_size_get = table_mailbox_size_get,
diff --git a/lib/table/rte_table_acl.c b/lib/table/rte_table_acl.c
index 78779bbc4d..414fbcd1c2 100644
--- a/lib/table/rte_table_acl.c
+++ b/lib/table/rte_table_acl.c
@@ -781,6 +781,7 @@ rte_table_acl_stats_read(void *table, struct rte_table_stats *stats, int clear)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_table_acl_ops)
 struct rte_table_ops rte_table_acl_ops = {
 	.f_create = rte_table_acl_create,
 	.f_free = rte_table_acl_free,
diff --git a/lib/table/rte_table_array.c b/lib/table/rte_table_array.c
index 84b5d67e90..92550469b3 100644
--- a/lib/table/rte_table_array.c
+++ b/lib/table/rte_table_array.c
@@ -196,6 +196,7 @@ rte_table_array_stats_read(void *table, struct rte_table_stats *stats, int clear
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_table_array_ops)
 struct rte_table_ops rte_table_array_ops = {
 	.f_create = rte_table_array_create,
 	.f_free = rte_table_array_free,
diff --git a/lib/table/rte_table_hash_cuckoo.c b/lib/table/rte_table_hash_cuckoo.c
index 388eae918c..56ddefb71d 100644
--- a/lib/table/rte_table_hash_cuckoo.c
+++ b/lib/table/rte_table_hash_cuckoo.c
@@ -313,6 +313,7 @@ rte_table_hash_cuckoo_stats_read(void *table, struct rte_table_stats *stats,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_table_hash_cuckoo_ops)
 struct rte_table_ops rte_table_hash_cuckoo_ops = {
 	.f_create = rte_table_hash_cuckoo_create,
 	.f_free = rte_table_hash_cuckoo_free,
diff --git a/lib/table/rte_table_hash_ext.c b/lib/table/rte_table_hash_ext.c
index 91e5037b41..b3e56a6516 100644
--- a/lib/table/rte_table_hash_ext.c
+++ b/lib/table/rte_table_hash_ext.c
@@ -997,6 +997,7 @@ rte_table_hash_ext_stats_read(void *table, struct rte_table_stats *stats, int cl
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_table_hash_ext_ops)
 struct rte_table_ops rte_table_hash_ext_ops	 = {
 	.f_create = rte_table_hash_ext_create,
 	.f_free = rte_table_hash_ext_free,
diff --git a/lib/table/rte_table_hash_key16.c b/lib/table/rte_table_hash_key16.c
index 67b77c16a0..61d36e37b1 100644
--- a/lib/table/rte_table_hash_key16.c
+++ b/lib/table/rte_table_hash_key16.c
@@ -1166,6 +1166,7 @@ rte_table_hash_key16_stats_read(void *table, struct rte_table_stats *stats, int
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_table_hash_key16_lru_ops)
 struct rte_table_ops rte_table_hash_key16_lru_ops = {
 	.f_create = rte_table_hash_create_key16_lru,
 	.f_free = rte_table_hash_free_key16_lru,
@@ -1177,6 +1178,7 @@ struct rte_table_ops rte_table_hash_key16_lru_ops = {
 	.f_stats = rte_table_hash_key16_stats_read,
 };
 
+RTE_EXPORT_SYMBOL(rte_table_hash_key16_ext_ops)
 struct rte_table_ops rte_table_hash_key16_ext_ops = {
 	.f_create = rte_table_hash_create_key16_ext,
 	.f_free = rte_table_hash_free_key16_ext,
diff --git a/lib/table/rte_table_hash_key32.c b/lib/table/rte_table_hash_key32.c
index 1aa86c6a49..1b597694ba 100644
--- a/lib/table/rte_table_hash_key32.c
+++ b/lib/table/rte_table_hash_key32.c
@@ -1199,6 +1199,7 @@ rte_table_hash_key32_stats_read(void *table, struct rte_table_stats *stats, int
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_table_hash_key32_lru_ops)
 struct rte_table_ops rte_table_hash_key32_lru_ops = {
 	.f_create = rte_table_hash_create_key32_lru,
 	.f_free = rte_table_hash_free_key32_lru,
@@ -1210,6 +1211,7 @@ struct rte_table_ops rte_table_hash_key32_lru_ops = {
 	.f_stats = rte_table_hash_key32_stats_read,
 };
 
+RTE_EXPORT_SYMBOL(rte_table_hash_key32_ext_ops)
 struct rte_table_ops rte_table_hash_key32_ext_ops = {
 	.f_create = rte_table_hash_create_key32_ext,
 	.f_free = rte_table_hash_free_key32_ext,
diff --git a/lib/table/rte_table_hash_key8.c b/lib/table/rte_table_hash_key8.c
index c8d72b333d..9cf2cc3a91 100644
--- a/lib/table/rte_table_hash_key8.c
+++ b/lib/table/rte_table_hash_key8.c
@@ -1133,6 +1133,7 @@ rte_table_hash_key8_stats_read(void *table, struct rte_table_stats *stats, int c
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_table_hash_key8_lru_ops)
 struct rte_table_ops rte_table_hash_key8_lru_ops = {
 	.f_create = rte_table_hash_create_key8_lru,
 	.f_free = rte_table_hash_free_key8_lru,
@@ -1144,6 +1145,7 @@ struct rte_table_ops rte_table_hash_key8_lru_ops = {
 	.f_stats = rte_table_hash_key8_stats_read,
 };
 
+RTE_EXPORT_SYMBOL(rte_table_hash_key8_ext_ops)
 struct rte_table_ops rte_table_hash_key8_ext_ops = {
 	.f_create = rte_table_hash_create_key8_ext,
 	.f_free = rte_table_hash_free_key8_ext,
diff --git a/lib/table/rte_table_hash_lru.c b/lib/table/rte_table_hash_lru.c
index 801e48f5ba..051cd3dbcf 100644
--- a/lib/table/rte_table_hash_lru.c
+++ b/lib/table/rte_table_hash_lru.c
@@ -945,6 +945,7 @@ rte_table_hash_lru_stats_read(void *table, struct rte_table_stats *stats, int cl
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_table_hash_lru_ops)
 struct rte_table_ops rte_table_hash_lru_ops = {
 	.f_create = rte_table_hash_lru_create,
 	.f_free = rte_table_hash_lru_free,
diff --git a/lib/table/rte_table_lpm.c b/lib/table/rte_table_lpm.c
index 3e10c14d40..9387260679 100644
--- a/lib/table/rte_table_lpm.c
+++ b/lib/table/rte_table_lpm.c
@@ -355,6 +355,7 @@ rte_table_lpm_stats_read(void *table, struct rte_table_stats *stats, int clear)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_table_lpm_ops)
 struct rte_table_ops rte_table_lpm_ops = {
 	.f_create = rte_table_lpm_create,
 	.f_free = rte_table_lpm_free,
diff --git a/lib/table/rte_table_lpm_ipv6.c b/lib/table/rte_table_lpm_ipv6.c
index dea11130d3..50ab87d5a9 100644
--- a/lib/table/rte_table_lpm_ipv6.c
+++ b/lib/table/rte_table_lpm_ipv6.c
@@ -356,6 +356,7 @@ rte_table_lpm_ipv6_stats_read(void *table, struct rte_table_stats *stats, int cl
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_table_lpm_ipv6_ops)
 struct rte_table_ops rte_table_lpm_ipv6_ops = {
 	.f_create = rte_table_lpm_ipv6_create,
 	.f_free = rte_table_lpm_ipv6_free,
diff --git a/lib/table/rte_table_stub.c b/lib/table/rte_table_stub.c
index 7147f7146e..cd5e2e0127 100644
--- a/lib/table/rte_table_stub.c
+++ b/lib/table/rte_table_stub.c
@@ -81,6 +81,7 @@ rte_table_stub_stats_read(void *table, struct rte_table_stats *stats, int clear)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_table_stub_ops)
 struct rte_table_ops rte_table_stub_ops = {
 	.f_create = rte_table_stub_create,
 	.f_free = NULL,
diff --git a/lib/telemetry/telemetry.c b/lib/telemetry/telemetry.c
index 31a2c91c06..57b758ec4d 100644
--- a/lib/telemetry/telemetry.c
+++ b/lib/telemetry/telemetry.c
@@ -114,12 +114,14 @@ register_cmd(const char *cmd, const char *help,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_telemetry_register_cmd)
 int
 rte_telemetry_register_cmd(const char *cmd, telemetry_cb fn, const char *help)
 {
 	return register_cmd(cmd, help, fn, NULL, NULL);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_telemetry_register_cmd_arg, 24.11)
 int
 rte_telemetry_register_cmd_arg(const char *cmd, telemetry_arg_cb fn, void *arg, const char *help)
 {
@@ -652,6 +654,7 @@ telemetry_v2_init(void)
 
 #endif /* !RTE_EXEC_ENV_WINDOWS */
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_telemetry_init)
 int32_t
 rte_telemetry_init(const char *runtime_dir, const char *rte_version, rte_cpuset_t *cpuset)
 {
diff --git a/lib/telemetry/telemetry_data.c b/lib/telemetry/telemetry_data.c
index 3b1a2408df..29e6134427 100644
--- a/lib/telemetry/telemetry_data.c
+++ b/lib/telemetry/telemetry_data.c
@@ -16,6 +16,7 @@
 
 #define RTE_TEL_UINT_HEX_STR_BUF_LEN 64
 
+RTE_EXPORT_SYMBOL(rte_tel_data_start_array)
 int
 rte_tel_data_start_array(struct rte_tel_data *d, enum rte_tel_value_type type)
 {
@@ -30,6 +31,7 @@ rte_tel_data_start_array(struct rte_tel_data *d, enum rte_tel_value_type type)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_tel_data_start_dict)
 int
 rte_tel_data_start_dict(struct rte_tel_data *d)
 {
@@ -38,6 +40,7 @@ rte_tel_data_start_dict(struct rte_tel_data *d)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_tel_data_string)
 int
 rte_tel_data_string(struct rte_tel_data *d, const char *str)
 {
@@ -50,6 +53,7 @@ rte_tel_data_string(struct rte_tel_data *d, const char *str)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_tel_data_add_array_string)
 int
 rte_tel_data_add_array_string(struct rte_tel_data *d, const char *str)
 {
@@ -62,6 +66,7 @@ rte_tel_data_add_array_string(struct rte_tel_data *d, const char *str)
 	return bytes < RTE_TEL_MAX_STRING_LEN ? 0 : E2BIG;
 }
 
+RTE_EXPORT_SYMBOL(rte_tel_data_add_array_int)
 int
 rte_tel_data_add_array_int(struct rte_tel_data *d, int64_t x)
 {
@@ -73,6 +78,7 @@ rte_tel_data_add_array_int(struct rte_tel_data *d, int64_t x)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_tel_data_add_array_uint)
 int
 rte_tel_data_add_array_uint(struct rte_tel_data *d, uint64_t x)
 {
@@ -84,12 +90,14 @@ rte_tel_data_add_array_uint(struct rte_tel_data *d, uint64_t x)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_tel_data_add_array_u64)
 int
 rte_tel_data_add_array_u64(struct rte_tel_data *d, uint64_t x)
 {
 	return rte_tel_data_add_array_uint(d, x);
 }
 
+RTE_EXPORT_SYMBOL(rte_tel_data_add_array_container)
 int
 rte_tel_data_add_array_container(struct rte_tel_data *d,
 		struct rte_tel_data *val, int keep)
@@ -122,6 +130,7 @@ rte_tel_uint_to_hex_encoded_str(char *buf, size_t buf_len, uint64_t val,
 	return len < (int)buf_len ? 0 : -EINVAL;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_tel_data_add_array_uint_hex, 23.03)
 int
 rte_tel_data_add_array_uint_hex(struct rte_tel_data *d, uint64_t val,
 				uint8_t display_bitwidth)
@@ -152,6 +161,7 @@ valid_name(const char *name)
 	return true;
 }
 
+RTE_EXPORT_SYMBOL(rte_tel_data_add_dict_string)
 int
 rte_tel_data_add_dict_string(struct rte_tel_data *d, const char *name,
 		const char *val)
@@ -177,6 +187,7 @@ rte_tel_data_add_dict_string(struct rte_tel_data *d, const char *name,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_tel_data_add_dict_int)
 int
 rte_tel_data_add_dict_int(struct rte_tel_data *d, const char *name, int64_t val)
 {
@@ -196,6 +207,7 @@ rte_tel_data_add_dict_int(struct rte_tel_data *d, const char *name, int64_t val)
 	return bytes < RTE_TEL_MAX_STRING_LEN ? 0 : E2BIG;
 }
 
+RTE_EXPORT_SYMBOL(rte_tel_data_add_dict_uint)
 int
 rte_tel_data_add_dict_uint(struct rte_tel_data *d,
 		const char *name, uint64_t val)
@@ -216,12 +228,14 @@ rte_tel_data_add_dict_uint(struct rte_tel_data *d,
 	return bytes < RTE_TEL_MAX_STRING_LEN ? 0 : E2BIG;
 }
 
+RTE_EXPORT_SYMBOL(rte_tel_data_add_dict_u64)
 int
 rte_tel_data_add_dict_u64(struct rte_tel_data *d, const char *name, uint64_t val)
 {
 	return rte_tel_data_add_dict_uint(d, name, val);
 }
 
+RTE_EXPORT_SYMBOL(rte_tel_data_add_dict_container)
 int
 rte_tel_data_add_dict_container(struct rte_tel_data *d, const char *name,
 		struct rte_tel_data *val, int keep)
@@ -247,6 +261,7 @@ rte_tel_data_add_dict_container(struct rte_tel_data *d, const char *name,
 	return bytes < RTE_TEL_MAX_STRING_LEN ? 0 : E2BIG;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_tel_data_add_dict_uint_hex, 23.03)
 int
 rte_tel_data_add_dict_uint_hex(struct rte_tel_data *d, const char *name,
 			       uint64_t val, uint8_t display_bitwidth)
@@ -263,12 +278,14 @@ rte_tel_data_add_dict_uint_hex(struct rte_tel_data *d, const char *name,
 	return rte_tel_data_add_dict_string(d, name, hex_str);
 }
 
+RTE_EXPORT_SYMBOL(rte_tel_data_alloc)
 struct rte_tel_data *
 rte_tel_data_alloc(void)
 {
 	return malloc(sizeof(struct rte_tel_data));
 }
 
+RTE_EXPORT_SYMBOL(rte_tel_data_free)
 void
 rte_tel_data_free(struct rte_tel_data *data)
 {
diff --git a/lib/telemetry/telemetry_legacy.c b/lib/telemetry/telemetry_legacy.c
index 578230732c..bb7018f7a7 100644
--- a/lib/telemetry/telemetry_legacy.c
+++ b/lib/telemetry/telemetry_legacy.c
@@ -52,6 +52,7 @@ struct json_command callbacks[TELEMETRY_LEGACY_MAX_CALLBACKS] = {
 int num_legacy_callbacks = 1;
 static rte_spinlock_t callback_sl = RTE_SPINLOCK_INITIALIZER;
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_telemetry_legacy_register)
 int
 rte_telemetry_legacy_register(const char *cmd,
 		enum rte_telemetry_legacy_data_req data_req,
diff --git a/lib/timer/rte_timer.c b/lib/timer/rte_timer.c
index bb8b6a651d..380c2a83bd 100644
--- a/lib/timer/rte_timer.c
+++ b/lib/timer/rte_timer.c
@@ -84,6 +84,7 @@ timer_data_valid(uint32_t id)
 	timer_data = &rte_timer_data_arr[id];				\
 } while (0)
 
+RTE_EXPORT_SYMBOL(rte_timer_data_alloc)
 int
 rte_timer_data_alloc(uint32_t *id_ptr)
 {
@@ -108,6 +109,7 @@ rte_timer_data_alloc(uint32_t *id_ptr)
 	return -ENOSPC;
 }
 
+RTE_EXPORT_SYMBOL(rte_timer_data_dealloc)
 int
 rte_timer_data_dealloc(uint32_t id)
 {
@@ -125,6 +127,7 @@ rte_timer_data_dealloc(uint32_t id)
  * secondary processes should be empty, the zeroth entry can be shared by
  * multiple processes.
  */
+RTE_EXPORT_SYMBOL(rte_timer_subsystem_init)
 int
 rte_timer_subsystem_init(void)
 {
@@ -184,6 +187,7 @@ rte_timer_subsystem_init(void)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_timer_subsystem_finalize)
 void
 rte_timer_subsystem_finalize(void)
 {
@@ -203,6 +207,7 @@ rte_timer_subsystem_finalize(void)
 }
 
 /* Initialize the timer handle tim for use */
+RTE_EXPORT_SYMBOL(rte_timer_init)
 void
 rte_timer_init(struct rte_timer *tim)
 {
@@ -539,6 +544,7 @@ __rte_timer_reset(struct rte_timer *tim, uint64_t expire,
 }
 
 /* Reset and start the timer associated with the timer handle tim */
+RTE_EXPORT_SYMBOL(rte_timer_reset)
 int
 rte_timer_reset(struct rte_timer *tim, uint64_t ticks,
 		      enum rte_timer_type type, unsigned int tim_lcore,
@@ -548,6 +554,7 @@ rte_timer_reset(struct rte_timer *tim, uint64_t ticks,
 				   tim_lcore, fct, arg);
 }
 
+RTE_EXPORT_SYMBOL(rte_timer_alt_reset)
 int
 rte_timer_alt_reset(uint32_t timer_data_id, struct rte_timer *tim,
 		    uint64_t ticks, enum rte_timer_type type,
@@ -569,6 +576,7 @@ rte_timer_alt_reset(uint32_t timer_data_id, struct rte_timer *tim,
 }
 
 /* loop until rte_timer_reset() succeed */
+RTE_EXPORT_SYMBOL(rte_timer_reset_sync)
 void
 rte_timer_reset_sync(struct rte_timer *tim, uint64_t ticks,
 		     enum rte_timer_type type, unsigned tim_lcore,
@@ -618,12 +626,14 @@ __rte_timer_stop(struct rte_timer *tim,
 }
 
 /* Stop the timer associated with the timer handle tim */
+RTE_EXPORT_SYMBOL(rte_timer_stop)
 int
 rte_timer_stop(struct rte_timer *tim)
 {
 	return rte_timer_alt_stop(default_data_id, tim);
 }
 
+RTE_EXPORT_SYMBOL(rte_timer_alt_stop)
 int
 rte_timer_alt_stop(uint32_t timer_data_id, struct rte_timer *tim)
 {
@@ -635,6 +645,7 @@ rte_timer_alt_stop(uint32_t timer_data_id, struct rte_timer *tim)
 }
 
 /* loop until rte_timer_stop() succeed */
+RTE_EXPORT_SYMBOL(rte_timer_stop_sync)
 void
 rte_timer_stop_sync(struct rte_timer *tim)
 {
@@ -643,6 +654,7 @@ rte_timer_stop_sync(struct rte_timer *tim)
 }
 
 /* Test the PENDING status of the timer handle tim */
+RTE_EXPORT_SYMBOL(rte_timer_pending)
 int
 rte_timer_pending(struct rte_timer *tim)
 {
@@ -777,6 +789,7 @@ __rte_timer_manage(struct rte_timer_data *timer_data)
 	priv_timer[lcore_id].running_tim = NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_timer_manage)
 int
 rte_timer_manage(void)
 {
@@ -789,6 +802,7 @@ rte_timer_manage(void)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_timer_alt_manage)
 int
 rte_timer_alt_manage(uint32_t timer_data_id,
 		     unsigned int *poll_lcores,
@@ -970,6 +984,7 @@ rte_timer_alt_manage(uint32_t timer_data_id,
 }
 
 /* Walk pending lists, stopping timers and calling user-specified function */
+RTE_EXPORT_SYMBOL(rte_timer_stop_all)
 int
 rte_timer_stop_all(uint32_t timer_data_id, unsigned int *walk_lcores,
 		   int nb_walk_lcores,
@@ -1002,6 +1017,7 @@ rte_timer_stop_all(uint32_t timer_data_id, unsigned int *walk_lcores,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_timer_next_ticks)
 int64_t
 rte_timer_next_ticks(void)
 {
@@ -1055,12 +1071,14 @@ __rte_timer_dump_stats(struct rte_timer_data *timer_data __rte_unused, FILE *f)
 #endif
 }
 
+RTE_EXPORT_SYMBOL(rte_timer_dump_stats)
 int
 rte_timer_dump_stats(FILE *f)
 {
 	return rte_timer_alt_dump_stats(default_data_id, f);
 }
 
+RTE_EXPORT_SYMBOL(rte_timer_alt_dump_stats)
 int
 rte_timer_alt_dump_stats(uint32_t timer_data_id __rte_unused, FILE *f)
 {
diff --git a/lib/vhost/socket.c b/lib/vhost/socket.c
index 4c6c551c3d..cfe9d3f52d 100644
--- a/lib/vhost/socket.c
+++ b/lib/vhost/socket.c
@@ -571,6 +571,7 @@ find_vhost_user_socket(const char *path)
 	return NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_driver_attach_vdpa_device)
 int
 rte_vhost_driver_attach_vdpa_device(const char *path,
 		struct rte_vdpa_device *dev)
@@ -589,6 +590,7 @@ rte_vhost_driver_attach_vdpa_device(const char *path,
 	return vsocket ? 0 : -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_driver_detach_vdpa_device)
 int
 rte_vhost_driver_detach_vdpa_device(const char *path)
 {
@@ -603,6 +605,7 @@ rte_vhost_driver_detach_vdpa_device(const char *path)
 	return vsocket ? 0 : -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_driver_get_vdpa_device)
 struct rte_vdpa_device *
 rte_vhost_driver_get_vdpa_device(const char *path)
 {
@@ -618,6 +621,7 @@ rte_vhost_driver_get_vdpa_device(const char *path)
 	return dev;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_driver_get_vdpa_dev_type)
 int
 rte_vhost_driver_get_vdpa_dev_type(const char *path, uint32_t *type)
 {
@@ -646,6 +650,7 @@ rte_vhost_driver_get_vdpa_dev_type(const char *path, uint32_t *type)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_driver_disable_features)
 int
 rte_vhost_driver_disable_features(const char *path, uint64_t features)
 {
@@ -666,6 +671,7 @@ rte_vhost_driver_disable_features(const char *path, uint64_t features)
 	return vsocket ? 0 : -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_driver_enable_features)
 int
 rte_vhost_driver_enable_features(const char *path, uint64_t features)
 {
@@ -689,6 +695,7 @@ rte_vhost_driver_enable_features(const char *path, uint64_t features)
 	return vsocket ? 0 : -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_driver_set_features)
 int
 rte_vhost_driver_set_features(const char *path, uint64_t features)
 {
@@ -710,6 +717,7 @@ rte_vhost_driver_set_features(const char *path, uint64_t features)
 	return vsocket ? 0 : -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_driver_get_features)
 int
 rte_vhost_driver_get_features(const char *path, uint64_t *features)
 {
@@ -745,6 +753,7 @@ rte_vhost_driver_get_features(const char *path, uint64_t *features)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_driver_set_protocol_features)
 int
 rte_vhost_driver_set_protocol_features(const char *path,
 		uint64_t protocol_features)
@@ -759,6 +768,7 @@ rte_vhost_driver_set_protocol_features(const char *path,
 	return vsocket ? 0 : -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_driver_get_protocol_features)
 int
 rte_vhost_driver_get_protocol_features(const char *path,
 		uint64_t *protocol_features)
@@ -797,6 +807,7 @@ rte_vhost_driver_get_protocol_features(const char *path,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_driver_get_queue_num)
 int
 rte_vhost_driver_get_queue_num(const char *path, uint32_t *queue_num)
 {
@@ -832,6 +843,7 @@ rte_vhost_driver_get_queue_num(const char *path, uint32_t *queue_num)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_driver_set_max_queue_num)
 int
 rte_vhost_driver_set_max_queue_num(const char *path, uint32_t max_queue_pairs)
 {
@@ -889,6 +901,7 @@ vhost_user_socket_mem_free(struct vhost_user_socket *vsocket)
  * (the default case), or client (when RTE_VHOST_USER_CLIENT) flag
  * is set.
  */
+RTE_EXPORT_SYMBOL(rte_vhost_driver_register)
 int
 rte_vhost_driver_register(const char *path, uint64_t flags)
 {
@@ -1054,6 +1067,7 @@ vhost_user_remove_reconnect(struct vhost_user_socket *vsocket)
 /**
  * Unregister the specified vhost socket
  */
+RTE_EXPORT_SYMBOL(rte_vhost_driver_unregister)
 int
 rte_vhost_driver_unregister(const char *path)
 {
@@ -1137,6 +1151,7 @@ rte_vhost_driver_unregister(const char *path)
 /*
  * Register ops so that we can add/remove device to data core.
  */
+RTE_EXPORT_SYMBOL(rte_vhost_driver_callback_register)
 int
 rte_vhost_driver_callback_register(const char *path,
 	struct rte_vhost_device_ops const * const ops)
@@ -1164,6 +1179,7 @@ vhost_driver_callback_get(const char *path)
 	return vsocket ? vsocket->notify_ops : NULL;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_driver_start)
 int
 rte_vhost_driver_start(const char *path)
 {
diff --git a/lib/vhost/vdpa.c b/lib/vhost/vdpa.c
index 329dd572b7..fa99a835f7 100644
--- a/lib/vhost/vdpa.c
+++ b/lib/vhost/vdpa.c
@@ -49,6 +49,7 @@ __vdpa_find_device_by_name(const char *name)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_vdpa_find_device_by_name)
 struct rte_vdpa_device *
 rte_vdpa_find_device_by_name(const char *name)
 {
@@ -61,6 +62,7 @@ rte_vdpa_find_device_by_name(const char *name)
 	return dev;
 }
 
+RTE_EXPORT_SYMBOL(rte_vdpa_get_rte_device)
 struct rte_device *
 rte_vdpa_get_rte_device(struct rte_vdpa_device *vdpa_dev)
 {
@@ -70,6 +72,7 @@ rte_vdpa_get_rte_device(struct rte_vdpa_device *vdpa_dev)
 	return vdpa_dev->device;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_vdpa_register_device)
 struct rte_vdpa_device *
 rte_vdpa_register_device(struct rte_device *rte_dev,
 		struct rte_vdpa_dev_ops *ops)
@@ -125,6 +128,7 @@ rte_vdpa_register_device(struct rte_device *rte_dev,
 	return dev;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_vdpa_unregister_device)
 int
 rte_vdpa_unregister_device(struct rte_vdpa_device *dev)
 {
@@ -146,6 +150,7 @@ rte_vdpa_unregister_device(struct rte_vdpa_device *dev)
 	return ret;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_vdpa_relay_vring_used)
 int
 rte_vdpa_relay_vring_used(int vid, uint16_t qid, void *vring_m)
 {
@@ -257,6 +262,7 @@ rte_vdpa_relay_vring_used(int vid, uint16_t qid, void *vring_m)
 	return -1;
 }
 
+RTE_EXPORT_SYMBOL(rte_vdpa_get_queue_num)
 int
 rte_vdpa_get_queue_num(struct rte_vdpa_device *dev, uint32_t *queue_num)
 {
@@ -266,6 +272,7 @@ rte_vdpa_get_queue_num(struct rte_vdpa_device *dev, uint32_t *queue_num)
 	return dev->ops->get_queue_num(dev, queue_num);
 }
 
+RTE_EXPORT_SYMBOL(rte_vdpa_get_features)
 int
 rte_vdpa_get_features(struct rte_vdpa_device *dev, uint64_t *features)
 {
@@ -275,6 +282,7 @@ rte_vdpa_get_features(struct rte_vdpa_device *dev, uint64_t *features)
 	return dev->ops->get_features(dev, features);
 }
 
+RTE_EXPORT_SYMBOL(rte_vdpa_get_protocol_features)
 int
 rte_vdpa_get_protocol_features(struct rte_vdpa_device *dev, uint64_t *features)
 {
@@ -285,6 +293,7 @@ rte_vdpa_get_protocol_features(struct rte_vdpa_device *dev, uint64_t *features)
 	return dev->ops->get_protocol_features(dev, features);
 }
 
+RTE_EXPORT_SYMBOL(rte_vdpa_get_stats_names)
 int
 rte_vdpa_get_stats_names(struct rte_vdpa_device *dev,
 		struct rte_vdpa_stat_name *stats_names,
@@ -299,6 +308,7 @@ rte_vdpa_get_stats_names(struct rte_vdpa_device *dev,
 	return dev->ops->get_stats_names(dev, stats_names, size);
 }
 
+RTE_EXPORT_SYMBOL(rte_vdpa_get_stats)
 int
 rte_vdpa_get_stats(struct rte_vdpa_device *dev, uint16_t qid,
 		struct rte_vdpa_stat *stats, unsigned int n)
@@ -312,6 +322,7 @@ rte_vdpa_get_stats(struct rte_vdpa_device *dev, uint16_t qid,
 	return dev->ops->get_stats(dev, qid, stats, n);
 }
 
+RTE_EXPORT_SYMBOL(rte_vdpa_reset_stats)
 int
 rte_vdpa_reset_stats(struct rte_vdpa_device *dev, uint16_t qid)
 {
diff --git a/lib/vhost/vhost.c b/lib/vhost/vhost.c
index f01ae6130e..8f48d690cf 100644
--- a/lib/vhost/vhost.c
+++ b/lib/vhost/vhost.c
@@ -860,6 +860,7 @@ vhost_enable_linearbuf(int vid)
 	dev->linearbuf = 1;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_get_mtu)
 int
 rte_vhost_get_mtu(int vid, uint16_t *mtu)
 {
@@ -879,6 +880,7 @@ rte_vhost_get_mtu(int vid, uint16_t *mtu)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_get_numa_node)
 int
 rte_vhost_get_numa_node(int vid)
 {
@@ -905,6 +907,7 @@ rte_vhost_get_numa_node(int vid)
 #endif
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_get_vring_num)
 uint16_t
 rte_vhost_get_vring_num(int vid)
 {
@@ -916,6 +919,7 @@ rte_vhost_get_vring_num(int vid)
 	return dev->nr_vring;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_get_ifname)
 int
 rte_vhost_get_ifname(int vid, char *buf, size_t len)
 {
@@ -932,6 +936,7 @@ rte_vhost_get_ifname(int vid, char *buf, size_t len)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_get_negotiated_features)
 int
 rte_vhost_get_negotiated_features(int vid, uint64_t *features)
 {
@@ -945,6 +950,7 @@ rte_vhost_get_negotiated_features(int vid, uint64_t *features)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_get_negotiated_protocol_features)
 int
 rte_vhost_get_negotiated_protocol_features(int vid,
 					   uint64_t *protocol_features)
@@ -959,6 +965,7 @@ rte_vhost_get_negotiated_protocol_features(int vid,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_get_mem_table)
 int
 rte_vhost_get_mem_table(int vid, struct rte_vhost_memory **mem)
 {
@@ -982,6 +989,7 @@ rte_vhost_get_mem_table(int vid, struct rte_vhost_memory **mem)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_get_vhost_vring)
 int
 rte_vhost_get_vhost_vring(int vid, uint16_t vring_idx,
 			  struct rte_vhost_vring *vring)
@@ -1018,6 +1026,7 @@ rte_vhost_get_vhost_vring(int vid, uint16_t vring_idx,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_get_vhost_ring_inflight)
 int
 rte_vhost_get_vhost_ring_inflight(int vid, uint16_t vring_idx,
 				  struct rte_vhost_ring_inflight *vring)
@@ -1053,6 +1062,7 @@ rte_vhost_get_vhost_ring_inflight(int vid, uint16_t vring_idx,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_set_inflight_desc_split)
 int
 rte_vhost_set_inflight_desc_split(int vid, uint16_t vring_idx,
 				  uint16_t idx)
@@ -1089,6 +1099,7 @@ rte_vhost_set_inflight_desc_split(int vid, uint16_t vring_idx,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_set_inflight_desc_packed)
 int
 rte_vhost_set_inflight_desc_packed(int vid, uint16_t vring_idx,
 				   uint16_t head, uint16_t last,
@@ -1157,6 +1168,7 @@ rte_vhost_set_inflight_desc_packed(int vid, uint16_t vring_idx,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_clr_inflight_desc_split)
 int
 rte_vhost_clr_inflight_desc_split(int vid, uint16_t vring_idx,
 				  uint16_t last_used_idx, uint16_t idx)
@@ -1198,6 +1210,7 @@ rte_vhost_clr_inflight_desc_split(int vid, uint16_t vring_idx,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_clr_inflight_desc_packed)
 int
 rte_vhost_clr_inflight_desc_packed(int vid, uint16_t vring_idx,
 				   uint16_t head)
@@ -1244,6 +1257,7 @@ rte_vhost_clr_inflight_desc_packed(int vid, uint16_t vring_idx,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_set_last_inflight_io_split)
 int
 rte_vhost_set_last_inflight_io_split(int vid, uint16_t vring_idx,
 				     uint16_t idx)
@@ -1279,6 +1293,7 @@ rte_vhost_set_last_inflight_io_split(int vid, uint16_t vring_idx,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_set_last_inflight_io_packed)
 int
 rte_vhost_set_last_inflight_io_packed(int vid, uint16_t vring_idx,
 				      uint16_t head)
@@ -1329,6 +1344,7 @@ rte_vhost_set_last_inflight_io_packed(int vid, uint16_t vring_idx,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_vring_call)
 int
 rte_vhost_vring_call(int vid, uint16_t vring_idx)
 {
@@ -1365,6 +1381,7 @@ rte_vhost_vring_call(int vid, uint16_t vring_idx)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_vring_call_nonblock)
 int
 rte_vhost_vring_call_nonblock(int vid, uint16_t vring_idx)
 {
@@ -1402,6 +1419,7 @@ rte_vhost_vring_call_nonblock(int vid, uint16_t vring_idx)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_avail_entries)
 uint16_t
 rte_vhost_avail_entries(int vid, uint16_t queue_id)
 {
@@ -1498,6 +1516,7 @@ vhost_enable_guest_notification(struct virtio_net *dev,
 		return vhost_enable_notify_split(dev, vq, enable);
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_enable_guest_notification)
 int
 rte_vhost_enable_guest_notification(int vid, uint16_t queue_id, int enable)
 {
@@ -1531,6 +1550,7 @@ rte_vhost_enable_guest_notification(int vid, uint16_t queue_id, int enable)
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_vhost_notify_guest, 23.07)
 void
 rte_vhost_notify_guest(int vid, uint16_t queue_id)
 {
@@ -1567,6 +1587,7 @@ rte_vhost_notify_guest(int vid, uint16_t queue_id)
 	rte_rwlock_read_unlock(&vq->access_lock);
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_log_write)
 void
 rte_vhost_log_write(int vid, uint64_t addr, uint64_t len)
 {
@@ -1578,6 +1599,7 @@ rte_vhost_log_write(int vid, uint64_t addr, uint64_t len)
 	vhost_log_write(dev, addr, len);
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_log_used_vring)
 void
 rte_vhost_log_used_vring(int vid, uint16_t vring_idx,
 			 uint64_t offset, uint64_t len)
@@ -1598,6 +1620,7 @@ rte_vhost_log_used_vring(int vid, uint16_t vring_idx,
 	vhost_log_used_vring(dev, vq, offset, len);
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_rx_queue_count)
 uint32_t
 rte_vhost_rx_queue_count(int vid, uint16_t qid)
 {
@@ -1635,6 +1658,7 @@ rte_vhost_rx_queue_count(int vid, uint16_t qid)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_get_vdpa_device)
 struct rte_vdpa_device *
 rte_vhost_get_vdpa_device(int vid)
 {
@@ -1646,6 +1670,7 @@ rte_vhost_get_vdpa_device(int vid)
 	return dev->vdpa_dev;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_get_log_base)
 int
 rte_vhost_get_log_base(int vid, uint64_t *log_base,
 		uint64_t *log_size)
@@ -1661,6 +1686,7 @@ rte_vhost_get_log_base(int vid, uint64_t *log_base,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_get_vring_base)
 int
 rte_vhost_get_vring_base(int vid, uint16_t queue_id,
 		uint16_t *last_avail_idx, uint16_t *last_used_idx)
@@ -1691,6 +1717,7 @@ rte_vhost_get_vring_base(int vid, uint16_t queue_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_set_vring_base)
 int
 rte_vhost_set_vring_base(int vid, uint16_t queue_id,
 		uint16_t last_avail_idx, uint16_t last_used_idx)
@@ -1723,6 +1750,7 @@ rte_vhost_set_vring_base(int vid, uint16_t queue_id,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_get_vring_base_from_inflight)
 int
 rte_vhost_get_vring_base_from_inflight(int vid,
 				       uint16_t queue_id,
@@ -1757,6 +1785,7 @@ rte_vhost_get_vring_base_from_inflight(int vid,
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_extern_callback_register)
 int
 rte_vhost_extern_callback_register(int vid,
 		struct rte_vhost_user_extern_ops const * const ops, void *ctx)
@@ -1844,6 +1873,7 @@ async_channel_register(struct virtio_net *dev, struct vhost_virtqueue *vq)
 	return -1;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_vhost_async_channel_register, 20.08)
 int
 rte_vhost_async_channel_register(int vid, uint16_t queue_id)
 {
@@ -1877,6 +1907,7 @@ rte_vhost_async_channel_register(int vid, uint16_t queue_id)
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_vhost_async_channel_register_thread_unsafe, 21.08)
 int
 rte_vhost_async_channel_register_thread_unsafe(int vid, uint16_t queue_id)
 {
@@ -1899,6 +1930,7 @@ rte_vhost_async_channel_register_thread_unsafe(int vid, uint16_t queue_id)
 	return async_channel_register(dev, vq);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_vhost_async_channel_unregister, 20.08)
 int
 rte_vhost_async_channel_unregister(int vid, uint16_t queue_id)
 {
@@ -1945,6 +1977,7 @@ rte_vhost_async_channel_unregister(int vid, uint16_t queue_id)
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_vhost_async_channel_unregister_thread_unsafe, 21.08)
 int
 rte_vhost_async_channel_unregister_thread_unsafe(int vid, uint16_t queue_id)
 {
@@ -1979,6 +2012,7 @@ rte_vhost_async_channel_unregister_thread_unsafe(int vid, uint16_t queue_id)
 	return 0;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_vhost_async_dma_configure, 22.03)
 int
 rte_vhost_async_dma_configure(int16_t dma_id, uint16_t vchan_id)
 {
@@ -2055,6 +2089,7 @@ rte_vhost_async_dma_configure(int16_t dma_id, uint16_t vchan_id)
 	return -1;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_vhost_async_get_inflight, 21.08)
 int
 rte_vhost_async_get_inflight(int vid, uint16_t queue_id)
 {
@@ -2093,6 +2128,7 @@ rte_vhost_async_get_inflight(int vid, uint16_t queue_id)
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_vhost_async_get_inflight_thread_unsafe, 22.07)
 int
 rte_vhost_async_get_inflight_thread_unsafe(int vid, uint16_t queue_id)
 {
@@ -2121,6 +2157,7 @@ rte_vhost_async_get_inflight_thread_unsafe(int vid, uint16_t queue_id)
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_get_monitor_addr)
 int
 rte_vhost_get_monitor_addr(int vid, uint16_t queue_id,
 		struct rte_vhost_power_monitor_cond *pmc)
@@ -2171,6 +2208,7 @@ rte_vhost_get_monitor_addr(int vid, uint16_t queue_id,
 }
 
 
+RTE_EXPORT_SYMBOL(rte_vhost_vring_stats_get_names)
 int
 rte_vhost_vring_stats_get_names(int vid, uint16_t queue_id,
 		struct rte_vhost_stat_name *name, unsigned int size)
@@ -2198,6 +2236,7 @@ rte_vhost_vring_stats_get_names(int vid, uint16_t queue_id,
 	return VHOST_NB_VQ_STATS;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_vring_stats_get)
 int
 rte_vhost_vring_stats_get(int vid, uint16_t queue_id,
 		struct rte_vhost_stat *stats, unsigned int n)
@@ -2244,6 +2283,7 @@ rte_vhost_vring_stats_get(int vid, uint16_t queue_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_vring_stats_reset)
 int rte_vhost_vring_stats_reset(int vid, uint16_t queue_id)
 {
 	struct virtio_net *dev = get_device(vid);
@@ -2279,6 +2319,7 @@ int rte_vhost_vring_stats_reset(int vid, uint16_t queue_id)
 	return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_vhost_async_dma_unconfigure, 22.11)
 int
 rte_vhost_async_dma_unconfigure(int16_t dma_id, uint16_t vchan_id)
 {
diff --git a/lib/vhost/vhost_crypto.c b/lib/vhost/vhost_crypto.c
index 3c6c5dc114..e6b1afbb31 100644
--- a/lib/vhost/vhost_crypto.c
+++ b/lib/vhost/vhost_crypto.c
@@ -1782,6 +1782,7 @@ vhost_crypto_complete_one_vm_requests(struct rte_crypto_op **ops,
 	return processed;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_crypto_driver_start)
 int
 rte_vhost_crypto_driver_start(const char *path)
 {
@@ -1803,6 +1804,7 @@ rte_vhost_crypto_driver_start(const char *path)
 	return rte_vhost_driver_start(path);
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_crypto_create)
 int
 rte_vhost_crypto_create(int vid, uint8_t cryptodev_id,
 		struct rte_mempool *sess_pool,
@@ -1886,6 +1888,7 @@ rte_vhost_crypto_create(int vid, uint8_t cryptodev_id,
 	return ret;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_crypto_free)
 int
 rte_vhost_crypto_free(int vid)
 {
@@ -1915,6 +1918,7 @@ rte_vhost_crypto_free(int vid)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_crypto_set_zero_copy)
 int
 rte_vhost_crypto_set_zero_copy(int vid, enum rte_vhost_crypto_zero_copy option)
 {
@@ -1970,6 +1974,7 @@ rte_vhost_crypto_set_zero_copy(int vid, enum rte_vhost_crypto_zero_copy option)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_crypto_fetch_requests)
 uint16_t
 rte_vhost_crypto_fetch_requests(int vid, uint32_t qid,
 		struct rte_crypto_op **ops, uint16_t nb_ops)
@@ -2099,6 +2104,7 @@ rte_vhost_crypto_fetch_requests(int vid, uint32_t qid,
 	return i;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_crypto_finalize_requests)
 uint16_t
 rte_vhost_crypto_finalize_requests(struct rte_crypto_op **ops,
 		uint16_t nb_ops, int *callfds, uint16_t *nb_callfds)
diff --git a/lib/vhost/vhost_user.c b/lib/vhost/vhost_user.c
index 26dc0bde97..902654a03c 100644
--- a/lib/vhost/vhost_user.c
+++ b/lib/vhost/vhost_user.c
@@ -3359,6 +3359,7 @@ vhost_user_iotlb_miss(struct virtio_net *dev, uint64_t iova, uint8_t perm)
 	return 0;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_backend_config_change)
 int
 rte_vhost_backend_config_change(int vid, bool need_reply)
 {
@@ -3421,6 +3422,7 @@ static int vhost_user_backend_set_vring_host_notifier(struct virtio_net *dev,
 	return ret;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(rte_vhost_host_notifier_ctrl)
 int rte_vhost_host_notifier_ctrl(int vid, uint16_t qid, bool enable)
 {
 	struct virtio_net *dev;
diff --git a/lib/vhost/virtio_net.c b/lib/vhost/virtio_net.c
index 0348e8dac3..37515d44b0 100644
--- a/lib/vhost/virtio_net.c
+++ b/lib/vhost/virtio_net.c
@@ -1739,6 +1739,7 @@ virtio_dev_rx(struct virtio_net *dev, struct vhost_virtqueue *vq,
 	return nb_tx;
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_enqueue_burst)
 uint16_t
 rte_vhost_enqueue_burst(int vid, uint16_t queue_id,
 	struct rte_mbuf **__rte_restrict pkts, uint16_t count)
@@ -2340,6 +2341,7 @@ vhost_poll_enqueue_completed(struct virtio_net *dev, struct vhost_virtqueue *vq,
 	return nr_cpl_pkts;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_vhost_poll_enqueue_completed, 20.08)
 uint16_t
 rte_vhost_poll_enqueue_completed(int vid, uint16_t queue_id,
 		struct rte_mbuf **pkts, uint16_t count, int16_t dma_id,
@@ -2395,6 +2397,7 @@ rte_vhost_poll_enqueue_completed(int vid, uint16_t queue_id,
 	return n_pkts_cpl;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_vhost_clear_queue_thread_unsafe, 21.08)
 uint16_t
 rte_vhost_clear_queue_thread_unsafe(int vid, uint16_t queue_id,
 		struct rte_mbuf **pkts, uint16_t count, int16_t dma_id,
@@ -2452,6 +2455,7 @@ rte_vhost_clear_queue_thread_unsafe(int vid, uint16_t queue_id,
 	return n_pkts_cpl;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_vhost_clear_queue, 22.07)
 uint16_t
 rte_vhost_clear_queue(int vid, uint16_t queue_id, struct rte_mbuf **pkts,
 		uint16_t count, int16_t dma_id, uint16_t vchan_id)
@@ -2567,6 +2571,7 @@ virtio_dev_rx_async_submit(struct virtio_net *dev, struct vhost_virtqueue *vq,
 	return nb_tx;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_vhost_submit_enqueue_burst, 20.08)
 uint16_t
 rte_vhost_submit_enqueue_burst(int vid, uint16_t queue_id,
 		struct rte_mbuf **pkts, uint16_t count, int16_t dma_id,
@@ -3588,6 +3593,7 @@ virtio_dev_tx_packed_compliant(struct virtio_net *dev,
 	return virtio_dev_tx_packed(dev, vq, mbuf_pool, pkts, count, false);
 }
 
+RTE_EXPORT_SYMBOL(rte_vhost_dequeue_burst)
 uint16_t
 rte_vhost_dequeue_burst(int vid, uint16_t queue_id,
 	struct rte_mempool *mbuf_pool, struct rte_mbuf **pkts, uint16_t count)
@@ -4197,6 +4203,7 @@ virtio_dev_tx_async_packed_compliant(struct virtio_net *dev, struct vhost_virtqu
 				pkts, count, dma_id, vchan_id, false);
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_vhost_async_try_dequeue_burst, 22.07)
 uint16_t
 rte_vhost_async_try_dequeue_burst(int vid, uint16_t queue_id,
 	struct rte_mempool *mbuf_pool, struct rte_mbuf **pkts, uint16_t count,
-- 
2.48.1


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [RFC v3 7/8] build: use dynamically generated version maps
  2025-03-11  9:55 ` [RFC v3 0/8] Symbol versioning and export rework David Marchand
                     ` (5 preceding siblings ...)
  2025-03-11  9:56   ` [RFC v3 6/8] build: mark exported symbols David Marchand
@ 2025-03-11  9:56   ` David Marchand
  2025-03-11  9:56   ` [RFC v3 8/8] build: remove static " David Marchand
  2025-03-11 10:18   ` [RFC v3 0/8] Symbol versioning and export rework Morten Brørup
  8 siblings, 0 replies; 17+ messages in thread
From: David Marchand @ 2025-03-11  9:56 UTC (permalink / raw)
  To: dev; +Cc: thomas, bruce.richardson, andremue, Aaron Conole, Michael Santana

Switch to always dynamically generate version maps.

As the map files get generated, tooling around checking, converting,
updating etc.. static version maps can be removed.

Signed-off-by: David Marchand <david.marchand@redhat.com>
---
 .github/workflows/build.yml                   |   1 -
 MAINTAINERS                                   |   7 -
 buildtools/check-symbols.sh                   |  33 +-
 buildtools/map-list-symbol.sh                 |   7 +-
 buildtools/map_to_win.py                      |  41 ---
 buildtools/meson.build                        |   1 -
 devtools/check-symbol-change.sh               | 186 -----------
 devtools/check-symbol-maps.sh                 | 101 ------
 devtools/checkpatches.sh                      |   2 +-
 devtools/update-abi.sh                        |  46 ---
 devtools/update_version_map_abi.py            | 210 ------------
 doc/guides/contributing/abi_policy.rst        |  21 +-
 doc/guides/contributing/coding_style.rst      |   7 -
 .../contributing/img/patch_cheatsheet.svg     | 303 ++++++++----------
 doc/guides/contributing/patches.rst           |   6 +-
 drivers/meson.build                           |  74 ++---
 lib/meson.build                               |  73 ++---
 17 files changed, 188 insertions(+), 931 deletions(-)
 delete mode 100644 buildtools/map_to_win.py
 delete mode 100755 devtools/check-symbol-change.sh
 delete mode 100755 devtools/check-symbol-maps.sh
 delete mode 100755 devtools/update-abi.sh
 delete mode 100755 devtools/update_version_map_abi.py

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index fba46b920f..e97b5cdb8b 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -31,7 +31,6 @@ jobs:
         failed=
         devtools/check-doc-vs-code.sh upstream/${{ env.REF_GIT_BRANCH }} || failed=true
         devtools/check-meson.py || failed=true
-        devtools/check-symbol-maps.sh || failed=true
         [ -z "$failed" ]
   ubuntu-vm-builds:
     name: ${{ join(matrix.config.*, '-') }}
diff --git a/MAINTAINERS b/MAINTAINERS
index 04772951d3..9474189035 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -88,7 +88,6 @@ M: Thomas Monjalon <thomas@monjalon.net>
 F: MAINTAINERS
 F: devtools/build-dict.sh
 F: devtools/check-abi.sh
-F: devtools/check-abi-version.sh
 F: devtools/check-doc-vs-code.sh
 F: devtools/check-dup-includes.sh
 F: devtools/check-maintainers.sh
@@ -96,17 +95,13 @@ F: devtools/check-forbidden-tokens.awk
 F: devtools/check-git-log.sh
 F: devtools/check-spdx-tag.sh
 F: devtools/check-symbol-change.py
-F: devtools/check-symbol-change.sh
-F: devtools/check-symbol-maps.sh
 F: devtools/checkpatches.sh
 F: devtools/get-maintainer.sh
 F: devtools/git-log-fixes.sh
 F: devtools/load-devel-config
 F: devtools/parse-flow-support.sh
 F: devtools/process-iwyu.py
-F: devtools/update-abi.sh
 F: devtools/update-patches.py
-F: devtools/update_version_map_abi.py
 F: devtools/libabigail.abignore
 F: devtools/words-case.txt
 F: license/
@@ -166,7 +161,6 @@ M: Tyler Retzlaff <roretzla@linux.microsoft.com>
 F: lib/eal/common/
 F: lib/eal/unix/
 F: lib/eal/include/
-F: lib/eal/version.map
 F: doc/guides/prog_guide/env_abstraction_layer.rst
 F: app/test/test_alarm.c
 F: app/test/test_atomic.c
@@ -396,7 +390,6 @@ Windows support
 M: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
 M: Tyler Retzlaff <roretzla@linux.microsoft.com>
 F: lib/eal/windows/
-F: buildtools/map_to_win.py
 F: doc/guides/windows_gsg/
 
 Windows memory allocation
diff --git a/buildtools/check-symbols.sh b/buildtools/check-symbols.sh
index b8ac24391e..0d6745ec14 100755
--- a/buildtools/check-symbols.sh
+++ b/buildtools/check-symbols.sh
@@ -7,29 +7,12 @@ OBJFILE=$2
 
 ROOTDIR=$(readlink -f $(dirname $(readlink -f $0))/..)
 LIST_SYMBOL=$ROOTDIR/buildtools/map-list-symbol.sh
-CHECK_SYMBOL_MAPS=$ROOTDIR/devtools/check-symbol-maps.sh
-
-# added check for "make -C test/" usage
-if [ ! -e $MAPFILE ] || [ ! -f $OBJFILE ]
-then
-	exit 0
-fi
-
-if [ -d $MAPFILE ]
-then
-	exit 0
-fi
-
 DUMPFILE=$(mktemp -t dpdk.${0##*/}.objdump.XXXXXX)
 trap 'rm -f "$DUMPFILE"' EXIT
 objdump -t $OBJFILE >$DUMPFILE
 
 ret=0
 
-if ! $CHECK_SYMBOL_MAPS $MAPFILE; then
-	ret=1
-fi
-
 for SYM in `$LIST_SYMBOL -S EXPERIMENTAL $MAPFILE |cut -d ' ' -f 3`
 do
 	if grep -q "\.text.*[[:space:]]$SYM$" $DUMPFILE &&
@@ -37,8 +20,7 @@ do
 		$LIST_SYMBOL -s $SYM $MAPFILE | grep -q EXPERIMENTAL
 	then
 		cat >&2 <<- END_OF_MESSAGE
-		$SYM is not flagged as experimental
-		but is listed in version map
+		$SYM is not flagged as experimental but is exported as an experimental symbol
 		Please add __rte_experimental to the definition of $SYM
 		END_OF_MESSAGE
 		ret=1
@@ -53,9 +35,8 @@ for SYM in `awk '{
 do
 	$LIST_SYMBOL -S EXPERIMENTAL -s $SYM -q $MAPFILE || {
 		cat >&2 <<- END_OF_MESSAGE
-		$SYM is flagged as experimental
-		but is not listed in version map
-		Please add $SYM to the version map
+		$SYM is flagged as experimental but is not exported as an experimental symbol
+		Please add RTE_EXPORT_EXPERIMENTAL_SYMBOL to the definition of $SYM
 		END_OF_MESSAGE
 		ret=1
 	}
@@ -67,8 +48,7 @@ do
 		! grep -q "\.text\.internal.*[[:space:]]$SYM$" $DUMPFILE
 	then
 		cat >&2 <<- END_OF_MESSAGE
-		$SYM is not flagged as internal
-		but is listed in version map
+		$SYM is not flagged as internal but is exported as an internal symbol
 		Please add __rte_internal to the definition of $SYM
 		END_OF_MESSAGE
 		ret=1
@@ -83,9 +63,8 @@ for SYM in `awk '{
 do
 	$LIST_SYMBOL -S INTERNAL -s $SYM -q $MAPFILE || {
 		cat >&2 <<- END_OF_MESSAGE
-		$SYM is flagged as internal
-		but is not listed in version map
-		Please add $SYM to the version map
+		$SYM is flagged as internal but is not exported as an internal symbol
+		Please add RTE_EXPORT_INTERNAL_SYMBOL to the definition of $SYM
 		END_OF_MESSAGE
 		ret=1
 	}
diff --git a/buildtools/map-list-symbol.sh b/buildtools/map-list-symbol.sh
index 0829df4be5..962d5f3271 100755
--- a/buildtools/map-list-symbol.sh
+++ b/buildtools/map-list-symbol.sh
@@ -42,7 +42,6 @@ for file in $@; do
 	cat "$file" |awk '
 	BEGIN {
 		current_section = "";
-		current_version = "";
 		if ("'$section'" == "all" && "'$symbol'" == "all" && "'$version'" == "") {
 			ret = 0;
 		} else {
@@ -54,15 +53,11 @@ for file in $@; do
 			current_section = $1;
 		}
 	}
-	/.*}/ { current_section = ""; current_version = ""; }
-	/^\t# added in / {
-		current_version=$4;
-	}
+	/.*}/ { current_section = ""; }
 	/^[^}].*[^:*];/ {
 		if (current_section == "") {
 			next;
 		}
-		symbol_version = current_version
 		if (/^[^}].*[^:*]; # added in /) {
 			symbol_version = $5
 		}
diff --git a/buildtools/map_to_win.py b/buildtools/map_to_win.py
deleted file mode 100644
index aa1752cacd..0000000000
--- a/buildtools/map_to_win.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/env python3
-# SPDX-License-Identifier: BSD-3-Clause
-# Copyright(c) 2019 Intel Corporation
-
-import sys
-
-
-def is_function_line(ln):
-    return ln.startswith('\t') and ln.endswith(';\n') and ":" not in ln and "# WINDOWS_NO_EXPORT" not in ln
-
-# MinGW keeps the original .map file but replaces per_lcore* to __emutls_v.per_lcore*
-def create_mingw_map_file(input_map, output_map):
-    with open(input_map) as f_in, open(output_map, 'w') as f_out:
-        f_out.writelines([lines.replace('per_lcore', '__emutls_v.per_lcore') for lines in f_in.readlines()])
-
-def main(args):
-    if not args[1].endswith('version.map') or \
-            not args[2].endswith('exports.def') and \
-            not args[2].endswith('mingw.map'):
-        return 1
-
-    if args[2].endswith('mingw.map'):
-        create_mingw_map_file(args[1], args[2])
-        return 0
-
-# generate def file from map file.
-# This works taking indented lines only which end with a ";" and which don't
-# have a colon in them, i.e. the lines defining functions only.
-    else:
-        with open(args[1]) as f_in:
-            functions = [ln[:-2] + '\n' for ln in sorted(f_in.readlines())
-                         if is_function_line(ln)]
-            functions = ["EXPORTS\n"] + functions
-
-    with open(args[2], 'w') as f_out:
-        f_out.writelines(functions)
-    return 0
-
-
-if __name__ == "__main__":
-    sys.exit(main(sys.argv))
diff --git a/buildtools/meson.build b/buildtools/meson.build
index b745e9afa4..1cd1ce02fd 100644
--- a/buildtools/meson.build
+++ b/buildtools/meson.build
@@ -18,7 +18,6 @@ endif
 echo = py3 + ['-c', 'import sys; print(*sys.argv[1:])']
 gen_version_map = py3 + files('gen-version-map.py')
 list_dir_globs = py3 + files('list-dir-globs.py')
-map_to_win_cmd = py3 + files('map_to_win.py')
 sphinx_wrapper = py3 + files('call-sphinx-build.py')
 get_cpu_count_cmd = py3 + files('get-cpu-count.py')
 get_numa_count_cmd = py3 + files('get-numa-count.py')
diff --git a/devtools/check-symbol-change.sh b/devtools/check-symbol-change.sh
deleted file mode 100755
index 8992214ac8..0000000000
--- a/devtools/check-symbol-change.sh
+++ /dev/null
@@ -1,186 +0,0 @@
-#!/bin/sh
-# SPDX-License-Identifier: BSD-3-Clause
-# Copyright(c) 2018 Neil Horman <nhorman@tuxdriver.com>
-
-build_map_changes()
-{
-	local fname="$1"
-	local mapdb="$2"
-
-	cat "$fname" | awk '
-		# Initialize our variables
-		BEGIN {map="";sym="";ar="";sec=""; in_sec=0; in_map=0}
-
-		# Anything that starts with + or -, followed by an a
-		# and ends in the string .map is the name of our map file
-		# This may appear multiple times in a patch if multiple
-		# map files are altered, and all section/symbol names
-		# appearing between a triggering of this rule and the
-		# next trigger of this rule are associated with this file
-		/[-+] [ab]\/.*\.map/ {map=$2; in_map=1; next}
-
-		# The previous rule catches all .map files, anything else
-		# indicates we left the map chunk.
-		/[-+] [ab]\// {in_map=0}
-
-		# Triggering this rule, which starts a line and ends it
-		# with a { identifies a versioned section.  The section name is
-		# the rest of the line with the + and { symbols removed.
-		# Triggering this rule sets in_sec to 1, which actives the
-		# symbol rule below
-		/^.*{/ {
-			gsub("+", "");
-			if (in_map == 1) {
-				sec=$(NF-1); in_sec=1;
-			}
-		}
-
-		# This rule identifies the end of a section, and disables the
-		# symbol rule
-		/.*}/ {in_sec=0}
-
-		# This rule matches on a + followed by any characters except a :
-		# (which denotes a global vs local segment), and ends with a ;.
-		# The semicolon is removed and the symbol is printed with its
-		# association file name and version section, along with an
-		# indicator that the symbol is a new addition.  Note this rule
-		# only works if we have found a version section in the rule
-		# above (hence the in_sec check) And found a map file (the
-		# in_map check).  If we are not in a map chunk, do nothing.  If
-		# we are in a map chunk but not a section chunk, record it as
-		# unknown.
-		/^+[^}].*[^:*];/ {gsub(";","");sym=$2;
-			if (in_map == 1) {
-				if (in_sec == 1) {
-					print map " " sym " " sec " add"
-				} else {
-					print map " " sym " unknown add"
-				}
-			}
-		}
-
-		# This is the same rule as above, but the rule matches on a
-		# leading - rather than a +, denoting that the symbol is being
-		# removed.
-		/^-[^}].*[^:*];/ {gsub(";","");sym=$2;
-			if (in_map == 1) {
-				if (in_sec == 1) {
-					print map " " sym " " sec " del"
-				} else {
-					print map " " sym " unknown del"
-				}
-			}
-		}' > "$mapdb"
-
-		sort -u "$mapdb" > "$mapdb.2"
-		mv -f "$mapdb.2" "$mapdb"
-
-}
-
-is_stable_section() {
-	[ "$1" != 'EXPERIMENTAL' ] && [ "$1" != 'INTERNAL' ]
-}
-
-check_for_rule_violations()
-{
-	local mapdb="$1"
-	local mname
-	local symname
-	local secname
-	local ar
-	local ret=0
-
-	while read mname symname secname ar
-	do
-		if [ "$ar" = "add" ]
-		then
-
-			if [ "$secname" = "unknown" ]
-			then
-				# Just inform the user of this occurrence, but
-				# don't flag it as an error
-				echo -n "INFO: symbol $symname is added but "
-				echo -n "patch has insufficient context "
-				echo -n "to determine the section name "
-				echo -n "please ensure the version is "
-				echo "EXPERIMENTAL"
-				continue
-			fi
-
-			oldsecname=$(sed -n \
-			"s#$mname $symname \(.*\) del#\1#p" "$mapdb")
-
-			# A symbol can not enter a stable section directly
-			if [ -z "$oldsecname" ]
-			then
-				if ! is_stable_section $secname
-				then
-					echo -n "INFO: symbol $symname has "
-					echo -n "been added to the "
-					echo -n "$secname section of the "
-					echo "version map"
-					continue
-				else
-					echo -n "ERROR: symbol $symname "
-					echo -n "is added in the $secname "
-					echo -n "section, but is expected to "
-					echo -n "be added in the EXPERIMENTAL "
-					echo "section of the version map"
-					ret=1
-					continue
-				fi
-			fi
-
-			# This symbol is moving inside a section, nothing to do
-			if [ "$oldsecname" = "$secname" ]
-			then
-				continue
-			fi
-
-			# This symbol is moving between two sections (the
-			# original section is a stable section).
-			# This can be legit, just warn.
-			if is_stable_section $oldsecname
-			then
-				echo -n "INFO: symbol $symname is being "
-				echo -n "moved from $oldsecname to $secname. "
-				echo -n "Ensure that it has gone through the "
-				echo "deprecation process"
-				continue
-			fi
-		else
-
-			if ! grep -q "$mname $symname .* add" "$mapdb" && \
-			   is_stable_section $secname
-			then
-				# Just inform users that stable
-				# symbols need to go through a deprecation
-				# process
-				echo -n "INFO: symbol $symname is being "
-				echo -n "removed, ensure that it has "
-				echo "gone through the deprecation process"
-			fi
-		fi
-	done < "$mapdb"
-
-	return $ret
-}
-
-trap clean_and_exit_on_sig EXIT
-
-mapfile=`mktemp -t dpdk.mapdb.XXXXXX`
-patch=$1
-exit_code=1
-
-clean_and_exit_on_sig()
-{
-	rm -f "$mapfile"
-	exit $exit_code
-}
-
-build_map_changes "$patch" "$mapfile"
-check_for_rule_violations "$mapfile"
-exit_code=$?
-rm -f "$mapfile"
-
-exit $exit_code
diff --git a/devtools/check-symbol-maps.sh b/devtools/check-symbol-maps.sh
deleted file mode 100755
index fcd3931e5d..0000000000
--- a/devtools/check-symbol-maps.sh
+++ /dev/null
@@ -1,101 +0,0 @@
-#! /bin/sh -e
-# SPDX-License-Identifier: BSD-3-Clause
-# Copyright 2018 Mellanox Technologies, Ltd
-
-cd $(dirname $0)/..
-
-# speed up by ignoring Unicode details
-export LC_ALL=C
-
-if [ $# = 0 ] ; then
-    set -- $(find lib drivers -name '*.map' -a ! -path drivers/version.map)
-fi
-
-ret=0
-
-find_orphan_symbols ()
-{
-    for map in $@ ; do
-        for sym in $(sed -rn 's,^([^}]*_.*);.*$,\1,p' $map) ; do
-            if echo $sym | grep -q '^per_lcore_' ; then
-                symsrc=${sym#per_lcore_}
-            elif echo $sym | grep -q '^__rte_.*_trace_' ; then
-                symsrc=${sym#__}
-            else
-                symsrc=$sym
-            fi
-            if [ -z "$(grep -rlw $symsrc $(dirname $map) | grep -v $map)" ] ; then
-                echo "$map: $sym"
-            fi
-        done
-    done
-}
-
-orphan_symbols=$(find_orphan_symbols $@)
-if [ -n "$orphan_symbols" ] ; then
-    echo "Found only in symbol map file:"
-    echo "$orphan_symbols" | sed 's,^,\t,'
-    ret=1
-fi
-
-find_duplicate_symbols ()
-{
-    for map in $@ ; do
-        buildtools/map-list-symbol.sh $map | \
-            sort | uniq -c | grep -v " 1 $map" || true
-    done
-}
-
-duplicate_symbols=$(find_duplicate_symbols $@)
-if [ -n "$duplicate_symbols" ] ; then
-    echo "Found duplicates in symbol map file:"
-    echo "$duplicate_symbols"
-    ret=1
-fi
-
-local_miss_maps=$(grep -L 'local: \*;' $@ || true)
-if [ -n "$local_miss_maps" ] ; then
-    echo "Found maps without local catch-all:"
-    echo "$local_miss_maps"
-    ret=1
-fi
-
-find_bad_format_maps ()
-{
-    abi_version=$(cut -d'.' -f 1 ABI_VERSION)
-    next_abi_version=$((abi_version + 1))
-    for map in $@ ; do
-        cat $map | awk '
-            /^(DPDK_('$abi_version'|'$next_abi_version')|EXPERIMENTAL|INTERNAL) \{$/ { next; } # start of a section
-            /^}( DPDK_'$abi_version')?;$/ { next; } # end of a section
-            /^$/ { next; } # empty line
-            /^\t(global:|local: \*;)$/ { next; } # qualifiers
-            /^\t[a-zA-Z_0-9]*;( # WINDOWS_NO_EXPORT)?$/ { next; } # symbols
-            /^\t# added in [0-9]*\.[0-9]*$/ { next; } # version comments
-            { print $0; }' || echo $map
-    done
-}
-
-bad_format_maps=$(find_bad_format_maps $@)
-if [ -n "$bad_format_maps" ] ; then
-    echo "Found badly formatted maps:"
-    echo "$bad_format_maps"
-    ret=1
-fi
-
-find_non_versioned_maps ()
-{
-    for map in $@ ; do
-        [ $(buildtools/map-list-symbol.sh -S EXPERIMENTAL -V unset $map | wc -l) = '0' ] ||
-            echo $map
-    done
-}
-
-non_versioned_maps=$(find_non_versioned_maps $@)
-if [ -n "$non_versioned_maps" ] ; then
-    echo "Found non versioned maps:"
-    echo "$non_versioned_maps"
-    ret=1
-fi
-
-exit $ret
diff --git a/devtools/checkpatches.sh b/devtools/checkpatches.sh
index 7dcac7c8c9..1f3c551b31 100755
--- a/devtools/checkpatches.sh
+++ b/devtools/checkpatches.sh
@@ -9,7 +9,7 @@
 # - DPDK_CHECKPATCH_OPTIONS
 . $(dirname $(readlink -f $0))/load-devel-config
 
-VALIDATE_NEW_API=$(dirname $(readlink -f $0))/check-symbol-change.sh
+VALIDATE_NEW_API=$(dirname $(readlink -f $0))/check-symbol-change.py
 
 # Enable codespell by default. This can be overwritten from a config file.
 # Codespell can also be enabled by setting DPDK_CHECKPATCH_CODESPELL to a valid path
diff --git a/devtools/update-abi.sh b/devtools/update-abi.sh
deleted file mode 100755
index 45437f3c3b..0000000000
--- a/devtools/update-abi.sh
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/bin/sh -e
-# SPDX-License-Identifier: BSD-3-Clause
-# Copyright(c) 2019 Intel Corporation
-
-abi_version=$1
-abi_version_file="./ABI_VERSION"
-update_path="lib drivers"
-
-# check ABI version format string
-check_abi_version() {
-      echo $1 | grep -q -e "^[[:digit:]]\{1,2\}\.[[:digit:]]\{1,2\}$"
-}
-
-if [ -z "$1" ]; then
-      # output to stderr
-      >&2 echo "Please provide ABI version"
-      exit 1
-fi
-
-# check version string format
-if ! check_abi_version $abi_version ; then
-      # output to stderr
-      >&2 echo "ABI version must be formatted as MAJOR.MINOR version"
-      exit 1
-fi
-
-if [ -n "$2" ]; then
-      abi_version_file=$2
-fi
-
-if [ -n "$3" ]; then
-      # drop $1 and $2
-      shift 2
-      # assign all other arguments as update paths
-      update_path=$@
-fi
-
-echo "New ABI version:" $abi_version
-echo "ABI_VERSION path:" $abi_version_file
-echo "Path to update:" $update_path
-
-echo $abi_version > $abi_version_file
-
-find $update_path -name version.map -exec \
-      devtools/update_version_map_abi.py {} \
-      $abi_version \; -print
diff --git a/devtools/update_version_map_abi.py b/devtools/update_version_map_abi.py
deleted file mode 100755
index d17b02a327..0000000000
--- a/devtools/update_version_map_abi.py
+++ /dev/null
@@ -1,210 +0,0 @@
-#!/usr/bin/env python3
-# SPDX-License-Identifier: BSD-3-Clause
-# Copyright(c) 2019 Intel Corporation
-
-"""
-A Python program that updates and merges all available stable ABI versions into
-one ABI version, while leaving experimental ABI exactly as it is. The intended
-ABI version is supplied via command-line parameter. This script is to be called
-from the devtools/update-abi.sh utility.
-"""
-
-import argparse
-import sys
-import re
-
-
-def __parse_map_file(f_in):
-    # match function name, followed by semicolon, followed by EOL or comments,
-    # optionally with whitespace in between each item
-    func_line_regex = re.compile(r"\s*"
-                                 r"(?P<line>"
-                                 r"(?P<func>[a-zA-Z_0-9]+)"
-                                 r"\s*"
-                                 r";"
-                                 r"\s*"
-                                 r"(?P<comment>#.+)?"
-                                 r")"
-                                 r"\s*"
-                                 r"$")
-    # match section name, followed by opening bracked, followed by EOL,
-    # optionally with whitespace in between each item
-    section_begin_regex = re.compile(r"\s*"
-                                     r"(?P<version>[a-zA-Z0-9_\.]+)"
-                                     r"\s*"
-                                     r"{"
-                                     r"\s*"
-                                     r"$")
-    # match closing bracket, optionally followed by section name (for when we
-    # inherit from another ABI version), followed by semicolon, followed by
-    # EOL, optionally with whitespace in between each item
-    section_end_regex = re.compile(r"\s*"
-                                   r"}"
-                                   r"\s*"
-                                   r"(?P<parent>[a-zA-Z0-9_\.]+)?"
-                                   r"\s*"
-                                   r";"
-                                   r"\s*"
-                                   r"$")
-
-    # for stable ABI, we don't care about which version introduced which
-    # function, we just flatten the list. there are dupes in certain files, so
-    # use a set instead of a list
-    stable_lines = set()
-    # copy experimental section as is
-    experimental_lines = []
-    # copy internal section as is
-    internal_lines = []
-    in_experimental = False
-    in_internal = False
-    has_stable = False
-
-    # gather all functions
-    for line in f_in:
-        # clean up the line
-        line = line.strip('\n').strip()
-
-        # is this an end of section?
-        match = section_end_regex.match(line)
-        if match:
-            # whatever section this was, it's not active any more
-            in_experimental = False
-            in_internal = False
-            continue
-
-        # if we're in the middle of experimental section, we need to copy
-        # the section verbatim, so just add the line
-        if in_experimental:
-            experimental_lines += [line]
-            continue
-
-        # if we're in the middle of internal section, we need to copy
-        # the section verbatim, so just add the line
-        if in_internal:
-            internal_lines += [line]
-            continue
-
-        # skip empty lines
-        if not line:
-            continue
-
-        # is this a beginning of a new section?
-        match = section_begin_regex.match(line)
-        if match:
-            cur_section = match.group("version")
-            # is it experimental?
-            in_experimental = cur_section == "EXPERIMENTAL"
-            # is it internal?
-            in_internal = cur_section == "INTERNAL"
-            if not in_experimental and not in_internal:
-                has_stable = True
-            continue
-
-        # is this a function?
-        match = func_line_regex.match(line)
-        if match:
-            stable_lines.add(match.group("line"))
-
-    return has_stable, stable_lines, experimental_lines, internal_lines
-
-
-def __generate_stable_abi(f_out, abi_major, lines):
-    # print ABI version header
-    print("DPDK_{} {{".format(abi_major), file=f_out)
-
-    # print global section if it exists
-    if lines:
-        print("\tglobal:", file=f_out)
-        # blank line
-        print(file=f_out)
-
-        # print all stable lines, alphabetically sorted
-        for line in sorted(lines):
-            print("\t{}".format(line), file=f_out)
-
-        # another blank line
-        print(file=f_out)
-
-    # print local section
-    print("\tlocal: *;", file=f_out)
-
-    # end stable version
-    print("};", file=f_out)
-
-
-def __generate_experimental_abi(f_out, lines):
-    # start experimental section
-    print("EXPERIMENTAL {", file=f_out)
-
-    # print all experimental lines as they were
-    for line in lines:
-        # don't print empty whitespace
-        if not line:
-            print("", file=f_out)
-        else:
-            print("\t{}".format(line), file=f_out)
-
-    # end section
-    print("};", file=f_out)
-
-def __generate_internal_abi(f_out, lines):
-    # start internal section
-    print("INTERNAL {", file=f_out)
-
-    # print all internal lines as they were
-    for line in lines:
-        # don't print empty whitespace
-        if not line:
-            print("", file=f_out)
-        else:
-            print("\t{}".format(line), file=f_out)
-
-    # end section
-    print("};", file=f_out)
-
-def __main():
-    arg_parser = argparse.ArgumentParser(
-        description='Merge versions in linker version script.')
-
-    arg_parser.add_argument("map_file", type=str,
-                            help='path to linker version script file '
-                                 '(pattern: version.map)')
-    arg_parser.add_argument("abi_version", type=str,
-                            help='target ABI version (pattern: MAJOR.MINOR)')
-
-    parsed = arg_parser.parse_args()
-
-    if not parsed.map_file.endswith('version.map'):
-        print("Invalid input file: {}".format(parsed.map_file),
-              file=sys.stderr)
-        arg_parser.print_help()
-        sys.exit(1)
-
-    if not re.match(r"\d{1,2}\.\d{1,2}", parsed.abi_version):
-        print("Invalid ABI version: {}".format(parsed.abi_version),
-              file=sys.stderr)
-        arg_parser.print_help()
-        sys.exit(1)
-    abi_major = parsed.abi_version.split('.')[0]
-
-    with open(parsed.map_file) as f_in:
-        has_stable, stable_lines, experimental_lines, internal_lines = __parse_map_file(f_in)
-
-    with open(parsed.map_file, 'w') as f_out:
-        need_newline = has_stable and experimental_lines
-        if has_stable:
-            __generate_stable_abi(f_out, abi_major, stable_lines)
-        if need_newline:
-            # separate sections with a newline
-            print(file=f_out)
-        if experimental_lines:
-            __generate_experimental_abi(f_out, experimental_lines)
-        if internal_lines:
-            if has_stable or experimental_lines:
-              # separate sections with a newline
-              print(file=f_out)
-            __generate_internal_abi(f_out, internal_lines)
-
-
-if __name__ == "__main__":
-    __main()
diff --git a/doc/guides/contributing/abi_policy.rst b/doc/guides/contributing/abi_policy.rst
index d96153c6b2..f03a7467ac 100644
--- a/doc/guides/contributing/abi_policy.rst
+++ b/doc/guides/contributing/abi_policy.rst
@@ -330,31 +330,14 @@ become part of a tracked ABI version.
 
 Note that marking an API as experimental is a multi step process.
 To mark an API as experimental, the symbols which are desired to be exported
-must be placed in an EXPERIMENTAL version block in the corresponding libraries'
-version map script.
+must be annotated with a RTE_EXPORT_EXPERIMENTAL_SYMBOL call in the corresponding libraries'
+sources.
 Experimental symbols must be commented so that it is clear in which DPDK
 version they were introduced.
 
-.. code-block:: none
-
-   EXPERIMENTAL {
-           global:
-
-           # added in 20.11
-           rte_foo_init;
-           rte_foo_configure;
-
-           # added in 21.02
-           rte_foo_cleanup;
-   ...
-
 Secondly, the corresponding prototypes of those exported functions (in the
 development header files), must be marked with the ``__rte_experimental`` tag
 (see ``rte_compat.h``).
-The DPDK build makefiles perform a check to ensure that the map file and the
-C code reflect the same list of symbols.
-This check can be circumvented by defining ``ALLOW_EXPERIMENTAL_API``
-during compilation in the corresponding library Makefile.
 
 In addition to tagging the code with ``__rte_experimental``,
 the doxygen markup must also contain the EXPERIMENTAL string,
diff --git a/doc/guides/contributing/coding_style.rst b/doc/guides/contributing/coding_style.rst
index 1ebc79ca3c..43e27bbd0a 100644
--- a/doc/guides/contributing/coding_style.rst
+++ b/doc/guides/contributing/coding_style.rst
@@ -1018,13 +1018,6 @@ name
 	sources are stored in a directory ``lib/xyz``, this value should
 	never be needed for new libraries.
 
-.. note::
-
-	The name value also provides the name used to find the function version
-	map file, as part of the build process, so if the directory name and
-	library names differ, the ``version.map`` file should be named
-	consistently with the library, not the directory
-
 objs
 	**Default Value = []**.
 	This variable can be used to pass to the library build some pre-built
diff --git a/doc/guides/contributing/img/patch_cheatsheet.svg b/doc/guides/contributing/img/patch_cheatsheet.svg
index 4debb07b98..a06d8a2a3b 100644
--- a/doc/guides/contributing/img/patch_cheatsheet.svg
+++ b/doc/guides/contributing/img/patch_cheatsheet.svg
@@ -1,18 +1,18 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
    version="1.1"
    width="210mm"
    height="297mm"
    id="svg2985"
-   inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
-   sodipodi:docname="patch_cheatsheet.svg">
+   inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
+   sodipodi:docname="patch_cheatsheet.svg"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:dc="http://purl.org/dc/elements/1.1/">
   <sodipodi:namedview
      pagecolor="#ffffff"
      bordercolor="#666666"
@@ -23,18 +23,22 @@
      inkscape:pageopacity="0"
      inkscape:pageshadow="2"
      inkscape:window-width="1920"
-     inkscape:window-height="1017"
+     inkscape:window-height="975"
      id="namedview274"
      showgrid="false"
      inkscape:zoom="0.89702958"
-     inkscape:cx="246.07409"
-     inkscape:cy="416.76022"
-     inkscape:window-x="1072"
-     inkscape:window-y="-8"
+     inkscape:cx="546.24732"
+     inkscape:cy="385.71749"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
      inkscape:window-maximized="1"
      inkscape:current-layer="layer1"
      inkscape:document-rotation="0"
-     inkscape:snap-grids="false" />
+     inkscape:snap-grids="false"
+     inkscape:showpageshadow="2"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     inkscape:document-units="mm" />
   <defs
      id="defs3">
     <linearGradient
@@ -906,7 +910,7 @@
              style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:11.5613px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start"
              id="tspan4092-8-7-6-9-7"
              y="855.79816"
-             x="460.18405">****</tspan></text>
+             x="460.18405">***</tspan></text>
       </g>
     </g>
     <text
@@ -1132,161 +1136,126 @@
            id="tspan4092-8-6-3-1-8-4-4-55-7"
            style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:13px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start">*</tspan></text>
     </g>
+    <text
+       x="424.10629"
+       y="363.21423"
+       id="text4090-8"
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40.4213px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.01053"
+       transform="scale(1.0105317,0.98957807)"><tspan
+         x="424.10629"
+         y="363.21423"
+         id="tspan4092-8"
+         style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:21.2212px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:1.01053">+ Rebase to git  </tspan></text>
+    <text
+       x="424.10629"
+       y="393.60123"
+       id="text4090-8-5"
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40.4213px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.01053"
+       transform="scale(1.0105317,0.98957807)"><tspan
+         x="424.10629"
+         y="393.60123"
+         id="tspan4092-8-5"
+         style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:21.2212px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:1.01053">+ Checkpatch </tspan></text>
+    <text
+       x="424.10629"
+       y="424.20575"
+       id="text4090-8-5-6"
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40.4213px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.01053"
+       transform="scale(1.0105317,0.98957807)"><tspan
+         x="424.10629"
+         y="424.20575"
+         id="tspan4092-8-5-5"
+         style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:21.2212px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:1.01053">+ ABI breakage </tspan></text>
+    <text
+       x="424.10629"
+       y="453.10339"
+       id="text4090-8-5-6-9-4"
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40.4213px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.01053"
+       transform="scale(1.0105317,0.98957807)"><tspan
+         x="424.10629"
+         y="453.10339"
+         id="tspan4092-8-5-5-3-4"
+         style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:21.2212px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:1.01053">+ Maintainers file</tspan></text>
+    <text
+       x="424.10629"
+       y="514.09497"
+       id="text4090-8-5-6-9-4-6"
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40.4213px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.01053"
+       transform="scale(1.0105317,0.98957807)"><tspan
+         x="424.10629"
+         y="514.09497"
+         id="tspan4092-8-5-5-3-4-0"
+         style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:21.2212px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:1.01053">+ Release notes</tspan></text>
+    <text
+       x="425.12708"
+       y="544.91718"
+       id="text4090-8-5-6-9-4-6-6"
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:40.4213px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.01053"
+       transform="scale(1.0105317,0.98957807)"><tspan
+         x="425.12708"
+         y="544.91718"
+         id="tspan4092-8-5-5-3-4-0-6"
+         style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:21.2212px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:1.01053">+ Documentation</tspan></text>
     <g
-       transform="translate(1.0962334,-2.7492248)"
-       id="g3605">
-      <text
-         x="42.176418"
-         y="1020.4383"
-         id="text4090-8-7-8-7-6-3-8-4"
-         xml:space="preserve"
-         style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:13px;line-height:0%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"><tspan
-           x="42.176418"
-           y="1020.4383"
-           id="tspan4092-8-6-3-1-8-4-4-55"
-           style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11px;line-height:125%;font-family:monospace;-inkscape-font-specification:Monospace;text-align:start;writing-mode:lr-tb;text-anchor:start">The version.map function names must be in alphabetical order.</tspan></text>
-      <text
-         x="30.942892"
-         y="1024.2014"
-         id="text4090-8-7-8-7-6-3-8-4-1-5"
-         xml:space="preserve"
-         style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:13px;line-height:0%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"><tspan
-           x="30.942892"
-           y="1024.2014"
-           id="tspan4092-8-6-3-1-8-4-4-55-7-2"
-           style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:13px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start">*</tspan></text>
-      <text
-         x="25.247679"
-         y="1024.2014"
-         id="text4090-8-7-8-7-6-3-8-4-1-5-6"
-         xml:space="preserve"
-         style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:13px;line-height:0%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none"><tspan
-           x="25.247679"
-           y="1024.2014"
-           id="tspan4092-8-6-3-1-8-4-4-55-7-2-8"
-           style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:13px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start">*</tspan></text>
-    </g>
-    <g
-       transform="matrix(1.0211743,0,0,1,25.427515,-30.749225)"
-       id="g3275">
+       transform="matrix(1.0211743,0,0,1,25.427515,-31.583927)"
+       id="g3334">
       <g
-         id="g3341">
+         id="g3267"
+         transform="translate(-13.517932,3.1531035)">
         <text
-           x="394.78601"
-           y="390.17807"
-           id="text4090-8"
-           xml:space="preserve"
-           style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><tspan
-             x="394.78601"
-             y="390.17807"
-             id="tspan4092-8"
-             style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:21px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start">+ Rebase to git  </tspan></text>
-        <text
-           x="394.78601"
-           y="420.24835"
-           id="text4090-8-5"
+           x="660.46729"
+           y="468.01297"
+           id="text4090-8-1-8-9-1-4-1"
            xml:space="preserve"
-           style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><tspan
-             x="394.78601"
-             y="420.24835"
-             id="tspan4092-8-5"
-             style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:21px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start">+ Checkpatch </tspan></text>
-        <text
-           x="394.78601"
-           y="450.53394"
-           id="text4090-8-5-6"
-           xml:space="preserve"
-           style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><tspan
-             x="394.78601"
-             y="450.53394"
-             id="tspan4092-8-5-5"
-             style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:21px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start">+ ABI breakage </tspan></text>
-        <text
+           style="font-style:normal;font-weight:normal;font-size:25.6917px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><tspan
+             x="660.46729"
+             y="468.01297"
+             id="tspan4092-8-7-6-9-7-0-7"
+             style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:11.5613px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start" /></text>
+      </g>
+      <text
+         x="394.78601"
+         y="483.59955"
+         id="text4090-8-5-6-9"
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><tspan
            x="394.78601"
-           y="513.13031"
-           id="text4090-8-5-6-9-4"
-           xml:space="preserve"
-           style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><tspan
-             x="394.78601"
-             y="513.13031"
-             id="tspan4092-8-5-5-3-4"
-             style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:21px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start">+ Maintainers file</tspan></text>
-        <text
+           y="483.59955"
+           id="tspan4092-8-5-5-3"
+           style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:21px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start" /></text>
+    </g>
+    <g
+       id="g3428"
+       transform="matrix(1.0211743,0,0,1,25.427515,-63.867847)">
+      <text
+         x="394.78601"
+         y="541.38928"
+         id="text4090-8-5-6-9-4-6-1"
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><tspan
            x="394.78601"
-           y="573.48621"
-           id="text4090-8-5-6-9-4-6"
-           xml:space="preserve"
-           style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><tspan
-             x="394.78601"
-             y="573.48621"
-             id="tspan4092-8-5-5-3-4-0"
-             style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:21px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start">+ Release notes</tspan></text>
+           y="541.38928"
+           id="tspan4092-8-5-5-3-4-0-7"
+           style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:21px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start">+ Doxygen</tspan></text>
+      <g
+         transform="translate(-119.92979,57.949844)"
+         id="g3267-9">
         <text
-           x="395.79617"
-           y="603.98718"
-           id="text4090-8-5-6-9-4-6-6"
+           x="628.93628"
+           y="473.13675"
+           id="text4090-8-1-8-9-1-4-1-4"
            xml:space="preserve"
-           style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><tspan
-             x="395.79617"
-             y="603.98718"
-             id="tspan4092-8-5-5-3-4-0-6"
-             style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:21px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start">+ Documentation</tspan></text>
-        <g
-           transform="translate(0,-0.83470152)"
-           id="g3334">
-          <g
-             id="g3267"
-             transform="translate(-13.517932,3.1531035)">
-            <text
-               x="660.46729"
-               y="468.01297"
-               id="text4090-8-1-8-9-1-4-1"
-               xml:space="preserve"
-               style="font-style:normal;font-weight:normal;font-size:25.6917px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><tspan
-                 x="660.46729"
-                 y="468.01297"
-                 id="tspan4092-8-7-6-9-7-0-7"
-                 style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:11.5613px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start">**</tspan></text>
-          </g>
-          <text
-             x="394.78601"
-             y="483.59955"
-             id="text4090-8-5-6-9"
-             xml:space="preserve"
-             style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><tspan
-               x="394.78601"
-               y="483.59955"
-               id="tspan4092-8-5-5-3"
-               style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:21px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start">+ Update version.map</tspan></text>
-        </g>
-        <g
-           id="g3428"
-           transform="translate(0,0.88137813)">
-          <text
-             x="394.78601"
-             y="541.38928"
-             id="text4090-8-5-6-9-4-6-1"
-             xml:space="preserve"
-             style="font-style:normal;font-weight:normal;font-size:40px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><tspan
-               x="394.78601"
-               y="541.38928"
-               id="tspan4092-8-5-5-3-4-0-7"
-               style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:21px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start">+ Doxygen</tspan></text>
-          <g
-             transform="translate(-119.92979,57.949844)"
-             id="g3267-9">
-            <text
-               x="628.93628"
-               y="473.13675"
-               id="text4090-8-1-8-9-1-4-1-4"
-               xml:space="preserve"
-               style="font-style:normal;font-weight:normal;font-size:25.6917px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><tspan
-                 x="628.93628"
-                 y="473.13675"
-                 id="tspan4092-8-7-6-9-7-0-7-8"
-                 style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:11.5613px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start">***</tspan></text>
-          </g>
-        </g>
+           style="font-style:normal;font-weight:normal;font-size:25.6917px;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><tspan
+             x="628.93628"
+             y="473.13675"
+             id="tspan4092-8-7-6-9-7-0-7-8"
+             style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:11.5613px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start">**</tspan></text>
       </g>
     </g>
     <text
@@ -1301,7 +1270,7 @@
          id="tspan4092-8-5-5-3-4-0-6-2-11-0"
          style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:21px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start">+</tspan></text>
     <g
-       transform="translate(1.0962334,-2.7492248)"
+       transform="translate(1.0962334,-14.749225)"
        id="g3595">
       <text
          x="30.942892"
@@ -1332,7 +1301,7 @@
            x="19.552465"
            y="1037.0271"
            id="tspan4092-8-6-3-1-8-4-4-55-7-3-9"
-           style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:13px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start">*</tspan></text>
+           style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:13px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start" /></text>
       <text
          x="42.830166"
          y="1033.2393"
@@ -1345,7 +1314,7 @@
            style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11px;line-height:125%;font-family:monospace;-inkscape-font-specification:Monospace;text-align:start;writing-mode:lr-tb;text-anchor:start">New header files must get a new page in the API docs.</tspan></text>
     </g>
     <g
-       transform="translate(1.0962334,-2.7492248)"
+       transform="translate(1.0962334,-14.749225)"
        id="g3619">
       <text
          x="42.212418"
@@ -1396,7 +1365,7 @@
            x="14.016749"
            y="1049.8527"
            id="tspan4092-8-6-3-1-8-4-4-55-7-3-9-6-5"
-           style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:13px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start">*</tspan></text>
+           style="font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;font-size:13px;line-height:125%;font-family:monospace;-inkscape-font-specification:'Monospace Bold';text-align:start;writing-mode:lr-tb;text-anchor:start" /></text>
     </g>
     <rect
        width="196.44218"
diff --git a/doc/guides/contributing/patches.rst b/doc/guides/contributing/patches.rst
index d21ee288b2..8ad6b6e715 100644
--- a/doc/guides/contributing/patches.rst
+++ b/doc/guides/contributing/patches.rst
@@ -160,9 +160,9 @@ Make your planned changes in the cloned ``dpdk`` repo. Here are some guidelines
 
   * For other PMDs and more info, refer to the ``MAINTAINERS`` file.
 
-* New external functions should be added to the local ``version.map`` file. See
-  the :doc:`ABI policy <abi_policy>` and :ref:`ABI versioning <abi_versioning>`
-  guides. New external functions should also be added in alphabetical order.
+* New external functions should be exported.
+  See the :doc:`ABI policy <abi_policy>` and :ref:`ABI versioning <abi_versioning>`
+  guides.
 
 * Any new API function should be used in ``/app`` test directory.
 
diff --git a/drivers/meson.build b/drivers/meson.build
index c8bc556f1a..6904d34eee 100644
--- a/drivers/meson.build
+++ b/drivers/meson.build
@@ -5,8 +5,6 @@ if is_ms_compiler
     subdir_done()
 endif
 
-fs = import('fs')
-
 # Defines the order of dependencies evaluation
 subdirs = [
         'common',
@@ -260,59 +258,27 @@ foreach subpath:subdirs
                 install: true)
 
         # now build the shared driver
-        version_map = '@0@/@1@/version.map'.format(meson.current_source_dir(), drv_path)
-
-        if not fs.is_file(version_map)
-            if is_ms_linker
-                link_mode = 'msvc'
-            elif is_windows
-                link_mode = 'mingw'
-            else
-                link_mode = 'gnu'
-            endif
-            version_map = custom_target(lib_name + '_map',
-                    command: [gen_version_map, link_mode, abi_version_file, '@OUTPUT@', '@INPUT@'],
-                    input: sources,
-                    output: 'lib@0@_exports.map'.format(lib_name))
-            version_map_path = version_map.full_path()
-            version_map_dep = [version_map]
-            lk_deps = [version_map]
-
-            if is_ms_linker
-                if is_ms_compiler
-                    lk_args = ['/def:' + version_map.full_path()]
-                else
-                    lk_args = ['-Wl,/def:' + version_map.full_path()]
-                endif
-            else
-                lk_args = ['-Wl,--version-script=' + version_map.full_path()]
-            endif
+        if is_ms_linker
+            link_mode = 'msvc'
+        elif is_windows
+            link_mode = 'mingw'
         else
-            version_map_path = version_map
-            version_map_dep = []
-            lk_deps = [version_map]
-
-            if is_windows
-                if is_ms_linker
-                    def_file = custom_target(lib_name + '_def',
-                            command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'],
-                            input: version_map,
-                            output: '@0@_exports.def'.format(lib_name))
-                    lk_deps += [def_file]
-
-                    lk_args = ['-Wl,/def:' + def_file.full_path()]
-                else
-                    mingw_map = custom_target(lib_name + '_mingw',
-                            command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'],
-                            input: version_map,
-                            output: '@0@_mingw.map'.format(lib_name))
-                    lk_deps += [mingw_map]
-
-                    lk_args = ['-Wl,--version-script=' + mingw_map.full_path()]
-                endif
+            link_mode = 'gnu'
+        endif
+        version_map = custom_target(lib_name + '_map',
+                command: [gen_version_map, link_mode, abi_version_file, '@OUTPUT@', '@INPUT@'],
+                input: sources,
+                output: 'lib@0@_exports.map'.format(lib_name))
+        lk_deps = [version_map]
+
+        if is_ms_linker
+            if is_ms_compiler
+                lk_args = ['/def:' + version_map.full_path()]
             else
-                lk_args = ['-Wl,--version-script=' + version_map]
+                lk_args = ['-Wl,/def:' + version_map.full_path()]
             endif
+        else
+            lk_args = ['-Wl,--version-script=' + version_map.full_path()]
         endif
 
         if not is_windows and developer_mode
@@ -320,11 +286,11 @@ foreach subpath:subdirs
             # check-symbols.sh script, using it as a
             # dependency of the .so build
             lk_deps += custom_target(lib_name + '.sym_chk',
-                    command: [check_symbols, version_map_path, '@INPUT@'],
+                    command: [check_symbols, version_map.full_path(), '@INPUT@'],
                     capture: true,
                     input: static_lib,
                     output: lib_name + '.sym_chk',
-                    depends: version_map_dep)
+                    depends: [version_map])
         endif
 
         shared_lib = shared_library(lib_name, sources_pmd_info,
diff --git a/lib/meson.build b/lib/meson.build
index b6bac02b48..f143bc202b 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -1,7 +1,6 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2017-2019 Intel Corporation
 
-fs = import('fs')
 
 # process all libraries equally, as far as possible
 # "core" libs first, then others alphabetically as far as possible
@@ -255,61 +254,27 @@ foreach l:libraries
             include_directories: includes,
             dependencies: static_deps)
 
-    if not fs.is_file('@0@/@1@/version.map'.format(meson.current_source_dir(), l))
-        if is_ms_linker
-            link_mode = 'msvc'
-        elif is_windows
-            link_mode = 'mingw'
-        else
-            link_mode = 'gnu'
-        endif
-        version_map = custom_target(libname + '_map',
-                command: [gen_version_map, link_mode, abi_version_file, '@OUTPUT@', '@INPUT@'],
-                input: sources,
-                output: 'lib@0@_exports.map'.format(libname))
-        version_map_path = version_map.full_path()
-        version_map_dep = [version_map]
-        lk_deps = [version_map]
-
-        if is_ms_linker
-            if is_ms_compiler
-                lk_args = ['/def:' + version_map.full_path()]
-            else
-                lk_args = ['-Wl,/def:' + version_map.full_path()]
-            endif
-        else
-            lk_args = ['-Wl,--version-script=' + version_map.full_path()]
-        endif
+    if is_ms_linker
+        link_mode = 'msvc'
+    elif is_windows
+        link_mode = 'mingw'
     else
-        version_map = '@0@/@1@/version.map'.format(meson.current_source_dir(), l)
-        version_map_path = version_map
-        version_map_dep = []
-        lk_deps = [version_map]
-        if is_ms_linker
-            def_file = custom_target(libname + '_def',
-                    command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'],
-                    input: version_map,
-                    output: '@0@_exports.def'.format(libname))
-            lk_deps += [def_file]
+        link_mode = 'gnu'
+    endif
+    version_map = custom_target(libname + '_map',
+            command: [gen_version_map, link_mode, abi_version_file, '@OUTPUT@', '@INPUT@'],
+            input: sources,
+            output: 'lib@0@_exports.map'.format(libname))
+    lk_deps = [version_map]
 
-            if is_ms_compiler
-                lk_args = ['/def:' + def_file.full_path()]
-            else
-                lk_args = ['-Wl,/def:' + def_file.full_path()]
-            endif
+    if is_ms_linker
+        if is_ms_compiler
+            lk_args = ['/def:' + version_map.full_path()]
         else
-            if is_windows
-                mingw_map = custom_target(libname + '_mingw',
-                        command: [map_to_win_cmd, '@INPUT@', '@OUTPUT@'],
-                        input: version_map,
-                        output: '@0@_mingw.map'.format(libname))
-                lk_deps += [mingw_map]
-
-                lk_args = ['-Wl,--version-script=' + mingw_map.full_path()]
-            else
-                lk_args = ['-Wl,--version-script=' + version_map]
-            endif
+            lk_args = ['-Wl,/def:' + version_map.full_path()]
         endif
+    else
+        lk_args = ['-Wl,--version-script=' + version_map.full_path()]
     endif
 
     if developer_mode and not is_windows
@@ -317,11 +282,11 @@ foreach l:libraries
         # check-symbols.sh script, using it as a
         # dependency of the .so build
         lk_deps += custom_target(name + '.sym_chk',
-                command: [check_symbols, version_map_path, '@INPUT@'],
+                command: [check_symbols, version_map.full_path(), '@INPUT@'],
                 capture: true,
                 input: static_lib,
                 output: name + '.sym_chk',
-                depends: version_map_dep)
+                depends: [version_map])
     endif
 
     if not use_function_versioning or is_windows
-- 
2.48.1


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [RFC v3 8/8] build: remove static version maps
  2025-03-11  9:55 ` [RFC v3 0/8] Symbol versioning and export rework David Marchand
                     ` (6 preceding siblings ...)
  2025-03-11  9:56   ` [RFC v3 7/8] build: use dynamically generated version maps David Marchand
@ 2025-03-11  9:56   ` David Marchand
  2025-03-11 10:18   ` [RFC v3 0/8] Symbol versioning and export rework Morten Brørup
  8 siblings, 0 replies; 17+ messages in thread
From: David Marchand @ 2025-03-11  9:56 UTC (permalink / raw)
  To: dev
  Cc: thomas, bruce.richardson, andremue, Nicolas Chautru,
	Parav Pandit, Xueming Li, Nipun Gupta, Nikhil Agarwal,
	Hemant Agrawal, Sachin Saxena, Rosen Xu, Chenbo Xia,
	Tomasz Duszynski, Chengwen Feng, Long Li, Wei Hu,
	Nithin Dabilpuram, Kiran Kumar K, Sunil Kumar Kori, Satha Rao,
	Harman Kalra, Anoob Joseph, Andrew Boyer, Dariusz Sosnowski,
	Viacheslav Ovsiienko, Bing Zhao, Ori Kam, Suanming Mou,
	Matan Azrad, Liron Himi, Chaoyong He, Nagadheeraj Rottela,
	Srikanth Jampala, Andrew Rybchenko, Ankur Dwivedi,
	Tejasree Kondoj, Gagandeep Singh, Kai Ji, Vamsi Attunuru,
	Pavan Nikhilesh, Shijith Thotton, Pravin Pathak,
	Ashwin Sekhar T K, Igor Russkikh, Ajit Khaparde, Somnath Kotur,
	Chas Williams, Min Hu (Connor),
	Ian Stokes, Vladimir Medvedkin, Anatoly Burakov, Jingjing Wu,
	Praveen Shetty, Cristian Dumitrescu, Maxime Coquelin, David Hunt,
	Sivaprasad Tummala, Akhil Goyal, Konstantin Ananyev, Fan Zhang,
	Ashish Gupta, Mattias Rönnblom, Kevin Laatz, Byron Marohn,
	Yipeng Wang, Ferruh Yigit, Jerin Jacob, Elena Agostini,
	Zhirun Yan, Jiayu Hu, Sameh Gobriel, Reshma Pattan,
	Stephen Hemminger, Morten Brørup, Srikanth Yalavarthi,
	Gaetan Rivet, Volodymyr Fialko, Honnappa Nagarahalli,
	Erik Gabriel Carrillo

Now that all version map files get generated, we can delete all
committed files.

Signed-off-by: David Marchand <david.marchand@redhat.com>
---
 drivers/baseband/acc/version.map           |  10 -
 drivers/baseband/fpga_5gnr_fec/version.map |  11 -
 drivers/baseband/fpga_lte_fec/version.map  |  10 -
 drivers/bus/auxiliary/version.map          |   8 -
 drivers/bus/cdx/version.map                |  14 -
 drivers/bus/dpaa/version.map               | 108 ----
 drivers/bus/fslmc/version.map              | 127 -----
 drivers/bus/ifpga/version.map              |   9 -
 drivers/bus/pci/version.map                |  43 --
 drivers/bus/platform/version.map           |  10 -
 drivers/bus/uacce/version.map              |  15 -
 drivers/bus/vdev/version.map               |  17 -
 drivers/bus/vmbus/version.map              |  33 --
 drivers/common/cnxk/version.map            | 576 ---------------------
 drivers/common/cpt/version.map             |  11 -
 drivers/common/dpaax/version.map           |  25 -
 drivers/common/ionic/version.map           |  10 -
 drivers/common/mlx5/version.map            | 174 -------
 drivers/common/mvep/version.map            |   8 -
 drivers/common/nfp/version.map             |  16 -
 drivers/common/nitrox/version.map          |  10 -
 drivers/common/octeontx/version.map        |  12 -
 drivers/common/sfc_efx/version.map         | 302 -----------
 drivers/crypto/cnxk/version.map            |  30 --
 drivers/crypto/dpaa2_sec/version.map       |   8 -
 drivers/crypto/dpaa_sec/version.map        |   8 -
 drivers/crypto/octeontx/version.map        |  12 -
 drivers/crypto/scheduler/version.map       |  16 -
 drivers/dma/cnxk/version.map               |  10 -
 drivers/event/cnxk/version.map             |  11 -
 drivers/event/dlb2/version.map             |  10 -
 drivers/mempool/cnxk/version.map           |  12 -
 drivers/mempool/dpaa/version.map           |   8 -
 drivers/mempool/dpaa2/version.map          |  16 -
 drivers/net/atlantic/version.map           |  15 -
 drivers/net/bnxt/version.map               |  22 -
 drivers/net/bonding/version.map            |  33 --
 drivers/net/cnxk/version.map               |  27 -
 drivers/net/dpaa/version.map               |  14 -
 drivers/net/dpaa2/version.map              |  35 --
 drivers/net/intel/i40e/version.map         |  55 --
 drivers/net/intel/iavf/version.map         |  33 --
 drivers/net/intel/ice/version.map          |  16 -
 drivers/net/intel/idpf/version.map         |  80 ---
 drivers/net/intel/ipn3ke/version.map       |   9 -
 drivers/net/intel/ixgbe/version.map        |  49 --
 drivers/net/mlx5/version.map               |  28 -
 drivers/net/octeontx/version.map           |   7 -
 drivers/net/ring/version.map               |   8 -
 drivers/net/softnic/version.map            |   8 -
 drivers/net/vhost/version.map              |   8 -
 drivers/power/kvm_vm/version.map           |   8 -
 drivers/raw/cnxk_rvu_lf/version.map        |  16 -
 drivers/raw/ifpga/version.map              |  17 -
 lib/acl/version.map                        |  19 -
 lib/argparse/version.map                   |   9 -
 lib/bbdev/version.map                      |  47 --
 lib/bitratestats/version.map               |  10 -
 lib/bpf/version.map                        |  18 -
 lib/cfgfile/version.map                    |  23 -
 lib/cmdline/version.map                    |  82 ---
 lib/compressdev/version.map                |  40 --
 lib/cryptodev/version.map                  | 114 ----
 lib/dispatcher/version.map                 |  20 -
 lib/distributor/version.map                |  15 -
 lib/dmadev/version.map                     |  47 --
 lib/eal/version.map                        | 451 ----------------
 lib/efd/version.map                        |  13 -
 lib/ethdev/version.map                     | 378 --------------
 lib/eventdev/version.map                   | 167 ------
 lib/fib/version.map                        |  31 --
 lib/gpudev/version.map                     |  44 --
 lib/graph/version.map                      |  44 --
 lib/gro/version.map                        |  12 -
 lib/gso/version.map                        |   7 -
 lib/hash/version.map                       |  66 ---
 lib/ip_frag/version.map                    |  16 -
 lib/ipsec/version.map                      |  19 -
 lib/jobstats/version.map                   |  20 -
 lib/kvargs/version.map                     |  14 -
 lib/latencystats/version.map               |  11 -
 lib/log/version.map                        |  36 --
 lib/lpm/version.map                        |  24 -
 lib/mbuf/version.map                       |  45 --
 lib/member/version.map                     |  19 -
 lib/mempool/version.map                    |  65 ---
 lib/meter/version.map                      |  12 -
 lib/metrics/version.map                    |  26 -
 lib/mldev/version.map                      |  74 ---
 lib/net/version.map                        |  23 -
 lib/node/version.map                       |  25 -
 lib/pcapng/version.map                     |  13 -
 lib/pci/version.map                        |   9 -
 lib/pdcp/version.map                       |  12 -
 lib/pdump/version.map                      |  15 -
 lib/pipeline/version.map                   | 172 ------
 lib/port/version.map                       |  50 --
 lib/power/version.map                      |  71 ---
 lib/rawdev/version.map                     |  36 --
 lib/rcu/version.map                        |  17 -
 lib/regexdev/version.map                   |  38 --
 lib/reorder/version.map                    |  27 -
 lib/rib/version.map                        |  34 --
 lib/ring/version.map                       |  42 --
 lib/sched/version.map                      |  30 --
 lib/security/version.map                   |  37 --
 lib/stack/version.map                      |   9 -
 lib/table/version.map                      |  53 --
 lib/telemetry/version.map                  |  40 --
 lib/timer/version.map                      |  24 -
 lib/vhost/version.map                      | 110 ----
 111 files changed, 5113 deletions(-)
 delete mode 100644 drivers/baseband/acc/version.map
 delete mode 100644 drivers/baseband/fpga_5gnr_fec/version.map
 delete mode 100644 drivers/baseband/fpga_lte_fec/version.map
 delete mode 100644 drivers/bus/auxiliary/version.map
 delete mode 100644 drivers/bus/cdx/version.map
 delete mode 100644 drivers/bus/dpaa/version.map
 delete mode 100644 drivers/bus/fslmc/version.map
 delete mode 100644 drivers/bus/ifpga/version.map
 delete mode 100644 drivers/bus/pci/version.map
 delete mode 100644 drivers/bus/platform/version.map
 delete mode 100644 drivers/bus/uacce/version.map
 delete mode 100644 drivers/bus/vdev/version.map
 delete mode 100644 drivers/bus/vmbus/version.map
 delete mode 100644 drivers/common/cnxk/version.map
 delete mode 100644 drivers/common/cpt/version.map
 delete mode 100644 drivers/common/dpaax/version.map
 delete mode 100644 drivers/common/ionic/version.map
 delete mode 100644 drivers/common/mlx5/version.map
 delete mode 100644 drivers/common/mvep/version.map
 delete mode 100644 drivers/common/nfp/version.map
 delete mode 100644 drivers/common/nitrox/version.map
 delete mode 100644 drivers/common/octeontx/version.map
 delete mode 100644 drivers/common/sfc_efx/version.map
 delete mode 100644 drivers/crypto/cnxk/version.map
 delete mode 100644 drivers/crypto/dpaa2_sec/version.map
 delete mode 100644 drivers/crypto/dpaa_sec/version.map
 delete mode 100644 drivers/crypto/octeontx/version.map
 delete mode 100644 drivers/crypto/scheduler/version.map
 delete mode 100644 drivers/dma/cnxk/version.map
 delete mode 100644 drivers/event/cnxk/version.map
 delete mode 100644 drivers/event/dlb2/version.map
 delete mode 100644 drivers/mempool/cnxk/version.map
 delete mode 100644 drivers/mempool/dpaa/version.map
 delete mode 100644 drivers/mempool/dpaa2/version.map
 delete mode 100644 drivers/net/atlantic/version.map
 delete mode 100644 drivers/net/bnxt/version.map
 delete mode 100644 drivers/net/bonding/version.map
 delete mode 100644 drivers/net/cnxk/version.map
 delete mode 100644 drivers/net/dpaa/version.map
 delete mode 100644 drivers/net/dpaa2/version.map
 delete mode 100644 drivers/net/intel/i40e/version.map
 delete mode 100644 drivers/net/intel/iavf/version.map
 delete mode 100644 drivers/net/intel/ice/version.map
 delete mode 100644 drivers/net/intel/idpf/version.map
 delete mode 100644 drivers/net/intel/ipn3ke/version.map
 delete mode 100644 drivers/net/intel/ixgbe/version.map
 delete mode 100644 drivers/net/mlx5/version.map
 delete mode 100644 drivers/net/octeontx/version.map
 delete mode 100644 drivers/net/ring/version.map
 delete mode 100644 drivers/net/softnic/version.map
 delete mode 100644 drivers/net/vhost/version.map
 delete mode 100644 drivers/power/kvm_vm/version.map
 delete mode 100644 drivers/raw/cnxk_rvu_lf/version.map
 delete mode 100644 drivers/raw/ifpga/version.map
 delete mode 100644 lib/acl/version.map
 delete mode 100644 lib/argparse/version.map
 delete mode 100644 lib/bbdev/version.map
 delete mode 100644 lib/bitratestats/version.map
 delete mode 100644 lib/bpf/version.map
 delete mode 100644 lib/cfgfile/version.map
 delete mode 100644 lib/cmdline/version.map
 delete mode 100644 lib/compressdev/version.map
 delete mode 100644 lib/cryptodev/version.map
 delete mode 100644 lib/dispatcher/version.map
 delete mode 100644 lib/distributor/version.map
 delete mode 100644 lib/dmadev/version.map
 delete mode 100644 lib/eal/version.map
 delete mode 100644 lib/efd/version.map
 delete mode 100644 lib/ethdev/version.map
 delete mode 100644 lib/eventdev/version.map
 delete mode 100644 lib/fib/version.map
 delete mode 100644 lib/gpudev/version.map
 delete mode 100644 lib/graph/version.map
 delete mode 100644 lib/gro/version.map
 delete mode 100644 lib/gso/version.map
 delete mode 100644 lib/hash/version.map
 delete mode 100644 lib/ip_frag/version.map
 delete mode 100644 lib/ipsec/version.map
 delete mode 100644 lib/jobstats/version.map
 delete mode 100644 lib/kvargs/version.map
 delete mode 100644 lib/latencystats/version.map
 delete mode 100644 lib/log/version.map
 delete mode 100644 lib/lpm/version.map
 delete mode 100644 lib/mbuf/version.map
 delete mode 100644 lib/member/version.map
 delete mode 100644 lib/mempool/version.map
 delete mode 100644 lib/meter/version.map
 delete mode 100644 lib/metrics/version.map
 delete mode 100644 lib/mldev/version.map
 delete mode 100644 lib/net/version.map
 delete mode 100644 lib/node/version.map
 delete mode 100644 lib/pcapng/version.map
 delete mode 100644 lib/pci/version.map
 delete mode 100644 lib/pdcp/version.map
 delete mode 100644 lib/pdump/version.map
 delete mode 100644 lib/pipeline/version.map
 delete mode 100644 lib/port/version.map
 delete mode 100644 lib/power/version.map
 delete mode 100644 lib/rawdev/version.map
 delete mode 100644 lib/rcu/version.map
 delete mode 100644 lib/regexdev/version.map
 delete mode 100644 lib/reorder/version.map
 delete mode 100644 lib/rib/version.map
 delete mode 100644 lib/ring/version.map
 delete mode 100644 lib/sched/version.map
 delete mode 100644 lib/security/version.map
 delete mode 100644 lib/stack/version.map
 delete mode 100644 lib/table/version.map
 delete mode 100644 lib/telemetry/version.map
 delete mode 100644 lib/timer/version.map
 delete mode 100644 lib/vhost/version.map

diff --git a/drivers/baseband/acc/version.map b/drivers/baseband/acc/version.map
deleted file mode 100644
index 3f427caf67..0000000000
--- a/drivers/baseband/acc/version.map
+++ /dev/null
@@ -1,10 +0,0 @@
-DPDK_25 {
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 22.11
-	rte_acc_configure;
-};
diff --git a/drivers/baseband/fpga_5gnr_fec/version.map b/drivers/baseband/fpga_5gnr_fec/version.map
deleted file mode 100644
index fb32805028..0000000000
--- a/drivers/baseband/fpga_5gnr_fec/version.map
+++ /dev/null
@@ -1,11 +0,0 @@
-DPDK_25 {
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 20.11
-	rte_fpga_5gnr_fec_configure;
-
-};
diff --git a/drivers/baseband/fpga_lte_fec/version.map b/drivers/baseband/fpga_lte_fec/version.map
deleted file mode 100644
index f6b2961ba2..0000000000
--- a/drivers/baseband/fpga_lte_fec/version.map
+++ /dev/null
@@ -1,10 +0,0 @@
-DPDK_25 {
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 20.11
-	rte_fpga_lte_fec_configure;
-};
diff --git a/drivers/bus/auxiliary/version.map b/drivers/bus/auxiliary/version.map
deleted file mode 100644
index e9322e0b11..0000000000
--- a/drivers/bus/auxiliary/version.map
+++ /dev/null
@@ -1,8 +0,0 @@
-INTERNAL {
-	global:
-
-	rte_auxiliary_register;
-	rte_auxiliary_unregister;
-
-	local: *;
-};
diff --git a/drivers/bus/cdx/version.map b/drivers/bus/cdx/version.map
deleted file mode 100644
index 7a22cf5b4b..0000000000
--- a/drivers/bus/cdx/version.map
+++ /dev/null
@@ -1,14 +0,0 @@
-INTERNAL {
-	global:
-
-	rte_cdx_map_device;
-	rte_cdx_register;
-	rte_cdx_unmap_device;
-	rte_cdx_unregister;
-	rte_cdx_vfio_bm_disable;
-	rte_cdx_vfio_bm_enable;
-	rte_cdx_vfio_intr_disable;
-	rte_cdx_vfio_intr_enable;
-
-	local: *;
-};
diff --git a/drivers/bus/dpaa/version.map b/drivers/bus/dpaa/version.map
deleted file mode 100644
index 8f09b72757..0000000000
--- a/drivers/bus/dpaa/version.map
+++ /dev/null
@@ -1,108 +0,0 @@
-INTERNAL {
-	global:
-
-	bman_acquire;
-	bman_free_pool;
-	bman_get_params;
-	bman_new_pool;
-	bman_query_free_buffers;
-	bman_release;
-	bman_thread_irq;
-	dpaa_get_ioctl_version_number;
-	dpaa_get_eth_port_cfg;
-	dpaa_get_qm_channel_caam;
-	dpaa_get_qm_channel_pool;
-	dpaa_get_link_status;
-	dpaa_restart_link_autoneg;
-	dpaa_seqn_dynfield_offset;
-	dpaa_update_link_speed;
-	dpaa_intr_disable;
-	dpaa_intr_enable;
-	dpaa_svr_family;
-	dpaa_update_link_status;
-	fman_dealloc_bufs_mask_hi;
-	fman_dealloc_bufs_mask_lo;
-	fman_if_add_mac_addr;
-	fman_if_bmi_stats_enable;
-	fman_if_bmi_stats_disable;
-	fman_if_bmi_stats_get_all;
-	fman_if_bmi_stats_reset;
-	fman_if_clear_mac_addr;
-	fman_if_disable_rx;
-	fman_if_discard_rx_errors;
-	fman_if_enable_rx;
-	fman_if_get_fc_quanta;
-	fman_if_get_fc_threshold;
-	fman_if_get_fdoff;
-	fman_if_get_maxfrm;
-	fman_if_get_sg_enable;
-	fman_if_get_rx_status;
-	fman_if_loopback_disable;
-	fman_if_loopback_enable;
-	fman_if_promiscuous_disable;
-	fman_if_promiscuous_enable;
-	fman_if_reset_mcast_filter_table;
-	fman_if_set_bp;
-	fman_if_set_err_fqid;
-	fman_if_set_fc_quanta;
-	fman_if_set_fc_threshold;
-	fman_if_set_fdoff;
-	fman_if_set_ic_params;
-	fman_if_set_maxfrm;
-	fman_if_set_mcast_filter_table;
-	fman_if_set_sg;
-	fman_if_stats_get;
-	fman_if_stats_get_all;
-	fman_if_stats_reset;
-	fman_ip_rev;
-	fman_if_receive_rx_errors;
-	fsl_qman_fq_portal_create;
-	netcfg_acquire;
-	netcfg_release;
-	per_lcore_dpaa_io;
-	qman_alloc_cgrid_range;
-	qman_alloc_fqid_range;
-	qman_alloc_pool_range;
-	qman_clear_irq;
-	qman_create_cgr;
-	qman_create_fq;
-	qman_dca_index;
-	qman_delete_cgr;
-	qman_dequeue;
-	qman_dqrr_consume;
-	qman_enqueue;
-	qman_enqueue_multi;
-	qman_enqueue_multi_fq;
-	qman_ern_poll_free;
-	qman_ern_register_cb;
-	qman_fq_fqid;
-	qman_fq_portal_irqsource_add;
-	qman_fq_portal_irqsource_remove;
-	qman_fq_portal_thread_irq;
-	qman_fq_state;
-	qman_init_fq;
-	qman_irqsource_add;
-	qman_irqsource_remove;
-	qman_modify_cgr;
-	qman_oos_fq;
-	qman_portal_dequeue;
-	qman_portal_poll_rx;
-	qman_query_fq_frm_cnt;
-	qman_query_fq_np;
-	qman_release_cgrid_range;
-	qman_reserve_fqid_range;
-	qman_retire_fq;
-	qman_set_fq_lookup_table;
-	qman_set_vdq;
-	qman_static_dequeue_add;
-	qman_thread_fd;
-	qman_thread_irq;
-	qman_volatile_dequeue;
-	rte_dpaa_driver_register;
-	rte_dpaa_driver_unregister;
-	rte_dpaa_portal_fq_close;
-	rte_dpaa_portal_fq_init;
-	rte_dpaa_portal_init;
-
-	local: *;
-};
diff --git a/drivers/bus/fslmc/version.map b/drivers/bus/fslmc/version.map
deleted file mode 100644
index ba3c7f36e3..0000000000
--- a/drivers/bus/fslmc/version.map
+++ /dev/null
@@ -1,127 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_fslmc_vfio_mem_dmamap;
-
-	local: *;
-};
-
-INTERNAL {
-	global:
-
-	dpaa2_affine_qbman_ethrx_swp;
-	dpaa2_affine_qbman_swp;
-	dpaa2_alloc_dpbp_dev;
-	dpaa2_alloc_dq_storage;
-	dpaa2_dpbp_supported;
-	dpaa2_dqrr_size;
-	dpaa2_eqcr_size;
-	dpaa2_free_dpbp_dev;
-	dpaa2_free_dq_storage;
-	dpaa2_free_eq_descriptors;
-	dpaa2_get_mcp_ptr;
-	dpaa2_io_portal;
-	dpaa2_seqn_dynfield_offset;
-	dpaa2_svr_family;
-	dpbp_disable;
-	dpbp_enable;
-	dpbp_get_attributes;
-	dpbp_get_num_free_bufs;
-	dpbp_open;
-	dpbp_reset;
-	dpci_get_opr;
-	dpci_set_opr;
-	dpci_set_rx_queue;
-	dpcon_get_attributes;
-	dpcon_open;
-	dpcon_close;
-	dpcon_reset;
-	dpcon_enable;
-	dpcon_disable;
-	dpdmai_close;
-	dpdmai_disable;
-	dpdmai_enable;
-	dpdmai_get_attributes;
-	dpdmai_get_rx_queue;
-	dpdmai_get_tx_queue;
-	dpdmai_open;
-	dpdmai_set_rx_queue;
-	dpio_add_static_dequeue_channel;
-	dpio_close;
-	dpio_disable;
-	dpio_enable;
-	dpio_get_attributes;
-	dpio_open;
-	dpio_remove_static_dequeue_channel;
-	dpio_reset;
-	dpio_get_stashing_destination;
-	dpio_get_stashing_destination_source;
-	dpio_set_stashing_destination;
-	dpio_set_stashing_destination_by_core_id;
-	dpio_set_stashing_destination_source;
-	mc_get_soc_version;
-	mc_get_version;
-	mc_send_command;
-	per_lcore__dpaa2_io;
-	qbman_check_command_complete;
-	qbman_check_new_result;
-	qbman_eq_desc_clear;
-	qbman_eq_desc_set_dca;
-	qbman_eq_desc_set_fq;
-	qbman_eq_desc_set_no_orp;
-	qbman_eq_desc_set_orp;
-	qbman_eq_desc_set_qd;
-	qbman_eq_desc_set_response;
-	qbman_eq_desc_set_token;
-	qbman_fq_query_state;
-	qbman_fq_state_frame_count;
-	qbman_get_dqrr_from_idx;
-	qbman_get_dqrr_idx;
-	qbman_pull_desc_clear;
-	qbman_pull_desc_set_fq;
-	qbman_pull_desc_set_numframes;
-	qbman_pull_desc_set_storage;
-	qbman_release_desc_clear;
-	qbman_release_desc_set_bpid;
-	qbman_result_DQ_fd;
-	qbman_result_DQ_flags;
-	qbman_result_DQ_fqd_ctx;
-	qbman_result_DQ_odpid;
-	qbman_result_DQ_seqnum;
-	qbman_result_SCN_state;
-	qbman_result_eqresp_fd;
-	qbman_result_eqresp_rc;
-	qbman_result_eqresp_rspid;
-	qbman_result_eqresp_set_rspid;
-	qbman_result_has_new_result;
-	qbman_swp_acquire;
-	qbman_swp_dqrr_consume;
-	qbman_swp_dqrr_idx_consume;
-	qbman_swp_dqrr_next;
-	qbman_swp_enqueue_multiple;
-	qbman_swp_enqueue_multiple_desc;
-	qbman_swp_enqueue_multiple_fd;
-	qbman_swp_interrupt_clear_status;
-	qbman_swp_prefetch_dqrr_next;
-	qbman_swp_pull;
-	qbman_swp_push_set;
-	qbman_swp_release;
-	rte_dpaa2_alloc_dpci_dev;
-	rte_dpaa2_free_dpci_dev;
-	rte_dpaa2_intr_disable;
-	rte_dpaa2_intr_enable;
-	rte_fslmc_driver_register;
-	rte_fslmc_driver_unregister;
-	rte_fslmc_get_device_count;
-	rte_fslmc_object_register;
-	rte_global_active_dqs_list;
-	rte_fslmc_vfio_mem_dmaunmap;
-	rte_fslmc_cold_mem_vaddr_to_iova;
-	rte_fslmc_cold_mem_iova_to_vaddr;
-	rte_fslmc_mem_vaddr_to_iova;
-	rte_fslmc_mem_iova_to_vaddr;
-	rte_fslmc_io_vaddr_to_iova;
-	rte_fslmc_io_iova_to_vaddr;
-
-	local: *;
-};
diff --git a/drivers/bus/ifpga/version.map b/drivers/bus/ifpga/version.map
deleted file mode 100644
index 3d1943afe4..0000000000
--- a/drivers/bus/ifpga/version.map
+++ /dev/null
@@ -1,9 +0,0 @@
-INTERNAL {
-	global:
-
-	rte_ifpga_driver_register;
-	rte_ifpga_driver_unregister;
-	rte_ifpga_find_afu_by_name;
-
-	local: *;
-};
diff --git a/drivers/bus/pci/version.map b/drivers/bus/pci/version.map
deleted file mode 100644
index cd653de5ac..0000000000
--- a/drivers/bus/pci/version.map
+++ /dev/null
@@ -1,43 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_pci_dump;
-	rte_pci_ioport_map;
-	rte_pci_ioport_read;
-	rte_pci_ioport_unmap;
-	rte_pci_ioport_write;
-	rte_pci_map_device;
-	rte_pci_read_config;
-	rte_pci_unmap_device;
-	rte_pci_write_config;
-
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 20.11
-	rte_pci_find_ext_capability;
-
-	# added in 21.08
-	rte_pci_set_bus_master;
-
-	# added in 23.07
-	rte_pci_mmio_read;
-	rte_pci_mmio_write;
-
-	# added in 23.11
-	rte_pci_find_capability;
-	rte_pci_find_next_capability;
-	rte_pci_has_capability_list;
-};
-
-INTERNAL {
-	global:
-
-	rte_pci_get_sysfs_path;
-	rte_pci_pasid_set_state;
-	rte_pci_register;
-	rte_pci_unregister;
-};
diff --git a/drivers/bus/platform/version.map b/drivers/bus/platform/version.map
deleted file mode 100644
index 37c4a74f82..0000000000
--- a/drivers/bus/platform/version.map
+++ /dev/null
@@ -1,10 +0,0 @@
-DPDK_25 {
-	local: *;
-};
-
-INTERNAL {
-	global:
-
-	rte_platform_register;
-	rte_platform_unregister;
-};
diff --git a/drivers/bus/uacce/version.map b/drivers/bus/uacce/version.map
deleted file mode 100644
index 533b2ea0d8..0000000000
--- a/drivers/bus/uacce/version.map
+++ /dev/null
@@ -1,15 +0,0 @@
-INTERNAL {
-	global:
-
-	rte_uacce_avail_queues;
-	rte_uacce_queue_alloc;
-	rte_uacce_queue_free;
-	rte_uacce_queue_ioctl;
-	rte_uacce_queue_mmap;
-	rte_uacce_queue_start;
-	rte_uacce_queue_unmap;
-	rte_uacce_register;
-	rte_uacce_unregister;
-
-	local: *;
-};
diff --git a/drivers/bus/vdev/version.map b/drivers/bus/vdev/version.map
deleted file mode 100644
index 51a0f1d5e1..0000000000
--- a/drivers/bus/vdev/version.map
+++ /dev/null
@@ -1,17 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_vdev_add_custom_scan;
-	rte_vdev_init;
-	rte_vdev_remove_custom_scan;
-	rte_vdev_uninit;
-
-	local: *;
-};
-
-INTERNAL {
-	global:
-
-	rte_vdev_register;
-	rte_vdev_unregister;
-};
diff --git a/drivers/bus/vmbus/version.map b/drivers/bus/vmbus/version.map
deleted file mode 100644
index 365f71529f..0000000000
--- a/drivers/bus/vmbus/version.map
+++ /dev/null
@@ -1,33 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_vmbus_chan_close;
-	rte_vmbus_chan_open;
-	rte_vmbus_chan_recv;
-	rte_vmbus_chan_recv_raw;
-	rte_vmbus_chan_rx_empty;
-	rte_vmbus_chan_send;
-	rte_vmbus_chan_send_sglist;
-	rte_vmbus_chan_signal_read;
-	rte_vmbus_chan_signal_tx;
-	rte_vmbus_irq_mask;
-	rte_vmbus_irq_read;
-	rte_vmbus_irq_unmask;
-	rte_vmbus_map_device;
-	rte_vmbus_max_channels;
-	rte_vmbus_probe;
-	rte_vmbus_scan;
-	rte_vmbus_set_latency;
-	rte_vmbus_sub_channel_index;
-	rte_vmbus_subchan_open;
-	rte_vmbus_unmap_device;
-
-	local: *;
-};
-
-INTERNAL {
-	global:
-
-	rte_vmbus_register;
-	rte_vmbus_unregister;
-};
diff --git a/drivers/common/cnxk/version.map b/drivers/common/cnxk/version.map
deleted file mode 100644
index 7f40dcced2..0000000000
--- a/drivers/common/cnxk/version.map
+++ /dev/null
@@ -1,576 +0,0 @@
-INTERNAL {
-	global:
-
-	cnxk_ipsec_icvlen_get;
-	cnxk_ipsec_ivlen_get;
-	cnxk_ipsec_outb_rlens_get;
-	cnxk_ipsec_outb_roundup_byte;
-	cnxk_logtype_base;
-	cnxk_logtype_cpt;
-	cnxk_logtype_dpi;
-	cnxk_logtype_esw;
-	cnxk_logtype_mbox;
-	cnxk_logtype_ml;
-	cnxk_logtype_nix;
-	cnxk_logtype_npa;
-	cnxk_logtype_npc;
-	cnxk_logtype_ree;
-	cnxk_logtype_rep;
-	cnxk_logtype_sso;
-	cnxk_logtype_tim;
-	cnxk_logtype_tm;
-	cnxk_ot_ipsec_inb_sa_fill;
-	cnxk_ot_ipsec_outb_sa_fill;
-	cnxk_ot_ipsec_inb_sa_valid;
-	cnxk_ot_ipsec_outb_sa_valid;
-	cnxk_ow_ipsec_inb_sa_fill;
-	cnxk_ow_ipsec_outb_sa_fill;
-	cnxk_on_ipsec_inb_sa_create;
-	cnxk_on_ipsec_outb_sa_create;
-	roc_ae_ec_grp_get;
-	roc_ae_ec_grp_put;
-	roc_ae_fpm_get;
-	roc_ae_fpm_put;
-	roc_aes_hash_key_derive;
-	roc_aes_xcbc_key_derive;
-	roc_bphy_cgx_cpri_mode_change;
-	roc_bphy_cgx_cpri_mode_misc;
-	roc_bphy_cgx_cpri_mode_tx_control;
-	roc_bphy_cgx_dev_fini;
-	roc_bphy_cgx_dev_init;
-	roc_bphy_cgx_fec_set;
-	roc_bphy_cgx_fec_supported_get;
-	roc_bphy_cgx_get_linkinfo;
-	roc_bphy_cgx_intlbk_disable;
-	roc_bphy_cgx_intlbk_enable;
-	roc_bphy_cgx_ptp_rx_disable;
-	roc_bphy_cgx_ptp_rx_enable;
-	roc_bphy_cgx_set_link_mode;
-	roc_bphy_cgx_set_link_state;
-	roc_bphy_cgx_start_rxtx;
-	roc_bphy_cgx_stop_rxtx;
-	roc_bphy_dev_fini;
-	roc_bphy_dev_init;
-	roc_bphy_intr_available;
-	roc_bphy_intr_clear;
-	roc_bphy_intr_fini;
-	roc_bphy_intr_handler;
-	roc_bphy_intr_init;
-	roc_bphy_intr_max_get;
-	roc_bphy_intr_register;
-	roc_bphy_npa_pf_func_get;
-	roc_bphy_sso_pf_func_get;
-	roc_clk_freq_get;
-	roc_cpt_afs_print;
-	roc_cpt_dev_clear;
-	roc_cpt_dev_configure;
-	roc_cpt_dev_fini;
-	roc_cpt_dev_init;
-	roc_cpt_eng_grp_add;
-	roc_cpt_inline_ipsec_cfg;
-	roc_cpt_inline_ipsec_inb_cfg_read;
-	roc_cpt_inline_ipsec_inb_cfg;
-	roc_cpt_iq_disable;
-	roc_cpt_iq_enable;
-	roc_cpt_lf_ctx_flush;
-	roc_cpt_lf_ctx_reload;
-	roc_cpt_lf_init;
-	roc_cpt_lf_fini;
-	roc_cpt_lf_reset;
-	roc_cpt_lfs_print;
-	roc_cpt_lmtline_init;
-	roc_cpt_parse_hdr_dump;
-	roc_cpt_rxc_time_cfg;
-	roc_cpt_ctx_write;
-	roc_cpt_int_misc_cb_register;
-	roc_cpt_int_misc_cb_unregister;
-	roc_dpi_configure;
-	roc_dpi_configure_v2;
-	roc_dpi_dev_fini;
-	roc_dpi_dev_init;
-	roc_dpi_disable;
-	roc_dpi_enable;
-	roc_dpi_wait_queue_idle;
-	roc_error_msg_get;
-	roc_eswitch_is_repte_pfs_vf;
-	roc_eswitch_nix_process_repte_notify_cb_register;
-	roc_eswitch_nix_process_repte_notify_cb_unregister;
-	roc_eswitch_nix_repte_stats;
-	roc_eswitch_nix_vlan_tpid_set;
-	roc_eswitch_npc_mcam_delete_rule;
-	roc_eswitch_npc_mcam_rx_rule;
-	roc_eswitch_npc_mcam_tx_rule;
-	roc_eswitch_npc_rss_action_configure;
-	roc_hash_md5_gen;
-	roc_hash_sha1_gen;
-	roc_hash_sha256_gen;
-	roc_hash_sha512_gen;
-	roc_idev_cpt_get;
-	roc_idev_cpt_set;
-	roc_idev_lmt_base_addr_get;
-	roc_idev_mcs_free;
-	roc_idev_mcs_get;
-	roc_idev_mcs_set;
-	roc_idev_npa_maxpools_get;
-	roc_idev_npa_maxpools_set;
-	roc_idev_npa_nix_get;
-	roc_idev_num_lmtlines_get;
-	roc_idev_nix_inl_meta_aura_get;
-	roc_idev_nix_inl_dev_pffunc_get;
-	roc_idev_nix_list_get;
-	roc_idev_nix_rx_chan_base_get;
-	roc_idev_nix_rx_chan_set;
-	roc_idev_nix_rx_inject_get;
-	roc_idev_nix_rx_inject_set;
-	roc_idev_rvu_lf_free;
-	roc_idev_rvu_lf_get;
-	roc_idev_rvu_lf_set;
-	roc_ml_reg_read64;
-	roc_ml_reg_write64;
-	roc_ml_reg_read32;
-	roc_ml_reg_write32;
-	roc_ml_reg_save;
-	roc_ml_addr_ap2mlip;
-	roc_ml_addr_mlip2ap;
-	roc_ml_addr_pa_to_offset;
-	roc_ml_addr_offset_to_pa;
-	roc_ml_scratch_write_job;
-	roc_ml_scratch_is_valid_bit_set;
-	roc_ml_scratch_is_done_bit_set;
-	roc_ml_scratch_enqueue;
-	roc_ml_scratch_dequeue;
-	roc_ml_scratch_queue_reset;
-	roc_ml_jcmdq_enqueue_lf;
-	roc_ml_jcmdq_enqueue_sl;
-	roc_ml_clk_force_on;
-	roc_ml_clk_force_off;
-	roc_ml_dma_stall_on;
-	roc_ml_dma_stall_off;
-	roc_ml_mlip_is_enabled;
-	roc_ml_mlip_reset;
-	roc_ml_dev_init;
-	roc_ml_dev_fini;
-	roc_ml_blk_init;
-	roc_ml_blk_fini;
-	roc_ml_sso_pf_func_get;
-	roc_model;
-	roc_se_auth_key_set;
-	roc_se_ciph_key_set;
-	roc_se_ctx_init;
-	roc_mcs_active_lmac_set;
-	roc_mcs_ctrl_pkt_rule_alloc;
-	roc_mcs_ctrl_pkt_rule_free;
-	roc_mcs_ctrl_pkt_rule_write;
-	roc_mcs_custom_tag_cfg_get;
-	roc_mcs_dev_init;
-	roc_mcs_dev_fini;
-	roc_mcs_event_cb_register;
-	roc_mcs_event_cb_unregister;
-	roc_mcs_flowid_entry_enable;
-	roc_mcs_flowid_entry_read;
-	roc_mcs_flowid_entry_write;
-	roc_mcs_flowid_stats_get;
-	roc_mcs_hw_info_get;
-	roc_mcs_intr_configure;
-	roc_mcs_is_supported;
-	roc_mcs_lmac_mode_set;
-	roc_mcs_pn_table_write;
-	roc_mcs_pn_table_read;
-	roc_mcs_pn_threshold_set;
-	roc_mcs_port_cfg_get;
-	roc_mcs_port_cfg_set;
-	roc_mcs_port_recovery;
-	roc_mcs_port_reset;
-	roc_mcs_port_stats_get;
-	roc_mcs_rsrc_alloc;
-	roc_mcs_rsrc_free;
-	roc_mcs_rx_sc_cam_enable;
-	roc_mcs_rx_sc_cam_read;
-	roc_mcs_rx_sc_cam_write;
-	roc_mcs_rx_sc_sa_map_read;
-	roc_mcs_rx_sc_sa_map_write;
-	roc_mcs_sa_policy_read;
-	roc_mcs_sa_policy_write;
-	roc_mcs_sa_port_map_update;
-	roc_mcs_sc_stats_get;
-	roc_mcs_secy_policy_read;
-	roc_mcs_secy_policy_write;
-	roc_mcs_secy_stats_get;
-	roc_mcs_stats_clear;
-	roc_mcs_tx_sc_sa_map_read;
-	roc_mcs_tx_sc_sa_map_write;
-	roc_nix_bpf_alloc;
-	roc_nix_bpf_config;
-	roc_nix_bpf_connect;
-	roc_nix_bpf_count_get;
-	roc_nix_bpf_dump;
-	roc_nix_bpf_ena_dis;
-	roc_nix_bpf_free;
-	roc_nix_bpf_free_all;
-	roc_nix_bpf_level_to_idx;
-	roc_nix_bpf_lf_stats_read;
-	roc_nix_bpf_lf_stats_reset;
-	roc_nix_bpf_pre_color_tbl_setup;
-	roc_nix_bpf_stats_read;
-	roc_nix_bpf_stats_reset;
-	roc_nix_bpf_stats_to_idx;
-	roc_nix_bpf_timeunit_get;
-	roc_nix_bpids_alloc;
-	roc_nix_bpids_free;
-	roc_nix_chan_bpid_set;
-	roc_nix_chan_count_get;
-	roc_nix_cq_dump;
-	roc_nix_cq_fini;
-	roc_nix_cq_head_tail_get;
-	roc_nix_cq_init;
-	roc_nix_cqe_dump;
-	roc_nix_dev_fini;
-	roc_nix_dev_init;
-	roc_nix_dump;
-	roc_nix_err_intr_ena_dis;
-	roc_nix_fc_config_get;
-	roc_nix_fc_config_set;
-	roc_nix_fc_mode_set;
-	roc_nix_fc_mode_get;
-	roc_nix_fc_npa_bp_cfg;
-	roc_nix_get_base_chan;
-	roc_nix_get_pf;
-	roc_nix_get_pf_func;
-	roc_nix_max_rep_count;
-	roc_nix_get_rx_chan_cnt;
-	roc_nix_get_vf;
-	roc_nix_get_vwqe_interval;
-	roc_nix_inl_cb_register;
-	roc_nix_inl_cb_unregister;
-	roc_nix_inl_ctx_write;
-	roc_nix_inl_dev_cpt_setup;
-	roc_nix_inl_dev_cpt_release;
-	roc_nix_inl_dev_dump;
-	roc_nix_inl_dev_fini;
-	roc_nix_inl_dev_init;
-	roc_nix_inl_dev_is_multi_channel;
-	roc_nix_inl_dev_is_probed;
-	roc_nix_inl_dev_stats_get;
-	roc_nix_inl_dev_stats_reset;
-	roc_nix_inl_dev_lock;
-	roc_nix_inl_dev_rq;
-	roc_nix_inl_dev_rq_get;
-	roc_nix_inl_dev_rq_put;
-	roc_nix_inl_dev_unlock;
-	roc_nix_inl_dev_xaq_realloc;
-	roc_nix_inl_eng_caps_get;
-	roc_nix_inl_inb_is_enabled;
-	roc_nix_inl_inb_init;
-	roc_nix_inl_inb_inj_lf_get;
-	roc_nix_inl_inb_rx_inject_enable;
-	roc_nix_inl_inb_sa_base_get;
-	roc_nix_inl_inb_sa_get;
-	roc_nix_inl_inb_spi_range;
-	roc_nix_inl_inb_sa_sz;
-	roc_nix_inl_inb_tag_update;
-	roc_nix_inl_inb_fini;
-	roc_nix_inl_inb_set;
-	roc_nix_inb_is_with_inl_dev;
-	roc_nix_inl_meta_aura_check;
-	roc_nix_inl_meta_pool_cb_register;
-	roc_nix_inl_custom_meta_pool_cb_register;
-	roc_nix_inb_mode_set;
-	roc_nix_inl_cpt_lf_stats_get;
-	roc_nix_inl_dev_qptr_get;
-	roc_nix_inl_outb_fini;
-	roc_nix_inl_outb_init;
-	roc_nix_inl_outb_lf_base_get;
-	roc_nix_inl_outb_sa_base_get;
-	roc_nix_inl_outb_sso_pffunc_get;
-	roc_nix_inl_outb_is_enabled;
-	roc_nix_inl_outb_ring_base_get;
-	roc_nix_inl_outb_soft_exp_poll_switch;
-	roc_nix_inl_rq_ena_dis;
-	roc_nix_inl_sa_sync;
-	roc_nix_inl_ts_pkind_set;
-	roc_nix_inl_outb_cpt_lfs_dump;
-	roc_nix_cpt_ctx_cache_sync;
-	roc_nix_is_lbk;
-	roc_nix_is_esw;
-	roc_nix_is_pf;
-	roc_nix_is_sdp;
-	roc_nix_is_vf_or_sdp;
-	roc_nix_lf_alloc;
-	roc_nix_lf_inl_ipsec_cfg;
-	roc_nix_lf_free;
-	roc_nix_lf_get_reg_count;
-	roc_nix_lf_reg_dump;
-	roc_nix_lso_custom_fmt_setup;
-	roc_nix_lso_fmt_get;
-	roc_nix_lso_fmt_setup;
-	roc_nix_mac_addr_add;
-	roc_nix_mac_addr_del;
-	roc_nix_mac_addr_set;
-	roc_nix_mac_link_cb_register;
-	roc_nix_mac_link_cb_unregister;
-	roc_nix_mac_link_info_get_cb_register;
-	roc_nix_mac_link_info_get_cb_unregister;
-	roc_nix_mac_link_event_start_stop;
-	roc_nix_mac_link_info_get;
-	roc_nix_mac_link_info_set;
-	roc_nix_mac_link_state_set;
-	roc_nix_mac_loopback_enable;
-	roc_nix_mac_max_entries_get;
-	roc_nix_mac_max_rx_len_set;
-	roc_nix_mac_mtu_set;
-	roc_nix_mac_promisc_mode_enable;
-	roc_nix_mac_rxtx_start_stop;
-	roc_nix_mac_stats_reset;
-	roc_nix_max_pkt_len;
-	roc_nix_mcast_list_free;
-	roc_nix_mcast_list_setup;
-	roc_nix_mcast_mcam_entry_alloc;
-	roc_nix_mcast_mcam_entry_ena_dis;
-	roc_nix_mcast_mcam_entry_free;
-	roc_nix_mcast_mcam_entry_write;
-	roc_nix_npc_mac_addr_get;
-	roc_nix_npc_mac_addr_set;
-	roc_nix_npc_promisc_ena_dis;
-	roc_nix_npc_rx_ena_dis;
-	roc_nix_npc_mcast_config;
-	roc_nix_pfc_mode_get;
-	roc_nix_pfc_mode_set;
-	roc_nix_ptp_clock_read;
-	roc_nix_ptp_info_cb_register;
-	roc_nix_ptp_info_cb_unregister;
-	roc_nix_ptp_is_enable;
-	roc_nix_ptp_rx_ena_dis;
-	roc_nix_ptp_sync_time_adjust;
-	roc_nix_ptp_tx_ena_dis;
-	roc_nix_q_err_cb_register;
-	roc_nix_q_err_cb_unregister;
-	roc_nix_queues_ctx_dump;
-	roc_nix_ras_intr_ena_dis;
-	roc_nix_reassembly_configure;
-	roc_nix_register_cq_irqs;
-	roc_nix_register_queue_irqs;
-	roc_nix_rq_cman_config;
-	roc_nix_rq_dump;
-	roc_nix_rq_ena_dis;
-	roc_nix_rq_fini;
-	roc_nix_rq_init;
-	roc_nix_rq_is_sso_enable;
-	roc_nix_rq_modify;
-	roc_nix_rss_default_setup;
-	roc_nix_rss_flowkey_set;
-	roc_nix_rss_key_default_fill;
-	roc_nix_rss_key_get;
-	roc_nix_rss_key_set;
-	roc_nix_rss_reta_get;
-	roc_nix_rss_reta_set;
-	roc_nix_rx_chan_cfg_get;
-	roc_nix_rx_chan_cfg_set;
-	roc_nix_rx_drop_re_set;
-	roc_nix_rx_queue_intr_disable;
-	roc_nix_rx_queue_intr_enable;
-	roc_nix_sq_desc_dump;
-	roc_nix_sq_dump;
-	roc_nix_sq_ena_dis;
-	roc_nix_sq_fini;
-	roc_nix_sq_head_tail_get;
-	roc_nix_sq_init;
-	roc_nix_stats_get;
-	roc_nix_stats_queue_get;
-	roc_nix_stats_queue_reset;
-	roc_nix_stats_reset;
-	roc_nix_num_xstats_get;
-	roc_nix_xstats_get;
-	roc_nix_xstats_names_get;
-	roc_nix_switch_hdr_set;
-	roc_nix_eeprom_info_get;
-	roc_nix_smq_flush;
-	roc_nix_tm_egress_link_cfg_set;
-	roc_nix_tm_dump;
-	roc_nix_tm_err_to_rte_err;
-	roc_nix_tm_fini;
-	roc_nix_tm_free_resources;
-	roc_nix_tm_lvl_cnt_get;
-	roc_nix_tm_tree_type_get;
-	roc_nix_tm_hierarchy_disable;
-	roc_nix_tm_hierarchy_enable;
-	roc_nix_tm_hierarchy_xmit_enable;
-	roc_nix_tm_init;
-	roc_nix_tm_is_user_hierarchy_enabled;
-	roc_nix_tm_leaf_cnt;
-	roc_nix_tm_lvl_have_link_access;
-	roc_nix_tm_lvl_is_leaf;
-	roc_nix_tm_mark_config;
-	roc_nix_tm_mark_format_get;
-	roc_nix_tm_max_prio;
-	roc_nix_tm_node_add;
-	roc_nix_tm_node_delete;
-	roc_nix_tm_node_get;
-	roc_nix_tm_node_lvl;
-	roc_nix_tm_node_name_get;
-	roc_nix_tm_node_next;
-	roc_nix_tm_node_parent_update;
-	roc_nix_tm_node_pkt_mode_update;
-	roc_nix_tm_node_shaper_update;
-	roc_nix_tm_node_stats_get;
-	roc_nix_tm_node_suspend_resume;
-	roc_nix_tm_prealloc_res;
-	roc_nix_tm_pfc_prepare_tree;
-	roc_nix_tm_pfc_rlimit_sq;
-	roc_nix_tm_prepare_rate_limited_tree;
-	roc_nix_tm_rlimit_sq;
-	roc_nix_tm_root_has_sp;
-	roc_nix_tm_rsrc_count;
-	roc_nix_tm_rsrc_max;
-	roc_nix_tm_shaper_default_red_algo;
-	roc_nix_tm_shaper_profile_add;
-	roc_nix_tm_shaper_profile_delete;
-	roc_nix_tm_shaper_profile_get;
-	roc_nix_tm_shaper_profile_next;
-	roc_nix_tm_shaper_profile_update;
-	roc_nix_tm_sq_aura_fc;
-	roc_nix_tm_sq_flush_spin;
-	roc_nix_unregister_cq_irqs;
-	roc_nix_unregister_queue_irqs;
-	roc_nix_vlan_insert_ena_dis;
-	roc_nix_vlan_mcam_entry_alloc_and_write;
-	roc_nix_vlan_mcam_entry_ena_dis;
-	roc_nix_vlan_mcam_entry_free;
-	roc_nix_vlan_mcam_entry_read;
-	roc_nix_vlan_mcam_entry_write;
-	roc_nix_vlan_strip_vtag_ena_dis;
-	roc_nix_vlan_tpid_set;
-	roc_npa_aura_create;
-	roc_npa_aura_destroy;
-	roc_npa_buf_type_mask;
-	roc_npa_buf_type_limit_get;
-	roc_npa_buf_type_update;
-	roc_npa_aura_drop_set;
-	roc_npa_aura_limit_modify;
-	roc_npa_aura_op_range_get;
-	roc_npa_aura_op_range_set;
-	roc_npa_aura_bp_configure;
-	roc_npa_ctx_dump;
-	roc_npa_dev_fini;
-	roc_npa_dev_init;
-	roc_npa_dev_lock;
-	roc_npa_dev_unlock;
-	roc_npa_dump;
-	roc_npa_lf_init_cb_register;
-	roc_npa_pf_func_get;
-	roc_npa_pool_create;
-	roc_npa_pool_destroy;
-	roc_npa_pool_op_pc_reset;
-	roc_npa_pool_op_range_set;
-	roc_npa_pool_range_update_check;
-	roc_npa_zero_aura_handle;
-	roc_npc_aged_flow_ctx_get;
-	roc_npc_fini;
-	roc_npc_flow_create;
-	roc_npc_flow_destroy;
-	roc_npc_flow_dump;
-	roc_npc_flow_mcam_dump;
-	roc_npc_flow_parse;
-	roc_npc_get_free_mcam_entry;
-	roc_npc_get_low_priority_mcam;
-	roc_npc_init;
-	roc_npc_kex_capa_get;
-	roc_npc_mark_actions_get;
-	roc_npc_mark_actions_sub_return;
-	roc_npc_vtag_actions_get;
-	roc_npc_vtag_actions_sub_return;
-	roc_npc_mcam_alloc_counter;
-	roc_npc_mcam_alloc_entries;
-	roc_npc_mcam_alloc_entry;
-	roc_npc_mcam_clear_counter;
-	roc_npc_inl_mcam_clear_counter;
-	roc_npc_mcam_enable_all_entries;
-	roc_npc_mcam_ena_dis_entry;
-	roc_npc_mcam_free_all_resources;
-	roc_npc_mcam_free_counter;
-	roc_npc_mcam_free;
-	roc_npc_mcam_free_entry;
-	roc_npc_mcam_get_stats;
-	roc_npc_mcam_init;
-	roc_npc_mcam_move;
-	roc_npc_mcam_merge_base_steering_rule;
-	roc_npc_mcam_write_entry;
-	roc_npc_mcam_read_counter;
-	roc_npc_inl_mcam_read_counter;
-	roc_npc_profile_name_get;
-	roc_npc_sdp_channel_get;
-	roc_npc_validate_portid_action;
-	roc_ot_ipsec_inb_sa_init;
-	roc_ot_ipsec_outb_sa_init;
-	roc_ow_ipsec_inb_sa_init;
-	roc_ow_ipsec_outb_sa_init;
-	roc_ow_reass_inb_sa_init;
-	roc_plt_control_lmt_id_get;
-	roc_plt_init;
-	roc_plt_init_cb_register;
-	roc_plt_lmt_validate;
-	roc_se_hmac_opad_ipad_gen;
-	roc_sso_dev_fini;
-	roc_sso_dev_init;
-	roc_sso_dump;
-	roc_sso_hwgrp_agq_alloc;
-	roc_sso_hwgrp_agq_free;
-	roc_sso_hwgrp_agq_from_tag;
-	roc_sso_hwgrp_agq_release;
-	roc_sso_hwgrp_alloc_xaq;
-	roc_sso_hwgrp_base_get;
-	roc_sso_hwgrp_free_xaq_aura;
-	roc_sso_hwgrp_hws_link_status;
-	roc_sso_hwgrp_init_xaq_aura;
-	roc_sso_hwgrp_qos_config;
-	roc_sso_hwgrp_release_xaq;
-	roc_sso_hwgrp_set_priority;
-	roc_sso_hwgrp_stash_config;
-	roc_sso_hwgrp_stats_get;
-	roc_sso_hws_base_get;
-	roc_sso_hws_link;
-	roc_sso_hws_stats_get;
-	roc_sso_hws_gwc_invalidate;
-	roc_sso_hws_unlink;
-	roc_sso_ns_to_gw;
-	roc_sso_pf_func_get;
-	roc_sso_rsrc_fini;
-	roc_sso_rsrc_init;
-	roc_tim_fini;
-	roc_tim_init;
-	roc_tim_lf_alloc;
-	roc_tim_lf_base_get;
-	roc_tim_lf_config;
-	roc_tim_lf_config_hwwqe;
-	roc_tim_lf_disable;
-	roc_tim_lf_enable;
-	roc_tim_lf_free;
-	roc_tim_lf_interval;
-	roc_ree_af_reg_read;
-	roc_ree_af_reg_write;
-	roc_ree_config_lf;
-	roc_ree_dev_fini;
-	roc_ree_dev_init;
-	roc_ree_err_intr_register;
-	roc_ree_err_intr_unregister;
-	roc_ree_iq_disable;
-	roc_ree_iq_enable;
-	roc_ree_msix_offsets_get;
-	roc_ree_qp_get_base;
-	roc_ree_queues_attach;
-	roc_ree_queues_detach;
-	roc_ree_rule_db_get;
-	roc_ree_rule_db_len_get;
-	roc_ree_rule_db_prog;
-	roc_rvu_lf_dev_fini;
-	roc_rvu_lf_dev_init;
-	roc_rvu_lf_irq_register;
-	roc_rvu_lf_irq_unregister;
-	roc_rvu_lf_msg_handler_register;
-	roc_rvu_lf_msg_handler_unregister;
-	roc_rvu_lf_msg_id_range_check;
-	roc_rvu_lf_msg_id_range_set;
-	roc_rvu_lf_msg_process;
-	roc_rvu_lf_pf_func_get;
-
-	local: *;
-};
diff --git a/drivers/common/cpt/version.map b/drivers/common/cpt/version.map
deleted file mode 100644
index b4080e0f8c..0000000000
--- a/drivers/common/cpt/version.map
+++ /dev/null
@@ -1,11 +0,0 @@
-INTERNAL {
-	global:
-
-	cpt_fpm_clear;
-	cpt_fpm_init;
-	cpt_pmd_ops_helper_asym_get_mlen;
-	cpt_pmd_ops_helper_get_mlen_direct_mode;
-	cpt_pmd_ops_helper_get_mlen_sg_mode;
-
-	local: *;
-};
diff --git a/drivers/common/dpaax/version.map b/drivers/common/dpaax/version.map
deleted file mode 100644
index d48a6b6f37..0000000000
--- a/drivers/common/dpaax/version.map
+++ /dev/null
@@ -1,25 +0,0 @@
-INTERNAL {
-	global:
-
-	dpaax_iova_table_depopulate;
-	dpaax_iova_table_dump;
-	dpaax_iova_table_p;
-	dpaax_iova_table_populate;
-	dpaax_iova_table_update;
-	dpaax_logger;
-	of_device_is_available;
-	of_device_is_compatible;
-	of_find_compatible_node;
-	of_find_node_by_phandle;
-	of_get_address;
-	of_get_mac_address;
-	of_get_next_child;
-	of_get_parent;
-	of_get_property;
-	of_init_path;
-	of_n_addr_cells;
-	of_translate_address;
-	rta_sec_era;
-
-	local: *;
-};
diff --git a/drivers/common/ionic/version.map b/drivers/common/ionic/version.map
deleted file mode 100644
index db532d4ffc..0000000000
--- a/drivers/common/ionic/version.map
+++ /dev/null
@@ -1,10 +0,0 @@
-INTERNAL {
-	global:
-
-	ionic_uio_scan_mnet_devices;
-	ionic_uio_scan_mcrypt_devices;
-	ionic_uio_get_rsrc;
-	ionic_uio_rel_rsrc;
-
-	local: *;
-};
diff --git a/drivers/common/mlx5/version.map b/drivers/common/mlx5/version.map
deleted file mode 100644
index 8301485839..0000000000
--- a/drivers/common/mlx5/version.map
+++ /dev/null
@@ -1,174 +0,0 @@
-INTERNAL {
-	global:
-
-	haswell_broadwell_cpu;
-
-	mlx5_auxiliary_get_child_name; # WINDOWS_NO_EXPORT
-
-	mlx5_class_driver_register;
-
-	mlx5_common_init;
-
-	mlx5_common_verbs_reg_mr; # WINDOWS_NO_EXPORT
-	mlx5_common_verbs_dereg_mr; # WINDOWS_NO_EXPORT
-
-	mlx5_dev_is_pci;
-	mlx5_dev_is_vf_pci;
-	mlx5_dev_to_pci_str;
-	mlx5_dev_mempool_unregister;
-	mlx5_dev_mempool_subscribe;
-
-	mlx5_devx_cmd_alloc_pd;
-	mlx5_devx_cmd_create_conn_track_offload_obj;
-	mlx5_devx_cmd_create_cq;
-	mlx5_devx_cmd_create_credential_obj;
-	mlx5_devx_cmd_create_crypto_login_obj;
-	mlx5_devx_cmd_create_dek_obj;
-	mlx5_devx_cmd_create_flex_parser;
-	mlx5_devx_cmd_create_flow_hit_aso_obj;
-	mlx5_devx_cmd_create_flow_meter_aso_obj;
-	mlx5_devx_cmd_create_geneve_tlv_option;
-	mlx5_devx_cmd_create_import_kek_obj;
-	mlx5_devx_cmd_create_qp;
-	mlx5_devx_cmd_create_rmp;
-	mlx5_devx_cmd_create_rq;
-	mlx5_devx_cmd_create_rqt;
-	mlx5_devx_cmd_create_sq;
-	mlx5_devx_cmd_create_td;
-	mlx5_devx_cmd_create_tir;
-	mlx5_devx_cmd_create_tis;
-	mlx5_devx_cmd_create_virtio_q_counters; # WINDOWS_NO_EXPORT
-	mlx5_devx_cmd_create_virtq;
-	mlx5_devx_cmd_destroy;
-	mlx5_devx_cmd_flow_counter_alloc;
-	mlx5_devx_cmd_flow_counter_alloc_general;
-	mlx5_devx_cmd_flow_counter_query;
-	mlx5_devx_cmd_flow_dump;
-	mlx5_devx_cmd_flow_single_dump;
-	mlx5_devx_cmd_match_sample_info_query;
-	mlx5_devx_cmd_mkey_create;
-	mlx5_devx_cmd_modify_qp_state;
-	mlx5_devx_cmd_modify_rq;
-	mlx5_devx_cmd_modify_rqt;
-	mlx5_devx_cmd_modify_sq;
-	mlx5_devx_cmd_query_sq;
-	mlx5_devx_cmd_query_rq;
-	mlx5_devx_cmd_query_cq;
-	mlx5_devx_cmd_modify_tir;
-	mlx5_devx_cmd_modify_virtq;
-	mlx5_devx_cmd_qp_query_tis_td;
-	mlx5_devx_cmd_query_geneve_tlv_option;
-	mlx5_devx_cmd_query_hca_attr;
-	mlx5_devx_cmd_query_lag;
-	mlx5_devx_cmd_query_parse_samples;
-	mlx5_devx_cmd_query_virtio_q_counters; # WINDOWS_NO_EXPORT
-	mlx5_devx_cmd_query_virtq;
-	mlx5_devx_cmd_queue_counter_alloc;
-	mlx5_devx_cmd_queue_counter_query;
-	mlx5_devx_cmd_register_read;
-	mlx5_devx_cmd_register_write;
-	mlx5_devx_cmd_wq_query; # WINDOWS_NO_EXPORT
-
-	mlx5_devx_cq_create;
-	mlx5_devx_cq_destroy;
-
-	mlx5_devx_get_out_command_status;
-
-	mlx5_devx_qp2rts;
-	mlx5_devx_qp_create;
-	mlx5_devx_qp_destroy;
-	mlx5_devx_rq_create;
-	mlx5_devx_rq_destroy;
-	mlx5_devx_sq_create;
-	mlx5_devx_sq_destroy;
-
-	mlx5_devx_uar_prepare;
-	mlx5_devx_uar_release;
-
-	mlx5_free;
-
-	mlx5_get_device_guid; # WINDOWS_NO_EXPORT
-	mlx5_get_ifname_sysfs; # WINDOWS_NO_EXPORT
-	mlx5_get_pci_addr; # WINDOWS_NO_EXPORT
-
-	mlx5_glue;
-
-	mlx5_kvargs_process;
-
-	mlx5_list_create;
-	mlx5_list_register;
-	mlx5_list_unregister;
-	mlx5_list_lookup;
-	mlx5_list_get_entry_num;
-	mlx5_list_destroy;
-
-	mlx5_hlist_create;
-	mlx5_hlist_lookup;
-	mlx5_hlist_register;
-	mlx5_hlist_unregister;
-	mlx5_hlist_destroy;
-
-	mlx5_malloc;
-
-	mlx5_memory_stat_dump; # WINDOWS_NO_EXPORT
-
-	mlx5_mp_init_primary; # WINDOWS_NO_EXPORT
-	mlx5_mp_init_secondary; # WINDOWS_NO_EXPORT
-	mlx5_mp_req_mr_create; # WINDOWS_NO_EXPORT
-	mlx5_mp_req_queue_state_modify;
-	mlx5_mp_req_verbs_cmd_fd; # WINDOWS_NO_EXPORT
-	mlx5_mp_uninit_primary; # WINDOWS_NO_EXPORT
-	mlx5_mp_uninit_secondary; # WINDOWS_NO_EXPORT
-
-	mlx5_mprq_buf_free_cb;
-	mlx5_mr_btree_free;
-	mlx5_mr_create;
-	mlx5_mr_ctrl_init;
-	mlx5_mr_flush_local_cache;
-	mlx5_mr_mb2mr_bh;
-	mlx5_mr_addr2mr_bh;
-
-	mlx5_nl_allmulti; # WINDOWS_NO_EXPORT
-	mlx5_nl_devlink_esw_multiport_get; # WINDOWS_NO_EXPORT
-	mlx5_nl_devlink_family_id_get; # WINDOWS_NO_EXPORT
-	mlx5_nl_ifindex; # WINDOWS_NO_EXPORT
-	mlx5_nl_init; # WINDOWS_NO_EXPORT
-	mlx5_nl_mac_addr_add; # WINDOWS_NO_EXPORT
-	mlx5_nl_mac_addr_flush; # WINDOWS_NO_EXPORT
-	mlx5_nl_mac_addr_remove; # WINDOWS_NO_EXPORT
-	mlx5_nl_mac_addr_sync; # WINDOWS_NO_EXPORT
-	mlx5_nl_parse_link_status_update; # WINDOWS_NO_EXPORT
-	mlx5_nl_port_state; # WINDOWS_NO_EXPORT
-	mlx5_nl_portnum; # WINDOWS_NO_EXPORT
-	mlx5_nl_promisc; # WINDOWS_NO_EXPORT
-	mlx5_nl_read_events; # WINDOWS_NO_EXPORT
-	mlx5_nl_switch_info; # WINDOWS_NO_EXPORT
-	mlx5_nl_vf_mac_addr_modify; # WINDOWS_NO_EXPORT
-	mlx5_nl_vlan_vmwa_create; # WINDOWS_NO_EXPORT
-	mlx5_nl_vlan_vmwa_delete; # WINDOWS_NO_EXPORT
-	mlx5_nl_rdma_monitor_init; # WINDOWS_NO_EXPORT
-	mlx5_nl_rdma_monitor_info_get; # WINDOWS_NO_EXPORT
-	mlx5_nl_rdma_monitor_cap_get; # WINDOWS_NO_EXPORT
-
-	mlx5_os_umem_dereg;
-	mlx5_os_umem_reg;
-
-	mlx5_os_wrapped_mkey_create;
-	mlx5_os_wrapped_mkey_destroy;
-
-	mlx5_realloc;
-
-	mlx5_translate_port_name; # WINDOWS_NO_EXPORT
-
-	mlx5_mr_mempool_register;
-	mlx5_mr_mempool_unregister;
-	mlx5_mp_req_mempool_reg;
-	mlx5_mr_mempool2mr_bh;
-	mlx5_mr_mempool_populate_cache;
-
-	mlx5_os_interrupt_handler_create; # WINDOWS_NO_EXPORT
-	mlx5_os_interrupt_handler_destroy; # WINDOWS_NO_EXPORT
-
-	mlx5_os_set_reg_mr_cb;
-	local: *;
-};
diff --git a/drivers/common/mvep/version.map b/drivers/common/mvep/version.map
deleted file mode 100644
index cbac7bfa8d..0000000000
--- a/drivers/common/mvep/version.map
+++ /dev/null
@@ -1,8 +0,0 @@
-INTERNAL {
-	global:
-
-	rte_mvep_deinit;
-	rte_mvep_init;
-
-	local: *;
-};
diff --git a/drivers/common/nfp/version.map b/drivers/common/nfp/version.map
deleted file mode 100644
index c8a04b1b95..0000000000
--- a/drivers/common/nfp/version.map
+++ /dev/null
@@ -1,16 +0,0 @@
-INTERNAL {
-	global:
-
-	nfp_class_driver_register;
-
-	nfp_reconfig;
-	nfp_ext_reconfig;
-	nfp_reconfig_real;
-	nfp_read_mac;
-	nfp_write_mac;
-	nfp_enable_queues;
-	nfp_disable_queues;
-	nfp_dev_info_get;
-
-	local: *;
-};
diff --git a/drivers/common/nitrox/version.map b/drivers/common/nitrox/version.map
deleted file mode 100644
index f58c044fc5..0000000000
--- a/drivers/common/nitrox/version.map
+++ /dev/null
@@ -1,10 +0,0 @@
-INTERNAL {
-	global:
-
-	nitrox_logtype;
-	nitrox_qp_release;
-	nitrox_qp_setup;
-	nitrox_register_driver;
-
-	local: *;
-};
diff --git a/drivers/common/octeontx/version.map b/drivers/common/octeontx/version.map
deleted file mode 100644
index 049f66b331..0000000000
--- a/drivers/common/octeontx/version.map
+++ /dev/null
@@ -1,12 +0,0 @@
-INTERNAL {
-	global:
-
-	octeontx_get_global_domain;
-	octeontx_logtype_mbox;
-	octeontx_mbox_init;
-	octeontx_mbox_send;
-	octeontx_mbox_set_ram_mbox_base;
-	octeontx_mbox_set_reg;
-
-	local: *;
-};
diff --git a/drivers/common/sfc_efx/version.map b/drivers/common/sfc_efx/version.map
deleted file mode 100644
index b2b90f5512..0000000000
--- a/drivers/common/sfc_efx/version.map
+++ /dev/null
@@ -1,302 +0,0 @@
-INTERNAL {
-	global:
-
-	efx_crc32_calculate;
-
-	efx_ev_fini;
-	efx_ev_init;
-	efx_ev_qcreate;
-	efx_ev_qcreate_check_init_done;
-	efx_ev_qcreate_irq;
-	efx_ev_qdestroy;
-	efx_ev_qmoderate;
-	efx_ev_qpending;
-	efx_ev_qpoll;
-	efx_ev_qpost;
-	efx_ev_qprime;
-	efx_ev_usecs_to_ticks;
-
-	efx_evb_fini;
-	efx_evb_init;
-	efx_evb_vport_mac_set;
-	efx_evb_vport_reset;
-	efx_evb_vport_stats;
-	efx_evb_vport_vlan_set;
-	efx_evb_vswitch_create;
-	efx_evb_vswitch_destroy;
-
-	efx_evq_nbufs;
-	efx_evq_size;
-
-	efx_family;
-	efx_family_probe_bar;
-
-	efx_filter_fini;
-	efx_filter_init;
-	efx_filter_insert;
-	efx_filter_remove;
-	efx_filter_restore;
-	efx_filter_spec_init_rx;
-	efx_filter_spec_init_tx;
-	efx_filter_spec_set_encap_type;
-	efx_filter_spec_set_eth_local;
-	efx_filter_spec_set_ether_type;
-	efx_filter_spec_set_geneve;
-	efx_filter_spec_set_ipv4_full;
-	efx_filter_spec_set_ipv4_local;
-	efx_filter_spec_set_mc_def;
-	efx_filter_spec_set_nvgre;
-	efx_filter_spec_set_rss_context;
-	efx_filter_spec_set_uc_def;
-	efx_filter_spec_set_vxlan;
-	efx_filter_supported_filters;
-
-	efx_hash_bytes;
-	efx_hash_dwords;
-
-	efx_intr_disable;
-	efx_intr_disable_unlocked;
-	efx_intr_enable;
-	efx_intr_fatal;
-	efx_intr_fini;
-	efx_intr_init;
-	efx_intr_status_line;
-	efx_intr_status_message;
-	efx_intr_trigger;
-
-	efx_loopback_mask;
-	efx_loopback_type_name;
-
-	efx_mac_addr_set;
-	efx_mac_drain;
-	efx_mac_fcntl_get;
-	efx_mac_fcntl_set;
-	efx_mac_include_fcs_set;
-	efx_mac_filter_default_rxq_clear;
-	efx_mac_filter_default_rxq_set;
-	efx_mac_filter_get_all_ucast_mcast;
-	efx_mac_filter_set;
-	efx_mac_multicast_list_set;
-	efx_mac_pdu_get;
-	efx_mac_pdu_set;
-	efx_mac_stat_name;
-	efx_mac_stats_clear;
-	efx_mac_stats_get_mask;
-	efx_mac_stats_periodic;
-	efx_mac_stats_update;
-	efx_mac_stats_upload;
-	efx_mac_up;
-
-	efx_mae_action_rule_insert;
-	efx_mae_action_rule_remove;
-	efx_mae_action_set_alloc;
-	efx_mae_action_set_clear_fw_rsrc_ids;
-	efx_mae_action_set_fill_in_counter_id;
-	efx_mae_action_set_fill_in_dst_mac_id;
-	efx_mae_action_set_fill_in_eh_id;
-	efx_mae_action_set_fill_in_src_mac_id;
-	efx_mae_action_set_free;
-	efx_mae_action_set_get_nb_count;
-	efx_mae_action_set_list_alloc;
-	efx_mae_action_set_list_free;
-	efx_mae_action_set_populate_count;
-	efx_mae_action_set_populate_decap;
-	efx_mae_action_set_populate_decr_ip_ttl;
-	efx_mae_action_set_populate_deliver;
-	efx_mae_action_set_populate_drop;
-	efx_mae_action_set_populate_encap;
-	efx_mae_action_set_populate_flag;
-	efx_mae_action_set_populate_mark;
-	efx_mae_action_set_populate_mark_reset;
-	efx_mae_action_set_populate_nat;
-	efx_mae_action_set_populate_set_dst_mac;
-	efx_mae_action_set_populate_set_src_mac;
-	efx_mae_action_set_populate_vlan_pop;
-	efx_mae_action_set_populate_vlan_push;
-	efx_mae_action_set_replay;
-	efx_mae_action_set_spec_fini;
-	efx_mae_action_set_spec_init;
-	efx_mae_action_set_specs_equal;
-	efx_mae_counters_alloc;
-	efx_mae_counters_alloc_type;
-	efx_mae_counters_free;
-	efx_mae_counters_free_type;
-	efx_mae_counters_stream_give_credits;
-	efx_mae_counters_stream_start;
-	efx_mae_counters_stream_stop;
-	efx_mae_encap_header_alloc;
-	efx_mae_encap_header_free;
-	efx_mae_encap_header_update;
-	efx_mae_fini;
-	efx_mae_get_limits;
-	efx_mae_init;
-	efx_mae_mac_addr_alloc;
-	efx_mae_mac_addr_free;
-	efx_mae_match_spec_bit_set;
-	efx_mae_match_spec_clone;
-	efx_mae_match_spec_ct_mark_set;
-	efx_mae_match_spec_field_get;
-	efx_mae_match_spec_field_set;
-	efx_mae_match_spec_fini;
-	efx_mae_match_spec_init;
-	efx_mae_match_spec_is_valid;
-	efx_mae_match_spec_mport_set;
-	efx_mae_match_spec_outer_rule_id_set;
-	efx_mae_match_spec_recirc_id_set;
-	efx_mae_match_specs_class_cmp;
-	efx_mae_match_specs_equal;
-	efx_mae_mport_by_pcie_function;
-	efx_mae_mport_by_pcie_mh_function;
-	efx_mae_mport_by_phy_port;
-	efx_mae_mport_by_id;
-	efx_mae_mport_free;
-	efx_mae_mport_id_by_selector;
-	efx_mae_mport_invalid;
-	efx_mae_outer_rule_do_ct_set;
-	efx_mae_outer_rule_insert;
-	efx_mae_outer_rule_recirc_id_set;
-	efx_mae_outer_rule_remove;
-	efx_mae_read_mport_journal;
-
-	efx_mcdi_client_mac_addr_get;
-	efx_mcdi_client_mac_addr_set;
-	efx_mcdi_fini;
-	efx_mcdi_get_client_handle;
-	efx_mcdi_get_own_client_handle;
-	efx_mcdi_get_proxy_handle;
-	efx_mcdi_get_timeout;
-	efx_mcdi_init;
-	efx_mcdi_mport_alloc_alias;
-	efx_mcdi_new_epoch;
-	efx_mcdi_reboot;
-	efx_mcdi_request_abort;
-	efx_mcdi_request_poll;
-	efx_mcdi_request_start;
-
-	efx_mon_fini;
-	efx_mon_init;
-	efx_mon_name;
-
-	efx_nic_calculate_pcie_link_bandwidth;
-	efx_nic_cfg_get;
-	efx_nic_check_pcie_link_speed;
-	efx_nic_create;
-	efx_nic_destroy;
-	efx_nic_dma_config_add;
-	efx_nic_dma_map;
-	efx_nic_dma_reconfigure;
-	efx_nic_fini;
-	efx_nic_get_bar_region;
-	efx_nic_get_board_info;
-	efx_nic_get_fw_subvariant;
-	efx_nic_get_fw_version;
-	efx_nic_get_vi_pool;
-	efx_nic_hw_unavailable;
-	efx_nic_init;
-	efx_nic_probe;
-	efx_nic_reset;
-	efx_nic_set_drv_limits;
-	efx_nic_set_drv_version;
-	efx_nic_set_fw_subvariant;
-	efx_nic_set_hw_unavailable;
-	efx_nic_unprobe;
-
-	efx_phy_adv_cap_get;
-	efx_phy_adv_cap_set;
-	efx_phy_fec_type_get;
-	efx_phy_link_state_get;
-	efx_phy_lp_cap_get;
-	efx_phy_media_type_get;
-	efx_phy_module_get_info;
-	efx_phy_oui_get;
-	efx_phy_verify;
-
-	efx_port_fini;
-	efx_port_init;
-	efx_port_loopback_set;
-	efx_port_poll;
-	efx_port_vlan_strip_set;
-
-	efx_pseudo_hdr_hash_get;
-	efx_pseudo_hdr_pkt_length_get;
-
-	efx_rx_fini;
-	efx_rx_hash_default_support_get;
-	efx_rx_init;
-	efx_rx_prefix_get_layout;
-	efx_rx_prefix_layout_check;
-	efx_rx_qcreate;
-	efx_rx_qcreate_es_super_buffer;
-	efx_rx_qdestroy;
-	efx_rx_qenable;
-	efx_rx_qflush;
-	efx_rx_qpost;
-	efx_rx_qpush;
-	efx_rx_scale_context_alloc;
-	efx_rx_scale_context_alloc_v2;
-	efx_rx_scale_context_free;
-	efx_rx_scale_default_support_get;
-	efx_rx_scale_hash_flags_get;
-	efx_rx_scale_key_set;
-	efx_rx_scale_mode_set;
-	efx_rx_scale_tbl_set;
-	efx_rxq_nbufs;
-	efx_rxq_size;
-
-	efx_sram_buf_tbl_clear;
-	efx_sram_buf_tbl_set;
-
-	efx_table_describe;
-	efx_table_entry_delete;
-	efx_table_entry_insert;
-	efx_table_is_supported;
-	efx_table_list;
-	efx_table_supported_num_get;
-
-	efx_tunnel_config_clear;
-	efx_tunnel_config_udp_add;
-	efx_tunnel_config_udp_remove;
-	efx_tunnel_fini;
-	efx_tunnel_init;
-	efx_tunnel_reconfigure;
-
-	efx_tx_fini;
-	efx_tx_init;
-	efx_tx_qcreate;
-	efx_tx_qdesc_checksum_create;
-	efx_tx_qdesc_dma_create;
-	efx_tx_qdesc_post;
-	efx_tx_qdesc_tso_create;
-	efx_tx_qdesc_tso2_create;
-	efx_tx_qdesc_vlantci_create;
-	efx_tx_qdestroy;
-	efx_tx_qenable;
-	efx_tx_qflush;
-	efx_tx_qpace;
-	efx_tx_qpio_disable;
-	efx_tx_qpio_enable;
-	efx_tx_qpio_post;
-	efx_tx_qpio_write;
-	efx_tx_qpost;
-	efx_tx_qpush;
-	efx_txq_nbufs;
-	efx_txq_size;
-
-	efx_virtio_fini;
-	efx_virtio_get_doorbell_offset;
-	efx_virtio_get_features;
-	efx_virtio_init;
-	efx_virtio_qcreate;
-	efx_virtio_qdestroy;
-	efx_virtio_qstart;
-	efx_virtio_qstop;
-	efx_virtio_verify_features;
-
-	sfc_efx_dev_class_get;
-	sfc_efx_family;
-
-	sfc_efx_mcdi_init;
-	sfc_efx_mcdi_fini;
-
-	local: *;
-};
diff --git a/drivers/crypto/cnxk/version.map b/drivers/crypto/cnxk/version.map
deleted file mode 100644
index 05724e69e4..0000000000
--- a/drivers/crypto/cnxk/version.map
+++ /dev/null
@@ -1,30 +0,0 @@
-EXPERIMENTAL {
-	global:
-
-	# added in 24.03
-	rte_pmd_cnxk_crypto_submit;
-	rte_pmd_cnxk_crypto_qptr_get;
-
-	# added in 24.07
-	rte_pmd_cnxk_crypto_cptr_flush;
-	rte_pmd_cnxk_crypto_cptr_get;
-	rte_pmd_cnxk_crypto_cptr_read;
-	rte_pmd_cnxk_crypto_cptr_write;
-	rte_pmd_cnxk_crypto_qp_stats_get;
-};
-
-INTERNAL {
-	global:
-
-	cn9k_cpt_crypto_adapter_enqueue;
-	cn9k_cpt_crypto_adapter_dequeue;
-	cn10k_cpt_sg_ver1_crypto_adapter_enqueue;
-	cn10k_cpt_sg_ver2_crypto_adapter_enqueue;
-	cn10k_cpt_crypto_adapter_dequeue;
-	cn10k_cpt_crypto_adapter_vector_dequeue;
-
-	cn10k_cryptodev_sec_inb_rx_inject;
-	cn10k_cryptodev_sec_rx_inject_configure;
-
-	local: *;
-};
diff --git a/drivers/crypto/dpaa2_sec/version.map b/drivers/crypto/dpaa2_sec/version.map
deleted file mode 100644
index 1352f576e5..0000000000
--- a/drivers/crypto/dpaa2_sec/version.map
+++ /dev/null
@@ -1,8 +0,0 @@
-INTERNAL {
-	global:
-
-	dpaa2_sec_eventq_attach;
-	dpaa2_sec_eventq_detach;
-
-	local: *;
-};
diff --git a/drivers/crypto/dpaa_sec/version.map b/drivers/crypto/dpaa_sec/version.map
deleted file mode 100644
index 731ea593ad..0000000000
--- a/drivers/crypto/dpaa_sec/version.map
+++ /dev/null
@@ -1,8 +0,0 @@
-INTERNAL {
-	global:
-
-	dpaa_sec_eventq_attach;
-	dpaa_sec_eventq_detach;
-
-	local: *;
-};
diff --git a/drivers/crypto/octeontx/version.map b/drivers/crypto/octeontx/version.map
deleted file mode 100644
index 8803f974b2..0000000000
--- a/drivers/crypto/octeontx/version.map
+++ /dev/null
@@ -1,12 +0,0 @@
-DPDK_25 {
-	local: *;
-};
-
-INTERNAL {
-	global:
-
-	otx_crypto_adapter_enqueue;
-	otx_crypto_adapter_dequeue;
-
-	local: *;
-};
diff --git a/drivers/crypto/scheduler/version.map b/drivers/crypto/scheduler/version.map
deleted file mode 100644
index d7ba3874f2..0000000000
--- a/drivers/crypto/scheduler/version.map
+++ /dev/null
@@ -1,16 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_cryptodev_scheduler_load_user_scheduler;
-	rte_cryptodev_scheduler_mode_get;
-	rte_cryptodev_scheduler_mode_set;
-	rte_cryptodev_scheduler_option_get;
-	rte_cryptodev_scheduler_option_set;
-	rte_cryptodev_scheduler_ordering_get;
-	rte_cryptodev_scheduler_ordering_set;
-	rte_cryptodev_scheduler_worker_attach;
-	rte_cryptodev_scheduler_worker_detach;
-	rte_cryptodev_scheduler_workers_get;
-
-	local: *;
-};
diff --git a/drivers/dma/cnxk/version.map b/drivers/dma/cnxk/version.map
deleted file mode 100644
index a1490abf97..0000000000
--- a/drivers/dma/cnxk/version.map
+++ /dev/null
@@ -1,10 +0,0 @@
-INTERNAL {
-	global:
-
-	cn10k_dma_adapter_enqueue;
-	cn9k_dma_adapter_enqueue;
-	cn9k_dma_adapter_dual_enqueue;
-	cnxk_dma_adapter_dequeue;
-
-	local: *;
-};
diff --git a/drivers/event/cnxk/version.map b/drivers/event/cnxk/version.map
deleted file mode 100644
index a275ec2977..0000000000
--- a/drivers/event/cnxk/version.map
+++ /dev/null
@@ -1,11 +0,0 @@
-DPDK_25 {
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 23.11
-	rte_pmd_cnxk_eventdev_is_head;
-	rte_pmd_cnxk_eventdev_wait_head;
-};
diff --git a/drivers/event/dlb2/version.map b/drivers/event/dlb2/version.map
deleted file mode 100644
index c37d2302cd..0000000000
--- a/drivers/event/dlb2/version.map
+++ /dev/null
@@ -1,10 +0,0 @@
-DPDK_25 {
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 20.11
-	rte_pmd_dlb2_set_token_pop_mode;
-};
diff --git a/drivers/mempool/cnxk/version.map b/drivers/mempool/cnxk/version.map
deleted file mode 100644
index c2905a610e..0000000000
--- a/drivers/mempool/cnxk/version.map
+++ /dev/null
@@ -1,12 +0,0 @@
-DPDK_25 {
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 23.07
-	rte_pmd_cnxk_mempool_is_hwpool;
-	rte_pmd_cnxk_mempool_mbuf_exchange;
-	rte_pmd_cnxk_mempool_range_check_disable;
-};
diff --git a/drivers/mempool/dpaa/version.map b/drivers/mempool/dpaa/version.map
deleted file mode 100644
index 142547ee38..0000000000
--- a/drivers/mempool/dpaa/version.map
+++ /dev/null
@@ -1,8 +0,0 @@
-INTERNAL {
-	global:
-
-	rte_dpaa_bpid_info;
-	rte_dpaa_memsegs;
-
-	local: *;
-};
diff --git a/drivers/mempool/dpaa2/version.map b/drivers/mempool/dpaa2/version.map
deleted file mode 100644
index c1acfc0c64..0000000000
--- a/drivers/mempool/dpaa2/version.map
+++ /dev/null
@@ -1,16 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_dpaa2_mbuf_from_buf_addr;
-	rte_dpaa2_mbuf_pool_bpid;
-
-	local: *;
-};
-
-INTERNAL {
-	global:
-
-	rte_dpaa2_bpid_info;
-	rte_dpaa2_bpid_info_init;
-	rte_dpaa2_mbuf_alloc_bulk;
-};
diff --git a/drivers/net/atlantic/version.map b/drivers/net/atlantic/version.map
deleted file mode 100644
index 5644e150ac..0000000000
--- a/drivers/net/atlantic/version.map
+++ /dev/null
@@ -1,15 +0,0 @@
-DPDK_25 {
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 19.05
-	rte_pmd_atl_macsec_enable;
-	rte_pmd_atl_macsec_disable;
-	rte_pmd_atl_macsec_config_txsc;
-	rte_pmd_atl_macsec_config_rxsc;
-	rte_pmd_atl_macsec_select_txsa;
-	rte_pmd_atl_macsec_select_rxsa;
-};
diff --git a/drivers/net/bnxt/version.map b/drivers/net/bnxt/version.map
deleted file mode 100644
index d29521f990..0000000000
--- a/drivers/net/bnxt/version.map
+++ /dev/null
@@ -1,22 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_pmd_bnxt_get_vf_rx_status;
-	rte_pmd_bnxt_get_vf_stats;
-	rte_pmd_bnxt_get_vf_tx_drop_count;
-	rte_pmd_bnxt_mac_addr_add;
-	rte_pmd_bnxt_reset_vf_stats;
-	rte_pmd_bnxt_set_all_queues_drop_en;
-	rte_pmd_bnxt_set_tx_loopback;
-	rte_pmd_bnxt_set_vf_mac_addr;
-	rte_pmd_bnxt_set_vf_mac_anti_spoof;
-	rte_pmd_bnxt_set_vf_persist_stats;
-	rte_pmd_bnxt_set_vf_rate_limit;
-	rte_pmd_bnxt_set_vf_rxmode;
-	rte_pmd_bnxt_set_vf_vlan_anti_spoof;
-	rte_pmd_bnxt_set_vf_vlan_filter;
-	rte_pmd_bnxt_set_vf_vlan_insert;
-	rte_pmd_bnxt_set_vf_vlan_stripq;
-
-	local: *;
-};
diff --git a/drivers/net/bonding/version.map b/drivers/net/bonding/version.map
deleted file mode 100644
index eb37dadf76..0000000000
--- a/drivers/net/bonding/version.map
+++ /dev/null
@@ -1,33 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_eth_bond_8023ad_agg_selection_get;
-	rte_eth_bond_8023ad_agg_selection_set;
-	rte_eth_bond_8023ad_conf_get;
-	rte_eth_bond_8023ad_dedicated_queues_disable;
-	rte_eth_bond_8023ad_dedicated_queues_enable;
-	rte_eth_bond_8023ad_ext_collect;
-	rte_eth_bond_8023ad_ext_collect_get;
-	rte_eth_bond_8023ad_ext_distrib;
-	rte_eth_bond_8023ad_ext_distrib_get;
-	rte_eth_bond_8023ad_ext_slowtx;
-	rte_eth_bond_8023ad_member_info;
-	rte_eth_bond_8023ad_setup;
-	rte_eth_bond_active_members_get;
-	rte_eth_bond_create;
-	rte_eth_bond_free;
-	rte_eth_bond_link_monitoring_set;
-	rte_eth_bond_mac_address_reset;
-	rte_eth_bond_mac_address_set;
-	rte_eth_bond_member_add;
-	rte_eth_bond_member_remove;
-	rte_eth_bond_members_get;
-	rte_eth_bond_mode_get;
-	rte_eth_bond_mode_set;
-	rte_eth_bond_primary_get;
-	rte_eth_bond_primary_set;
-	rte_eth_bond_xmit_policy_get;
-	rte_eth_bond_xmit_policy_set;
-
-	local: *;
-};
diff --git a/drivers/net/cnxk/version.map b/drivers/net/cnxk/version.map
deleted file mode 100644
index edb0a1c059..0000000000
--- a/drivers/net/cnxk/version.map
+++ /dev/null
@@ -1,27 +0,0 @@
-DPDK_25 {
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 22.07
-	rte_pmd_cnxk_hw_sa_read;
-	rte_pmd_cnxk_hw_sa_write;
-
-	# added in 23.11
-	rte_pmd_cnxk_cpt_q_stats_get;
-	rte_pmd_cnxk_hw_inline_inb_cfg_set;
-	rte_pmd_cnxk_hw_session_base_get;
-	rte_pmd_cnxk_inl_dev_qptr_get;
-	rte_pmd_cnxk_inl_dev_submit;
-	rte_pmd_cnxk_inl_ipsec_res;
-	rte_pmd_cnxk_model_str_get;
-	rte_pmd_cnxk_sa_flush;
-};
-
-INTERNAL {
-	global:
-	cnxk_nix_inb_mode_set;
-	cnxk_ethdev_rx_offload_cb_register;
-};
diff --git a/drivers/net/dpaa/version.map b/drivers/net/dpaa/version.map
deleted file mode 100644
index 3fdb63caf3..0000000000
--- a/drivers/net/dpaa/version.map
+++ /dev/null
@@ -1,14 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_pmd_dpaa_set_tx_loopback;
-
-	local: *;
-};
-
-INTERNAL {
-	global:
-
-	dpaa_eth_eventq_attach;
-	dpaa_eth_eventq_detach;
-};
diff --git a/drivers/net/dpaa2/version.map b/drivers/net/dpaa2/version.map
deleted file mode 100644
index 35815f7777..0000000000
--- a/drivers/net/dpaa2/version.map
+++ /dev/null
@@ -1,35 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_pmd_dpaa2_mux_flow_create;
-	rte_pmd_dpaa2_set_custom_hash;
-
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 21.05
-	rte_pmd_dpaa2_mux_rx_frame_len;
-	# added in 21.08
-	rte_pmd_dpaa2_thread_init;
-	# added in 21.11
-	rte_pmd_dpaa2_get_tlu_hash;
-	# added in 24.11
-	rte_pmd_dpaa2_dev_is_dpaa2;
-	rte_pmd_dpaa2_ep_name;
-	rte_pmd_dpaa2_set_one_step_ts;
-	rte_pmd_dpaa2_get_one_step_ts;
-	rte_pmd_dpaa2_mux_dump_counter;
-};
-
-INTERNAL {
-	global:
-
-	dpaa2_dev_tx_multi_txq_ordered;
-	dpaa2_eth_eventq_attach;
-	dpaa2_eth_eventq_detach;
-
-	local: *;
-};
diff --git a/drivers/net/intel/i40e/version.map b/drivers/net/intel/i40e/version.map
deleted file mode 100644
index e5d20fee71..0000000000
--- a/drivers/net/intel/i40e/version.map
+++ /dev/null
@@ -1,55 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_pmd_i40e_add_vf_mac_addr;
-	rte_pmd_i40e_flow_add_del_packet_template;
-	rte_pmd_i40e_flow_type_mapping_get;
-	rte_pmd_i40e_flow_type_mapping_reset;
-	rte_pmd_i40e_flow_type_mapping_update;
-	rte_pmd_i40e_get_ddp_info;
-	rte_pmd_i40e_get_ddp_list;
-	rte_pmd_i40e_get_vf_stats;
-	rte_pmd_i40e_inset_get;
-	rte_pmd_i40e_inset_set;
-	rte_pmd_i40e_ping_vfs;
-	rte_pmd_i40e_process_ddp_package;
-	rte_pmd_i40e_ptype_mapping_get;
-	rte_pmd_i40e_ptype_mapping_replace;
-	rte_pmd_i40e_ptype_mapping_reset;
-	rte_pmd_i40e_ptype_mapping_update;
-	rte_pmd_i40e_query_vfid_by_mac;
-	rte_pmd_i40e_reset_vf_stats;
-	rte_pmd_i40e_rss_queue_region_conf;
-	rte_pmd_i40e_set_tc_strict_prio;
-	rte_pmd_i40e_set_tx_loopback;
-	rte_pmd_i40e_set_vf_broadcast;
-	rte_pmd_i40e_set_vf_mac_addr;
-	rte_pmd_i40e_set_vf_mac_anti_spoof;
-	rte_pmd_i40e_set_vf_max_bw;
-	rte_pmd_i40e_set_vf_multicast_promisc;
-	rte_pmd_i40e_set_vf_tc_bw_alloc;
-	rte_pmd_i40e_set_vf_tc_max_bw;
-	rte_pmd_i40e_set_vf_unicast_promisc;
-	rte_pmd_i40e_set_vf_vlan_anti_spoof;
-	rte_pmd_i40e_set_vf_vlan_filter;
-	rte_pmd_i40e_set_vf_vlan_insert;
-	rte_pmd_i40e_set_vf_vlan_stripq;
-	rte_pmd_i40e_set_vf_vlan_tag;
-
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 19.11
-	rte_pmd_i40e_set_switch_dev;
-
-	# added in 20.08
-	rte_pmd_i40e_get_fdir_info;
-	rte_pmd_i40e_get_fdir_stats;
-	rte_pmd_i40e_set_gre_key_len;
-
-	# added in 23.07
-	rte_pmd_i40e_set_pf_src_prune;
-};
diff --git a/drivers/net/intel/iavf/version.map b/drivers/net/intel/iavf/version.map
deleted file mode 100644
index d18dea64dd..0000000000
--- a/drivers/net/intel/iavf/version.map
+++ /dev/null
@@ -1,33 +0,0 @@
-DPDK_25 {
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 20.11
-	rte_pmd_ifd_dynfield_proto_xtr_metadata_offs;
-	rte_pmd_ifd_dynflag_proto_xtr_vlan_mask;
-	rte_pmd_ifd_dynflag_proto_xtr_ipv4_mask;
-	rte_pmd_ifd_dynflag_proto_xtr_ipv6_mask;
-	rte_pmd_ifd_dynflag_proto_xtr_ipv6_flow_mask;
-	rte_pmd_ifd_dynflag_proto_xtr_tcp_mask;
-	rte_pmd_ifd_dynflag_proto_xtr_ip_offset_mask;
-
-	# added in 21.11
-	rte_pmd_ifd_dynflag_proto_xtr_ipsec_crypto_said_mask;
-};
-
-INTERNAL {
-	global:
-
-	iavf_aq_send_msg_to_pf;
-	iavf_clean_arq_element;
-	iavf_init_adminq;
-	iavf_set_mac_type;
-	iavf_shutdown_adminq;
-	iavf_vf_parse_hw_config;
-	iavf_vf_reset;
-
-	local: *;
-};
diff --git a/drivers/net/intel/ice/version.map b/drivers/net/intel/ice/version.map
deleted file mode 100644
index 0052043264..0000000000
--- a/drivers/net/intel/ice/version.map
+++ /dev/null
@@ -1,16 +0,0 @@
-DPDK_25 {
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 19.11
-	rte_pmd_ice_dump_package;
-
-	# added in 22.11
-	rte_pmd_ice_dump_switch;
-
-	# added in 24.03
-	rte_pmd_ice_dump_txsched;
-};
diff --git a/drivers/net/intel/idpf/version.map b/drivers/net/intel/idpf/version.map
deleted file mode 100644
index 0557321963..0000000000
--- a/drivers/net/intel/idpf/version.map
+++ /dev/null
@@ -1,80 +0,0 @@
-INTERNAL {
-	global:
-
-	idpf_adapter_deinit;
-	idpf_adapter_init;
-
-	idpf_dp_prep_pkts;
-	idpf_dp_singleq_recv_pkts;
-	idpf_dp_singleq_recv_pkts_avx2;
-	idpf_dp_singleq_recv_pkts_avx512;
-	idpf_dp_singleq_recv_scatter_pkts;
-	idpf_dp_singleq_xmit_pkts;
-	idpf_dp_singleq_xmit_pkts_avx2;
-	idpf_dp_singleq_xmit_pkts_avx512;
-	idpf_dp_splitq_recv_pkts;
-	idpf_dp_splitq_recv_pkts_avx512;
-	idpf_dp_splitq_xmit_pkts;
-	idpf_dp_splitq_xmit_pkts_avx512;
-
-	idpf_qc_rx_thresh_check;
-	idpf_qc_rx_queue_release;
-	idpf_qc_rxq_mbufs_release;
-	idpf_qc_single_rx_queue_reset;
-	idpf_qc_single_rxq_mbufs_alloc;
-	idpf_qc_single_tx_queue_reset;
-	idpf_qc_singleq_rx_vec_setup;
-	idpf_qc_split_rx_bufq_reset;
-	idpf_qc_split_rx_descq_reset;
-	idpf_qc_split_rx_queue_reset;
-	idpf_qc_split_rxq_mbufs_alloc;
-	idpf_qc_split_tx_complq_reset;
-	idpf_qc_split_tx_descq_reset;
-	idpf_qc_splitq_rx_vec_setup;
-	idpf_qc_ts_mbuf_register;
-	idpf_qc_tx_queue_release;
-	idpf_qc_tx_thresh_check;
-	idpf_qc_tx_vec_avx512_setup;
-	idpf_qc_txq_mbufs_release;
-
-	idpf_vc_api_version_check;
-	idpf_vc_caps_get;
-	idpf_vc_cmd_execute;
-	idpf_vc_ctlq_post_rx_buffs;
-	idpf_vc_ctlq_recv;
-	idpf_vc_ena_dis_one_queue;
-	idpf_vc_irq_map_unmap_config;
-	idpf_vc_one_msg_read;
-	idpf_vc_ptype_info_query;
-	idpf_vc_queue_grps_add;
-	idpf_vc_queue_grps_del;
-	idpf_vc_queue_switch;
-	idpf_vc_queues_ena_dis;
-	idpf_vc_rss_hash_get;
-	idpf_vc_rss_hash_set;
-	idpf_vc_rss_key_get;
-	idpf_vc_rss_key_set;
-	idpf_vc_rss_lut_get;
-	idpf_vc_rss_lut_set;
-	idpf_vc_rxq_config;
-	idpf_vc_rxq_config_by_info;
-	idpf_vc_stats_query;
-	idpf_vc_txq_config;
-	idpf_vc_txq_config_by_info;
-	idpf_vc_vectors_alloc;
-	idpf_vc_vectors_dealloc;
-	idpf_vc_vport_create;
-	idpf_vc_vport_destroy;
-	idpf_vc_vport_ena_dis;
-
-	idpf_vport_deinit;
-	idpf_vport_info_init;
-	idpf_vport_init;
-	idpf_vport_irq_map_config;
-	idpf_vport_irq_map_config_by_qids;
-	idpf_vport_irq_unmap_config;
-	idpf_vport_rss_config;
-	idpf_vport_stats_update;
-
-	local: *;
-};
diff --git a/drivers/net/intel/ipn3ke/version.map b/drivers/net/intel/ipn3ke/version.map
deleted file mode 100644
index e10d44858f..0000000000
--- a/drivers/net/intel/ipn3ke/version.map
+++ /dev/null
@@ -1,9 +0,0 @@
-DPDK_25 {
-	local: *;
-};
-
-INTERNAL {
-	global:
-
-	ipn3ke_bridge_func;
-};
diff --git a/drivers/net/intel/ixgbe/version.map b/drivers/net/intel/ixgbe/version.map
deleted file mode 100644
index 8c4c0ca542..0000000000
--- a/drivers/net/intel/ixgbe/version.map
+++ /dev/null
@@ -1,49 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_pmd_ixgbe_bypass_event_show;
-	rte_pmd_ixgbe_bypass_event_store;
-	rte_pmd_ixgbe_bypass_init;
-	rte_pmd_ixgbe_bypass_state_set;
-	rte_pmd_ixgbe_bypass_state_show;
-	rte_pmd_ixgbe_bypass_ver_show;
-	rte_pmd_ixgbe_bypass_wd_reset;
-	rte_pmd_ixgbe_bypass_wd_timeout_show;
-	rte_pmd_ixgbe_bypass_wd_timeout_store;
-	rte_pmd_ixgbe_macsec_config_rxsc;
-	rte_pmd_ixgbe_macsec_config_txsc;
-	rte_pmd_ixgbe_macsec_disable;
-	rte_pmd_ixgbe_macsec_enable;
-	rte_pmd_ixgbe_macsec_select_rxsa;
-	rte_pmd_ixgbe_macsec_select_txsa;
-	rte_pmd_ixgbe_mdio_lock;
-	rte_pmd_ixgbe_mdio_unlock;
-	rte_pmd_ixgbe_mdio_unlocked_read;
-	rte_pmd_ixgbe_mdio_unlocked_write;
-	rte_pmd_ixgbe_ping_vf;
-	rte_pmd_ixgbe_set_all_queues_drop_en;
-	rte_pmd_ixgbe_set_tc_bw_alloc;
-	rte_pmd_ixgbe_set_tx_loopback;
-	rte_pmd_ixgbe_set_vf_mac_addr;
-	rte_pmd_ixgbe_set_vf_mac_anti_spoof;
-	rte_pmd_ixgbe_set_vf_rate_limit;
-	rte_pmd_ixgbe_set_vf_rx;
-	rte_pmd_ixgbe_set_vf_rxmode;
-	rte_pmd_ixgbe_set_vf_split_drop_en;
-	rte_pmd_ixgbe_set_vf_tx;
-	rte_pmd_ixgbe_set_vf_vlan_anti_spoof;
-	rte_pmd_ixgbe_set_vf_vlan_filter;
-	rte_pmd_ixgbe_set_vf_vlan_insert;
-	rte_pmd_ixgbe_set_vf_vlan_stripq;
-	rte_pmd_ixgbe_upd_fctrl_sbp;
-
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 20.08
-	rte_pmd_ixgbe_get_fdir_info;
-	rte_pmd_ixgbe_get_fdir_stats;
-};
diff --git a/drivers/net/mlx5/version.map b/drivers/net/mlx5/version.map
deleted file mode 100644
index 560f7ef79b..0000000000
--- a/drivers/net/mlx5/version.map
+++ /dev/null
@@ -1,28 +0,0 @@
-DPDK_25 {
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 20.02
-	rte_pmd_mlx5_get_dyn_flag_names;
-	# added in 20.11
-	rte_pmd_mlx5_sync_flow;
-	# added in 22.03
-	rte_pmd_mlx5_external_rx_queue_id_map;
-	rte_pmd_mlx5_external_rx_queue_id_unmap;
-	# added in 22.07
-	rte_pmd_mlx5_host_shaper_config;
-	rte_pmd_mlx5_external_sq_enable;
-	# added in 23.03
-	rte_pmd_mlx5_flow_engine_set_mode;
-	# added in 24.03
-	rte_pmd_mlx5_create_geneve_tlv_parser;
-	rte_pmd_mlx5_destroy_geneve_tlv_parser;
-	# added in 24.07
-	rte_pmd_mlx5_external_tx_queue_id_map;
-	rte_pmd_mlx5_external_tx_queue_id_unmap;
-	rte_pmd_mlx5_txq_dump_contexts;
-	rte_pmd_mlx5_rxq_dump_contexts;
-};
diff --git a/drivers/net/octeontx/version.map b/drivers/net/octeontx/version.map
deleted file mode 100644
index 861dd3450e..0000000000
--- a/drivers/net/octeontx/version.map
+++ /dev/null
@@ -1,7 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_octeontx_pchan_map;
-
-	local: *;
-};
diff --git a/drivers/net/ring/version.map b/drivers/net/ring/version.map
deleted file mode 100644
index 3b408c8ba5..0000000000
--- a/drivers/net/ring/version.map
+++ /dev/null
@@ -1,8 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_eth_from_ring;
-	rte_eth_from_rings;
-
-	local: *;
-};
diff --git a/drivers/net/softnic/version.map b/drivers/net/softnic/version.map
deleted file mode 100644
index 15daeceb73..0000000000
--- a/drivers/net/softnic/version.map
+++ /dev/null
@@ -1,8 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_pmd_softnic_manage;
-	rte_pmd_softnic_run;
-
-	local: *;
-};
diff --git a/drivers/net/vhost/version.map b/drivers/net/vhost/version.map
deleted file mode 100644
index 63890911d8..0000000000
--- a/drivers/net/vhost/version.map
+++ /dev/null
@@ -1,8 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_eth_vhost_get_queue_event;
-	rte_eth_vhost_get_vid_from_port_id;
-
-	local: *;
-};
diff --git a/drivers/power/kvm_vm/version.map b/drivers/power/kvm_vm/version.map
deleted file mode 100644
index ffa676624b..0000000000
--- a/drivers/power/kvm_vm/version.map
+++ /dev/null
@@ -1,8 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_power_guest_channel_receive_msg;
-	rte_power_guest_channel_send_msg;
-
-	local: *;
-};
diff --git a/drivers/raw/cnxk_rvu_lf/version.map b/drivers/raw/cnxk_rvu_lf/version.map
deleted file mode 100644
index 012f05d1e4..0000000000
--- a/drivers/raw/cnxk_rvu_lf/version.map
+++ /dev/null
@@ -1,16 +0,0 @@
-INTERNAL {
-	global:
-
-	rte_pmd_rvu_lf_bar_get;
-	rte_pmd_rvu_lf_irq_register;
-	rte_pmd_rvu_lf_irq_unregister;
-	rte_pmd_rvu_lf_msg_handler_register;
-	rte_pmd_rvu_lf_msg_handler_unregister;
-	rte_pmd_rvu_lf_msg_id_range_set;
-	rte_pmd_rvu_lf_msg_process;
-	rte_pmd_rvu_lf_npa_pf_func_get;
-	rte_pmd_rvu_lf_pf_func_get;
-	rte_pmd_rvu_lf_sso_pf_func_get;
-
-	local: *;
-};
diff --git a/drivers/raw/ifpga/version.map b/drivers/raw/ifpga/version.map
deleted file mode 100644
index ebe50925a8..0000000000
--- a/drivers/raw/ifpga/version.map
+++ /dev/null
@@ -1,17 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_pmd_ifpga_cleanup;
-	rte_pmd_ifpga_get_dev_id;
-	rte_pmd_ifpga_get_phy_info;
-	rte_pmd_ifpga_get_property;
-	rte_pmd_ifpga_get_rsu_status;
-	rte_pmd_ifpga_partial_reconfigure;
-	rte_pmd_ifpga_reboot_try;
-	rte_pmd_ifpga_reload;
-	rte_pmd_ifpga_set_rsu_status;
-	rte_pmd_ifpga_stop_update;
-	rte_pmd_ifpga_update_flash;
-
-	local: *;
-};
diff --git a/lib/acl/version.map b/lib/acl/version.map
deleted file mode 100644
index 782b1fe464..0000000000
--- a/lib/acl/version.map
+++ /dev/null
@@ -1,19 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_acl_add_rules;
-	rte_acl_build;
-	rte_acl_classify;
-	rte_acl_classify_alg;
-	rte_acl_classify_scalar;
-	rte_acl_create;
-	rte_acl_dump;
-	rte_acl_find_existing;
-	rte_acl_free;
-	rte_acl_list_dump;
-	rte_acl_reset;
-	rte_acl_reset_rules;
-	rte_acl_set_ctx_classify;
-
-	local: *;
-};
diff --git a/lib/argparse/version.map b/lib/argparse/version.map
deleted file mode 100644
index 46da99a3e2..0000000000
--- a/lib/argparse/version.map
+++ /dev/null
@@ -1,9 +0,0 @@
-EXPERIMENTAL {
-	global:
-
-	# added in 24.03
-	rte_argparse_parse;
-	rte_argparse_parse_type;
-
-	local: *;
-};
diff --git a/lib/bbdev/version.map b/lib/bbdev/version.map
deleted file mode 100644
index b9b4f31e33..0000000000
--- a/lib/bbdev/version.map
+++ /dev/null
@@ -1,47 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_bbdev_allocate;
-	rte_bbdev_callback_register;
-	rte_bbdev_callback_unregister;
-	rte_bbdev_close;
-	rte_bbdev_count;
-	rte_bbdev_device_status_str;
-	rte_bbdev_devices;
-	rte_bbdev_enqueue_status_str;
-	rte_bbdev_find_next;
-	rte_bbdev_get_named_dev;
-	rte_bbdev_info_get;
-	rte_bbdev_intr_enable;
-	rte_bbdev_is_valid;
-	rte_bbdev_op_pool_create;
-	rte_bbdev_op_type_str;
-	rte_bbdev_pmd_callback_process;
-	rte_bbdev_queue_configure;
-	rte_bbdev_queue_info_get;
-	rte_bbdev_queue_intr_ctl;
-	rte_bbdev_queue_intr_disable;
-	rte_bbdev_queue_intr_enable;
-	rte_bbdev_queue_start;
-	rte_bbdev_queue_stop;
-	rte_bbdev_release;
-	rte_bbdev_setup_queues;
-	rte_bbdev_start;
-	rte_bbdev_stats_get;
-	rte_bbdev_stats_reset;
-	rte_bbdev_stop;
-
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 24.11
-	rte_bbdev_queue_ops_dump;
-	rte_bbdev_ops_param_string;
-
-	# added in 25.03
-	__rte_bbdev_trace_dequeue;
-	__rte_bbdev_trace_enqueue;
-};
diff --git a/lib/bitratestats/version.map b/lib/bitratestats/version.map
deleted file mode 100644
index edda26d552..0000000000
--- a/lib/bitratestats/version.map
+++ /dev/null
@@ -1,10 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_stats_bitrate_calc;
-	rte_stats_bitrate_create;
-	rte_stats_bitrate_free;
-	rte_stats_bitrate_reg;
-
-	local: *;
-};
diff --git a/lib/bpf/version.map b/lib/bpf/version.map
deleted file mode 100644
index 239c62a96c..0000000000
--- a/lib/bpf/version.map
+++ /dev/null
@@ -1,18 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_bpf_convert;
-	rte_bpf_destroy;
-	rte_bpf_dump;
-	rte_bpf_elf_load;
-	rte_bpf_eth_rx_elf_load;
-	rte_bpf_eth_rx_unload;
-	rte_bpf_eth_tx_elf_load;
-	rte_bpf_eth_tx_unload;
-	rte_bpf_exec;
-	rte_bpf_exec_burst;
-	rte_bpf_get_jit;
-	rte_bpf_load;
-
-	local: *;
-};
diff --git a/lib/cfgfile/version.map b/lib/cfgfile/version.map
deleted file mode 100644
index 927b4822fe..0000000000
--- a/lib/cfgfile/version.map
+++ /dev/null
@@ -1,23 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_cfgfile_add_entry;
-	rte_cfgfile_add_section;
-	rte_cfgfile_close;
-	rte_cfgfile_create;
-	rte_cfgfile_get_entry;
-	rte_cfgfile_has_entry;
-	rte_cfgfile_has_section;
-	rte_cfgfile_load;
-	rte_cfgfile_load_with_params;
-	rte_cfgfile_num_sections;
-	rte_cfgfile_save;
-	rte_cfgfile_section_entries;
-	rte_cfgfile_section_entries_by_index;
-	rte_cfgfile_section_num_entries;
-	rte_cfgfile_section_num_entries_by_index;
-	rte_cfgfile_sections;
-	rte_cfgfile_set_entry;
-
-	local: *;
-};
diff --git a/lib/cmdline/version.map b/lib/cmdline/version.map
deleted file mode 100644
index 08050ea3f3..0000000000
--- a/lib/cmdline/version.map
+++ /dev/null
@@ -1,82 +0,0 @@
-DPDK_25 {
-	global:
-
-	cirbuf_add_buf_head;
-	cirbuf_add_buf_tail;
-	cirbuf_add_head;
-	cirbuf_add_head_safe;
-	cirbuf_add_tail;
-	cirbuf_add_tail_safe;
-	cirbuf_align_left;
-	cirbuf_align_right;
-	cirbuf_del_buf_head;
-	cirbuf_del_buf_tail;
-	cirbuf_del_head;
-	cirbuf_del_head_safe;
-	cirbuf_del_tail;
-	cirbuf_del_tail_safe;
-	cirbuf_get_buf_head;
-	cirbuf_get_buf_tail;
-	cirbuf_get_head;
-	cirbuf_get_tail;
-	cirbuf_init;
-	cmdline_complete;
-	cmdline_complete_get_elt_string;
-	cmdline_complete_get_nb_string;
-	cmdline_file_new;
-	cmdline_free;
-	cmdline_get_help_etheraddr;
-	cmdline_get_help_ipaddr;
-	cmdline_get_help_num;
-	cmdline_get_help_portlist;
-	cmdline_get_help_string;
-	cmdline_get_rdline;
-	cmdline_in;
-	cmdline_interact;
-	cmdline_isendoftoken;
-	cmdline_new;
-	cmdline_parse;
-	cmdline_parse_check;
-	cmdline_parse_etheraddr;
-	cmdline_parse_ipaddr;
-	cmdline_parse_num;
-	cmdline_parse_portlist;
-	cmdline_parse_string;
-	cmdline_printf;
-	cmdline_quit;
-	cmdline_set_prompt;
-	cmdline_stdin_exit;
-	cmdline_stdin_new;
-	cmdline_token_etheraddr_ops;
-	cmdline_token_ipaddr_ops;
-	cmdline_token_num_ops;
-	cmdline_token_portlist_ops;
-	cmdline_token_string_ops;
-	cmdline_write_char;
-	rdline_add_history;
-	rdline_char_in;
-	rdline_clear_history;
-	rdline_free;
-	rdline_get_buffer;
-	rdline_get_history_buffer_size;
-	rdline_get_history_item;
-	rdline_get_opaque;
-	rdline_new;
-	rdline_newline;
-	rdline_quit;
-	rdline_redisplay;
-	rdline_reset;
-	rdline_restart;
-	rdline_stop;
-	vt100_init;
-	vt100_parser;
-
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 25.03
-	cmdline_token_bool_ops;
-};
\ No newline at end of file
diff --git a/lib/compressdev/version.map b/lib/compressdev/version.map
deleted file mode 100644
index 3849ae2740..0000000000
--- a/lib/compressdev/version.map
+++ /dev/null
@@ -1,40 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_comp_get_feature_name;
-	rte_comp_op_alloc;
-	rte_comp_op_bulk_alloc;
-	rte_comp_op_bulk_free;
-	rte_comp_op_free;
-	rte_comp_op_pool_create;
-	rte_compressdev_capability_get;
-	rte_compressdev_close;
-	rte_compressdev_configure;
-	rte_compressdev_count;
-	rte_compressdev_dequeue_burst;
-	rte_compressdev_devices_get;
-	rte_compressdev_enqueue_burst;
-	rte_compressdev_get_dev_id;
-	rte_compressdev_get_feature_name;
-	rte_compressdev_info_get;
-	rte_compressdev_name_get;
-	rte_compressdev_pmd_allocate;
-	rte_compressdev_pmd_create;
-	rte_compressdev_pmd_destroy;
-	rte_compressdev_pmd_get_named_dev;
-	rte_compressdev_pmd_parse_input_args;
-	rte_compressdev_pmd_release_device;
-	rte_compressdev_private_xform_create;
-	rte_compressdev_private_xform_free;
-	rte_compressdev_queue_pair_count;
-	rte_compressdev_queue_pair_setup;
-	rte_compressdev_socket_id;
-	rte_compressdev_start;
-	rte_compressdev_stats_get;
-	rte_compressdev_stats_reset;
-	rte_compressdev_stop;
-	rte_compressdev_stream_create;
-	rte_compressdev_stream_free;
-
-	local: *;
-};
diff --git a/lib/cryptodev/version.map b/lib/cryptodev/version.map
deleted file mode 100644
index ece27eb173..0000000000
--- a/lib/cryptodev/version.map
+++ /dev/null
@@ -1,114 +0,0 @@
-DPDK_25 {
-	global:
-
-	__rte_cryptodev_trace_dequeue_burst;
-	__rte_cryptodev_trace_enqueue_burst;
-	rte_crypto_aead_operation_strings;
-	rte_crypto_asym_ke_strings;
-	rte_crypto_asym_op_strings;
-	rte_crypto_auth_operation_strings;
-	rte_crypto_cipher_operation_strings;
-	rte_crypto_fp_ops;
-	rte_crypto_op_pool_create;
-	rte_cryptodev_add_deq_callback;
-	rte_cryptodev_add_enq_callback;
-	rte_cryptodev_asym_capability_get;
-	rte_cryptodev_asym_get_header_session_size;
-	rte_cryptodev_asym_get_private_session_size;
-	rte_cryptodev_asym_get_xform_enum;
-	rte_cryptodev_asym_session_create;
-	rte_cryptodev_asym_session_free;
-	rte_cryptodev_asym_session_get_user_data;
-	rte_cryptodev_asym_session_pool_create;
-	rte_cryptodev_asym_session_set_user_data;
-	rte_cryptodev_asym_xform_capability_check_hash;
-	rte_cryptodev_asym_xform_capability_check_modlen;
-	rte_cryptodev_asym_xform_capability_check_optype;
-	rte_cryptodev_callback_register;
-	rte_cryptodev_callback_unregister;
-	rte_cryptodev_close;
-	rte_cryptodev_configure;
-	rte_cryptodev_configure_raw_dp_ctx;
-	rte_cryptodev_count;
-	rte_cryptodev_device_count_by_driver;
-	rte_cryptodev_devices_get;
-	rte_cryptodev_driver_id_get;
-	rte_cryptodev_driver_name_get;
-	rte_cryptodev_get_aead_algo_enum;
-	rte_cryptodev_get_auth_algo_enum;
-	rte_cryptodev_get_cipher_algo_enum;
-	rte_cryptodev_get_dev_id;
-	rte_cryptodev_get_feature_name;
-	rte_cryptodev_get_qp_status;
-	rte_cryptodev_get_raw_dp_ctx_size;
-	rte_cryptodev_get_sec_ctx;
-	rte_cryptodev_info_get;
-	rte_cryptodev_is_valid_dev;
-	rte_cryptodev_logtype;
-	rte_cryptodev_name_get;
-	rte_cryptodev_queue_pair_count;
-	rte_cryptodev_queue_pair_setup;
-	rte_cryptodev_raw_dequeue_burst;
-	rte_cryptodev_raw_dequeue_done;
-	rte_cryptodev_raw_enqueue_burst;
-	rte_cryptodev_raw_enqueue_done;
-	rte_cryptodev_remove_deq_callback;
-	rte_cryptodev_remove_enq_callback;
-	rte_cryptodev_session_event_mdata_set;
-	rte_cryptodev_socket_id;
-	rte_cryptodev_start;
-	rte_cryptodev_stats_get;
-	rte_cryptodev_stats_reset;
-	rte_cryptodev_stop;
-	rte_cryptodev_sym_capability_check_aead;
-	rte_cryptodev_sym_capability_check_auth;
-	rte_cryptodev_sym_capability_check_cipher;
-	rte_cryptodev_sym_capability_get;
-	rte_cryptodev_sym_cpu_crypto_process;
-	rte_cryptodev_sym_get_private_session_size;
-	rte_cryptodev_sym_session_create;
-	rte_cryptodev_sym_session_free;
-	rte_cryptodev_sym_session_get_user_data;
-	rte_cryptodev_sym_session_pool_create;
-	rte_cryptodev_sym_session_set_user_data;
-
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 23.03
-	rte_cryptodev_asym_get_xform_string;
-	rte_cryptodev_get_aead_algo_string;
-	rte_cryptodev_get_auth_algo_string;
-	rte_cryptodev_get_cipher_algo_string;
-	rte_cryptodev_queue_pair_event_error_query;
-
-	# added in 24.03
-	__rte_cryptodev_trace_qp_depth_used;
-
-	# added in 24.11
-	rte_cryptodev_asym_xform_capability_check_opcap;
-	rte_cryptodev_queue_pair_reset;
-};
-
-INTERNAL {
-	global:
-
-	cryptodev_fp_ops_reset;
-	cryptodev_fp_ops_set;
-	rte_cryptodev_allocate_driver;
-	rte_cryptodev_pmd_allocate;
-	rte_cryptodev_pmd_callback_process;
-	rte_cryptodev_pmd_create;
-	rte_cryptodev_pmd_create_dev_name;
-	rte_cryptodev_pmd_destroy;
-	rte_cryptodev_pmd_get_dev;
-	rte_cryptodev_pmd_get_named_dev;
-	rte_cryptodev_pmd_parse_input_args;
-	rte_cryptodev_pmd_probing_finish;
-	rte_cryptodev_pmd_release_device;
-	rte_cryptodev_session_event_mdata_get;
-	rte_cryptodevs;
-};
diff --git a/lib/dispatcher/version.map b/lib/dispatcher/version.map
deleted file mode 100644
index 44585e4f15..0000000000
--- a/lib/dispatcher/version.map
+++ /dev/null
@@ -1,20 +0,0 @@
-EXPERIMENTAL {
-	global:
-
-	# added in 23.11
-	rte_dispatcher_bind_port_to_lcore;
-	rte_dispatcher_create;
-	rte_dispatcher_finalize_register;
-	rte_dispatcher_finalize_unregister;
-	rte_dispatcher_free;
-	rte_dispatcher_register;
-	rte_dispatcher_service_id_get;
-	rte_dispatcher_start;
-	rte_dispatcher_stats_get;
-	rte_dispatcher_stats_reset;
-	rte_dispatcher_stop;
-	rte_dispatcher_unbind_port_from_lcore;
-	rte_dispatcher_unregister;
-
-	local: *;
-};
diff --git a/lib/distributor/version.map b/lib/distributor/version.map
deleted file mode 100644
index b5ec7dfaca..0000000000
--- a/lib/distributor/version.map
+++ /dev/null
@@ -1,15 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_distributor_clear_returns;
-	rte_distributor_create;
-	rte_distributor_flush;
-	rte_distributor_get_pkt;
-	rte_distributor_poll_pkt;
-	rte_distributor_process;
-	rte_distributor_request_pkt;
-	rte_distributor_return_pkt;
-	rte_distributor_returned_pkts;
-
-	local: *;
-};
diff --git a/lib/dmadev/version.map b/lib/dmadev/version.map
deleted file mode 100644
index 822aaa2d3b..0000000000
--- a/lib/dmadev/version.map
+++ /dev/null
@@ -1,47 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_dma_close;
-	rte_dma_configure;
-	rte_dma_count_avail;
-	rte_dma_dev_max;
-	rte_dma_dump;
-	rte_dma_get_dev_id_by_name;
-	rte_dma_info_get;
-	rte_dma_is_valid;
-	rte_dma_next_dev;
-	rte_dma_start;
-	rte_dma_stats_get;
-	rte_dma_stats_reset;
-	rte_dma_stop;
-	rte_dma_vchan_setup;
-	rte_dma_vchan_status;
-
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 24.03
-	__rte_dma_trace_burst_capacity;
-	__rte_dma_trace_completed;
-	__rte_dma_trace_completed_status;
-	__rte_dma_trace_copy;
-	__rte_dma_trace_copy_sg;
-	__rte_dma_trace_fill;
-	__rte_dma_trace_submit;
-
-	local: *;
-};
-
-INTERNAL {
-	global:
-
-	rte_dma_fp_objs;
-	rte_dma_pmd_allocate;
-	rte_dma_pmd_get_dev_by_id;
-	rte_dma_pmd_release;
-
-	local: *;
-};
diff --git a/lib/eal/version.map b/lib/eal/version.map
deleted file mode 100644
index a20c713eb1..0000000000
--- a/lib/eal/version.map
+++ /dev/null
@@ -1,451 +0,0 @@
-DPDK_25 {
-	global:
-
-	__rte_panic;
-	eal_parse_sysfs_value; # WINDOWS_NO_EXPORT
-	eal_timer_source; # WINDOWS_NO_EXPORT
-	per_lcore__lcore_id;
-	per_lcore__rte_errno;
-	per_lcore__thread_id;
-	rte_bus_dump;
-	rte_bus_find;
-	rte_bus_find_by_device;
-	rte_bus_find_by_name;
-	rte_bus_get_iommu_class;
-	rte_bus_name;
-	rte_bus_probe;
-	rte_bus_scan;
-	rte_calloc;
-	rte_calloc_socket;
-	rte_class_find;
-	rte_class_find_by_name;
-	rte_class_register;
-	rte_class_unregister;
-	rte_cpu_get_flag_enabled;
-	rte_cpu_get_flag_name;
-	rte_cpu_get_intrinsics_support; # WINDOWS_NO_EXPORT
-	rte_cpu_is_supported; # WINDOWS_NO_EXPORT
-	rte_cycles_vmware_tsc_map; # WINDOWS_NO_EXPORT
-	rte_delay_us;
-	rte_delay_us_block;
-	rte_delay_us_callback_register;
-	rte_delay_us_sleep;
-	rte_dev_bus;
-	rte_dev_bus_info;
-	rte_dev_devargs;
-	rte_dev_dma_map;
-	rte_dev_dma_unmap;
-	rte_dev_driver;
-	rte_dev_event_callback_process;
-	rte_dev_event_callback_register;
-	rte_dev_event_callback_unregister;
-	rte_dev_event_monitor_start;
-	rte_dev_event_monitor_stop;
-	rte_dev_hotplug_handle_disable;
-	rte_dev_hotplug_handle_enable;
-	rte_dev_is_probed;
-	rte_dev_iterator_init;
-	rte_dev_iterator_next;
-	rte_dev_name;
-	rte_dev_numa_node;
-	rte_dev_probe;
-	rte_dev_remove;
-	rte_devargs_add;
-	rte_devargs_dump;
-	rte_devargs_insert;
-	rte_devargs_next;
-	rte_devargs_parse;
-	rte_devargs_parsef;
-	rte_devargs_remove;
-	rte_devargs_reset;
-	rte_devargs_type_count;
-	rte_drand;
-	rte_driver_name;
-	rte_dump_physmem_layout;
-	rte_dump_stack;
-	rte_dump_tailq;
-	rte_eal_alarm_cancel;
-	rte_eal_alarm_set;
-	rte_eal_cleanup;
-	rte_eal_create_uio_dev; # WINDOWS_NO_EXPORT
-	rte_eal_get_lcore_state;
-	rte_eal_get_physmem_size;
-	rte_eal_get_runtime_dir;
-	rte_eal_has_hugepages;
-	rte_eal_has_pci;
-	rte_eal_hotplug_add;
-	rte_eal_hotplug_remove;
-	rte_eal_hpet_init; # WINDOWS_NO_EXPORT
-	rte_eal_init;
-	rte_eal_iopl_init; # WINDOWS_NO_EXPORT
-	rte_eal_iova_mode;
-	rte_eal_lcore_role;
-	rte_eal_mbuf_user_pool_ops;
-	rte_eal_mp_remote_launch;
-	rte_eal_mp_wait_lcore;
-	rte_eal_primary_proc_alive; # WINDOWS_NO_EXPORT
-	rte_eal_process_type;
-	rte_eal_remote_launch;
-	rte_eal_tailq_lookup;
-	rte_eal_tailq_register;
-	rte_eal_using_phys_addrs;
-	rte_eal_vfio_get_vf_token; # WINDOWS_NO_EXPORT
-	rte_eal_vfio_intr_mode; # WINDOWS_NO_EXPORT
-	rte_eal_wait_lcore;
-	rte_epoll_ctl;
-	rte_epoll_wait;
-	rte_epoll_wait_interruptible;
-	rte_exit;
-	rte_extmem_attach;
-	rte_extmem_detach;
-	rte_extmem_register;
-	rte_extmem_unregister;
-	rte_fbarray_attach;
-	rte_fbarray_destroy;
-	rte_fbarray_detach;
-	rte_fbarray_dump_metadata;
-	rte_fbarray_find_biggest_free;
-	rte_fbarray_find_biggest_used;
-	rte_fbarray_find_contig_free;
-	rte_fbarray_find_contig_used;
-	rte_fbarray_find_idx;
-	rte_fbarray_find_next_free;
-	rte_fbarray_find_next_n_free;
-	rte_fbarray_find_next_n_used;
-	rte_fbarray_find_next_used;
-	rte_fbarray_find_prev_free;
-	rte_fbarray_find_prev_n_free;
-	rte_fbarray_find_prev_n_used;
-	rte_fbarray_find_prev_used;
-	rte_fbarray_find_rev_biggest_free;
-	rte_fbarray_find_rev_biggest_used;
-	rte_fbarray_find_rev_contig_free;
-	rte_fbarray_find_rev_contig_used;
-	rte_fbarray_get;
-	rte_fbarray_init;
-	rte_fbarray_is_used;
-	rte_fbarray_set_free;
-	rte_fbarray_set_used;
-	rte_free;
-	rte_get_hpet_cycles; # WINDOWS_NO_EXPORT
-	rte_get_hpet_hz; # WINDOWS_NO_EXPORT
-	rte_get_main_lcore;
-	rte_get_next_lcore;
-	rte_get_tsc_hz;
-	rte_hexdump;
-	rte_hypervisor_get;
-	rte_hypervisor_get_name; # WINDOWS_NO_EXPORT
-	rte_intr_ack;
-	rte_intr_callback_register;
-	rte_intr_callback_unregister;
-	rte_intr_callback_unregister_pending;
-	rte_intr_callback_unregister_sync;
-	rte_intr_disable;
-	rte_intr_enable;
-	rte_intr_fd_get;
-	rte_intr_fd_set;
-	rte_intr_instance_alloc;
-	rte_intr_instance_free;
-	rte_intr_type_get;
-	rte_intr_type_set;
-	rte_keepalive_create; # WINDOWS_NO_EXPORT
-	rte_keepalive_dispatch_pings; # WINDOWS_NO_EXPORT
-	rte_keepalive_mark_alive; # WINDOWS_NO_EXPORT
-	rte_keepalive_mark_sleep; # WINDOWS_NO_EXPORT
-	rte_keepalive_register_core; # WINDOWS_NO_EXPORT
-	rte_keepalive_register_relay_callback; # WINDOWS_NO_EXPORT
-	rte_lcore_callback_register;
-	rte_lcore_callback_unregister;
-	rte_lcore_count;
-	rte_lcore_cpuset;
-	rte_lcore_dump;
-	rte_lcore_has_role;
-	rte_lcore_index;
-	rte_lcore_is_enabled;
-	rte_lcore_iterate;
-	rte_lcore_to_cpu_id;
-	rte_lcore_to_socket_id;
-	rte_lcore_register_usage_cb;
-	rte_malloc;
-	rte_malloc_dump_heaps;
-	rte_malloc_dump_stats;
-	rte_malloc_get_socket_stats;
-	rte_malloc_heap_create;
-	rte_malloc_heap_destroy;
-	rte_malloc_heap_get_socket;
-	rte_malloc_heap_memory_add;
-	rte_malloc_heap_memory_attach;
-	rte_malloc_heap_memory_detach;
-	rte_malloc_heap_memory_remove;
-	rte_malloc_heap_socket_is_external;
-	rte_malloc_socket;
-	rte_malloc_validate;
-	rte_malloc_virt2iova;
-	rte_mcfg_get_single_file_segments;
-	rte_mcfg_mem_read_lock;
-	rte_mcfg_mem_read_unlock;
-	rte_mcfg_mem_write_lock;
-	rte_mcfg_mem_write_unlock;
-	rte_mcfg_mempool_read_lock;
-	rte_mcfg_mempool_read_unlock;
-	rte_mcfg_mempool_write_lock;
-	rte_mcfg_mempool_write_unlock;
-	rte_mcfg_tailq_read_lock;
-	rte_mcfg_tailq_read_unlock;
-	rte_mcfg_tailq_write_lock;
-	rte_mcfg_tailq_write_unlock;
-	rte_mcfg_timer_lock;
-	rte_mcfg_timer_unlock;
-	rte_mem_alloc_validator_register;
-	rte_mem_alloc_validator_unregister;
-	rte_mem_check_dma_mask;
-	rte_mem_check_dma_mask_thread_unsafe;
-	rte_mem_event_callback_register;
-	rte_mem_event_callback_unregister;
-	rte_mem_iova2virt;
-	rte_mem_lock_page;
-	rte_mem_set_dma_mask;
-	rte_mem_virt2iova;
-	rte_mem_virt2memseg;
-	rte_mem_virt2memseg_list;
-	rte_mem_virt2phy;
-	rte_memdump;
-	rte_memory_get_nchannel;
-	rte_memory_get_nrank;
-	rte_memseg_contig_walk;
-	rte_memseg_contig_walk_thread_unsafe;
-	rte_memseg_get_fd;
-	rte_memseg_get_fd_offset;
-	rte_memseg_get_fd_offset_thread_unsafe;
-	rte_memseg_get_fd_thread_unsafe;
-	rte_memseg_list_walk;
-	rte_memseg_list_walk_thread_unsafe;
-	rte_memseg_walk;
-	rte_memseg_walk_thread_unsafe;
-	rte_memzone_dump;
-	rte_memzone_free;
-	rte_memzone_lookup;
-	rte_memzone_max_get;
-	rte_memzone_max_set;
-	rte_memzone_reserve;
-	rte_memzone_reserve_aligned;
-	rte_memzone_reserve_bounded;
-	rte_memzone_walk;
-	rte_mp_action_register;
-	rte_mp_action_unregister;
-	rte_mp_disable;
-	rte_mp_reply;
-	rte_mp_request_async;
-	rte_mp_request_sync;
-	rte_mp_sendmsg;
-	rte_power_monitor; # WINDOWS_NO_EXPORT
-	rte_power_monitor_multi; # WINDOWS_NO_EXPORT
-	rte_power_monitor_wakeup; # WINDOWS_NO_EXPORT
-	rte_power_pause; # WINDOWS_NO_EXPORT
-	rte_rand;
-	rte_rand_max;
-	rte_realloc;
-	rte_realloc_socket;
-	rte_reciprocal_value;
-	rte_reciprocal_value_u64;
-	rte_rtm_supported;
-	rte_service_attr_get;
-	rte_service_attr_reset_all;
-	rte_service_component_register;
-	rte_service_component_runstate_set;
-	rte_service_component_unregister;
-	rte_service_dump;
-	rte_service_finalize;
-	rte_service_get_by_name;
-	rte_service_get_count;
-	rte_service_get_name;
-	rte_service_lcore_add;
-	rte_service_lcore_attr_get;
-	rte_service_lcore_attr_reset_all;
-	rte_service_lcore_count;
-	rte_service_lcore_count_services;
-	rte_service_lcore_del;
-	rte_service_lcore_list;
-	rte_service_lcore_may_be_active;
-	rte_service_lcore_reset_all;
-	rte_service_lcore_start;
-	rte_service_lcore_stop;
-	rte_service_map_lcore_get;
-	rte_service_map_lcore_set;
-	rte_service_may_be_active;
-	rte_service_probe_capability;
-	rte_service_run_iter_on_app_lcore;
-	rte_service_runstate_get;
-	rte_service_runstate_set;
-	rte_service_set_runstate_mapped_check;
-	rte_service_set_stats_enable;
-	rte_service_start_with_defaults;
-	rte_set_application_usage_hook;
-	rte_socket_count;
-	rte_socket_id;
-	rte_socket_id_by_idx;
-	rte_srand;
-	rte_str_to_size;
-	rte_strerror;
-	rte_strscpy;
-	rte_strsplit;
-	rte_sys_gettid;
-	rte_thread_attr_get_affinity;
-	rte_thread_attr_init;
-	rte_thread_attr_set_affinity;
-	rte_thread_attr_set_priority;
-	rte_thread_create;
-	rte_thread_create_control;
-	rte_thread_detach;
-	rte_thread_equal;
-	rte_thread_get_affinity;
-	rte_thread_get_affinity_by_id;
-	rte_thread_get_priority;
-	rte_thread_is_intr;
-	rte_thread_join;
-	rte_thread_key_create;
-	rte_thread_key_delete;
-	rte_thread_register;
-	rte_thread_self;
-	rte_thread_set_affinity;
-	rte_thread_set_affinity_by_id;
-	rte_thread_set_name;
-	rte_thread_set_priority;
-	rte_thread_unregister;
-	rte_thread_value_get;
-	rte_thread_value_set;
-	rte_uuid_compare;
-	rte_uuid_is_null;
-	rte_uuid_parse;
-	rte_uuid_unparse;
-	rte_vect_get_max_simd_bitwidth;
-	rte_vect_set_max_simd_bitwidth;
-	rte_version;
-	rte_version_minor;
-	rte_version_month;
-	rte_version_prefix;
-	rte_version_release;
-	rte_version_suffix;
-	rte_version_year;
-	rte_vfio_clear_group; # WINDOWS_NO_EXPORT
-	rte_vfio_container_create; # WINDOWS_NO_EXPORT
-	rte_vfio_container_destroy; # WINDOWS_NO_EXPORT
-	rte_vfio_container_dma_map;
-	rte_vfio_container_dma_unmap;
-	rte_vfio_container_group_bind; # WINDOWS_NO_EXPORT
-	rte_vfio_container_group_unbind; # WINDOWS_NO_EXPORT
-	rte_vfio_enable; # WINDOWS_NO_EXPORT
-	rte_vfio_get_container_fd; # WINDOWS_NO_EXPORT
-	rte_vfio_get_group_fd; # WINDOWS_NO_EXPORT
-	rte_vfio_get_group_num; # WINDOWS_NO_EXPORT
-	rte_vfio_is_enabled; # WINDOWS_NO_EXPORT
-	rte_vfio_noiommu_is_enabled; # WINDOWS_NO_EXPORT
-	rte_vfio_release_device; # WINDOWS_NO_EXPORT
-	rte_vfio_setup_device; # WINDOWS_NO_EXPORT
-	rte_zmalloc;
-	rte_zmalloc_socket;
-
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 20.05
-	__rte_eal_trace_generic_double;
-	__rte_eal_trace_generic_float;
-	__rte_eal_trace_generic_func;
-	__rte_eal_trace_generic_i16;
-	__rte_eal_trace_generic_i32;
-	__rte_eal_trace_generic_i64;
-	__rte_eal_trace_generic_i8;
-	__rte_eal_trace_generic_int;
-	__rte_eal_trace_generic_long;
-	__rte_eal_trace_generic_ptr;
-	__rte_eal_trace_generic_str;
-	__rte_eal_trace_generic_u16;
-	__rte_eal_trace_generic_u32;
-	__rte_eal_trace_generic_u64;
-	__rte_eal_trace_generic_u8;
-	__rte_eal_trace_generic_void;
-	__rte_trace_mem_per_thread_alloc;
-	__rte_trace_point_emit_field;
-	__rte_trace_point_register;
-	per_lcore_trace_mem;
-	per_lcore_trace_point_sz;
-	rte_trace_dump; # WINDOWS_NO_EXPORT
-	rte_trace_is_enabled; # WINDOWS_NO_EXPORT
-	rte_trace_metadata_dump; # WINDOWS_NO_EXPORT
-	rte_trace_mode_get; # WINDOWS_NO_EXPORT
-	rte_trace_mode_set; # WINDOWS_NO_EXPORT
-	rte_trace_pattern; # WINDOWS_NO_EXPORT
-	rte_trace_point_disable; # WINDOWS_NO_EXPORT
-	rte_trace_point_enable; # WINDOWS_NO_EXPORT
-	rte_trace_point_is_enabled; # WINDOWS_NO_EXPORT
-	rte_trace_point_lookup; # WINDOWS_NO_EXPORT
-	rte_trace_regexp; # WINDOWS_NO_EXPORT
-	rte_trace_save; # WINDOWS_NO_EXPORT
-
-	# added in 20.11
-	__rte_eal_trace_generic_size_t; # WINDOWS_NO_EXPORT
-
-	# added in 23.03
-	__rte_eal_trace_generic_blob;
-
-	# added in 24.03
-	rte_vfio_get_device_info; # WINDOWS_NO_EXPORT
-
-	# added in 24.11
-	rte_bitset_to_str;
-	rte_lcore_var_alloc;
-};
-
-INTERNAL {
-	global:
-
-	rte_bus_register;
-	rte_bus_unregister;
-	rte_eal_get_baseaddr;
-	rte_eal_parse_coremask;
-	rte_firmware_read;
-	rte_intr_allow_others;
-	rte_intr_cap_multiple;
-	rte_intr_dev_fd_get;
-	rte_intr_dev_fd_set;
-	rte_intr_dp_is_en;
-	rte_intr_efd_counter_size_set;
-	rte_intr_efd_counter_size_get;
-	rte_intr_efd_disable;
-	rte_intr_efd_enable;
-	rte_intr_efds_index_get;
-	rte_intr_efds_index_set;
-	rte_intr_elist_index_get;
-	rte_intr_elist_index_set;
-	rte_intr_event_list_update;
-	rte_intr_free_epoll_fd;
-	rte_intr_instance_dup;
-	rte_intr_instance_windows_handle_get;
-	rte_intr_instance_windows_handle_set;
-	rte_intr_max_intr_get;
-	rte_intr_max_intr_set;
-	rte_intr_nb_efd_get;
-	rte_intr_nb_efd_set;
-	rte_intr_nb_intr_get;
-	rte_intr_rx_ctl;
-	rte_intr_tls_epfd;
-	rte_intr_vec_list_alloc;
-	rte_intr_vec_list_free;
-	rte_intr_vec_list_index_get;
-	rte_intr_vec_list_index_set;
-	rte_mcfg_ethdev_get_lock;
-	rte_mcfg_mem_get_lock;
-	rte_mcfg_mempool_get_lock;
-	rte_mcfg_tailq_get_lock;
-	rte_mcfg_timer_get_lock;
-	rte_mem_lock;
-	rte_mem_map;
-	rte_mem_page_size;
-	rte_mem_unmap;
-	rte_thread_create_internal_control;
-	rte_thread_set_prefixed_name;
-};
diff --git a/lib/efd/version.map b/lib/efd/version.map
deleted file mode 100644
index 354c7f88bd..0000000000
--- a/lib/efd/version.map
+++ /dev/null
@@ -1,13 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_efd_create;
-	rte_efd_delete;
-	rte_efd_find_existing;
-	rte_efd_free;
-	rte_efd_lookup;
-	rte_efd_lookup_bulk;
-	rte_efd_update;
-
-	local: *;
-};
diff --git a/lib/ethdev/version.map b/lib/ethdev/version.map
deleted file mode 100644
index 3aacba8614..0000000000
--- a/lib/ethdev/version.map
+++ /dev/null
@@ -1,378 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_eth_add_first_rx_callback;
-	rte_eth_add_rx_callback;
-	rte_eth_add_tx_callback;
-	rte_eth_allmulticast_disable;
-	rte_eth_allmulticast_enable;
-	rte_eth_allmulticast_get;
-	rte_eth_call_rx_callbacks;
-	rte_eth_call_tx_callbacks;
-	rte_eth_dev_adjust_nb_rx_tx_desc;
-	rte_eth_dev_callback_register;
-	rte_eth_dev_callback_unregister;
-	rte_eth_dev_close;
-	rte_eth_dev_configure;
-	rte_eth_dev_count_avail;
-	rte_eth_dev_count_total;
-	rte_eth_dev_default_mac_addr_set;
-	rte_eth_dev_flow_ctrl_get;
-	rte_eth_dev_flow_ctrl_set;
-	rte_eth_dev_fw_version_get;
-	rte_eth_dev_get_dcb_info;
-	rte_eth_dev_get_eeprom;
-	rte_eth_dev_get_eeprom_length;
-	rte_eth_dev_get_mtu;
-	rte_eth_dev_get_name_by_port;
-	rte_eth_dev_get_port_by_name;
-	rte_eth_dev_get_reg_info;
-	rte_eth_dev_get_sec_ctx;
-	rte_eth_dev_get_supported_ptypes;
-	rte_eth_dev_get_vlan_offload;
-	rte_eth_dev_info_get;
-	rte_eth_dev_is_removed;
-	rte_eth_dev_is_valid_port;
-	rte_eth_dev_logtype;
-	rte_eth_dev_mac_addr_add;
-	rte_eth_dev_mac_addr_remove;
-	rte_eth_dev_owner_delete;
-	rte_eth_dev_owner_get;
-	rte_eth_dev_owner_new;
-	rte_eth_dev_owner_set;
-	rte_eth_dev_owner_unset;
-	rte_eth_dev_pool_ops_supported;
-	rte_eth_dev_priority_flow_ctrl_set;
-	rte_eth_dev_reset;
-	rte_eth_dev_rss_hash_conf_get;
-	rte_eth_dev_rss_hash_update;
-	rte_eth_dev_rss_reta_query;
-	rte_eth_dev_rss_reta_update;
-	rte_eth_dev_rx_intr_ctl;
-	rte_eth_dev_rx_intr_ctl_q;
-	rte_eth_dev_rx_intr_ctl_q_get_fd;
-	rte_eth_dev_rx_intr_disable;
-	rte_eth_dev_rx_intr_enable;
-	rte_eth_dev_rx_offload_name;
-	rte_eth_dev_rx_queue_start;
-	rte_eth_dev_rx_queue_stop;
-	rte_eth_dev_set_eeprom;
-	rte_eth_dev_set_link_down;
-	rte_eth_dev_set_link_up;
-	rte_eth_dev_set_mc_addr_list;
-	rte_eth_dev_set_mtu;
-	rte_eth_dev_set_ptypes;
-	rte_eth_dev_set_rx_queue_stats_mapping;
-	rte_eth_dev_set_tx_queue_stats_mapping;
-	rte_eth_dev_set_vlan_ether_type;
-	rte_eth_dev_set_vlan_offload;
-	rte_eth_dev_set_vlan_pvid;
-	rte_eth_dev_set_vlan_strip_on_queue;
-	rte_eth_dev_socket_id;
-	rte_eth_dev_start;
-	rte_eth_dev_stop;
-	rte_eth_dev_tx_offload_name;
-	rte_eth_dev_tx_queue_start;
-	rte_eth_dev_tx_queue_stop;
-	rte_eth_dev_uc_all_hash_table_set;
-	rte_eth_dev_uc_hash_table_set;
-	rte_eth_dev_udp_tunnel_port_add;
-	rte_eth_dev_udp_tunnel_port_delete;
-	rte_eth_dev_vlan_filter;
-	rte_eth_find_next;
-	rte_eth_find_next_of;
-	rte_eth_find_next_owned_by;
-	rte_eth_find_next_sibling;
-	rte_eth_fp_ops;
-	rte_eth_iterator_cleanup;
-	rte_eth_iterator_init;
-	rte_eth_iterator_next;
-	rte_eth_led_off;
-	rte_eth_led_on;
-	rte_eth_link_get;
-	rte_eth_link_get_nowait;
-	rte_eth_macaddr_get;
-	rte_eth_promiscuous_disable;
-	rte_eth_promiscuous_enable;
-	rte_eth_promiscuous_get;
-	rte_eth_remove_rx_callback;
-	rte_eth_remove_tx_callback;
-	rte_eth_rx_burst_mode_get;
-	rte_eth_rx_metadata_negotiate;
-	rte_eth_rx_queue_info_get;
-	rte_eth_rx_queue_setup;
-	rte_eth_set_queue_rate_limit;
-	rte_eth_speed_bitflag;
-	rte_eth_stats_get;
-	rte_eth_stats_reset;
-	rte_eth_timesync_adjust_time;
-	rte_eth_timesync_disable;
-	rte_eth_timesync_enable;
-	rte_eth_timesync_read_rx_timestamp;
-	rte_eth_timesync_read_time;
-	rte_eth_timesync_read_tx_timestamp;
-	rte_eth_timesync_write_time;
-	rte_eth_tx_buffer_count_callback;
-	rte_eth_tx_buffer_drop_callback;
-	rte_eth_tx_buffer_init;
-	rte_eth_tx_buffer_set_err_callback;
-	rte_eth_tx_burst_mode_get;
-	rte_eth_tx_done_cleanup;
-	rte_eth_tx_queue_info_get;
-	rte_eth_tx_queue_setup;
-	rte_eth_xstats_get;
-	rte_eth_xstats_get_by_id;
-	rte_eth_xstats_get_id_by_name;
-	rte_eth_xstats_get_names;
-	rte_eth_xstats_get_names_by_id;
-	rte_eth_xstats_reset;
-	rte_flow_copy;
-	rte_flow_create;
-	rte_flow_destroy;
-	rte_flow_error_set;
-	rte_flow_flush;
-	rte_flow_isolate;
-	rte_flow_pick_transfer_proxy;
-	rte_flow_query;
-	rte_flow_validate;
-	rte_tm_capabilities_get;
-	rte_tm_get_number_of_leaf_nodes;
-	rte_tm_hierarchy_commit;
-	rte_tm_level_capabilities_get;
-	rte_tm_mark_ip_dscp;
-	rte_tm_mark_ip_ecn;
-	rte_tm_mark_vlan_dei;
-	rte_tm_node_add;
-	rte_tm_node_capabilities_get;
-	rte_tm_node_cman_update;
-	rte_tm_node_delete;
-	rte_tm_node_parent_update;
-	rte_tm_node_resume;
-	rte_tm_node_shaper_update;
-	rte_tm_node_shared_shaper_update;
-	rte_tm_node_shared_wred_context_update;
-	rte_tm_node_stats_read;
-	rte_tm_node_stats_update;
-	rte_tm_node_suspend;
-	rte_tm_node_type_get;
-	rte_tm_node_wfq_weight_mode_update;
-	rte_tm_node_wred_context_update;
-	rte_tm_shaper_profile_add;
-	rte_tm_shaper_profile_delete;
-	rte_tm_shared_shaper_add_update;
-	rte_tm_shared_shaper_delete;
-	rte_tm_shared_wred_context_add_update;
-	rte_tm_shared_wred_context_delete;
-	rte_tm_wred_profile_add;
-	rte_tm_wred_profile_delete;
-
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 17.11
-	rte_mtr_capabilities_get;
-	rte_mtr_create;
-	rte_mtr_destroy;
-	rte_mtr_meter_disable;
-	rte_mtr_meter_dscp_table_update;
-	rte_mtr_meter_enable;
-	rte_mtr_meter_profile_add;
-	rte_mtr_meter_profile_delete;
-	rte_mtr_meter_profile_update;
-	rte_mtr_stats_read;
-	rte_mtr_stats_update;
-
-	# added in 18.05
-	rte_eth_dev_get_module_eeprom;
-	rte_eth_dev_get_module_info;
-
-	# added in 18.11
-	rte_flow_conv;
-
-	# added in 19.08
-	rte_eth_read_clock;
-
-	# added in 19.11
-	rte_eth_dev_hairpin_capability_get;
-	rte_eth_rx_hairpin_queue_setup;
-	rte_eth_tx_hairpin_queue_setup;
-	rte_flow_dynf_metadata_offs;
-	rte_flow_dynf_metadata_mask;
-	rte_flow_dynf_metadata_register;
-
-	# added in 20.02
-	rte_flow_dev_dump;
-
-	# added in 20.05
-	__rte_ethdev_trace_tx_burst;
-	rte_flow_get_aged_flows;
-
-	# added in 20.11
-	rte_eth_hairpin_bind;
-	rte_eth_hairpin_get_peer_ports;
-	rte_eth_hairpin_unbind;
-	rte_eth_link_speed_to_str;
-	rte_eth_link_to_str;
-	rte_eth_fec_get_capability;
-	rte_eth_fec_get;
-	rte_eth_fec_set;
-	rte_flow_tunnel_decap_set;
-	rte_flow_tunnel_match;
-	rte_flow_get_restore_info;
-	rte_flow_tunnel_action_decap_release;
-	rte_flow_tunnel_item_release;
-
-	# added in 21.02
-	rte_eth_get_monitor_addr;
-
-	# added in 21.05
-	rte_eth_representor_info_get;
-	rte_flow_action_handle_create;
-	rte_flow_action_handle_destroy;
-	rte_flow_action_handle_update;
-	rte_flow_action_handle_query;
-	rte_mtr_meter_policy_add;
-	rte_mtr_meter_policy_delete;
-	rte_mtr_meter_policy_update;
-	rte_mtr_meter_policy_validate;
-
-	# added in 21.11
-	rte_eth_dev_capability_name;
-	rte_eth_dev_conf_get;
-	rte_eth_macaddrs_get;
-	rte_flow_flex_item_create;
-	rte_flow_flex_item_release;
-
-	# added in 22.03
-	rte_eth_dev_priority_flow_ctrl_queue_configure;
-	rte_eth_dev_priority_flow_ctrl_queue_info_get;
-	rte_eth_dev_priv_dump;
-	rte_eth_ip_reassembly_capability_get;
-	rte_eth_ip_reassembly_conf_get;
-	rte_eth_ip_reassembly_conf_set;
-	rte_flow_info_get;
-	rte_flow_configure;
-	rte_flow_pattern_template_create;
-	rte_flow_pattern_template_destroy;
-	rte_flow_actions_template_create;
-	rte_flow_actions_template_destroy;
-	rte_flow_template_table_create;
-	rte_flow_template_table_destroy;
-	rte_flow_async_create;
-	rte_flow_async_destroy;
-	rte_flow_push;
-	rte_flow_pull;
-	rte_flow_async_action_handle_create;
-	rte_flow_async_action_handle_destroy;
-	rte_flow_async_action_handle_update;
-
-	# added in 22.07
-	rte_eth_rx_avail_thresh_query;
-	rte_eth_rx_avail_thresh_set;
-	rte_mtr_color_in_protocol_get;
-	rte_mtr_color_in_protocol_priority_get;
-	rte_mtr_color_in_protocol_set;
-	rte_mtr_meter_vlan_table_update;
-
-	# added in 22.11
-	rte_eth_buffer_split_get_supported_hdr_ptypes;
-	rte_eth_cman_config_get;
-	rte_eth_cman_config_init;
-	rte_eth_cman_config_set;
-	rte_eth_cman_info_get;
-	rte_eth_rx_descriptor_dump;
-	rte_eth_tx_descriptor_dump;
-	rte_flow_async_action_handle_query;
-	rte_flow_get_q_aged_flows;
-	rte_mtr_meter_policy_get;
-	rte_mtr_meter_profile_get;
-
-	# added in 23.03
-	rte_eth_dev_count_aggr_ports;
-	rte_eth_dev_map_aggr_tx_affinity;
-	rte_flow_action_handle_query_update;
-	rte_flow_async_action_handle_query_update;
-	rte_flow_async_create_by_index;
-
-	# added in 23.07
-	rte_eth_rx_queue_is_valid;
-	rte_eth_tx_queue_is_valid;
-	rte_flow_action_list_handle_create;
-	rte_flow_action_list_handle_destroy;
-	rte_flow_action_list_handle_query_update;
-	rte_flow_actions_update;
-	rte_flow_async_action_list_handle_create;
-	rte_flow_async_action_list_handle_destroy;
-	rte_flow_async_action_list_handle_query_update;
-	rte_flow_async_actions_update;
-	rte_flow_restore_info_dynflag;
-
-	# added in 23.11
-	rte_eth_dev_rss_algo_name;
-	rte_eth_recycle_rx_queue_info_get;
-	rte_flow_group_set_miss_actions;
-	rte_flow_calc_table_hash;
-
-	# added in 24.03
-	__rte_eth_trace_tx_queue_count;
-	rte_eth_find_rss_algo;
-	rte_flow_async_update_resized;
-	rte_flow_calc_encap_hash;
-	rte_flow_template_table_resizable;
-	rte_flow_template_table_resize;
-	rte_flow_template_table_resize_complete;
-
-	# added in 24.11
-	__rte_ethdev_trace_rx_burst_empty;
-	__rte_ethdev_trace_rx_burst_nonempty;
-	__rte_eth_trace_call_rx_callbacks_empty;
-	__rte_eth_trace_call_rx_callbacks_nonempty;
-	rte_eth_dev_get_reg_info_ext;
-	rte_eth_speed_lanes_get;
-	rte_eth_speed_lanes_get_capability;
-	rte_eth_speed_lanes_set;
-	rte_eth_timesync_adjust_freq;
-	rte_flow_async_create_by_index_with_pattern;
-	rte_tm_node_query;
-
-	# added in 25.03
-	rte_eth_xstats_query_state;
-	rte_eth_xstats_set_counter;
-};
-
-INTERNAL {
-	global:
-
-	rte_eth_dev_allocate;
-	rte_eth_dev_allocated;
-	rte_eth_dev_attach_secondary;
-	rte_eth_dev_callback_process;
-	rte_eth_dev_create;
-	rte_eth_dev_destroy;
-	rte_eth_dev_get_by_name;
-	rte_eth_dev_is_rx_hairpin_queue;
-	rte_eth_dev_is_tx_hairpin_queue;
-	rte_eth_dev_probing_finish;
-	rte_eth_dev_release_port;
-	rte_eth_dev_internal_reset;
-	rte_eth_devargs_parse;
-	rte_eth_devices;
-	rte_eth_dma_zone_free;
-	rte_eth_dma_zone_reserve;
-	rte_eth_hairpin_queue_peer_bind;
-	rte_eth_hairpin_queue_peer_unbind;
-	rte_eth_hairpin_queue_peer_update;
-	rte_eth_ip_reassembly_dynfield_register;
-	rte_eth_link_speed_ethtool; # WINDOWS_NO_EXPORT
-	rte_eth_link_speed_glink; # WINDOWS_NO_EXPORT
-	rte_eth_link_speed_gset; # WINDOWS_NO_EXPORT
-	rte_eth_pkt_burst_dummy;
-	rte_eth_representor_id_get;
-	rte_eth_switch_domain_alloc;
-	rte_eth_switch_domain_free;
-	rte_flow_fp_default_ops;
-	rte_eth_get_restore_flags;
-};
diff --git a/lib/eventdev/version.map b/lib/eventdev/version.map
deleted file mode 100644
index bff08d6a62..0000000000
--- a/lib/eventdev/version.map
+++ /dev/null
@@ -1,167 +0,0 @@
-DPDK_25 {
-	global:
-
-	__rte_eventdev_trace_crypto_adapter_enqueue;
-	__rte_eventdev_trace_deq_burst;
-	__rte_eventdev_trace_enq_burst;
-	__rte_eventdev_trace_eth_tx_adapter_enqueue;
-	__rte_eventdev_trace_maintain;
-	__rte_eventdev_trace_timer_arm_burst;
-	__rte_eventdev_trace_timer_arm_tmo_tick_burst;
-	__rte_eventdev_trace_timer_cancel_burst;
-	rte_event_crypto_adapter_caps_get;
-	rte_event_crypto_adapter_create;
-	rte_event_crypto_adapter_create_ext;
-	rte_event_crypto_adapter_event_port_get;
-	rte_event_crypto_adapter_free;
-	rte_event_crypto_adapter_queue_pair_add;
-	rte_event_crypto_adapter_queue_pair_del;
-	rte_event_crypto_adapter_service_id_get;
-	rte_event_crypto_adapter_start;
-	rte_event_crypto_adapter_stats_get;
-	rte_event_crypto_adapter_stats_reset;
-	rte_event_crypto_adapter_stop;
-	rte_event_crypto_adapter_vector_limits_get;
-	rte_event_dequeue_timeout_ticks;
-	rte_event_dev_attr_get;
-	rte_event_dev_close;
-	rte_event_dev_configure;
-	rte_event_dev_count;
-	rte_event_dev_dump;
-	rte_event_dev_get_dev_id;
-	rte_event_dev_info_get;
-	rte_event_dev_selftest;
-	rte_event_dev_service_id_get;
-	rte_event_dev_socket_id;
-	rte_event_dev_start;
-	rte_event_dev_stop;
-	rte_event_dev_stop_flush_callback_register;
-	rte_event_dev_xstats_by_name_get;
-	rte_event_dev_xstats_get;
-	rte_event_dev_xstats_names_get;
-	rte_event_dev_xstats_reset;
-	rte_event_eth_rx_adapter_caps_get;
-	rte_event_eth_rx_adapter_cb_register;
-	rte_event_eth_rx_adapter_create;
-	rte_event_eth_rx_adapter_create_ext;
-	rte_event_eth_rx_adapter_create_with_params;
-	rte_event_eth_rx_adapter_event_port_get;
-	rte_event_eth_rx_adapter_free;
-	rte_event_eth_rx_adapter_instance_get;
-	rte_event_eth_rx_adapter_queue_add;
-	rte_event_eth_rx_adapter_queue_conf_get;
-	rte_event_eth_rx_adapter_queue_del;
-	rte_event_eth_rx_adapter_queue_stats_get;
-	rte_event_eth_rx_adapter_queue_stats_reset;
-	rte_event_eth_rx_adapter_service_id_get;
-	rte_event_eth_rx_adapter_start;
-	rte_event_eth_rx_adapter_stats_get;
-	rte_event_eth_rx_adapter_stats_reset;
-	rte_event_eth_rx_adapter_stop;
-	rte_event_eth_rx_adapter_vector_limits_get;
-	rte_event_eth_tx_adapter_caps_get;
-	rte_event_eth_tx_adapter_create;
-	rte_event_eth_tx_adapter_create_ext;
-	rte_event_eth_tx_adapter_event_port_get;
-	rte_event_eth_tx_adapter_free;
-	rte_event_eth_tx_adapter_instance_get;
-	rte_event_eth_tx_adapter_queue_add;
-	rte_event_eth_tx_adapter_queue_del;
-	rte_event_eth_tx_adapter_queue_start;
-	rte_event_eth_tx_adapter_queue_stop;
-	rte_event_eth_tx_adapter_service_id_get;
-	rte_event_eth_tx_adapter_start;
-	rte_event_eth_tx_adapter_stats_get;
-	rte_event_eth_tx_adapter_stats_reset;
-	rte_event_eth_tx_adapter_stop;
-	rte_event_fp_ops;
-	rte_event_port_attr_get;
-	rte_event_port_default_conf_get;
-	rte_event_port_link;
-	rte_event_port_links_get;
-	rte_event_port_quiesce;
-	rte_event_port_setup;
-	rte_event_port_unlink;
-	rte_event_port_unlinks_in_progress;
-	rte_event_queue_attr_get;
-	rte_event_queue_attr_set;
-	rte_event_queue_default_conf_get;
-	rte_event_queue_setup;
-	rte_event_ring_create;
-	rte_event_ring_free;
-	rte_event_ring_init;
-	rte_event_ring_lookup;
-	rte_event_timer_adapter_caps_get;
-	rte_event_timer_adapter_create;
-	rte_event_timer_adapter_create_ext;
-	rte_event_timer_adapter_free;
-	rte_event_timer_adapter_get_info;
-	rte_event_timer_adapter_lookup;
-	rte_event_timer_adapter_service_id_get;
-	rte_event_timer_adapter_start;
-	rte_event_timer_adapter_stats_get;
-	rte_event_timer_adapter_stats_reset;
-	rte_event_timer_adapter_stop;
-	rte_event_vector_pool_create;
-
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 23.03
-	rte_event_crypto_adapter_runtime_params_get;
-	rte_event_crypto_adapter_runtime_params_init;
-	rte_event_crypto_adapter_runtime_params_set;
-	rte_event_eth_rx_adapter_runtime_params_get;
-	rte_event_eth_rx_adapter_runtime_params_init;
-	rte_event_eth_rx_adapter_runtime_params_set;
-	rte_event_eth_tx_adapter_runtime_params_get;
-	rte_event_eth_tx_adapter_runtime_params_init;
-	rte_event_eth_tx_adapter_runtime_params_set;
-	rte_event_timer_remaining_ticks_get;
-
-	# added in 23.11
-	rte_event_dma_adapter_caps_get;
-	rte_event_dma_adapter_create;
-	rte_event_dma_adapter_create_ext;
-	rte_event_dma_adapter_enqueue;
-	rte_event_dma_adapter_event_port_get;
-	rte_event_dma_adapter_free;
-	rte_event_dma_adapter_runtime_params_get;
-	rte_event_dma_adapter_runtime_params_init;
-	rte_event_dma_adapter_runtime_params_set;
-	rte_event_dma_adapter_service_id_get;
-	rte_event_dma_adapter_start;
-	rte_event_dma_adapter_stats_get;
-	rte_event_dma_adapter_stats_reset;
-	rte_event_dma_adapter_stop;
-	rte_event_dma_adapter_vchan_add;
-	rte_event_dma_adapter_vchan_del;
-	rte_event_eth_rx_adapter_create_ext_with_params;
-	rte_event_port_profile_links_set;
-	rte_event_port_profile_unlink;
-	rte_event_port_profile_links_get;
-	__rte_eventdev_trace_port_profile_switch;
-
-	# added in 24.11
-	__rte_eventdev_trace_port_preschedule_modify;
-	__rte_eventdev_trace_port_preschedule;
-
-	# added in 25.03
-	rte_event_eth_rx_adapter_queues_add;
-};
-
-INTERNAL {
-	global:
-
-	event_dev_fp_ops_reset;
-	event_dev_fp_ops_set;
-	event_dev_probing_finish;
-	rte_event_logtype;
-	rte_event_pmd_allocate;
-	rte_event_pmd_release;
-	rte_event_pmd_selftest_seqn_dynfield_offset;
-	rte_eventdevs;
-};
diff --git a/lib/fib/version.map b/lib/fib/version.map
deleted file mode 100644
index df8f113df3..0000000000
--- a/lib/fib/version.map
+++ /dev/null
@@ -1,31 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_fib6_add;
-	rte_fib6_create;
-	rte_fib6_delete;
-	rte_fib6_find_existing;
-	rte_fib6_free;
-	rte_fib6_get_dp;
-	rte_fib6_get_rib;
-	rte_fib6_lookup_bulk;
-	rte_fib6_select_lookup;
-	rte_fib_add;
-	rte_fib_create;
-	rte_fib_delete;
-	rte_fib_find_existing;
-	rte_fib_free;
-	rte_fib_get_dp;
-	rte_fib_get_rib;
-	rte_fib_lookup_bulk;
-	rte_fib_select_lookup;
-
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 24.11
-	rte_fib_rcu_qsbr_add;
-};
diff --git a/lib/gpudev/version.map b/lib/gpudev/version.map
deleted file mode 100644
index a2c8ce5759..0000000000
--- a/lib/gpudev/version.map
+++ /dev/null
@@ -1,44 +0,0 @@
-EXPERIMENTAL {
-	global:
-
-	# added in 21.11
-	rte_gpu_add_child;
-	rte_gpu_callback_register;
-	rte_gpu_callback_unregister;
-	rte_gpu_close;
-	rte_gpu_comm_cleanup_list;
-	rte_gpu_comm_create_flag;
-	rte_gpu_comm_create_list;
-	rte_gpu_comm_destroy_flag;
-	rte_gpu_comm_destroy_list;
-	rte_gpu_comm_get_flag_value;
-	rte_gpu_comm_get_status;
-	rte_gpu_comm_populate_list_pkts;
-	rte_gpu_comm_set_flag;
-	rte_gpu_comm_set_status;
-	rte_gpu_count_avail;
-	rte_gpu_find_next;
-	rte_gpu_info_get;
-	rte_gpu_init;
-	rte_gpu_is_valid;
-	rte_gpu_mem_alloc;
-	rte_gpu_mem_cpu_map;
-	rte_gpu_mem_free;
-	rte_gpu_mem_register;
-	rte_gpu_mem_cpu_unmap;
-	rte_gpu_mem_unregister;
-	rte_gpu_wmb;
-};
-
-INTERNAL {
-	global:
-
-	rte_gpu_allocate;
-	rte_gpu_attach;
-	rte_gpu_complete_new;
-	rte_gpu_get_by_name;
-	rte_gpu_notify;
-	rte_gpu_release;
-
-	local: *;
-};
diff --git a/lib/graph/version.map b/lib/graph/version.map
deleted file mode 100644
index d03d44434d..0000000000
--- a/lib/graph/version.map
+++ /dev/null
@@ -1,44 +0,0 @@
-DPDK_25 {
-	global:
-
-	__rte_graph_mcore_dispatch_sched_node_enqueue;
-	__rte_graph_mcore_dispatch_sched_wq_process;
-	__rte_node_register;
-	__rte_node_stream_alloc;
-	__rte_node_stream_alloc_size;
-	rte_graph_clone;
-	rte_graph_cluster_stats_create;
-	rte_graph_cluster_stats_destroy;
-	rte_graph_cluster_stats_get;
-	rte_graph_cluster_stats_reset;
-	rte_graph_create;
-	rte_graph_destroy;
-	rte_graph_dump;
-	rte_graph_export;
-	rte_graph_from_name;
-	rte_graph_id_to_name;
-	rte_graph_list_dump;
-	rte_graph_lookup;
-	rte_graph_max_count;
-	rte_graph_model_is_valid;
-	rte_graph_model_mcore_dispatch_core_bind;
-	rte_graph_model_mcore_dispatch_core_unbind;
-	rte_graph_model_mcore_dispatch_node_lcore_affinity_set;
-	rte_graph_node_get;
-	rte_graph_node_get_by_name;
-	rte_graph_obj_dump;
-	rte_graph_worker_model_get;
-	rte_graph_worker_model_set;
-	rte_node_clone;
-	rte_node_dump;
-	rte_node_edge_count;
-	rte_node_edge_get;
-	rte_node_edge_shrink;
-	rte_node_edge_update;
-	rte_node_from_name;
-	rte_node_id_to_name;
-	rte_node_list_dump;
-	rte_node_max_count;
-
-	local: *;
-};
diff --git a/lib/gro/version.map b/lib/gro/version.map
deleted file mode 100644
index c21c137fcd..0000000000
--- a/lib/gro/version.map
+++ /dev/null
@@ -1,12 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_gro_ctx_create;
-	rte_gro_ctx_destroy;
-	rte_gro_get_pkt_count;
-	rte_gro_reassemble;
-	rte_gro_reassemble_burst;
-	rte_gro_timeout_flush;
-
-	local: *;
-};
diff --git a/lib/gso/version.map b/lib/gso/version.map
deleted file mode 100644
index 815baeb3e5..0000000000
--- a/lib/gso/version.map
+++ /dev/null
@@ -1,7 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_gso_segment;
-
-	local: *;
-};
diff --git a/lib/hash/version.map b/lib/hash/version.map
deleted file mode 100644
index 779eb1fe13..0000000000
--- a/lib/hash/version.map
+++ /dev/null
@@ -1,66 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_fbk_hash_create;
-	rte_fbk_hash_find_existing;
-	rte_fbk_hash_free;
-	rte_hash_add_key;
-	rte_hash_add_key_data;
-	rte_hash_add_key_with_hash;
-	rte_hash_add_key_with_hash_data;
-	rte_hash_count;
-	rte_hash_crc32_alg;
-	rte_hash_crc_set_alg;
-	rte_hash_create;
-	rte_hash_del_key;
-	rte_hash_del_key_with_hash;
-	rte_hash_find_existing;
-	rte_hash_free;
-	rte_hash_free_key_with_position;
-	rte_hash_get_key_with_position;
-	rte_hash_hash;
-	rte_hash_iterate;
-	rte_hash_lookup;
-	rte_hash_lookup_bulk;
-	rte_hash_lookup_bulk_data;
-	rte_hash_lookup_data;
-	rte_hash_lookup_with_hash;
-	rte_hash_lookup_with_hash_bulk;
-	rte_hash_lookup_with_hash_bulk_data;
-	rte_hash_lookup_with_hash_data;
-	rte_hash_max_key_id;
-	rte_hash_rcu_qsbr_add;
-	rte_hash_reset;
-	rte_hash_set_cmp_func;
-	rte_thash_add_helper;
-	rte_thash_adjust_tuple;
-	rte_thash_complete_matrix;
-	rte_thash_find_existing;
-	rte_thash_free_ctx;
-	rte_thash_get_complement;
-	rte_thash_get_gfni_matrices;
-	rte_thash_get_helper;
-	rte_thash_get_key;
-	rte_thash_gfni_supported;
-	rte_thash_init_ctx;
-
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 24.07
-	rte_hash_rcu_qsbr_dq_reclaim;
-
-	# added in 24.11
-	rte_thash_gen_key;
-};
-
-INTERNAL {
-	global:
-
-	rte_thash_gfni_stub;
-	rte_thash_gfni_bulk_stub;
-	thash_get_rand_poly;
-};
diff --git a/lib/ip_frag/version.map b/lib/ip_frag/version.map
deleted file mode 100644
index 0c001c7bd5..0000000000
--- a/lib/ip_frag/version.map
+++ /dev/null
@@ -1,16 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_ip_frag_free_death_row;
-	rte_ip_frag_table_create;
-	rte_ip_frag_table_del_expired_entries;
-	rte_ip_frag_table_destroy;
-	rte_ip_frag_table_statistics_dump;
-	rte_ipv4_frag_reassemble_packet;
-	rte_ipv4_fragment_copy_nonseg_packet;
-	rte_ipv4_fragment_packet;
-	rte_ipv6_frag_reassemble_packet;
-	rte_ipv6_fragment_packet;
-
-	local: *;
-};
diff --git a/lib/ipsec/version.map b/lib/ipsec/version.map
deleted file mode 100644
index 47e3df5bb6..0000000000
--- a/lib/ipsec/version.map
+++ /dev/null
@@ -1,19 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_ipsec_sa_fini;
-	rte_ipsec_sa_init;
-	rte_ipsec_sa_size;
-	rte_ipsec_sa_type;
-	rte_ipsec_sad_add;
-	rte_ipsec_sad_create;
-	rte_ipsec_sad_del;
-	rte_ipsec_sad_destroy;
-	rte_ipsec_sad_find_existing;
-	rte_ipsec_sad_lookup;
-	rte_ipsec_session_prepare;
-	rte_ipsec_telemetry_sa_add;
-	rte_ipsec_telemetry_sa_del;
-
-	local: *;
-};
diff --git a/lib/jobstats/version.map b/lib/jobstats/version.map
deleted file mode 100644
index 55100e0699..0000000000
--- a/lib/jobstats/version.map
+++ /dev/null
@@ -1,20 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_jobstats_abort;
-	rte_jobstats_context_finish;
-	rte_jobstats_context_init;
-	rte_jobstats_context_reset;
-	rte_jobstats_context_start;
-	rte_jobstats_finish;
-	rte_jobstats_init;
-	rte_jobstats_reset;
-	rte_jobstats_set_max;
-	rte_jobstats_set_min;
-	rte_jobstats_set_period;
-	rte_jobstats_set_target;
-	rte_jobstats_set_update_period_function;
-	rte_jobstats_start;
-
-	local: *;
-};
diff --git a/lib/kvargs/version.map b/lib/kvargs/version.map
deleted file mode 100644
index 30995539fb..0000000000
--- a/lib/kvargs/version.map
+++ /dev/null
@@ -1,14 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_kvargs_count;
-	rte_kvargs_free;
-	rte_kvargs_get;
-	rte_kvargs_get_with_value;
-	rte_kvargs_parse;
-	rte_kvargs_parse_delim;
-	rte_kvargs_process;
-	rte_kvargs_process_opt;
-
-	local: *;
-};
diff --git a/lib/latencystats/version.map b/lib/latencystats/version.map
deleted file mode 100644
index e8806c0046..0000000000
--- a/lib/latencystats/version.map
+++ /dev/null
@@ -1,11 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_latencystats_get;
-	rte_latencystats_get_names;
-	rte_latencystats_init;
-	rte_latencystats_uninit;
-	rte_latencystats_update;
-
-	local: *;
-};
diff --git a/lib/log/version.map b/lib/log/version.map
deleted file mode 100644
index 603be493b3..0000000000
--- a/lib/log/version.map
+++ /dev/null
@@ -1,36 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_log;
-	rte_log_can_log;
-	rte_log_cur_msg_loglevel;
-	rte_log_cur_msg_logtype;
-	rte_log_dump;
-	rte_log_get_global_level;
-	rte_log_get_level;
-	rte_log_get_stream;
-	rte_log_list_types;
-	rte_log_register;
-	rte_log_register_type_and_pick_level;
-	rte_log_set_global_level;
-	rte_log_set_level;
-	rte_log_set_level_pattern;
-	rte_log_set_level_regexp;
-	rte_openlog_stream;
-	rte_vlog;
-
-	local: *;
-};
-
-INTERNAL {
-	global:
-
-	eal_log_color;
-	eal_log_init;
-	eal_log_level2str;
-	eal_log_save_pattern;
-	eal_log_save_regexp;
-	eal_log_syslog; # WINDOWS_NO_EXPORT
-	eal_log_timestamp;
-	rte_eal_log_cleanup;
-};
diff --git a/lib/lpm/version.map b/lib/lpm/version.map
deleted file mode 100644
index 29d577c24b..0000000000
--- a/lib/lpm/version.map
+++ /dev/null
@@ -1,24 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_lpm6_add;
-	rte_lpm6_create;
-	rte_lpm6_delete;
-	rte_lpm6_delete_all;
-	rte_lpm6_delete_bulk_func;
-	rte_lpm6_find_existing;
-	rte_lpm6_free;
-	rte_lpm6_is_rule_present;
-	rte_lpm6_lookup;
-	rte_lpm6_lookup_bulk_func;
-	rte_lpm_add;
-	rte_lpm_create;
-	rte_lpm_delete;
-	rte_lpm_delete_all;
-	rte_lpm_find_existing;
-	rte_lpm_free;
-	rte_lpm_is_rule_present;
-	rte_lpm_rcu_qsbr_add;
-
-	local: *;
-};
diff --git a/lib/mbuf/version.map b/lib/mbuf/version.map
deleted file mode 100644
index 76f1832924..0000000000
--- a/lib/mbuf/version.map
+++ /dev/null
@@ -1,45 +0,0 @@
-DPDK_25 {
-	global:
-
-	__rte_pktmbuf_linearize;
-	__rte_pktmbuf_read;
-	rte_get_ptype_inner_l2_name;
-	rte_get_ptype_inner_l3_name;
-	rte_get_ptype_inner_l4_name;
-	rte_get_ptype_l2_name;
-	rte_get_ptype_l3_name;
-	rte_get_ptype_l4_name;
-	rte_get_ptype_name;
-	rte_get_ptype_tunnel_name;
-	rte_get_rx_ol_flag_list;
-	rte_get_rx_ol_flag_name;
-	rte_get_tx_ol_flag_list;
-	rte_get_tx_ol_flag_name;
-	rte_mbuf_best_mempool_ops;
-	rte_mbuf_check;
-	rte_mbuf_dyn_dump;
-	rte_mbuf_dyn_rx_timestamp_register;
-	rte_mbuf_dyn_tx_timestamp_register;
-	rte_mbuf_dynfield_lookup;
-	rte_mbuf_dynfield_register;
-	rte_mbuf_dynfield_register_offset;
-	rte_mbuf_dynflag_lookup;
-	rte_mbuf_dynflag_register;
-	rte_mbuf_dynflag_register_bitnum;
-	rte_mbuf_platform_mempool_ops;
-	rte_mbuf_sanity_check;
-	rte_mbuf_set_platform_mempool_ops;
-	rte_mbuf_set_user_mempool_ops;
-	rte_mbuf_user_mempool_ops;
-	rte_pktmbuf_clone;
-	rte_pktmbuf_copy;
-	rte_pktmbuf_dump;
-	rte_pktmbuf_free_bulk;
-	rte_pktmbuf_init;
-	rte_pktmbuf_pool_create;
-	rte_pktmbuf_pool_create_by_ops;
-	rte_pktmbuf_pool_create_extbuf;
-	rte_pktmbuf_pool_init;
-
-	local: *;
-};
diff --git a/lib/member/version.map b/lib/member/version.map
deleted file mode 100644
index fdc7adacf9..0000000000
--- a/lib/member/version.map
+++ /dev/null
@@ -1,19 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_member_add;
-	rte_member_add_byte_count;
-	rte_member_create;
-	rte_member_delete;
-	rte_member_find_existing;
-	rte_member_free;
-	rte_member_lookup;
-	rte_member_lookup_bulk;
-	rte_member_lookup_multi;
-	rte_member_lookup_multi_bulk;
-	rte_member_query_count;
-	rte_member_report_heavyhitter;
-	rte_member_reset;
-
-	local: *;
-};
diff --git a/lib/mempool/version.map b/lib/mempool/version.map
deleted file mode 100644
index 6f16d417ae..0000000000
--- a/lib/mempool/version.map
+++ /dev/null
@@ -1,65 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_mempool_audit;
-	rte_mempool_avail_count;
-	rte_mempool_cache_create;
-	rte_mempool_cache_free;
-	rte_mempool_calc_obj_size;
-	rte_mempool_check_cookies;
-	rte_mempool_contig_blocks_check_cookies;
-	rte_mempool_create;
-	rte_mempool_create_empty;
-	rte_mempool_dump;
-	rte_mempool_free;
-	rte_mempool_get_page_size;
-	rte_mempool_in_use_count;
-	rte_mempool_list_dump;
-	rte_mempool_logtype;
-	rte_mempool_lookup;
-	rte_mempool_mem_iter;
-	rte_mempool_obj_iter;
-	rte_mempool_op_calc_mem_size_default;
-	rte_mempool_op_calc_mem_size_helper;
-	rte_mempool_op_populate_default;
-	rte_mempool_op_populate_helper;
-	rte_mempool_ops_get_info;
-	rte_mempool_ops_table;
-	rte_mempool_populate_anon;
-	rte_mempool_populate_default;
-	rte_mempool_populate_iova;
-	rte_mempool_populate_virt;
-	rte_mempool_register_ops;
-	rte_mempool_set_ops_byname;
-	rte_mempool_walk;
-
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 20.05
-	__rte_mempool_trace_ops_dequeue_bulk;
-	__rte_mempool_trace_ops_dequeue_contig_blocks;
-	__rte_mempool_trace_ops_enqueue_bulk;
-	__rte_mempool_trace_generic_put;
-	__rte_mempool_trace_put_bulk;
-	__rte_mempool_trace_generic_get;
-	__rte_mempool_trace_get_bulk;
-	__rte_mempool_trace_get_contig_blocks;
-	__rte_mempool_trace_default_cache;
-	__rte_mempool_trace_cache_flush;
-
-	# added in 24.07
-	rte_mempool_get_mem_range;
-	rte_mempool_get_obj_alignment;
-};
-
-INTERNAL {
-	global:
-
-	# added in 21.11
-	rte_mempool_event_callback_register;
-	rte_mempool_event_callback_unregister;
-};
diff --git a/lib/meter/version.map b/lib/meter/version.map
deleted file mode 100644
index ae434f34b5..0000000000
--- a/lib/meter/version.map
+++ /dev/null
@@ -1,12 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_meter_srtcm_config;
-	rte_meter_srtcm_profile_config;
-	rte_meter_trtcm_config;
-	rte_meter_trtcm_profile_config;
-	rte_meter_trtcm_rfc4115_config;
-	rte_meter_trtcm_rfc4115_profile_config;
-
-	local: *;
-};
diff --git a/lib/metrics/version.map b/lib/metrics/version.map
deleted file mode 100644
index f9c1996a7d..0000000000
--- a/lib/metrics/version.map
+++ /dev/null
@@ -1,26 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_metrics_deinit;
-	rte_metrics_get_names;
-	rte_metrics_get_values;
-	rte_metrics_init;
-	rte_metrics_reg_name;
-	rte_metrics_reg_names;
-	rte_metrics_update_value;
-	rte_metrics_update_values;
-
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 20.05
-	rte_metrics_tel_encode_json_format;
-	rte_metrics_tel_reg_all_ethdev;
-	rte_metrics_tel_get_global_stats;
-	rte_metrics_tel_get_port_stats_ids;
-	rte_metrics_tel_get_ports_stats_json;
-	rte_metrics_tel_extract_data;
-};
diff --git a/lib/mldev/version.map b/lib/mldev/version.map
deleted file mode 100644
index d9aa831b3d..0000000000
--- a/lib/mldev/version.map
+++ /dev/null
@@ -1,74 +0,0 @@
-EXPERIMENTAL {
-	global:
-
-	# added in 22.11
-	rte_ml_dequeue_burst;
-	rte_ml_dev_close;
-	rte_ml_dev_configure;
-	rte_ml_dev_count;
-	rte_ml_dev_dump;
-	rte_ml_dev_info_get;
-	rte_ml_dev_init;
-	rte_ml_dev_is_valid_dev;
-	rte_ml_dev_logtype;
-	rte_ml_dev_queue_pair_count;
-	rte_ml_dev_queue_pair_setup;
-	rte_ml_dev_selftest;
-	rte_ml_dev_socket_id;
-	rte_ml_dev_start;
-	rte_ml_dev_stats_get;
-	rte_ml_dev_stats_reset;
-	rte_ml_dev_stop;
-	rte_ml_dev_xstats_by_name_get;
-	rte_ml_dev_xstats_get;
-	rte_ml_dev_xstats_names_get;
-	rte_ml_dev_xstats_reset;
-	rte_ml_enqueue_burst;
-	rte_ml_io_float32_to_int8;
-	rte_ml_io_int8_to_float32;
-	rte_ml_io_float32_to_uint8;
-	rte_ml_io_uint8_to_float32;
-	rte_ml_io_float32_to_int16;
-	rte_ml_io_int16_to_float32;
-	rte_ml_io_float32_to_uint16;
-	rte_ml_io_uint16_to_float32;
-	rte_ml_io_float32_to_int32;
-	rte_ml_io_int32_to_float32;
-	rte_ml_io_float32_to_uint32;
-	rte_ml_io_uint32_to_float32;
-	rte_ml_io_float32_to_int64;
-	rte_ml_io_int64_to_float32;
-	rte_ml_io_float32_to_uint64;
-	rte_ml_io_uint64_to_float32;
-	rte_ml_io_float32_to_float16;
-	rte_ml_io_float16_to_float32;
-	rte_ml_io_float32_to_bfloat16;
-	rte_ml_io_bfloat16_to_float32;
-	rte_ml_io_dequantize;
-	rte_ml_io_quantize;
-	rte_ml_model_info_get;
-	rte_ml_model_load;
-	rte_ml_model_params_update;
-	rte_ml_model_start;
-	rte_ml_model_stop;
-	rte_ml_model_unload;
-	rte_ml_op_error_get;
-	rte_ml_op_pool_create;
-	rte_ml_op_pool_free;
-
-	local: *;
-};
-
-INTERNAL {
-	global:
-
-	rte_ml_dev_pmd_allocate;
-	rte_ml_dev_pmd_create;
-	rte_ml_dev_pmd_destroy;
-	rte_ml_dev_pmd_get_dev;
-	rte_ml_dev_pmd_get_named_dev;
-	rte_ml_dev_pmd_release;
-
-	rte_ml_io_type_size_get;
-	rte_ml_io_type_to_str;
-};
diff --git a/lib/net/version.map b/lib/net/version.map
deleted file mode 100644
index f4dd673fa3..0000000000
--- a/lib/net/version.map
+++ /dev/null
@@ -1,23 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_eth_random_addr;
-	rte_ether_format_addr;
-	rte_ether_unformat_addr;
-	rte_net_crc_calc;
-	rte_net_crc_free;
-	rte_net_crc_set_alg;
-	rte_net_get_ptype;
-	rte_net_make_rarp_packet;
-	rte_net_skip_ip6_ext;
-
-	local: *;
-};
-
-DPDK_26 {
-	global:
-
-	rte_net_crc_calc;
-	rte_net_crc_set_alg;
-
-} DPDK_25;
diff --git a/lib/node/version.map b/lib/node/version.map
deleted file mode 100644
index a402182fbe..0000000000
--- a/lib/node/version.map
+++ /dev/null
@@ -1,25 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_node_eth_config;
-	rte_node_ip4_rewrite_add;
-	rte_node_ip4_route_add;
-
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 23.07
-	rte_node_ip6_rewrite_add;
-	rte_node_ip6_route_add;
-
-	# added in 23.11
-	rte_node_ip4_reassembly_configure;
-	rte_node_udp4_dst_port_add;
-	rte_node_udp4_usr_node_add;
-
-	# added in 24.03
-	rte_node_ethdev_rx_next_update;
-};
diff --git a/lib/pcapng/version.map b/lib/pcapng/version.map
deleted file mode 100644
index 9f634b653e..0000000000
--- a/lib/pcapng/version.map
+++ /dev/null
@@ -1,13 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_pcapng_add_interface;
-	rte_pcapng_close;
-	rte_pcapng_copy;
-	rte_pcapng_fdopen;
-	rte_pcapng_mbuf_size;
-	rte_pcapng_write_packets;
-	rte_pcapng_write_stats;
-
-	local: *;
-};
diff --git a/lib/pci/version.map b/lib/pci/version.map
deleted file mode 100644
index f0f6ffef9f..0000000000
--- a/lib/pci/version.map
+++ /dev/null
@@ -1,9 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_pci_addr_cmp;
-	rte_pci_addr_parse;
-	rte_pci_device_name;
-
-	local: *;
-};
diff --git a/lib/pdcp/version.map b/lib/pdcp/version.map
deleted file mode 100644
index 72b2d4729b..0000000000
--- a/lib/pdcp/version.map
+++ /dev/null
@@ -1,12 +0,0 @@
-EXPERIMENTAL {
-	global:
-
-	# added in 23.07
-	rte_pdcp_control_pdu_create;
-	rte_pdcp_entity_establish;
-	rte_pdcp_entity_release;
-	rte_pdcp_entity_suspend;
-	rte_pdcp_t_reordering_expiry_handle;
-
-	local: *;
-};
diff --git a/lib/pdump/version.map b/lib/pdump/version.map
deleted file mode 100644
index 6eea4c1530..0000000000
--- a/lib/pdump/version.map
+++ /dev/null
@@ -1,15 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_pdump_disable;
-	rte_pdump_disable_by_deviceid;
-	rte_pdump_enable;
-	rte_pdump_enable_bpf;
-	rte_pdump_enable_bpf_by_deviceid;
-	rte_pdump_enable_by_deviceid;
-	rte_pdump_init;
-	rte_pdump_stats;
-	rte_pdump_uninit;
-
-	local: *;
-};
diff --git a/lib/pipeline/version.map b/lib/pipeline/version.map
deleted file mode 100644
index b56d022664..0000000000
--- a/lib/pipeline/version.map
+++ /dev/null
@@ -1,172 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_pipeline_ah_packet_drop;
-	rte_pipeline_ah_packet_hijack;
-	rte_pipeline_check;
-	rte_pipeline_create;
-	rte_pipeline_flush;
-	rte_pipeline_free;
-	rte_pipeline_port_in_connect_to_table;
-	rte_pipeline_port_in_create;
-	rte_pipeline_port_in_disable;
-	rte_pipeline_port_in_enable;
-	rte_pipeline_port_in_stats_read;
-	rte_pipeline_port_out_create;
-	rte_pipeline_port_out_packet_insert;
-	rte_pipeline_port_out_stats_read;
-	rte_pipeline_run;
-	rte_pipeline_table_create;
-	rte_pipeline_table_default_entry_add;
-	rte_pipeline_table_default_entry_delete;
-	rte_pipeline_table_entry_add;
-	rte_pipeline_table_entry_add_bulk;
-	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;
-	rte_port_in_action_params_get;
-	rte_port_in_action_profile_action_register;
-	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_pipeline_abort;
-	rte_swx_ctl_pipeline_commit;
-	rte_swx_ctl_pipeline_create;
-	rte_swx_ctl_pipeline_free;
-	rte_swx_ctl_pipeline_info_get;
-	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_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_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_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_flush;
-	rte_swx_pipeline_free;
-	rte_swx_pipeline_instructions_config;
-	rte_swx_pipeline_mirroring_config;
-	rte_swx_pipeline_packet_header_register;
-	rte_swx_pipeline_packet_metadata_register;
-	rte_swx_pipeline_port_in_config;
-	rte_swx_pipeline_port_in_type_register;
-	rte_swx_pipeline_port_out_config;
-	rte_swx_pipeline_port_out_type_register;
-	rte_swx_pipeline_run;
-	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;
-
-	# 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;
-
-	# 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;
-
-	# added in 23.03
-	rte_swx_ctl_pipeline_rss_key_read;
-	rte_swx_ctl_pipeline_rss_key_size_read;
-	rte_swx_ctl_pipeline_rss_key_write;
-	rte_swx_ctl_rss_info_get;
-	rte_swx_ipsec_create;
-	rte_swx_ipsec_find;
-	rte_swx_ipsec_free;
-	rte_swx_ipsec_run;
-	rte_swx_ipsec_sa_add;
-	rte_swx_ipsec_sa_delete;
-	rte_swx_ipsec_sa_read;
-	rte_swx_pipeline_rss_config;
-};
diff --git a/lib/port/version.map b/lib/port/version.map
deleted file mode 100644
index 98fe0b08ab..0000000000
--- a/lib/port/version.map
+++ /dev/null
@@ -1,50 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_port_ethdev_reader_ops;
-	rte_port_ethdev_writer_nodrop_ops;
-	rte_port_ethdev_writer_ops;
-	rte_port_fd_reader_ops;
-	rte_port_fd_writer_nodrop_ops;
-	rte_port_fd_writer_ops;
-	rte_port_ring_multi_reader_ops;
-	rte_port_ring_multi_writer_nodrop_ops;
-	rte_port_ring_multi_writer_ops;
-	rte_port_ring_reader_ipv4_frag_ops;
-	rte_port_ring_reader_ipv6_frag_ops;
-	rte_port_ring_reader_ops;
-	rte_port_ring_writer_ipv4_ras_ops;
-	rte_port_ring_writer_ipv6_ras_ops;
-	rte_port_ring_writer_nodrop_ops;
-	rte_port_ring_writer_ops;
-	rte_port_sched_reader_ops;
-	rte_port_sched_writer_ops;
-	rte_port_sink_ops;
-	rte_port_source_ops;
-	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;
-};
diff --git a/lib/power/version.map b/lib/power/version.map
deleted file mode 100644
index 9a36046a64..0000000000
--- a/lib/power/version.map
+++ /dev/null
@@ -1,71 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_power_check_env_supported;
-	rte_power_ethdev_pmgmt_queue_disable;
-	rte_power_ethdev_pmgmt_queue_enable;
-	rte_power_exit;
-	rte_power_freq_disable_turbo;
-	rte_power_freq_down;
-	rte_power_freq_enable_turbo;
-	rte_power_freq_max;
-	rte_power_freq_min;
-	rte_power_freq_up;
-	rte_power_freqs;
-	rte_power_get_capabilities;
-	rte_power_get_env;
-	rte_power_get_freq;
-	rte_power_get_uncore_freq;
-	rte_power_init;
-	rte_power_pmd_mgmt_get_emptypoll_max;
-	rte_power_pmd_mgmt_get_pause_duration;
-	rte_power_pmd_mgmt_get_scaling_freq_max;
-	rte_power_pmd_mgmt_get_scaling_freq_min;
-	rte_power_pmd_mgmt_set_emptypoll_max;
-	rte_power_pmd_mgmt_set_pause_duration;
-	rte_power_pmd_mgmt_set_scaling_freq_max;
-	rte_power_pmd_mgmt_set_scaling_freq_min;
-	rte_power_set_env;
-	rte_power_set_freq;
-	rte_power_set_uncore_freq;
-	rte_power_turbo_status;
-	rte_power_uncore_exit;
-	rte_power_uncore_freq_max;
-	rte_power_uncore_freq_min;
-	rte_power_uncore_get_num_dies;
-	rte_power_uncore_get_num_freqs;
-	rte_power_uncore_get_num_pkgs;
-	rte_power_uncore_init;
-	rte_power_unset_env;
-
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 23.11
-	rte_power_get_uncore_env;
-	rte_power_set_uncore_env;
-	rte_power_uncore_freqs;
-	rte_power_unset_uncore_env;
-
-	# added in 24.11
-	rte_power_qos_get_cpu_resume_latency;
-	rte_power_qos_set_cpu_resume_latency;
-};
-
-INTERNAL {
-	global:
-
-	rte_power_register_cpufreq_ops;
-	rte_power_register_uncore_ops;
-	rte_power_logtype;
-	cpufreq_check_scaling_driver;
-	power_get_lcore_mapped_cpu_id;
-	power_set_governor;
-	open_core_sysfs_file;
-	read_core_sysfs_u32;
-	read_core_sysfs_s;
-	write_core_sysfs_s;
-};
diff --git a/lib/rawdev/version.map b/lib/rawdev/version.map
deleted file mode 100644
index f95d5dabae..0000000000
--- a/lib/rawdev/version.map
+++ /dev/null
@@ -1,36 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_rawdev_close;
-	rte_rawdev_configure;
-	rte_rawdev_count;
-	rte_rawdev_dequeue_buffers;
-	rte_rawdev_dump;
-	rte_rawdev_enqueue_buffers;
-	rte_rawdev_firmware_load;
-	rte_rawdev_firmware_status_get;
-	rte_rawdev_firmware_unload;
-	rte_rawdev_firmware_version_get;
-	rte_rawdev_get_attr;
-	rte_rawdev_get_dev_id;
-	rte_rawdev_info_get;
-	rte_rawdev_pmd_allocate;
-	rte_rawdev_pmd_release;
-	rte_rawdev_queue_conf_get;
-	rte_rawdev_queue_count;
-	rte_rawdev_queue_release;
-	rte_rawdev_queue_setup;
-	rte_rawdev_reset;
-	rte_rawdev_selftest;
-	rte_rawdev_set_attr;
-	rte_rawdev_socket_id;
-	rte_rawdev_start;
-	rte_rawdev_stop;
-	rte_rawdev_xstats_by_name_get;
-	rte_rawdev_xstats_get;
-	rte_rawdev_xstats_names_get;
-	rte_rawdev_xstats_reset;
-	rte_rawdevs;
-
-	local: *;
-};
diff --git a/lib/rcu/version.map b/lib/rcu/version.map
deleted file mode 100644
index d96c4c4109..0000000000
--- a/lib/rcu/version.map
+++ /dev/null
@@ -1,17 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_rcu_log_type;
-	rte_rcu_qsbr_dq_create;
-	rte_rcu_qsbr_dq_delete;
-	rte_rcu_qsbr_dq_enqueue;
-	rte_rcu_qsbr_dq_reclaim;
-	rte_rcu_qsbr_dump;
-	rte_rcu_qsbr_get_memsize;
-	rte_rcu_qsbr_init;
-	rte_rcu_qsbr_synchronize;
-	rte_rcu_qsbr_thread_register;
-	rte_rcu_qsbr_thread_unregister;
-
-	local: *;
-};
diff --git a/lib/regexdev/version.map b/lib/regexdev/version.map
deleted file mode 100644
index 713a800ca4..0000000000
--- a/lib/regexdev/version.map
+++ /dev/null
@@ -1,38 +0,0 @@
-EXPERIMENTAL {
-	global:
-
-	# added in 20.08
-	rte_regexdev_attr_get;
-	rte_regexdev_attr_set;
-	rte_regexdev_close;
-	rte_regexdev_configure;
-	rte_regexdev_count;
-	rte_regexdev_dump;
-	rte_regexdev_get_dev_id;
-	rte_regexdev_info_get;
-	rte_regexdev_queue_pair_setup;
-	rte_regexdev_rule_db_compile_activate;
-	rte_regexdev_rule_db_export;
-	rte_regexdev_rule_db_import;
-	rte_regexdev_rule_db_update;
-	rte_regexdev_selftest;
-	rte_regexdev_start;
-	rte_regexdev_stop;
-	rte_regexdev_xstats_by_name_get;
-	rte_regexdev_xstats_get;
-	rte_regexdev_xstats_names_get;
-	rte_regexdev_xstats_reset;
-
-	# added in 22.03
-	rte_regex_devices;
-	rte_regexdev_is_valid_dev;
-	rte_regexdev_logtype;
-
-	local: *;
-};
-
-INTERNAL {
-	rte_regexdev_get_device_by_name;
-	rte_regexdev_register;
-	rte_regexdev_unregister;
-};
diff --git a/lib/reorder/version.map b/lib/reorder/version.map
deleted file mode 100644
index 18e97942e1..0000000000
--- a/lib/reorder/version.map
+++ /dev/null
@@ -1,27 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_reorder_create;
-	rte_reorder_drain;
-	rte_reorder_find_existing;
-	rte_reorder_free;
-	rte_reorder_init;
-	rte_reorder_insert;
-	rte_reorder_reset;
-
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 20.11
-	rte_reorder_seqn_dynfield_offset;
-
-	# added in 23.03
-	rte_reorder_drain_up_to_seqn;
-	rte_reorder_min_seqn_set;
-
-	# added in 23.07
-	rte_reorder_memory_footprint_get;
-};
diff --git a/lib/rib/version.map b/lib/rib/version.map
deleted file mode 100644
index 145d9c2602..0000000000
--- a/lib/rib/version.map
+++ /dev/null
@@ -1,34 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_rib6_create;
-	rte_rib6_find_existing;
-	rte_rib6_free;
-	rte_rib6_get_depth;
-	rte_rib6_get_ext;
-	rte_rib6_get_ip;
-	rte_rib6_get_nh;
-	rte_rib6_get_nxt;
-	rte_rib6_insert;
-	rte_rib6_lookup;
-	rte_rib6_lookup_exact;
-	rte_rib6_lookup_parent;
-	rte_rib6_remove;
-	rte_rib6_set_nh;
-	rte_rib_create;
-	rte_rib_find_existing;
-	rte_rib_free;
-	rte_rib_get_depth;
-	rte_rib_get_ext;
-	rte_rib_get_ip;
-	rte_rib_get_nh;
-	rte_rib_get_nxt;
-	rte_rib_insert;
-	rte_rib_lookup;
-	rte_rib_lookup_exact;
-	rte_rib_lookup_parent;
-	rte_rib_remove;
-	rte_rib_set_nh;
-
-	local: *;
-};
diff --git a/lib/ring/version.map b/lib/ring/version.map
deleted file mode 100644
index eeaa95b2e9..0000000000
--- a/lib/ring/version.map
+++ /dev/null
@@ -1,42 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_ring_create;
-	rte_ring_create_elem;
-	rte_ring_dump;
-	rte_ring_free;
-	rte_ring_get_memsize;
-	rte_ring_get_memsize_elem;
-	rte_ring_init;
-	rte_ring_list_dump;
-	rte_ring_lookup;
-	rte_ring_reset;
-
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 25.03
-	rte_ring_headtail_dump;
-	rte_soring_acquire_bulk;
-	rte_soring_acquire_burst;
-	rte_soring_acquirx_bulk;
-	rte_soring_acquirx_burst;
-	rte_soring_count;
-	rte_soring_dequeue_bulk;
-	rte_soring_dequeue_burst;
-	rte_soring_dequeux_bulk;
-	rte_soring_dequeux_burst;
-	rte_soring_enqueue_bulk;
-	rte_soring_enqueue_burst;
-	rte_soring_enqueux_bulk;
-	rte_soring_enqueux_burst;
-	rte_soring_dump;
-	rte_soring_free_count;
-	rte_soring_get_memsize;
-	rte_soring_init;
-	rte_soring_release;
-	rte_soring_releasx;
-};
diff --git a/lib/sched/version.map b/lib/sched/version.map
deleted file mode 100644
index a6ca9ee1ad..0000000000
--- a/lib/sched/version.map
+++ /dev/null
@@ -1,30 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_approx;
-	rte_pie_config_init;
-	rte_pie_rt_data_init;
-	rte_red_config_init;
-	rte_red_log2_1_minus_Wq;
-	rte_red_pow2_frac_inv;
-	rte_red_rand_seed;
-	rte_red_rand_val;
-	rte_red_rt_data_init;
-	rte_sched_pipe_config;
-	rte_sched_port_config;
-	rte_sched_port_dequeue;
-	rte_sched_port_enqueue;
-	rte_sched_port_free;
-	rte_sched_port_get_memory_footprint;
-	rte_sched_port_pkt_read_color;
-	rte_sched_port_pkt_read_tree_path;
-	rte_sched_port_pkt_write;
-	rte_sched_port_subport_profile_add;
-	rte_sched_queue_read_stats;
-	rte_sched_subport_config;
-	rte_sched_subport_pipe_profile_add;
-	rte_sched_subport_read_stats;
-	rte_sched_subport_tc_ov_config;
-
-	local: *;
-};
diff --git a/lib/security/version.map b/lib/security/version.map
deleted file mode 100644
index 2a4795f31d..0000000000
--- a/lib/security/version.map
+++ /dev/null
@@ -1,37 +0,0 @@
-DPDK_25 {
-	global:
-
-	__rte_security_set_pkt_metadata;
-	rte_security_capabilities_get;
-	rte_security_capability_get;
-	rte_security_dynfield_offset;
-	rte_security_macsec_sa_create;
-	rte_security_macsec_sa_destroy;
-	rte_security_macsec_sa_stats_get;
-	rte_security_macsec_sc_create;
-	rte_security_macsec_sc_destroy;
-	rte_security_macsec_sc_stats_get;
-	rte_security_session_create;
-	rte_security_session_destroy;
-	rte_security_session_get_size;
-	rte_security_session_stats_get;
-	rte_security_session_update;
-
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 23.11
-	rte_security_inb_pkt_rx_inject;
-	rte_security_oop_dynfield_offset;
-	rte_security_rx_inject_configure;
-};
-
-INTERNAL {
-	global:
-
-	rte_security_dynfield_register;
-	rte_security_oop_dynfield_register;
-};
diff --git a/lib/stack/version.map b/lib/stack/version.map
deleted file mode 100644
index 53c7d3d1c5..0000000000
--- a/lib/stack/version.map
+++ /dev/null
@@ -1,9 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_stack_create;
-	rte_stack_free;
-	rte_stack_lookup;
-
-	local: *;
-};
diff --git a/lib/table/version.map b/lib/table/version.map
deleted file mode 100644
index 718138554e..0000000000
--- a/lib/table/version.map
+++ /dev/null
@@ -1,53 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_table_acl_ops;
-	rte_table_array_ops;
-	rte_table_hash_cuckoo_ops;
-	rte_table_hash_ext_ops;
-	rte_table_hash_key16_ext_ops;
-	rte_table_hash_key16_lru_ops;
-	rte_table_hash_key32_ext_ops;
-	rte_table_hash_key32_lru_ops;
-	rte_table_hash_key8_ext_ops;
-	rte_table_hash_key8_lru_ops;
-	rte_table_hash_lru_ops;
-	rte_table_lpm_ipv6_ops;
-	rte_table_lpm_ops;
-	rte_table_stub_ops;
-
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 20.11
-	rte_swx_table_exact_match_ops;
-	rte_swx_table_exact_match_unoptimized_ops;
-
-	# added in 21.05
-	rte_swx_table_wildcard_match_ops;
-
-	# added in 21.08
-	rte_swx_table_selector_create;
-	rte_swx_table_selector_footprint_get;
-	rte_swx_table_selector_free;
-	rte_swx_table_selector_group_set;
-	rte_swx_table_selector_mailbox_size_get;
-	rte_swx_table_selector_select;
-
-	# added in 21.11
-	rte_swx_table_learner_add;
-	rte_swx_table_learner_create;
-	rte_swx_table_learner_delete;
-	rte_swx_table_learner_footprint_get;
-	rte_swx_table_learner_free;
-	rte_swx_table_learner_lookup;
-	rte_swx_table_learner_mailbox_size_get;
-
-	# added in 22.07
-	rte_swx_table_learner_rearm;
-	rte_swx_table_learner_rearm_new;
-	rte_swx_table_learner_timeout_update;
-};
diff --git a/lib/telemetry/version.map b/lib/telemetry/version.map
deleted file mode 100644
index 8f032bf532..0000000000
--- a/lib/telemetry/version.map
+++ /dev/null
@@ -1,40 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_tel_data_add_array_container;
-	rte_tel_data_add_array_int;
-	rte_tel_data_add_array_string;
-	rte_tel_data_add_array_u64;
-	rte_tel_data_add_array_uint;
-	rte_tel_data_add_dict_container;
-	rte_tel_data_add_dict_int;
-	rte_tel_data_add_dict_string;
-	rte_tel_data_add_dict_u64;
-	rte_tel_data_add_dict_uint;
-	rte_tel_data_alloc;
-	rte_tel_data_free;
-	rte_tel_data_start_array;
-	rte_tel_data_start_dict;
-	rte_tel_data_string;
-	rte_telemetry_register_cmd;
-
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 23.03
-	rte_tel_data_add_array_uint_hex;
-	rte_tel_data_add_dict_uint_hex;
-
-	# added in 24.11
-	rte_telemetry_register_cmd_arg;
-
-	local: *;
-};
-
-INTERNAL {
-	rte_telemetry_legacy_register;
-	rte_telemetry_init;
-};
diff --git a/lib/timer/version.map b/lib/timer/version.map
deleted file mode 100644
index 3f19be22d3..0000000000
--- a/lib/timer/version.map
+++ /dev/null
@@ -1,24 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_timer_alt_dump_stats;
-	rte_timer_alt_manage;
-	rte_timer_alt_reset;
-	rte_timer_alt_stop;
-	rte_timer_data_alloc;
-	rte_timer_data_dealloc;
-	rte_timer_dump_stats;
-	rte_timer_init;
-	rte_timer_manage;
-	rte_timer_next_ticks;
-	rte_timer_pending;
-	rte_timer_reset;
-	rte_timer_reset_sync;
-	rte_timer_stop;
-	rte_timer_stop_all;
-	rte_timer_stop_sync;
-	rte_timer_subsystem_finalize;
-	rte_timer_subsystem_init;
-
-	local: *;
-};
diff --git a/lib/vhost/version.map b/lib/vhost/version.map
deleted file mode 100644
index c044bb714e..0000000000
--- a/lib/vhost/version.map
+++ /dev/null
@@ -1,110 +0,0 @@
-DPDK_25 {
-	global:
-
-	rte_vdpa_find_device_by_name;
-	rte_vdpa_get_features;
-	rte_vdpa_get_protocol_features;
-	rte_vdpa_get_queue_num;
-	rte_vdpa_get_rte_device;
-	rte_vdpa_get_stats;
-	rte_vdpa_get_stats_names;
-	rte_vdpa_reset_stats;
-	rte_vhost_avail_entries;
-	rte_vhost_backend_config_change;
-	rte_vhost_clr_inflight_desc_packed;
-	rte_vhost_clr_inflight_desc_split;
-	rte_vhost_crypto_create;
-	rte_vhost_crypto_driver_start;
-	rte_vhost_crypto_fetch_requests;
-	rte_vhost_crypto_finalize_requests;
-	rte_vhost_crypto_free;
-	rte_vhost_crypto_set_zero_copy;
-	rte_vhost_dequeue_burst;
-	rte_vhost_driver_attach_vdpa_device;
-	rte_vhost_driver_callback_register;
-	rte_vhost_driver_detach_vdpa_device;
-	rte_vhost_driver_disable_features;
-	rte_vhost_driver_enable_features;
-	rte_vhost_driver_get_features;
-	rte_vhost_driver_get_protocol_features;
-	rte_vhost_driver_get_queue_num;
-	rte_vhost_driver_get_vdpa_dev_type;
-	rte_vhost_driver_get_vdpa_device;
-	rte_vhost_driver_register;
-	rte_vhost_driver_set_features;
-	rte_vhost_driver_set_max_queue_num;
-	rte_vhost_driver_set_protocol_features;
-	rte_vhost_driver_start;
-	rte_vhost_driver_unregister;
-	rte_vhost_enable_guest_notification;
-	rte_vhost_enqueue_burst;
-	rte_vhost_extern_callback_register;
-	rte_vhost_get_ifname;
-	rte_vhost_get_log_base;
-	rte_vhost_get_mem_table;
-	rte_vhost_get_monitor_addr;
-	rte_vhost_get_mtu;
-	rte_vhost_get_negotiated_features;
-	rte_vhost_get_negotiated_protocol_features;
-	rte_vhost_get_numa_node;
-	rte_vhost_get_vdpa_device;
-	rte_vhost_get_vhost_ring_inflight;
-	rte_vhost_get_vhost_vring;
-	rte_vhost_get_vring_base;
-	rte_vhost_get_vring_base_from_inflight;
-	rte_vhost_get_vring_num;
-	rte_vhost_log_used_vring;
-	rte_vhost_log_write;
-	rte_vhost_rx_queue_count;
-	rte_vhost_set_inflight_desc_packed;
-	rte_vhost_set_inflight_desc_split;
-	rte_vhost_set_last_inflight_io_packed;
-	rte_vhost_set_last_inflight_io_split;
-	rte_vhost_set_vring_base;
-	rte_vhost_vring_call;
-	rte_vhost_vring_call_nonblock;
-	rte_vhost_vring_stats_get;
-	rte_vhost_vring_stats_get_names;
-	rte_vhost_vring_stats_reset;
-
-	local: *;
-};
-
-EXPERIMENTAL {
-	global:
-
-	# added in 20.08
-	rte_vhost_async_channel_register;
-	rte_vhost_async_channel_unregister;
-	rte_vhost_submit_enqueue_burst;
-	rte_vhost_poll_enqueue_completed;
-
-	# added in 21.08
-	rte_vhost_async_get_inflight;
-	rte_vhost_async_channel_register_thread_unsafe;
-	rte_vhost_async_channel_unregister_thread_unsafe;
-	rte_vhost_clear_queue_thread_unsafe;
-
-	# added in 22.03
-	rte_vhost_async_dma_configure;
-
-	# added in 22.07
-	rte_vhost_async_get_inflight_thread_unsafe;
-	rte_vhost_async_try_dequeue_burst;
-	rte_vhost_clear_queue;
-
-	# added in 22.11
-	rte_vhost_async_dma_unconfigure;
-
-	# added in 23.07
-	rte_vhost_notify_guest;
-};
-
-INTERNAL {
-	global:
-
-	rte_vdpa_register_device;
-	rte_vdpa_relay_vring_used;
-	rte_vdpa_unregister_device;
-	rte_vhost_host_notifier_ctrl;
-};
-- 
2.48.1


^ permalink raw reply	[flat|nested] 17+ messages in thread

* RE: [RFC v3 0/8] Symbol versioning and export rework
  2025-03-11  9:55 ` [RFC v3 0/8] Symbol versioning and export rework David Marchand
                     ` (7 preceding siblings ...)
  2025-03-11  9:56   ` [RFC v3 8/8] build: remove static " David Marchand
@ 2025-03-11 10:18   ` Morten Brørup
  2025-03-11 13:43     ` David Marchand
  8 siblings, 1 reply; 17+ messages in thread
From: Morten Brørup @ 2025-03-11 10:18 UTC (permalink / raw)
  To: David Marchand, dev; +Cc: thomas, bruce.richardson, andremue

> From: David Marchand [mailto:david.marchand@redhat.com]
> Sent: Tuesday, 11 March 2025 10.56
> 
> So far, each DPDK library (or driver) exposing symbols in an ABI had to
> maintain a version.map and use some macros for symbol versioning,
> specially crafted with the GNU linker in mind.
> 
> This series proposes to rework the whole principle, and instead rely on
> marking the symbol exports in the source code itself, then let it to
> the
> build framework to produce a version script adapted to the linker in
> use
> (think GNU linker vs MSVC linker).
> 
> This greatly simplifies versioning symbols: a developer does not need
> to
> know anything about version.map, or that a versioned symbol must be
> renamed with _v26, annotated with __vsym, exported in a header etc...
> 
> Checking symbol maps becomes unnecessary since generated by the build
> framework.
> 
> Updating to a new ABI is just a matter of bumping the value in
> ABI_VERSION.
> 
> 
> Comments please.

Excellent. I'm all for automating this!

Feature creep:

Have you thought about how this (or related automation) can possibly also benefit the CI, e.g. for ABI breakage testing?

Or possible benefits to (automated) documentation of versioned functions?
Or possible benefits to remembering all versioned ABIs when writing the release notes?


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [RFC v3 0/8] Symbol versioning and export rework
  2025-03-11 10:18   ` [RFC v3 0/8] Symbol versioning and export rework Morten Brørup
@ 2025-03-11 13:43     ` David Marchand
  0 siblings, 0 replies; 17+ messages in thread
From: David Marchand @ 2025-03-11 13:43 UTC (permalink / raw)
  To: Morten Brørup; +Cc: dev, thomas, bruce.richardson, andremue

On Tue, Mar 11, 2025 at 11:18 AM Morten Brørup <mb@smartsharesystems.com> wrote:
>
> > From: David Marchand [mailto:david.marchand@redhat.com]
> > Sent: Tuesday, 11 March 2025 10.56
> >
> > So far, each DPDK library (or driver) exposing symbols in an ABI had to
> > maintain a version.map and use some macros for symbol versioning,
> > specially crafted with the GNU linker in mind.
> >
> > This series proposes to rework the whole principle, and instead rely on
> > marking the symbol exports in the source code itself, then let it to
> > the
> > build framework to produce a version script adapted to the linker in
> > use
> > (think GNU linker vs MSVC linker).
> >
> > This greatly simplifies versioning symbols: a developer does not need
> > to
> > know anything about version.map, or that a versioned symbol must be
> > renamed with _v26, annotated with __vsym, exported in a header etc...
> >
> > Checking symbol maps becomes unnecessary since generated by the build
> > framework.
> >
> > Updating to a new ABI is just a matter of bumping the value in
> > ABI_VERSION.
> >
> >
> > Comments please.
>
> Excellent. I'm all for automating this!
>
> Feature creep:
>
> Have you thought about how this (or related automation) can possibly also benefit the CI, e.g. for ABI breakage testing?
>
> Or possible benefits to (automated) documentation of versioned functions?
> Or possible benefits to remembering all versioned ABIs when writing the release notes?

Not really, this series is already touching enough code and needs in
detail reviews.
A simple ack is pointless.

I prefer focusing on just making this part right.


-- 
David Marchand


^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2025-03-11 13:43 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-03-05 21:23 [RFC] eal: add new function versioning macros David Marchand
2025-03-06  2:57 ` Patrick Robb
2025-03-06 10:23 ` Bruce Richardson
2025-03-06 12:50 ` [RFC v2 1/2] " David Marchand
2025-03-06 12:50   ` [RFC v2 2/2] build: generate symbol maps David Marchand
2025-03-06 15:45   ` [RFC v2 1/2] eal: add new function versioning macros Andre Muezerie
2025-03-11  9:55 ` [RFC v3 0/8] Symbol versioning and export rework David Marchand
2025-03-11  9:55   ` [RFC v3 1/8] lib: remove incorrect exported symbols David Marchand
2025-03-11  9:56   ` [RFC v3 2/8] drivers: " David Marchand
2025-03-11  9:56   ` [RFC v3 3/8] eal: rework function versioning macros David Marchand
2025-03-11  9:56   ` [RFC v3 4/8] buildtools: display version when listing symbols David Marchand
2025-03-11  9:56   ` [RFC v3 5/8] build: generate symbol maps David Marchand
2025-03-11  9:56   ` [RFC v3 6/8] build: mark exported symbols David Marchand
2025-03-11  9:56   ` [RFC v3 7/8] build: use dynamically generated version maps David Marchand
2025-03-11  9:56   ` [RFC v3 8/8] build: remove static " David Marchand
2025-03-11 10:18   ` [RFC v3 0/8] Symbol versioning and export rework Morten Brørup
2025-03-11 13:43     ` David Marchand

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).