[dpdk-dev,2/4] Provide initial versioning for all DPDK libraries

Message ID 1410809031-19114-3-git-send-email-nhorman@tuxdriver.com (mailing list archive)
State Superseded, archived
Headers

Commit Message

Neil Horman Sept. 15, 2014, 7:23 p.m. UTC
  Add linker version script files to each DPDK library to put a stake in the
ground from which we can start cleaning up API's

Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
CC: Thomas Monjalon <thomas.monjalon@6wind.com>
CC: "Richardson, Bruce" <bruce.richardson@intel.com>
---
 lib/librte_acl/Makefile                            |   2 +
 lib/librte_acl/rte_acl_version.map                 |  19 ++++
 lib/librte_cfgfile/Makefile                        |   2 +
 lib/librte_cfgfile/rte_cfgfile_version.map         |  14 +++
 lib/librte_cmdline/Makefile                        |   2 +
 lib/librte_cmdline/rte_cmdline_version.map         |  69 +++++++++++++
 lib/librte_distributor/Makefile                    |   2 +
 lib/librte_distributor/rte_distributor_version.map |  16 +++
 lib/librte_eal/bsdapp/eal/Makefile                 |   2 +
 lib/librte_eal/bsdapp/eal/rte_eal_version.map      |  89 +++++++++++++++++
 lib/librte_eal/linuxapp/eal/Makefile               |   2 +
 lib/librte_eal/linuxapp/eal/rte_eal_version.map    |  89 +++++++++++++++++
 lib/librte_ether/Makefile                          |   2 +
 lib/librte_ether/rte_ether_version.map             | 108 +++++++++++++++++++++
 lib/librte_hash/Makefile                           |   2 +
 lib/librte_hash/rte_hash_version.map               |  18 ++++
 lib/librte_ip_frag/Makefile                        |   2 +
 lib/librte_ip_frag/rte_ipfrag_version.map          |  14 +++
 lib/librte_ivshmem/Makefile                        |   2 +
 lib/librte_ivshmem/rte_ivshmem_version.map         |  13 +++
 lib/librte_kni/Makefile                            |   2 +
 lib/librte_kni/rte_kni_version.map                 |  19 ++++
 lib/librte_kvargs/Makefile                         |   2 +
 lib/librte_kvargs/rte_kvargs_version.map           |  10 ++
 lib/librte_lpm/Makefile                            |   2 +
 lib/librte_lpm/rte_lpm_version.map                 |  24 +++++
 lib/librte_malloc/Makefile                         |   2 +
 lib/librte_malloc/rte_malloc_version.map           |  19 ++++
 lib/librte_mbuf/Makefile                           |   2 +
 lib/librte_mbuf/rte_mbuf_version.map               |  12 +++
 lib/librte_mempool/Makefile                        |   2 +
 lib/librte_mempool/rte_mempool_version.map         |  18 ++++
 lib/librte_meter/Makefile                          |   2 +
 lib/librte_meter/rte_meter_version.map             |  13 +++
 lib/librte_pipeline/Makefile                       |   2 +
 lib/librte_pipeline/rte_pipeline_version.map       |  23 +++++
 lib/librte_pmd_bond/Makefile                       |   2 +
 lib/librte_pmd_bond/rte_eth_bond_version.map       |  20 ++++
 lib/librte_pmd_e1000/Makefile                      |   2 +
 lib/librte_pmd_e1000/rte_pmd_e1000_version.map     |   5 +
 lib/librte_pmd_i40e/Makefile                       |   2 +
 lib/librte_pmd_i40e/rte_pmd_i40e_version.map       |   5 +
 lib/librte_pmd_ixgbe/Makefile                      |   2 +
 lib/librte_pmd_ixgbe/rte_pmd_ixgbe_version.map     |   5 +
 lib/librte_pmd_pcap/Makefile                       |   2 +
 lib/librte_pmd_pcap/rte_pmd_pcap_version.map       |   5 +
 lib/librte_pmd_ring/Makefile                       |   2 +
 lib/librte_pmd_ring/rte_eth_ring.c                 |   2 +-
 lib/librte_pmd_ring/rte_eth_ring.h                 |   6 --
 lib/librte_pmd_ring/rte_eth_ring_version.map       |  10 ++
 lib/librte_pmd_virtio/Makefile                     |   1 +
 lib/librte_pmd_virtio/rte_pmd_virtio_version.map   |   5 +
 lib/librte_pmd_vmxnet3/Makefile                    |   2 +
 lib/librte_pmd_vmxnet3/rte_pmd_vmxnet3_version.map |   5 +
 lib/librte_pmd_xenvirt/Makefile                    |   2 +
 lib/librte_pmd_xenvirt/rte_eth_xenvirt_version.map |   8 ++
 lib/librte_port/Makefile                           |   2 +
 lib/librte_port/rte_port_version.map               |  18 ++++
 lib/librte_power/Makefile                          |   2 +
 lib/librte_power/rte_power_version.map             |  14 +++
 lib/librte_ring/Makefile                           |   2 +
 lib/librte_ring/rte_ring_version.map               |  12 +++
 lib/librte_sched/Makefile                          |   2 +
 lib/librte_sched/rte_sched_version.map             |  22 +++++
 lib/librte_table/Makefile                          |   2 +
 lib/librte_table/rte_table_version.map             |  22 +++++
 lib/librte_timer/Makefile                          |   2 +
 lib/librte_timer/rte_timer_version.map             |  16 +++
 68 files changed, 825 insertions(+), 7 deletions(-)
 create mode 100644 lib/librte_acl/rte_acl_version.map
 create mode 100644 lib/librte_cfgfile/rte_cfgfile_version.map
 create mode 100644 lib/librte_cmdline/rte_cmdline_version.map
 create mode 100644 lib/librte_distributor/rte_distributor_version.map
 create mode 100644 lib/librte_eal/bsdapp/eal/rte_eal_version.map
 create mode 100644 lib/librte_eal/linuxapp/eal/rte_eal_version.map
 create mode 100644 lib/librte_ether/rte_ether_version.map
 create mode 100644 lib/librte_hash/rte_hash_version.map
 create mode 100644 lib/librte_ip_frag/rte_ipfrag_version.map
 create mode 100644 lib/librte_ivshmem/rte_ivshmem_version.map
 create mode 100644 lib/librte_kni/rte_kni_version.map
 create mode 100644 lib/librte_kvargs/rte_kvargs_version.map
 create mode 100644 lib/librte_lpm/rte_lpm_version.map
 create mode 100644 lib/librte_malloc/rte_malloc_version.map
 create mode 100644 lib/librte_mbuf/rte_mbuf_version.map
 create mode 100644 lib/librte_mempool/rte_mempool_version.map
 create mode 100644 lib/librte_meter/rte_meter_version.map
 create mode 100644 lib/librte_pipeline/rte_pipeline_version.map
 create mode 100644 lib/librte_pmd_bond/rte_eth_bond_version.map
 create mode 100644 lib/librte_pmd_e1000/rte_pmd_e1000_version.map
 create mode 100644 lib/librte_pmd_i40e/rte_pmd_i40e_version.map
 create mode 100644 lib/librte_pmd_ixgbe/rte_pmd_ixgbe_version.map
 create mode 100644 lib/librte_pmd_pcap/rte_pmd_pcap_version.map
 create mode 100644 lib/librte_pmd_ring/rte_eth_ring_version.map
 create mode 100644 lib/librte_pmd_virtio/rte_pmd_virtio_version.map
 create mode 100644 lib/librte_pmd_vmxnet3/rte_pmd_vmxnet3_version.map
 create mode 100644 lib/librte_pmd_xenvirt/rte_eth_xenvirt_version.map
 create mode 100644 lib/librte_port/rte_port_version.map
 create mode 100644 lib/librte_power/rte_power_version.map
 create mode 100644 lib/librte_ring/rte_ring_version.map
 create mode 100644 lib/librte_sched/rte_sched_version.map
 create mode 100644 lib/librte_table/rte_table_version.map
 create mode 100644 lib/librte_timer/rte_timer_version.map
  

Comments

Bruce Richardson Sept. 19, 2014, 9:45 a.m. UTC | #1
On Mon, Sep 15, 2014 at 03:23:49PM -0400, Neil Horman wrote:
> Add linker version script files to each DPDK library to put a stake in the
> ground from which we can start cleaning up API's
> 
> Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
> CC: Thomas Monjalon <thomas.monjalon@6wind.com>
> CC: "Richardson, Bruce" <bruce.richardson@intel.com>
> ---
>  <... snip for brevity ...>
>
> diff --git a/lib/librte_acl/Makefile b/lib/librte_acl/Makefile
> index 65e566d..1f96645 100644
> --- a/lib/librte_acl/Makefile
> +++ b/lib/librte_acl/Makefile
> @@ -37,6 +37,8 @@ LIB = librte_acl.a
>  CFLAGS += -O3
>  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_acl/rte_acl_version.map
> +
>  # all source are stored in SRCS-y
>  SRCS-$(CONFIG_RTE_LIBRTE_ACL) += tb_mem.c
>  
> diff --git a/lib/librte_acl/rte_acl_version.map b/lib/librte_acl/rte_acl_version.map
> new file mode 100644
> index 0000000..4480690
> --- /dev/null
> +++ b/lib/librte_acl/rte_acl_version.map
> @@ -0,0 +1,19 @@
> +DPDK_1.8 {
> +	global:
> +	rte_acl_create;
> +	rte_acl_find_existing;
> +	rte_acl_free;
> +	rte_acl_add_rules;
> +	rte_acl_reset_rules;
> +	rte_acl_build;
> +	rte_acl_reset;
> +	rte_acl_classify;
> +	rte_acl_dump;
> +	rte_acl_list_dump;
> +	rte_acl_ipv4vlan_add_rules;
> +	rte_acl_ipv4vlan_build;
> +	rte_acl_classify_scalar;
> +
> +	local: *;
> +};
> +

Looking at this versionning, it strikes me that this looks like the perfect 
opportunity to go to a 2.0 version number.

My reasoning:
* We have already got fairly significant ABI and indeed API changes in this 
  release due to the mbuf rework. That allow makes it a logical point to 
  bump the Intel DPDK major version number to 2.0
* Having the API versioning start at a 2.0 looks neater than having it at 
  1.8, since .0 is a nice round version number to start with. Also if we 
  decide in the near future for whatever reasons to go to a 2.0 release, the 
  ABIs are probably still going to be 1.8. [Again, if we ever want to go to 
  2.0, now looks the perfect time]
* For the naming of the .so files, starting with them at a .2 now seems 
  reasonable to me, denoting a clean break with the older releases which did 
  have a different ABI. [Though again it makes more sense if you consider 
  that we may want to move to a 2.0 in future].

What do people think?

/Bruce
  
Neil Horman Sept. 19, 2014, 10:22 a.m. UTC | #2
On Fri, Sep 19, 2014 at 10:45:38AM +0100, Bruce Richardson wrote:
> On Mon, Sep 15, 2014 at 03:23:49PM -0400, Neil Horman wrote:
> > Add linker version script files to each DPDK library to put a stake in the
> > ground from which we can start cleaning up API's
> > 
> > Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
> > CC: Thomas Monjalon <thomas.monjalon@6wind.com>
> > CC: "Richardson, Bruce" <bruce.richardson@intel.com>
> > ---
> >  <... snip for brevity ...>
> >
> > diff --git a/lib/librte_acl/Makefile b/lib/librte_acl/Makefile
> > index 65e566d..1f96645 100644
> > --- a/lib/librte_acl/Makefile
> > +++ b/lib/librte_acl/Makefile
> > @@ -37,6 +37,8 @@ LIB = librte_acl.a
> >  CFLAGS += -O3
> >  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_acl/rte_acl_version.map
> > +
> >  # all source are stored in SRCS-y
> >  SRCS-$(CONFIG_RTE_LIBRTE_ACL) += tb_mem.c
> >  
> > diff --git a/lib/librte_acl/rte_acl_version.map b/lib/librte_acl/rte_acl_version.map
> > new file mode 100644
> > index 0000000..4480690
> > --- /dev/null
> > +++ b/lib/librte_acl/rte_acl_version.map
> > @@ -0,0 +1,19 @@
> > +DPDK_1.8 {
> > +	global:
> > +	rte_acl_create;
> > +	rte_acl_find_existing;
> > +	rte_acl_free;
> > +	rte_acl_add_rules;
> > +	rte_acl_reset_rules;
> > +	rte_acl_build;
> > +	rte_acl_reset;
> > +	rte_acl_classify;
> > +	rte_acl_dump;
> > +	rte_acl_list_dump;
> > +	rte_acl_ipv4vlan_add_rules;
> > +	rte_acl_ipv4vlan_build;
> > +	rte_acl_classify_scalar;
> > +
> > +	local: *;
> > +};
> > +
> 
> Looking at this versionning, it strikes me that this looks like the perfect 
> opportunity to go to a 2.0 version number.
> 
> My reasoning:
> * We have already got fairly significant ABI and indeed API changes in this 
>   release due to the mbuf rework. That allow makes it a logical point to 
>   bump the Intel DPDK major version number to 2.0
> * Having the API versioning start at a 2.0 looks neater than having it at 
>   1.8, since .0 is a nice round version number to start with. Also if we 
>   decide in the near future for whatever reasons to go to a 2.0 release, the 
>   ABIs are probably still going to be 1.8. [Again, if we ever want to go to 
>   2.0, now looks the perfect time]
> * For the naming of the .so files, starting with them at a .2 now seems 
>   reasonable to me, denoting a clean break with the older releases which did 
>   have a different ABI. [Though again it makes more sense if you consider 
>   that we may want to move to a 2.0 in future].
> 
> What do people think?
> 
I'm fine with it.  Just so that we're clear, this patch treats versions like
arbitrary strings (the file structure denotes version ordinality), so 1.8 vs 2.0
makes absolutely no difference as far as it goes, the exported version value is
a matter of policy, but I'm fine with making that adjustment
Neil

> /Bruce
>
  
