DPDK patches and discussions
 help / color / mirror / Atom feed
From: David Marchand <david.marchand@redhat.com>
To: dev@dpdk.org
Cc: thomas@monjalon.net, bruce.richardson@intel.com,
	andremue@linux.microsoft.com,
	"Nicolas Chautru" <nicolas.chautru@intel.com>,
	"Parav Pandit" <parav@nvidia.com>,
	"Xueming Li" <xuemingl@nvidia.com>,
	"Nipun Gupta" <nipun.gupta@amd.com>,
	"Nikhil Agarwal" <nikhil.agarwal@amd.com>,
	"Hemant Agrawal" <hemant.agrawal@nxp.com>,
	"Sachin Saxena" <sachin.saxena@nxp.com>,
	"Rosen Xu" <rosen.xu@intel.com>,
	"Chenbo Xia" <chenbox@nvidia.com>,
	"Tomasz Duszynski" <tduszynski@marvell.com>,
	"Chengwen Feng" <fengchengwen@huawei.com>,
	"Long Li" <longli@microsoft.com>, "Wei Hu" <weh@microsoft.com>,
	"Nithin Dabilpuram" <ndabilpuram@marvell.com>,
	"Kiran Kumar K" <kirankumark@marvell.com>,
	"Sunil Kumar Kori" <skori@marvell.com>,
	"Satha Rao" <skoteshwar@marvell.com>,
	"Harman Kalra" <hkalra@marvell.com>,
	"Anoob Joseph" <anoobj@marvell.com>,
	"Andrew Boyer" <andrew.boyer@amd.com>,
	"Dariusz Sosnowski" <dsosnowski@nvidia.com>,
	"Viacheslav Ovsiienko" <viacheslavo@nvidia.com>,
	"Bing Zhao" <bingz@nvidia.com>, "Ori Kam" <orika@nvidia.com>,
	"Suanming Mou" <suanmingm@nvidia.com>,
	"Matan Azrad" <matan@nvidia.com>,
	"Liron Himi" <lironh@marvell.com>,
	"Chaoyong He" <chaoyong.he@corigine.com>,
	"Nagadheeraj Rottela" <rnagadheeraj@marvell.com>,
	"Srikanth Jampala" <jsrikanth@marvell.com>,
	"Andrew Rybchenko" <andrew.rybchenko@oktetlabs.ru>,
	"Ankur Dwivedi" <adwivedi@marvell.com>,
	"Tejasree Kondoj" <ktejasree@marvell.com>,
	"Gagandeep Singh" <g.singh@nxp.com>, "Kai Ji" <kai.ji@intel.com>,
	"Vamsi Attunuru" <vattunuru@marvell.com>,
	"Pavan Nikhilesh" <pbhagavatula@marvell.com>,
	"Shijith Thotton" <sthotton@marvell.com>,
	"Pravin Pathak" <pravin.pathak@intel.com>,
	"Ashwin Sekhar T K" <asekhar@marvell.com>,
	"Igor Russkikh" <irusskikh@marvell.com>,
	"Ajit Khaparde" <ajit.khaparde@broadcom.com>,
	"Somnath Kotur" <somnath.kotur@broadcom.com>,
	"Chas Williams" <chas3@att.com>,
	"Min Hu (Connor)" <humin29@huawei.com>,
	"Ian Stokes" <ian.stokes@intel.com>,
	"Vladimir Medvedkin" <vladimir.medvedkin@intel.com>,
	"Anatoly Burakov" <anatoly.burakov@intel.com>,
	"Jingjing Wu" <jingjing.wu@intel.com>,
	"Praveen Shetty" <praveen.shetty@intel.com>,
	"Cristian Dumitrescu" <cristian.dumitrescu@intel.com>,
	"Maxime Coquelin" <maxime.coquelin@redhat.com>,
	"David Hunt" <david.hunt@intel.com>,
	"Sivaprasad Tummala" <sivaprasad.tummala@amd.com>,
	"Akhil Goyal" <gakhil@marvell.com>,
	"Konstantin Ananyev" <konstantin.v.ananyev@yandex.ru>,
	"Fan Zhang" <fanzhang.oss@gmail.com>,
	"Ashish Gupta" <ashish.gupta@marvell.com>,
	"Mattias Rönnblom" <mattias.ronnblom@ericsson.com>,
	"Kevin Laatz" <kevin.laatz@intel.com>,
	"Wathsala Vithanage" <wathsala.vithanage@arm.com>,
	"Tyler Retzlaff" <roretzla@linux.microsoft.com>,
	"Jerin Jacob" <jerinj@marvell.com>,
	"Harry van Haaren" <harry.van.haaren@intel.com>,
	"Min Zhou" <zhoumin@loongson.cn>,
	"David Christensen" <drc@linux.ibm.com>,
	"Stanislaw Kardach" <stanislaw.kardach@gmail.com>,
	"Dmitry Kozlyuk" <dmitry.kozliuk@gmail.com>,
	"Byron Marohn" <byron.marohn@intel.com>,
	"Yipeng Wang" <yipeng1.wang@intel.com>,
	"Ferruh Yigit" <ferruh.yigit@amd.com>,
	"Abhinandan Gujjar" <abhinandan.gujjar@intel.com>,
	"Amit Prakash Shukla" <amitprakashs@marvell.com>,
	"Naga Harish K S V" <s.v.naga.harish.k@intel.com>,
	"Erik Gabriel Carrillo" <erik.g.carrillo@intel.com>,
	"Elena Agostini" <eagostini@nvidia.com>,
	"Zhirun Yan" <yanzhirun_163@163.com>,
	"Jiayu Hu" <hujiayu.hu@foxmail.com>,
	"Sameh Gobriel" <sameh.gobriel@intel.com>,
	"Reshma Pattan" <reshma.pattan@intel.com>,
	"Stephen Hemminger" <stephen@networkplumber.org>,
	"Morten Brørup" <mb@smartsharesystems.com>,
	"Srikanth Yalavarthi" <syalavarthi@marvell.com>,
	"Jasvinder Singh" <jasvinder.singh@intel.com>,
	"Gaetan Rivet" <grive@u256.net>,
	"Volodymyr Fialko" <vfialko@marvell.com>,
	"Honnappa Nagarahalli" <honnappa.nagarahalli@arm.com>