Sergio Gonzalez Monroy Oct. 1, 2014, 11:25 a.m. UTC | #3
On Mon, Sep 15, 2014 at 03:23:49PM -0400, Neil Horman wrote:
> Add linker version script files to each DPDK library to put a stake in the
> ground from which we can start cleaning up API's
> 
> Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
> CC: Thomas Monjalon <thomas.monjalon@6wind.com>
> CC: "Richardson, Bruce" <bruce.richardson@intel.com>
> ---
>  lib/librte_acl/Makefile                            |   2 +
>  lib/librte_acl/rte_acl_version.map                 |  19 ++++
>  lib/librte_cfgfile/Makefile                        |   2 +
>  lib/librte_cfgfile/rte_cfgfile_version.map         |  14 +++
>  lib/librte_cmdline/Makefile                        |   2 +
>  lib/librte_cmdline/rte_cmdline_version.map         |  69 +++++++++++++
>  lib/librte_distributor/Makefile                    |   2 +
>  lib/librte_distributor/rte_distributor_version.map |  16 +++
>  lib/librte_eal/bsdapp/eal/Makefile                 |   2 +
>  lib/librte_eal/bsdapp/eal/rte_eal_version.map      |  89 +++++++++++++++++
>  lib/librte_eal/linuxapp/eal/Makefile               |   2 +
>  lib/librte_eal/linuxapp/eal/rte_eal_version.map    |  89 +++++++++++++++++
>  lib/librte_ether/Makefile                          |   2 +
>  lib/librte_ether/rte_ether_version.map             | 108 +++++++++++++++++++++
>  lib/librte_hash/Makefile                           |   2 +
>  lib/librte_hash/rte_hash_version.map               |  18 ++++
>  lib/librte_ip_frag/Makefile                        |   2 +
>  lib/librte_ip_frag/rte_ipfrag_version.map          |  14 +++
>  lib/librte_ivshmem/Makefile                        |   2 +
>  lib/librte_ivshmem/rte_ivshmem_version.map         |  13 +++
>  lib/librte_kni/Makefile                            |   2 +
>  lib/librte_kni/rte_kni_version.map                 |  19 ++++
>  lib/librte_kvargs/Makefile                         |   2 +
>  lib/librte_kvargs/rte_kvargs_version.map           |  10 ++
>  lib/librte_lpm/Makefile                            |   2 +
>  lib/librte_lpm/rte_lpm_version.map                 |  24 +++++
>  lib/librte_malloc/Makefile                         |   2 +
>  lib/librte_malloc/rte_malloc_version.map           |  19 ++++
>  lib/librte_mbuf/Makefile                           |   2 +
>  lib/librte_mbuf/rte_mbuf_version.map               |  12 +++
>  lib/librte_mempool/Makefile                        |   2 +
>  lib/librte_mempool/rte_mempool_version.map         |  18 ++++
>  lib/librte_meter/Makefile                          |   2 +
>  lib/librte_meter/rte_meter_version.map             |  13 +++
>  lib/librte_pipeline/Makefile                       |   2 +
>  lib/librte_pipeline/rte_pipeline_version.map       |  23 +++++
>  lib/librte_pmd_bond/Makefile                       |   2 +
>  lib/librte_pmd_bond/rte_eth_bond_version.map       |  20 ++++
>  lib/librte_pmd_e1000/Makefile                      |   2 +
>  lib/librte_pmd_e1000/rte_pmd_e1000_version.map     |   5 +
>  lib/librte_pmd_i40e/Makefile                       |   2 +
>  lib/librte_pmd_i40e/rte_pmd_i40e_version.map       |   5 +
>  lib/librte_pmd_ixgbe/Makefile                      |   2 +
>  lib/librte_pmd_ixgbe/rte_pmd_ixgbe_version.map     |   5 +
>  lib/librte_pmd_pcap/Makefile                       |   2 +
>  lib/librte_pmd_pcap/rte_pmd_pcap_version.map       |   5 +
>  lib/librte_pmd_ring/Makefile                       |   2 +
>  lib/librte_pmd_ring/rte_eth_ring.c                 |   2 +-
>  lib/librte_pmd_ring/rte_eth_ring.h                 |   6 --
>  lib/librte_pmd_ring/rte_eth_ring_version.map       |  10 ++
>  lib/librte_pmd_virtio/Makefile                     |   1 +
>  lib/librte_pmd_virtio/rte_pmd_virtio_version.map   |   5 +
>  lib/librte_pmd_vmxnet3/Makefile                    |   2 +
>  lib/librte_pmd_vmxnet3/rte_pmd_vmxnet3_version.map |   5 +
>  lib/librte_pmd_xenvirt/Makefile                    |   2 +
>  lib/librte_pmd_xenvirt/rte_eth_xenvirt_version.map |   8 ++
>  lib/librte_port/Makefile                           |   2 +
>  lib/librte_port/rte_port_version.map               |  18 ++++
>  lib/librte_power/Makefile                          |   2 +
>  lib/librte_power/rte_power_version.map             |  14 +++
>  lib/librte_ring/Makefile                           |   2 +
>  lib/librte_ring/rte_ring_version.map               |  12 +++
>  lib/librte_sched/Makefile                          |   2 +
>  lib/librte_sched/rte_sched_version.map             |  22 +++++
>  lib/librte_table/Makefile                          |   2 +
>  lib/librte_table/rte_table_version.map             |  22 +++++
>  lib/librte_timer/Makefile                          |   2 +
>  lib/librte_timer/rte_timer_version.map             |  16 +++
>  68 files changed, 825 insertions(+), 7 deletions(-)
>  create mode 100644 lib/librte_acl/rte_acl_version.map
>  create mode 100644 lib/librte_cfgfile/rte_cfgfile_version.map
>  create mode 100644 lib/librte_cmdline/rte_cmdline_version.map
>  create mode 100644 lib/librte_distributor/rte_distributor_version.map
>  create mode 100644 lib/librte_eal/bsdapp/eal/rte_eal_version.map
>  create mode 100644 lib/librte_eal/linuxapp/eal/rte_eal_version.map
>  create mode 100644 lib/librte_ether/rte_ether_version.map
>  create mode 100644 lib/librte_hash/rte_hash_version.map
>  create mode 100644 lib/librte_ip_frag/rte_ipfrag_version.map
>  create mode 100644 lib/librte_ivshmem/rte_ivshmem_version.map
>  create mode 100644 lib/librte_kni/rte_kni_version.map
>  create mode 100644 lib/librte_kvargs/rte_kvargs_version.map
>  create mode 100644 lib/librte_lpm/rte_lpm_version.map
>  create mode 100644 lib/librte_malloc/rte_malloc_version.map
>  create mode 100644 lib/librte_mbuf/rte_mbuf_version.map
>  create mode 100644 lib/librte_mempool/rte_mempool_version.map
>  create mode 100644 lib/librte_meter/rte_meter_version.map
>  create mode 100644 lib/librte_pipeline/rte_pipeline_version.map
>  create mode 100644 lib/librte_pmd_bond/rte_eth_bond_version.map
>  create mode 100644 lib/librte_pmd_e1000/rte_pmd_e1000_version.map
>  create mode 100644 lib/librte_pmd_i40e/rte_pmd_i40e_version.map
>  create mode 100644 lib/librte_pmd_ixgbe/rte_pmd_ixgbe_version.map
>  create mode 100644 lib/librte_pmd_pcap/rte_pmd_pcap_version.map
>  create mode 100644 lib/librte_pmd_ring/rte_eth_ring_version.map
>  create mode 100644 lib/librte_pmd_virtio/rte_pmd_virtio_version.map
>  create mode 100644 lib/librte_pmd_vmxnet3/rte_pmd_vmxnet3_version.map
>  create mode 100644 lib/librte_pmd_xenvirt/rte_eth_xenvirt_version.map
>  create mode 100644 lib/librte_port/rte_port_version.map
>  create mode 100644 lib/librte_power/rte_power_version.map
>  create mode 100644 lib/librte_ring/rte_ring_version.map
>  create mode 100644 lib/librte_sched/rte_sched_version.map
>  create mode 100644 lib/librte_table/rte_table_version.map
>  create mode 100644 lib/librte_timer/rte_timer_version.map
> 
> diff --git a/lib/librte_acl/Makefile b/lib/librte_acl/Makefile
> index 65e566d..1f96645 100644
> --- a/lib/librte_acl/Makefile
> +++ b/lib/librte_acl/Makefile
> @@ -37,6 +37,8 @@ LIB = librte_acl.a
>  CFLAGS += -O3
>  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_acl/rte_acl_version.map
> +
>  # all source are stored in SRCS-y
>  SRCS-$(CONFIG_RTE_LIBRTE_ACL) += tb_mem.c
>  
> diff --git a/lib/librte_acl/rte_acl_version.map b/lib/librte_acl/rte_acl_version.map
> new file mode 100644
> index 0000000..4480690
> --- /dev/null
> +++ b/lib/librte_acl/rte_acl_version.map
> @@ -0,0 +1,19 @@
> +DPDK_1.8 {
> +	global:
> +	rte_acl_create;
> +	rte_acl_find_existing;
> +	rte_acl_free;
> +	rte_acl_add_rules;
> +	rte_acl_reset_rules;
> +	rte_acl_build;
> +	rte_acl_reset;
> +	rte_acl_classify;
> +	rte_acl_dump;
> +	rte_acl_list_dump;
> +	rte_acl_ipv4vlan_add_rules;
> +	rte_acl_ipv4vlan_build;
> +	rte_acl_classify_scalar;
> +
> +	local: *;
> +};
> +
> diff --git a/lib/librte_cfgfile/Makefile b/lib/librte_cfgfile/Makefile
> index 55e8701..e655098 100644
> --- a/lib/librte_cfgfile/Makefile
> +++ b/lib/librte_cfgfile/Makefile
> @@ -39,6 +39,8 @@ LIB = librte_cfgfile.a
>  CFLAGS += -O3
>  CFLAGS += $(WERROR_FLAGS)
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_cfgfile/rte_cfgfile_version.map
> +
>  #
>  # all source are stored in SRCS-y
>  #
> diff --git a/lib/librte_cfgfile/rte_cfgfile_version.map b/lib/librte_cfgfile/rte_cfgfile_version.map
> new file mode 100644
> index 0000000..10ecea6
> --- /dev/null
> +++ b/lib/librte_cfgfile/rte_cfgfile_version.map
> @@ -0,0 +1,14 @@
> +DPDK_1.8 {
> +	global:
> +	rte_cfgfile_load;
> +	rte_cfgfile_num_sections;
> +	rte_cfgfile_sections;
> +	rte_cfgfile_has_section;
> +	rte_cfgfile_section_num_entries;
> +	rte_cfgfile_section_entries;
> +	rte_cfgfile_get_entry;
> +	rte_cfgfile_has_entry;
> +	rte_cfgfile_close;
> +
> +	local: *;
> +};
> diff --git a/lib/librte_cmdline/Makefile b/lib/librte_cmdline/Makefile
> index 7eae449..1a47173 100644
> --- a/lib/librte_cmdline/Makefile
> +++ b/lib/librte_cmdline/Makefile
> @@ -36,6 +36,8 @@ LIB = librte_cmdline.a
>  
>  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_cmdline/rte_cmdline_version.map
> +
>  # all source are stored in SRCS-y
>  SRCS-$(CONFIG_RTE_LIBRTE_CMDLINE) := cmdline.c
>  SRCS-$(CONFIG_RTE_LIBRTE_CMDLINE) += cmdline_cirbuf.c
> diff --git a/lib/librte_cmdline/rte_cmdline_version.map b/lib/librte_cmdline/rte_cmdline_version.map
> new file mode 100644
> index 0000000..7616eff
> --- /dev/null
> +++ b/lib/librte_cmdline/rte_cmdline_version.map
> @@ -0,0 +1,69 @@
> +DPDK_1.8 {
> +	global:
> +	cmdline_new;
> +	cmdline_set_prompt;
> +	cmdline_free;
> +	cmdline_printf;
> +	cmdline_in;
> +	cmdline_write_char;
> +	cmdline_interact;
> +	cmdline_quit;
> +	cmdline_parse;
> +	cmdline_complete;
> +	cmdline_isendoftoken;
> +	cmdline_parse_num;
> +	cmdline_get_help_num;
> +	cmdline_parse_ipaddr;
> +	cmdline_get_help_ipaddr;
> +	cmdline_parse_etheraddr;
> +	cmdline_get_help_etheraddr;
> +	cmdline_parse_string;
> +	cmdline_complete_get_nb_string;
> +	cmdline_complete_get_elt_string;
> +	cmdline_get_help_string;
> +	cmdline_parse_portlist;
> +	cmdline_get_help_portlist;
> +	cmdline_token_string_ops;
> +	cmdline_token_num_ops;
> +	cmdline_token_string_ops;
> +	cmdline_token_ipaddr_ops;
> +	cmdline_token_etheraddr_ops;
> +	vt100_init;
> +	vt100_parser;
> +	cmdline_file_new;
> +	cmdline_stdin_new;
> +	cmdline_stdin_exit;
> +	cirbuf_init;
> +	cirbuf_add_head_safe;
> +	cirbuf_add_head;
> +	cirbuf_add_tail_safe;
> +	cirbuf_add_tail;
> +	cirbuf_del_head_safe;
> +	cirbuf_del_head;
> +	cirbuf_del_tail_safe;
> +	cirbuf_del_tail;
> +	cirbuf_get_head;
> +	cirbuf_get_tail;
> +	cirbuf_add_buf_head;
> +	cirbuf_add_buf_tail;
> +	cirbuf_del_buf_head;
> +	cirbuf_del_buf_tail;
> +	cirbuf_get_buf_head;
> +	cirbuf_get_buf_tail;
> +	cirbuf_align_left;
> +	cirbuf_align_right;
> +	rdline_init;
> +	rdline_newline;
> +	rdline_stop;
> +	rdline_quit;
> +	rdline_restart;
> +	rdline_redisplay;
> +	rdline_reset;
> +	rdline_char_in;
> +	rdline_get_buffer;
> +	rdline_add_history;
> +	rdline_clear_history;
> +	rdline_get_history_item;
> +
> +	local: *;
> +};
> diff --git a/lib/librte_distributor/Makefile b/lib/librte_distributor/Makefile
> index 36699f8..97d8bbb 100644
> --- a/lib/librte_distributor/Makefile
> +++ b/lib/librte_distributor/Makefile
> @@ -37,6 +37,8 @@ LIB = librte_distributor.a
>  CFLAGS += -O3
>  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_distributor/rte_distributor_version.map
> +
>  # all source are stored in SRCS-y
>  SRCS-$(CONFIG_RTE_LIBRTE_DISTRIBUTOR) := rte_distributor.c
>  
> diff --git a/lib/librte_distributor/rte_distributor_version.map b/lib/librte_distributor/rte_distributor_version.map
> new file mode 100644
> index 0000000..b81ddc8
> --- /dev/null
> +++ b/lib/librte_distributor/rte_distributor_version.map
> @@ -0,0 +1,16 @@
> +DPDK_1.8 {
> +
> +	global:
> +	rte_distributor_create;
> +	rte_distributor_process;
> +	rte_distributor_returned_pkts;
> +	rte_distributor_flush;
> +	rte_distributor_clear_returns;
> +	rte_distributor_get_pkt;
> +	rte_distributor_return_pkt;
> +	rte_distributor_request_pkt;
> +	rte_distributor_poll_pkt;
> +
> +	local: *;
> +};
> +
> diff --git a/lib/librte_eal/bsdapp/eal/Makefile b/lib/librte_eal/bsdapp/eal/Makefile
> index 8f44273..2caaf00 100644
> --- a/lib/librte_eal/bsdapp/eal/Makefile
> +++ b/lib/librte_eal/bsdapp/eal/Makefile
> @@ -45,6 +45,8 @@ CFLAGS += -I$(RTE_SDK)/lib/librte_pmd_ring
>  CFLAGS += -I$(RTE_SDK)/lib/librte_pmd_pcap
>  CFLAGS += $(WERROR_FLAGS) -O3
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_eal/bsdapp/eal/rte_eal_version.map
> +
>  # specific to linuxapp exec-env
>  SRCS-$(CONFIG_RTE_LIBRTE_EAL_BSDAPP) := eal.c
>  SRCS-$(CONFIG_RTE_LIBRTE_EAL_BSDAPP) += eal_memory.c
> diff --git a/lib/librte_eal/bsdapp/eal/rte_eal_version.map b/lib/librte_eal/bsdapp/eal/rte_eal_version.map
> new file mode 100644
> index 0000000..71788e1
> --- /dev/null
> +++ b/lib/librte_eal/bsdapp/eal/rte_eal_version.map
> @@ -0,0 +1,89 @@
> +DPDK_1.8 {
> +	global:
> +	rte_eal_alarm_set;
> +	rte_eal_alarm_cancel;
> +	rte_exit;
> +	rte_cpu_get_flag_enabled;
> +	rte_cpu_check_supported;
> +	rte_get_tsc_hz;
> +	rte_get_hpet_cycles;
> +	rte_get_hpet_hz;
> +	rte_eal_hpet_init;
> +	rte_delay_us;
> +	rte_dump_stack;
> +	rte_dump_registers;
> +	__rte_panic;
> +	rte_eal_devargs_add;
> +	rte_eal_devargs_type_count;
> +	rte_eal_devargs_dump;
> +	rte_eal_driver_register;
> +	rte_eal_driver_unregister;
> +	rte_eal_dev_init;
> +	rte_eal_init;
> +	rte_set_application_usage_hook;
> +	rte_eal_has_hugepages;
> +	rte_strerror;
> +	rte_hexdump;
> +	rte_memdump;
> +	rte_intr_callback_register;
> +	rte_intr_callback_unregister;
> +	rte_intr_enable;
> +	rte_intr_disable;
> +	rte_eal_remote_launch;
> +	rte_eal_mp_remote_launch;
> +	rte_eal_get_lcore_state;
> +	rte_eal_wait_lcore;
> +	rte_eal_mp_wait_lcore;
> +	rte_openlog_stream;
> +	rte_set_log_level;
> +	rte_set_log_type;
> +	rte_log_cur_msg_loglevel;
> +	rte_log_cur_msg_logtype;
> +	rte_log_set_history;
> +	rte_log_dump_history;
> +	rte_log_add_in_history;
> +	rte_log;
> +	rte_vlog;
> +	rte_mem_lock_page;
> +	rte_mem_virt2phy;
> +	rte_eal_get_physmem_layout;
> +	rte_dump_physmem_layout;
> +	rte_eal_get_physmem_size;
> +	rte_memory_get_nchannel;
> +	rte_memory_get_nrank;
> +	rte_mem_phy2mch;
> +	rte_xen_dom0_memory_init;
> +	rte_xen_dom0_memory_attach;
> +	rte_memzone_reserve;
> +	rte_memzone_reserve_aligned;
> +	rte_memzone_reserve_bounded;
> +	rte_memzone_lookup;
> +	rte_memzone_dump;
> +	rte_memzone_walk;
> +	rte_eal_pci_probe;
> +	rte_eal_pci_dump;
> +	rte_eal_pci_register;
> +	rte_eal_pci_unregister;
> +	rte_snprintf;
> +	rte_strsplit;
> +	rte_eal_tailq_reserve;
> +	rte_eal_tailq_reserve_by_idx;
> +	rte_dump_tailq;
> +	rte_eal_tailq_lookup;
> +	rte_eal_tailq_lookup_by_idx;
> +	lcore_config;
> +	per_lcore__lcore_id;
> +	eal_timer_source;
> +	rte_cycles_vmware_tsc_map;
> +	rte_eal_get_configuration;
> +	rte_logs;
> +	rte_eal_lcore_role;
> +	test_mp_secondary;
> +	rte_eal_process_type;
> +	per_lcore__rte_errno;
> +	pci_device_list;
> +	devargs_list;
> +	eal_parse_sysfs_value;
> +
> +	local: *;
> +};
> diff --git a/lib/librte_eal/linuxapp/eal/Makefile b/lib/librte_eal/linuxapp/eal/Makefile
> index 756d6b0..254d59c 100644
> --- a/lib/librte_eal/linuxapp/eal/Makefile
> +++ b/lib/librte_eal/linuxapp/eal/Makefile
> @@ -33,6 +33,8 @@ include $(RTE_SDK)/mk/rte.vars.mk
>  
>  LIB = librte_eal.a
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_eal/linuxapp/eal/rte_eal_version.map
> +
>  VPATH += $(RTE_SDK)/lib/librte_eal/common
>  
>  CFLAGS += -I$(SRCDIR)/include
> diff --git a/lib/librte_eal/linuxapp/eal/rte_eal_version.map b/lib/librte_eal/linuxapp/eal/rte_eal_version.map
> new file mode 100644
> index 0000000..71788e1
> --- /dev/null
> +++ b/lib/librte_eal/linuxapp/eal/rte_eal_version.map
> @@ -0,0 +1,89 @@
> +DPDK_1.8 {
> +	global:
> +	rte_eal_alarm_set;
> +	rte_eal_alarm_cancel;
> +	rte_exit;
> +	rte_cpu_get_flag_enabled;
> +	rte_cpu_check_supported;
> +	rte_get_tsc_hz;
> +	rte_get_hpet_cycles;
> +	rte_get_hpet_hz;
> +	rte_eal_hpet_init;
> +	rte_delay_us;
> +	rte_dump_stack;
> +	rte_dump_registers;
> +	__rte_panic;
> +	rte_eal_devargs_add;
> +	rte_eal_devargs_type_count;
> +	rte_eal_devargs_dump;
> +	rte_eal_driver_register;
> +	rte_eal_driver_unregister;
> +	rte_eal_dev_init;
> +	rte_eal_init;
> +	rte_set_application_usage_hook;
> +	rte_eal_has_hugepages;
> +	rte_strerror;
> +	rte_hexdump;
> +	rte_memdump;
> +	rte_intr_callback_register;
> +	rte_intr_callback_unregister;
> +	rte_intr_enable;
> +	rte_intr_disable;
> +	rte_eal_remote_launch;
> +	rte_eal_mp_remote_launch;
> +	rte_eal_get_lcore_state;
> +	rte_eal_wait_lcore;
> +	rte_eal_mp_wait_lcore;
> +	rte_openlog_stream;
> +	rte_set_log_level;
> +	rte_set_log_type;
> +	rte_log_cur_msg_loglevel;
> +	rte_log_cur_msg_logtype;
> +	rte_log_set_history;
> +	rte_log_dump_history;
> +	rte_log_add_in_history;
> +	rte_log;
> +	rte_vlog;
> +	rte_mem_lock_page;
> +	rte_mem_virt2phy;
> +	rte_eal_get_physmem_layout;
> +	rte_dump_physmem_layout;
> +	rte_eal_get_physmem_size;
> +	rte_memory_get_nchannel;
> +	rte_memory_get_nrank;
> +	rte_mem_phy2mch;
> +	rte_xen_dom0_memory_init;
> +	rte_xen_dom0_memory_attach;
> +	rte_memzone_reserve;
> +	rte_memzone_reserve_aligned;
> +	rte_memzone_reserve_bounded;
> +	rte_memzone_lookup;
> +	rte_memzone_dump;
> +	rte_memzone_walk;
> +	rte_eal_pci_probe;
> +	rte_eal_pci_dump;
> +	rte_eal_pci_register;
> +	rte_eal_pci_unregister;
> +	rte_snprintf;
> +	rte_strsplit;
> +	rte_eal_tailq_reserve;
> +	rte_eal_tailq_reserve_by_idx;
> +	rte_dump_tailq;
> +	rte_eal_tailq_lookup;
> +	rte_eal_tailq_lookup_by_idx;
> +	lcore_config;
> +	per_lcore__lcore_id;
> +	eal_timer_source;
> +	rte_cycles_vmware_tsc_map;
> +	rte_eal_get_configuration;
> +	rte_logs;
> +	rte_eal_lcore_role;
> +	test_mp_secondary;
> +	rte_eal_process_type;
> +	per_lcore__rte_errno;
> +	pci_device_list;
> +	devargs_list;
> +	eal_parse_sysfs_value;
> +
> +	local: *;
> +};
> diff --git a/lib/librte_ether/Makefile b/lib/librte_ether/Makefile
> index b310f8b..f40b5cc 100644
> --- a/lib/librte_ether/Makefile
> +++ b/lib/librte_ether/Makefile
> @@ -39,6 +39,8 @@ LIB = libethdev.a
>  CFLAGS += -O3
>  CFLAGS += $(WERROR_FLAGS)
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_ether/rte_ether_version.map
> +
>  SRCS-y += rte_ethdev.c
>  
>  #
> diff --git a/lib/librte_ether/rte_ether_version.map b/lib/librte_ether/rte_ether_version.map
> new file mode 100644
> index 0000000..41952ab
> --- /dev/null
> +++ b/lib/librte_ether/rte_ether_version.map
> @@ -0,0 +1,108 @@
> +DPDK_1.8 {
> +	global:
> +	rte_eth_driver_register;
> +	rte_eth_dev_configure;
> +	rte_eth_rx_queue_setup;
> +	rte_eth_tx_queue_setup;
> +	rte_eth_dev_socket_id;
> +	rte_eth_dev_rx_queue_start;
> +	rte_eth_dev_rx_queue_stop;
> +	rte_eth_dev_tx_queue_start;
> +	rte_eth_dev_tx_queue_stop;
> +	rte_eth_dev_start;
> +	rte_eth_dev_stop;
> +	rte_eth_dev_set_link_up;
> +	rte_eth_dev_set_link_down;
> +	rte_eth_dev_close;
> +	rte_eth_promiscuous_enable;
> +	rte_eth_promiscuous_disable;
> +	rte_eth_promiscuous_get;
> +	rte_eth_allmulticast_enable;
> +	rte_eth_allmulticast_disable;
> +	rte_eth_allmulticast_get;
> +	rte_eth_link;
> +	rte_eth_link_get_nowait;
> +	rte_eth_stats;
> +	rte_eth_stats_reset;
> +	rte_eth_dev_set_tx_queue_stats_mapping;
> +	rte_eth_dev_set_rx_queue_stats_mapping;
> +	rte_eth_macaddr_get;
> +	rte_eth_dev_info_get;
> +	rte_eth_dev_get_mtu;
> +	rte_eth_dev_set_mtu;
> +	rte_eth_dev_vlan_filter;
> +	rte_eth_dev_set_vlan_strip_on_queue;
> +	rte_eth_dev_set_vlan_ether_type;
> +	rte_eth_dev_set_vlan_offload;
> +	rte_eth_dev_get_vlan_offload;
> +	rte_eth_dev_set_vlan_pvid;
> +	rte_eth_rx_burst;
> +	rte_eth_rx_queue_count;
> +	rte_eth_rx_descriptor_done;
> +	rte_eth_tx_burst;
> +	rte_eth_dev_fdir_add_signature_filter;
> +	rte_eth_dev_fdir_update_signature_filter;
> +	rte_eth_dev_fdir_remove_signature_filter;
> +	rte_eth_dev_fdir_get_infos;
> +	rte_eth_dev_fdir_add_perfect_filter;
> +	rte_eth_dev_fdir_update_perfect_filter;
> +	rte_eth_dev_fdir_remove_perfect_filter;
> +	rte_eth_dev_fdir_set_masks;
> +	rte_eth_dev_callback_register;
> +	rte_eth_dev_callback_unregister;
> +	rte_eth_dev_callback_process;
> +	rte_eth_led_on;
> +	rte_eth_led_off;
> +	rte_eth_dev_flow_ctrl_get;
> +	rte_eth_dev_flow_ctrl_set;
> +	rte_eth_dev_priority_flow_ctrl_set;
> +	rte_eth_dev_mac_addr_add;
> +	rte_eth_dev_mac_addr_remove;
> +	rte_eth_dev_rss_reta_update;
> +	rte_eth_dev_rss_reta_query;
> +	rte_eth_dev_uc_hash_table_set;
> +	rte_eth_dev_uc_all_hash_table_set;
> +	rte_eth_dev_set_vf_rxmode;
> +	rte_eth_dev_set_vf_tx;
> +	rte_eth_dev_set_vf_rx;
> +	rte_eth_dev_set_vf_vlan_filter;
> +	rte_eth_mirror_rule_set;
> +	rte_eth_mirror_rule_reset;
> +	rte_eth_set_queue_rate_limit;
> +	rte_eth_set_vf_rate_limit;
> +	rte_eth_dev_bypass_init;
> +	rte_eth_dev_bypass_state_show;
> +	rte_eth_dev_bypass_state_set;
> +	rte_eth_dev_bypass_event_show;
> +	rte_eth_dev_bypass_event_store;
> +	rte_eth_dev_wd_timeout_store;
> +	rte_eth_dev_bypass_ver_show;
> +	rte_eth_dev_bypass_wd_timeout_show;
> +	rte_eth_dev_bypass_wd_reset;
> +	rte_eth_dev_rss_hash_update;
> +	rte_eth_dev_rss_hash_conf_get;
> +	rte_eth_dev_add_syn_filter;
> +	rte_eth_dev_remove_syn_filter;
> +	rte_eth_dev_get_syn_filter;
> +	rte_eth_dev_add_ethertype_filter;
> +	rte_eth_dev_remove_ethertype_filter;
> +	rte_eth_dev_get_ethertype_filter;
> +	rte_eth_dev_add_2tuple_filter;
> +	rte_eth_dev_remove_2tuple_filter;
> +	rte_eth_dev_get_2tuple_filter;
> +	rte_eth_dev_add_5tuple_filter;
> +	rte_eth_dev_remove_5tuple_filter;
> +	rte_eth_dev_get_5tuple_filter;
> +	rte_eth_dev_add_flex_filter;
> +	rte_eth_dev_remove_flex_filter;
> +	rte_eth_dev_get_flex_filter;
> +	rte_eth_dev_count;
> +	rte_eth_link_get;
> +	rte_eth_devices;
> +	rte_eth_stats_get;
> +	rte_eth_dev_allocate;
> +	_rte_eth_dev_callback_process;
> +
> +	local: *;
> +};
> +
> diff --git a/lib/librte_hash/Makefile b/lib/librte_hash/Makefile
> index 95e4c09..a449ec2 100644
> --- a/lib/librte_hash/Makefile
> +++ b/lib/librte_hash/Makefile
> @@ -37,6 +37,8 @@ LIB = librte_hash.a
>  CFLAGS += -O3
>  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_hash/rte_hash_version.map
> +
>  # all source are stored in SRCS-y
>  SRCS-$(CONFIG_RTE_LIBRTE_HASH) := rte_hash.c
>  SRCS-$(CONFIG_RTE_LIBRTE_HASH) += rte_fbk_hash.c
> diff --git a/lib/librte_hash/rte_hash_version.map b/lib/librte_hash/rte_hash_version.map
> new file mode 100644
> index 0000000..2a34313
> --- /dev/null
> +++ b/lib/librte_hash/rte_hash_version.map
> @@ -0,0 +1,18 @@
> +DPDK_1.8 {
> +	global:
> +	rte_fbk_hash_find_existing;
> +	rte_fbk_hash_create;
> +	rte_fbk_hash_free;
> +	rte_hash_create;
> +	rte_hash_find_existing;
> +	rte_hash_free;
> +	rte_hash_add_key;
> +	rte_hash_add_key_with_hash;
> +	rte_hash_del_key;
> +	rte_hash_del_key_with_hash;
> +	rte_hash_lookup;
> +	rte_hash_lookup_with_hash;
> +	rte_hash_lookup_bulk;
> +
> +	local: *;
> +};
> diff --git a/lib/librte_ip_frag/Makefile b/lib/librte_ip_frag/Makefile
> index 2265c93..ede5a89 100644
> --- a/lib/librte_ip_frag/Makefile
> +++ b/lib/librte_ip_frag/Makefile
> @@ -37,6 +37,8 @@ LIB = librte_ip_frag.a
>  CFLAGS += -O3
>  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_ip_frag/rte_ipfrag_version.map
> +
>  #source files
>  SRCS-$(CONFIG_RTE_LIBRTE_IP_FRAG) += rte_ipv4_fragmentation.c
>  SRCS-$(CONFIG_RTE_LIBRTE_IP_FRAG) += rte_ipv4_reassembly.c
> diff --git a/lib/librte_ip_frag/rte_ipfrag_version.map b/lib/librte_ip_frag/rte_ipfrag_version.map
> new file mode 100644
> index 0000000..afe1a0b
> --- /dev/null
> +++ b/lib/librte_ip_frag/rte_ipfrag_version.map
> @@ -0,0 +1,14 @@
> +DPDK_1.8 {
> +	global:
> +
> +	rte_ip_frag_table_create;
> +	rte_ipv6_fragment_packet;
> +	rte_ipv6_frag_reassemble_packet;
> +	rte_ipv4_fragment_packet;
> +	rte_ipv4_frag_reassemble_packet;
> +	rte_ip_frag_free_death_row;
> +	rte_ip_frag_table_statistics_dump;
> +
> +	local: *;
> +};
> +
> diff --git a/lib/librte_ivshmem/Makefile b/lib/librte_ivshmem/Makefile
> index 536814c..be6f21a 100644
> --- a/lib/librte_ivshmem/Makefile
> +++ b/lib/librte_ivshmem/Makefile
> @@ -36,6 +36,8 @@ LIB = librte_ivshmem.a
>  
>  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
>  
> +EXPORT_MAPS := $(RTE_SDK)/lib/librte_ivshmem/rte_ivshmem_version.map
> +
>  # all source are stored in SRCS-y
>  SRCS-$(CONFIG_RTE_LIBRTE_IVSHMEM) := rte_ivshmem.c
>  
> diff --git a/lib/librte_ivshmem/rte_ivshmem_version.map b/lib/librte_ivshmem/rte_ivshmem_version.map
> new file mode 100644
> index 0000000..a204339
> --- /dev/null
> +++ b/lib/librte_ivshmem/rte_ivshmem_version.map
> @@ -0,0 +1,13 @@
> +DPDK_1.8 {
> +	global:
> +
> +	rte_ivshmem_metadata_create;
> +	rte_ivshmem_metadata_add_memzone;
> +	rte_ivshmem_metadata_add_ring;
> +	rte_ivshmem_metadata_add_mempool;
> +	rte_ivshmem_metadata_cmdline_generate;
> +	rte_ivshmem_metadata_dump;
> +
> +	local: *;
> +};
> +
> diff --git a/lib/librte_kni/Makefile b/lib/librte_kni/Makefile
> index 5267304..c119fc1 100644
> --- a/lib/librte_kni/Makefile
> +++ b/lib/librte_kni/Makefile
> @@ -36,6 +36,8 @@ LIB = librte_kni.a
>  
>  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3 -fno-strict-aliasing
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_kni/rte_kni_version.map
> +
>  # all source are stored in SRCS-y
>  SRCS-$(CONFIG_RTE_LIBRTE_KNI) := rte_kni.c
>  
> diff --git a/lib/librte_kni/rte_kni_version.map b/lib/librte_kni/rte_kni_version.map
> new file mode 100644
> index 0000000..58fbc1f
> --- /dev/null
> +++ b/lib/librte_kni/rte_kni_version.map
> @@ -0,0 +1,19 @@
> +DPDK_1.8 {
> +	global:
> +
> +	rte_kni_alloc;
> +	rte_kni_create;
> +	rte_kni_release;
> +	rte_kni_handle_request;
> +	rte_kni_rx_burst;
> +	rte_kni_tx_burst;
> +	rte_kni_get_port_id;
> +	rte_kni_get;
> +	rte_kni_info_get;
> +	rte_kni_register_handlers;
> +	rte_kni_unregister_handlers;
> +	rte_kni_close;
> +
> +	local: *;
> +};
> +
> diff --git a/lib/librte_kvargs/Makefile b/lib/librte_kvargs/Makefile
> index b09359a..83a42b1 100644
> --- a/lib/librte_kvargs/Makefile
> +++ b/lib/librte_kvargs/Makefile
> @@ -38,6 +38,8 @@ LIB = librte_kvargs.a
>  
>  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_kvargs/rte_kvargs_version.map
> +
>  # all source are stored in SRCS-y
>  SRCS-$(CONFIG_RTE_LIBRTE_KVARGS) := rte_kvargs.c
>  
> diff --git a/lib/librte_kvargs/rte_kvargs_version.map b/lib/librte_kvargs/rte_kvargs_version.map
> new file mode 100644
> index 0000000..7873c8c
> --- /dev/null
> +++ b/lib/librte_kvargs/rte_kvargs_version.map
> @@ -0,0 +1,10 @@
> +DPDK_1.8 {
> +
> +	global:
> +	rte_kvargs_parse;
> +	rte_kvargs_free;
> +	rte_kvargs_process;
> +	rte_kvargs_count;
> +
> +	local: *;
> +};
> diff --git a/lib/librte_lpm/Makefile b/lib/librte_lpm/Makefile
> index fa94163..05de8d9 100644
> --- a/lib/librte_lpm/Makefile
> +++ b/lib/librte_lpm/Makefile
> @@ -37,6 +37,8 @@ LIB = librte_lpm.a
>  CFLAGS += -O3
>  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_lpm/rte_lpm_version.map
> +
>  # all source are stored in SRCS-y
>  SRCS-$(CONFIG_RTE_LIBRTE_LPM) := rte_lpm.c rte_lpm6.c
>  
> diff --git a/lib/librte_lpm/rte_lpm_version.map b/lib/librte_lpm/rte_lpm_version.map
> new file mode 100644
> index 0000000..8ae9318
> --- /dev/null
> +++ b/lib/librte_lpm/rte_lpm_version.map
> @@ -0,0 +1,24 @@
> +DPDK_1.8 {
> +	global:
> +
> +	rte_lpm_create;
> +	rte_lpm_find_existing;
> +	rte_lpm_free;
> +	rte_lpm_add;
> +	rte_lpm_is_rule_present;
> +	rte_lpm_delete;
> +	rte_lpm_delete_all;
> +	rte_lpm6_create;
> +	rte_lpm6_find_existing;
> +	rte_lpm6_free;
> +	rte_lpm6_add;
> +	rte_lpm6_is_rule_present;
> +	rte_lpm6_delete;
> +	rte_lpm6_delete_bulk_func;
> +	rte_lpm6_delete_all;
> +	rte_lpm6_lookup;
> +	rte_lpm6_lookup_bulk_func;
> +
> +	local: *;
> +};
> +
> diff --git a/lib/librte_malloc/Makefile b/lib/librte_malloc/Makefile
> index ba87e34..1a5c288 100644
> --- a/lib/librte_malloc/Makefile
> +++ b/lib/librte_malloc/Makefile
> @@ -36,6 +36,8 @@ LIB = librte_malloc.a
>  
>  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_malloc/rte_malloc_version.map
> +
>  # all source are stored in SRCS-y
>  SRCS-$(CONFIG_RTE_LIBRTE_MALLOC) := rte_malloc.c malloc_elem.c malloc_heap.c
>  
> diff --git a/lib/librte_malloc/rte_malloc_version.map b/lib/librte_malloc/rte_malloc_version.map
> new file mode 100644
> index 0000000..77db879
> --- /dev/null
> +++ b/lib/librte_malloc/rte_malloc_version.map
> @@ -0,0 +1,19 @@
> +DPDK_1.8 {
> +	global:
> +
> +	rte_malloc;
> +	rte_zmalloc;
> +	rte_calloc;
> +	rte_realloc;
> +	rte_malloc_socket;
> +	rte_zmalloc_socket;
> +	rte_calloc_socket;
> +	rte_free;
> +	rte_malloc_validate;
> +	rte_malloc_get_socket_stats;
> +	rte_malloc_dump_stats;
> +	rte_malloc_set_limit;
> +	rte_malloc_virt2phy;
> +
> +	local: *;
> +};
> diff --git a/lib/librte_mbuf/Makefile b/lib/librte_mbuf/Makefile
> index 9b45ba4..5cd4941 100644
> --- a/lib/librte_mbuf/Makefile
> +++ b/lib/librte_mbuf/Makefile
> @@ -36,6 +36,8 @@ LIB = librte_mbuf.a
>  
>  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_mbuf/rte_mbuf_version.map
> +
>  # all source are stored in SRCS-y
>  SRCS-$(CONFIG_RTE_LIBRTE_MBUF) := rte_mbuf.c
>  
> diff --git a/lib/librte_mbuf/rte_mbuf_version.map b/lib/librte_mbuf/rte_mbuf_version.map
> new file mode 100644
> index 0000000..55e352b
> --- /dev/null
> +++ b/lib/librte_mbuf/rte_mbuf_version.map
> @@ -0,0 +1,12 @@
> +DPDK_1.8 {
> +	global:
> +
> +	rte_mbuf_sanity_check;
> +	rte_ctrlmbuf_init;
> +	rte_pktmbuf_init;
> +	rte_pktmbuf_pool_init;
> +	rte_pktmbuf_dump;
> +
> +	local: *;
> +};
> +
> diff --git a/lib/librte_mempool/Makefile b/lib/librte_mempool/Makefile
> index 9939e10..07b5b4e 100644
> --- a/lib/librte_mempool/Makefile
> +++ b/lib/librte_mempool/Makefile
> @@ -36,6 +36,8 @@ LIB = librte_mempool.a
>  
>  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_mempool/rte_mempool_version.map
> +
>  # all source are stored in SRCS-y
>  SRCS-$(CONFIG_RTE_LIBRTE_MEMPOOL) +=  rte_mempool.c
>  ifeq ($(CONFIG_RTE_LIBRTE_XEN_DOM0),y)
> diff --git a/lib/librte_mempool/rte_mempool_version.map b/lib/librte_mempool/rte_mempool_version.map
> new file mode 100644
> index 0000000..7a19982
> --- /dev/null
> +++ b/lib/librte_mempool/rte_mempool_version.map
> @@ -0,0 +1,18 @@
> +DPDK_1.8 {
> +	global:
> +
> +	rte_mempool_create;
> +	rte_mempool_xmem_create;
> +	rte_dom0_mempool_create;
> +	rte_mempool_dump;
> +	rte_mempool_audit;
> +	rte_mempool_list_dump;
> +	rte_mempool_lookup;
> +	rte_mempool_calc_obj_size;
> +	rte_mempool_xmem_size;
> +	rte_mempool_xmem_usage;
> +	rte_mempool_walk;
> +	rte_mempool_count;
> +
> +	local: *;
> +};
> diff --git a/lib/librte_meter/Makefile b/lib/librte_meter/Makefile
> index b25c0cc..0778690 100644
> --- a/lib/librte_meter/Makefile
> +++ b/lib/librte_meter/Makefile
> @@ -39,6 +39,8 @@ LIB = librte_meter.a
>  CFLAGS += -O3
>  CFLAGS += $(WERROR_FLAGS)
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_meter/rte_meter_version.map
> +
>  #
>  # all source are stored in SRCS-y
>  #
> diff --git a/lib/librte_meter/rte_meter_version.map b/lib/librte_meter/rte_meter_version.map
> new file mode 100644
> index 0000000..51a73b1
> --- /dev/null
> +++ b/lib/librte_meter/rte_meter_version.map
> @@ -0,0 +1,13 @@
> +DPDK_1.8 {
> +	global:
> +
> +	rte_meter_srtcm_config;
> +	rte_meter_trtcm_config;
> +	rte_meter_srtcm_color_blind_check;
> +	rte_meter_srtcm_color_aware_check;
> +	rte_meter_trtcm_color_blind_check;
> +	rte_meter_trtcm_color_aware_check;
> +
> +	local: *;
> +};
> +
> diff --git a/lib/librte_pipeline/Makefile b/lib/librte_pipeline/Makefile
> index cf8fde8..5465d00 100644
> --- a/lib/librte_pipeline/Makefile
> +++ b/lib/librte_pipeline/Makefile
> @@ -39,6 +39,8 @@ LIB = librte_pipeline.a
>  CFLAGS += -O3
>  CFLAGS += $(WERROR_FLAGS)
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_pipeline/rte_pipeline_version.map
> +
>  #
>  # all source are stored in SRCS-y
>  #
> diff --git a/lib/librte_pipeline/rte_pipeline_version.map b/lib/librte_pipeline/rte_pipeline_version.map
> new file mode 100644
> index 0000000..f868b96
> --- /dev/null
> +++ b/lib/librte_pipeline/rte_pipeline_version.map
> @@ -0,0 +1,23 @@
> +DPDK_1.8 {
> +	global:
> +
> +	rte_pipeline_create;
> +	rte_pipeline_free;
> +	rte_pipeline_check;
> +	rte_pipeline_run;
> +	rte_pipeline_flush;
> +	rte_pipeline_table_create;
> +	rte_pipeline_table_default_entry_add;
> +	rte_pipeline_table_default_entry_delete;
> +	rte_pipeline_table_entry_add;
> +	rte_pipeline_table_entry_delete;
> +	rte_pipeline_port_in_create;
> +	rte_pipeline_port_in_connect_to_table;
> +	rte_pipeline_port_in_enable;
> +	rte_pipeline_port_in_disable;
> +	rte_pipeline_port_out_create;
> +	rte_pipeline_port_out_packet_insert;
> +
> +	local: *;
> +};
> +
> diff --git a/lib/librte_pmd_bond/Makefile b/lib/librte_pmd_bond/Makefile
> index 953d75e..5b14ce2 100644
> --- a/lib/librte_pmd_bond/Makefile
> +++ b/lib/librte_pmd_bond/Makefile
> @@ -39,6 +39,8 @@ LIB = librte_pmd_bond.a
>  CFLAGS += -O3
>  CFLAGS += $(WERROR_FLAGS)
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_pmd_bond/rte_eth_bond_version.map
> +
>  #
>  # all source are stored in SRCS-y
>  #
> diff --git a/lib/librte_pmd_bond/rte_eth_bond_version.map b/lib/librte_pmd_bond/rte_eth_bond_version.map
> new file mode 100644
> index 0000000..17f0a1f
> --- /dev/null
> +++ b/lib/librte_pmd_bond/rte_eth_bond_version.map
> @@ -0,0 +1,20 @@
> +DPDK_1.8 {
> +	global:
> +
> +	rte_eth_bond_create;
> +	rte_eth_bond_slave_add;
> +	rte_eth_bond_slave_remove;
> +	rte_eth_bond_mode_set;
> +	rte_eth_bond_mode_get;
> +	rte_eth_bond_primary_set;
> +	rte_eth_bond_primary_get;
> +	rte_eth_bond_slaves_get;
> +	rte_eth_bond_active_slaves_get;
> +	rte_eth_bond_mac_address_set;
> +	rte_eth_bond_mac_address_reset;
> +	rte_eth_bond_xmit_policy_set;
> +	rte_eth_bond_xmit_policy_get;
> +
> +
> +	local: *;
> +};
> diff --git a/lib/librte_pmd_e1000/Makefile b/lib/librte_pmd_e1000/Makefile
> index 14bc4a2..e225bfe 100644
> --- a/lib/librte_pmd_e1000/Makefile
> +++ b/lib/librte_pmd_e1000/Makefile
> @@ -39,6 +39,8 @@ LIB = librte_pmd_e1000.a
>  CFLAGS += -O3
>  CFLAGS += $(WERROR_FLAGS)
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_pmd_e1000/rte_pmd_e1000_version.map
> +
>  ifeq ($(CC), icc)
>  #
>  # CFLAGS for icc
> diff --git a/lib/librte_pmd_e1000/rte_pmd_e1000_version.map b/lib/librte_pmd_e1000/rte_pmd_e1000_version.map
> new file mode 100644
> index 0000000..cbc401f
> --- /dev/null
> +++ b/lib/librte_pmd_e1000/rte_pmd_e1000_version.map
> @@ -0,0 +1,5 @@
> +DPDK_1.8 {
> +
> +	local: *;
> +};
> +
> diff --git a/lib/librte_pmd_i40e/Makefile b/lib/librte_pmd_i40e/Makefile
> index 4b31675..cfbe816 100644
> --- a/lib/librte_pmd_i40e/Makefile
> +++ b/lib/librte_pmd_i40e/Makefile
> @@ -39,6 +39,8 @@ LIB = librte_pmd_i40e.a
>  CFLAGS += -O3
>  CFLAGS += $(WERROR_FLAGS)
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_pmd_i40e/rte_pmd_i40e_version.map
> +
>  #
>  # Add extra flags for base driver files (also known as shared code)
>  # to disable warnings
> diff --git a/lib/librte_pmd_i40e/rte_pmd_i40e_version.map b/lib/librte_pmd_i40e/rte_pmd_i40e_version.map
> new file mode 100644
> index 0000000..cbc401f
> --- /dev/null
> +++ b/lib/librte_pmd_i40e/rte_pmd_i40e_version.map
> @@ -0,0 +1,5 @@
> +DPDK_1.8 {
> +
> +	local: *;
> +};
> +
> diff --git a/lib/librte_pmd_ixgbe/Makefile b/lib/librte_pmd_ixgbe/Makefile
> index 00ccedb..1dd14a6 100644
> --- a/lib/librte_pmd_ixgbe/Makefile
> +++ b/lib/librte_pmd_ixgbe/Makefile
> @@ -39,6 +39,8 @@ LIB = librte_pmd_ixgbe.a
>  CFLAGS += -O3
>  CFLAGS += $(WERROR_FLAGS)
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_pmd_ixgbe/rte_pmd_ixgbe_version.map
> +
>  ifeq ($(CC), icc)
>  #
>  # CFLAGS for icc
> diff --git a/lib/librte_pmd_ixgbe/rte_pmd_ixgbe_version.map b/lib/librte_pmd_ixgbe/rte_pmd_ixgbe_version.map
> new file mode 100644
> index 0000000..cbc401f
> --- /dev/null
> +++ b/lib/librte_pmd_ixgbe/rte_pmd_ixgbe_version.map
> @@ -0,0 +1,5 @@
> +DPDK_1.8 {
> +
> +	local: *;
> +};
> +
> diff --git a/lib/librte_pmd_pcap/Makefile b/lib/librte_pmd_pcap/Makefile
> index c5c214d..fff5572 100644
> --- a/lib/librte_pmd_pcap/Makefile
> +++ b/lib/librte_pmd_pcap/Makefile
> @@ -40,6 +40,8 @@ LIB = librte_pmd_pcap.a
>  CFLAGS += -O3
>  CFLAGS += $(WERROR_FLAGS)
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_pmd_pcap/rte_pmd_pcap_version.map
> +
>  #
>  # all source are stored in SRCS-y
>  #
> diff --git a/lib/librte_pmd_pcap/rte_pmd_pcap_version.map b/lib/librte_pmd_pcap/rte_pmd_pcap_version.map
> new file mode 100644
> index 0000000..cbc401f
> --- /dev/null
> +++ b/lib/librte_pmd_pcap/rte_pmd_pcap_version.map
> @@ -0,0 +1,5 @@
> +DPDK_1.8 {
> +
> +	local: *;
> +};
> +
> diff --git a/lib/librte_pmd_ring/Makefile b/lib/librte_pmd_ring/Makefile
> index b57e421..25ad27f 100644
> --- a/lib/librte_pmd_ring/Makefile
> +++ b/lib/librte_pmd_ring/Makefile
> @@ -39,6 +39,8 @@ LIB = librte_pmd_ring.a
>  CFLAGS += -O3
>  CFLAGS += $(WERROR_FLAGS)
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_pmd_ring/rte_eth_ring_version.map
> +
>  #
>  # all source are stored in SRCS-y
>  #
> diff --git a/lib/librte_pmd_ring/rte_eth_ring.c b/lib/librte_pmd_ring/rte_eth_ring.c
> index 4f1b6ed..df7b583 100644
> --- a/lib/librte_pmd_ring/rte_eth_ring.c
> +++ b/lib/librte_pmd_ring/rte_eth_ring.c
> @@ -473,7 +473,7 @@ out:
>  	return ret;
>  }
>  
> -int
> +static int
>  rte_pmd_ring_devinit(const char *name, const char *params)
>  {
>  	struct rte_kvargs *kvlist;
> diff --git a/lib/librte_pmd_ring/rte_eth_ring.h b/lib/librte_pmd_ring/rte_eth_ring.h
> index e6ae19e..d36489a 100644
> --- a/lib/librte_pmd_ring/rte_eth_ring.h
> +++ b/lib/librte_pmd_ring/rte_eth_ring.h
> @@ -50,12 +50,6 @@ int rte_eth_from_rings(const char *name,
>  int rte_eth_ring_pair_create(const char *name, const unsigned numa_node);
>  int rte_eth_ring_pair_attach(const char *name, const unsigned numa_node);
>  
> -/**
> - * For use by test apps only. Called as part of EAL init to set up any dummy NICs
> - * configured on command line.
> - */
> -int rte_pmd_ring_devinit(const char *name, const char *params);
> -
>  #ifdef __cplusplus
>  }
>  #endif
> diff --git a/lib/librte_pmd_ring/rte_eth_ring_version.map b/lib/librte_pmd_ring/rte_eth_ring_version.map
> new file mode 100644
> index 0000000..5edaa3d
> --- /dev/null
> +++ b/lib/librte_pmd_ring/rte_eth_ring_version.map
> @@ -0,0 +1,10 @@
> +DPDK_1.8 {
> +
> +	global:
> +
> +	rte_eth_from_rings;
> +	rte_eth_ring_pair_create;
> +	rte_eth_ring_pair_attach;
> +
> +	local: *;
> +};
> diff --git a/lib/librte_pmd_virtio/Makefile b/lib/librte_pmd_virtio/Makefile
> index 456095b..bf51bd9 100644
> --- a/lib/librte_pmd_virtio/Makefile
> +++ b/lib/librte_pmd_virtio/Makefile
> @@ -39,6 +39,7 @@ LIB = librte_pmd_virtio_uio.a
>  CFLAGS += -O3
>  CFLAGS += $(WERROR_FLAGS)
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_pmd_virtio/rte_pmd_virtio_version.map
>  
>  #
>  # all source are stored in SRCS-y
> diff --git a/lib/librte_pmd_virtio/rte_pmd_virtio_version.map b/lib/librte_pmd_virtio/rte_pmd_virtio_version.map
> new file mode 100644
> index 0000000..cbc401f
> --- /dev/null
> +++ b/lib/librte_pmd_virtio/rte_pmd_virtio_version.map
> @@ -0,0 +1,5 @@
> +DPDK_1.8 {
> +
> +	local: *;
> +};
> +
> diff --git a/lib/librte_pmd_vmxnet3/Makefile b/lib/librte_pmd_vmxnet3/Makefile
> index 6872c74..e5a1c6b 100644
> --- a/lib/librte_pmd_vmxnet3/Makefile
> +++ b/lib/librte_pmd_vmxnet3/Makefile
> @@ -66,6 +66,8 @@ endif
>  
>  VPATH += $(RTE_SDK)/lib/librte_pmd_vmxnet3/vmxnet3
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_pmd_vmxnet3/rte_pmd_vmxnet3_version.map
> +
>  #
>  # all source are stored in SRCS-y
>  #
> diff --git a/lib/librte_pmd_vmxnet3/rte_pmd_vmxnet3_version.map b/lib/librte_pmd_vmxnet3/rte_pmd_vmxnet3_version.map
> new file mode 100644
> index 0000000..cbc401f
> --- /dev/null
> +++ b/lib/librte_pmd_vmxnet3/rte_pmd_vmxnet3_version.map
> @@ -0,0 +1,5 @@
> +DPDK_1.8 {
> +
> +	local: *;
> +};
> +
> diff --git a/lib/librte_pmd_xenvirt/Makefile b/lib/librte_pmd_xenvirt/Makefile
> index 01bfcaa..0a08b1b 100644
> --- a/lib/librte_pmd_xenvirt/Makefile
> +++ b/lib/librte_pmd_xenvirt/Makefile
> @@ -39,6 +39,8 @@ LIB = librte_pmd_xenvirt.a
>  CFLAGS += -O3
>  CFLAGS += $(WERROR_FLAGS)
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_pmd_xenvirt/rte_eth_xenvirt_version.map
> +
>  #
>  # all source are stored in SRCS-y
>  #
> diff --git a/lib/librte_pmd_xenvirt/rte_eth_xenvirt_version.map b/lib/librte_pmd_xenvirt/rte_eth_xenvirt_version.map
> new file mode 100644
> index 0000000..66199b1
> --- /dev/null
> +++ b/lib/librte_pmd_xenvirt/rte_eth_xenvirt_version.map
> @@ -0,0 +1,8 @@
> +DPDK_1.8 {
> +	global:
> +
> +	rte_mempool_gntalloc_create;
> +
> +	local: *;
> +};
> +
> diff --git a/lib/librte_port/Makefile b/lib/librte_port/Makefile
> index 28793a5..e812bda 100644
> --- a/lib/librte_port/Makefile
> +++ b/lib/librte_port/Makefile
> @@ -39,6 +39,8 @@ LIB = librte_port.a
>  CFLAGS += -O3
>  CFLAGS += $(WERROR_FLAGS)
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_port/rte_port_version.map
> +
>  #
>  # all source are stored in SRCS-y
>  #
> diff --git a/lib/librte_port/rte_port_version.map b/lib/librte_port/rte_port_version.map
> new file mode 100644
> index 0000000..57ccaa3
> --- /dev/null
> +++ b/lib/librte_port/rte_port_version.map
> @@ -0,0 +1,18 @@
> +DPDK_1.8 {
> +	global:
> +	rte_port_ring_reader_ops;
> +	rte_port_ring_writer_ops;
> +	rte_port_ethdev_reader_ops;
> +	rte_port_ethdev_writer_ops;
> +	rte_port_ring_reader_ipv4_frag_ops;
> +	rte_port_ring_writer_ipv4_ras_ops;
> +	rte_port_ring_reader_ops;
> +	rte_port_ring_writer_ops;
> +	rte_port_sched_reader_ops;
> +	rte_port_sched_writer_ops;
> +	rte_port_source_ops;
> +	rte_port_sink_ops;
> +
> +	local: *;
> +};
> +
> diff --git a/lib/librte_power/Makefile b/lib/librte_power/Makefile
> index 6185812..26ee542 100644
> --- a/lib/librte_power/Makefile
> +++ b/lib/librte_power/Makefile
> @@ -36,6 +36,8 @@ LIB = librte_power.a
>  
>  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3 -fno-strict-aliasing
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_power/rte_power_version.map
> +
>  # all source are stored in SRCS-y
>  SRCS-$(CONFIG_RTE_LIBRTE_POWER) := rte_power.c
>  
> diff --git a/lib/librte_power/rte_power_version.map b/lib/librte_power/rte_power_version.map
> new file mode 100644
> index 0000000..3b2375a
> --- /dev/null
> +++ b/lib/librte_power/rte_power_version.map
> @@ -0,0 +1,14 @@
> +DPDK_1.8 {
> +	global:
> +	rte_power_init;
> +	rte_power_exit;
> +	rte_power_freqs;
> +	rte_power_get_freq;
> +	rte_power_set_freq;
> +	rte_power_freq_up;
> +	rte_power_freq_down;
> +	rte_power_freq_max;
> +	rte_power_freq_min;
> +
> +	local: *;
> +};
> diff --git a/lib/librte_ring/Makefile b/lib/librte_ring/Makefile
> index 2380a43..0adaa00 100644
> --- a/lib/librte_ring/Makefile
> +++ b/lib/librte_ring/Makefile
> @@ -36,6 +36,8 @@ LIB = librte_ring.a
>  
>  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_ring/rte_ring_version.map
> +
>  # all source are stored in SRCS-y
>  SRCS-$(CONFIG_RTE_LIBRTE_RING) := rte_ring.c
>  
> diff --git a/lib/librte_ring/rte_ring_version.map b/lib/librte_ring/rte_ring_version.map
> new file mode 100644
> index 0000000..6c28af9
> --- /dev/null
> +++ b/lib/librte_ring/rte_ring_version.map
> @@ -0,0 +1,12 @@
> +DPDK_1.8 {
> +	global:
> +	rte_ring_get_memsize;
> +	rte_ring_init;
> +	rte_ring_create;
> +	rte_ring_set_water_mark;
> +	rte_ring_dump;
> +	rte_ring_list_dump;
> +	rte_ring_lookup;
> +
> +	local: *;
> +};
> diff --git a/lib/librte_sched/Makefile b/lib/librte_sched/Makefile
> index 1a25b21..205fb7a 100644
> --- a/lib/librte_sched/Makefile
> +++ b/lib/librte_sched/Makefile
> @@ -41,6 +41,8 @@ CFLAGS += $(WERROR_FLAGS)
>  
>  CFLAGS_rte_red.o := -D_GNU_SOURCE
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_sched/rte_sched_version.map
> +
>  #
>  # all source are stored in SRCS-y
>  #
> diff --git a/lib/librte_sched/rte_sched_version.map b/lib/librte_sched/rte_sched_version.map
> new file mode 100644
> index 0000000..b5877ce
> --- /dev/null
> +++ b/lib/librte_sched/rte_sched_version.map
> @@ -0,0 +1,22 @@
> +DPDK_1.8 {
> +	global:
> +
> +	rte_approx;
> +	rte_red_rt_data_init;
> +	rte_red_config_init;
> +	rte_sched_port_config;
> +	rte_sched_port_free;
> +	rte_sched_subport_config;
> +	rte_sched_pipe_config;
> +	rte_sched_port_get_memory_footprint;
> +	rte_sched_subport_read_stats;
> +	rte_sched_queue_read_stats;
> +	rte_sched_port_enqueue;
> +	rte_sched_port_dequeue;
> +	rte_red_log2_1_minus_Wq;
> +	rte_red_pow2_frac_inv;
> +	rte_red_rand_val;
> +	rte_red_rand_seed;
> +
> +	local: *;
> +};
> diff --git a/lib/librte_table/Makefile b/lib/librte_table/Makefile
> index dd684cc..5b54acc 100644
> --- a/lib/librte_table/Makefile
> +++ b/lib/librte_table/Makefile
> @@ -39,6 +39,8 @@ LIB = librte_table.a
>  CFLAGS += -O3
>  CFLAGS += $(WERROR_FLAGS)
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_table/rte_table_version.map
> +
>  #
>  # all source are stored in SRCS-y
>  #
> diff --git a/lib/librte_table/rte_table_version.map b/lib/librte_table/rte_table_version.map
> new file mode 100644
> index 0000000..86f16b8
> --- /dev/null
> +++ b/lib/librte_table/rte_table_version.map
> @@ -0,0 +1,22 @@
> +DPDK_1.8 {
> +	global:
> +
> +	rte_table_stub_ops;
> +	rte_table_lpm_ops;
> +	rte_table_array_ops;
> +	rte_table_hash_key8_lru_ops;
> +	rte_table_hash_key8_lru_dosig_ops;
> +	rte_table_hash_key8_ext_ops;
> +	rte_table_hash_key8_ext_dosig_ops;
> +	rte_table_lpm_ipv6_ops;
> +	rte_table_hash_key16_lru_ops;
> +	rte_table_hash_key32_lru_ops;
> +	rte_table_hash_key16_ext_ops;
> +	rte_table_hash_key32_ext_ops;
> +	rte_table_acl_ops;
> +	rte_table_hash_lru_ops;
> +	rte_table_hash_ext_ops;
> +
> +	local: *;
> +};
> +
> diff --git a/lib/librte_timer/Makefile b/lib/librte_timer/Makefile
> index 07eb0c6..f703e5f 100644
> --- a/lib/librte_timer/Makefile
> +++ b/lib/librte_timer/Makefile
> @@ -36,6 +36,8 @@ LIB = librte_timer.a
>  
>  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
>  
> +EXPORT_MAP := $(RTE_SDK)/lib/librte_timer/rte_timer_version.map
> +
>  # all source are stored in SRCS-y
>  SRCS-$(CONFIG_RTE_LIBRTE_TIMER) := rte_timer.c
>  
> diff --git a/lib/librte_timer/rte_timer_version.map b/lib/librte_timer/rte_timer_version.map
> new file mode 100644
> index 0000000..00b6b52
> --- /dev/null
> +++ b/lib/librte_timer/rte_timer_version.map
> @@ -0,0 +1,16 @@
> +DPDK_1.8 {
> +	global:
> +
> +	rte_timer_subsystem_init;
> +	rte_timer_init;
> +	rte_timer_reset;
> +	rte_timer_reset_sync;
> +	rte_timer_stop;
> +	rte_timer_stop_sync;
> +	rte_timer_pending;
> +	rte_timer_manage;
> +	rte_timer_dump_stats;
> +
> +	local: *;
> +};
> +
> -- 
> 1.9.3
> 

May need to update some of the version maps with new functions in head.

Acked-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
  
Neil Horman Oct. 1, 2014, 2:43 p.m. UTC | #4
On Wed, Oct 01, 2014 at 12:25:52PM +0100, Sergio Gonzalez Monroy wrote:
> On Mon, Sep 15, 2014 at 03:23:49PM -0400, Neil Horman wrote:
> > Add linker version script files to each DPDK library to put a stake in the
> > ground from which we can start cleaning up API's
> > 
> > Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
> > CC: Thomas Monjalon <thomas.monjalon@6wind.com>
> > CC: "Richardson, Bruce" <bruce.richardson@intel.com>
> > ---
> >  lib/librte_acl/Makefile                            |   2 +
> >  lib/librte_acl/rte_acl_version.map                 |  19 ++++
> >  lib/librte_cfgfile/Makefile                        |   2 +
> >  lib/librte_cfgfile/rte_cfgfile_version.map         |  14 +++
> >  lib/librte_cmdline/Makefile                        |   2 +
> >  lib/librte_cmdline/rte_cmdline_version.map         |  69 +++++++++++++
> >  lib/librte_distributor/Makefile                    |   2 +
> >  lib/librte_distributor/rte_distributor_version.map |  16 +++
> >  lib/librte_eal/bsdapp/eal/Makefile                 |   2 +
> >  lib/librte_eal/bsdapp/eal/rte_eal_version.map      |  89 +++++++++++++++++
> >  lib/librte_eal/linuxapp/eal/Makefile               |   2 +
> >  lib/librte_eal/linuxapp/eal/rte_eal_version.map    |  89 +++++++++++++++++
> >  lib/librte_ether/Makefile                          |   2 +
> >  lib/librte_ether/rte_ether_version.map             | 108 +++++++++++++++++++++
> >  lib/librte_hash/Makefile                           |   2 +
> >  lib/librte_hash/rte_hash_version.map               |  18 ++++
> >  lib/librte_ip_frag/Makefile                        |   2 +
> >  lib/librte_ip_frag/rte_ipfrag_version.map          |  14 +++
> >  lib/librte_ivshmem/Makefile                        |   2 +
> >  lib/librte_ivshmem/rte_ivshmem_version.map         |  13 +++
> >  lib/librte_kni/Makefile                            |   2 +
> >  lib/librte_kni/rte_kni_version.map                 |  19 ++++
> >  lib/librte_kvargs/Makefile                         |   2 +
> >  lib/librte_kvargs/rte_kvargs_version.map           |  10 ++
> >  lib/librte_lpm/Makefile                            |   2 +
> >  lib/librte_lpm/rte_lpm_version.map                 |  24 +++++
> >  lib/librte_malloc/Makefile                         |   2 +
> >  lib/librte_malloc/rte_malloc_version.map           |  19 ++++
> >  lib/librte_mbuf/Makefile                           |   2 +
> >  lib/librte_mbuf/rte_mbuf_version.map               |  12 +++
> >  lib/librte_mempool/Makefile                        |   2 +
> >  lib/librte_mempool/rte_mempool_version.map         |  18 ++++
> >  lib/librte_meter/Makefile                          |   2 +
> >  lib/librte_meter/rte_meter_version.map             |  13 +++
> >  lib/librte_pipeline/Makefile                       |   2 +
> >  lib/librte_pipeline/rte_pipeline_version.map       |  23 +++++
> >  lib/librte_pmd_bond/Makefile                       |   2 +
> >  lib/librte_pmd_bond/rte_eth_bond_version.map       |  20 ++++
> >  lib/librte_pmd_e1000/Makefile                      |   2 +
> >  lib/librte_pmd_e1000/rte_pmd_e1000_version.map     |   5 +
> >  lib/librte_pmd_i40e/Makefile                       |   2 +
> >  lib/librte_pmd_i40e/rte_pmd_i40e_version.map       |   5 +
> >  lib/librte_pmd_ixgbe/Makefile                      |   2 +
> >  lib/librte_pmd_ixgbe/rte_pmd_ixgbe_version.map     |   5 +
> >  lib/librte_pmd_pcap/Makefile                       |   2 +
> >  lib/librte_pmd_pcap/rte_pmd_pcap_version.map       |   5 +
> >  lib/librte_pmd_ring/Makefile                       |   2 +
> >  lib/librte_pmd_ring/rte_eth_ring.c                 |   2 +-
> >  lib/librte_pmd_ring/rte_eth_ring.h                 |   6 --
> >  lib/librte_pmd_ring/rte_eth_ring_version.map       |  10 ++
> >  lib/librte_pmd_virtio/Makefile                     |   1 +
> >  lib/librte_pmd_virtio/rte_pmd_virtio_version.map   |   5 +
> >  lib/librte_pmd_vmxnet3/Makefile                    |   2 +
> >  lib/librte_pmd_vmxnet3/rte_pmd_vmxnet3_version.map |   5 +
> >  lib/librte_pmd_xenvirt/Makefile                    |   2 +
> >  lib/librte_pmd_xenvirt/rte_eth_xenvirt_version.map |   8 ++
> >  lib/librte_port/Makefile                           |   2 +
> >  lib/librte_port/rte_port_version.map               |  18 ++++
> >  lib/librte_power/Makefile                          |   2 +
> >  lib/librte_power/rte_power_version.map             |  14 +++
> >  lib/librte_ring/Makefile                           |   2 +
> >  lib/librte_ring/rte_ring_version.map               |  12 +++
> >  lib/librte_sched/Makefile                          |   2 +
> >  lib/librte_sched/rte_sched_version.map             |  22 +++++
> >  lib/librte_table/Makefile                          |   2 +
> >  lib/librte_table/rte_table_version.map             |  22 +++++
> >  lib/librte_timer/Makefile                          |   2 +
> >  lib/librte_timer/rte_timer_version.map             |  16 +++
> >  68 files changed, 825 insertions(+), 7 deletions(-)
> >  create mode 100644 lib/librte_acl/rte_acl_version.map
> >  create mode 100644 lib/librte_cfgfile/rte_cfgfile_version.map
> >  create mode 100644 lib/librte_cmdline/rte_cmdline_version.map
> >  create mode 100644 lib/librte_distributor/rte_distributor_version.map
> >  create mode 100644 lib/librte_eal/bsdapp/eal/rte_eal_version.map
> >  create mode 100644 lib/librte_eal/linuxapp/eal/rte_eal_version.map
> >  create mode 100644 lib/librte_ether/rte_ether_version.map
> >  create mode 100644 lib/librte_hash/rte_hash_version.map
> >  create mode 100644 lib/librte_ip_frag/rte_ipfrag_version.map
> >  create mode 100644 lib/librte_ivshmem/rte_ivshmem_version.map
> >  create mode 100644 lib/librte_kni/rte_kni_version.map
> >  create mode 100644 lib/librte_kvargs/rte_kvargs_version.map
> >  create mode 100644 lib/librte_lpm/rte_lpm_version.map
> >  create mode 100644 lib/librte_malloc/rte_malloc_version.map
> >  create mode 100644 lib/librte_mbuf/rte_mbuf_version.map
> >  create mode 100644 lib/librte_mempool/rte_mempool_version.map
> >  create mode 100644 lib/librte_meter/rte_meter_version.map
> >  create mode 100644 lib/librte_pipeline/rte_pipeline_version.map
> >  create mode 100644 lib/librte_pmd_bond/rte_eth_bond_version.map
> >  create mode 100644 lib/librte_pmd_e1000/rte_pmd_e1000_version.map
> >  create mode 100644 lib/librte_pmd_i40e/rte_pmd_i40e_version.map
> >  create mode 100644 lib/librte_pmd_ixgbe/rte_pmd_ixgbe_version.map
> >  create mode 100644 lib/librte_pmd_pcap/rte_pmd_pcap_version.map
> >  create mode 100644 lib/librte_pmd_ring/rte_eth_ring_version.map
> >  create mode 100644 lib/librte_pmd_virtio/rte_pmd_virtio_version.map
> >  create mode 100644 lib/librte_pmd_vmxnet3/rte_pmd_vmxnet3_version.map
> >  create mode 100644 lib/librte_pmd_xenvirt/rte_eth_xenvirt_version.map
> >  create mode 100644 lib/librte_port/rte_port_version.map
> >  create mode 100644 lib/librte_power/rte_power_version.map
> >  create mode 100644 lib/librte_ring/rte_ring_version.map
> >  create mode 100644 lib/librte_sched/rte_sched_version.map
> >  create mode 100644 lib/librte_table/rte_table_version.map
> >  create mode 100644 lib/librte_timer/rte_timer_version.map
> > 
> > diff --git a/lib/librte_acl/Makefile b/lib/librte_acl/Makefile
> > index 65e566d..1f96645 100644
> > --- a/lib/librte_acl/Makefile
> > +++ b/lib/librte_acl/Makefile
> > @@ -37,6 +37,8 @@ LIB = librte_acl.a
> >  CFLAGS += -O3
> >  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_acl/rte_acl_version.map
> > +
> >  # all source are stored in SRCS-y
> >  SRCS-$(CONFIG_RTE_LIBRTE_ACL) += tb_mem.c
> >  
> > diff --git a/lib/librte_acl/rte_acl_version.map b/lib/librte_acl/rte_acl_version.map
> > new file mode 100644
> > index 0000000..4480690
> > --- /dev/null
> > +++ b/lib/librte_acl/rte_acl_version.map
> > @@ -0,0 +1,19 @@
> > +DPDK_1.8 {
> > +	global:
> > +	rte_acl_create;
> > +	rte_acl_find_existing;
> > +	rte_acl_free;
> > +	rte_acl_add_rules;
> > +	rte_acl_reset_rules;
> > +	rte_acl_build;
> > +	rte_acl_reset;
> > +	rte_acl_classify;
> > +	rte_acl_dump;
> > +	rte_acl_list_dump;
> > +	rte_acl_ipv4vlan_add_rules;
> > +	rte_acl_ipv4vlan_build;
> > +	rte_acl_classify_scalar;
> > +
> > +	local: *;
> > +};
> > +
> > diff --git a/lib/librte_cfgfile/Makefile b/lib/librte_cfgfile/Makefile
> > index 55e8701..e655098 100644
> > --- a/lib/librte_cfgfile/Makefile
> > +++ b/lib/librte_cfgfile/Makefile
> > @@ -39,6 +39,8 @@ LIB = librte_cfgfile.a
> >  CFLAGS += -O3
> >  CFLAGS += $(WERROR_FLAGS)
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_cfgfile/rte_cfgfile_version.map
> > +
> >  #
> >  # all source are stored in SRCS-y
> >  #
> > diff --git a/lib/librte_cfgfile/rte_cfgfile_version.map b/lib/librte_cfgfile/rte_cfgfile_version.map
> > new file mode 100644
> > index 0000000..10ecea6
> > --- /dev/null
> > +++ b/lib/librte_cfgfile/rte_cfgfile_version.map
> > @@ -0,0 +1,14 @@
> > +DPDK_1.8 {
> > +	global:
> > +	rte_cfgfile_load;
> > +	rte_cfgfile_num_sections;
> > +	rte_cfgfile_sections;
> > +	rte_cfgfile_has_section;
> > +	rte_cfgfile_section_num_entries;
> > +	rte_cfgfile_section_entries;
> > +	rte_cfgfile_get_entry;
> > +	rte_cfgfile_has_entry;
> > +	rte_cfgfile_close;
> > +
> > +	local: *;
> > +};
> > diff --git a/lib/librte_cmdline/Makefile b/lib/librte_cmdline/Makefile
> > index 7eae449..1a47173 100644
> > --- a/lib/librte_cmdline/Makefile
> > +++ b/lib/librte_cmdline/Makefile
> > @@ -36,6 +36,8 @@ LIB = librte_cmdline.a
> >  
> >  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_cmdline/rte_cmdline_version.map
> > +
> >  # all source are stored in SRCS-y
> >  SRCS-$(CONFIG_RTE_LIBRTE_CMDLINE) := cmdline.c
> >  SRCS-$(CONFIG_RTE_LIBRTE_CMDLINE) += cmdline_cirbuf.c
> > diff --git a/lib/librte_cmdline/rte_cmdline_version.map b/lib/librte_cmdline/rte_cmdline_version.map
> > new file mode 100644
> > index 0000000..7616eff
> > --- /dev/null
> > +++ b/lib/librte_cmdline/rte_cmdline_version.map
> > @@ -0,0 +1,69 @@
> > +DPDK_1.8 {
> > +	global:
> > +	cmdline_new;
> > +	cmdline_set_prompt;
> > +	cmdline_free;
> > +	cmdline_printf;
> > +	cmdline_in;
> > +	cmdline_write_char;
> > +	cmdline_interact;
> > +	cmdline_quit;
> > +	cmdline_parse;
> > +	cmdline_complete;
> > +	cmdline_isendoftoken;
> > +	cmdline_parse_num;
> > +	cmdline_get_help_num;
> > +	cmdline_parse_ipaddr;
> > +	cmdline_get_help_ipaddr;
> > +	cmdline_parse_etheraddr;
> > +	cmdline_get_help_etheraddr;
> > +	cmdline_parse_string;
> > +	cmdline_complete_get_nb_string;
> > +	cmdline_complete_get_elt_string;
> > +	cmdline_get_help_string;
> > +	cmdline_parse_portlist;
> > +	cmdline_get_help_portlist;
> > +	cmdline_token_string_ops;
> > +	cmdline_token_num_ops;
> > +	cmdline_token_string_ops;
> > +	cmdline_token_ipaddr_ops;
> > +	cmdline_token_etheraddr_ops;
> > +	vt100_init;
> > +	vt100_parser;
> > +	cmdline_file_new;
> > +	cmdline_stdin_new;
> > +	cmdline_stdin_exit;
> > +	cirbuf_init;
> > +	cirbuf_add_head_safe;
> > +	cirbuf_add_head;
> > +	cirbuf_add_tail_safe;
> > +	cirbuf_add_tail;
> > +	cirbuf_del_head_safe;
> > +	cirbuf_del_head;
> > +	cirbuf_del_tail_safe;
> > +	cirbuf_del_tail;
> > +	cirbuf_get_head;
> > +	cirbuf_get_tail;
> > +	cirbuf_add_buf_head;
> > +	cirbuf_add_buf_tail;
> > +	cirbuf_del_buf_head;
> > +	cirbuf_del_buf_tail;
> > +	cirbuf_get_buf_head;
> > +	cirbuf_get_buf_tail;
> > +	cirbuf_align_left;
> > +	cirbuf_align_right;
> > +	rdline_init;
> > +	rdline_newline;
> > +	rdline_stop;
> > +	rdline_quit;
> > +	rdline_restart;
> > +	rdline_redisplay;
> > +	rdline_reset;
> > +	rdline_char_in;
> > +	rdline_get_buffer;
> > +	rdline_add_history;
> > +	rdline_clear_history;
> > +	rdline_get_history_item;
> > +
> > +	local: *;
> > +};
> > diff --git a/lib/librte_distributor/Makefile b/lib/librte_distributor/Makefile
> > index 36699f8..97d8bbb 100644
> > --- a/lib/librte_distributor/Makefile
> > +++ b/lib/librte_distributor/Makefile
> > @@ -37,6 +37,8 @@ LIB = librte_distributor.a
> >  CFLAGS += -O3
> >  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_distributor/rte_distributor_version.map
> > +
> >  # all source are stored in SRCS-y
> >  SRCS-$(CONFIG_RTE_LIBRTE_DISTRIBUTOR) := rte_distributor.c
> >  
> > diff --git a/lib/librte_distributor/rte_distributor_version.map b/lib/librte_distributor/rte_distributor_version.map
> > new file mode 100644
> > index 0000000..b81ddc8
> > --- /dev/null
> > +++ b/lib/librte_distributor/rte_distributor_version.map
> > @@ -0,0 +1,16 @@
> > +DPDK_1.8 {
> > +
> > +	global:
> > +	rte_distributor_create;
> > +	rte_distributor_process;
> > +	rte_distributor_returned_pkts;
> > +	rte_distributor_flush;
> > +	rte_distributor_clear_returns;
> > +	rte_distributor_get_pkt;
> > +	rte_distributor_return_pkt;
> > +	rte_distributor_request_pkt;
> > +	rte_distributor_poll_pkt;
> > +
> > +	local: *;
> > +};
> > +
> > diff --git a/lib/librte_eal/bsdapp/eal/Makefile b/lib/librte_eal/bsdapp/eal/Makefile
> > index 8f44273..2caaf00 100644
> > --- a/lib/librte_eal/bsdapp/eal/Makefile
> > +++ b/lib/librte_eal/bsdapp/eal/Makefile
> > @@ -45,6 +45,8 @@ CFLAGS += -I$(RTE_SDK)/lib/librte_pmd_ring
> >  CFLAGS += -I$(RTE_SDK)/lib/librte_pmd_pcap
> >  CFLAGS += $(WERROR_FLAGS) -O3
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_eal/bsdapp/eal/rte_eal_version.map
> > +
> >  # specific to linuxapp exec-env
> >  SRCS-$(CONFIG_RTE_LIBRTE_EAL_BSDAPP) := eal.c
> >  SRCS-$(CONFIG_RTE_LIBRTE_EAL_BSDAPP) += eal_memory.c
> > diff --git a/lib/librte_eal/bsdapp/eal/rte_eal_version.map b/lib/librte_eal/bsdapp/eal/rte_eal_version.map
> > new file mode 100644
> > index 0000000..71788e1
> > --- /dev/null
> > +++ b/lib/librte_eal/bsdapp/eal/rte_eal_version.map
> > @@ -0,0 +1,89 @@
> > +DPDK_1.8 {
> > +	global:
> > +	rte_eal_alarm_set;
> > +	rte_eal_alarm_cancel;
> > +	rte_exit;
> > +	rte_cpu_get_flag_enabled;
> > +	rte_cpu_check_supported;
> > +	rte_get_tsc_hz;
> > +	rte_get_hpet_cycles;
> > +	rte_get_hpet_hz;
> > +	rte_eal_hpet_init;
> > +	rte_delay_us;
> > +	rte_dump_stack;
> > +	rte_dump_registers;
> > +	__rte_panic;
> > +	rte_eal_devargs_add;
> > +	rte_eal_devargs_type_count;
> > +	rte_eal_devargs_dump;
> > +	rte_eal_driver_register;
> > +	rte_eal_driver_unregister;
> > +	rte_eal_dev_init;
> > +	rte_eal_init;
> > +	rte_set_application_usage_hook;
> > +	rte_eal_has_hugepages;
> > +	rte_strerror;
> > +	rte_hexdump;
> > +	rte_memdump;
> > +	rte_intr_callback_register;
> > +	rte_intr_callback_unregister;
> > +	rte_intr_enable;
> > +	rte_intr_disable;
> > +	rte_eal_remote_launch;
> > +	rte_eal_mp_remote_launch;
> > +	rte_eal_get_lcore_state;
> > +	rte_eal_wait_lcore;
> > +	rte_eal_mp_wait_lcore;
> > +	rte_openlog_stream;
> > +	rte_set_log_level;
> > +	rte_set_log_type;
> > +	rte_log_cur_msg_loglevel;
> > +	rte_log_cur_msg_logtype;
> > +	rte_log_set_history;
> > +	rte_log_dump_history;
> > +	rte_log_add_in_history;
> > +	rte_log;
> > +	rte_vlog;
> > +	rte_mem_lock_page;
> > +	rte_mem_virt2phy;
> > +	rte_eal_get_physmem_layout;
> > +	rte_dump_physmem_layout;
> > +	rte_eal_get_physmem_size;
> > +	rte_memory_get_nchannel;
> > +	rte_memory_get_nrank;
> > +	rte_mem_phy2mch;
> > +	rte_xen_dom0_memory_init;
> > +	rte_xen_dom0_memory_attach;
> > +	rte_memzone_reserve;
> > +	rte_memzone_reserve_aligned;
> > +	rte_memzone_reserve_bounded;
> > +	rte_memzone_lookup;
> > +	rte_memzone_dump;
> > +	rte_memzone_walk;
> > +	rte_eal_pci_probe;
> > +	rte_eal_pci_dump;
> > +	rte_eal_pci_register;
> > +	rte_eal_pci_unregister;
> > +	rte_snprintf;
> > +	rte_strsplit;
> > +	rte_eal_tailq_reserve;
> > +	rte_eal_tailq_reserve_by_idx;
> > +	rte_dump_tailq;
> > +	rte_eal_tailq_lookup;
> > +	rte_eal_tailq_lookup_by_idx;
> > +	lcore_config;
> > +	per_lcore__lcore_id;
> > +	eal_timer_source;
> > +	rte_cycles_vmware_tsc_map;
> > +	rte_eal_get_configuration;
> > +	rte_logs;
> > +	rte_eal_lcore_role;
> > +	test_mp_secondary;
> > +	rte_eal_process_type;
> > +	per_lcore__rte_errno;
> > +	pci_device_list;
> > +	devargs_list;
> > +	eal_parse_sysfs_value;
> > +
> > +	local: *;
> > +};
> > diff --git a/lib/librte_eal/linuxapp/eal/Makefile b/lib/librte_eal/linuxapp/eal/Makefile
> > index 756d6b0..254d59c 100644
> > --- a/lib/librte_eal/linuxapp/eal/Makefile
> > +++ b/lib/librte_eal/linuxapp/eal/Makefile
> > @@ -33,6 +33,8 @@ include $(RTE_SDK)/mk/rte.vars.mk
> >  
> >  LIB = librte_eal.a
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_eal/linuxapp/eal/rte_eal_version.map
> > +
> >  VPATH += $(RTE_SDK)/lib/librte_eal/common
> >  
> >  CFLAGS += -I$(SRCDIR)/include
> > diff --git a/lib/librte_eal/linuxapp/eal/rte_eal_version.map b/lib/librte_eal/linuxapp/eal/rte_eal_version.map
> > new file mode 100644
> > index 0000000..71788e1
> > --- /dev/null
> > +++ b/lib/librte_eal/linuxapp/eal/rte_eal_version.map
> > @@ -0,0 +1,89 @@
> > +DPDK_1.8 {
> > +	global:
> > +	rte_eal_alarm_set;
> > +	rte_eal_alarm_cancel;
> > +	rte_exit;
> > +	rte_cpu_get_flag_enabled;
> > +	rte_cpu_check_supported;
> > +	rte_get_tsc_hz;
> > +	rte_get_hpet_cycles;
> > +	rte_get_hpet_hz;
> > +	rte_eal_hpet_init;
> > +	rte_delay_us;
> > +	rte_dump_stack;
> > +	rte_dump_registers;
> > +	__rte_panic;
> > +	rte_eal_devargs_add;
> > +	rte_eal_devargs_type_count;
> > +	rte_eal_devargs_dump;
> > +	rte_eal_driver_register;
> > +	rte_eal_driver_unregister;
> > +	rte_eal_dev_init;
> > +	rte_eal_init;
> > +	rte_set_application_usage_hook;
> > +	rte_eal_has_hugepages;
> > +	rte_strerror;
> > +	rte_hexdump;
> > +	rte_memdump;
> > +	rte_intr_callback_register;
> > +	rte_intr_callback_unregister;
> > +	rte_intr_enable;
> > +	rte_intr_disable;
> > +	rte_eal_remote_launch;
> > +	rte_eal_mp_remote_launch;
> > +	rte_eal_get_lcore_state;
> > +	rte_eal_wait_lcore;
> > +	rte_eal_mp_wait_lcore;
> > +	rte_openlog_stream;
> > +	rte_set_log_level;
> > +	rte_set_log_type;
> > +	rte_log_cur_msg_loglevel;
> > +	rte_log_cur_msg_logtype;
> > +	rte_log_set_history;
> > +	rte_log_dump_history;
> > +	rte_log_add_in_history;
> > +	rte_log;
> > +	rte_vlog;
> > +	rte_mem_lock_page;
> > +	rte_mem_virt2phy;
> > +	rte_eal_get_physmem_layout;
> > +	rte_dump_physmem_layout;
> > +	rte_eal_get_physmem_size;
> > +	rte_memory_get_nchannel;
> > +	rte_memory_get_nrank;
> > +	rte_mem_phy2mch;
> > +	rte_xen_dom0_memory_init;
> > +	rte_xen_dom0_memory_attach;
> > +	rte_memzone_reserve;
> > +	rte_memzone_reserve_aligned;
> > +	rte_memzone_reserve_bounded;
> > +	rte_memzone_lookup;
> > +	rte_memzone_dump;
> > +	rte_memzone_walk;
> > +	rte_eal_pci_probe;
> > +	rte_eal_pci_dump;
> > +	rte_eal_pci_register;
> > +	rte_eal_pci_unregister;
> > +	rte_snprintf;
> > +	rte_strsplit;
> > +	rte_eal_tailq_reserve;
> > +	rte_eal_tailq_reserve_by_idx;
> > +	rte_dump_tailq;
> > +	rte_eal_tailq_lookup;
> > +	rte_eal_tailq_lookup_by_idx;
> > +	lcore_config;
> > +	per_lcore__lcore_id;
> > +	eal_timer_source;
> > +	rte_cycles_vmware_tsc_map;
> > +	rte_eal_get_configuration;
> > +	rte_logs;
> > +	rte_eal_lcore_role;
> > +	test_mp_secondary;
> > +	rte_eal_process_type;
> > +	per_lcore__rte_errno;
> > +	pci_device_list;
> > +	devargs_list;
> > +	eal_parse_sysfs_value;
> > +
> > +	local: *;
> > +};
> > diff --git a/lib/librte_ether/Makefile b/lib/librte_ether/Makefile
> > index b310f8b..f40b5cc 100644
> > --- a/lib/librte_ether/Makefile
> > +++ b/lib/librte_ether/Makefile
> > @@ -39,6 +39,8 @@ LIB = libethdev.a
> >  CFLAGS += -O3
> >  CFLAGS += $(WERROR_FLAGS)
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_ether/rte_ether_version.map
> > +
> >  SRCS-y += rte_ethdev.c
> >  
> >  #
> > diff --git a/lib/librte_ether/rte_ether_version.map b/lib/librte_ether/rte_ether_version.map
> > new file mode 100644
> > index 0000000..41952ab
> > --- /dev/null
> > +++ b/lib/librte_ether/rte_ether_version.map
> > @@ -0,0 +1,108 @@
> > +DPDK_1.8 {
> > +	global:
> > +	rte_eth_driver_register;
> > +	rte_eth_dev_configure;
> > +	rte_eth_rx_queue_setup;
> > +	rte_eth_tx_queue_setup;
> > +	rte_eth_dev_socket_id;
> > +	rte_eth_dev_rx_queue_start;
> > +	rte_eth_dev_rx_queue_stop;
> > +	rte_eth_dev_tx_queue_start;
> > +	rte_eth_dev_tx_queue_stop;
> > +	rte_eth_dev_start;
> > +	rte_eth_dev_stop;
> > +	rte_eth_dev_set_link_up;
> > +	rte_eth_dev_set_link_down;
> > +	rte_eth_dev_close;
> > +	rte_eth_promiscuous_enable;
> > +	rte_eth_promiscuous_disable;
> > +	rte_eth_promiscuous_get;
> > +	rte_eth_allmulticast_enable;
> > +	rte_eth_allmulticast_disable;
> > +	rte_eth_allmulticast_get;
> > +	rte_eth_link;
> > +	rte_eth_link_get_nowait;
> > +	rte_eth_stats;
> > +	rte_eth_stats_reset;
> > +	rte_eth_dev_set_tx_queue_stats_mapping;
> > +	rte_eth_dev_set_rx_queue_stats_mapping;
> > +	rte_eth_macaddr_get;
> > +	rte_eth_dev_info_get;
> > +	rte_eth_dev_get_mtu;
> > +	rte_eth_dev_set_mtu;
> > +	rte_eth_dev_vlan_filter;
> > +	rte_eth_dev_set_vlan_strip_on_queue;
> > +	rte_eth_dev_set_vlan_ether_type;
> > +	rte_eth_dev_set_vlan_offload;
> > +	rte_eth_dev_get_vlan_offload;
> > +	rte_eth_dev_set_vlan_pvid;
> > +	rte_eth_rx_burst;
> > +	rte_eth_rx_queue_count;
> > +	rte_eth_rx_descriptor_done;
> > +	rte_eth_tx_burst;
> > +	rte_eth_dev_fdir_add_signature_filter;
> > +	rte_eth_dev_fdir_update_signature_filter;
> > +	rte_eth_dev_fdir_remove_signature_filter;
> > +	rte_eth_dev_fdir_get_infos;
> > +	rte_eth_dev_fdir_add_perfect_filter;
> > +	rte_eth_dev_fdir_update_perfect_filter;
> > +	rte_eth_dev_fdir_remove_perfect_filter;
> > +	rte_eth_dev_fdir_set_masks;
> > +	rte_eth_dev_callback_register;
> > +	rte_eth_dev_callback_unregister;
> > +	rte_eth_dev_callback_process;
> > +	rte_eth_led_on;
> > +	rte_eth_led_off;
> > +	rte_eth_dev_flow_ctrl_get;
> > +	rte_eth_dev_flow_ctrl_set;
> > +	rte_eth_dev_priority_flow_ctrl_set;
> > +	rte_eth_dev_mac_addr_add;
> > +	rte_eth_dev_mac_addr_remove;
> > +	rte_eth_dev_rss_reta_update;
> > +	rte_eth_dev_rss_reta_query;
> > +	rte_eth_dev_uc_hash_table_set;
> > +	rte_eth_dev_uc_all_hash_table_set;
> > +	rte_eth_dev_set_vf_rxmode;
> > +	rte_eth_dev_set_vf_tx;
> > +	rte_eth_dev_set_vf_rx;
> > +	rte_eth_dev_set_vf_vlan_filter;
> > +	rte_eth_mirror_rule_set;
> > +	rte_eth_mirror_rule_reset;
> > +	rte_eth_set_queue_rate_limit;
> > +	rte_eth_set_vf_rate_limit;
> > +	rte_eth_dev_bypass_init;
> > +	rte_eth_dev_bypass_state_show;
> > +	rte_eth_dev_bypass_state_set;
> > +	rte_eth_dev_bypass_event_show;
> > +	rte_eth_dev_bypass_event_store;
> > +	rte_eth_dev_wd_timeout_store;
> > +	rte_eth_dev_bypass_ver_show;
> > +	rte_eth_dev_bypass_wd_timeout_show;
> > +	rte_eth_dev_bypass_wd_reset;
> > +	rte_eth_dev_rss_hash_update;
> > +	rte_eth_dev_rss_hash_conf_get;
> > +	rte_eth_dev_add_syn_filter;
> > +	rte_eth_dev_remove_syn_filter;
> > +	rte_eth_dev_get_syn_filter;
> > +	rte_eth_dev_add_ethertype_filter;
> > +	rte_eth_dev_remove_ethertype_filter;
> > +	rte_eth_dev_get_ethertype_filter;
> > +	rte_eth_dev_add_2tuple_filter;
> > +	rte_eth_dev_remove_2tuple_filter;
> > +	rte_eth_dev_get_2tuple_filter;
> > +	rte_eth_dev_add_5tuple_filter;
> > +	rte_eth_dev_remove_5tuple_filter;
> > +	rte_eth_dev_get_5tuple_filter;
> > +	rte_eth_dev_add_flex_filter;
> > +	rte_eth_dev_remove_flex_filter;
> > +	rte_eth_dev_get_flex_filter;
> > +	rte_eth_dev_count;
> > +	rte_eth_link_get;
> > +	rte_eth_devices;
> > +	rte_eth_stats_get;
> > +	rte_eth_dev_allocate;
> > +	_rte_eth_dev_callback_process;
> > +
> > +	local: *;
> > +};
> > +
> > diff --git a/lib/librte_hash/Makefile b/lib/librte_hash/Makefile
> > index 95e4c09..a449ec2 100644
> > --- a/lib/librte_hash/Makefile
> > +++ b/lib/librte_hash/Makefile
> > @@ -37,6 +37,8 @@ LIB = librte_hash.a
> >  CFLAGS += -O3
> >  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_hash/rte_hash_version.map
> > +
> >  # all source are stored in SRCS-y
> >  SRCS-$(CONFIG_RTE_LIBRTE_HASH) := rte_hash.c
> >  SRCS-$(CONFIG_RTE_LIBRTE_HASH) += rte_fbk_hash.c
> > diff --git a/lib/librte_hash/rte_hash_version.map b/lib/librte_hash/rte_hash_version.map
> > new file mode 100644
> > index 0000000..2a34313
> > --- /dev/null
> > +++ b/lib/librte_hash/rte_hash_version.map
> > @@ -0,0 +1,18 @@
> > +DPDK_1.8 {
> > +	global:
> > +	rte_fbk_hash_find_existing;
> > +	rte_fbk_hash_create;
> > +	rte_fbk_hash_free;
> > +	rte_hash_create;
> > +	rte_hash_find_existing;
> > +	rte_hash_free;
> > +	rte_hash_add_key;
> > +	rte_hash_add_key_with_hash;
> > +	rte_hash_del_key;
> > +	rte_hash_del_key_with_hash;
> > +	rte_hash_lookup;
> > +	rte_hash_lookup_with_hash;
> > +	rte_hash_lookup_bulk;
> > +
> > +	local: *;
> > +};
> > diff --git a/lib/librte_ip_frag/Makefile b/lib/librte_ip_frag/Makefile
> > index 2265c93..ede5a89 100644
> > --- a/lib/librte_ip_frag/Makefile
> > +++ b/lib/librte_ip_frag/Makefile
> > @@ -37,6 +37,8 @@ LIB = librte_ip_frag.a
> >  CFLAGS += -O3
> >  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_ip_frag/rte_ipfrag_version.map
> > +
> >  #source files
> >  SRCS-$(CONFIG_RTE_LIBRTE_IP_FRAG) += rte_ipv4_fragmentation.c
> >  SRCS-$(CONFIG_RTE_LIBRTE_IP_FRAG) += rte_ipv4_reassembly.c
> > diff --git a/lib/librte_ip_frag/rte_ipfrag_version.map b/lib/librte_ip_frag/rte_ipfrag_version.map
> > new file mode 100644
> > index 0000000..afe1a0b
> > --- /dev/null
> > +++ b/lib/librte_ip_frag/rte_ipfrag_version.map
> > @@ -0,0 +1,14 @@
> > +DPDK_1.8 {
> > +	global:
> > +
> > +	rte_ip_frag_table_create;
> > +	rte_ipv6_fragment_packet;
> > +	rte_ipv6_frag_reassemble_packet;
> > +	rte_ipv4_fragment_packet;
> > +	rte_ipv4_frag_reassemble_packet;
> > +	rte_ip_frag_free_death_row;
> > +	rte_ip_frag_table_statistics_dump;
> > +
> > +	local: *;
> > +};
> > +
> > diff --git a/lib/librte_ivshmem/Makefile b/lib/librte_ivshmem/Makefile
> > index 536814c..be6f21a 100644
> > --- a/lib/librte_ivshmem/Makefile
> > +++ b/lib/librte_ivshmem/Makefile
> > @@ -36,6 +36,8 @@ LIB = librte_ivshmem.a
> >  
> >  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
> >  
> > +EXPORT_MAPS := $(RTE_SDK)/lib/librte_ivshmem/rte_ivshmem_version.map
> > +
> >  # all source are stored in SRCS-y
> >  SRCS-$(CONFIG_RTE_LIBRTE_IVSHMEM) := rte_ivshmem.c
> >  
> > diff --git a/lib/librte_ivshmem/rte_ivshmem_version.map b/lib/librte_ivshmem/rte_ivshmem_version.map
> > new file mode 100644
> > index 0000000..a204339
> > --- /dev/null
> > +++ b/lib/librte_ivshmem/rte_ivshmem_version.map
> > @@ -0,0 +1,13 @@
> > +DPDK_1.8 {
> > +	global:
> > +
> > +	rte_ivshmem_metadata_create;
> > +	rte_ivshmem_metadata_add_memzone;
> > +	rte_ivshmem_metadata_add_ring;
> > +	rte_ivshmem_metadata_add_mempool;
> > +	rte_ivshmem_metadata_cmdline_generate;
> > +	rte_ivshmem_metadata_dump;
> > +
> > +	local: *;
> > +};
> > +
> > diff --git a/lib/librte_kni/Makefile b/lib/librte_kni/Makefile
> > index 5267304..c119fc1 100644
> > --- a/lib/librte_kni/Makefile
> > +++ b/lib/librte_kni/Makefile
> > @@ -36,6 +36,8 @@ LIB = librte_kni.a
> >  
> >  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3 -fno-strict-aliasing
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_kni/rte_kni_version.map
> > +
> >  # all source are stored in SRCS-y
> >  SRCS-$(CONFIG_RTE_LIBRTE_KNI) := rte_kni.c
> >  
> > diff --git a/lib/librte_kni/rte_kni_version.map b/lib/librte_kni/rte_kni_version.map
> > new file mode 100644
> > index 0000000..58fbc1f
> > --- /dev/null
> > +++ b/lib/librte_kni/rte_kni_version.map
> > @@ -0,0 +1,19 @@
> > +DPDK_1.8 {
> > +	global:
> > +
> > +	rte_kni_alloc;
> > +	rte_kni_create;
> > +	rte_kni_release;
> > +	rte_kni_handle_request;
> > +	rte_kni_rx_burst;
> > +	rte_kni_tx_burst;
> > +	rte_kni_get_port_id;
> > +	rte_kni_get;
> > +	rte_kni_info_get;
> > +	rte_kni_register_handlers;
> > +	rte_kni_unregister_handlers;
> > +	rte_kni_close;
> > +
> > +	local: *;
> > +};
> > +
> > diff --git a/lib/librte_kvargs/Makefile b/lib/librte_kvargs/Makefile
> > index b09359a..83a42b1 100644
> > --- a/lib/librte_kvargs/Makefile
> > +++ b/lib/librte_kvargs/Makefile
> > @@ -38,6 +38,8 @@ LIB = librte_kvargs.a
> >  
> >  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_kvargs/rte_kvargs_version.map
> > +
> >  # all source are stored in SRCS-y
> >  SRCS-$(CONFIG_RTE_LIBRTE_KVARGS) := rte_kvargs.c
> >  
> > diff --git a/lib/librte_kvargs/rte_kvargs_version.map b/lib/librte_kvargs/rte_kvargs_version.map
> > new file mode 100644
> > index 0000000..7873c8c
> > --- /dev/null
> > +++ b/lib/librte_kvargs/rte_kvargs_version.map
> > @@ -0,0 +1,10 @@
> > +DPDK_1.8 {
> > +
> > +	global:
> > +	rte_kvargs_parse;
> > +	rte_kvargs_free;
> > +	rte_kvargs_process;
> > +	rte_kvargs_count;
> > +
> > +	local: *;
> > +};
> > diff --git a/lib/librte_lpm/Makefile b/lib/librte_lpm/Makefile
> > index fa94163..05de8d9 100644
> > --- a/lib/librte_lpm/Makefile
> > +++ b/lib/librte_lpm/Makefile
> > @@ -37,6 +37,8 @@ LIB = librte_lpm.a
> >  CFLAGS += -O3
> >  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_lpm/rte_lpm_version.map
> > +
> >  # all source are stored in SRCS-y
> >  SRCS-$(CONFIG_RTE_LIBRTE_LPM) := rte_lpm.c rte_lpm6.c
> >  
> > diff --git a/lib/librte_lpm/rte_lpm_version.map b/lib/librte_lpm/rte_lpm_version.map
> > new file mode 100644
> > index 0000000..8ae9318
> > --- /dev/null
> > +++ b/lib/librte_lpm/rte_lpm_version.map
> > @@ -0,0 +1,24 @@
> > +DPDK_1.8 {
> > +	global:
> > +
> > +	rte_lpm_create;
> > +	rte_lpm_find_existing;
> > +	rte_lpm_free;
> > +	rte_lpm_add;
> > +	rte_lpm_is_rule_present;
> > +	rte_lpm_delete;
> > +	rte_lpm_delete_all;
> > +	rte_lpm6_create;
> > +	rte_lpm6_find_existing;
> > +	rte_lpm6_free;
> > +	rte_lpm6_add;
> > +	rte_lpm6_is_rule_present;
> > +	rte_lpm6_delete;
> > +	rte_lpm6_delete_bulk_func;
> > +	rte_lpm6_delete_all;
> > +	rte_lpm6_lookup;
> > +	rte_lpm6_lookup_bulk_func;
> > +
> > +	local: *;
> > +};
> > +
> > diff --git a/lib/librte_malloc/Makefile b/lib/librte_malloc/Makefile
> > index ba87e34..1a5c288 100644
> > --- a/lib/librte_malloc/Makefile
> > +++ b/lib/librte_malloc/Makefile
> > @@ -36,6 +36,8 @@ LIB = librte_malloc.a
> >  
> >  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_malloc/rte_malloc_version.map
> > +
> >  # all source are stored in SRCS-y
> >  SRCS-$(CONFIG_RTE_LIBRTE_MALLOC) := rte_malloc.c malloc_elem.c malloc_heap.c
> >  
> > diff --git a/lib/librte_malloc/rte_malloc_version.map b/lib/librte_malloc/rte_malloc_version.map
> > new file mode 100644
> > index 0000000..77db879
> > --- /dev/null
> > +++ b/lib/librte_malloc/rte_malloc_version.map
> > @@ -0,0 +1,19 @@
> > +DPDK_1.8 {
> > +	global:
> > +
> > +	rte_malloc;
> > +	rte_zmalloc;
> > +	rte_calloc;
> > +	rte_realloc;
> > +	rte_malloc_socket;
> > +	rte_zmalloc_socket;
> > +	rte_calloc_socket;
> > +	rte_free;
> > +	rte_malloc_validate;
> > +	rte_malloc_get_socket_stats;
> > +	rte_malloc_dump_stats;
> > +	rte_malloc_set_limit;
> > +	rte_malloc_virt2phy;
> > +
> > +	local: *;
> > +};
> > diff --git a/lib/librte_mbuf/Makefile b/lib/librte_mbuf/Makefile
> > index 9b45ba4..5cd4941 100644
> > --- a/lib/librte_mbuf/Makefile
> > +++ b/lib/librte_mbuf/Makefile
> > @@ -36,6 +36,8 @@ LIB = librte_mbuf.a
> >  
> >  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_mbuf/rte_mbuf_version.map
> > +
> >  # all source are stored in SRCS-y
> >  SRCS-$(CONFIG_RTE_LIBRTE_MBUF) := rte_mbuf.c
> >  
> > diff --git a/lib/librte_mbuf/rte_mbuf_version.map b/lib/librte_mbuf/rte_mbuf_version.map
> > new file mode 100644
> > index 0000000..55e352b
> > --- /dev/null
> > +++ b/lib/librte_mbuf/rte_mbuf_version.map
> > @@ -0,0 +1,12 @@
> > +DPDK_1.8 {
> > +	global:
> > +
> > +	rte_mbuf_sanity_check;
> > +	rte_ctrlmbuf_init;
> > +	rte_pktmbuf_init;
> > +	rte_pktmbuf_pool_init;
> > +	rte_pktmbuf_dump;
> > +
> > +	local: *;
> > +};
> > +
> > diff --git a/lib/librte_mempool/Makefile b/lib/librte_mempool/Makefile
> > index 9939e10..07b5b4e 100644
> > --- a/lib/librte_mempool/Makefile
> > +++ b/lib/librte_mempool/Makefile
> > @@ -36,6 +36,8 @@ LIB = librte_mempool.a
> >  
> >  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_mempool/rte_mempool_version.map
> > +
> >  # all source are stored in SRCS-y
> >  SRCS-$(CONFIG_RTE_LIBRTE_MEMPOOL) +=  rte_mempool.c
> >  ifeq ($(CONFIG_RTE_LIBRTE_XEN_DOM0),y)
> > diff --git a/lib/librte_mempool/rte_mempool_version.map b/lib/librte_mempool/rte_mempool_version.map
> > new file mode 100644
> > index 0000000..7a19982
> > --- /dev/null
> > +++ b/lib/librte_mempool/rte_mempool_version.map
> > @@ -0,0 +1,18 @@
> > +DPDK_1.8 {
> > +	global:
> > +
> > +	rte_mempool_create;
> > +	rte_mempool_xmem_create;
> > +	rte_dom0_mempool_create;
> > +	rte_mempool_dump;
> > +	rte_mempool_audit;
> > +	rte_mempool_list_dump;
> > +	rte_mempool_lookup;
> > +	rte_mempool_calc_obj_size;
> > +	rte_mempool_xmem_size;
> > +	rte_mempool_xmem_usage;
> > +	rte_mempool_walk;
> > +	rte_mempool_count;
> > +
> > +	local: *;
> > +};
> > diff --git a/lib/librte_meter/Makefile b/lib/librte_meter/Makefile
> > index b25c0cc..0778690 100644
> > --- a/lib/librte_meter/Makefile
> > +++ b/lib/librte_meter/Makefile
> > @@ -39,6 +39,8 @@ LIB = librte_meter.a
> >  CFLAGS += -O3
> >  CFLAGS += $(WERROR_FLAGS)
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_meter/rte_meter_version.map
> > +
> >  #
> >  # all source are stored in SRCS-y
> >  #
> > diff --git a/lib/librte_meter/rte_meter_version.map b/lib/librte_meter/rte_meter_version.map
> > new file mode 100644
> > index 0000000..51a73b1
> > --- /dev/null
> > +++ b/lib/librte_meter/rte_meter_version.map
> > @@ -0,0 +1,13 @@
> > +DPDK_1.8 {
> > +	global:
> > +
> > +	rte_meter_srtcm_config;
> > +	rte_meter_trtcm_config;
> > +	rte_meter_srtcm_color_blind_check;
> > +	rte_meter_srtcm_color_aware_check;
> > +	rte_meter_trtcm_color_blind_check;
> > +	rte_meter_trtcm_color_aware_check;
> > +
> > +	local: *;
> > +};
> > +
> > diff --git a/lib/librte_pipeline/Makefile b/lib/librte_pipeline/Makefile
> > index cf8fde8..5465d00 100644
> > --- a/lib/librte_pipeline/Makefile
> > +++ b/lib/librte_pipeline/Makefile
> > @@ -39,6 +39,8 @@ LIB = librte_pipeline.a
> >  CFLAGS += -O3
> >  CFLAGS += $(WERROR_FLAGS)
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_pipeline/rte_pipeline_version.map
> > +
> >  #
> >  # all source are stored in SRCS-y
> >  #
> > diff --git a/lib/librte_pipeline/rte_pipeline_version.map b/lib/librte_pipeline/rte_pipeline_version.map
> > new file mode 100644
> > index 0000000..f868b96
> > --- /dev/null
> > +++ b/lib/librte_pipeline/rte_pipeline_version.map
> > @@ -0,0 +1,23 @@
> > +DPDK_1.8 {
> > +	global:
> > +
> > +	rte_pipeline_create;
> > +	rte_pipeline_free;
> > +	rte_pipeline_check;
> > +	rte_pipeline_run;
> > +	rte_pipeline_flush;
> > +	rte_pipeline_table_create;
> > +	rte_pipeline_table_default_entry_add;
> > +	rte_pipeline_table_default_entry_delete;
> > +	rte_pipeline_table_entry_add;
> > +	rte_pipeline_table_entry_delete;
> > +	rte_pipeline_port_in_create;
> > +	rte_pipeline_port_in_connect_to_table;
> > +	rte_pipeline_port_in_enable;
> > +	rte_pipeline_port_in_disable;
> > +	rte_pipeline_port_out_create;
> > +	rte_pipeline_port_out_packet_insert;
> > +
> > +	local: *;
> > +};
> > +
> > diff --git a/lib/librte_pmd_bond/Makefile b/lib/librte_pmd_bond/Makefile
> > index 953d75e..5b14ce2 100644
> > --- a/lib/librte_pmd_bond/Makefile
> > +++ b/lib/librte_pmd_bond/Makefile
> > @@ -39,6 +39,8 @@ LIB = librte_pmd_bond.a
> >  CFLAGS += -O3
> >  CFLAGS += $(WERROR_FLAGS)
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_pmd_bond/rte_eth_bond_version.map
> > +
> >  #
> >  # all source are stored in SRCS-y
> >  #
> > diff --git a/lib/librte_pmd_bond/rte_eth_bond_version.map b/lib/librte_pmd_bond/rte_eth_bond_version.map
> > new file mode 100644
> > index 0000000..17f0a1f
> > --- /dev/null
> > +++ b/lib/librte_pmd_bond/rte_eth_bond_version.map
> > @@ -0,0 +1,20 @@
> > +DPDK_1.8 {
> > +	global:
> > +
> > +	rte_eth_bond_create;
> > +	rte_eth_bond_slave_add;
> > +	rte_eth_bond_slave_remove;
> > +	rte_eth_bond_mode_set;
> > +	rte_eth_bond_mode_get;
> > +	rte_eth_bond_primary_set;
> > +	rte_eth_bond_primary_get;
> > +	rte_eth_bond_slaves_get;
> > +	rte_eth_bond_active_slaves_get;
> > +	rte_eth_bond_mac_address_set;
> > +	rte_eth_bond_mac_address_reset;
> > +	rte_eth_bond_xmit_policy_set;
> > +	rte_eth_bond_xmit_policy_get;
> > +
> > +
> > +	local: *;
> > +};
> > diff --git a/lib/librte_pmd_e1000/Makefile b/lib/librte_pmd_e1000/Makefile
> > index 14bc4a2..e225bfe 100644
> > --- a/lib/librte_pmd_e1000/Makefile
> > +++ b/lib/librte_pmd_e1000/Makefile
> > @@ -39,6 +39,8 @@ LIB = librte_pmd_e1000.a
> >  CFLAGS += -O3
> >  CFLAGS += $(WERROR_FLAGS)
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_pmd_e1000/rte_pmd_e1000_version.map
> > +
> >  ifeq ($(CC), icc)
> >  #
> >  # CFLAGS for icc
> > diff --git a/lib/librte_pmd_e1000/rte_pmd_e1000_version.map b/lib/librte_pmd_e1000/rte_pmd_e1000_version.map
> > new file mode 100644
> > index 0000000..cbc401f
> > --- /dev/null
> > +++ b/lib/librte_pmd_e1000/rte_pmd_e1000_version.map
> > @@ -0,0 +1,5 @@
> > +DPDK_1.8 {
> > +
> > +	local: *;
> > +};
> > +
> > diff --git a/lib/librte_pmd_i40e/Makefile b/lib/librte_pmd_i40e/Makefile
> > index 4b31675..cfbe816 100644
> > --- a/lib/librte_pmd_i40e/Makefile
> > +++ b/lib/librte_pmd_i40e/Makefile
> > @@ -39,6 +39,8 @@ LIB = librte_pmd_i40e.a
> >  CFLAGS += -O3
> >  CFLAGS += $(WERROR_FLAGS)
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_pmd_i40e/rte_pmd_i40e_version.map
> > +
> >  #
> >  # Add extra flags for base driver files (also known as shared code)
> >  # to disable warnings
> > diff --git a/lib/librte_pmd_i40e/rte_pmd_i40e_version.map b/lib/librte_pmd_i40e/rte_pmd_i40e_version.map
> > new file mode 100644
> > index 0000000..cbc401f
> > --- /dev/null
> > +++ b/lib/librte_pmd_i40e/rte_pmd_i40e_version.map
> > @@ -0,0 +1,5 @@
> > +DPDK_1.8 {
> > +
> > +	local: *;
> > +};
> > +
> > diff --git a/lib/librte_pmd_ixgbe/Makefile b/lib/librte_pmd_ixgbe/Makefile
> > index 00ccedb..1dd14a6 100644
> > --- a/lib/librte_pmd_ixgbe/Makefile
> > +++ b/lib/librte_pmd_ixgbe/Makefile
> > @@ -39,6 +39,8 @@ LIB = librte_pmd_ixgbe.a
> >  CFLAGS += -O3
> >  CFLAGS += $(WERROR_FLAGS)
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_pmd_ixgbe/rte_pmd_ixgbe_version.map
> > +
> >  ifeq ($(CC), icc)
> >  #
> >  # CFLAGS for icc
> > diff --git a/lib/librte_pmd_ixgbe/rte_pmd_ixgbe_version.map b/lib/librte_pmd_ixgbe/rte_pmd_ixgbe_version.map
> > new file mode 100644
> > index 0000000..cbc401f
> > --- /dev/null
> > +++ b/lib/librte_pmd_ixgbe/rte_pmd_ixgbe_version.map
> > @@ -0,0 +1,5 @@
> > +DPDK_1.8 {
> > +
> > +	local: *;
> > +};
> > +
> > diff --git a/lib/librte_pmd_pcap/Makefile b/lib/librte_pmd_pcap/Makefile
> > index c5c214d..fff5572 100644
> > --- a/lib/librte_pmd_pcap/Makefile
> > +++ b/lib/librte_pmd_pcap/Makefile
> > @@ -40,6 +40,8 @@ LIB = librte_pmd_pcap.a
> >  CFLAGS += -O3
> >  CFLAGS += $(WERROR_FLAGS)
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_pmd_pcap/rte_pmd_pcap_version.map
> > +
> >  #
> >  # all source are stored in SRCS-y
> >  #
> > diff --git a/lib/librte_pmd_pcap/rte_pmd_pcap_version.map b/lib/librte_pmd_pcap/rte_pmd_pcap_version.map
> > new file mode 100644
> > index 0000000..cbc401f
> > --- /dev/null
> > +++ b/lib/librte_pmd_pcap/rte_pmd_pcap_version.map
> > @@ -0,0 +1,5 @@
> > +DPDK_1.8 {
> > +
> > +	local: *;
> > +};
> > +
> > diff --git a/lib/librte_pmd_ring/Makefile b/lib/librte_pmd_ring/Makefile
> > index b57e421..25ad27f 100644
> > --- a/lib/librte_pmd_ring/Makefile
> > +++ b/lib/librte_pmd_ring/Makefile
> > @@ -39,6 +39,8 @@ LIB = librte_pmd_ring.a
> >  CFLAGS += -O3
> >  CFLAGS += $(WERROR_FLAGS)
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_pmd_ring/rte_eth_ring_version.map
> > +
> >  #
> >  # all source are stored in SRCS-y
> >  #
> > diff --git a/lib/librte_pmd_ring/rte_eth_ring.c b/lib/librte_pmd_ring/rte_eth_ring.c
> > index 4f1b6ed..df7b583 100644
> > --- a/lib/librte_pmd_ring/rte_eth_ring.c
> > +++ b/lib/librte_pmd_ring/rte_eth_ring.c
> > @@ -473,7 +473,7 @@ out:
> >  	return ret;
> >  }
> >  
> > -int
> > +static int
> >  rte_pmd_ring_devinit(const char *name, const char *params)
> >  {
> >  	struct rte_kvargs *kvlist;
> > diff --git a/lib/librte_pmd_ring/rte_eth_ring.h b/lib/librte_pmd_ring/rte_eth_ring.h
> > index e6ae19e..d36489a 100644
> > --- a/lib/librte_pmd_ring/rte_eth_ring.h
> > +++ b/lib/librte_pmd_ring/rte_eth_ring.h
> > @@ -50,12 +50,6 @@ int rte_eth_from_rings(const char *name,
> >  int rte_eth_ring_pair_create(const char *name, const unsigned numa_node);
> >  int rte_eth_ring_pair_attach(const char *name, const unsigned numa_node);
> >  
> > -/**
> > - * For use by test apps only. Called as part of EAL init to set up any dummy NICs
> > - * configured on command line.
> > - */
> > -int rte_pmd_ring_devinit(const char *name, const char *params);
> > -
> >  #ifdef __cplusplus
> >  }
> >  #endif
> > diff --git a/lib/librte_pmd_ring/rte_eth_ring_version.map b/lib/librte_pmd_ring/rte_eth_ring_version.map
> > new file mode 100644
> > index 0000000..5edaa3d
> > --- /dev/null
> > +++ b/lib/librte_pmd_ring/rte_eth_ring_version.map
> > @@ -0,0 +1,10 @@
> > +DPDK_1.8 {
> > +
> > +	global:
> > +
> > +	rte_eth_from_rings;
> > +	rte_eth_ring_pair_create;
> > +	rte_eth_ring_pair_attach;
> > +
> > +	local: *;
> > +};
> > diff --git a/lib/librte_pmd_virtio/Makefile b/lib/librte_pmd_virtio/Makefile
> > index 456095b..bf51bd9 100644
> > --- a/lib/librte_pmd_virtio/Makefile
> > +++ b/lib/librte_pmd_virtio/Makefile
> > @@ -39,6 +39,7 @@ LIB = librte_pmd_virtio_uio.a
> >  CFLAGS += -O3
> >  CFLAGS += $(WERROR_FLAGS)
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_pmd_virtio/rte_pmd_virtio_version.map
> >  
> >  #
> >  # all source are stored in SRCS-y
> > diff --git a/lib/librte_pmd_virtio/rte_pmd_virtio_version.map b/lib/librte_pmd_virtio/rte_pmd_virtio_version.map
> > new file mode 100644
> > index 0000000..cbc401f
> > --- /dev/null
> > +++ b/lib/librte_pmd_virtio/rte_pmd_virtio_version.map
> > @@ -0,0 +1,5 @@
> > +DPDK_1.8 {
> > +
> > +	local: *;
> > +};
> > +
> > diff --git a/lib/librte_pmd_vmxnet3/Makefile b/lib/librte_pmd_vmxnet3/Makefile
> > index 6872c74..e5a1c6b 100644
> > --- a/lib/librte_pmd_vmxnet3/Makefile
> > +++ b/lib/librte_pmd_vmxnet3/Makefile
> > @@ -66,6 +66,8 @@ endif
> >  
> >  VPATH += $(RTE_SDK)/lib/librte_pmd_vmxnet3/vmxnet3
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_pmd_vmxnet3/rte_pmd_vmxnet3_version.map
> > +
> >  #
> >  # all source are stored in SRCS-y
> >  #
> > diff --git a/lib/librte_pmd_vmxnet3/rte_pmd_vmxnet3_version.map b/lib/librte_pmd_vmxnet3/rte_pmd_vmxnet3_version.map
> > new file mode 100644
> > index 0000000..cbc401f
> > --- /dev/null
> > +++ b/lib/librte_pmd_vmxnet3/rte_pmd_vmxnet3_version.map
> > @@ -0,0 +1,5 @@
> > +DPDK_1.8 {
> > +
> > +	local: *;
> > +};
> > +
> > diff --git a/lib/librte_pmd_xenvirt/Makefile b/lib/librte_pmd_xenvirt/Makefile
> > index 01bfcaa..0a08b1b 100644
> > --- a/lib/librte_pmd_xenvirt/Makefile
> > +++ b/lib/librte_pmd_xenvirt/Makefile
> > @@ -39,6 +39,8 @@ LIB = librte_pmd_xenvirt.a
> >  CFLAGS += -O3
> >  CFLAGS += $(WERROR_FLAGS)
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_pmd_xenvirt/rte_eth_xenvirt_version.map
> > +
> >  #
> >  # all source are stored in SRCS-y
> >  #
> > diff --git a/lib/librte_pmd_xenvirt/rte_eth_xenvirt_version.map b/lib/librte_pmd_xenvirt/rte_eth_xenvirt_version.map
> > new file mode 100644
> > index 0000000..66199b1
> > --- /dev/null
> > +++ b/lib/librte_pmd_xenvirt/rte_eth_xenvirt_version.map
> > @@ -0,0 +1,8 @@
> > +DPDK_1.8 {
> > +	global:
> > +
> > +	rte_mempool_gntalloc_create;
> > +
> > +	local: *;
> > +};
> > +
> > diff --git a/lib/librte_port/Makefile b/lib/librte_port/Makefile
> > index 28793a5..e812bda 100644
> > --- a/lib/librte_port/Makefile
> > +++ b/lib/librte_port/Makefile
> > @@ -39,6 +39,8 @@ LIB = librte_port.a
> >  CFLAGS += -O3
> >  CFLAGS += $(WERROR_FLAGS)
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_port/rte_port_version.map
> > +
> >  #
> >  # all source are stored in SRCS-y
> >  #
> > diff --git a/lib/librte_port/rte_port_version.map b/lib/librte_port/rte_port_version.map
> > new file mode 100644
> > index 0000000..57ccaa3
> > --- /dev/null
> > +++ b/lib/librte_port/rte_port_version.map
> > @@ -0,0 +1,18 @@
> > +DPDK_1.8 {
> > +	global:
> > +	rte_port_ring_reader_ops;
> > +	rte_port_ring_writer_ops;
> > +	rte_port_ethdev_reader_ops;
> > +	rte_port_ethdev_writer_ops;
> > +	rte_port_ring_reader_ipv4_frag_ops;
> > +	rte_port_ring_writer_ipv4_ras_ops;
> > +	rte_port_ring_reader_ops;
> > +	rte_port_ring_writer_ops;
> > +	rte_port_sched_reader_ops;
> > +	rte_port_sched_writer_ops;
> > +	rte_port_source_ops;
> > +	rte_port_sink_ops;
> > +
> > +	local: *;
> > +};
> > +
> > diff --git a/lib/librte_power/Makefile b/lib/librte_power/Makefile
> > index 6185812..26ee542 100644
> > --- a/lib/librte_power/Makefile
> > +++ b/lib/librte_power/Makefile
> > @@ -36,6 +36,8 @@ LIB = librte_power.a
> >  
> >  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3 -fno-strict-aliasing
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_power/rte_power_version.map
> > +
> >  # all source are stored in SRCS-y
> >  SRCS-$(CONFIG_RTE_LIBRTE_POWER) := rte_power.c
> >  
> > diff --git a/lib/librte_power/rte_power_version.map b/lib/librte_power/rte_power_version.map
> > new file mode 100644
> > index 0000000..3b2375a
> > --- /dev/null
> > +++ b/lib/librte_power/rte_power_version.map
> > @@ -0,0 +1,14 @@
> > +DPDK_1.8 {
> > +	global:
> > +	rte_power_init;
> > +	rte_power_exit;
> > +	rte_power_freqs;
> > +	rte_power_get_freq;
> > +	rte_power_set_freq;
> > +	rte_power_freq_up;
> > +	rte_power_freq_down;
> > +	rte_power_freq_max;
> > +	rte_power_freq_min;
> > +
> > +	local: *;
> > +};
> > diff --git a/lib/librte_ring/Makefile b/lib/librte_ring/Makefile
> > index 2380a43..0adaa00 100644
> > --- a/lib/librte_ring/Makefile
> > +++ b/lib/librte_ring/Makefile
> > @@ -36,6 +36,8 @@ LIB = librte_ring.a
> >  
> >  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_ring/rte_ring_version.map
> > +
> >  # all source are stored in SRCS-y
> >  SRCS-$(CONFIG_RTE_LIBRTE_RING) := rte_ring.c
> >  
> > diff --git a/lib/librte_ring/rte_ring_version.map b/lib/librte_ring/rte_ring_version.map
> > new file mode 100644
> > index 0000000..6c28af9
> > --- /dev/null
> > +++ b/lib/librte_ring/rte_ring_version.map
> > @@ -0,0 +1,12 @@
> > +DPDK_1.8 {
> > +	global:
> > +	rte_ring_get_memsize;
> > +	rte_ring_init;
> > +	rte_ring_create;
> > +	rte_ring_set_water_mark;
> > +	rte_ring_dump;
> > +	rte_ring_list_dump;
> > +	rte_ring_lookup;
> > +
> > +	local: *;
> > +};
> > diff --git a/lib/librte_sched/Makefile b/lib/librte_sched/Makefile
> > index 1a25b21..205fb7a 100644
> > --- a/lib/librte_sched/Makefile
> > +++ b/lib/librte_sched/Makefile
> > @@ -41,6 +41,8 @@ CFLAGS += $(WERROR_FLAGS)
> >  
> >  CFLAGS_rte_red.o := -D_GNU_SOURCE
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_sched/rte_sched_version.map
> > +
> >  #
> >  # all source are stored in SRCS-y
> >  #
> > diff --git a/lib/librte_sched/rte_sched_version.map b/lib/librte_sched/rte_sched_version.map
> > new file mode 100644
> > index 0000000..b5877ce
> > --- /dev/null
> > +++ b/lib/librte_sched/rte_sched_version.map
> > @@ -0,0 +1,22 @@
> > +DPDK_1.8 {
> > +	global:
> > +
> > +	rte_approx;
> > +	rte_red_rt_data_init;
> > +	rte_red_config_init;
> > +	rte_sched_port_config;
> > +	rte_sched_port_free;
> > +	rte_sched_subport_config;
> > +	rte_sched_pipe_config;
> > +	rte_sched_port_get_memory_footprint;
> > +	rte_sched_subport_read_stats;
> > +	rte_sched_queue_read_stats;
> > +	rte_sched_port_enqueue;
> > +	rte_sched_port_dequeue;
> > +	rte_red_log2_1_minus_Wq;
> > +	rte_red_pow2_frac_inv;
> > +	rte_red_rand_val;
> > +	rte_red_rand_seed;
> > +
> > +	local: *;
> > +};
> > diff --git a/lib/librte_table/Makefile b/lib/librte_table/Makefile
> > index dd684cc..5b54acc 100644
> > --- a/lib/librte_table/Makefile
> > +++ b/lib/librte_table/Makefile
> > @@ -39,6 +39,8 @@ LIB = librte_table.a
> >  CFLAGS += -O3
> >  CFLAGS += $(WERROR_FLAGS)
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_table/rte_table_version.map
> > +
> >  #
> >  # all source are stored in SRCS-y
> >  #
> > diff --git a/lib/librte_table/rte_table_version.map b/lib/librte_table/rte_table_version.map
> > new file mode 100644
> > index 0000000..86f16b8
> > --- /dev/null
> > +++ b/lib/librte_table/rte_table_version.map
> > @@ -0,0 +1,22 @@
> > +DPDK_1.8 {
> > +	global:
> > +
> > +	rte_table_stub_ops;
> > +	rte_table_lpm_ops;
> > +	rte_table_array_ops;
> > +	rte_table_hash_key8_lru_ops;
> > +	rte_table_hash_key8_lru_dosig_ops;
> > +	rte_table_hash_key8_ext_ops;
> > +	rte_table_hash_key8_ext_dosig_ops;
> > +	rte_table_lpm_ipv6_ops;
> > +	rte_table_hash_key16_lru_ops;
> > +	rte_table_hash_key32_lru_ops;
> > +	rte_table_hash_key16_ext_ops;
> > +	rte_table_hash_key32_ext_ops;
> > +	rte_table_acl_ops;
> > +	rte_table_hash_lru_ops;
> > +	rte_table_hash_ext_ops;
> > +
> > +	local: *;
> > +};
> > +
> > diff --git a/lib/librte_timer/Makefile b/lib/librte_timer/Makefile
> > index 07eb0c6..f703e5f 100644
> > --- a/lib/librte_timer/Makefile
> > +++ b/lib/librte_timer/Makefile
> > @@ -36,6 +36,8 @@ LIB = librte_timer.a
> >  
> >  CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
> >  
> > +EXPORT_MAP := $(RTE_SDK)/lib/librte_timer/rte_timer_version.map
> > +
> >  # all source are stored in SRCS-y
> >  SRCS-$(CONFIG_RTE_LIBRTE_TIMER) := rte_timer.c
> >  
> > diff --git a/lib/librte_timer/rte_timer_version.map b/lib/librte_timer/rte_timer_version.map
> > new file mode 100644
> > index 0000000..00b6b52
> > --- /dev/null
> > +++ b/lib/librte_timer/rte_timer_version.map
> > @@ -0,0 +1,16 @@
> > +DPDK_1.8 {
> > +	global:
> > +
> > +	rte_timer_subsystem_init;
> > +	rte_timer_init;
> > +	rte_timer_reset;
> > +	rte_timer_reset_sync;
> > +	rte_timer_stop;
> > +	rte_timer_stop_sync;
> > +	rte_timer_pending;
> > +	rte_timer_manage;
> > +	rte_timer_dump_stats;
> > +
> > +	local: *;
> > +};
> > +
> > -- 
> > 1.9.3
> > 
> 
> May need to update some of the version maps with new functions in head.
> 
I'm certain we will, but thats a trivial matter once this is integrated.
Neil

> Acked-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
>
  

Patch

diff --git a/lib/librte_acl/Makefile b/lib/librte_acl/Makefile
index 65e566d..1f96645 100644
--- a/lib/librte_acl/Makefile
+++ b/lib/librte_acl/Makefile
@@ -37,6 +37,8 @@  LIB = librte_acl.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_acl/rte_acl_version.map
+
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_ACL) += tb_mem.c
 
diff --git a/lib/librte_acl/rte_acl_version.map b/lib/librte_acl/rte_acl_version.map
new file mode 100644
index 0000000..4480690
--- /dev/null
+++ b/lib/librte_acl/rte_acl_version.map
@@ -0,0 +1,19 @@ 
+DPDK_1.8 {
+	global:
+	rte_acl_create;
+	rte_acl_find_existing;
+	rte_acl_free;
+	rte_acl_add_rules;
+	rte_acl_reset_rules;
+	rte_acl_build;
+	rte_acl_reset;
+	rte_acl_classify;
+	rte_acl_dump;
+	rte_acl_list_dump;
+	rte_acl_ipv4vlan_add_rules;
+	rte_acl_ipv4vlan_build;
+	rte_acl_classify_scalar;
+
+	local: *;
+};
+
diff --git a/lib/librte_cfgfile/Makefile b/lib/librte_cfgfile/Makefile
index 55e8701..e655098 100644
--- a/lib/librte_cfgfile/Makefile
+++ b/lib/librte_cfgfile/Makefile
@@ -39,6 +39,8 @@  LIB = librte_cfgfile.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_cfgfile/rte_cfgfile_version.map
+
 #
 # all source are stored in SRCS-y
 #
diff --git a/lib/librte_cfgfile/rte_cfgfile_version.map b/lib/librte_cfgfile/rte_cfgfile_version.map
new file mode 100644
index 0000000..10ecea6
--- /dev/null
+++ b/lib/librte_cfgfile/rte_cfgfile_version.map
@@ -0,0 +1,14 @@ 
+DPDK_1.8 {
+	global:
+	rte_cfgfile_load;
+	rte_cfgfile_num_sections;
+	rte_cfgfile_sections;
+	rte_cfgfile_has_section;
+	rte_cfgfile_section_num_entries;
+	rte_cfgfile_section_entries;
+	rte_cfgfile_get_entry;
+	rte_cfgfile_has_entry;
+	rte_cfgfile_close;
+
+	local: *;
+};
diff --git a/lib/librte_cmdline/Makefile b/lib/librte_cmdline/Makefile
index 7eae449..1a47173 100644
--- a/lib/librte_cmdline/Makefile
+++ b/lib/librte_cmdline/Makefile
@@ -36,6 +36,8 @@  LIB = librte_cmdline.a
 
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_cmdline/rte_cmdline_version.map
+
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_CMDLINE) := cmdline.c
 SRCS-$(CONFIG_RTE_LIBRTE_CMDLINE) += cmdline_cirbuf.c