Subject: [RFC v3 6/8] build: mark exported symbols
Date: Tue, 11 Mar 2025 10:56:04 +0100	[thread overview]
Message-ID: <20250311095609.194523-7-david.marchand@redhat.com> (raw)
In-Reply-To: <20250311095609.194523-1-david.marchand@redhat.com>

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


  parent reply	other threads:[~2025-03-11 10:06 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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   ` David Marchand [this message]
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

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250311095609.194523-7-david.marchand@redhat.com \
    --to=david.marchand@redhat.com \
    --cc=abhinandan.gujjar@intel.com \
    --cc=adwivedi@marvell.com \
    --cc=ajit.khaparde@broadcom.com \
    --cc=amitprakashs@marvell.com \
    --cc=anatoly.burakov@intel.com \
    --cc=andremue@linux.microsoft.com \
    --cc=andrew.boyer@amd.com \
    --cc=andrew.rybchenko@oktetlabs.ru \
    --cc=anoobj@marvell.com \
    --cc=asekhar@marvell.com \
    --cc=ashish.gupta@marvell.com \
    --cc=bingz@nvidia.com \
    --cc=bruce.richardson@intel.com \
    --cc=byron.marohn@intel.com \
    --cc=chaoyong.he@corigine.com \
    --cc=chas3@att.com \
    --cc=chenbox@nvidia.com \
    --cc=cristian.dumitrescu@intel.com \
    --cc=david.hunt@intel.com \
    --cc=dev@dpdk.org \
    --cc=dmitry.kozliuk@gmail.com \
    --cc=drc@linux.ibm.com \
    --cc=dsosnowski@nvidia.com \
    --cc=eagostini@nvidia.com \
    --cc=erik.g.carrillo@intel.com \
    --cc=fanzhang.oss@gmail.com \
    --cc=fengchengwen@huawei.com \
    --cc=ferruh.yigit@amd.com \
    --cc=g.singh@nxp.com \
    --cc=gakhil@marvell.com \
    --cc=grive@u256.net \
    --cc=harry.van.haaren@intel.com \
    --cc=hemant.agrawal@nxp.com \
    --cc=hkalra@marvell.com \
    --cc=honnappa.nagarahalli@arm.com \
    --cc=hujiayu.hu@foxmail.com \
    --cc=humin29@huawei.com \
    --cc=ian.stokes@intel.com \
    --cc=irusskikh@marvell.com \
    --cc=jasvinder.singh@intel.com \
    --cc=jerinj@marvell.com \
    --cc=jingjing.wu@intel.com \
    --cc=jsrikanth@marvell.com \
    --cc=kai.ji@intel.com \
    --cc=kevin.laatz@intel.com \
    --cc=kirankumark@marvell.com \
    --cc=konstantin.v.ananyev@yandex.ru \
    --cc=ktejasree@marvell.com \
    --cc=lironh@marvell.com \
    --cc=longli@microsoft.com \
    --cc=matan@nvidia.com \
    --cc=mattias.ronnblom@ericsson.com \
    --cc=maxime.coquelin@redhat.com \
    --cc=mb@smartsharesystems.com \
    --cc=ndabilpuram@marvell.com \
    --cc=nicolas.chautru@intel.com \
    --cc=nikhil.agarwal@amd.com \
    --cc=nipun.gupta@amd.com \
    --cc=orika@nvidia.com \
    --cc=parav@nvidia.com \
    --cc=pbhagavatula@marvell.com \
    --cc=praveen.shetty@intel.com \
    --cc=pravin.pathak@intel.com \
    --cc=reshma.pattan@intel.com \
    --cc=rnagadheeraj@marvell.com \
    --cc=roretzla@linux.microsoft.com \
    --cc=rosen.xu@intel.com \
    --cc=s.v.naga.harish.k@intel.com \
    --cc=sachin.saxena@nxp.com \
    --cc=sameh.gobriel@intel.com \
    --cc=sivaprasad.tummala@amd.com \
    --cc=skori@marvell.com \
    --cc=skoteshwar@marvell.com \
    --cc=somnath.kotur@broadcom.com \
    --cc=stanislaw.kardach@gmail.com \
    --cc=stephen@networkplumber.org \
    --cc=sthotton@marvell.com \
    --cc=suanmingm@nvidia.com \
    --cc=syalavarthi@marvell.com \
    --cc=tduszynski@marvell.com \
    --cc=thomas@monjalon.net \
    --cc=vattunuru@marvell.com \
    --cc=vfialko@marvell.com \
    --cc=viacheslavo@nvidia.com \
    --cc=vladimir.medvedkin@intel.com \
    --cc=wathsala.vithanage@arm.com \
    --cc=weh@microsoft.com \
    --cc=xuemingl@nvidia.com \
    --cc=yanzhirun_163@163.com \
    --cc=yipeng1.wang@intel.com \
    --cc=zhoumin@loongson.cn \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is 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).