diff --git a/lib/librte_cmdline/rte_cmdline_version.map b/lib/librte_cmdline/rte_cmdline_version.map
new file mode 100644
index 0000000..7616eff
--- /dev/null
+++ b/lib/librte_cmdline/rte_cmdline_version.map
@@ -0,0 +1,69 @@ 
+DPDK_1.8 {
+	global:
+	cmdline_new;
+	cmdline_set_prompt;
+	cmdline_free;
+	cmdline_printf;
+	cmdline_in;
+	cmdline_write_char;
+	cmdline_interact;
+	cmdline_quit;
+	cmdline_parse;
+	cmdline_complete;
+	cmdline_isendoftoken;
+	cmdline_parse_num;
+	cmdline_get_help_num;
+	cmdline_parse_ipaddr;
+	cmdline_get_help_ipaddr;
+	cmdline_parse_etheraddr;
+	cmdline_get_help_etheraddr;
+	cmdline_parse_string;
+	cmdline_complete_get_nb_string;
+	cmdline_complete_get_elt_string;
+	cmdline_get_help_string;
+	cmdline_parse_portlist;
+	cmdline_get_help_portlist;
+	cmdline_token_string_ops;
+	cmdline_token_num_ops;
+	cmdline_token_string_ops;
+	cmdline_token_ipaddr_ops;
+	cmdline_token_etheraddr_ops;
+	vt100_init;
+	vt100_parser;
+	cmdline_file_new;
+	cmdline_stdin_new;
+	cmdline_stdin_exit;
+	cirbuf_init;
+	cirbuf_add_head_safe;
+	cirbuf_add_head;
+	cirbuf_add_tail_safe;
+	cirbuf_add_tail;
+	cirbuf_del_head_safe;
+	cirbuf_del_head;
+	cirbuf_del_tail_safe;
+	cirbuf_del_tail;
+	cirbuf_get_head;
+	cirbuf_get_tail;
+	cirbuf_add_buf_head;
+	cirbuf_add_buf_tail;
+	cirbuf_del_buf_head;
+	cirbuf_del_buf_tail;
+	cirbuf_get_buf_head;
+	cirbuf_get_buf_tail;
+	cirbuf_align_left;
+	cirbuf_align_right;
+	rdline_init;
+	rdline_newline;
+	rdline_stop;
+	rdline_quit;
+	rdline_restart;
+	rdline_redisplay;
+	rdline_reset;
+	rdline_char_in;
+	rdline_get_buffer;
+	rdline_add_history;
+	rdline_clear_history;
+	rdline_get_history_item;
+
+	local: *;
+};
diff --git a/lib/librte_distributor/Makefile b/lib/librte_distributor/Makefile
index 36699f8..97d8bbb 100644
--- a/lib/librte_distributor/Makefile
+++ b/lib/librte_distributor/Makefile
@@ -37,6 +37,8 @@  LIB = librte_distributor.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_distributor/rte_distributor_version.map
+
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_DISTRIBUTOR) := rte_distributor.c
 
diff --git a/lib/librte_distributor/rte_distributor_version.map b/lib/librte_distributor/rte_distributor_version.map
new file mode 100644
index 0000000..b81ddc8
--- /dev/null
+++ b/lib/librte_distributor/rte_distributor_version.map
@@ -0,0 +1,16 @@ 
+DPDK_1.8 {
+
+	global:
+	rte_distributor_create;
+	rte_distributor_process;
+	rte_distributor_returned_pkts;
+	rte_distributor_flush;
+	rte_distributor_clear_returns;
+	rte_distributor_get_pkt;
+	rte_distributor_return_pkt;
+	rte_distributor_request_pkt;
+	rte_distributor_poll_pkt;
+
+	local: *;
+};
+
diff --git a/lib/librte_eal/bsdapp/eal/Makefile b/lib/librte_eal/bsdapp/eal/Makefile
index 8f44273..2caaf00 100644
--- a/lib/librte_eal/bsdapp/eal/Makefile
+++ b/lib/librte_eal/bsdapp/eal/Makefile
@@ -45,6 +45,8 @@  CFLAGS += -I$(RTE_SDK)/lib/librte_pmd_ring
 CFLAGS += -I$(RTE_SDK)/lib/librte_pmd_pcap
 CFLAGS += $(WERROR_FLAGS) -O3
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_eal/bsdapp/eal/rte_eal_version.map
+
 # specific to linuxapp exec-env
 SRCS-$(CONFIG_RTE_LIBRTE_EAL_BSDAPP) := eal.c
 SRCS-$(CONFIG_RTE_LIBRTE_EAL_BSDAPP) += eal_memory.c
diff --git a/lib/librte_eal/bsdapp/eal/rte_eal_version.map b/lib/librte_eal/bsdapp/eal/rte_eal_version.map
new file mode 100644
index 0000000..71788e1
--- /dev/null
+++ b/lib/librte_eal/bsdapp/eal/rte_eal_version.map
@@ -0,0 +1,89 @@ 
+DPDK_1.8 {
+	global:
+	rte_eal_alarm_set;
+	rte_eal_alarm_cancel;
+	rte_exit;
+	rte_cpu_get_flag_enabled;
+	rte_cpu_check_supported;
+	rte_get_tsc_hz;
+	rte_get_hpet_cycles;
+	rte_get_hpet_hz;
+	rte_eal_hpet_init;
+	rte_delay_us;
+	rte_dump_stack;
+	rte_dump_registers;
+	__rte_panic;
+	rte_eal_devargs_add;
+	rte_eal_devargs_type_count;
+	rte_eal_devargs_dump;
+	rte_eal_driver_register;
+	rte_eal_driver_unregister;
+	rte_eal_dev_init;
+	rte_eal_init;
+	rte_set_application_usage_hook;
+	rte_eal_has_hugepages;
+	rte_strerror;
+	rte_hexdump;
+	rte_memdump;
+	rte_intr_callback_register;
+	rte_intr_callback_unregister;
+	rte_intr_enable;
+	rte_intr_disable;
+	rte_eal_remote_launch;
+	rte_eal_mp_remote_launch;
+	rte_eal_get_lcore_state;
+	rte_eal_wait_lcore;
+	rte_eal_mp_wait_lcore;
+	rte_openlog_stream;
+	rte_set_log_level;
+	rte_set_log_type;
+	rte_log_cur_msg_loglevel;
+	rte_log_cur_msg_logtype;
+	rte_log_set_history;
+	rte_log_dump_history;
+	rte_log_add_in_history;
+	rte_log;
+	rte_vlog;
+	rte_mem_lock_page;
+	rte_mem_virt2phy;
+	rte_eal_get_physmem_layout;
+	rte_dump_physmem_layout;
+	rte_eal_get_physmem_size;
+	rte_memory_get_nchannel;
+	rte_memory_get_nrank;
+	rte_mem_phy2mch;
+	rte_xen_dom0_memory_init;
+	rte_xen_dom0_memory_attach;
+	rte_memzone_reserve;
+	rte_memzone_reserve_aligned;
+	rte_memzone_reserve_bounded;
+	rte_memzone_lookup;
+	rte_memzone_dump;
+	rte_memzone_walk;
+	rte_eal_pci_probe;
+	rte_eal_pci_dump;
+	rte_eal_pci_register;
+	rte_eal_pci_unregister;
+	rte_snprintf;
+	rte_strsplit;
+	rte_eal_tailq_reserve;
+	rte_eal_tailq_reserve_by_idx;
+	rte_dump_tailq;
+	rte_eal_tailq_lookup;
+	rte_eal_tailq_lookup_by_idx;
+	lcore_config;
+	per_lcore__lcore_id;
+	eal_timer_source;
+	rte_cycles_vmware_tsc_map;
+	rte_eal_get_configuration;
+	rte_logs;
+	rte_eal_lcore_role;
+	test_mp_secondary;
+	rte_eal_process_type;
+	per_lcore__rte_errno;
+	pci_device_list;
+	devargs_list;
+	eal_parse_sysfs_value;
+
+	local: *;
+};
diff --git a/lib/librte_eal/linuxapp/eal/Makefile b/lib/librte_eal/linuxapp/eal/Makefile
index 756d6b0..254d59c 100644
--- a/lib/librte_eal/linuxapp/eal/Makefile
+++ b/lib/librte_eal/linuxapp/eal/Makefile
@@ -33,6 +33,8 @@  include $(RTE_SDK)/mk/rte.vars.mk
 
 LIB = librte_eal.a
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_eal/linuxapp/eal/rte_eal_version.map
+
 VPATH += $(RTE_SDK)/lib/librte_eal/common
 
 CFLAGS += -I$(SRCDIR)/include
diff --git a/lib/librte_eal/linuxapp/eal/rte_eal_version.map b/lib/librte_eal/linuxapp/eal/rte_eal_version.map
new file mode 100644
index 0000000..71788e1
--- /dev/null
+++ b/lib/librte_eal/linuxapp/eal/rte_eal_version.map
@@ -0,0 +1,89 @@ 
+DPDK_1.8 {
+	global:
+	rte_eal_alarm_set;
+	rte_eal_alarm_cancel;
+	rte_exit;
+	rte_cpu_get_flag_enabled;
+	rte_cpu_check_supported;
+	rte_get_tsc_hz;
+	rte_get_hpet_cycles;
+	rte_get_hpet_hz;
+	rte_eal_hpet_init;
+	rte_delay_us;
+	rte_dump_stack;
+	rte_dump_registers;
+	__rte_panic;
+	rte_eal_devargs_add;
+	rte_eal_devargs_type_count;
+	rte_eal_devargs_dump;
+	rte_eal_driver_register;
+	rte_eal_driver_unregister;
+	rte_eal_dev_init;
+	rte_eal_init;
+	rte_set_application_usage_hook;
+	rte_eal_has_hugepages;
+	rte_strerror;
+	rte_hexdump;
+	rte_memdump;
+	rte_intr_callback_register;
+	rte_intr_callback_unregister;
+	rte_intr_enable;
+	rte_intr_disable;
+	rte_eal_remote_launch;
+	rte_eal_mp_remote_launch;
+	rte_eal_get_lcore_state;
+	rte_eal_wait_lcore;
+	rte_eal_mp_wait_lcore;
+	rte_openlog_stream;
+	rte_set_log_level;
+	rte_set_log_type;
+	rte_log_cur_msg_loglevel;
+	rte_log_cur_msg_logtype;
+	rte_log_set_history;
+	rte_log_dump_history;
+	rte_log_add_in_history;
+	rte_log;
+	rte_vlog;
+	rte_mem_lock_page;
+	rte_mem_virt2phy;
+	rte_eal_get_physmem_layout;
+	rte_dump_physmem_layout;
+	rte_eal_get_physmem_size;
+	rte_memory_get_nchannel;
+	rte_memory_get_nrank;
+	rte_mem_phy2mch;
+	rte_xen_dom0_memory_init;
+	rte_xen_dom0_memory_attach;
+	rte_memzone_reserve;
+	rte_memzone_reserve_aligned;
+	rte_memzone_reserve_bounded;
+	rte_memzone_lookup;
+	rte_memzone_dump;
+	rte_memzone_walk;
+	rte_eal_pci_probe;
+	rte_eal_pci_dump;
+	rte_eal_pci_register;
+	rte_eal_pci_unregister;
+	rte_snprintf;
+	rte_strsplit;
+	rte_eal_tailq_reserve;
+	rte_eal_tailq_reserve_by_idx;
+	rte_dump_tailq;
+	rte_eal_tailq_lookup;
+	rte_eal_tailq_lookup_by_idx;
+	lcore_config;
+	per_lcore__lcore_id;
+	eal_timer_source;
+	rte_cycles_vmware_tsc_map;
+	rte_eal_get_configuration;
+	rte_logs;
+	rte_eal_lcore_role;
+	test_mp_secondary;
+	rte_eal_process_type;
+	per_lcore__rte_errno;
+	pci_device_list;
+	devargs_list;
+	eal_parse_sysfs_value;
+
+	local: *;
+};
diff --git a/lib/librte_ether/Makefile b/lib/librte_ether/Makefile
index b310f8b..f40b5cc 100644
--- a/lib/librte_ether/Makefile
+++ b/lib/librte_ether/Makefile
@@ -39,6 +39,8 @@  LIB = libethdev.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_ether/rte_ether_version.map
+
 SRCS-y += rte_ethdev.c
 
 #
diff --git a/lib/librte_ether/rte_ether_version.map b/lib/librte_ether/rte_ether_version.map
new file mode 100644
index 0000000..41952ab
--- /dev/null
+++ b/lib/librte_ether/rte_ether_version.map
@@ -0,0 +1,108 @@ 
+DPDK_1.8 {
+	global:
+	rte_eth_driver_register;
+	rte_eth_dev_configure;
+	rte_eth_rx_queue_setup;
+	rte_eth_tx_queue_setup;
+	rte_eth_dev_socket_id;
+	rte_eth_dev_rx_queue_start;
+	rte_eth_dev_rx_queue_stop;
+	rte_eth_dev_tx_queue_start;
+	rte_eth_dev_tx_queue_stop;
+	rte_eth_dev_start;
+	rte_eth_dev_stop;
+	rte_eth_dev_set_link_up;
+	rte_eth_dev_set_link_down;
+	rte_eth_dev_close;
+	rte_eth_promiscuous_enable;
+	rte_eth_promiscuous_disable;
+	rte_eth_promiscuous_get;
+	rte_eth_allmulticast_enable;
+	rte_eth_allmulticast_disable;
+	rte_eth_allmulticast_get;
+	rte_eth_link;
+	rte_eth_link_get_nowait;
+	rte_eth_stats;
+	rte_eth_stats_reset;
+	rte_eth_dev_set_tx_queue_stats_mapping;
+	rte_eth_dev_set_rx_queue_stats_mapping;
+	rte_eth_macaddr_get;
+	rte_eth_dev_info_get;
+	rte_eth_dev_get_mtu;
+	rte_eth_dev_set_mtu;
+	rte_eth_dev_vlan_filter;
+	rte_eth_dev_set_vlan_strip_on_queue;
+	rte_eth_dev_set_vlan_ether_type;
+	rte_eth_dev_set_vlan_offload;
+	rte_eth_dev_get_vlan_offload;
+	rte_eth_dev_set_vlan_pvid;
+	rte_eth_rx_burst;
+	rte_eth_rx_queue_count;
+	rte_eth_rx_descriptor_done;
+	rte_eth_tx_burst;
+	rte_eth_dev_fdir_add_signature_filter;
+	rte_eth_dev_fdir_update_signature_filter;
+	rte_eth_dev_fdir_remove_signature_filter;
+	rte_eth_dev_fdir_get_infos;
+	rte_eth_dev_fdir_add_perfect_filter;
+	rte_eth_dev_fdir_update_perfect_filter;
+	rte_eth_dev_fdir_remove_perfect_filter;
+	rte_eth_dev_fdir_set_masks;
+	rte_eth_dev_callback_register;
+	rte_eth_dev_callback_unregister;
+	rte_eth_dev_callback_process;
+	rte_eth_led_on;
+	rte_eth_led_off;
+	rte_eth_dev_flow_ctrl_get;
+	rte_eth_dev_flow_ctrl_set;
+	rte_eth_dev_priority_flow_ctrl_set;
+	rte_eth_dev_mac_addr_add;
+	rte_eth_dev_mac_addr_remove;
+	rte_eth_dev_rss_reta_update;
+	rte_eth_dev_rss_reta_query;
+	rte_eth_dev_uc_hash_table_set;
+	rte_eth_dev_uc_all_hash_table_set;
+	rte_eth_dev_set_vf_rxmode;
+	rte_eth_dev_set_vf_tx;
+	rte_eth_dev_set_vf_rx;
+	rte_eth_dev_set_vf_vlan_filter;
+	rte_eth_mirror_rule_set;
+	rte_eth_mirror_rule_reset;
+	rte_eth_set_queue_rate_limit;
+	rte_eth_set_vf_rate_limit;
+	rte_eth_dev_bypass_init;
+	rte_eth_dev_bypass_state_show;
+	rte_eth_dev_bypass_state_set;
+	rte_eth_dev_bypass_event_show;
+	rte_eth_dev_bypass_event_store;
+	rte_eth_dev_wd_timeout_store;
+	rte_eth_dev_bypass_ver_show;
+	rte_eth_dev_bypass_wd_timeout_show;
+	rte_eth_dev_bypass_wd_reset;
+	rte_eth_dev_rss_hash_update;
+	rte_eth_dev_rss_hash_conf_get;
+	rte_eth_dev_add_syn_filter;
+	rte_eth_dev_remove_syn_filter;
+	rte_eth_dev_get_syn_filter;
+	rte_eth_dev_add_ethertype_filter;
+	rte_eth_dev_remove_ethertype_filter;
+	rte_eth_dev_get_ethertype_filter;
+	rte_eth_dev_add_2tuple_filter;
+	rte_eth_dev_remove_2tuple_filter;
+	rte_eth_dev_get_2tuple_filter;
+	rte_eth_dev_add_5tuple_filter;
+	rte_eth_dev_remove_5tuple_filter;
+	rte_eth_dev_get_5tuple_filter;
+	rte_eth_dev_add_flex_filter;
+	rte_eth_dev_remove_flex_filter;
+	rte_eth_dev_get_flex_filter;
+	rte_eth_dev_count;
+	rte_eth_link_get;
+	rte_eth_devices;
+	rte_eth_stats_get;
+	rte_eth_dev_allocate;
+	_rte_eth_dev_callback_process;
+
+	local: *;
+};
+
diff --git a/lib/librte_hash/Makefile b/lib/librte_hash/Makefile
index 95e4c09..a449ec2 100644
--- a/lib/librte_hash/Makefile
+++ b/lib/librte_hash/Makefile
@@ -37,6 +37,8 @@  LIB = librte_hash.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_hash/rte_hash_version.map
+
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_HASH) := rte_hash.c
 SRCS-$(CONFIG_RTE_LIBRTE_HASH) += rte_fbk_hash.c
diff --git a/lib/librte_hash/rte_hash_version.map b/lib/librte_hash/rte_hash_version.map
new file mode 100644
index 0000000..2a34313
--- /dev/null
+++ b/lib/librte_hash/rte_hash_version.map
@@ -0,0 +1,18 @@ 
+DPDK_1.8 {
+	global:
+	rte_fbk_hash_find_existing;
+	rte_fbk_hash_create;
+	rte_fbk_hash_free;
+	rte_hash_create;
+	rte_hash_find_existing;
+	rte_hash_free;
+	rte_hash_add_key;
+	rte_hash_add_key_with_hash;
+	rte_hash_del_key;
+	rte_hash_del_key_with_hash;
+	rte_hash_lookup;
+	rte_hash_lookup_with_hash;
+	rte_hash_lookup_bulk;
+
+	local: *;
+};
diff --git a/lib/librte_ip_frag/Makefile b/lib/librte_ip_frag/Makefile
index 2265c93..ede5a89 100644
--- a/lib/librte_ip_frag/Makefile
+++ b/lib/librte_ip_frag/Makefile
@@ -37,6 +37,8 @@  LIB = librte_ip_frag.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_ip_frag/rte_ipfrag_version.map
+
 #source files
 SRCS-$(CONFIG_RTE_LIBRTE_IP_FRAG) += rte_ipv4_fragmentation.c
 SRCS-$(CONFIG_RTE_LIBRTE_IP_FRAG) += rte_ipv4_reassembly.c
diff --git a/lib/librte_ip_frag/rte_ipfrag_version.map b/lib/librte_ip_frag/rte_ipfrag_version.map
new file mode 100644
index 0000000..afe1a0b
--- /dev/null
+++ b/lib/librte_ip_frag/rte_ipfrag_version.map
@@ -0,0 +1,14 @@ 
+DPDK_1.8 {
+	global:
+
+	rte_ip_frag_table_create;
+	rte_ipv6_fragment_packet;
+	rte_ipv6_frag_reassemble_packet;
+	rte_ipv4_fragment_packet;
+	rte_ipv4_frag_reassemble_packet;
+	rte_ip_frag_free_death_row;
+	rte_ip_frag_table_statistics_dump;
+
+	local: *;
+};
+
diff --git a/lib/librte_ivshmem/Makefile b/lib/librte_ivshmem/Makefile
index 536814c..be6f21a 100644
--- a/lib/librte_ivshmem/Makefile
+++ b/lib/librte_ivshmem/Makefile
@@ -36,6 +36,8 @@  LIB = librte_ivshmem.a
 
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
 
+EXPORT_MAPS := $(RTE_SDK)/lib/librte_ivshmem/rte_ivshmem_version.map
+
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_IVSHMEM) := rte_ivshmem.c
 
diff --git a/lib/librte_ivshmem/rte_ivshmem_version.map b/lib/librte_ivshmem/rte_ivshmem_version.map
new file mode 100644
index 0000000..a204339
--- /dev/null
+++ b/lib/librte_ivshmem/rte_ivshmem_version.map
@@ -0,0 +1,13 @@ 
+DPDK_1.8 {
+	global:
+
+	rte_ivshmem_metadata_create;
+	rte_ivshmem_metadata_add_memzone;
+	rte_ivshmem_metadata_add_ring;
+	rte_ivshmem_metadata_add_mempool;
+	rte_ivshmem_metadata_cmdline_generate;
+	rte_ivshmem_metadata_dump;
+
+	local: *;
+};
+
diff --git a/lib/librte_kni/Makefile b/lib/librte_kni/Makefile
index 5267304..c119fc1 100644
--- a/lib/librte_kni/Makefile
+++ b/lib/librte_kni/Makefile
@@ -36,6 +36,8 @@  LIB = librte_kni.a
 
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3 -fno-strict-aliasing
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_kni/rte_kni_version.map
+
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_KNI) := rte_kni.c
 
diff --git a/lib/librte_kni/rte_kni_version.map b/lib/librte_kni/rte_kni_version.map
new file mode 100644
index 0000000..58fbc1f
--- /dev/null
+++ b/lib/librte_kni/rte_kni_version.map
@@ -0,0 +1,19 @@ 
+DPDK_1.8 {
+	global:
+
+	rte_kni_alloc;
+	rte_kni_create;
+	rte_kni_release;
+	rte_kni_handle_request;
+	rte_kni_rx_burst;
+	rte_kni_tx_burst;
+	rte_kni_get_port_id;
+	rte_kni_get;
+	rte_kni_info_get;
+	rte_kni_register_handlers;
+	rte_kni_unregister_handlers;
+	rte_kni_close;
+
+	local: *;
+};
+
diff --git a/lib/librte_kvargs/Makefile b/lib/librte_kvargs/Makefile
index b09359a..83a42b1 100644
--- a/lib/librte_kvargs/Makefile
+++ b/lib/librte_kvargs/Makefile
@@ -38,6 +38,8 @@  LIB = librte_kvargs.a
 
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_kvargs/rte_kvargs_version.map
+
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_KVARGS) := rte_kvargs.c
 
diff --git a/lib/librte_kvargs/rte_kvargs_version.map b/lib/librte_kvargs/rte_kvargs_version.map
new file mode 100644
index 0000000..7873c8c
--- /dev/null
+++ b/lib/librte_kvargs/rte_kvargs_version.map
@@ -0,0 +1,10 @@ 
+DPDK_1.8 {
+
+	global:
+	rte_kvargs_parse;
+	rte_kvargs_free;
+	rte_kvargs_process;
+	rte_kvargs_count;
+
+	local: *;
+};
diff --git a/lib/librte_lpm/Makefile b/lib/librte_lpm/Makefile
index fa94163..05de8d9 100644
--- a/lib/librte_lpm/Makefile
+++ b/lib/librte_lpm/Makefile
@@ -37,6 +37,8 @@  LIB = librte_lpm.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_lpm/rte_lpm_version.map
+
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_LPM) := rte_lpm.c rte_lpm6.c
 
diff --git a/lib/librte_lpm/rte_lpm_version.map b/lib/librte_lpm/rte_lpm_version.map
new file mode 100644
index 0000000..8ae9318
--- /dev/null
+++ b/lib/librte_lpm/rte_lpm_version.map
@@ -0,0 +1,24 @@ 
+DPDK_1.8 {
+	global:
+
+	rte_lpm_create;
+	rte_lpm_find_existing;
+	rte_lpm_free;
+	rte_lpm_add;
+	rte_lpm_is_rule_present;
+	rte_lpm_delete;
+	rte_lpm_delete_all;
+	rte_lpm6_create;
+	rte_lpm6_find_existing;
+	rte_lpm6_free;
+	rte_lpm6_add;
+	rte_lpm6_is_rule_present;
+	rte_lpm6_delete;
+	rte_lpm6_delete_bulk_func;
+	rte_lpm6_delete_all;
+	rte_lpm6_lookup;
+	rte_lpm6_lookup_bulk_func;
+
+	local: *;
+};
+
diff --git a/lib/librte_malloc/Makefile b/lib/librte_malloc/Makefile
index ba87e34..1a5c288 100644
--- a/lib/librte_malloc/Makefile
+++ b/lib/librte_malloc/Makefile
@@ -36,6 +36,8 @@  LIB = librte_malloc.a
 
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_malloc/rte_malloc_version.map
+
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_MALLOC) := rte_malloc.c malloc_elem.c malloc_heap.c
 
diff --git a/lib/librte_malloc/rte_malloc_version.map b/lib/librte_malloc/rte_malloc_version.map
new file mode 100644
index 0000000..77db879
--- /dev/null
+++ b/lib/librte_malloc/rte_malloc_version.map
@@ -0,0 +1,19 @@ 
+DPDK_1.8 {
+	global:
+
+	rte_malloc;
+	rte_zmalloc;
+	rte_calloc;
+	rte_realloc;
+	rte_malloc_socket;
+	rte_zmalloc_socket;
+	rte_calloc_socket;
+	rte_free;
+	rte_malloc_validate;
+	rte_malloc_get_socket_stats;
+	rte_malloc_dump_stats;
+	rte_malloc_set_limit;
+	rte_malloc_virt2phy;
+
+	local: *;
+};
diff --git a/lib/librte_mbuf/Makefile b/lib/librte_mbuf/Makefile
index 9b45ba4..5cd4941 100644
--- a/lib/librte_mbuf/Makefile
+++ b/lib/librte_mbuf/Makefile
@@ -36,6 +36,8 @@  LIB = librte_mbuf.a
 
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_mbuf/rte_mbuf_version.map
+
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_MBUF) := rte_mbuf.c
 
diff --git a/lib/librte_mbuf/rte_mbuf_version.map b/lib/librte_mbuf/rte_mbuf_version.map
new file mode 100644
index 0000000..55e352b
--- /dev/null
+++ b/lib/librte_mbuf/rte_mbuf_version.map
@@ -0,0 +1,12 @@ 
+DPDK_1.8 {
+	global:
+
+	rte_mbuf_sanity_check;
+	rte_ctrlmbuf_init;
+	rte_pktmbuf_init;
+	rte_pktmbuf_pool_init;
+	rte_pktmbuf_dump;
+
+	local: *;
+};
+
diff --git a/lib/librte_mempool/Makefile b/lib/librte_mempool/Makefile
index 9939e10..07b5b4e 100644
--- a/lib/librte_mempool/Makefile
+++ b/lib/librte_mempool/Makefile
@@ -36,6 +36,8 @@  LIB = librte_mempool.a
 
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_mempool/rte_mempool_version.map
+
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_MEMPOOL) +=  rte_mempool.c
 ifeq ($(CONFIG_RTE_LIBRTE_XEN_DOM0),y)
diff --git a/lib/librte_mempool/rte_mempool_version.map b/lib/librte_mempool/rte_mempool_version.map
new file mode 100644
index 0000000..7a19982
--- /dev/null
+++ b/lib/librte_mempool/rte_mempool_version.map
@@ -0,0 +1,18 @@ 
+DPDK_1.8 {
+	global:
+
+	rte_mempool_create;
+	rte_mempool_xmem_create;
+	rte_dom0_mempool_create;
+	rte_mempool_dump;
+	rte_mempool_audit;
+	rte_mempool_list_dump;
+	rte_mempool_lookup;
+	rte_mempool_calc_obj_size;
+	rte_mempool_xmem_size;
+	rte_mempool_xmem_usage;
+	rte_mempool_walk;
+	rte_mempool_count;
+
+	local: *;
+};
diff --git a/lib/librte_meter/Makefile b/lib/librte_meter/Makefile
index b25c0cc..0778690 100644
--- a/lib/librte_meter/Makefile
+++ b/lib/librte_meter/Makefile
@@ -39,6 +39,8 @@  LIB = librte_meter.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_meter/rte_meter_version.map
+
 #
 # all source are stored in SRCS-y
 #
diff --git a/lib/librte_meter/rte_meter_version.map b/lib/librte_meter/rte_meter_version.map
new file mode 100644
index 0000000..51a73b1
--- /dev/null
+++ b/lib/librte_meter/rte_meter_version.map
@@ -0,0 +1,13 @@ 
+DPDK_1.8 {
+	global:
+
+	rte_meter_srtcm_config;
+	rte_meter_trtcm_config;
+	rte_meter_srtcm_color_blind_check;
+	rte_meter_srtcm_color_aware_check;
+	rte_meter_trtcm_color_blind_check;
+	rte_meter_trtcm_color_aware_check;
+
+	local: *;
+};
+
diff --git a/lib/librte_pipeline/Makefile b/lib/librte_pipeline/Makefile
index cf8fde8..5465d00 100644
--- a/lib/librte_pipeline/Makefile
+++ b/lib/librte_pipeline/Makefile
@@ -39,6 +39,8 @@  LIB = librte_pipeline.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_pipeline/rte_pipeline_version.map
+
 #
 # all source are stored in SRCS-y
 #
diff --git a/lib/librte_pipeline/rte_pipeline_version.map b/lib/librte_pipeline/rte_pipeline_version.map
new file mode 100644
index 0000000..f868b96
--- /dev/null
+++ b/lib/librte_pipeline/rte_pipeline_version.map
@@ -0,0 +1,23 @@ 
+DPDK_1.8 {
+	global:
+
+	rte_pipeline_create;
+	rte_pipeline_free;
+	rte_pipeline_check;
+	rte_pipeline_run;
+	rte_pipeline_flush;
+	rte_pipeline_table_create;
+	rte_pipeline_table_default_entry_add;
+	rte_pipeline_table_default_entry_delete;
+	rte_pipeline_table_entry_add;
+	rte_pipeline_table_entry_delete;
+	rte_pipeline_port_in_create;
+	rte_pipeline_port_in_connect_to_table;
+	rte_pipeline_port_in_enable;
+	rte_pipeline_port_in_disable;
+	rte_pipeline_port_out_create;
+	rte_pipeline_port_out_packet_insert;
+
+	local: *;
+};
+
diff --git a/lib/librte_pmd_bond/Makefile b/lib/librte_pmd_bond/Makefile
index 953d75e..5b14ce2 100644
--- a/lib/librte_pmd_bond/Makefile
+++ b/lib/librte_pmd_bond/Makefile
@@ -39,6 +39,8 @@  LIB = librte_pmd_bond.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_pmd_bond/rte_eth_bond_version.map
+
 #
 # all source are stored in SRCS-y
 #
diff --git a/lib/librte_pmd_bond/rte_eth_bond_version.map b/lib/librte_pmd_bond/rte_eth_bond_version.map
new file mode 100644
index 0000000..17f0a1f
--- /dev/null
+++ b/lib/librte_pmd_bond/rte_eth_bond_version.map
@@ -0,0 +1,20 @@ 
+DPDK_1.8 {
+	global:
+
+	rte_eth_bond_create;
+	rte_eth_bond_slave_add;
+	rte_eth_bond_slave_remove;
+	rte_eth_bond_mode_set;
+	rte_eth_bond_mode_get;
+	rte_eth_bond_primary_set;
+	rte_eth_bond_primary_get;
+	rte_eth_bond_slaves_get;
+	rte_eth_bond_active_slaves_get;
+	rte_eth_bond_mac_address_set;
+	rte_eth_bond_mac_address_reset;
+	rte_eth_bond_xmit_policy_set;
+	rte_eth_bond_xmit_policy_get;
+
+
+	local: *;
+};
diff --git a/lib/librte_pmd_e1000/Makefile b/lib/librte_pmd_e1000/Makefile
index 14bc4a2..e225bfe 100644
--- a/lib/librte_pmd_e1000/Makefile
+++ b/lib/librte_pmd_e1000/Makefile
@@ -39,6 +39,8 @@  LIB = librte_pmd_e1000.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_pmd_e1000/rte_pmd_e1000_version.map
+
 ifeq ($(CC), icc)
 #
 # CFLAGS for icc
diff --git a/lib/librte_pmd_e1000/rte_pmd_e1000_version.map b/lib/librte_pmd_e1000/rte_pmd_e1000_version.map
new file mode 100644
index 0000000..cbc401f
--- /dev/null
+++ b/lib/librte_pmd_e1000/rte_pmd_e1000_version.map
@@ -0,0 +1,5 @@ 
+DPDK_1.8 {
+
+	local: *;
+};
+
diff --git a/lib/librte_pmd_i40e/Makefile b/lib/librte_pmd_i40e/Makefile
index 4b31675..cfbe816 100644
--- a/lib/librte_pmd_i40e/Makefile
+++ b/lib/librte_pmd_i40e/Makefile
@@ -39,6 +39,8 @@  LIB = librte_pmd_i40e.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_pmd_i40e/rte_pmd_i40e_version.map
+
 #
 # Add extra flags for base driver files (also known as shared code)
 # to disable warnings
diff --git a/lib/librte_pmd_i40e/rte_pmd_i40e_version.map b/lib/librte_pmd_i40e/rte_pmd_i40e_version.map
new file mode 100644
index 0000000..cbc401f
--- /dev/null
+++ b/lib/librte_pmd_i40e/rte_pmd_i40e_version.map
@@ -0,0 +1,5 @@ 
+DPDK_1.8 {
+
+	local: *;
+};
+
diff --git a/lib/librte_pmd_ixgbe/Makefile b/lib/librte_pmd_ixgbe/Makefile
index 00ccedb..1dd14a6 100644
--- a/lib/librte_pmd_ixgbe/Makefile
+++ b/lib/librte_pmd_ixgbe/Makefile
@@ -39,6 +39,8 @@  LIB = librte_pmd_ixgbe.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_pmd_ixgbe/rte_pmd_ixgbe_version.map
+
 ifeq ($(CC), icc)
 #
 # CFLAGS for icc
diff --git a/lib/librte_pmd_ixgbe/rte_pmd_ixgbe_version.map b/lib/librte_pmd_ixgbe/rte_pmd_ixgbe_version.map
new file mode 100644
index 0000000..cbc401f
--- /dev/null
+++ b/lib/librte_pmd_ixgbe/rte_pmd_ixgbe_version.map
@@ -0,0 +1,5 @@ 
+DPDK_1.8 {
+
+	local: *;
+};
+
diff --git a/lib/librte_pmd_pcap/Makefile b/lib/librte_pmd_pcap/Makefile
index c5c214d..fff5572 100644
--- a/lib/librte_pmd_pcap/Makefile
+++ b/lib/librte_pmd_pcap/Makefile
@@ -40,6 +40,8 @@  LIB = librte_pmd_pcap.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_pmd_pcap/rte_pmd_pcap_version.map
+
 #
 # all source are stored in SRCS-y
 #
diff --git a/lib/librte_pmd_pcap/rte_pmd_pcap_version.map b/lib/librte_pmd_pcap/rte_pmd_pcap_version.map
new file mode 100644
index 0000000..cbc401f
--- /dev/null
+++ b/lib/librte_pmd_pcap/rte_pmd_pcap_version.map
@@ -0,0 +1,5 @@ 
+DPDK_1.8 {
+
+	local: *;
+};
+
diff --git a/lib/librte_pmd_ring/Makefile b/lib/librte_pmd_ring/Makefile
index b57e421..25ad27f 100644
--- a/lib/librte_pmd_ring/Makefile
+++ b/lib/librte_pmd_ring/Makefile
@@ -39,6 +39,8 @@  LIB = librte_pmd_ring.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_pmd_ring/rte_eth_ring_version.map
+
 #
 # all source are stored in SRCS-y
 #
diff --git a/lib/librte_pmd_ring/rte_eth_ring.c b/lib/librte_pmd_ring/rte_eth_ring.c
index 4f1b6ed..df7b583 100644
--- a/lib/librte_pmd_ring/rte_eth_ring.c
+++ b/lib/librte_pmd_ring/rte_eth_ring.c
@@ -473,7 +473,7 @@  out:
 	return ret;
 }
 
-int
+static int
 rte_pmd_ring_devinit(const char *name, const char *params)
 {
 	struct rte_kvargs *kvlist;
diff --git a/lib/librte_pmd_ring/rte_eth_ring.h b/lib/librte_pmd_ring/rte_eth_ring.h
index e6ae19e..d36489a 100644
--- a/lib/librte_pmd_ring/rte_eth_ring.h
+++ b/lib/librte_pmd_ring/rte_eth_ring.h
@@ -50,12 +50,6 @@  int rte_eth_from_rings(const char *name,
 int rte_eth_ring_pair_create(const char *name, const unsigned numa_node);
 int rte_eth_ring_pair_attach(const char *name, const unsigned numa_node);
 
-/**
- * For use by test apps only. Called as part of EAL init to set up any dummy NICs
- * configured on command line.
- */
-int rte_pmd_ring_devinit(const char *name, const char *params);
-
 #ifdef __cplusplus
 }
 #endif
diff --git a/lib/librte_pmd_ring/rte_eth_ring_version.map b/lib/librte_pmd_ring/rte_eth_ring_version.map
new file mode 100644
index 0000000..5edaa3d
--- /dev/null
+++ b/lib/librte_pmd_ring/rte_eth_ring_version.map
@@ -0,0 +1,10 @@ 
+DPDK_1.8 {
+
+	global:
+
+	rte_eth_from_rings;
+	rte_eth_ring_pair_create;
+	rte_eth_ring_pair_attach;
+
+	local: *;
+};
diff --git a/lib/librte_pmd_virtio/Makefile b/lib/librte_pmd_virtio/Makefile
index 456095b..bf51bd9 100644
--- a/lib/librte_pmd_virtio/Makefile
+++ b/lib/librte_pmd_virtio/Makefile
@@ -39,6 +39,7 @@  LIB = librte_pmd_virtio_uio.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_pmd_virtio/rte_pmd_virtio_version.map
 
 #
 # all source are stored in SRCS-y
diff --git a/lib/librte_pmd_virtio/rte_pmd_virtio_version.map b/lib/librte_pmd_virtio/rte_pmd_virtio_version.map
new file mode 100644
index 0000000..cbc401f
--- /dev/null
+++ b/lib/librte_pmd_virtio/rte_pmd_virtio_version.map
@@ -0,0 +1,5 @@ 
+DPDK_1.8 {
+
+	local: *;
+};
+
diff --git a/lib/librte_pmd_vmxnet3/Makefile b/lib/librte_pmd_vmxnet3/Makefile
index 6872c74..e5a1c6b 100644
--- a/lib/librte_pmd_vmxnet3/Makefile
+++ b/lib/librte_pmd_vmxnet3/Makefile
@@ -66,6 +66,8 @@  endif
 
 VPATH += $(RTE_SDK)/lib/librte_pmd_vmxnet3/vmxnet3
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_pmd_vmxnet3/rte_pmd_vmxnet3_version.map
+
 #
 # all source are stored in SRCS-y
 #
diff --git a/lib/librte_pmd_vmxnet3/rte_pmd_vmxnet3_version.map b/lib/librte_pmd_vmxnet3/rte_pmd_vmxnet3_version.map
new file mode 100644
index 0000000..cbc401f
--- /dev/null
+++ b/lib/librte_pmd_vmxnet3/rte_pmd_vmxnet3_version.map
@@ -0,0 +1,5 @@ 
+DPDK_1.8 {
+
+	local: *;
+};
+
diff --git a/lib/librte_pmd_xenvirt/Makefile b/lib/librte_pmd_xenvirt/Makefile
index 01bfcaa..0a08b1b 100644
--- a/lib/librte_pmd_xenvirt/Makefile
+++ b/lib/librte_pmd_xenvirt/Makefile
@@ -39,6 +39,8 @@  LIB = librte_pmd_xenvirt.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_pmd_xenvirt/rte_eth_xenvirt_version.map
+
 #
 # all source are stored in SRCS-y
 #
diff --git a/lib/librte_pmd_xenvirt/rte_eth_xenvirt_version.map b/lib/librte_pmd_xenvirt/rte_eth_xenvirt_version.map
new file mode 100644
index 0000000..66199b1
--- /dev/null
+++ b/lib/librte_pmd_xenvirt/rte_eth_xenvirt_version.map
@@ -0,0 +1,8 @@ 
+DPDK_1.8 {
+	global:
+
+	rte_mempool_gntalloc_create;
+
+	local: *;
+};
+
diff --git a/lib/librte_port/Makefile b/lib/librte_port/Makefile
index 28793a5..e812bda 100644
--- a/lib/librte_port/Makefile
+++ b/lib/librte_port/Makefile
@@ -39,6 +39,8 @@  LIB = librte_port.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_port/rte_port_version.map
+
 #
 # all source are stored in SRCS-y
 #
diff --git a/lib/librte_port/rte_port_version.map b/lib/librte_port/rte_port_version.map
new file mode 100644
index 0000000..57ccaa3
--- /dev/null
+++ b/lib/librte_port/rte_port_version.map
@@ -0,0 +1,18 @@ 
+DPDK_1.8 {
+	global:
+	rte_port_ring_reader_ops;
+	rte_port_ring_writer_ops;
+	rte_port_ethdev_reader_ops;
+	rte_port_ethdev_writer_ops;
+	rte_port_ring_reader_ipv4_frag_ops;
+	rte_port_ring_writer_ipv4_ras_ops;
+	rte_port_ring_reader_ops;
+	rte_port_ring_writer_ops;
+	rte_port_sched_reader_ops;
+	rte_port_sched_writer_ops;
+	rte_port_source_ops;
+	rte_port_sink_ops;
+
+	local: *;
+};
+
diff --git a/lib/librte_power/Makefile b/lib/librte_power/Makefile
index 6185812..26ee542 100644
--- a/lib/librte_power/Makefile
+++ b/lib/librte_power/Makefile
@@ -36,6 +36,8 @@  LIB = librte_power.a
 
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3 -fno-strict-aliasing
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_power/rte_power_version.map
+
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_POWER) := rte_power.c
 
diff --git a/lib/librte_power/rte_power_version.map b/lib/librte_power/rte_power_version.map
new file mode 100644
index 0000000..3b2375a
--- /dev/null
+++ b/lib/librte_power/rte_power_version.map
@@ -0,0 +1,14 @@ 
+DPDK_1.8 {
+	global:
+	rte_power_init;
+	rte_power_exit;
+	rte_power_freqs;
+	rte_power_get_freq;
+	rte_power_set_freq;
+	rte_power_freq_up;
+	rte_power_freq_down;
+	rte_power_freq_max;
+	rte_power_freq_min;
+
+	local: *;
+};
diff --git a/lib/librte_ring/Makefile b/lib/librte_ring/Makefile
index 2380a43..0adaa00 100644
--- a/lib/librte_ring/Makefile
+++ b/lib/librte_ring/Makefile
@@ -36,6 +36,8 @@  LIB = librte_ring.a
 
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_ring/rte_ring_version.map
+
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_RING) := rte_ring.c
 
diff --git a/lib/librte_ring/rte_ring_version.map b/lib/librte_ring/rte_ring_version.map
new file mode 100644
index 0000000..6c28af9
--- /dev/null
+++ b/lib/librte_ring/rte_ring_version.map
@@ -0,0 +1,12 @@ 
+DPDK_1.8 {
+	global:
+	rte_ring_get_memsize;
+	rte_ring_init;
+	rte_ring_create;
+	rte_ring_set_water_mark;
+	rte_ring_dump;
+	rte_ring_list_dump;
+	rte_ring_lookup;
+
+	local: *;
+};
diff --git a/lib/librte_sched/Makefile b/lib/librte_sched/Makefile
index 1a25b21..205fb7a 100644
--- a/lib/librte_sched/Makefile
+++ b/lib/librte_sched/Makefile
@@ -41,6 +41,8 @@  CFLAGS += $(WERROR_FLAGS)
 
 CFLAGS_rte_red.o := -D_GNU_SOURCE
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_sched/rte_sched_version.map
+
 #
 # all source are stored in SRCS-y
 #
diff --git a/lib/librte_sched/rte_sched_version.map b/lib/librte_sched/rte_sched_version.map
new file mode 100644
index 0000000..b5877ce
--- /dev/null
+++ b/lib/librte_sched/rte_sched_version.map
@@ -0,0 +1,22 @@ 
+DPDK_1.8 {
+	global:
+
+	rte_approx;
+	rte_red_rt_data_init;
+	rte_red_config_init;
+	rte_sched_port_config;
+	rte_sched_port_free;
+	rte_sched_subport_config;
+	rte_sched_pipe_config;
+	rte_sched_port_get_memory_footprint;
+	rte_sched_subport_read_stats;
+	rte_sched_queue_read_stats;
+	rte_sched_port_enqueue;
+	rte_sched_port_dequeue;
+	rte_red_log2_1_minus_Wq;
+	rte_red_pow2_frac_inv;
+	rte_red_rand_val;
+	rte_red_rand_seed;
+
+	local: *;
+};
diff --git a/lib/librte_table/Makefile b/lib/librte_table/Makefile
index dd684cc..5b54acc 100644
--- a/lib/librte_table/Makefile
+++ b/lib/librte_table/Makefile
@@ -39,6 +39,8 @@  LIB = librte_table.a
 CFLAGS += -O3
 CFLAGS += $(WERROR_FLAGS)
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_table/rte_table_version.map
+
 #
 # all source are stored in SRCS-y
 #
diff --git a/lib/librte_table/rte_table_version.map b/lib/librte_table/rte_table_version.map
new file mode 100644
index 0000000..86f16b8
--- /dev/null
+++ b/lib/librte_table/rte_table_version.map
@@ -0,0 +1,22 @@ 
+DPDK_1.8 {
+	global:
+
+	rte_table_stub_ops;
+	rte_table_lpm_ops;
+	rte_table_array_ops;
+	rte_table_hash_key8_lru_ops;
+	rte_table_hash_key8_lru_dosig_ops;
+	rte_table_hash_key8_ext_ops;
+	rte_table_hash_key8_ext_dosig_ops;
+	rte_table_lpm_ipv6_ops;
+	rte_table_hash_key16_lru_ops;
+	rte_table_hash_key32_lru_ops;
+	rte_table_hash_key16_ext_ops;
+	rte_table_hash_key32_ext_ops;
+	rte_table_acl_ops;
+	rte_table_hash_lru_ops;
+	rte_table_hash_ext_ops;
+
+	local: *;
+};
+
diff --git a/lib/librte_timer/Makefile b/lib/librte_timer/Makefile
index 07eb0c6..f703e5f 100644
--- a/lib/librte_timer/Makefile
+++ b/lib/librte_timer/Makefile
@@ -36,6 +36,8 @@  LIB = librte_timer.a
 
 CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
 
+EXPORT_MAP := $(RTE_SDK)/lib/librte_timer/rte_timer_version.map
+
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_TIMER) := rte_timer.c
 
diff --git a/lib/librte_timer/rte_timer_version.map b/lib/librte_timer/rte_timer_version.map
new file mode 100644
index 0000000..00b6b52
--- /dev/null
+++ b/lib/librte_timer/rte_timer_version.map
@@ -0,0 +1,16 @@ 
+DPDK_1.8 {
+	global:
+
+	rte_timer_subsystem_init;
+	rte_timer_init;
+	rte_timer_reset;
+	rte_timer_reset_sync;
+	rte_timer_stop;
+	rte_timer_stop_sync;
+	rte_timer_pending;
+	rte_timer_manage;
+	rte_timer_dump_stats;
+
+	local: *;
+};
+