aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitreview5
-rw-r--r--debian/.gitignore61
-rw-r--r--debian/README.source42
-rw-r--r--debian/changelog716
-rw-r--r--debian/compat1
-rw-r--r--debian/control734
-rw-r--r--debian/control.modules.in14
-rw-r--r--debian/copyright138
-rwxr-xr-xdebian/dh-dbgsym-metapkg24
-rw-r--r--debian/dpdk-dev.lintian-overrides3
-rw-r--r--debian/dpdk-dev.preinst.in41
-rw-r--r--debian/dpdk-doc.README.Debian64
-rw-r--r--debian/dpdk-doc.lintian-overrides1
-rw-r--r--debian/dpdk-igb-uio-dkms.dkms.in7
-rwxr-xr-xdebian/dpdk-init255
-rw-r--r--debian/dpdk-rte-kni-dkms.dkms.in7
-rwxr-xr-xdebian/dpdk-sdk-env.sh.in3
-rw-r--r--debian/dpdk.conf68
-rw-r--r--debian/dpdk.init57
-rw-r--r--debian/dpdk.install2
-rw-r--r--debian/dpdk.interfaces19
-rw-r--r--debian/dpdk.service12
-rwxr-xr-xdebian/kernel-version61
-rw-r--r--debian/libdpdk.pc.in11
-rw-r--r--debian/librte-acl2.symbols15
-rw-r--r--debian/librte-cfgfile2.symbols13
-rw-r--r--debian/librte-cmdline2.symbols68
-rw-r--r--debian/librte-cryptodev2.symbols34
-rw-r--r--debian/librte-distributor1.symbols11
-rw-r--r--debian/librte-eal3.symbols141
-rw-r--r--debian/librte-ethdev5.symbols118
-rw-r--r--debian/librte-hash2.symbols28
-rw-r--r--debian/librte-ip-frag1.symbols9
-rw-r--r--debian/librte-jobstats1.symbols17
-rw-r--r--debian/librte-kni2.symbols13
-rw-r--r--debian/librte-kvargs1.symbols6
-rw-r--r--debian/librte-lpm2.symbols27
-rw-r--r--debian/librte-mbuf2.symbols23
-rw-r--r--debian/librte-mempool2.symbols31
-rw-r--r--debian/librte-meter1.symbols4
-rw-r--r--debian/librte-net1.symbols3
-rw-r--r--debian/librte-pdump1.symbols9
-rw-r--r--debian/librte-pipeline3.symbols28
-rw-r--r--debian/librte-pmd-af-packet1.symbols4
-rw-r--r--debian/librte-pmd-bnxt1.symbols4
-rw-r--r--debian/librte-pmd-bond1.symbols30
-rw-r--r--debian/librte-pmd-cxgbe1.symbols4
-rw-r--r--debian/librte-pmd-e1000-1.symbols4
-rw-r--r--debian/librte-pmd-ena1.symbols4
-rw-r--r--debian/librte-pmd-enic1.symbols4
-rw-r--r--debian/librte-pmd-fm10k1.symbols4
-rw-r--r--debian/librte-pmd-i40e1.symbols4
-rw-r--r--debian/librte-pmd-ixgbe1.symbols11
-rw-r--r--debian/librte-pmd-null-crypto1.symbols4
-rw-r--r--debian/librte-pmd-null1.symbols4
-rw-r--r--debian/librte-pmd-pcap1.symbols4
-rw-r--r--debian/librte-pmd-qede1.symbols2
-rw-r--r--debian/librte-pmd-ring2.symbols5
-rw-r--r--debian/librte-pmd-thunderx-nicvf1.symbols5
-rw-r--r--debian/librte-pmd-vhost1.symbols8
-rw-r--r--debian/librte-pmd-virtio1.symbols4
-rw-r--r--debian/librte-pmd-vmxnet3-uio1.symbols4
-rw-r--r--debian/librte-pmd-xenvirt1.symbols3
-rw-r--r--debian/librte-port3.symbols29
-rw-r--r--debian/librte-power1.symbols14
-rw-r--r--debian/librte-reorder1.symbols9
-rw-r--r--debian/librte-ring1.symbols11
-rw-r--r--debian/librte-sched1.symbols22
-rw-r--r--debian/librte-table2.symbols24
-rw-r--r--debian/librte-timer1.symbols11
-rw-r--r--debian/librte-vhost3.symbols18
-rw-r--r--debian/patches/fix-power-default-config.patch21
-rw-r--r--debian/patches/fix-vhost-user-socket-permission.patch365
-rw-r--r--debian/patches/mk-fix-excluding-.doctrees-when-installing-docs.patch25
-rw-r--r--debian/patches/mk-order-CFLAGS-so-that-ISCDIR-comes-before-IRTE_OUT.patch388
-rw-r--r--debian/patches/mk-sort-headers-before-wildcard-inclusion.patch49
-rw-r--r--debian/patches/mk-sort-list-of-shared-objects-in-linker-script.patch27
-rw-r--r--debian/patches/mk-sort-object-files-when-building-deps-lists.patch64
-rw-r--r--debian/patches/mk-sort-source-files-before-passing-them-to-the-comp.patch97
-rw-r--r--debian/patches/mk-use-make-silent-flag-to-print-HTML-doc-version.patch31
-rw-r--r--debian/patches/nicvf-0001-net-thunderx-check-data-offset-alignment-requirement.patch58
-rw-r--r--debian/patches/nicvf-0003-config-enable-thunderx-nicvf.patch62
-rw-r--r--debian/patches/nicvf-0004-net-thunderx-sync-mailbox-definitions-with-Linux-PF-.patch80
-rw-r--r--debian/patches/nicvf-0005-net-thunderx-wait-to-complete-during-link-update.patch59
-rw-r--r--debian/patches/nicvf-0007-net-thunderx-disable-PMD-for-old-compilers.patch80
-rw-r--r--debian/patches/nicvf-0009-config-set-cache-line-as-128B-for-generic-arm64.patch65
-rw-r--r--debian/patches/series15
-rwxr-xr-xdebian/prep-modules123
-rwxr-xr-xdebian/rules365
-rw-r--r--debian/source/format1
-rw-r--r--debian/source/options1
-rw-r--r--debian/tests/check-dpdk-supported-arch.sh12
-rw-r--r--debian/tests/control17
-rw-r--r--debian/tests/test-autotest62
-rw-r--r--debian/tests/test-dkms22
-rw-r--r--debian/tests/test-initscripts149
-rw-r--r--debian/tests/test-linkage49
-rw-r--r--debian/watch2
98 files changed, 5487 insertions, 0 deletions
diff --git a/.gitreview b/.gitreview
new file mode 100644
index 00000000..02cda8fb
--- /dev/null
+++ b/.gitreview
@@ -0,0 +1,5 @@
+[gerrit]
+host=gerrit.fd.io
+port=29418
+project=deb_dpdk
+defaultbranch=16.11.x
diff --git a/debian/.gitignore b/debian/.gitignore
new file mode 100644
index 00000000..269a9fb4
--- /dev/null
+++ b/debian/.gitignore
@@ -0,0 +1,61 @@
+*.debhelper.log
+*.substvars
+*.postinst.debhelper
+*.postrm.debhelper
+*.prerm.debhelper
+*.dkms.debhelper
+build/
+control.modules
+dpdk-dev/
+dpdk-doc/
+dpdk-igb-uio-dkms/
+dpdk-modules-*/
+dpdk-rte-kni-dkms/
+dpdk/
+files
+libdpdk-dev/
+libethdev4/
+librte-acl2/
+librte-cfgfile2/
+librte-cmdline2/
+librte-cryptodev1/
+librte-distributor1/
+librte-eal2/
+librte-hash2/
+librte-ip-frag1/
+librte-jobstats1/
+librte-kni2/
+librte-kvargs1/
+librte-lpm2/
+librte-mbuf2/
+librte-mempool2/
+librte-meter1/
+librte-pdump1/
+librte-pipeline3/
+librte-pmd-af-packet1/
+librte-pmd-bnxt1/
+librte-pmd-bond1/
+librte-pmd-cxgbe1/
+librte-pmd-e1000-1/
+librte-pmd-ena1/
+librte-pmd-enic1/
+librte-pmd-fm10k1/
+librte-pmd-i40e1/
+librte-pmd-ixgbe1/
+librte-pmd-null-crypto1/
+librte-pmd-null1/
+librte-pmd-pcap1/
+librte-pmd-ring2/
+librte-pmd-vhost1/
+librte-pmd-virtio1/
+librte-pmd-vmxnet3-uio1/
+librte-pmd-xenvirt1/
+librte-port3/
+librte-power1/
+librte-reorder1/
+librte-ring1/
+librte-sched1/
+librte-table2/
+librte-timer1/
+librte-vhost3/
+VERSION
diff --git a/debian/README.source b/debian/README.source
new file mode 100644
index 00000000..a21f5eee
--- /dev/null
+++ b/debian/README.source
@@ -0,0 +1,42 @@
+How to build the package - for CI systems, etc
+
+1 - install all the build-dependencies as listed in the debian/control file.
+ From the repo top-level directory:
+
+apt-get install `dpkg-checkbuilddeps |& sed "s/.*://g" |& sed "s/(...[0-9]*)//g"`
+
+2 - run debuild (the flags will avoid signing the built packages):
+ From the repo top-level directory:
+
+debuild -uc -us
+
+***************
+
+quilt patches format
+
+Note that we use the dquilt format for patches as outlined on Debian's wiki:
+https://www.debian.org/doc/manuals/maint-guide/modify.en.html#quiltrc
+
+Please consider using the same format to avoid excessive churn when adding or
+refreshing patches.
+
+Add the following to your ~/.bashrc (or equivalent):
+
+alias dquilt="quilt --quiltrc=${HOME}/.quiltrc-dpkg"
+complete -F _quilt_completion $_quilt_complete_opt dquilt
+
+And then create a new ~/.quiltrc-dpkg file with content:
+
+d=. ; while [ ! -d $d/debian -a `readlink -e $d` != / ]; do d=$d/..; done
+if [ -d $d/debian ] && [ -z $QUILT_PATCHES ]; then
+ # if in Debian packaging tree with unset $QUILT_PATCHES
+ QUILT_PATCHES="debian/patches"
+ QUILT_PATCH_OPTS="--reject-format=unified"
+ QUILT_DIFF_ARGS="-p ab --no-timestamps --no-index --color=auto"
+ QUILT_REFRESH_ARGS="-p ab --no-timestamps --no-index"
+ QUILT_COLORS="diff_hdr=1;32:diff_add=1;34:diff_rem=1;31:diff_hunk=1;33:diff_ctx=35:diff_cctx=33"
+ if ! [ -d $d/debian/patches ]; then mkdir $d/debian/patches; fi
+fi
+
+Open a new terminal or souce ~/.bashrc, and then you will be able to use
+dquilt.
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 00000000..9a4e78c4
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,716 @@
+dpdk (16.11.8-1~git1) UNRELEASED; urgency=medium
+
+ [ Luca Boccassi ]
+ * Merge stable update to 16.11.8; For a list of changes see
+ https://dpdk.org/doc/guides-16.11/rel_notes/release_16_11.html
+ * Merge stable update to 16.11.7; For a list of changes see
+ https://dpdk.org/doc/guides-16.11/rel_notes/release_16_11.html
+ * Merge stable update to 16.11.6; For a list of changes see
+ https://dpdk.org/doc/guides-16.11/rel_notes/release_16_11.html
+ * Fixes CVE-2018-1059 (Closes: #896688).
+ * Merge stable update to 16.11.5; For a list of changes see
+ http://dpdk.org/ml/archives/announce/2018-March/000180.html
+ * Merge stable update to 16.11.4; For a list of changes see
+ http://dpdk.org/ml/archives/announce/2017-December/000163.html
+ * Merge stable update to 16.11.3; For a list of changes see
+ http://dpdk.org/ml/archives/announce/2017-August/000143.html
+ * Fix reproducibility of librte-eal linuxapp.
+ * Mark build-dependencies needed for documentation builds with the <!nodoc>
+ build-profile to fully implement support for it.
+ * Bump Standards-Version to 4.1.0. Relevant changes are nodoc support and
+ build reprodicibility.
+ * Switch to debian.org email address.
+ * Build-Depend on debhelper (>= 9.20160709) rather than dh-systemd as
+ latter is deprecated. Fixes Lintian Error:
+ build-depends-on-obsolete-package
+ * Fix upstream version parsing in d/rules to account for -rcX.
+ * Build-Depend on debhelper (>= 9.20160709) | dh-systemd to keep
+ compatibility with Ubuntu 16.04, which does not yet have that
+ of debhelper.
+ * Revert: d/rules: use new dh option names - Ubuntu 16.04 does not
+ have a debhelper that supports the new option, so use the old
+ ones for now.
+ * Correctly parse upstream version when using ~rc instead of -rc.
+ * Bump Standards-Version to 4.1.1, no changes.
+ * Drop kni-fix-ethtool-build-with-kernel-4.11.patch, merged upstream.
+ * Drop patches merged upstream in 16.11.6.
+
+ [ Christian Ehrhardt ]
+ * d/rules: use new dh option names
+ * d/rules: properly enable dpdk systemd service
+ * d/t/control: fix test dependencies for s390x.
+
+ [ Luca Boccassi ]
+ * Restrict watch file to 16.11 series.
+
+ -- Luca Boccassi <luca.boccassi@gmail.com> Wed, 30 Aug 2017 15:11:09 +0100
+
+dpdk (16.11.2-1~git1) UNRELEASED; urgency=medium
+
+ [ Christian Ehrhardt ]
+ * Merge stable update to 16.11.2; For a list of changes
+ see http://dpdk.org/ml/archives/announce/2017-May/000131.html
+ * Dropped changes - patches that were included in 16.11.2 stable:
+ - d/p/kni-fix-build-with-kernel-4.11.patch
+ - d/p/nicvf-0002-net-thunderx-fix-32-bit-build.patch
+ - d/p/nicvf-0006-mk-fix-lib-filtering-when-linking-app.patch
+ - d/p/nicvf-0008-net-thunderx-fix-stats-access-out-of-bounds.patch
+ - d/p/nicvf-0010-net-thunderx-fix-deadlock-in-Rx-path.patch
+ * d/p/igb_uio-switch-to-new-irq-function-for-MSI-X.patch: fix dkms issue
+ in kernel 4.12 (LP: #1700768)
+
+ [ Luca Boccassi ]
+ * Optionally generate libdpdk-dbgsym metapackage that depends on every
+ librte/PMD binary package's dbgsym. Keep it disabled by default, and
+ let users choose to enable it by passing dbgsym_meta via DEB_BUILD_OPTIONS.
+ Thanks Jan Blunck for the patch!
+ * Generate dependency list of libdpdk-dev to all librte and PMDs packages
+ dynamically at build time.
+ * Generate list of recommends for dpdk dynamically at build time.
+ * dpdk-modules-$KVERS: depend on same kernel version used to build rather than
+ just recommend - in-kernel API/ABI is not stable.
+ * Support for building packages for the new mempool framework has been added.
+ In 17.05 and newer a mempool framework was added, that has to be loaded
+ like a PMD. So any "plugin" will be linked in RTE_EAL_PMD_PATH just like
+ the PMDs. No mempool plugins are built for now, so it is currently a no-op.
+ * Drop libethdev4, librte-cryptodev1 and librte-eal2 transitional packages,
+ no longer needed.
+ * Fix some upstream documentation links in the packages metadata.
+ Thanks Chas Williams!
+ * Fix building debugging symbols for -dbgsym packages. Thanks Chas Williams!
+ * Add patches to make the documentation and linker script builds fully
+ reproducible.
+ * Add patches to make the libraries and PMDs builds fully reproducible,
+ by making the listing order of headers, source files and objects in
+ the makefiles stable (via sorting).
+ * Install headers with arch-specific content in /usr/include/<multiarch>/dpdk
+ to make libdpdk-dev multiarch-compliant.
+ To ensure backward compatibility in x86_64, which is what most of the
+ consumers use, symlink x86_64 headers in /usr/include/dpdk.
+ pkg-config returns the arch-specific headers first so that other
+ architectures are still compatible.
+ Also create a full copy of the headers in the dpdk-dev SDK package, as it
+ does not support multiple levels of headers.
+
+ -- Christian Ehrhardt <christian.ehrhardt@canonical.com> Thu, 08 Jun 2017 10:05:44 -0600
+
+dpdk (16.11.1-1~git1) UNRELEASED; urgency=medium
+
+ [ Christian Ehrhardt ]
+ * Merge stable update to 16.11.1; For a list of changes
+ see http://dpdk.org/ml/archives/dev/2017-March/058930.html
+ * dpdk.conf: add info about unwanted effects of multiple hugepage
+ mountpoints
+ * d/p/dpdk-dev-v3-eal-sPAPR-IOMMU-support-in-pci-probing-for-vfio-pci-
+ in-ppc64le.patch: sPAPR IOMMU based pci probing enabled for vfio-pci
+ devices.
+ * enable librte-pmd-i40e1 for ppc64el
+ - debian/control: enable arch onpackage
+ - d/p/dpdk-dev-v4-i40e-implement-vector-PMD-for-altivec.patch: add i40e
+ PMD / vector PMD implementation and enable by default on ppc64el
+ * fix library availability/dependency
+ - librte-kni is built on ppc64el, fix dependency from libdpdk-dev
+ - librte-pmd-fm10k1 is not built on ppc64el (empty pkg atm) adapt arch
+ - librte-pmd-i40e is built on all architectures now
+ * Fix up thunderx to make arm support useful on more devices (LP: #1691659)
+ - d/p/nicvf-00[01-10]* backports of 17.02/17.05 fixes for thunderx
+ - d/control: dependencies and package for librte-pmd-thunderx-nicvf
+ - d/librte-pmd-thunderx-nicvf1.symbols: tracking library symbols
+ * fix dpdk-rte-kni dkms issues with kernel 4.11 (LP: #1691830)
+ - d/p/kni-fix-build-with-kernel-4.11.patch: fix pci_enable_msix usage
+ - d/p/kni-fix-ethtool-build-with-kernel-4.11.patch: Use new signal header
+ * ensure man pages are bundled with executables on all architectures
+ * d/p/fix-vhost-user-socket-permission.patch: updated to work with newer
+ openvswitch versions
+
+ [ Luca Boccassi ]
+ * Simplify debian/rules by using upstream's install target
+ and Debian's multiarch dir. Thanks Jan Blunck!
+ * Clarify that only the kni and igb_uio kernel modules are
+ distributed exclusively under the GPL2 in debian/copyright
+ * Add new DEB_BUILD_OPTIONS "nodoc" to allow users to avoid
+ building the DPDK documentation
+ * Add new DEB_BUILD_OPTIONS "nostatic" to allow users to avoid
+ building the DPDK static libraries
+ * Add try-restart to dpdk.init script
+ * Update Standards-Version to 4.0.0
+
+ -- Christian Ehrhardt <christian.ehrhardt@canonical.com> Thu, 08 Dec 2016 16:58:37 +0100
+
+dpdk (16.11-1~git1) UNRELEASED; urgency=medium
+
+ [ Christian Ehrhardt ]
+ * Merge stable release 16.11 and adapt patches
+ - imported latest stable release from dpdk-16.11.tar.gz
+ stable release changelog at
+ http://dpdk.org/doc/guides-16.11/rel_notes/release_16_11.html
+ - Delete patches that are upstream:
+ - d/p/dpdk-dev-ppc-enable-*
+ - d/p/dpdk-dev-v2-*-4*
+ - d/p/rte-devel-build-env.patch
+ - d/p/rte-compile-pre-cppflags.patch
+ - d/p/make-load-devel-config-not-to-appear-as-executable.patch
+ - d/p/dpdk-dev-doc-fix-old-dpdk-nic-bind.py-references.patch
+ - d/p/fix-double-license-info.patch
+ * Added changes
+ - add qede pmd now built by default
+ - add new librte-net library
+ - update symbols files to match the new release
+ - make autotest dep8 test always pass (failed fatally on e.g. LP).
+ We want to stabilize and get more logs of different environments before
+ we can enable it as a gating test.
+ - Make dpdk-dev's ${RTE_SDK}/${RTE_TARGET}/lib symlink multiarch aware
+ - d/control: apply wrap and sort
+ - d/control: Make the python-pyelftools only a Suggests
+ - d/t/test-linkage: fix issues on non-x86 architectures
+ - provide older ABI levels via backward compatibility of new DPDK libraries
+ - d/control: add compat packages for old ABI versions
+ - d/rules: generate and use multiarch aware link files for the soname
+ mapping
+
+ [ Luca Boccassi ]
+ * Make dpdk suggest dpdk-doc (Closes: #847626)
+
+ -- Christian Ehrhardt <christian.ehrhardt@canonical.com> Thu, 08 Dec 2016 16:58:37 +0100
+
+dpdk (16.07.2-1~git1) UNRELEASED; urgency=medium
+
+ * Merge stable release 16.07.2 and adapt patches
+ - imported latest stable release from dpdk-16.07.2.tar.gz
+ stable release changelog at
+ http://dpdk.org/doc/guides-16.07/rel_notes/release_16_07.html
+ - Deleted:
+ - d/p/dpdk-dev-v2-kni-fix-build-with-kernel-4.8.patch
+ - d/p/fix-unusual-interpreter.patch
+ - d/p/dpdk-dev-examples-ip_pipeline-fix-pmd-driver-parameter.patch
+ - d/p/dpdk-dev-kni-fix-build-with-kernel-4.9.patch
+ - d/p/dpdk-dev-ppc-enable-7-7-examples-ip_pipeline-fix-lcore-mapping-for-
+ ppc64.patch
+ - Refreshed (only offset changes)
+ - d/p/dpdk-dev-ppc-enable-1-7-lpm-add-AltiVec-for-ppc64.patch
+ - d/p/dpdk-dev-ppc-enable-2-7-acl-add-AltiVec-for-ppc64.patch
+ - d/p/dpdk-dev-ppc-enable-4-7-sched-enable-on-ppc64le.patch
+ - d/p/dpdk-dev-ppc-enable-6-7-config-enable-packet-framework-on-
+ ppc64le.patch
+ - d/p/dpdk-dev-v2-2-4-doc-rendering-and-installation-of-man-pages.patch
+ - d/p/dpdk-dev-v2-3-4-doc-add-basic-invocation-info-for-dpdk-pmdinfo.patch
+ - d/p/dpdk-dev-v2-4-4-doc-add-basic-invocation-info-for-dpdk-devbind.patch
+
+ -- Christian Ehrhardt <christian.ehrhardt@canonical.com> Mon, 05 Dec 2016 07:08:01 +0100
+
+dpdk (16.07-2~git1) UNRELEASED; urgency=medium
+
+ * Team upload.
+
+ [ Christian Ehrhardt ]
+ * Fix d/p/fix-vhost-user-socket-permission.patch for dpdk 16.07
+ server/client sockets.
+ * d/control add python-elftools and hwdata dependencies to dpdk for the tool
+ dpdk-pmdinfo.
+ * d/rules utilize RTE_EAL_PMD_PATH to autoload pmd drivers
+ - d/dpdk-doc.README.Debian document usage of RTE_EAL_PMD_PATH
+ - d/control let the runtime of dpdk recommend the pmd drivers to make them
+ available for auto-probing devices.
+ * d/rules support DEB_BUILD_OPTIONS parallel
+ * d/rules bundle autotest as it is ready after build into dpdk-dev
+ to make it available for autopkgtest and likewise developers.
+ * enable dpdk autotests
+ - d/t/test-autotest enable autotests as dep8 test. These fail in many
+ build environments, so put them in an adt where required characteristics
+ can be specified
+
+ [ Gowrishankar Muthukrishnan ]
+ * d/p/dpdk-dev-examples-ip_pipeline-fix-pmd-driver-parameter.patch to make
+ ip_pipeline work properly with -d eal parameter
+ * Update to d/p/dpdk-dev-examples-ip_pipeline-fix-pmd-driver-parameter.patch
+ fixing dl_open issues.
+
+ [ Santiago R.R. ]
+ * debian/rules: Only export hardening related building HOST_/EXTRA flags
+ when dpkg-dev < 1.18.11. On newer dpkg-dev versions, dpkg-buildflags
+ handle them directly and are injected by gcc (6.x). Closes: #843685.
+
+ [ Luca Boccassi ]
+ * Fix DKMS build to use the requested kernel version rather than the running
+ one. (Closes: #843864)
+ * Fix kernel modules build failures due to the new -fPIE default by passing
+ -fno-PIE.
+ * Backport dpdk-dev-kni-fix-build-with-kernel-4.9.patch to fix kernel modules
+ build failures on Linux 4.9.
+ * Mark dpdk-doc as Multi-Arch: foreign
+
+ -- Santiago Ruano Rincón <santiagorr@riseup.net> Wed, 09 Nov 2016 16:04:15 +0100
+
+dpdk (16.07-1) unstable; urgency=medium
+
+ [ Christian Ehrhardt ]
+ * Merge with upstream DPDK 16.07 release
+ * Cleanup Lintian Warnings
+ - d/p/fix-unusual-interpreter.patch fixes "W: dpdk-doc:
+ unusual-interpreter"
+ - d/p/fix-double-license-info.patch fixes "W: dpdk-rte-kni-dkms:
+ extra-license-file"
+ * Renamed d/p/ubuntu-fix-vhost-user-socket-permission.patch to
+ d/p/fix-vhost-user-socket-permission.patch
+ * Add lintian-overrides for: E: dpdk-dev: arch-dependent-file-in-usr-share
+ These binaries are part of the sdk and meant to be shipped with the sdk.
+ * d/p/dpdk-dev-doc-fix-old-dpdk-nic-bind.py-references.patch to fix the
+ docs in regard to 16.07 changes renaming dpdk_nic_bind
+ * d/p/make-load-devel-config-not-to-appear-as-executable.patch to avoid
+ accidentally executing as script and to fix unusual-interpreter lintian
+ warning.
+ * fix d/t/test-initscripts on more recent systemd environments
+ * enable dpdk for ppc64el
+ - add ppc64el arch to valid dpdk pmds and rte libraries
+ - select power config and machine for dpdk build system
+ - disable xen pmd for ppc64el
+ - d/tests: make tests compatible with ppc64el
+ - d/dpdk.conf, d/dpdk-init add 16M huge page support
+ - d/p/fix-power-default-config.patch enable bond PMD on ppc64el
+ * add man pages for installed binaries
+ - add backport of patches from upstream
+ - call generation of man pages in d/rules
+ * d/t/test-dkms retain dkms logs for debugging
+ * fix rte_kni dkms build with kernel >= 4.8
+ - d/p/dpdk-dev-v2-kni-fix-build-with-kernel-4.8.patch replaced macro with
+ its value in kni ethtool drivers.
+
+ [ Anders Roxell ]
+ * debian/control: add pciutils to the dpdk depends list, since lspci is used
+ by the devbind script
+
+ [ Luca Boccassi ]
+ * Add ${shlib:Depends} to dpdk-dev dependencies
+ * Install api and guides in dpdk-doc
+ * Convert debian/rules to new style DH targets
+ * Add Recommends: python to dpdk-doc since it ships python scripts among the
+ examples, fixes Lintian warning about missing python dependencies
+ * Fix typo in dpdk-doc.README.Debian, fixes "W: dpdk-doc:
+ spelling-error-in-readme-debian to to (duplicate word) to"
+ * Fix upstream rc versions by using "~" instead of "-". 16.07-rc1 evaluates
+ as newer than 16.07 which causes issues with Debian tools and Lintian
+ errors and warnings:
+ - W: libethdev4: latest-debian-changelog-entry-without-new-version
+ - E: libethdev4: symbols-file-contains-current-version-with-debian-revision
+ on symbol DPDK_16.04@DPDK_16.04 and 114 others
+ * Add lintian-overrides for: "W: dpdk-doc: embedded-javascript-library"
+ * Add optional binary kernel modules package, disabled by default (build with
+ DEB_BUILD_OPTIONS=kernel_modules to enable). If enabled will build kernel
+ modules against the local, current kernel version (override by adding
+ ksrc=<path/to/kernel/sources> to DEB_BUILD_OPTIONS) into a
+ dpdk-modules-<kernel version> package
+ * Set HOST_/EXTRA/CPP/C/LDFLAGS in d/rules so that all built objects pick up
+ all flags set by the dpkg environment, like hardening flags
+ * Add rte-compile-pre-cppflags.patch to make all DPDK objects pick up the
+ user specified or environment specified CPP/C/LDFLAGS.
+ Fixes Lintian warning:
+ - W: dpdk-dev: hardening-no-relro
+ usr/share/dpdk/x86_64-default-linuxapp-gcc/app/dpdk-pmdinfogen
+ * Add a brief HOWTO to debian/README.source with instructions to build the
+ packages, for CI systems and the like.
+ * Build with RTE_DEVEL_BUILD=n to avoid building test pmds with an rpath
+ hardcoded to the package build PATH. Fixes Lintian Error:
+ - E: dpdk: binary-or-shlib-defines-rpath usr/bin/dpdk-pdump
+ /home/lboccass/git/dpdk_deb/debian/build/shared-root/lib
+ * Fix d/watch file to point to fast.dpdk.org/rel
+ * Allow DPDK_CONFIG, RTE_MACHINE, RTE_TARGET overrides via DEB_BUILD_OPTIONS
+ * Initial Debian release. (Closes: #815760)
+ * Use ?= to allow env var overrides in d/rules
+ * Finalize changelog for upload to unstable.
+
+ [ Santiago RR ]
+ * improve debian/copyright
+ * remove duplicate entries from d/control
+ * debian/control:
+ - dpdk: recommends dkms packages (dpdk-igb-uio-dkms, dpdk-rte-kni-dkms) on
+ arm64 and suggest for other architectures.
+
+ [ Gowrishankar Muthukrishnan ]
+ * enable formerly disabled libraries in ppc64le config
+ * d/control provide now supported packages for ppc64le
+ * d/p/dpdk-dev-ppc-enable-* backports from dpdk to enable more features
+ for ppc64le
+
+ -- Luca Boccassi <luca.boccassi@gmail.com> Tue, 27 Sep 2016 16:40:31 +0100
+
+dpdk (16.07~rc5-1) UNRELEASED; urgency=medium
+
+ [ Ricardo Salveti de Araujo ]
+ * Merge with upstream DPDK 16.07-rc5 release
+
+ [ Luca Boccassi ]
+ * Generate pkgconfig and ship it in libdpdk-dev
+ * Document use of dquilt for patches in debian/README.source
+
+ -- Ricardo Salveti de Araujo <rsalveti@rsalveti.net> Tue, 26 Jul 2016 14:13:38 -0300
+
+dpdk (16.07~rc4-1) UNRELEASED; urgency=medium
+
+ * Merge with upstream DPDK 16.07-rc4 release
+ - Tools renamed, dpdk_nic_bind is now dpdk-devbind
+ * Adapt d/p/ubuntu-fix-vhost-user-socket-permission.patch for dpdk 16.07-rc4
+
+ -- Ricardo Salveti de Araujo <rsalveti@rsalveti.net> Mon, 25 Jul 2016 13:38:13 -0300
+
+dpdk (16.07~rc3-1) UNRELEASED; urgency=medium
+
+ [ Christian Ehrhardt ]
+ * Merge with upstream DPDK 16.07-rc3 release
+ * droping patches/backports that are already upstream in DPDK 16.07-rc3
+ - d/p/ubuntu-fix-bond-symbol-export.patch
+ - d/p/ubuntu-backport-33-vhost-user-add-error-handling-for-fd-1023.patch
+ * adapt d/p/ubuntu-fix-vhost-user-socket-permission.patch for dpdk 16.07-rc3
+ * update symbols
+
+ [ Ricardo Salveti de Araujo ]
+ * debian/rules:
+ - Allow all make commands to be verbose
+ - Fix libdpdk-dev headers path
+ * Renaming package librte-pmd-e10001 to librte-pmd-e1000-1, to avoid mixing
+ package name with soversion (lintian package-name-doesnt-match-sonames)
+ * Adding package librte-pmd-bnxt1
+ * Merging symbols files, handling the arch differences inline instead
+
+ [ Anders Roxell ]
+ * debian/control: add libpcap-dev to libdpdk-dev's Depends list
+
+ -- Christian Ehrhardt <christian.ehrhardt@canonical.com> Tue, 19 Jul 2016 08:32:06 +0200
+
+dpdk (16.07~rc1-1) UNRELEASED; urgency=medium
+
+ [ Christian Ehrhardt ]
+ * Merge with upstream DPDK 16.07-rc1 release
+ * droping patches/backports that are already upstream in DPDK 16.07
+ - d/p/ubuntu-backport-39-lpm-fix-freeing-in-compatibility-mode.patch
+ This was formerly part of a combined patch that we dropped because the
+ majority is upstream (d/p/ubuntu-fix-lpm-use-after-free-and-leak.patch).
+ - d/p/ubuntu-backport-40-linking-fixes-stage-[1-4]-4.patch
+ d/p/ubuntu-backport-44-linking-cleanup.patch
+ Fixing underlinking and overlinking issues in apps and libraries.
+ - d/p/ubuntu-backport-41-fix-install-tar-1.29.patch
+ Fix issues with tar >=1.29 (Yakkety)
+ - d/p/ubuntu-backport-42-increase-default-logging-level.patch
+ avoid default debug messages causing a perf degradation
+ - d/p/ubuntu-backport-43-fix-level-type-retrieving.patch
+ Fix type retrieving which was broken in standard threads
+ - d/p/ubuntu-fix-xenvirt-support-dynamic-page-size.patch: fix build
+ failure on arm64
+ * droping patches/backports that are no more applicable
+ - d/p/ubuntu-backport-38-* was never accepted despite looking good.
+ Upstream discussion around proper successor started.
+ * keeping patches:
+ - d/p/ubuntu-backport-33-vhost-user-add-error-handling-for-fd-1023.patch
+ Was never accepted, Upstream discussion around proper successor started.
+ * adapt debian/* to upstream changes
+ - update symbols and ABI versions
+ - add librte-pdump1
+ * adding changes
+ - fix exported symbols of librte_pmd_bond (sent upstream, can be dropped
+ later)
+
+ -- Christian Ehrhardt <christian.ehrhardt@canonical.com> Wed, 06 Jul 2016 09:40:49 +0200
+
+dpdk (16.04-1) UNRELEASED; urgency=medium
+
+ [ Christian Ehrhardt ]
+ * Merge with upstream DPDK 16.04 release
+ * droping patches/backports that are already upstream in DPDK 16.04
+ - d/p/ubuntu-fix-doc-installpath.patch
+ - d/p/ubuntu-fix-testpmd-without-xen.patch
+ - d/p/ubuntu-fix-lpm-use-after-free-and-leak.patch
+ - d/p/ubuntu-backport-[01-32,34-35] backports for stability
+ - d/p/ubuntu-backport-[36-37] but keep doc and example changes in d/*
+ * droping patches for soname / linking fixups.
+ - Upstream now goes with proper soname/abi/api handling per sublib plus a
+ linker script.
+ - dropped d/p/ubuntu-combined-shared-lib-abiversion.patch
+ - dropped d/p/ubuntu-fix-library-linkage.patch
+ * keeping patches:
+ - d/p/ubuntu-backport-38-* fix for memory leak
+ this now applies as is, so changed from a modified backport to match the
+ post 16.04 upstream commit now.
+ - d/p/ubuntu-backport-33-vhost-user-add-error-handling-for-fd-1023.patch
+ - doc and example changes that were related to d/p/ubuntu-backport-[36-37]
+ - d/p/ubuntu-fix-vhost-user-socket-permission.patch adapted for dpdk-16.04:
+ In the new build system with sublibs the exposed function needs to be
+ listed in lib/librte_eal/linuxapp/eal/rte_eal_version.map
+ * adding upstream backports - can be dropped when merging DPDK 16.07.
+ - d/p/ubuntu-backport-39-lpm-fix-freeing-in-compatibility-mode.patch
+ This was formerly part of a combined patch that we dropped because the
+ majority is upstream (d/p/ubuntu-fix-lpm-use-after-free-and-leak.patch).
+ - d/p/ubuntu-backport-40-linking-fixes-stage-[1-4]-4.patch
+ d/p/ubuntu-backport-44-linking-cleanup.patch
+ Fixing underlinking and overlinking issues in apps and libraries.
+ - d/p/ubuntu-backport-41-fix-install-tar-1.29.patch
+ Fix issues with tar >=1.29 (Yakkety)
+ - d/p/ubuntu-backport-42-increase-default-logging-level.patch
+ avoid default debug messages causing a perf degradation
+ - d/p/ubuntu-backport-43-fix-level-type-retrieving.patch
+ Fix type retrieving which was broken in standard threads
+ * adapt to new build system
+ - drop enabling the following build config symbols as they no more exist
+ CONFIG_RTE_BUILD_COMBINE_LIBS
+ - Sub-Libraries are now packaged in a versioned package per library. That
+ allows consumers of dpdk to just depend on what they need. As well as
+ installation of multiple .so versions concurrently.
+ - added the hidden dependency of librte_eal to librte_mempool
+ - use dpkg-buildflags and properly enable hardening
+ * Adding DKMS package for rte_kni (LP: #1592786)
+
+ [ Ricardo Salveti ]
+ * Adding support for ARM64:
+ - debian/control: adding arm64 to the supported architecture list
+ - debian/rules: supporting dpdk config and machine for arm64
+ - d/p/ubuntu-fix-xenvirt-support-dynamic-page-size.patch: fix build
+ failure on arm64
+ - debian/dpdk-sdk-env.sh: generating the right RTE_TARGET during build
+ time, so we can also make it compatible with ARM64
+ - debian/tests: also making tests compatible with ARM64
+ * Adding DKMS package for igb_uio
+ * Build static dpdk with -fPIC so it can be used by shared libraries
+ * debian/copyright: fixing Canonical's copyright entry
+ * Renaming symbol files so they can match the right package
+ * Drop the arch specific symbol files, as they are identical
+
+ [ Anders Roxell ]
+ * debian/dpdk.init: add remote_fs (lintian)
+ * debian/control: fixing week-library-dev-dependency (lintian)
+
+ -- Christian Ehrhardt <christian.ehrhardt@canonical.com> Tue, 17 May 2016 14:23:21 +0200
+
+dpdk (2.2.0-0ubuntu9) yakkety; urgency=medium
+
+ * d/p/ubuntu-backport-[36-37] fix virtio issues (LP: #1570195):
+ - don't let DPDK initialize virtio devices still in use by the kernel
+ - this avoids conflicts between kernel and dpdk usage of those devices
+ - an admin now has to unbind/bind devices as on physical hardware
+ - this is in the dpdk 16.04 release and delta can then be dropped
+ - d/dpdk-doc.README.Debian update for changes in virtio-pci handling
+ - d/dpdk.interfaces update for changes in virtio-pci handling
+ * d/p/ubuntu-backport-38... fix for memory leak (LP: #1570466):
+ - call vhost_destroy_device on removing vhost user ports to fix memory leak
+ - this likely is in the dpdk 16.07 release and delta can then be dropped
+ * d/p/ubuntu-fix-vhost-user-socket-permission.patch fox (LP: #1546565):
+ - when vhost_user sockets are created they are owner:group of the process
+ - the DPDK api to create those has no way to specify owner:group
+ - to fix that without breaking the API and potential workaround code in
+ consumers of the library like openvswitch 2.6 for example. This patch
+ adds an EAL commandline option to specify user:group created vhost_user
+ sockets should have.
+
+ -- Christian Ehrhardt <christian.ehrhardt@canonical.com> Wed, 27 Apr 2016 07:52:48 -0500
+
+dpdk (2.2.0-0ubuntu7) xenial; urgency=medium
+
+ * Increase max_map_count after setting huge pages (LP: #1507921):
+ - The default config of 65530 would cause issues as soon as about 64GB or
+ more are used as 2M huge pages for dpdk.
+ - Increase this value to base+2*#hugepages to avoid issues on huge systems.
+ * d/p/ubuntu-backport-[28-32,34-35] backports for stability (LP: #1568838):
+ - these will be in the 16.04 dpdk release, delta can then be dropped.
+ - 5 fixes that do not change api/behaviour but fix serious issues.
+ - 01 f82f705b lpm: fix allocation of an existing object
+ - 02 f9bd3342 hash: fix multi-process support
+ - 03 1aadacb5 hash: fix allocation of an existing object
+ - 04 5d7bfb73 hash: fix race condition at creation
+ - 05 fe671356 vfio: fix resource leak
+ - 06 356445f9 port: fix ring writer buffer overflow
+ - 07 52f7a5ae port: fix burst size mask type
+ * d/p/ubuntu-backport-33-vhost-user-add-error-handling-for-fd-1023.patch
+ - this will likely be in dpdk release 16.07 and delta can then be dropped.
+ - fixes a crash on using fd's >1023 (LP: #1566874)
+ * d/p/ubuntu-fix-lpm-use-after-free-and-leak.patch fix lpm_free (LP: #1569375)
+ - the old patches had an error freeing a pointer which had no meta data
+ - that lead to a crash on any lpm_free call
+ - folded into the fix that generally covers the lpm allocation and free
+ weaknesses already (also there this particular mistake was added)
+
+ -- Christian Ehrhardt <christian.ehrhardt@canonical.com> Tue, 12 Apr 2016 16:13:47 +0200
+
+dpdk (2.2.0-0ubuntu6) xenial; urgency=medium
+
+ * d/dpdk-init fix handling of multiple huge page sizes (LP: #1557532):
+ - dpdk-init now ensures non-default-hugepage-size mountpoints are
+ available as well.
+ - extra mountpoints are only created if requested in dpdk.conf and not yet
+ available (e.g. by the admin).
+ * d/dpdk-init fix issues with unassigned devices (LP: #1558485):
+ - dpdk-init no more checks /sys/.../driver of the device unconditionally
+ - removed the superfluous tr call in that path
+ * d/p/ubuntu-fix-lpm-use-after-free-and-leak.patch lpm/lpm6 (LP: #1554009):
+ - lpm/lpm6 fix use after free on lpm[6]_create
+ - lpm/lpm6 fix missing frees of rules_tbl substructure
+ - lpm/lpm6 fix missing free of lpm due to early exit
+ - make RTE_LOG messages of the failed allocation unique
+ * d/p/ubuntu-backport-[01-26] backport for stability (LP: #1559981):
+ - these will be in the following dpdk release and delta can then be dropped
+ - 26 fixes that do not change api/behaviour but fix serious issues
+ - 01 d3a274ce app/testpmd: handle SIGINT and SIGTERM
+ - 02 308df2bf Handle SIGINT and SIGTERM in l3fwd.
+ - 03 da82ee17 tools: fix unbinding failure handling
+ - 04 16c1814c tools: support Python 3 in bind script
+ - 05 bb9f4085 tools: support binding to built-in kernel modules
+ - 06 6e7caa1a eal/linux: support built-in kernel modules
+ - 07 86f36ff9 mempool: fix leak when creation fails
+ - 08 ca67ed28 vhost: fix leak of fds and mmaps
+ - 09 fa11a8a7 port: fix crash for ring writer nodrop
+ - 10 04f36690 port: fix crash for ethdev writer nodrop
+ - 11 c7a4ff80 i40e: fix overflow
+ - 12 097e920c i40e: fix inverted check for no refcount
+ - 13 330aa319 i40e: fix VLAN filtering
+ - 14 9f44dd3d i40e/base: fix missing check for stopped admin queue
+ - 15 8a880736 i40e/base: fix driver load failure
+ - 16 7656a546 fm10k: fix VLAN flag in scattered Rx
+ - 17 c6fb0e55 pcap: fix captured frame length
+ - 18 6e027237 bonding: fix detach of bonded device
+ - 19 df3e8ad7 bonding: fix detach of slave devices
+ - 20 786c990a bonding: copy entire config structure in mode 4
+ - 21 6698820b bonding: do not ignore multicast in mode 4
+ - 22 8997a10b bonding: fix active slaves with no primary
+ - 23 7a7122ed bonding: do not activate slave twice
+ - 24 2186fff3 bonding: fix crash when no slave device
+ - 25 c680a4a8 virtio: fix crash in statistics functions
+ - 26 3b1e3e4e virtio: fix descriptors pointing to the same buffer
+ * d/p/ubuntu-backport-27-virtio-fix-restart.patch for (LP: #1559981):
+ - fixing re-initializing the ethdev as openvswitch-dpdk does in the
+ virtio pmd driver by moving the detection of already being initialized
+ from virtio_dev_close to virtio_dev_start/stop
+ - this will be in the following dpdk release and delta can then be dropped
+ * d/rules build with debuginfo (LP: #1560839):
+ - exporting CFLAGS for all dpdk build processes
+ - dh_strip will automatically and create -dbgsym packages accordingly
+
+ -- Christian Ehrhardt <christian.ehrhardt@canonical.com> Wed, 23 Mar 2016 10:34:50 +0100
+
+dpdk (2.2.0-0ubuntu5) xenial; urgency=medium
+
+ * d/t/test-initscripts fix issues regarding 1G hugepages
+ - the dep8 was already taking care of 1G hugepages being not supported in
+ some environments. But it was failing when supported, but not enough
+ memory available.
+
+ -- Christian Ehrhardt <christian.ehrhardt@canonical.com> Wed, 09 Mar 2016 17:19:24 +0000
+
+dpdk (2.2.0-0ubuntu4) xenial; urgency=medium
+
+ * harden d/dpdk-init for configuration issues (LP: #1551601):
+ - detect and warn about bad bus specifications.
+ - detect and warn about incomplete device specifications.
+ - detect and warn about non existing pci IDs.
+ - avoid failing when working with unassigned devices.
+ - d/t/test-initscripts now testing various misconfigs.
+ - d/t/test-initscripts now also verifying service status.
+ * d/dpdk-init d/dpdk.conf now also support 1G hugepages (LP: #1551767):
+ - detect and warn if 1G pages are not available but configured.
+ - d/t/test-initscripts now also testing hugepage allocations.
+ - d/dpdk.conf has an option to drop caches to incease the likeliness of
+ successful 1G hugepage allocations (default off).
+ * d/rules replaced uname -m with DEB_HOST_GNU_CPU (LP: #1551796):
+ * fix testpmd to run without Xen environment (LP: #1551752):
+ - upstream discussion is slow, but we need a fix now. We can drop this
+ and change to the upstream solution when it is available.
+ * avoid errors due to missing modules (LP: #1554397):
+ - d/dpdk-init gracefully warns about missing modules.
+ - d/control now suggests linux-image-generic.
+ - d/dpdk.interfaces has a comment that makes the user aware.
+ * d/dpdk-init fix failure loading vfio-pci (LP: #1554214):
+ - d/dpdk-init no more converts "-" to "_" to make vfio-pci work
+ - d/dpdk.interfaces enhanced comments and updated examples
+ - d/dpdk-doc.README.debian got extra notes about using some modules
+ * unify whitespace/tabs in packaging and scripts
+ - tabs/spaces to just spaces in d/dpdk-init and d/dpdk.init.
+ - few remaining spaces to tabs in d/rules
+ * d/t/test-* now satisfy shellcheck
+ * d/* fix various comments and guides to be more readable
+ * d/dpdk-init and d/copyright updated copyright information
+
+ -- Christian Ehrhardt <christian.ehrhardt@canonical.com> Wed, 09 Mar 2016 08:48:58 +0000
+
+dpdk (2.2.0-0ubuntu3) xenial; urgency=medium
+
+ * Guard dep8 tests against non supported platforms (LP: #1551158):
+ - d/t/control now avoids failing due to "dependencies are unsatisfiable"
+ when fetching packages. The packages architecture restrictions got added
+ to avoid that.
+ - d/t/check-dpdk-supported-arch.sh is called by all DPDK tests to ensure
+ the platform is supported. If not it skips the test.
+
+ -- Christian Ehrhardt <christian.ehrhardt@canonical.com> Mon, 29 Feb 2016 11:03:39 +0000
+
+dpdk (2.2.0-0ubuntu2) xenial; urgency=medium
+
+ [ Christian Ehrhardt ]
+ * fix libdpdk.so library linking (LP: #1547517)
+ - libdpdk.so now has proper linkage information (was underlinked)
+ Note: this can be dropped when moving to DPDK 2.3 with linker script
+ instead of combined shared lib.
+ - remove reference to extra linkage needed when building against -ldpdk
+ in dpdk-doc README.
+ - add dep8 d/t/test-linkage to verify linking dpdk works as expected.
+ * d/control remove ${shlibs:Depends} on package with no linked binary
+ avoiding dpkg-gencontrol build warning about unknown ${shlibs:Depends}.
+ * d/dpdk-doc.README.debian fix path to DPDK build environment variable
+ helper script in README file.
+ * Update VCS Info in d/control to include our repositories.
+
+ [ James Page ]
+ * d/*: wrap-and-sort.
+ * d/control: Trim trailing whitespace.
+
+ -- Christian Ehrhardt <christian.ehrhardt@canonical.com> Thu, 25 Feb 2016 16:07:21 +0000
+
+dpdk (2.2.0-0ubuntu1) xenial; urgency=low
+
+ * Merge from Upstream to DPDK 2.2
+ Remaining changes:
+ - Set soabi for the combined shared library
+ * Drop changes:
+ - configuring RTE_LIBNAME to dpdk as it is the upstream default now
+ - enabled formerly non building components as they build properly in 2.2
+ - d/p/ubunut-avoid-texlive-fonts-extra, d/control:
+ Replace use of DejaVuSansMono is no more needed as upstream changed the
+ font. Thereby we can drop our delta.
+ - d/p/ubuntu-fix-gcc5-ftbs.patch no more needed with DPDK 2.2
+ * Added changes
+ - Disable CONFIG_RTE_NEXT_ABI as required for packaging (git 506f51cc)
+ - Enable LIBRTE_PMD_PCAP which is useful for some DPDK testcase examples
+ this adds a build dependency to libpcap-dev
+ - Fully support DH_VERBOSE for build debugging convenience
+ - adapt to new make infrastructure of dpdk 2.2
+ - d/README.debian: convert into d/dpdk-doc.README.debian
+ - d/dpdk-doc.README.debian: update recommendations about sdk env variables
+ - d/dpdk-sdk-env.sh: now deployed in /usr/share/dpdk to be opt in
+ - enable XEN support for dpdk (LP: #1521289).
+
+ -- Christian Ehrhardt <christian.ehrhardt@canonical.com> Wed, 17 Feb 2016 09:29:28 +0100
+
+dpdk (2.0.0-0ubuntu3) xenial; urgency=medium
+
+ * Only generate HTML documentation, easing backports to 14.04 and
+ reducing the time to build and size of the -doc package (LP: #1524700).
+
+ -- James Page <james.page@ubuntu.com> Thu, 10 Dec 2015 10:23:51 +0000
+
+dpdk (2.0.0-0ubuntu2) xenial; urgency=low
+
+ * d/p/ubunut-avoid-texlive-fonts-extra, d/control:
+ Replace use of DejaVuSansMono by courier and drop dependency on the
+ texlive-fonts-extra package (which is in universe).
+ * d/watch added to allow use of uscan to check for upstream releases.
+ * d/dpdk-init: fix error if bash variables could not be resolved that
+ appeared as "[: -gt: unexpected operator" (had no functional impact)
+ * d/dpdk-init:
+ Replace use of head and cut (in /usr/bin) commands with sed (in /bin)
+ while also adding /usr/bin to the PATH used on direct /etc/init.d/dpdk
+ invocation. The PATH is only updated to be on the safe side, there
+ should be no other commands from /usr/bin used (LP: #1516543).
+ * d/t/test-mountpoint: add dep8 test to cover the issue of LP #1517075.
+ * d/dpdk-dev.install: Copy the SDK makefiles into place (LP: #1517075).
+
+ -- Stefan Bader <stefan.bader@canonical.com> Tue, 17 Nov 2015 11:50:15 +0100
+
+dpdk (2.0.0-0ubuntu1) wily; urgency=low
+
+ * Initial release (LP: #1487538)
+
+ -- Stefan Bader <stefan.bader@canonical.com> Mon, 01 Jun 2015 18:46:38 +0200
diff --git a/debian/compat b/debian/compat
new file mode 100644
index 00000000..ec635144
--- /dev/null
+++ b/debian/compat
@@ -0,0 +1 @@
+9
diff --git a/debian/control b/debian/control
new file mode 100644
index 00000000..ce180217
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,734 @@
+Source: dpdk
+Priority: optional
+Maintainer: deb_dpdk Packagers <deb-dpdk@lists.fd.io>
+Uploaders: Luca Boccassi <bluca@debian.org>,
+ Christian Ehrhardt <christian.ehrhardt@canonical.com>,
+ Santiago Ruano Rincón <santiagorr@riseup.net>
+Build-Depends: debhelper (>= 9),
+ debhelper (>= 9.20160709) | dh-systemd (>= 1.5),
+ dh-python,
+ dkms,
+ doxygen <!nodoc>,
+ graphviz <!nodoc>,
+ inkscape <!nodoc>,
+ libcap-dev,
+ libpcap-dev,
+ libxen-dev [amd64 arm64 i386],
+ libxenstore3.0 [amd64 arm64 i386],
+ python,
+ python-sphinx <!nodoc>,
+ python-sphinx-rtd-theme <!nodoc>,
+ texlive-fonts-recommended <!nodoc>,
+ texlive-latex-extra <!nodoc>
+Standards-Version: 4.1.1
+Section: libs
+Homepage: http://www.dpdk.org
+Vcs-Git: https://gerrit.fd.io/r/deb_dpdk
+Vcs-Browser: https://gerrit.fd.io/r/gitweb?p=deb_dpdk.git
+
+Package: dpdk
+Section: admin
+Architecture: amd64 arm64 i386 ppc64el
+Depends: hwdata,
+ lsb-base (>= 3.2-14),
+ pciutils,
+ ${misc:Depends},
+ ${python:Depends},
+ ${shlibs:Depends}
+Recommends: ${librte:Recommends},
+Suggests: dpdk-doc,
+ dpdk-igb-uio-dkms (= ${binary:Version}),
+ dpdk-rte-kni-dkms (= ${binary:Version}),
+ linux-image-generic,
+ python-pyelftools,
+Description: Data Plane Development Kit (runtime)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime environment to run DPDK applications.
+
+Package: dpdk-dev
+Section: devel
+Architecture: amd64 arm64 i386 ppc64el
+Depends: libdpdk-dev (= ${binary:Version}), ${misc:Depends}, ${shlibs:Depends}
+Description: Data Plane Development Kit (development files)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains examples and the upstream build environment. It is
+ not strictly required in order to build external applications.
+
+Package: dpdk-doc
+Section: doc
+Architecture: all
+Multi-Arch: foreign
+Homepage: http://dpdk.org/doc/guides/index.html
+Depends: libjs-jquery, libjs-underscore, ${misc:Depends}, ${python:Depends}
+Recommends: python, ${python:Recommends}
+Description: Data Plane Development Kit (documentation)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the complete set of documentation and guides.
+
+Package: dpdk-igb-uio-dkms
+Section: kernel
+Architecture: amd64 arm64 i386 ppc64el
+Depends: dkms,
+ dpdk-dev (= ${binary:Version}),
+ libdpdk-dev (= ${binary:Version}),
+ make,
+ ${misc:Depends}
+Description: Data Plane Development Kit (igb uio dkms)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the source code for the igb_uio kernel module.
+
+Package: dpdk-rte-kni-dkms
+Section: kernel
+Architecture: amd64 arm64 i386 ppc64el
+Depends: dkms,
+ dpdk-dev (= ${binary:Version}),
+ libdpdk-dev (= ${binary:Version}),
+ make,
+ ${misc:Depends}
+Description: Data Plane Development Kit (rte kni dkms)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the source code for the rte_kni kernel module.
+
+Package: libdpdk-dev
+Section: libdevel
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Pre-Depends: ${misc:Pre-Depends}
+Depends: libpcap-dev,
+ ${librte:Depends},
+ ${misc:Depends}
+Description: Data Plane Development Kit (basic development files)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the basic headers and library files required to
+ build external applications which will also require at least SSE3 support
+ when running.
+
+Package: librte-ethdev5
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/api/rte__ethdev_8h.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (libethdev runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for libethdev.
+
+Package: librte-acl2
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/api/rte__acl_8h.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-acl runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_acl.
+
+Package: librte-cfgfile2
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/api/rte__cfgfile_8h.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-cfgfile runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_cfgfile.
+
+Package: librte-cmdline2
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/api/cmdline_8h.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-cmdline runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_cmdline.
+
+Package: librte-cryptodev2
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/api/rte__cryptodev_8h.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-cryptodev runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_cryptodev.
+
+Package: librte-distributor1
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/api/rte__distributor_8h.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-distributor runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_distributor.
+
+Package: librte-eal3
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/api/rte__eal_8h.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-eal runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_eal.
+
+Package: librte-hash2
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/api/rte__hash_8h.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-hash runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_hash.
+
+Package: librte-ip-frag1
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/api/rte__ip__frag_8h.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-ip-frag runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_ip_frag.
+
+Package: librte-jobstats1
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/api/rte__jobstats_8h_source.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-jobstats runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_jobstats.
+
+Package: librte-kni2
+Architecture: amd64 arm64 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/api/rte__kni_8h.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-kni runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_kni.
+
+Package: librte-kvargs1
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/api/rte__kvargs_8h.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-kvargs runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_kvargs.
+
+Package: librte-lpm2
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/api/rte__lpm_8h.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-lpm runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_lpm.
+
+Package: librte-mbuf2
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/api/rte__mbuf_8h.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-mbuf2 runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_mbuf.
+
+Package: librte-mempool2
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/api/rte__mempool_8h.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-mempool runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_mempool.
+
+Package: librte-meter1
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/api/rte__meter_8h.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-meter runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_meter.
+
+Package: librte-pipeline3
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/api/rte__pipeline_8h.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-pipeline runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_pipeline.
+
+Package: librte-net1
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/guides/prog_guide/overview.html?highlight=librte_net#librte-net
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-net runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_net.
+ .
+ The librte_net library is a collection of IP protocol definitions and
+ convenience macros. It is based on code from the FreeBSD* IP stack and
+ contains protocol numbers (for use in IP headers), IP-related macros,
+ IPv4/IPv6 header structures and TCP, UDP and SCTP header structures.
+
+Package: librte-pmd-af-packet1
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/browse/dpdk/tree/drivers/net/af_packet
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-pmd-af-packet runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_pmd_af_packet.
+
+Package: librte-pmd-bnxt1
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/guides/nics/bnxt.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-pmd-bnxt runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_pmd_bnxt.
+
+Package: librte-pmd-bond1
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/guides/prog_guide/link_bonding_poll_mode_drv_lib.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-pmd-bond runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_pmd_bond.
+
+Package: librte-pmd-cxgbe1
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/guides/nics/cxgbe.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-pmd-cxgbe runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_pmd_cxgbe.
+
+Package: librte-pmd-e1000-1
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/guides/nics/e1000em.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-pmd-e1000 runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_pmd_e1000.
+
+Package: librte-pmd-ena1
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/guides/nics/ena.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-pmd-ena runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_pmd_ena.
+
+Package: librte-pmd-enic1
+Architecture: amd64 arm64 i386
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/guides/nics/enic.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-pmd-enic runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_pmd_enic.
+
+Package: librte-pmd-fm10k1
+Architecture: amd64 i386
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/guides/nics/fm10k.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-pmd-fm10k runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_pmd_fm10k.
+
+Package: librte-pmd-i40e1
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/guides/nics/i40e.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-pmd-i40e runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_pmd_i40e.
+
+Package: librte-pmd-ixgbe1
+Architecture: amd64 arm64 i386
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/guides/nics/ixgbe.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-pmd-ixgbe runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_pmd_ixgbe.
+
+Package: librte-pmd-null-crypto1
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/guides/cryptodevs/null.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-pmd-null-crypto runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_pmd_null_crypto.
+
+Package: librte-pmd-null1
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/browse/dpdk/tree/drivers/net/null
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-pmd-null runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_pmd_null.
+
+Package: librte-pmd-pcap1
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/guides/nics/pcap_ring.html#libpcap-based-pmd
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-pmd-pcap runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_pmd_pcap.
+
+Package: librte-pmd-ring2
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/guides/nics/pcap_ring.html#rings-based-pmd
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-pmd-ring runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_pmd_ring.
+
+Package: librte-pmd-vhost1
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/guides/nics/vhost.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-pmd-vhost runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_pmd_vhost.
+
+Package: librte-pmd-virtio1
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/guides/nics/virtio.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-pmd-virtio runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_pmd_virtio.
+
+Package: librte-pmd-vmxnet3-uio1
+Architecture: amd64 arm64 i386
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/guides/nics/vmxnet3.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-pmd-vmxnet3-uio runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_pmd_vmxnet3_uio.
+
+Package: librte-pmd-xenvirt1
+Architecture: amd64 arm64 i386
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/guides/xen/pkt_switch.html#xen-pmd-frontend-prerequisites
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-pmd-xenvirt runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_pmd_xenvirt.
+
+Package: librte-pmd-qede1
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/guides/nics/qede.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-pmd-qede runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_pmd_qede which is
+ The base driver is the backend module for the QLogic FastLinQ QL4xxxx
+ 25G/40G CNA family of adapters as well as their virtual functions (VF)
+ in SR-IOV context.
+
+Package: librte-port3
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/api/rte__port_8h.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-port runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_port.
+
+Package: librte-power1
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/api/rte__power_8h.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-power runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_power.
+
+Package: librte-reorder1
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/api/rte__reorder_8h.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte-reorder runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_reorder.
+
+Package: librte-ring1
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/api/rte__ring_8h.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte_ring runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_ring.
+
+Package: librte-sched1
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/api/rte__sched_8h.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte_sched runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_sched.
+
+Package: librte-table2
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/api/rte__table_8h.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte_table runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_table.
+
+Package: librte-timer1
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/api/rte__timer_8h.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte_timer runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_timer.
+
+Package: librte-vhost3
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/api/rte__vhost_8h.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte_vhost runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_vhost.
+
+Package: librte-pdump1
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk0
+Description: Data Plane Development Kit (librte_pdump runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_pdump.
+
+Package: librte-pmd-thunderx-nicvf1
+Architecture: amd64 arm64 i386 ppc64el
+Multi-Arch: same
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Conflicts: libdpdk
+Description: Data Plane Development Kit (librte_pmd_thunderx_nicvf runtime library)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ .
+ This package contains the runtime libraries for librte_pmd_thunderx_nicvf.
+
diff --git a/debian/control.modules.in b/debian/control.modules.in
new file mode 100644
index 00000000..88141546
--- /dev/null
+++ b/debian/control.modules.in
@@ -0,0 +1,14 @@
+Package: dpdk-modules-#KVERS#
+Section: kernel
+Architecture: amd64 arm64 i386
+Depends: linux-image-#KVERS# #KDREV#
+Provides: dpdk-modules
+Conflicts: dpdk-igb-uio-dkms, dpdk-rte-kni-dkms
+Built-Using: ${built:using:kernel}
+Description: Data Plane Development Kit (rte kni, igb uio modules)
+ DPDK is a set of libraries for fast packet processing. Applications run
+ in user-space and communicate directly with dedicated network interfaces.
+ This package contains the source code for the igb_uio kernel module.
+ .
+ This package provides the kernel drivers for userspace networking.
+ Includes Intel DPDK kernel modules.
diff --git a/debian/copyright b/debian/copyright
new file mode 100644
index 00000000..9d36e823
--- /dev/null
+++ b/debian/copyright
@@ -0,0 +1,138 @@
+Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: dpdk
+Source: http://dpdk.org
+
+Files: *
+Copyright: 2008-2014 Cisco Systems, Inc.
+ 2012-2014 6WIND S.A.
+ 1999-2016 Intel Corporation.
+ 2010-2013 Tilera Corporation.
+ 2012-2016 Mellanox.
+ 2007 VMware, Inc.
+ 2007 Nuova Systems, Inc.
+ 2014 IBM Corporation.
+ and many other contributors.
+License: BSD-3-clause
+
+Files:
+ lib/librte_eal/linuxapp/igb_uio/*
+ lib/librte_eal/linuxapp/kni/*
+Copyright: 2007-2016, Intel Corporation
+ 2006-2007 Myricom, Inc. for some LRO specific code
+License: GPL-2
+
+Files: drivers/net/enic/*
+Copyright: 2007, Nuova Systems, Inc.
+ 2008-2016, Cisco Systems, Inc.
+License: BSD-2-clause
+
+Files:
+ lib/librte_eal/common/include/rte_pci_dev_*.h
+ lib/librte_eal/linuxapp/xen_dom0/*
+ lib/librte_vhost/eventfd_link/eventfd_link.h
+ drivers/crypto/qat/qat_adf/*
+Copyright: 2010-2016, Intel Corporation.
+License: BSD-3-clause or GPL-2
+
+Files:
+ lib/librte_eal/bsdapp/eal/include/exec-env/rte_dom0_common.h
+ lib/librte_eal/linuxapp/eal/include/exec-env/rte_dom0_common.h
+ lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h
+Copyright: 2007-2014, Intel Corporation.
+License: BSD-3-clause or LGPL-2.1
+
+Files: lib/librte_compat/rte_compat.h
+ drivers/net/vmxnet3/base/upt1_defs.h
+ drivers/net/vmxnet3/base/vmxnet3_defs.h
+ scripts/validate-abi.sh
+Copyright: 2015, Neil Horman <nhorman@tuxdriver.com>
+ 2007, VMware, Inc.
+License: BSD-2-clause
+
+Files: buildtools/pmdinfogen/*
+Copyright: 2016, Neil Horman <nhorman@tuxdriver.com>
+License: GPL-2
+
+Files: debian/*
+Copyright: 2015, 2016 Canonical Ltd.
+License: GPL-3
+
+Files: debian/kernel-version
+ debian/prep-modules
+Copyright: 2009-2016 Andreas Beckmann <anbe@debian.org>
+ 2010-2016 Russ Allbery <rra@debian.org>
+License: GPL-2.0+
+
+License: GPL-2
+ On Debian systems, the complete text of the GNU General
+ Public License version 2 can be found in "/usr/share/common-licenses/GPL-2".
+
+License: GPL-2.0+
+ This package is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+ .
+ On Debian systems, the complete text of the GNU General Public
+ License version 2 can be found in "/usr/share/common-licenses/GPL-2".
+
+License: GPL-3
+ On Debian systems, the complete text of the GNU General
+ Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
+
+License: LGPL-2.1
+ On Debian systems, the complete text of the GNU Library General Public
+ License can be found in the file `/usr/share/common-licenses/LGPL-2.1'.
+
+License: BSD-2-clause
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ .
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ .
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ .
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+License: BSD-3-clause
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ .
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of Intel Corporation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+ .
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/debian/dh-dbgsym-metapkg b/debian/dh-dbgsym-metapkg
new file mode 100755
index 00000000..fecbed18
--- /dev/null
+++ b/debian/dh-dbgsym-metapkg
@@ -0,0 +1,24 @@
+#!/bin/sh -e
+
+PACKAGE=${1:?Missing parameter}
+
+dh_installdocs -p${PACKAGE}
+dh_installchangelogs -p${PACKAGE}
+dh_compress -p${PACKAGE}
+
+install -d debian/${PACKAGE}/DEBIAN
+
+echo -n 'misc:Depends=' > debian/${PACKAGE}.substvars
+grep -E 'lib.*-dbgsym' debian/files | tr '_' ' ' | \
+ awk '{ print $1,"(=",$2 ")" }' | paste -sd ',' - | \
+ sed -e 's/,/, /g' >> debian/${PACKAGE}.substvars
+
+dh_gencontrol -p libdpdk-dev -- \
+ -Pdebian/${PACKAGE} \
+ -Tdebian/${PACKAGE}.substvars \
+ -UPre-Depends -URecommends -USuggests -UEnhances -UProvides \
+ -UEssential -UConflicts -UReplaces -UBreaks \
+ -DSection=debug -DPriority=extra \
+ -DAuto-Built-Package=debug-symbols \
+ -DPackage=${PACKAGE} "-DDepends=\${misc:Depends}" \
+ "-DDescription=Debug symbols for libdpdk-dev (meta-package)"
diff --git a/debian/dpdk-dev.lintian-overrides b/debian/dpdk-dev.lintian-overrides
new file mode 100644
index 00000000..2d24d920
--- /dev/null
+++ b/debian/dpdk-dev.lintian-overrides
@@ -0,0 +1,3 @@
+# Upstream distributes it like this, these are binaries which are
+# part of the sdk which is shipped in dpdk-dev.
+dpdk-dev: arch-dependent-file-in-usr-share
diff --git a/debian/dpdk-dev.preinst.in b/debian/dpdk-dev.preinst.in
new file mode 100644
index 00000000..027e2cf0
--- /dev/null
+++ b/debian/dpdk-dev.preinst.in
@@ -0,0 +1,41 @@
+#!/bin/sh
+# preinst script for dpdk-dev
+#
+# see: dh_installdeb(1)
+
+set -e
+
+# summary of how this script can be called:
+# * <new-preinst> `install'
+# * <new-preinst> `install' <old-version>
+# * <new-preinst> `upgrade' <old-version>
+# * <old-preinst> `abort-upgrade' <new-version>
+# for details, see http://www.debian.org/doc/debian-policy/ or
+# the debian-policy package
+
+
+case "$1" in
+ upgrade)
+ # include used to be a symlink to /usr/include/dpdk but to support
+ # multiarch it was changed to a full copy, but dpkg will not
+ # substitute a symlink with a directory by itself, see #626203
+ if [ -L /usr/share/dpdk/@@RTE_TARGET@@/include ] ; then
+ rm /usr/share/dpdk/@@RTE_TARGET@@/include
+ fi
+ ;;
+
+ install|abort-upgrade)
+ ;;
+
+ *)
+ echo "preinst called with unknown argument \`$1'" >&2
+ exit 1
+ ;;
+esac
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian/dpdk-doc.README.Debian b/debian/dpdk-doc.README.Debian
new file mode 100644
index 00000000..0e3866a9
--- /dev/null
+++ b/debian/dpdk-doc.README.Debian
@@ -0,0 +1,64 @@
+dpdk for Debian
+---------------
+
+This package is currently compiled for the lowest possible CPU requirements.
+Which still requires at least SSE3 to be supported by the CPU.
+
+dpdk (runtime) / libdpdk0:
+
+For runtime /etc/dpdk/interfaces holds a list of PCI devices to be assigned
+to DPDK compatible drivers and /etc/dpdk/dpdk.conf allows one to define the
+number of hugepages to be reserved at boot.
+The runtime environment is not required to build applications that use
+DPDK but if those applications get packaged they should depend on the
+runtime.
+
+Since DPDK technically would be able to use all of your compatible card/driver
+combination it is required that you take care of blacklisting / whitelisting
+network cards to tell dpdk which it has to initialize (especially true for
+virtio-pci as the normal kernel driver is considered compatible).
+
+If you are working with virtio-pci network cards it isn't a hard requirement to
+assign them to a dpdk compatible userspace driver like uio_pci_generic. But you
+have to at least unbind them from the default kernel driver (virtio-pci) to
+avoid bugs by dpdk and the kernel working on them simultaneously. It is
+recommended to reassign them to dpdk compatible drivers using
+/etc/dpdk/interfaces (just as you would with any physical card).
+
+libdpdk0 contains the shared object needed to run a program in terms of symbol
+resolution, but none of the other runtime environment pieces.
+
+dpdk-dev / libdpdk-dev:
+
+The minimum requirement for developing external applications is libdpdk-dev,
+which brings the headers and library files.
+
+In dpdk-dev is the upstream makefile environment. Sample applications, which
+are shipped in dpdk-doc, are providing makefiles.
+Those makefiles need to find the dpdk build system. To do so they need some
+environment variables defined:
+ export RTE_TARGET="$(uname -m)-default-linuxapp-gcc"
+ export RTE_SDK="/usr/share/dpdk/"
+ export RTE_INCLUDE="/usr/include/dpdk"
+Those can be set by the user to overwrite with a custom path/config. If no
+custom environment is used it is recommended to source the file
+/usr/share/dpdk/dpdk-sdk-env.sh which comes with dpdk-dev.
+If the paths ever change or there will be more/less variables needed to build
+against dpdk-dev that file will be adjusted for you.
+
+Alternatively /usr/include/dpdk/rte_config.h has to be pre-included:
+CFLAGS += -I/usr/include/dpdk -irte_config.h
+
+librte-pmd-* and DPDK PMD autoloading:
+
+PMD driver autoloading. DPDK since its split into several libraries does not
+have all PMD drivers available by default. One always can use EAL argument -d
+to provide a path to an extra .so file.
+TO ease daily usage RTE_EAL_PMD_PATH is set to
+/usr/lib/$(shell dpkg-architecture -qDEB_HOST_MULTIARCH)/dpdk-pmds/.
+Each librte-pmd-* package will place a symlink in there which makes DPDK load
+and register it as PMD on startup.
+This can also be used to globally enable extra PMD drivers as you can link
+self-provided .so files in there to be considered.
+
+ -- Christian Ehrhardt <christian.ehrhardt@canonical.com> Thu, 29 Sep 2016 13:04:47 +0200
diff --git a/debian/dpdk-doc.lintian-overrides b/debian/dpdk-doc.lintian-overrides
new file mode 100644
index 00000000..7da34daf
--- /dev/null
+++ b/debian/dpdk-doc.lintian-overrides
@@ -0,0 +1 @@
+dpdk-doc: embedded-javascript-library
diff --git a/debian/dpdk-igb-uio-dkms.dkms.in b/debian/dpdk-igb-uio-dkms.dkms.in
new file mode 100644
index 00000000..29ce2425
--- /dev/null
+++ b/debian/dpdk-igb-uio-dkms.dkms.in
@@ -0,0 +1,7 @@
+PACKAGE_NAME="dpdk-igb-uio"
+PACKAGE_VERSION="#MODULE_VERSION#"
+BUILT_MODULE_NAME[0]="igb_uio"
+MAKE="source /usr/share/dpdk/dpdk-sdk-env.sh; make MODULE_CFLAGS='-I/usr/include/@@DEB_HOST_MULTIARCH@@/dpdk -include /usr/include/@@DEB_HOST_MULTIARCH@@/dpdk/rte_config.h -I/usr/include/dpdk -fno-PIE' RTE_KERNELDIR=/lib/modules/${kernelver}/build"
+CLEAN="source /usr/share/dpdk/dpdk-sdk-env.sh; make clean"
+DEST_MODULE_LOCATION[0]="/updates/dkms"
+AUTOINSTALL="YES"
diff --git a/debian/dpdk-init b/debian/dpdk-init
new file mode 100755
index 00000000..103488ed
--- /dev/null
+++ b/debian/dpdk-init
@@ -0,0 +1,255 @@
+#!/bin/sh
+#
+# dpdk-init: startup script to initialize a dpdk runtime environment
+#
+# Copyright 2015-2016 Canonical Ltd.
+# Autor: Stefan Bader <stefan.bader@canonical.com>
+# Autor: Christian Ehrhardt <christian.ehrhardt@canonical.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 3,
+# as published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+set -e
+
+DPDK_BIND="/sbin/dpdk-devbind"
+DPDK_INTERF="/etc/dpdk/interfaces"
+
+
+# pagesize supports [G|g]/[M|m]/[K|k]
+get_kbytes() {
+ local unit
+ local num
+ unit=$(echo "${1}" | sed 's/[0-9]*//g')
+ num=$(echo "${1}" | sed 's/[^0-9]*//g')
+ case ${unit} in
+ *g | *G)
+ echo $((num*1024*1024))
+ ;;
+ *m | *M)
+ echo $((num*1024))
+ ;;
+ *k | *K)
+ echo $((num))
+ ;;
+ *)
+ echo $((num/1024))
+ ;;
+ esac
+}
+
+get_default_hpgsz() {
+ default_hpgsz=$(grep "Hugepagesize:" /proc/meminfo \
+ | sed 's/^Hugepagesize:\s*//g' | sed 's/\s*kB$//g')
+ echo "${default_hpgsz}"
+}
+
+get_hugetlbfs_mountpoint() {
+ local requested_hpgsz
+ local mp_hpgsz
+ requested_hpgsz=$(get_kbytes "${1}")
+
+ grep hugetlbfs /proc/mounts | while read \
+ mntfrom mntpoint mntfstype mntopt mntdump mntfsck; do
+
+ # check if the current muntpoint is of the requested huge page size
+ case ${mntopt} in
+ *pagesize=*)
+ mp_hpgsz=$(echo "${mntopt}" | sed 's/.*pagesize=//g' | sed 's/,.*//g')
+ mp_hpgsz=$(get_kbytes "${mp_hpgsz}")
+ ;;
+ *)
+ mp_hpgsz=$(get_default_hpgsz)
+ ;;
+ esac
+ if [ "${requested_hpgsz}" -eq "${mp_hpgsz}" ]; then
+ echo "${mntpoint}"
+ return
+ fi
+ done
+}
+
+_mount_hugetlbfs() {
+ local MNT="/dev/hugepages"
+ local MNTOPTS=""
+ local requested_hpgsz
+ local default_hpgsz
+ requested_hpgsz=$(get_kbytes "${1}")
+ default_hpgsz=$(get_default_hpgsz)
+
+ # kernel might not support the requested size
+ if [ ! -d "/sys/kernel/mm/hugepages/hugepages-${requested_hpgsz}kB" ]; then
+ echo "WARNING: requested page size of ${requested_hpgsz}kB " \
+ "not supported by the kernel"
+ return 0
+ fi
+
+ # special case if this is not the default huge page size
+ if [ "${requested_hpgsz}" -ne "${default_hpgsz}" ]; then
+ MNT="${MNT}-${requested_hpgsz}"
+ MNTOPTS="pagesize=${requested_hpgsz}K"
+ fi
+
+ if [ ! -e "${MNT}" ]; then
+ mkdir "${MNT}"
+ if [ $? -ne 0 ]; then
+ echo "Could not create directory ${MNT}!" >&2
+ return 1
+ fi
+ fi
+ mount -thugetlbfs hugetlbfs "${MNT}" -o "${MNTOPTS}"
+ return $?
+}
+
+#
+# The DPDK library will use the first mounted instance it finds for a given
+# page size. so if there is already one for a given size there is no need to
+# create another for the same huge page size.
+#
+mount_hugetlbfs() {
+ if [ ! -r /etc/dpdk/dpdk.conf ]; then
+ return 1
+ fi
+ . /etc/dpdk/dpdk.conf
+
+ # if a page size is requested, there has to be a mountpoint for that size
+ if [ -n "${NR_2M_PAGES}" -a -z "$(get_hugetlbfs_mountpoint '2M')" ]; then
+ _mount_hugetlbfs 2M
+ fi
+ if [ -n "${NR_16M_PAGES}" -a -z "$(get_hugetlbfs_mountpoint '16M')" ]; then
+ _mount_hugetlbfs 16M
+ fi
+ if [ -n "${NR_1G_PAGES}" -a -z "$(get_hugetlbfs_mountpoint '1G')" ]; then
+ _mount_hugetlbfs 1G
+ fi
+}
+
+_setup_hugepages() {
+ MMDIR="/sys/kernel/mm/hugepages/${1}"
+ PAGES=${2}
+
+ if [ "$PAGES" != "" ]; then
+ if [ "$PAGES" -gt 0 ]; then
+ if [ -d "$MMDIR" -a -w "$MMDIR/nr_hugepages" ]; then
+ # increases the chance to allocate enough huge pages
+ # configurable, since it comes at a perf penality
+ if [ "$DROPCACHE_BEFORE_HP_ALLOC" = "1" ]; then
+ echo 3 > /proc/sys/vm/drop_caches
+ fi
+
+ echo "$PAGES" > "$MMDIR/nr_hugepages"
+
+ GOTPAGES=$(cat "$MMDIR/nr_hugepages")
+ if [ "$GOTPAGES" -lt "$PAGES" ]; then
+ echo "WARNING: could not allocate $PAGES at " \
+ "$MMDIR/nr_hugepages (only got $GOTPAGES)."
+ fi
+ else
+ echo "WARNING: $MMDIR/nr_hugepages not found/writable"
+ fi
+ fi
+ fi
+}
+
+#
+# Reserve a certain amount of hugepages (defined in /etc/dpdk.conf)
+#
+setup_hugepages() {
+ if [ ! -r /etc/dpdk/dpdk.conf ]; then
+ return 1
+ fi
+ . /etc/dpdk/dpdk.conf
+
+ _setup_hugepages "hugepages-2048kB" "$NR_2M_PAGES"
+ _setup_hugepages "hugepages-16384kB" "$NR_16M_PAGES"
+ _setup_hugepages "hugepages-1048576kB" "$NR_1G_PAGES"
+
+ # dpdk uses 2*#hugepages mappings, increase for huge systems LP #1507921
+ if [ -d /sys/kernel/mm/hugepages ]; then
+ max_map_count=$(awk -v pad=65530 '{tot+=$1}END{print tot*2+pad}' \
+ /sys/kernel/mm/hugepages/hugepages-*/nr_hugepages)
+ sysctl -q vm.max_map_count="${max_map_count:-65530}"
+ fi
+
+ return 0
+}
+
+#
+# Allow NICs to be automatically bound to DPDK compatible drivers on boot.
+#
+bind_interfaces() {
+ if [ ! -r "$DPDK_INTERF" ]; then
+ return 0
+ fi
+ grep -v '^[ \t]*#' "$DPDK_INTERF" | while read BUS ID MOD; do
+ if [ "$BUS" = "" -o "$ID" = "" -o "$MOD" = "" ]; then
+ echo "WARNING: incomplete spec in $DPDK_INTERF" \
+ " - BUS '$BUS' ID '$ID' MOD '$MOD'"
+ continue
+ fi
+ if [ "$BUS" != "pci" ]; then
+ echo "WARNING: incompatible bus '$BUS' in $DPDK_INTERF"
+ continue
+ fi
+
+ SYSFSPATH="/sys/bus/$BUS/devices/$ID"
+ if [ ! -e "$SYSFSPATH" ]; then
+ echo "WARNING: invalid pci ID '$ID' in $DPDK_INTERF" \
+ " - '$SYSFSPATH' does not exist"
+ continue
+ fi
+ if [ -L "$SYSFSPATH/driver" ]; then
+ CUR=$(readlink "$SYSFSPATH/driver")
+ CUR=$(basename "$CUR")
+ else
+ # device existing, but currently unregistered
+ CUR=""
+ fi
+ if [ "$MOD" != "$CUR" ]; then
+ modprobe -q "$MOD" || true
+ # cloud img have no linux-image-extra initially (uip_pci_generic)
+ # so check if the module is available (loadable/built in)
+ if [ -e "/sys/bus/pci/drivers/${MOD}" ]; then
+ echo "Reassigning pci:$ID to $MOD"
+ $DPDK_BIND -b "$MOD" "$ID"
+ else
+ echo "Warning: failed assigning pci:$ID," \
+ " module $MOD not available"
+ fi
+ else
+ echo "pci:$ID already assigned to $MOD"
+ fi
+ done
+}
+
+
+
+case "$1" in
+start)
+ mount_hugetlbfs
+ setup_hugepages
+ bind_interfaces
+ ;;
+stop)
+ ;;
+reload|force-reload)
+ setup_hugepages
+ bind_interfaces
+ ;;
+status)
+ $DPDK_BIND --status
+ ;;
+*)
+ echo "Usage: $0 {start|stop|reload|force-reload|status}"
+ exit 1
+ ;;
+esac
+
diff --git a/debian/dpdk-rte-kni-dkms.dkms.in b/debian/dpdk-rte-kni-dkms.dkms.in
new file mode 100644
index 00000000..24d7a61f
--- /dev/null
+++ b/debian/dpdk-rte-kni-dkms.dkms.in
@@ -0,0 +1,7 @@
+PACKAGE_NAME="dpdk-rte-kni"
+PACKAGE_VERSION="#MODULE_VERSION#"
+BUILT_MODULE_NAME[0]="rte_kni"
+MAKE="source /usr/share/dpdk/dpdk-sdk-env.sh; make MODULE_CFLAGS='-I/usr/include/@@DEB_HOST_MULTIARCH@@/dpdk -include /usr/include/@@DEB_HOST_MULTIARCH@@/dpdk/rte_config.h -I/usr/include/dpdk -I$source_tree/dpdk-rte-kni-#MODULE_VERSION#/ethtool/ixgbe -I$source_tree/dpdk-rte-kni-#MODULE_VERSION#/ethtool/igb -fno-PIE' RTE_KERNELDIR=/lib/modules/${kernelver}/build"
+CLEAN="source /usr/share/dpdk/dpdk-sdk-env.sh; make clean"
+DEST_MODULE_LOCATION[0]="/updates/dkms"
+AUTOINSTALL="YES"
diff --git a/debian/dpdk-sdk-env.sh.in b/debian/dpdk-sdk-env.sh.in
new file mode 100755
index 00000000..8cc3944f
--- /dev/null
+++ b/debian/dpdk-sdk-env.sh.in
@@ -0,0 +1,3 @@
+export RTE_TARGET=SDK_TARGET
+export RTE_SDK="/usr/share/dpdk/"
+export RTE_INCLUDE="/usr/include/dpdk"
diff --git a/debian/dpdk.conf b/debian/dpdk.conf
new file mode 100644
index 00000000..272565c2
--- /dev/null
+++ b/debian/dpdk.conf
@@ -0,0 +1,68 @@
+#
+# The number of 2M hugepages to reserve on system boot
+#
+# Default is 0
+# To e.g. let it reserve 128M via 64x 2M Hugepages set:
+# NR_2M_PAGES=64
+
+#
+# The number of 1G hugepages to reserve on system boot
+#
+# Default is 0
+# To e.g. let it reserve 2G via 2x 1G Hugepages set:
+# NR_1G_PAGES=2
+
+# The number of 16M hugepages to reserve, supported e.g. on ppc64el
+#
+# Default is 0
+# To e.g. let it reserve 512M via 32x 16M Hugepages set:
+# NR_16M_PAGES=32
+
+#
+# Dropping slab and pagecache can help to successfully allocate hugepages,
+# especially later in the lifecycle of a system.
+# This comes at the cost of loosing all slab and pagecache on (re)start
+# of the dpdk service - therefore the default is off.
+#
+# Default is 0
+# Set to 1 to enable it
+#DROPCACHE_BEFORE_HP_ALLOC=0
+
+# The DPDK library will use the first mounted hugetlbfs.
+# The init scripts try to ensure there is at least one default hugetlbfs
+# mountpoint on start.
+# If you have multiple hugetlbfs mountpoints for a complex (e.g. specific numa
+# policies) setup it should be controlled by the admin instead of this init
+# script. In that case specific mountpoints can be provided as parameters to
+# the DPDK library.
+
+# Also please be aware that multiple huge page sizes and their mountpoints
+# can confuse other programs as well. For example libvirt/qemu might pick one
+# of the paths created for DPDKs larger pages or any such.
+# It is recommended in these cases to consider configuring the respective
+# applications as well to not "guess" when picking a hugepage path.
+# In the libvirt/qemu case that would for example be the setting
+# hugetlbfs_mount in /etc/libvirt/qemu.conf
+
+# Hardware may support other granularities of hugepages (like 4M). But the
+# larger the hugepages the earlier those should be allocated.
+# Note: the dpdk init scripts will report warnings, but not fail if they could
+# not allocate the requested amount of hugepages.
+# The more or the larger the hugepages to be allocated are, the more it is
+# recommended to do the reservation as kernel commandline arguments.
+# To do so edit /etc/default/grub: GRUB_CMDLINE_LINUX_DEFAULT
+# and add [hugepagesz=xx] hugepages=yy ...
+#
+# Kernel commandline config:
+# hugepagesz sets the size for the next hugepages reservation (default 2M)
+# hugepages reserves the given number of hugepages of the size set before
+#
+# After modifying /etc/default/grub, the command "update-grub" has to be
+# run in order to re-generate the grub config files. The new values will
+# be used after next reboot.
+#
+# example:
+# GRUB_CMDLINE_LINUX_DEFAULT="... hugepages=16 hugepagesz=1G hugepages=2"
+#
+# If the system supports it, this will reserve 16x 2M pages and 2x 1G pages.
+#
diff --git a/debian/dpdk.init b/debian/dpdk.init
new file mode 100644
index 00000000..002ba29f
--- /dev/null
+++ b/debian/dpdk.init
@@ -0,0 +1,57 @@
+#!/bin/sh
+
+### BEGIN INIT INFO
+# Provides: dpdk
+# Required-Start: $remote_fs $local_fs
+# Required-Stop: $remote_fs $local_fs
+# Default-Start: S
+# Default-Stop: 0 1 6
+# Short-Description: start dpdk runtime environment
+### END INIT INFO
+
+set -e
+
+PATH="/sbin:/bin:/usr/bin"
+
+[ -d /lib/dpdk ] || exit 0
+
+# Define LSB log_* functions.
+# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
+# and status_of_proc is working.
+. /lib/lsb/init-functions
+
+error=0
+case "$1" in
+start)
+ log_action_begin_msg "Starting DPDK environment" "dpdk"
+ output=$(/lib/dpdk/dpdk-init start 2>&1) || error="$?"
+ if [ ! -z "$output" ]; then
+ echo "$output" | while read line; do
+ log_action_cont_msg "$line"
+ done
+ fi
+ log_action_end_msg $error
+ exit $error
+ ;;
+stop)
+ ;;
+try-restart|restart|force-reload)
+ ;;
+status)
+ output=$(/lib/dpdk/dpdk-init --status 2>&1) || error="$?"
+ if [ ! -z "$output" ]; then
+ echo "$output" | while read line; do
+ log_action_cont_msg "$line"
+ done
+ fi
+ log_action_end_msg $error
+ exit $error
+ ;;
+*)
+ echo "Usage: $0 {start|stop|restart|force-reload|status}"
+ exit 1
+ ;;
+esac
+
+exit 0
+
diff --git a/debian/dpdk.install b/debian/dpdk.install
new file mode 100644
index 00000000..24c8d452
--- /dev/null
+++ b/debian/dpdk.install
@@ -0,0 +1,2 @@
+debian/dpdk-init lib/dpdk/
+debian/dpdk.conf etc/dpdk/
diff --git a/debian/dpdk.interfaces b/debian/dpdk.interfaces
new file mode 100644
index 00000000..3442343b
--- /dev/null
+++ b/debian/dpdk.interfaces
@@ -0,0 +1,19 @@
+#
+# <bus> Currently only "pci" is supported
+# <id> Device ID on the specified bus
+# <driver> Driver to bind against (vfio-pci, uio_pci_generic, igb_uio or
+# rte_kni)
+#
+# Be aware that the two dpdk compatible drivers uio_pci_generic and vfio-pci are
+# part of linux-image-extra-<VERSION> package.
+# This package is not always installed by default - for example in cloud-images.
+# So please install it in case you run into missing module issues.
+#
+# For the module igb_uio, please install the dpdk-igb-uio-dkms package.
+# For the module rte_kni, please install the dpdk-rte-kni-dkms package.
+#
+# <bus> <id> <driver>
+# pci 0000:04:00.0 vfio-pci
+# pci 0000:04:00.1 uio_pci_generic
+# pci 0000:05:00.0 igb_uio
+# pci 0000:06:00.0 rte_kni
diff --git a/debian/dpdk.service b/debian/dpdk.service
new file mode 100644
index 00000000..09ef8bec
--- /dev/null
+++ b/debian/dpdk.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=DPDK runtime environment
+DefaultDependencies=false
+After=network-pre.target local-fs.target
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/lib/dpdk/dpdk-init start
+
+[Install]
+WantedBy=multi-user.target
diff --git a/debian/kernel-version b/debian/kernel-version
new file mode 100755
index 00000000..16ab01b4
--- /dev/null
+++ b/debian/kernel-version
@@ -0,0 +1,61 @@
+#!/usr/bin/perl
+#
+# Copyright (c) 2009-2016 Andreas Beckmann <anbe@debian.org>
+# 2010-2016 Russ Allbery <rra@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this script. If not, see <http://www.gnu.org/licenses/>.
+#
+# This program comes from:
+# https://anonscm.debian.org/viewvc/pkg-nvidia/packages/nvidia-graphics-drivers/trunk/debian/module/debian/kernel-version?view=markup
+# The original copyright and license (GPL2+) can be found at:
+# https://anonscm.debian.org/viewvc/pkg-nvidia/packages/nvidia-graphics-drivers/trunk/debian/copyright?view=markup
+#
+# Extract the kernel version from the kernel version header file. Takes the
+# kernel source path as its only argument. If the version header couldn't be
+# found, print nothing and exit quietly.
+
+use warnings;
+
+my $ksrc = shift;
+unless ($ksrc && (-f "$ksrc/include/linux/version.h" || -f "$ksrc/include/generated/uapi/linux/version.h")) {
+ exit 0;
+}
+my $found = 0;
+my $line;
+if (open (VERSION, "$ksrc/include/linux/version.h")) {
+ if (defined(VERSION) && ($line = <VERSION>)) {
+ if ($line =~ /"(.+)"/) {
+ print "$1\n";
+ $found = 1;
+ }
+ }
+}
+exit 0 if $found;
+if (open (VERSION, "$ksrc/include/generated/utsrelease.h")) {
+ if (defined(VERSION) && ($line = <VERSION>)) {
+ if ($line =~ /UTS_RELEASE *"(.+)"/) {
+ print "$1\n";
+ $found = 1;
+ }
+ }
+}
+exit 0 if $found;
+# kernel.release is no longer useful since 3.1.0
+unless (open (VERSION, "$ksrc/include/config/kernel.release")) {
+ exit 0;
+}
+if (defined(VERSION) && ($line = <VERSION>)) {
+ print "$line";
+}
+exit 0;
diff --git a/debian/libdpdk.pc.in b/debian/libdpdk.pc.in
new file mode 100644
index 00000000..cd6c3fcb
--- /dev/null
+++ b/debian/libdpdk.pc.in
@@ -0,0 +1,11 @@
+prefix=/usr
+exec_prefix=${prefix}
+libdir=${prefix}/lib/@DEB_HOST_MULTIARCH@
+includedir=${prefix}/include
+include_arch_dir=${prefix}/include/@DEB_HOST_MULTIARCH@
+
+Name: dpdk
+Description: Data Plane Development Kit library
+Version: @VERSION@
+Libs: -L${libdir} @DPDK_LIBS@ -ldl -lm -lpthread -lz
+Cflags: -include ${include_arch_dir}/dpdk/rte_config.h -I${include_arch_dir}/dpdk -I${includedir}/dpdk
diff --git a/debian/librte-acl2.symbols b/debian/librte-acl2.symbols
new file mode 100644
index 00000000..8ebfb8f3
--- /dev/null
+++ b/debian/librte-acl2.symbols
@@ -0,0 +1,15 @@
+librte_acl.so.2 librte-acl2 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
+ rte_acl_add_rules@DPDK_2.0 16.04
+ rte_acl_build@DPDK_2.0 16.04
+ rte_acl_classify@DPDK_2.0 16.04
+ rte_acl_classify_alg@DPDK_2.0 16.04
+ rte_acl_classify_scalar@DPDK_2.0 16.04
+ rte_acl_create@DPDK_2.0 16.04
+ rte_acl_dump@DPDK_2.0 16.04
+ rte_acl_find_existing@DPDK_2.0 16.04
+ rte_acl_free@DPDK_2.0 16.04
+ rte_acl_list_dump@DPDK_2.0 16.04
+ rte_acl_reset@DPDK_2.0 16.04
+ rte_acl_reset_rules@DPDK_2.0 16.04
+ rte_acl_set_ctx_classify@DPDK_2.0 16.04
diff --git a/debian/librte-cfgfile2.symbols b/debian/librte-cfgfile2.symbols
new file mode 100644
index 00000000..1d347dcc
--- /dev/null
+++ b/debian/librte-cfgfile2.symbols
@@ -0,0 +1,13 @@
+librte_cfgfile.so.2 librte-cfgfile2 #MINVER#
+ DPDK_16.04@DPDK_16.04 16.04
+ DPDK_2.0@DPDK_2.0 16.04
+ rte_cfgfile_close@DPDK_2.0 16.04
+ rte_cfgfile_get_entry@DPDK_2.0 16.04
+ rte_cfgfile_has_entry@DPDK_2.0 16.04
+ rte_cfgfile_has_section@DPDK_2.0 16.04
+ rte_cfgfile_load@DPDK_2.0 16.04
+ rte_cfgfile_num_sections@DPDK_2.0 16.04
+ rte_cfgfile_section_entries@DPDK_2.0 16.04
+ rte_cfgfile_section_entries_by_index@DPDK_16.04 16.04
+ rte_cfgfile_section_num_entries@DPDK_2.0 16.04
+ rte_cfgfile_sections@DPDK_2.0 16.04
diff --git a/debian/librte-cmdline2.symbols b/debian/librte-cmdline2.symbols
new file mode 100644
index 00000000..b83f5fd9
--- /dev/null
+++ b/debian/librte-cmdline2.symbols
@@ -0,0 +1,68 @@
+librte_cmdline.so.2 librte-cmdline2 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
+ DPDK_2.1@DPDK_2.1 16.04
+ cirbuf_add_buf_head@DPDK_2.0 16.04
+ cirbuf_add_buf_tail@DPDK_2.0 16.04
+ cirbuf_add_head@DPDK_2.0 16.04
+ cirbuf_add_head_safe@DPDK_2.0 16.04
+ cirbuf_add_tail@DPDK_2.0 16.04
+ cirbuf_add_tail_safe@DPDK_2.0 16.04
+ cirbuf_align_left@DPDK_2.0 16.04
+ cirbuf_align_right@DPDK_2.0 16.04
+ cirbuf_del_buf_head@DPDK_2.0 16.04
+ cirbuf_del_buf_tail@DPDK_2.0 16.04
+ cirbuf_del_head@DPDK_2.0 16.04
+ cirbuf_del_head_safe@DPDK_2.0 16.04
+ cirbuf_del_tail@DPDK_2.0 16.04
+ cirbuf_del_tail_safe@DPDK_2.0 16.04
+ cirbuf_get_buf_head@DPDK_2.0 16.04
+ cirbuf_get_buf_tail@DPDK_2.0 16.04
+ cirbuf_get_head@DPDK_2.0 16.04
+ cirbuf_get_tail@DPDK_2.0 16.04
+ cirbuf_init@DPDK_2.0 16.04
+ cmdline_complete@DPDK_2.0 16.04
+ cmdline_complete_get_elt_string@DPDK_2.0 16.04
+ cmdline_complete_get_nb_string@DPDK_2.0 16.04
+ cmdline_file_new@DPDK_2.0 16.04
+ cmdline_free@DPDK_2.0 16.04
+ cmdline_get_help_etheraddr@DPDK_2.0 16.04
+ cmdline_get_help_ipaddr@DPDK_2.0 16.04
+ cmdline_get_help_num@DPDK_2.0 16.04
+ cmdline_get_help_portlist@DPDK_2.0 16.04
+ cmdline_get_help_string@DPDK_2.0 16.04
+ cmdline_in@DPDK_2.0 16.04
+ cmdline_interact@DPDK_2.0 16.04
+ cmdline_isendoftoken@DPDK_2.0 16.04
+ cmdline_new@DPDK_2.0 16.04
+ cmdline_parse@DPDK_2.0 16.04
+ cmdline_parse_etheraddr@DPDK_2.0 16.04
+ cmdline_parse_ipaddr@DPDK_2.0 16.04
+ cmdline_parse_num@DPDK_2.0 16.04
+ cmdline_parse_portlist@DPDK_2.0 16.04
+ cmdline_parse_string@DPDK_2.0 16.04
+ cmdline_poll@DPDK_2.1 16.04
+ cmdline_printf@DPDK_2.0 16.04
+ cmdline_quit@DPDK_2.0 16.04
+ cmdline_set_prompt@DPDK_2.0 16.04
+ cmdline_stdin_exit@DPDK_2.0 16.04
+ cmdline_stdin_new@DPDK_2.0 16.04
+ cmdline_token_etheraddr_ops@DPDK_2.0 16.04
+ cmdline_token_ipaddr_ops@DPDK_2.0 16.04
+ cmdline_token_num_ops@DPDK_2.0 16.04
+ cmdline_token_portlist_ops@DPDK_2.0 16.04
+ cmdline_token_string_ops@DPDK_2.0 16.04
+ cmdline_write_char@DPDK_2.0 16.04
+ rdline_add_history@DPDK_2.0 16.04
+ rdline_char_in@DPDK_2.0 16.04
+ rdline_clear_history@DPDK_2.0 16.04
+ rdline_get_buffer@DPDK_2.0 16.04
+ rdline_get_history_item@DPDK_2.0 16.04
+ rdline_init@DPDK_2.0 16.04
+ rdline_newline@DPDK_2.0 16.04
+ rdline_quit@DPDK_2.0 16.04
+ rdline_redisplay@DPDK_2.0 16.04
+ rdline_reset@DPDK_2.0 16.04
+ rdline_restart@DPDK_2.0 16.04
+ rdline_stop@DPDK_2.0 16.04
+ vt100_init@DPDK_2.0 16.04
+ vt100_parser@DPDK_2.0 16.04
diff --git a/debian/librte-cryptodev2.symbols b/debian/librte-cryptodev2.symbols
new file mode 100644
index 00000000..3864a52d
--- /dev/null
+++ b/debian/librte-cryptodev2.symbols
@@ -0,0 +1,34 @@
+librte_cryptodev.so.2 librte-cryptodev2 #MINVER#
+ DPDK_16.04@DPDK_16.04 16.04
+ DPDK_16.07@DPDK_16.07 16.07~rc1
+ DPDK_16.11@DPDK_16.11 16.11
+ rte_crypto_op_pool_create@DPDK_16.04 16.04
+ rte_cryptodev_callback_register@DPDK_16.04 16.04
+ rte_cryptodev_callback_unregister@DPDK_16.04 16.04
+ rte_cryptodev_close@DPDK_16.04 16.04
+ rte_cryptodev_configure@DPDK_16.04 16.04
+ rte_cryptodev_count@DPDK_16.04 16.04
+ rte_cryptodev_count_devtype@DPDK_16.04 16.04
+ rte_cryptodev_create_vdev@DPDK_16.04 16.04
+ rte_cryptodev_get_dev_id@DPDK_16.04 16.04
+ rte_cryptodev_get_feature_name@DPDK_16.04 16.04
+ rte_cryptodev_info_get@DPDK_16.04 16.04
+ rte_cryptodev_parse_vdev_init_params@DPDK_16.07 16.07~rc1
+ rte_cryptodev_pci_probe@DPDK_16.11 16.11
+ rte_cryptodev_pci_remove@DPDK_16.11 16.11
+ rte_cryptodev_pmd_allocate@DPDK_16.04 16.04
+ rte_cryptodev_pmd_callback_process@DPDK_16.04 16.04
+ rte_cryptodev_pmd_release_device@DPDK_16.04 16.04
+ rte_cryptodev_pmd_virtual_dev_init@DPDK_16.04 16.04
+ rte_cryptodev_queue_pair_count@DPDK_16.04 16.04
+ rte_cryptodev_queue_pair_setup@DPDK_16.04 16.04
+ rte_cryptodev_queue_pair_start@DPDK_16.04 16.04
+ rte_cryptodev_queue_pair_stop@DPDK_16.04 16.04
+ rte_cryptodev_socket_id@DPDK_16.04 16.04
+ rte_cryptodev_start@DPDK_16.04 16.04
+ rte_cryptodev_stats_get@DPDK_16.04 16.04
+ rte_cryptodev_stats_reset@DPDK_16.04 16.04
+ rte_cryptodev_stop@DPDK_16.04 16.04
+ rte_cryptodev_sym_session_create@DPDK_16.04 16.04
+ rte_cryptodev_sym_session_free@DPDK_16.04 16.04
+ rte_cryptodevs@DPDK_16.04 16.04
diff --git a/debian/librte-distributor1.symbols b/debian/librte-distributor1.symbols
new file mode 100644
index 00000000..3218e6ad
--- /dev/null
+++ b/debian/librte-distributor1.symbols
@@ -0,0 +1,11 @@
+librte_distributor.so.1 librte-distributor1 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
+ rte_distributor_clear_returns@DPDK_2.0 16.04
+ rte_distributor_create@DPDK_2.0 16.04
+ rte_distributor_flush@DPDK_2.0 16.04
+ rte_distributor_get_pkt@DPDK_2.0 16.04
+ rte_distributor_poll_pkt@DPDK_2.0 16.04
+ rte_distributor_process@DPDK_2.0 16.04
+ rte_distributor_request_pkt@DPDK_2.0 16.04
+ rte_distributor_return_pkt@DPDK_2.0 16.04
+ rte_distributor_returned_pkts@DPDK_2.0 16.04
diff --git a/debian/librte-eal3.symbols b/debian/librte-eal3.symbols
new file mode 100644
index 00000000..98c10cfe
--- /dev/null
+++ b/debian/librte-eal3.symbols
@@ -0,0 +1,141 @@
+librte_eal.so.3 librte-eal3 #MINVER#
+ DPDK_16.04@DPDK_16.04 16.04
+ DPDK_16.07@DPDK_16.07 16.07~rc1
+ DPDK_16.11@DPDK_16.11 16.11
+ DPDK_2.0@DPDK_2.0 16.04
+ DPDK_2.1@DPDK_2.1 16.04
+ DPDK_2.2@DPDK_2.2 16.04
+ __rte_panic@DPDK_2.0 16.04
+ devargs_list@DPDK_2.0 16.04
+ eal_parse_sysfs_value@DPDK_2.0 16.04
+ eal_timer_source@DPDK_2.0 16.04
+ lcore_config@DPDK_2.0 16.04
+ pci_device_list@DPDK_2.0 16.04
+ pci_driver_list@DPDK_2.0 16.04
+ pci_get_sysfs_path@DPDK_16.07 16.07~rc1
+ per_lcore__lcore_id@DPDK_2.0 16.04
+ per_lcore__rte_errno@DPDK_2.0 16.04
+ rte_calloc@DPDK_2.0 16.04
+ rte_calloc_socket@DPDK_2.0 16.04
+ rte_cpu_check_supported@DPDK_2.0 16.04
+ rte_cpu_get_flag_enabled@DPDK_2.0 16.04
+ rte_cpu_get_flag_name@DPDK_16.04 16.04
+ rte_cycles_vmware_tsc_map@DPDK_2.0 16.04
+ rte_delay_us@DPDK_2.0 16.04
+ rte_delay_us_block@DPDK_16.11 16.11
+ rte_delay_us_callback_register@DPDK_16.11 16.11
+ rte_dump_physmem_layout@DPDK_2.0 16.04
+ rte_dump_registers@DPDK_2.0 16.04
+ rte_dump_stack@DPDK_2.0 16.04
+ rte_dump_tailq@DPDK_2.0 16.04
+ rte_eal_alarm_cancel@DPDK_2.0 16.04
+ rte_eal_alarm_set@DPDK_2.0 16.04
+ rte_eal_dev_attach@DPDK_16.11 16.11
+ rte_eal_dev_detach@DPDK_16.11 16.11
+ rte_eal_dev_init@DPDK_2.0 16.04
+ rte_eal_devargs_add@DPDK_2.0 16.04
+ rte_eal_devargs_dump@DPDK_2.0 16.04
+ rte_eal_devargs_type_count@DPDK_2.0 16.04
+ rte_eal_driver_register@DPDK_2.0 16.04
+ rte_eal_driver_unregister@DPDK_2.0 16.04
+ rte_eal_get_configuration@DPDK_2.0 16.04
+ rte_eal_get_lcore_state@DPDK_2.0 16.04
+ rte_eal_get_physmem_layout@DPDK_2.0 16.04
+ rte_eal_get_physmem_size@DPDK_2.0 16.04
+ rte_eal_has_hugepages@DPDK_2.0 16.04
+ rte_eal_init@DPDK_2.0 16.04
+ rte_eal_iopl_init@DPDK_2.0 16.04
+ rte_eal_lcore_role@DPDK_2.0 16.04
+ rte_eal_mp_remote_launch@DPDK_2.0 16.04
+ rte_eal_mp_wait_lcore@DPDK_2.0 16.04
+ rte_eal_parse_devargs_str@DPDK_2.0 16.04
+ rte_eal_pci_detach@DPDK_2.1 16.04
+ rte_eal_pci_dump@DPDK_2.0 16.04
+ rte_eal_pci_ioport_map@DPDK_16.04 16.04
+ rte_eal_pci_ioport_read@DPDK_16.04 16.04
+ rte_eal_pci_ioport_unmap@DPDK_16.04 16.04
+ rte_eal_pci_ioport_write@DPDK_16.04 16.04
+ rte_eal_pci_map_device@DPDK_16.04 16.04
+ rte_eal_pci_probe@DPDK_2.0 16.04
+ rte_eal_pci_probe_one@DPDK_2.0 16.04
+ rte_eal_pci_read_config@DPDK_2.1 16.04
+ rte_eal_pci_register@DPDK_2.0 16.04
+ rte_eal_pci_scan@DPDK_2.0 16.04
+ rte_eal_pci_unmap_device@DPDK_16.04 16.04
+ rte_eal_pci_unregister@DPDK_2.0 16.04
+ rte_eal_pci_write_config@DPDK_2.1 16.04
+ rte_eal_primary_proc_alive@DPDK_16.04 16.04
+ rte_eal_process_type@DPDK_2.0 16.04
+ rte_eal_remote_launch@DPDK_2.0 16.04
+ rte_eal_set_socket_permissions@DPDK_2.2 16.04
+ rte_eal_tailq_lookup@DPDK_2.0 16.04
+ rte_eal_tailq_register@DPDK_2.0 16.04
+ rte_eal_vdev_init@DPDK_2.0 16.04
+ rte_eal_vdev_uninit@DPDK_2.0 16.04
+ rte_eal_vdrv_register@DPDK_16.11 16.11
+ rte_eal_vdrv_unregister@DPDK_16.11 16.11
+ rte_eal_wait_lcore@DPDK_2.0 16.04
+ rte_epoll_ctl@DPDK_2.1 16.04
+ rte_epoll_wait@DPDK_2.1 16.04
+ rte_exit@DPDK_2.0 16.04
+ rte_free@DPDK_2.0 16.04
+ rte_get_log_level@DPDK_2.0 16.04
+ rte_get_log_type@DPDK_2.0 16.04
+ rte_get_tsc_hz@DPDK_2.0 16.04
+ rte_hexdump@DPDK_2.0 16.04
+ rte_intr_allow_others@DPDK_2.1 16.04
+ rte_intr_callback_register@DPDK_2.0 16.04
+ rte_intr_callback_unregister@DPDK_2.0 16.04
+ rte_intr_cap_multiple@DPDK_2.2 16.04
+ rte_intr_disable@DPDK_2.0 16.04
+ rte_intr_dp_is_en@DPDK_2.1 16.04
+ rte_intr_efd_disable@DPDK_2.1 16.04
+ rte_intr_efd_enable@DPDK_2.1 16.04
+ rte_intr_enable@DPDK_2.0 16.04
+ rte_intr_rx_ctl@DPDK_2.1 16.04
+ rte_intr_tls_epfd@DPDK_2.1 16.04
+ rte_keepalive_create@DPDK_2.2 16.04
+ rte_keepalive_dispatch_pings@DPDK_2.2 16.04
+ rte_keepalive_mark_alive@DPDK_2.2 16.04
+ rte_keepalive_mark_sleep@DPDK_16.07 16.07~rc1
+ rte_keepalive_register_core@DPDK_2.2 16.04
+ rte_keepalive_register_relay_callback@DPDK_16.07 16.07~rc1
+ rte_log@DPDK_2.0 16.04
+ rte_log_cur_msg_loglevel@DPDK_2.0 16.04
+ rte_log_cur_msg_logtype@DPDK_2.0 16.04
+ rte_logs@DPDK_2.0 16.04
+ rte_malloc@DPDK_2.0 16.04
+ rte_malloc_dump_stats@DPDK_2.0 16.04
+ rte_malloc_get_socket_stats@DPDK_2.0 16.04
+ rte_malloc_set_limit@DPDK_2.0 16.04
+ rte_malloc_socket@DPDK_2.0 16.04
+ rte_malloc_validate@DPDK_2.0 16.04
+ rte_malloc_virt2phy@DPDK_2.0 16.04
+ rte_mem_lock_page@DPDK_2.0 16.04
+ rte_mem_virt2phy@DPDK_2.0 16.04
+ rte_memdump@DPDK_2.0 16.04
+ rte_memory_get_nchannel@DPDK_2.0 16.04
+ rte_memory_get_nrank@DPDK_2.0 16.04
+ rte_memzone_dump@DPDK_2.0 16.04
+ rte_memzone_free@DPDK_2.1 16.04
+ rte_memzone_lookup@DPDK_2.0 16.04
+ rte_memzone_reserve@DPDK_2.0 16.04
+ rte_memzone_reserve_aligned@DPDK_2.0 16.04
+ rte_memzone_reserve_bounded@DPDK_2.0 16.04
+ rte_memzone_walk@DPDK_2.0 16.04
+ rte_openlog_stream@DPDK_2.0 16.04
+ rte_realloc@DPDK_2.0 16.04
+ (arch=!arm64 !ppc64el)rte_rtm_supported@DPDK_16.07 16.07~rc3
+ rte_set_application_usage_hook@DPDK_2.0 16.04
+ rte_set_log_level@DPDK_2.0 16.04
+ rte_set_log_type@DPDK_2.0 16.04
+ rte_socket_id@DPDK_2.0 16.04
+ rte_strerror@DPDK_2.0 16.04
+ rte_strsplit@DPDK_2.0 16.04
+ rte_sys_gettid@DPDK_2.0 16.04
+ rte_thread_get_affinity@DPDK_2.0 16.04
+ rte_thread_set_affinity@DPDK_2.0 16.04
+ rte_thread_setname@DPDK_16.07 16.07~rc1
+ rte_vlog@DPDK_2.0 16.04
+ rte_zmalloc@DPDK_2.0 16.04
+ rte_zmalloc_socket@DPDK_2.0 16.04
diff --git a/debian/librte-ethdev5.symbols b/debian/librte-ethdev5.symbols
new file mode 100644
index 00000000..e79a6e31
--- /dev/null
+++ b/debian/librte-ethdev5.symbols
@@ -0,0 +1,118 @@
+librte_ethdev.so.5 librte-ethdev5 #MINVER#
+ DPDK_16.04@DPDK_16.04 16.07~rc1
+ DPDK_16.07@DPDK_16.07 16.07~rc1
+ DPDK_16.11@DPDK_16.11 16.11
+ DPDK_2.2@DPDK_2.2 16.07~rc1
+ _rte_eth_dev_callback_process@DPDK_2.2 16.07~rc1
+ rte_eth_add_first_rx_callback@DPDK_16.07 16.07~rc1
+ rte_eth_add_rx_callback@DPDK_2.2 16.07~rc1
+ rte_eth_add_tx_callback@DPDK_2.2 16.07~rc1
+ rte_eth_allmulticast_disable@DPDK_2.2 16.07~rc1
+ rte_eth_allmulticast_enable@DPDK_2.2 16.07~rc1
+ rte_eth_allmulticast_get@DPDK_2.2 16.07~rc1
+ rte_eth_copy_pci_info@DPDK_2.2 16.07~rc1
+ rte_eth_dev_allocate@DPDK_2.2 16.07~rc1
+ rte_eth_dev_allocated@DPDK_2.2 16.07~rc1
+ rte_eth_dev_attach@DPDK_2.2 16.07~rc1
+ rte_eth_dev_callback_register@DPDK_2.2 16.07~rc1
+ rte_eth_dev_callback_unregister@DPDK_2.2 16.07~rc1
+ rte_eth_dev_close@DPDK_2.2 16.07~rc1
+ rte_eth_dev_configure@DPDK_2.2 16.07~rc1
+ rte_eth_dev_count@DPDK_2.2 16.07~rc1
+ rte_eth_dev_default_mac_addr_set@DPDK_2.2 16.07~rc1
+ rte_eth_dev_detach@DPDK_2.2 16.07~rc1
+ rte_eth_dev_filter_ctrl@DPDK_2.2 16.07~rc1
+ rte_eth_dev_filter_supported@DPDK_2.2 16.07~rc1
+ rte_eth_dev_flow_ctrl_get@DPDK_2.2 16.07~rc1
+ rte_eth_dev_flow_ctrl_set@DPDK_2.2 16.07~rc1
+ rte_eth_dev_get_dcb_info@DPDK_2.2 16.07~rc1
+ rte_eth_dev_get_eeprom@DPDK_2.2 16.07~rc1
+ rte_eth_dev_get_eeprom_length@DPDK_2.2 16.07~rc1
+ rte_eth_dev_get_mtu@DPDK_2.2 16.07~rc1
+ rte_eth_dev_get_name_by_port@DPDK_16.07 16.07~rc1
+ rte_eth_dev_get_port_by_name@DPDK_16.07 16.07~rc1
+ rte_eth_dev_get_reg_info@DPDK_2.2 16.07~rc1
+ rte_eth_dev_get_supported_ptypes@DPDK_16.04 16.07~rc1
+ rte_eth_dev_get_vlan_offload@DPDK_2.2 16.07~rc1
+ rte_eth_dev_info_get@DPDK_2.2 16.07~rc1
+ rte_eth_dev_is_valid_port@DPDK_2.2 16.07~rc1
+ rte_eth_dev_l2_tunnel_eth_type_conf@DPDK_16.04 16.07~rc1
+ rte_eth_dev_l2_tunnel_offload_set@DPDK_16.04 16.07~rc1
+ rte_eth_dev_mac_addr_add@DPDK_2.2 16.07~rc1
+ rte_eth_dev_mac_addr_remove@DPDK_2.2 16.07~rc1
+ rte_eth_dev_pci_probe@DPDK_16.11 16.11
+ rte_eth_dev_pci_remove@DPDK_16.11 16.11
+ rte_eth_dev_priority_flow_ctrl_set@DPDK_2.2 16.07~rc1
+ rte_eth_dev_release_port@DPDK_2.2 16.07~rc1
+ rte_eth_dev_rss_hash_conf_get@DPDK_2.2 16.07~rc1
+ rte_eth_dev_rss_hash_update@DPDK_2.2 16.07~rc1
+ rte_eth_dev_rss_reta_query@DPDK_2.2 16.07~rc1
+ rte_eth_dev_rss_reta_update@DPDK_2.2 16.07~rc1
+ rte_eth_dev_rx_intr_ctl@DPDK_2.2 16.07~rc1
+ rte_eth_dev_rx_intr_ctl_q@DPDK_2.2 16.07~rc1
+ rte_eth_dev_rx_intr_disable@DPDK_2.2 16.07~rc1
+ rte_eth_dev_rx_intr_enable@DPDK_2.2 16.07~rc1
+ rte_eth_dev_rx_queue_start@DPDK_2.2 16.07~rc1
+ rte_eth_dev_rx_queue_stop@DPDK_2.2 16.07~rc1
+ rte_eth_dev_set_eeprom@DPDK_2.2 16.07~rc1
+ rte_eth_dev_set_link_down@DPDK_2.2 16.07~rc1
+ rte_eth_dev_set_link_up@DPDK_2.2 16.07~rc1
+ rte_eth_dev_set_mc_addr_list@DPDK_2.2 16.07~rc1
+ rte_eth_dev_set_mtu@DPDK_2.2 16.07~rc1
+ rte_eth_dev_set_rx_queue_stats_mapping@DPDK_2.2 16.07~rc1
+ rte_eth_dev_set_tx_queue_stats_mapping@DPDK_2.2 16.07~rc1
+ rte_eth_dev_set_vf_rx@DPDK_2.2 16.07~rc1
+ rte_eth_dev_set_vf_rxmode@DPDK_2.2 16.07~rc1
+ rte_eth_dev_set_vf_tx@DPDK_2.2 16.07~rc1
+ rte_eth_dev_set_vf_vlan_filter@DPDK_2.2 16.07~rc1
+ rte_eth_dev_set_vlan_ether_type@DPDK_16.04 16.07~rc1
+ rte_eth_dev_set_vlan_offload@DPDK_2.2 16.07~rc1
+ rte_eth_dev_set_vlan_pvid@DPDK_2.2 16.07~rc1
+ rte_eth_dev_set_vlan_strip_on_queue@DPDK_2.2 16.07~rc1
+ rte_eth_dev_socket_id@DPDK_2.2 16.07~rc1
+ rte_eth_dev_start@DPDK_2.2 16.07~rc1
+ rte_eth_dev_stop@DPDK_2.2 16.07~rc1
+ rte_eth_dev_tx_queue_start@DPDK_2.2 16.07~rc1
+ rte_eth_dev_tx_queue_stop@DPDK_2.2 16.07~rc1
+ rte_eth_dev_uc_all_hash_table_set@DPDK_2.2 16.07~rc1
+ rte_eth_dev_uc_hash_table_set@DPDK_2.2 16.07~rc1
+ rte_eth_dev_udp_tunnel_port_add@DPDK_16.04 16.07~rc1
+ rte_eth_dev_udp_tunnel_port_delete@DPDK_16.04 16.07~rc1
+ rte_eth_dev_vlan_filter@DPDK_2.2 16.07~rc1
+ rte_eth_devices@DPDK_2.2 16.07~rc1
+ rte_eth_dma_zone_reserve@DPDK_2.2 16.07~rc1
+ rte_eth_led_off@DPDK_2.2 16.07~rc1
+ rte_eth_led_on@DPDK_2.2 16.07~rc1
+ rte_eth_link_get@DPDK_2.2 16.07~rc1
+ rte_eth_link_get_nowait@DPDK_2.2 16.07~rc1
+ rte_eth_macaddr_get@DPDK_2.2 16.07~rc1
+ rte_eth_mirror_rule_reset@DPDK_2.2 16.07~rc1
+ rte_eth_mirror_rule_set@DPDK_2.2 16.07~rc1
+ rte_eth_promiscuous_disable@DPDK_2.2 16.07~rc1
+ rte_eth_promiscuous_enable@DPDK_2.2 16.07~rc1
+ rte_eth_promiscuous_get@DPDK_2.2 16.07~rc1
+ rte_eth_remove_rx_callback@DPDK_2.2 16.07~rc1
+ rte_eth_remove_tx_callback@DPDK_2.2 16.07~rc1
+ rte_eth_rx_queue_info_get@DPDK_2.2 16.07~rc1
+ rte_eth_rx_queue_setup@DPDK_2.2 16.07~rc1
+ rte_eth_set_queue_rate_limit@DPDK_2.2 16.07~rc1
+ rte_eth_set_vf_rate_limit@DPDK_2.2 16.07~rc1
+ rte_eth_speed_bitflag@DPDK_16.04 16.07~rc1
+ rte_eth_stats_get@DPDK_2.2 16.07~rc1
+ rte_eth_stats_reset@DPDK_2.2 16.07~rc1
+ rte_eth_timesync_adjust_time@DPDK_2.2 16.07~rc1
+ rte_eth_timesync_disable@DPDK_2.2 16.07~rc1
+ rte_eth_timesync_enable@DPDK_2.2 16.07~rc1
+ rte_eth_timesync_read_rx_timestamp@DPDK_2.2 16.07~rc1
+ rte_eth_timesync_read_time@DPDK_2.2 16.07~rc1
+ rte_eth_timesync_read_tx_timestamp@DPDK_2.2 16.07~rc1
+ rte_eth_timesync_write_time@DPDK_2.2 16.07~rc1
+ rte_eth_tx_buffer_count_callback@DPDK_16.04 16.07~rc1
+ rte_eth_tx_buffer_drop_callback@DPDK_16.04 16.07~rc1
+ rte_eth_tx_buffer_init@DPDK_16.04 16.07~rc1
+ rte_eth_tx_buffer_set_err_callback@DPDK_16.04 16.07~rc1
+ rte_eth_tx_queue_info_get@DPDK_2.2 16.07~rc1
+ rte_eth_tx_queue_setup@DPDK_2.2 16.07~rc1
+ rte_eth_xstats_get@DPDK_2.2 16.07~rc1
+ rte_eth_xstats_get_names@DPDK_16.07 16.07~rc1
+ rte_eth_xstats_reset@DPDK_2.2 16.07~rc1
diff --git a/debian/librte-hash2.symbols b/debian/librte-hash2.symbols
new file mode 100644
index 00000000..d01da797
--- /dev/null
+++ b/debian/librte-hash2.symbols
@@ -0,0 +1,28 @@
+librte_hash.so.2 librte-hash2 #MINVER#
+ DPDK_16.07@DPDK_16.07 16.07~rc3
+ DPDK_2.0@DPDK_2.0 16.04
+ DPDK_2.1@DPDK_2.1 16.04
+ DPDK_2.2@DPDK_2.2 16.04
+ rte_fbk_hash_create@DPDK_2.0 16.04
+ rte_fbk_hash_find_existing@DPDK_2.0 16.04
+ rte_fbk_hash_free@DPDK_2.0 16.04
+ rte_hash_add_key@DPDK_2.0 16.04
+ rte_hash_add_key_data@DPDK_2.1 16.04
+ rte_hash_add_key_with_hash@DPDK_2.0 16.04
+ rte_hash_add_key_with_hash_data@DPDK_2.1 16.04
+ rte_hash_create@DPDK_2.0 16.04
+ rte_hash_del_key@DPDK_2.0 16.04
+ rte_hash_del_key_with_hash@DPDK_2.0 16.04
+ rte_hash_find_existing@DPDK_2.0 16.04
+ rte_hash_free@DPDK_2.0 16.04
+ rte_hash_get_key_with_position@DPDK_16.07 16.07~rc3
+ rte_hash_hash@DPDK_2.0 16.04
+ rte_hash_iterate@DPDK_2.1 16.04
+ rte_hash_lookup@DPDK_2.0 16.04
+ rte_hash_lookup_bulk@DPDK_2.0 16.04
+ rte_hash_lookup_bulk_data@DPDK_2.1 16.04
+ rte_hash_lookup_data@DPDK_2.1 16.04
+ rte_hash_lookup_with_hash@DPDK_2.0 16.04
+ rte_hash_lookup_with_hash_data@DPDK_2.1 16.04
+ rte_hash_reset@DPDK_2.1 16.04
+ rte_hash_set_cmp_func@DPDK_2.2 16.04
diff --git a/debian/librte-ip-frag1.symbols b/debian/librte-ip-frag1.symbols
new file mode 100644
index 00000000..b210026b
--- /dev/null
+++ b/debian/librte-ip-frag1.symbols
@@ -0,0 +1,9 @@
+librte_ip_frag.so.1 librte-ip-frag1 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
+ rte_ip_frag_free_death_row@DPDK_2.0 16.04
+ rte_ip_frag_table_create@DPDK_2.0 16.04
+ rte_ip_frag_table_statistics_dump@DPDK_2.0 16.04
+ rte_ipv4_frag_reassemble_packet@DPDK_2.0 16.04
+ rte_ipv4_fragment_packet@DPDK_2.0 16.04
+ rte_ipv6_frag_reassemble_packet@DPDK_2.0 16.04
+ rte_ipv6_fragment_packet@DPDK_2.0 16.04
diff --git a/debian/librte-jobstats1.symbols b/debian/librte-jobstats1.symbols
new file mode 100644
index 00000000..6eecd0ba
--- /dev/null
+++ b/debian/librte-jobstats1.symbols
@@ -0,0 +1,17 @@
+librte_jobstats.so.1 librte-jobstats1 #MINVER#
+ DPDK_16.04@DPDK_16.04 16.04
+ DPDK_2.0@DPDK_2.0 16.04
+ rte_jobstats_abort@DPDK_16.04 16.04
+ rte_jobstats_context_finish@DPDK_2.0 16.04
+ rte_jobstats_context_init@DPDK_2.0 16.04
+ rte_jobstats_context_reset@DPDK_2.0 16.04
+ rte_jobstats_context_start@DPDK_2.0 16.04
+ rte_jobstats_finish@DPDK_2.0 16.04
+ rte_jobstats_init@DPDK_2.0 16.04
+ rte_jobstats_reset@DPDK_2.0 16.04
+ rte_jobstats_set_max@DPDK_2.0 16.04
+ rte_jobstats_set_min@DPDK_2.0 16.04
+ rte_jobstats_set_period@DPDK_2.0 16.04
+ rte_jobstats_set_target@DPDK_2.0 16.04
+ rte_jobstats_set_update_period_function@DPDK_2.0 16.04
+ rte_jobstats_start@DPDK_2.0 16.04
diff --git a/debian/librte-kni2.symbols b/debian/librte-kni2.symbols
new file mode 100644
index 00000000..c76cd8eb
--- /dev/null
+++ b/debian/librte-kni2.symbols
@@ -0,0 +1,13 @@
+librte_kni.so.2 librte-kni2 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
+ rte_kni_alloc@DPDK_2.0 16.04
+ rte_kni_close@DPDK_2.0 16.04
+ rte_kni_get@DPDK_2.0 16.04
+ rte_kni_get_name@DPDK_2.0 16.04
+ rte_kni_handle_request@DPDK_2.0 16.04
+ rte_kni_init@DPDK_2.0 16.04
+ rte_kni_register_handlers@DPDK_2.0 16.04
+ rte_kni_release@DPDK_2.0 16.04
+ rte_kni_rx_burst@DPDK_2.0 16.04
+ rte_kni_tx_burst@DPDK_2.0 16.04
+ rte_kni_unregister_handlers@DPDK_2.0 16.04
diff --git a/debian/librte-kvargs1.symbols b/debian/librte-kvargs1.symbols
new file mode 100644
index 00000000..18175a76
--- /dev/null
+++ b/debian/librte-kvargs1.symbols
@@ -0,0 +1,6 @@
+librte_kvargs.so.1 librte-kvargs1 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
+ rte_kvargs_count@DPDK_2.0 16.04
+ rte_kvargs_free@DPDK_2.0 16.04
+ rte_kvargs_parse@DPDK_2.0 16.04
+ rte_kvargs_process@DPDK_2.0 16.04
diff --git a/debian/librte-lpm2.symbols b/debian/librte-lpm2.symbols
new file mode 100644
index 00000000..30a2e181
--- /dev/null
+++ b/debian/librte-lpm2.symbols
@@ -0,0 +1,27 @@
+librte_lpm.so.2 librte-lpm2 #MINVER#
+ DPDK_16.04@DPDK_16.04 16.04
+ DPDK_2.0@DPDK_2.0 16.04
+ rte_lpm6_add@DPDK_2.0 16.04
+ rte_lpm6_create@DPDK_2.0 16.04
+ rte_lpm6_delete@DPDK_2.0 16.04
+ rte_lpm6_delete_all@DPDK_2.0 16.04
+ rte_lpm6_delete_bulk_func@DPDK_2.0 16.04
+ rte_lpm6_find_existing@DPDK_2.0 16.04
+ rte_lpm6_free@DPDK_2.0 16.04
+ rte_lpm6_is_rule_present@DPDK_2.0 16.04
+ rte_lpm6_lookup@DPDK_2.0 16.04
+ rte_lpm6_lookup_bulk_func@DPDK_2.0 16.04
+ rte_lpm_add@DPDK_16.04 16.04
+ rte_lpm_add@DPDK_2.0 16.04
+ rte_lpm_create@DPDK_16.04 16.04
+ rte_lpm_create@DPDK_2.0 16.04
+ rte_lpm_delete@DPDK_16.04 16.04
+ rte_lpm_delete@DPDK_2.0 16.04
+ rte_lpm_delete_all@DPDK_16.04 16.04
+ rte_lpm_delete_all@DPDK_2.0 16.04
+ rte_lpm_find_existing@DPDK_16.04 16.04
+ rte_lpm_find_existing@DPDK_2.0 16.04
+ rte_lpm_free@DPDK_16.04 16.04
+ rte_lpm_free@DPDK_2.0 16.04
+ rte_lpm_is_rule_present@DPDK_16.04 16.04
+ rte_lpm_is_rule_present@DPDK_2.0 16.04
diff --git a/debian/librte-mbuf2.symbols b/debian/librte-mbuf2.symbols
new file mode 100644
index 00000000..6d3fdfc2
--- /dev/null
+++ b/debian/librte-mbuf2.symbols
@@ -0,0 +1,23 @@
+librte_mbuf.so.2 librte-mbuf2 #MINVER#
+ DPDK_16.11@DPDK_16.11 16.11
+ DPDK_2.0@DPDK_2.0 16.04
+ DPDK_2.1@DPDK_2.1 16.04
+ __rte_pktmbuf_read@DPDK_16.11 16.11
+ rte_ctrlmbuf_init@DPDK_2.0 16.04
+ rte_get_ptype_inner_l2_name@DPDK_16.11 16.11
+ rte_get_ptype_inner_l3_name@DPDK_16.11 16.11
+ rte_get_ptype_inner_l4_name@DPDK_16.11 16.11
+ rte_get_ptype_l2_name@DPDK_16.11 16.11
+ rte_get_ptype_l3_name@DPDK_16.11 16.11
+ rte_get_ptype_l4_name@DPDK_16.11 16.11
+ rte_get_ptype_name@DPDK_16.11 16.11
+ rte_get_ptype_tunnel_name@DPDK_16.11 16.11
+ rte_get_rx_ol_flag_list@DPDK_16.11 16.11
+ rte_get_rx_ol_flag_name@DPDK_2.0 16.04
+ rte_get_tx_ol_flag_list@DPDK_16.11 16.11
+ rte_get_tx_ol_flag_name@DPDK_2.0 16.04
+ rte_mbuf_sanity_check@DPDK_2.0 16.04
+ rte_pktmbuf_dump@DPDK_2.0 16.04
+ rte_pktmbuf_init@DPDK_2.0 16.04
+ rte_pktmbuf_pool_create@DPDK_2.1 16.04
+ rte_pktmbuf_pool_init@DPDK_2.0 16.04
diff --git a/debian/librte-mempool2.symbols b/debian/librte-mempool2.symbols
new file mode 100644
index 00000000..a70fcc3a
--- /dev/null
+++ b/debian/librte-mempool2.symbols
@@ -0,0 +1,31 @@
+librte_mempool.so.2 librte-mempool2 #MINVER#
+ DPDK_16.07@DPDK_16.07 16.07~rc1
+ DPDK_2.0@DPDK_2.0 16.07~rc1
+ rte_mempool_audit@DPDK_2.0 16.07~rc1
+ rte_mempool_avail_count@DPDK_16.07 16.07~rc1
+ rte_mempool_cache_create@DPDK_16.07 16.07~rc1
+ rte_mempool_cache_free@DPDK_16.07 16.07~rc1
+ rte_mempool_calc_obj_size@DPDK_2.0 16.07~rc1
+ rte_mempool_check_cookies@DPDK_16.07 16.07~rc1
+ rte_mempool_count@DPDK_2.0 16.07~rc1
+ rte_mempool_create@DPDK_2.0 16.07~rc1
+ rte_mempool_create_empty@DPDK_16.07 16.07~rc1
+ rte_mempool_dump@DPDK_2.0 16.07~rc1
+ rte_mempool_free@DPDK_16.07 16.07~rc1
+ rte_mempool_in_use_count@DPDK_16.07 16.07~rc1
+ rte_mempool_list_dump@DPDK_2.0 16.07~rc1
+ rte_mempool_lookup@DPDK_2.0 16.07~rc1
+ rte_mempool_mem_iter@DPDK_16.07 16.07~rc1
+ rte_mempool_obj_iter@DPDK_16.07 16.07~rc1
+ rte_mempool_ops_table@DPDK_16.07 16.07~rc1
+ rte_mempool_populate_anon@DPDK_16.07 16.07~rc1
+ rte_mempool_populate_default@DPDK_16.07 16.07~rc1
+ rte_mempool_populate_phys@DPDK_16.07 16.07~rc1
+ rte_mempool_populate_phys_tab@DPDK_16.07 16.07~rc1
+ rte_mempool_populate_virt@DPDK_16.07 16.07~rc1
+ rte_mempool_register_ops@DPDK_16.07 16.07~rc1
+ rte_mempool_set_ops_byname@DPDK_16.07 16.07~rc1
+ rte_mempool_walk@DPDK_2.0 16.07~rc1
+ rte_mempool_xmem_create@DPDK_2.0 16.07~rc1
+ rte_mempool_xmem_size@DPDK_2.0 16.07~rc1
+ rte_mempool_xmem_usage@DPDK_2.0 16.07~rc1
diff --git a/debian/librte-meter1.symbols b/debian/librte-meter1.symbols
new file mode 100644
index 00000000..c598c8d7
--- /dev/null
+++ b/debian/librte-meter1.symbols
@@ -0,0 +1,4 @@
+librte_meter.so.1 librte-meter1 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
+ rte_meter_srtcm_config@DPDK_2.0 16.04
+ rte_meter_trtcm_config@DPDK_2.0 16.04
diff --git a/debian/librte-net1.symbols b/debian/librte-net1.symbols
new file mode 100644
index 00000000..87bc51f5
--- /dev/null
+++ b/debian/librte-net1.symbols
@@ -0,0 +1,3 @@
+librte_net.so.1 librte-net1 #MINVER#
+ DPDK_16.11@DPDK_16.11 16.11
+ rte_net_get_ptype@DPDK_16.11 16.11
diff --git a/debian/librte-pdump1.symbols b/debian/librte-pdump1.symbols
new file mode 100644
index 00000000..91329103
--- /dev/null
+++ b/debian/librte-pdump1.symbols
@@ -0,0 +1,9 @@
+librte_pdump.so.1 librte-pdump1 #MINVER#
+ DPDK_16.07@DPDK_16.07 16.07~rc1
+ rte_pdump_disable@DPDK_16.07 16.07~rc1
+ rte_pdump_disable_by_deviceid@DPDK_16.07 16.07~rc1
+ rte_pdump_enable@DPDK_16.07 16.07~rc1
+ rte_pdump_enable_by_deviceid@DPDK_16.07 16.07~rc1
+ rte_pdump_init@DPDK_16.07 16.07~rc1
+ rte_pdump_set_socket_dir@DPDK_16.07 16.07~rc1
+ rte_pdump_uninit@DPDK_16.07 16.07~rc1
diff --git a/debian/librte-pipeline3.symbols b/debian/librte-pipeline3.symbols
new file mode 100644
index 00000000..5801c090
--- /dev/null
+++ b/debian/librte-pipeline3.symbols
@@ -0,0 +1,28 @@
+librte_pipeline.so.3 librte-pipeline3 #MINVER#
+ DPDK_16.04@DPDK_16.04 16.04
+ DPDK_2.0@DPDK_2.0 16.04
+ DPDK_2.1@DPDK_2.1 16.04
+ DPDK_2.2@DPDK_2.2 16.04
+ rte_pipeline_ah_packet_drop@DPDK_16.04 16.04
+ rte_pipeline_ah_packet_hijack@DPDK_16.04 16.04
+ rte_pipeline_check@DPDK_2.0 16.04
+ rte_pipeline_create@DPDK_2.0 16.04
+ rte_pipeline_flush@DPDK_2.0 16.04
+ rte_pipeline_free@DPDK_2.0 16.04
+ rte_pipeline_port_in_connect_to_table@DPDK_2.0 16.04
+ rte_pipeline_port_in_create@DPDK_2.0 16.04
+ rte_pipeline_port_in_disable@DPDK_2.0 16.04
+ rte_pipeline_port_in_enable@DPDK_2.0 16.04
+ rte_pipeline_port_in_stats_read@DPDK_2.1 16.04
+ rte_pipeline_port_out_create@DPDK_2.0 16.04
+ rte_pipeline_port_out_packet_insert@DPDK_2.0 16.04
+ rte_pipeline_port_out_stats_read@DPDK_2.1 16.04
+ rte_pipeline_run@DPDK_2.0 16.04
+ rte_pipeline_table_create@DPDK_2.0 16.04
+ rte_pipeline_table_default_entry_add@DPDK_2.0 16.04
+ rte_pipeline_table_default_entry_delete@DPDK_2.0 16.04
+ rte_pipeline_table_entry_add@DPDK_2.0 16.04
+ rte_pipeline_table_entry_add_bulk@DPDK_2.2 16.04
+ rte_pipeline_table_entry_delete@DPDK_2.0 16.04
+ rte_pipeline_table_entry_delete_bulk@DPDK_2.2 16.04
+ rte_pipeline_table_stats_read@DPDK_2.1 16.04
diff --git a/debian/librte-pmd-af-packet1.symbols b/debian/librte-pmd-af-packet1.symbols
new file mode 100644
index 00000000..699357ba
--- /dev/null
+++ b/debian/librte-pmd-af-packet1.symbols
@@ -0,0 +1,4 @@
+librte_pmd_af_packet.so.1 librte-pmd-af-packet1 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
+# INFO: this library exports no symbols, essentially it is a driver that
+# registers itself on load and is then only driven by callbacks.
diff --git a/debian/librte-pmd-bnxt1.symbols b/debian/librte-pmd-bnxt1.symbols
new file mode 100644
index 00000000..acb47d64
--- /dev/null
+++ b/debian/librte-pmd-bnxt1.symbols
@@ -0,0 +1,4 @@
+librte_pmd_bnxt.so.1 librte-pmd-bnxt1 #MINVER#
+ DPDK_16.04@DPDK_16.04 16.07~rc3
+# INFO: this library exports no symbols, essentially it is a driver that
+# registers itself on load and is then only driven by callbacks.
diff --git a/debian/librte-pmd-bond1.symbols b/debian/librte-pmd-bond1.symbols
new file mode 100644
index 00000000..6502f3c6
--- /dev/null
+++ b/debian/librte-pmd-bond1.symbols
@@ -0,0 +1,30 @@
+librte_pmd_bond.so.1 librte-pmd-bond1 #MINVER#
+ DPDK_16.04@DPDK_16.04 16.07~rc1
+ DPDK_16.07@DPDK_16.07 16.07~rc1
+ DPDK_2.0@DPDK_2.0 16.04
+ DPDK_2.1@DPDK_2.1 16.04
+ rte_eth_bond_8023ad_conf_get@DPDK_2.0 16.04
+ rte_eth_bond_8023ad_setup@DPDK_2.0 16.04
+ rte_eth_bond_8023ad_conf_get@DPDK_16.07 16.07~rc1
+ rte_eth_bond_8023ad_ext_collect@DPDK_16.07 16.07~rc1
+ rte_eth_bond_8023ad_ext_collect_get@DPDK_16.07 16.07~rc1
+ rte_eth_bond_8023ad_ext_distrib@DPDK_16.07 16.07~rc1
+ rte_eth_bond_8023ad_ext_distrib_get@DPDK_16.07 16.07~rc1
+ rte_eth_bond_8023ad_ext_slowtx@DPDK_16.07 16.07~rc1
+ rte_eth_bond_8023ad_setup@DPDK_16.07 16.07~rc1
+ rte_eth_bond_8023ad_slave_info@DPDK_2.0 16.11.7
+ rte_eth_bond_active_slaves_get@DPDK_2.0 16.04
+ rte_eth_bond_create@DPDK_2.0 16.04
+ rte_eth_bond_free@DPDK_2.1 16.04
+ rte_eth_bond_link_monitoring_set@DPDK_2.0 16.04
+ rte_eth_bond_mac_address_reset@DPDK_2.0 16.04
+ rte_eth_bond_mac_address_set@DPDK_2.0 16.04
+ rte_eth_bond_mode_get@DPDK_2.0 16.04
+ rte_eth_bond_mode_set@DPDK_2.0 16.04
+ rte_eth_bond_primary_get@DPDK_2.0 16.04
+ rte_eth_bond_primary_set@DPDK_2.0 16.04
+ rte_eth_bond_slave_add@DPDK_2.0 16.04
+ rte_eth_bond_slave_remove@DPDK_2.0 16.04
+ rte_eth_bond_slaves_get@DPDK_2.0 16.04
+ rte_eth_bond_xmit_policy_get@DPDK_2.0 16.04
+ rte_eth_bond_xmit_policy_set@DPDK_2.0 16.04
diff --git a/debian/librte-pmd-cxgbe1.symbols b/debian/librte-pmd-cxgbe1.symbols
new file mode 100644
index 00000000..9c9c059e
--- /dev/null
+++ b/debian/librte-pmd-cxgbe1.symbols
@@ -0,0 +1,4 @@
+librte_pmd_cxgbe.so.1 librte-pmd-cxgbe1 #MINVER#
+ DPDK_2.1@DPDK_2.1 16.04
+# INFO: this library exports no symbols, essentially it is a driver that
+# registers itself on load and is then only driven by callbacks.
diff --git a/debian/librte-pmd-e1000-1.symbols b/debian/librte-pmd-e1000-1.symbols
new file mode 100644
index 00000000..9ee7d4f8
--- /dev/null
+++ b/debian/librte-pmd-e1000-1.symbols
@@ -0,0 +1,4 @@
+librte_pmd_e1000.so.1 librte-pmd-e1000-1 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
+# INFO: this library exports no symbols, essentially it is a driver that
+# registers itself on load and is then only driven by callbacks.
diff --git a/debian/librte-pmd-ena1.symbols b/debian/librte-pmd-ena1.symbols
new file mode 100644
index 00000000..03ea178b
--- /dev/null
+++ b/debian/librte-pmd-ena1.symbols
@@ -0,0 +1,4 @@
+librte_pmd_ena.so.1 librte-pmd-ena1 #MINVER#
+ DPDK_16.04@DPDK_16.04 16.04
+# INFO: this library exports no symbols, essentially it is a driver that
+# registers itself on load and is then only driven by callbacks.
diff --git a/debian/librte-pmd-enic1.symbols b/debian/librte-pmd-enic1.symbols
new file mode 100644
index 00000000..e5150e9d
--- /dev/null
+++ b/debian/librte-pmd-enic1.symbols
@@ -0,0 +1,4 @@
+librte_pmd_enic.so.1 librte-pmd-enic1 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
+# INFO: this library exports no symbols, essentially it is a driver that
+# registers itself on load and is then only driven by callbacks.
diff --git a/debian/librte-pmd-fm10k1.symbols b/debian/librte-pmd-fm10k1.symbols
new file mode 100644
index 00000000..f9b8fa7a
--- /dev/null
+++ b/debian/librte-pmd-fm10k1.symbols
@@ -0,0 +1,4 @@
+librte_pmd_fm10k.so.1 librte-pmd-fm10k1 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
+# INFO: this library exports no symbols, essentially it is a driver that
+# registers itself on load and is then only driven by callbacks.
diff --git a/debian/librte-pmd-i40e1.symbols b/debian/librte-pmd-i40e1.symbols
new file mode 100644
index 00000000..cd4239a5
--- /dev/null
+++ b/debian/librte-pmd-i40e1.symbols
@@ -0,0 +1,4 @@
+librte_pmd_i40e.so.1 librte-pmd-i40e1 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
+# INFO: this library exports no symbols, essentially it is a driver that
+# registers itself on load and is then only driven by callbacks.
diff --git a/debian/librte-pmd-ixgbe1.symbols b/debian/librte-pmd-ixgbe1.symbols
new file mode 100644
index 00000000..a1ffb096
--- /dev/null
+++ b/debian/librte-pmd-ixgbe1.symbols
@@ -0,0 +1,11 @@
+librte_pmd_ixgbe.so.1 librte-pmd-ixgbe1 #MINVER#
+ DPDK_16.11@DPDK_16.11 16.11
+ DPDK_2.0@DPDK_2.0 16.04
+ rte_pmd_ixgbe_set_all_queues_drop_en@DPDK_16.11 16.11
+ rte_pmd_ixgbe_set_tx_loopback@DPDK_16.11 16.11
+ rte_pmd_ixgbe_set_vf_mac_addr@DPDK_16.11 16.11
+ rte_pmd_ixgbe_set_vf_mac_anti_spoof@DPDK_16.11 16.11
+ rte_pmd_ixgbe_set_vf_split_drop_en@DPDK_16.11 16.11
+ rte_pmd_ixgbe_set_vf_vlan_anti_spoof@DPDK_16.11 16.11
+ rte_pmd_ixgbe_set_vf_vlan_insert@DPDK_16.11 16.11
+ rte_pmd_ixgbe_set_vf_vlan_stripq@DPDK_16.11 16.11
diff --git a/debian/librte-pmd-null-crypto1.symbols b/debian/librte-pmd-null-crypto1.symbols
new file mode 100644
index 00000000..b480ebaf
--- /dev/null
+++ b/debian/librte-pmd-null-crypto1.symbols
@@ -0,0 +1,4 @@
+librte_pmd_null_crypto.so.1 librte-pmd-null-crypto1 #MINVER#
+ DPDK_16.04@DPDK_16.04 16.04
+# INFO: this library exports no symbols, essentially it is a driver that
+# registers itself on load and is then only driven by callbacks.
diff --git a/debian/librte-pmd-null1.symbols b/debian/librte-pmd-null1.symbols
new file mode 100644
index 00000000..c55b0f7a
--- /dev/null
+++ b/debian/librte-pmd-null1.symbols
@@ -0,0 +1,4 @@
+librte_pmd_null.so.1 librte-pmd-null1 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
+ DPDK_2.2@DPDK_2.2 16.04
+ eth_dev_null_create@DPDK_2.2 16.04
diff --git a/debian/librte-pmd-pcap1.symbols b/debian/librte-pmd-pcap1.symbols
new file mode 100644
index 00000000..326b7c0e
--- /dev/null
+++ b/debian/librte-pmd-pcap1.symbols
@@ -0,0 +1,4 @@
+librte_pmd_pcap.so.1 librte-pmd-pcap1 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
+# INFO: this library exports no symbols, essentially it is a driver that
+# registers itself on load and is then only driven by callbacks.
diff --git a/debian/librte-pmd-qede1.symbols b/debian/librte-pmd-qede1.symbols
new file mode 100644
index 00000000..96d3f5ba
--- /dev/null
+++ b/debian/librte-pmd-qede1.symbols
@@ -0,0 +1,2 @@
+librte_pmd_qede.so.1 librte-pmd-qede1 #MINVER#
+ DPDK_16.04@DPDK_16.04 16.11
diff --git a/debian/librte-pmd-ring2.symbols b/debian/librte-pmd-ring2.symbols
new file mode 100644
index 00000000..f0235faa
--- /dev/null
+++ b/debian/librte-pmd-ring2.symbols
@@ -0,0 +1,5 @@
+librte_pmd_ring.so.2 librte-pmd-ring2 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
+ DPDK_2.2@DPDK_2.2 16.04
+ rte_eth_from_ring@DPDK_2.2 16.04
+ rte_eth_from_rings@DPDK_2.0 16.04
diff --git a/debian/librte-pmd-thunderx-nicvf1.symbols b/debian/librte-pmd-thunderx-nicvf1.symbols
new file mode 100644
index 00000000..eab82e46
--- /dev/null
+++ b/debian/librte-pmd-thunderx-nicvf1.symbols
@@ -0,0 +1,5 @@
+librte_pmd_thunderx_nicvf.so.1 librte-pmd-thunderx-nicvf1 #MINVER#
+# was not built before 16.11 plus updates
+ DPDK_16.07@DPDK_16.07 16.11
+# INFO: this library exports no symbols, essentially it is a driver that
+# registers itself on load and is then only driven by callbacks.
diff --git a/debian/librte-pmd-vhost1.symbols b/debian/librte-pmd-vhost1.symbols
new file mode 100644
index 00000000..a339fe58
--- /dev/null
+++ b/debian/librte-pmd-vhost1.symbols
@@ -0,0 +1,8 @@
+librte_pmd_vhost.so.1 librte-pmd-vhost1 #MINVER#
+ DPDK_16.04@DPDK_16.04 16.04
+ DPDK_16.11@DPDK_16.11 16.11
+ rte_eth_vhost_feature_disable@DPDK_16.04 16.04
+ rte_eth_vhost_feature_enable@DPDK_16.04 16.04
+ rte_eth_vhost_feature_get@DPDK_16.04 16.04
+ rte_eth_vhost_get_queue_event@DPDK_16.04 16.04
+ rte_eth_vhost_get_vid_from_port_id@DPDK_16.11 16.11
diff --git a/debian/librte-pmd-virtio1.symbols b/debian/librte-pmd-virtio1.symbols
new file mode 100644
index 00000000..a3ddb8bb
--- /dev/null
+++ b/debian/librte-pmd-virtio1.symbols
@@ -0,0 +1,4 @@
+librte_pmd_virtio.so.1 librte-pmd-virtio1 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
+# INFO: this library exports no symbols, essentially it is a driver that
+# registers itself on load and is then only driven by callbacks.
diff --git a/debian/librte-pmd-vmxnet3-uio1.symbols b/debian/librte-pmd-vmxnet3-uio1.symbols
new file mode 100644
index 00000000..d12a79f7
--- /dev/null
+++ b/debian/librte-pmd-vmxnet3-uio1.symbols
@@ -0,0 +1,4 @@
+librte_pmd_vmxnet3_uio.so.1 librte-pmd-vmxnet3-uio1 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
+# INFO: this library exports no symbols, essentially it is a driver that
+# registers itself on load and is then only driven by callbacks.
diff --git a/debian/librte-pmd-xenvirt1.symbols b/debian/librte-pmd-xenvirt1.symbols
new file mode 100644
index 00000000..6bdf42ab
--- /dev/null
+++ b/debian/librte-pmd-xenvirt1.symbols
@@ -0,0 +1,3 @@
+librte_pmd_xenvirt.so.1 librte-pmd-xenvirt1 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
+ rte_mempool_gntalloc_create@DPDK_2.0 16.04
diff --git a/debian/librte-port3.symbols b/debian/librte-port3.symbols
new file mode 100644
index 00000000..864a8cb9
--- /dev/null
+++ b/debian/librte-port3.symbols
@@ -0,0 +1,29 @@
+librte_port.so.3 librte-port3 #MINVER#
+ DPDK_16.07@DPDK_16.07 16.07~rc1
+ DPDK_16.11@DPDK_16.11 16.11
+ DPDK_2.0@DPDK_2.0 16.07~rc1
+ DPDK_2.1@DPDK_2.1 16.07~rc1
+ DPDK_2.2@DPDK_2.2 16.07~rc1
+ rte_port_ethdev_reader_ops@DPDK_2.0 16.07~rc1
+ rte_port_ethdev_writer_nodrop_ops@DPDK_2.1 16.07~rc1
+ rte_port_ethdev_writer_ops@DPDK_2.0 16.07~rc1
+ rte_port_fd_reader_ops@DPDK_16.11 16.11
+ rte_port_fd_writer_nodrop_ops@DPDK_16.11 16.11
+ rte_port_fd_writer_ops@DPDK_16.11 16.11
+ (arch=!i386)rte_port_kni_reader_ops@DPDK_16.07 16.07~rc1
+ (arch=!i386)rte_port_kni_writer_nodrop_ops@DPDK_16.07 16.07~rc1
+ (arch=!i386)rte_port_kni_writer_ops@DPDK_16.07 16.07~rc1
+ rte_port_ring_multi_reader_ops@DPDK_2.2 16.07~rc1
+ rte_port_ring_multi_writer_nodrop_ops@DPDK_2.2 16.07~rc1
+ rte_port_ring_multi_writer_ops@DPDK_2.2 16.07~rc1
+ rte_port_ring_reader_ipv4_frag_ops@DPDK_2.0 16.07~rc1
+ rte_port_ring_reader_ipv6_frag_ops@DPDK_2.1 16.07~rc1
+ rte_port_ring_reader_ops@DPDK_2.0 16.07~rc1
+ rte_port_ring_writer_ipv4_ras_ops@DPDK_2.0 16.07~rc1
+ rte_port_ring_writer_ipv6_ras_ops@DPDK_2.1 16.07~rc1
+ rte_port_ring_writer_nodrop_ops@DPDK_2.1 16.07~rc1
+ rte_port_ring_writer_ops@DPDK_2.0 16.07~rc1
+ rte_port_sched_reader_ops@DPDK_2.0 16.07~rc1
+ rte_port_sched_writer_ops@DPDK_2.0 16.07~rc1
+ rte_port_sink_ops@DPDK_2.0 16.07~rc1
+ rte_port_source_ops@DPDK_2.0 16.07~rc1
diff --git a/debian/librte-power1.symbols b/debian/librte-power1.symbols
new file mode 100644
index 00000000..ca6e862d
--- /dev/null
+++ b/debian/librte-power1.symbols
@@ -0,0 +1,14 @@
+librte_power.so.1 librte-power1 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
+ rte_power_exit@DPDK_2.0 16.04
+ rte_power_freq_down@DPDK_2.0 16.04
+ rte_power_freq_max@DPDK_2.0 16.04
+ rte_power_freq_min@DPDK_2.0 16.04
+ rte_power_freq_up@DPDK_2.0 16.04
+ rte_power_freqs@DPDK_2.0 16.04
+ rte_power_get_env@DPDK_2.0 16.04
+ rte_power_get_freq@DPDK_2.0 16.04
+ rte_power_init@DPDK_2.0 16.04
+ rte_power_set_env@DPDK_2.0 16.04
+ rte_power_set_freq@DPDK_2.0 16.04
+ rte_power_unset_env@DPDK_2.0 16.04
diff --git a/debian/librte-reorder1.symbols b/debian/librte-reorder1.symbols
new file mode 100644
index 00000000..d70169be
--- /dev/null
+++ b/debian/librte-reorder1.symbols
@@ -0,0 +1,9 @@
+librte_reorder.so.1 librte-reorder1 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
+ rte_reorder_create@DPDK_2.0 16.04
+ rte_reorder_drain@DPDK_2.0 16.04
+ rte_reorder_find_existing@DPDK_2.0 16.04
+ rte_reorder_free@DPDK_2.0 16.04
+ rte_reorder_init@DPDK_2.0 16.04
+ rte_reorder_insert@DPDK_2.0 16.04
+ rte_reorder_reset@DPDK_2.0 16.04
diff --git a/debian/librte-ring1.symbols b/debian/librte-ring1.symbols
new file mode 100644
index 00000000..8f4c5748
--- /dev/null
+++ b/debian/librte-ring1.symbols
@@ -0,0 +1,11 @@
+librte_ring.so.1 librte-ring1 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
+ DPDK_2.2@DPDK_2.2 16.04
+ rte_ring_create@DPDK_2.0 16.04
+ rte_ring_dump@DPDK_2.0 16.04
+ rte_ring_free@DPDK_2.2 16.04
+ rte_ring_get_memsize@DPDK_2.0 16.04
+ rte_ring_init@DPDK_2.0 16.04
+ rte_ring_list_dump@DPDK_2.0 16.04
+ rte_ring_lookup@DPDK_2.0 16.04
+ rte_ring_set_water_mark@DPDK_2.0 16.04
diff --git a/debian/librte-sched1.symbols b/debian/librte-sched1.symbols
new file mode 100644
index 00000000..e74aa3d2
--- /dev/null
+++ b/debian/librte-sched1.symbols
@@ -0,0 +1,22 @@
+librte_sched.so.1 librte-sched1 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
+ DPDK_2.1@DPDK_2.1 16.04
+ rte_approx@DPDK_2.0 16.04
+ rte_red_config_init@DPDK_2.0 16.04
+ rte_red_log2_1_minus_Wq@DPDK_2.0 16.04
+ rte_red_pow2_frac_inv@DPDK_2.0 16.04
+ rte_red_rand_seed@DPDK_2.0 16.04
+ rte_red_rand_val@DPDK_2.0 16.04
+ rte_red_rt_data_init@DPDK_2.0 16.04
+ rte_sched_pipe_config@DPDK_2.0 16.04
+ rte_sched_port_config@DPDK_2.0 16.04
+ rte_sched_port_dequeue@DPDK_2.0 16.04
+ rte_sched_port_enqueue@DPDK_2.0 16.04
+ rte_sched_port_free@DPDK_2.0 16.04
+ rte_sched_port_get_memory_footprint@DPDK_2.0 16.04
+ rte_sched_port_pkt_read_color@DPDK_2.1 16.04
+ rte_sched_port_pkt_read_tree_path@DPDK_2.1 16.04
+ rte_sched_port_pkt_write@DPDK_2.1 16.04
+ rte_sched_queue_read_stats@DPDK_2.0 16.04
+ rte_sched_subport_config@DPDK_2.0 16.04
+ rte_sched_subport_read_stats@DPDK_2.0 16.04
diff --git a/debian/librte-table2.symbols b/debian/librte-table2.symbols
new file mode 100644
index 00000000..a0ecafcc
--- /dev/null
+++ b/debian/librte-table2.symbols
@@ -0,0 +1,24 @@
+librte_table.so.2 librte-table2 #MINVER#
+ DPDK_16.07@DPDK_16.07 16.11
+ DPDK_2.0@DPDK_2.0 16.04
+ DPDK_2.2@DPDK_2.2 16.04
+ rte_table_acl_ops@DPDK_2.0 16.04
+ rte_table_array_ops@DPDK_2.0 16.04
+ rte_table_hash_cuckoo_dosig_ops@DPDK_16.07 16.11
+ rte_table_hash_ext_dosig_ops@DPDK_2.0 16.11
+ rte_table_hash_ext_ops@DPDK_2.0 16.04
+ rte_table_hash_key16_ext_dosig_ops@DPDK_2.2 16.04
+ rte_table_hash_key16_ext_ops@DPDK_2.0 16.04
+ rte_table_hash_key16_lru_dosig_ops@DPDK_2.2 16.11
+ rte_table_hash_key16_lru_ops@DPDK_2.0 16.04
+ rte_table_hash_key32_ext_ops@DPDK_2.0 16.04
+ rte_table_hash_key32_lru_ops@DPDK_2.0 16.04
+ rte_table_hash_key8_ext_dosig_ops@DPDK_2.0 16.04
+ rte_table_hash_key8_ext_ops@DPDK_2.0 16.04
+ rte_table_hash_key8_lru_dosig_ops@DPDK_2.0 16.04
+ rte_table_hash_key8_lru_ops@DPDK_2.0 16.04
+ rte_table_hash_lru_dosig_ops@DPDK_2.0 16.11
+ rte_table_hash_lru_ops@DPDK_2.0 16.04
+ rte_table_lpm_ipv6_ops@DPDK_2.0 16.04
+ rte_table_lpm_ops@DPDK_2.0 16.04
+ rte_table_stub_ops@DPDK_2.0 16.04
diff --git a/debian/librte-timer1.symbols b/debian/librte-timer1.symbols
new file mode 100644
index 00000000..0ac8261f
--- /dev/null
+++ b/debian/librte-timer1.symbols
@@ -0,0 +1,11 @@
+librte_timer.so.1 librte-timer1 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
+ rte_timer_dump_stats@DPDK_2.0 16.04
+ rte_timer_init@DPDK_2.0 16.04
+ rte_timer_manage@DPDK_2.0 16.04
+ rte_timer_pending@DPDK_2.0 16.04
+ rte_timer_reset@DPDK_2.0 16.04
+ rte_timer_reset_sync@DPDK_2.0 16.04
+ rte_timer_stop@DPDK_2.0 16.04
+ rte_timer_stop_sync@DPDK_2.0 16.04
+ rte_timer_subsystem_init@DPDK_2.0 16.04
diff --git a/debian/librte-vhost3.symbols b/debian/librte-vhost3.symbols
new file mode 100644
index 00000000..7835cf4f
--- /dev/null
+++ b/debian/librte-vhost3.symbols
@@ -0,0 +1,18 @@
+librte_vhost.so.3 librte-vhost3 #MINVER#
+ DPDK_16.07@DPDK_16.07 16.07~rc1
+ DPDK_2.0@DPDK_2.0 16.07~rc1
+ DPDK_2.1@DPDK_2.1 16.07~rc1
+ rte_vhost_avail_entries@DPDK_16.07 16.07~rc1
+ rte_vhost_dequeue_burst@DPDK_2.0 16.07~rc1
+ rte_vhost_driver_callback_register@DPDK_2.0 16.07~rc1
+ rte_vhost_driver_register@DPDK_2.0 16.07~rc1
+ rte_vhost_driver_session_start@DPDK_2.0 16.07~rc1
+ rte_vhost_driver_unregister@DPDK_2.1 16.07~rc1
+ rte_vhost_enable_guest_notification@DPDK_2.0 16.07~rc1
+ rte_vhost_enqueue_burst@DPDK_2.0 16.07~rc1
+ rte_vhost_feature_disable@DPDK_2.0 16.07~rc1
+ rte_vhost_feature_enable@DPDK_2.0 16.07~rc1
+ rte_vhost_feature_get@DPDK_2.0 16.07~rc1
+ rte_vhost_get_ifname@DPDK_16.07 16.07~rc1
+ rte_vhost_get_numa_node@DPDK_16.07 16.07~rc1
+ rte_vhost_get_queue_num@DPDK_16.07 16.07~rc1
diff --git a/debian/patches/fix-power-default-config.patch b/debian/patches/fix-power-default-config.patch
new file mode 100644
index 00000000..c6e8e5db
--- /dev/null
+++ b/debian/patches/fix-power-default-config.patch
@@ -0,0 +1,21 @@
+Description: config: fix power8 default conf
+
+Latest dpdk FTBFS for power8 default config.
+This (re-)enables a config symbol as recommended by IBM
+(gowrishankar.m@in.ibm.com)
+
+Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
+
+Origin: No, will be pushed by IBM
+Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
+Last-Update: 2016-09-02
+--- a/config/defconfig_ppc_64-power8-linuxapp-gcc
++++ b/config/defconfig_ppc_64-power8-linuxapp-gcc
+@@ -52,7 +52,6 @@
+ CONFIG_RTE_LIBRTE_I40E_PMD=n
+ CONFIG_RTE_LIBRTE_VIRTIO_PMD=y
+ CONFIG_RTE_LIBRTE_VMXNET3_PMD=n
+-CONFIG_RTE_LIBRTE_PMD_BOND=n
+ CONFIG_RTE_LIBRTE_ENIC_PMD=n
+ CONFIG_RTE_LIBRTE_FM10K_PMD=n
+
diff --git a/debian/patches/fix-vhost-user-socket-permission.patch b/debian/patches/fix-vhost-user-socket-permission.patch
new file mode 100644
index 00000000..7cd188c5
--- /dev/null
+++ b/debian/patches/fix-vhost-user-socket-permission.patch
@@ -0,0 +1,365 @@
+Description: eal: provide option to set vhost_user socket owner/permissions
+
+The API doesn't hold a way to specify a owner/permission set for vhost_user
+created sockets.
+
+Projects consuming DPDK started to do 'their own workarounds' like openvswitch
+https://patchwork.ozlabs.org/patch/559043/
+https://patchwork.ozlabs.org/patch/559045/
+But for this specific example they are blocked/stalled behind a bigger
+rework (https://patchwork.ozlabs.org/patch/604898/).
+
+We need something now for existing code linking against DPDK. That implies to
+avoid changing API/ABI. So I created a DPDK EAL commandline option based ideas
+in the former patches.
+
+Fixes LP: #1546565
+
+*Update*
+ - with the split libs it now nees to be listed in
+ lib/librte_eal/linuxapp/eal/rte_eal_version.map to work on link steps
+ - please note that upstream gravitates towards not extending but creating a
+ new the API in DPDK as long term solution (will take a while)
+ - also as listed before most affected projects seem to create their own
+ workaround.
+ So over time we have to check when we can drop it at the price of a config
+ transition - likely OVS 2.6 won't need it anymore.
+
+*Update*
+ - the handling and lifecycle of this changed in Openvswitch 2.7 so we can no
+ more use internal_config.
+ - Also the upstreaming was aborted as that now clearly goes towards client
+ mode vhost sockets for this (and other issues).
+ - But until that is fully working we have to carry the workaround.
+ - Updated to work with Openvswitch 2.7 (and backward compatible to 2.6)
+
+Forwarded: yes
+Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
+Last-Update: 2017-05-23
+
+--- a/doc/guides/testpmd_app_ug/run_app.rst
++++ b/doc/guides/testpmd_app_ug/run_app.rst
+@@ -156,6 +156,25 @@
+
+ Use malloc instead of hugetlbfs.
+
++* ``--vhost-owner``
++
++ When creating vhost_user sockets change owner and group to the specified value.
++ This can be given as ``user:group``, but also only ``user`` or ``:group`` are supported.
++
++ Examples::
++
++ --vhost-owner 'libvirt-qemu:kvm'
++ --vhost-owner 'libvirt-qemu'
++ --vhost-owner ':kvm'
++
++* ``--vhost-perm``
++
++ When creating vhost_user sockets set them up with these permissions.
++
++ For example::
++
++ --vhost-perm '0664'
++
+
+ Testpmd Command-line Options
+ ----------------------------
+--- a/lib/librte_eal/common/eal_common_options.c
++++ b/lib/librte_eal/common/eal_common_options.c
+@@ -95,6 +95,8 @@
+ {OPT_VFIO_INTR, 1, NULL, OPT_VFIO_INTR_NUM },
+ {OPT_VMWARE_TSC_MAP, 0, NULL, OPT_VMWARE_TSC_MAP_NUM },
+ {OPT_XEN_DOM0, 0, NULL, OPT_XEN_DOM0_NUM },
++ {OPT_VHOST_OWNER, 1, NULL, OPT_VHOST_OWNER_NUM },
++ {OPT_VHOST_PERM, 1, NULL, OPT_VHOST_PERM_NUM },
+ {0, 0, NULL, 0 }
+ };
+
+--- a/lib/librte_eal/common/eal_options.h
++++ b/lib/librte_eal/common/eal_options.h
+@@ -83,6 +83,10 @@
+ OPT_VMWARE_TSC_MAP_NUM,
+ #define OPT_XEN_DOM0 "xen-dom0"
+ OPT_XEN_DOM0_NUM,
++#define OPT_VHOST_OWNER "vhost-owner"
++ OPT_VHOST_OWNER_NUM,
++#define OPT_VHOST_PERM "vhost-perm"
++ OPT_VHOST_PERM_NUM,
+ OPT_LONG_MAX_NUM
+ };
+
+--- a/lib/librte_eal/common/include/rte_eal.h
++++ b/lib/librte_eal/common/include/rte_eal.h
+@@ -256,6 +256,11 @@
+ #define RTE_INIT(func) \
+ static void __attribute__((constructor, used)) func(void)
+
++/**
++ * Set owner/permissions on sockets if requested on EAL commandline
++ */
++void rte_eal_set_socket_permissions(const char *);
++
+ #ifdef __cplusplus
+ }
+ #endif
+--- a/lib/librte_eal/linuxapp/eal/eal.c
++++ b/lib/librte_eal/linuxapp/eal/eal.c
+@@ -53,6 +53,9 @@
+ #if defined(RTE_ARCH_X86)
+ #include <sys/io.h>
+ #endif
++#include <sys/types.h>
++#include <pwd.h>
++#include <grp.h>
+
+ #include <rte_common.h>
+ #include <rte_debug.h>
+@@ -117,6 +120,12 @@
+ /* internal configuration */
+ struct internal_config internal_config;
+
++/* workaround to be able to create the sockets under a certain set of
++ * owner/permissions as specified to EAL until solved upstream */
++static uid_t debian_vhost_sock_uid = (uid_t)-1;
++static gid_t debian_vhost_sock_gid = (gid_t)-1;
++static mode_t debian_vhost_sock_perm = 0;
++
+ /* used by rte_rdtsc() */
+ int rte_cycles_vmware_tsc_map;
+
+@@ -354,6 +363,8 @@
+ " --"OPT_CREATE_UIO_DEV" Create /dev/uioX (usually done by hotplug)\n"
+ " --"OPT_VFIO_INTR" Interrupt mode for VFIO (legacy|msi|msix)\n"
+ " --"OPT_XEN_DOM0" Support running on Xen dom0 without hugetlbfs\n"
++ " --"OPT_VHOST_OWNER" Create vhost-user sockets with this owner:group\n"
++ " --"OPT_VHOST_PERM" Create vhost-user sockets with these permissions\n"
+ "\n");
+ /* Allow the application to print its usage message too if hook is set */
+ if ( rte_application_usage_hook ) {
+@@ -515,6 +526,121 @@
+ optarg = old_optarg;
+ }
+
++/* Try to double the size of '*buf', return true
++ * if successful, and '*sizep' will be updated with
++ * the new size. Otherwise, return false. */
++static int
++enlarge_buffer(char **buf, size_t *sizep)
++{
++ size_t newsize = *sizep * 2;
++
++ if (newsize > *sizep) {
++ *buf = realloc(*buf, newsize);
++ *sizep = newsize;
++ return 1;
++ }
++
++ return 0;
++}
++
++static int
++get_owners_from_str(const char *user_spec, uid_t *uid, gid_t *gid)
++{
++ size_t bufsize = 4096;
++
++ char *pos = strchr(user_spec, ':');
++ user_spec += strspn(user_spec, " \t\r\n");
++ size_t len = pos ? (size_t)(pos - user_spec) : strlen(user_spec);
++
++ char *buf = NULL;
++ struct passwd pwd, *res;
++ int e;
++
++ buf = malloc(bufsize);
++ char *user_search = NULL;
++ if (len) {
++ user_search = malloc(len + 1);
++ memcpy(user_search, user_spec, len);
++ user_search[len] = '\0';
++ while ((e = getpwnam_r(user_search, &pwd, buf, bufsize, &res)) == ERANGE) {
++ if (!enlarge_buffer(&buf, &bufsize)) {
++ break;
++ }
++ }
++
++ if (e != 0) {
++ RTE_LOG(ERR, EAL,"Failed to retrive user %s's uid (%s), aborting.",
++ user_search, strerror(e));
++ goto release;
++ }
++ if (res == NULL) {
++ RTE_LOG(ERR, EAL,"user %s not found, aborting.",
++ user_search);
++ e = -1;
++ goto release;
++ }
++ } else {
++ /* User name is not specified, use current user. */
++ while ((e = getpwuid_r(getuid(), &pwd, buf, bufsize, &res)) == ERANGE) {
++ if (!enlarge_buffer(&buf, &bufsize)) {
++ break;
++ }
++ }
++
++ if (e != 0) {
++ RTE_LOG(ERR, EAL,"Failed to retrive current user's uid "
++ "(%s), aborting.", strerror(e));
++ goto release;
++ }
++ user_search = strdup(pwd.pw_name);
++ }
++
++ if (uid)
++ *uid = pwd.pw_uid;
++
++ free(buf);
++ buf = NULL;
++
++ if (pos) {
++ char *grpstr = pos + 1;
++ grpstr += strspn(grpstr, " \t\r\n");
++
++ if (*grpstr) {
++ struct group grp, *res;
++
++ bufsize = 4096;
++ buf = malloc(bufsize);
++ while ((e = getgrnam_r(grpstr, &grp, buf, bufsize, &res))
++ == ERANGE) {
++ if (!enlarge_buffer(&buf, &bufsize)) {
++ break;
++ }
++ }
++
++ if (e) {
++ RTE_LOG(ERR, EAL,"Failed to get group entry for %s, "
++ "(%s), aborting.", grpstr,
++ strerror(e));
++ goto release;
++ }
++ if (res == NULL) {
++ RTE_LOG(ERR, EAL,"Group %s not found, aborting.",
++ grpstr);
++ e = -1;
++ goto release;
++ }
++
++ if (gid)
++ *gid = grp.gr_gid;
++ }
++ }
++
++ release:
++ free(buf);
++ free(user_search);
++ return e;
++}
++
+ /* Parse the argument given in the command line of the application */
+ static int
+ eal_parse_args(int argc, char **argv)
+@@ -611,6 +737,26 @@
+ internal_config.create_uio_dev = 1;
+ break;
+
++ case OPT_VHOST_OWNER_NUM:
++ if (get_owners_from_str(optarg, &debian_vhost_sock_uid,
++ &debian_vhost_sock_gid)) {
++ RTE_LOG(ERR, EAL,"vhost-user socket unable to get"
++ " specified user/group: %s\n", optarg);
++ debian_vhost_sock_uid = (uid_t)-1;
++ debian_vhost_sock_gid = (gid_t)-1;
++ }
++ else {
++ RTE_LOG(INFO, EAL,"socket owner specified as %s (%d:%d)\n",
++ optarg, debian_vhost_sock_uid, debian_vhost_sock_gid);
++ }
++ break;
++
++ case OPT_VHOST_PERM_NUM:
++ debian_vhost_sock_perm = (mode_t)strtoul(optarg, NULL, 0);
++ RTE_LOG(INFO, EAL,"socket perm specified as '%#o' from '%s'\n",
++ debian_vhost_sock_perm, optarg);
++ break;
++
+ default:
+ if (opt < OPT_LONG_MIN_NUM && isprint(opt)) {
+ RTE_LOG(ERR, EAL, "Option %c is not supported "
+@@ -943,3 +1089,47 @@
+ /* Module has been found */
+ return 1;
+ }
++
++static void
++vhost_set_permissions(const char *vhost_sock_location)
++{
++ int err = chmod(vhost_sock_location, debian_vhost_sock_perm);
++ if (err) {
++ RTE_LOG(ERR, EAL,"vhost-user socket cannot set"
++ " permissions to %#o (%s).\n",
++ debian_vhost_sock_perm, strerror(err));
++ return;
++ }
++ RTE_LOG(INFO, EAL,"Socket %s changed permissions"
++ " to %#o\n", vhost_sock_location,
++ debian_vhost_sock_perm);
++}
++
++static void
++vhost_set_ownership(const char *vhost_sock_location)
++{
++ int err = chown(vhost_sock_location, debian_vhost_sock_uid, debian_vhost_sock_gid);
++ if (err) {
++ RTE_LOG(ERR, EAL,"vhost-user socket unable to set"
++ " ownership to %d:%d (%s).\n",
++ debian_vhost_sock_uid, debian_vhost_sock_gid,
++ strerror(err));
++ return;
++ }
++
++ RTE_LOG(INFO, EAL,"Socket %s changed ownership"
++ " to %d:%d.\n", vhost_sock_location,
++ debian_vhost_sock_uid, debian_vhost_sock_gid);
++}
++
++void
++rte_eal_set_socket_permissions(const char *path)
++{
++ if (debian_vhost_sock_perm != 0) {
++ vhost_set_permissions(path);
++ }
++
++ if (debian_vhost_sock_uid != (uid_t)-1 || debian_vhost_sock_gid != (gid_t)-1) {
++ vhost_set_ownership(path);
++ }
++}
+--- a/lib/librte_eal/linuxapp/eal/rte_eal_version.map
++++ b/lib/librte_eal/linuxapp/eal/rte_eal_version.map
+@@ -139,6 +139,7 @@
+ rte_keepalive_register_core;
+ rte_xen_dom0_supported;
+ rte_xen_mem_phy2mch;
++ rte_eal_set_socket_permissions;
+
+ } DPDK_2.1;
+
+--- a/lib/librte_vhost/socket.c
++++ b/lib/librte_vhost/socket.c
+@@ -78,6 +78,8 @@
+ pthread_mutex_t mutex;
+ };
+
++#include <rte_eal.h>
++
+ #define MAX_VIRTIO_BACKLOG 128
+
+ static void vhost_user_server_new_connection(int fd, void *data, int *remove);
+@@ -519,6 +521,7 @@
+ vsocket->is_server = true;
+ ret = vhost_user_create_server(vsocket);
+ }
++ rte_eal_set_socket_permissions(path);
+ if (ret < 0) {
+ free(vsocket->path);
+ free(vsocket);
diff --git a/debian/patches/mk-fix-excluding-.doctrees-when-installing-docs.patch b/debian/patches/mk-fix-excluding-.doctrees-when-installing-docs.patch
new file mode 100644
index 00000000..52c78a75
--- /dev/null
+++ b/debian/patches/mk-fix-excluding-.doctrees-when-installing-docs.patch
@@ -0,0 +1,25 @@
+Description: mk: fix excluding .doctrees when installing docs
+
+The --exclude parameter must be passed before the input directory to
+tar, otherwise it's silently ignored and the .doctrees directory is
+installed by make install-doc.
+
+Origin: http://dpdk.org/dev/patchwork/patch/25674/
+Forwarded: yes
+Author: Luca Boccassi <luca.boccassi@gmail.com>
+Last-Update: 2017-06-24
+---
+ mk/rte.sdkinstall.mk | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/mk/rte.sdkinstall.mk
++++ b/mk/rte.sdkinstall.mk
+@@ -169,7 +169,7 @@ install-sdk:
+ install-doc:
+ ifneq ($(wildcard $O/doc/html),)
+ $(Q)$(call rte_mkdir, $(DESTDIR)$(docdir))
+- $(Q)tar -cf - -C $O/doc html --exclude 'html/guides/.*' | \
++ $(Q)tar -cf - -C $O/doc --exclude 'html/guides/.*' html | \
+ tar -xf - -C $(DESTDIR)$(docdir) $(TAR_X_FLAGS)
+ endif
+ ifneq ($(wildcard $O/doc/*/*/*pdf),)
diff --git a/debian/patches/mk-order-CFLAGS-so-that-ISCDIR-comes-before-IRTE_OUT.patch b/debian/patches/mk-order-CFLAGS-so-that-ISCDIR-comes-before-IRTE_OUT.patch
new file mode 100644
index 00000000..4312f384
--- /dev/null
+++ b/debian/patches/mk-order-CFLAGS-so-that-ISCDIR-comes-before-IRTE_OUT.patch
@@ -0,0 +1,388 @@
+Description: mk: set -ISCDIR before -IRTE_OUT/include in CFLAGS
+
+A race condition can happen during parallel builds, where a header
+might be installed in RTE_OUT/include before CFLAGS is recursively
+expanded. This causes GCC to sometimes pick the header path as
+SRCDIR/... and sometimes as RTE_OUT/include/... making the build
+unreproducible, as the full path is used for the expansion of
+__FILE__ and in the DWARF directory listing.
+Always pass -ISRCDIR first to CFLAGS so that it's deterministic.
+
+Origin: http://dpdk.org/dev/patchwork/patch/27512/
+Forwarded: yes
+Author: Luca Boccassi <luca.boccassi@gmail.com>
+Last-Update: 2017-08-10
+---
+ lib/librte_acl/Makefile | 10 ++++++++--
+ lib/librte_bitratestats/Makefile | 9 ++++++++-
+ lib/librte_cmdline/Makefile | 9 ++++++++-
+ lib/librte_distributor/Makefile | 10 ++++++++--
+ lib/librte_eal/linuxapp/eal/Makefile | 8 +++++++-
+ lib/librte_hash/Makefile | 10 ++++++++--
+ lib/librte_ip_frag/Makefile | 10 ++++++++--
+ lib/librte_jobstats/Makefile | 10 ++++++++--
+ lib/librte_kni/Makefile | 9 ++++++++-
+ lib/librte_kvargs/Makefile | 9 ++++++++-
+ lib/librte_latencystats/Makefile | 9 ++++++++-
+ lib/librte_lpm/Makefile | 10 ++++++++--
+ lib/librte_mbuf/Makefile | 9 ++++++++-
+ lib/librte_mempool/Makefile | 9 ++++++++-
+ lib/librte_metrics/Makefile | 9 ++++++++-
+ lib/librte_net/Makefile | 9 ++++++++-
+ lib/librte_pdump/Makefile | 10 ++++++++--
+ lib/librte_power/Makefile | 9 ++++++++-
+ lib/librte_reorder/Makefile | 10 ++++++++--
+ lib/librte_ring/Makefile | 9 ++++++++-
+ lib/librte_timer/Makefile | 9 ++++++++-
+ lib/librte_vhost/Makefile | 9 ++++++++-
+ 22 files changed, 173 insertions(+), 32 deletions(-)
+
+--- a/lib/librte_acl/Makefile
++++ b/lib/librte_acl/Makefile
+@@ -34,8 +34,14 @@ include $(RTE_SDK)/mk/rte.vars.mk
+ # library name
+ LIB = librte_acl.a
+
+-CFLAGS += -O3
+-CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
++# Include the source dir first, so that headers paths are always picked
++# from there. By including it last race conditions might happen during paralle
++# builds, and headers might be already installed in RTE_OUT/include when the
++# variable is recursively expanded, thus causing GCC to sometimes use the
++# SRCDIR path and sometimes the RTE_OUT/include, making the builds not
++# reproducible.
++CFLAGS := -I$(SRCDIR) $(CFLAGS)
++CFLAGS += $(WERROR_FLAGS) -O3
+
+ EXPORT_MAP := rte_acl_version.map
+
+--- a/lib/librte_cmdline/Makefile
++++ b/lib/librte_cmdline/Makefile
+@@ -34,7 +34,14 @@ include $(RTE_SDK)/mk/rte.vars.mk
+ # library name
+ LIB = librte_cmdline.a
+
+-CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
++# Include the source dir first, so that headers paths are always picked
++# from there. By including it last race conditions might happen during paralle
++# builds, and headers might be already installed in RTE_OUT/include when the
++# variable is recursively expanded, thus causing GCC to sometimes use the
++# SRCDIR path and sometimes the RTE_OUT/include, making the builds not
++# reproducible.
++CFLAGS := -I$(SRCDIR) $(CFLAGS)
++CFLAGS += $(WERROR_FLAGS) -O3
+
+ EXPORT_MAP := rte_cmdline_version.map
+
+--- a/lib/librte_distributor/Makefile
++++ b/lib/librte_distributor/Makefile
+@@ -34,8 +34,14 @@ include $(RTE_SDK)/mk/rte.vars.mk
+ # library name
+ LIB = librte_distributor.a
+
+-CFLAGS += -O3
+-CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
++# Include the source dir first, so that headers paths are always picked
++# from there. By including it last race conditions might happen during paralle
++# builds, and headers might be already installed in RTE_OUT/include when the
++# variable is recursively expanded, thus causing GCC to sometimes use the
++# SRCDIR path and sometimes the RTE_OUT/include, making the builds not
++# reproducible.
++CFLAGS := -I$(SRCDIR) $(CFLAGS)
++CFLAGS += $(WERROR_FLAGS) -O3
+
+ EXPORT_MAP := rte_distributor_version.map
+
+--- a/lib/librte_eal/linuxapp/eal/Makefile
++++ b/lib/librte_eal/linuxapp/eal/Makefile
+@@ -41,7 +41,13 @@ LIBABIVER := 3
+
+ VPATH += $(RTE_SDK)/lib/librte_eal/common
+
+-CFLAGS += -I$(SRCDIR)/include
++# Include the source dir first, so that headers paths are always picked
++# from there. By including it last race conditions might happen during paralle
++# builds, and headers might be already installed in RTE_OUT/include when the
++# variable is recursively expanded, thus causing GCC to sometimes use the
++# SRCDIR path and sometimes the RTE_OUT/include, making the builds not
++# reproducible.
++CFLAGS := -I$(SRCDIR)/include $(CFLAGS)
+ CFLAGS += -I$(RTE_SDK)/lib/librte_eal/common
+ CFLAGS += -I$(RTE_SDK)/lib/librte_eal/common/include
+ CFLAGS += $(WERROR_FLAGS) -O3
+--- a/lib/librte_hash/Makefile
++++ b/lib/librte_hash/Makefile
+@@ -34,8 +34,14 @@ include $(RTE_SDK)/mk/rte.vars.mk
+ # library name
+ LIB = librte_hash.a
+
+-CFLAGS += -O3
+-CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
++# Include the source dir first, so that headers paths are always picked
++# from there. By including it last race conditions might happen during paralle
++# builds, and headers might be already installed in RTE_OUT/include when the
++# variable is recursively expanded, thus causing GCC to sometimes use the
++# SRCDIR path and sometimes the RTE_OUT/include, making the builds not
++# reproducible.
++CFLAGS := -I$(SRCDIR) $(CFLAGS)
++CFLAGS += $(WERROR_FLAGS) -O3
+
+ EXPORT_MAP := rte_hash_version.map
+
+--- a/lib/librte_ip_frag/Makefile
++++ b/lib/librte_ip_frag/Makefile
+@@ -34,8 +34,14 @@ include $(RTE_SDK)/mk/rte.vars.mk
+ # library name
+ LIB = librte_ip_frag.a
+
+-CFLAGS += -O3
+-CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
++# Include the source dir first, so that headers paths are always picked
++# from there. By including it last race conditions might happen during paralle
++# builds, and headers might be already installed in RTE_OUT/include when the
++# variable is recursively expanded, thus causing GCC to sometimes use the
++# SRCDIR path and sometimes the RTE_OUT/include, making the builds not
++# reproducible.
++CFLAGS := -I$(SRCDIR) $(CFLAGS)
++CFLAGS += $(WERROR_FLAGS) -O3
+
+ EXPORT_MAP := rte_ipfrag_version.map
+
+--- a/lib/librte_jobstats/Makefile
++++ b/lib/librte_jobstats/Makefile
+@@ -34,8 +34,14 @@ include $(RTE_SDK)/mk/rte.vars.mk
+ # library name
+ LIB = librte_jobstats.a
+
+-CFLAGS += -O3
+-CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
++# Include the source dir first, so that headers paths are always picked
++# from there. By including it last race conditions might happen during paralle
++# builds, and headers might be already installed in RTE_OUT/include when the
++# variable is recursively expanded, thus causing GCC to sometimes use the
++# SRCDIR path and sometimes the RTE_OUT/include, making the builds not
++# reproducible.
++CFLAGS := -I$(SRCDIR) $(CFLAGS)
++CFLAGS += $(WERROR_FLAGS) -O3
+
+ EXPORT_MAP := rte_jobstats_version.map
+
+--- a/lib/librte_kni/Makefile
++++ b/lib/librte_kni/Makefile
+@@ -34,7 +34,14 @@ include $(RTE_SDK)/mk/rte.vars.mk
+ # library name
+ LIB = librte_kni.a
+
+-CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3 -fno-strict-aliasing
++# Include the source dir first, so that headers paths are always picked
++# from there. By including it last race conditions might happen during paralle
++# builds, and headers might be already installed in RTE_OUT/include when the
++# variable is recursively expanded, thus causing GCC to sometimes use the
++# SRCDIR path and sometimes the RTE_OUT/include, making the builds not
++# reproducible.
++CFLAGS := -I$(SRCDIR) $(CFLAGS)
++CFLAGS += $(WERROR_FLAGS) -O3 -fno-strict-aliasing
+
+ EXPORT_MAP := rte_kni_version.map
+
+--- a/lib/librte_kvargs/Makefile
++++ b/lib/librte_kvargs/Makefile
+@@ -36,7 +36,14 @@ include $(RTE_SDK)/mk/rte.vars.mk
+ # library name
+ LIB = librte_kvargs.a
+
+-CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
++# Include the source dir first, so that headers paths are always picked
++# from there. By including it last race conditions might happen during paralle
++# builds, and headers might be already installed in RTE_OUT/include when the
++# variable is recursively expanded, thus causing GCC to sometimes use the
++# SRCDIR path and sometimes the RTE_OUT/include, making the builds not
++# reproducible.
++CFLAGS := -I$(SRCDIR) $(CFLAGS)
++CFLAGS += $(WERROR_FLAGS) -O3
+
+ EXPORT_MAP := rte_kvargs_version.map
+
+--- a/lib/librte_lpm/Makefile
++++ b/lib/librte_lpm/Makefile
+@@ -34,8 +34,14 @@ include $(RTE_SDK)/mk/rte.vars.mk
+ # library name
+ LIB = librte_lpm.a
+
+-CFLAGS += -O3
+-CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
++# Include the source dir first, so that headers paths are always picked
++# from there. By including it last race conditions might happen during paralle
++# builds, and headers might be already installed in RTE_OUT/include when the
++# variable is recursively expanded, thus causing GCC to sometimes use the
++# SRCDIR path and sometimes the RTE_OUT/include, making the builds not
++# reproducible.
++CFLAGS := -I$(SRCDIR) $(CFLAGS)
++CFLAGS += $(WERROR_FLAGS) -O3
+
+ EXPORT_MAP := rte_lpm_version.map
+
+--- a/lib/librte_mbuf/Makefile
++++ b/lib/librte_mbuf/Makefile
+@@ -34,7 +34,14 @@ include $(RTE_SDK)/mk/rte.vars.mk
+ # library name
+ LIB = librte_mbuf.a
+
+-CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
++# Include the source dir first, so that headers paths are always picked
++# from there. By including it last race conditions might happen during paralle
++# builds, and headers might be already installed in RTE_OUT/include when the
++# variable is recursively expanded, thus causing GCC to sometimes use the
++# SRCDIR path and sometimes the RTE_OUT/include, making the builds not
++# reproducible.
++CFLAGS := -I$(SRCDIR) $(CFLAGS)
++CFLAGS += $(WERROR_FLAGS) -O3
+
+ EXPORT_MAP := rte_mbuf_version.map
+
+--- a/lib/librte_mempool/Makefile
++++ b/lib/librte_mempool/Makefile
+@@ -34,7 +34,14 @@ include $(RTE_SDK)/mk/rte.vars.mk
+ # library name
+ LIB = librte_mempool.a
+
+-CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
++# Include the source dir first, so that headers paths are always picked
++# from there. By including it last race conditions might happen during paralle
++# builds, and headers might be already installed in RTE_OUT/include when the
++# variable is recursively expanded, thus causing GCC to sometimes use the
++# SRCDIR path and sometimes the RTE_OUT/include, making the builds not
++# reproducible.
++CFLAGS := -I$(SRCDIR) $(CFLAGS)
++CFLAGS += $(WERROR_FLAGS) -O3
+
+ EXPORT_MAP := rte_mempool_version.map
+
+--- a/lib/librte_net/Makefile
++++ b/lib/librte_net/Makefile
+@@ -33,7 +33,14 @@ include $(RTE_SDK)/mk/rte.vars.mk
+
+ LIB = librte_net.a
+
+-CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
++# Include the source dir first, so that headers paths are always picked
++# from there. By including it last race conditions might happen during paralle
++# builds, and headers might be already installed in RTE_OUT/include when the
++# variable is recursively expanded, thus causing GCC to sometimes use the
++# SRCDIR path and sometimes the RTE_OUT/include, making the builds not
++# reproducible.
++CFLAGS := -I$(SRCDIR) $(CFLAGS)
++CFLAGS += $(WERROR_FLAGS) -O3
+
+ EXPORT_MAP := rte_net_version.map
+ LIBABIVER := 1
+--- a/lib/librte_pdump/Makefile
++++ b/lib/librte_pdump/Makefile
+@@ -34,8 +34,14 @@ include $(RTE_SDK)/mk/rte.vars.mk
+ # library name
+ LIB = librte_pdump.a
+
+-CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
+-CFLAGS += -D_GNU_SOURCE
++# Include the source dir first, so that headers paths are always picked
++# from there. By including it last race conditions might happen during paralle
++# builds, and headers might be already installed in RTE_OUT/include when the
++# variable is recursively expanded, thus causing GCC to sometimes use the
++# SRCDIR path and sometimes the RTE_OUT/include, making the builds not
++# reproducible.
++CFLAGS := -I$(SRCDIR) $(CFLAGS)
++CFLAGS += $(WERROR_FLAGS) -O3 -D_GNU_SOURCE
+ LDLIBS += -lpthread
+
+ EXPORT_MAP := rte_pdump_version.map
+--- a/lib/librte_power/Makefile
++++ b/lib/librte_power/Makefile
+@@ -34,7 +34,14 @@ include $(RTE_SDK)/mk/rte.vars.mk
+ # library name
+ LIB = librte_power.a
+
+-CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3 -fno-strict-aliasing
++# Include the source dir first, so that headers paths are always picked
++# from there. By including it last race conditions might happen during paralle
++# builds, and headers might be already installed in RTE_OUT/include when the
++# variable is recursively expanded, thus causing GCC to sometimes use the
++# SRCDIR path and sometimes the RTE_OUT/include, making the builds not
++# reproducible.
++CFLAGS := -I$(SRCDIR) $(CFLAGS)
++CFLAGS += $(WERROR_FLAGS) -O3 -fno-strict-aliasing
+
+ EXPORT_MAP := rte_power_version.map
+
+--- a/lib/librte_reorder/Makefile
++++ b/lib/librte_reorder/Makefile
+@@ -34,8 +34,14 @@ include $(RTE_SDK)/mk/rte.vars.mk
+ # library name
+ LIB = librte_reorder.a
+
+-CFLAGS += -O3
+-CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR)
++# Include the source dir first, so that headers paths are always picked
++# from there. By including it last race conditions might happen during paralle
++# builds, and headers might be already installed in RTE_OUT/include when the
++# variable is recursively expanded, thus causing GCC to sometimes use the
++# SRCDIR path and sometimes the RTE_OUT/include, making the builds not
++# reproducible.
++CFLAGS := -I$(SRCDIR) $(CFLAGS)
++CFLAGS += $(WERROR_FLAGS) -O3
+
+ EXPORT_MAP := rte_reorder_version.map
+
+--- a/lib/librte_ring/Makefile
++++ b/lib/librte_ring/Makefile
+@@ -34,7 +34,14 @@ include $(RTE_SDK)/mk/rte.vars.mk
+ # library name
+ LIB = librte_ring.a
+
+-CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
++# Include the source dir first, so that headers paths are always picked
++# from there. By including it last race conditions might happen during paralle
++# builds, and headers might be already installed in RTE_OUT/include when the
++# variable is recursively expanded, thus causing GCC to sometimes use the
++# SRCDIR path and sometimes the RTE_OUT/include, making the builds not
++# reproducible.
++CFLAGS := -I$(SRCDIR) $(CFLAGS)
++CFLAGS += $(WERROR_FLAGS) -O3
+
+ EXPORT_MAP := rte_ring_version.map
+
+--- a/lib/librte_timer/Makefile
++++ b/lib/librte_timer/Makefile
+@@ -34,7 +34,14 @@ include $(RTE_SDK)/mk/rte.vars.mk
+ # library name
+ LIB = librte_timer.a
+
+-CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
++# Include the source dir first, so that headers paths are always picked
++# from there. By including it last race conditions might happen during parallel
++# builds, and headers might be already installed in RTE_OUT/include when the
++# variable is recursively expanded, thus causing GCC to sometimes use the
++# SRCDIR path and sometimes the RTE_OUT/include, making the builds not
++# reproducible.
++CFLAGS := -I$(SRCDIR) $(CFLAGS)
++CFLAGS += $(WERROR_FLAGS) -O3
+
+ EXPORT_MAP := rte_timer_version.map
+
+--- a/lib/librte_vhost/Makefile
++++ b/lib/librte_vhost/Makefile
+@@ -38,7 +38,14 @@ EXPORT_MAP := rte_vhost_version.map
+
+ LIBABIVER := 3
+
+-CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3 -D_FILE_OFFSET_BITS=64
++# Include the source dir first, so that headers paths are always picked
++# from there. By including it last race conditions might happen during parallel
++# builds, and headers might be already installed in RTE_OUT/include when the
++# variable is recursively expanded, thus causing GCC to sometimes use the
++# SRCDIR path and sometimes the RTE_OUT/include, making the builds not
++# reproducible.
++CFLAGS := -I$(SRCDIR) $(CFLAGS)
++CFLAGS += $(WERROR_FLAGS) -O3 -D_FILE_OFFSET_BITS=64
+ CFLAGS += -I vhost_user
+ LDLIBS += -lpthread
+
diff --git a/debian/patches/mk-sort-headers-before-wildcard-inclusion.patch b/debian/patches/mk-sort-headers-before-wildcard-inclusion.patch
new file mode 100644
index 00000000..076b1e2f
--- /dev/null
+++ b/debian/patches/mk-sort-headers-before-wildcard-inclusion.patch
@@ -0,0 +1,49 @@
+Description: mk: sort headers before wildcard inclusion
+
+In order to achieve fully reproducible builds, always use the same
+inclusion order for headers in the Makefiles.
+
+Origin: http://dpdk.org/dev/patchwork/patch/27509/
+Forwarded: yes
+Author: Luca Boccassi <luca.boccassi@gmail.com>
+Last-Update: 2017-08-10
+---
+ examples/ip_pipeline/Makefile | 2 +-
+ examples/multi_process/client_server_mp/mp_server/Makefile | 2 +-
+ examples/server_node_efd/server/Makefile | 2 +-
+ lib/librte_eal/common/Makefile | 2 +-
+ 4 files changed, 4 insertions(+), 4 deletions(-)
+
+--- a/examples/ip_pipeline/Makefile
++++ b/examples/ip_pipeline/Makefile
+@@ -45,7 +45,7 @@ APP = ip_pipeline
+
+ VPATH += $(SRCDIR)/pipeline
+
+-INC += $(wildcard *.h) $(wildcard pipeline/*.h)
++INC += $(sort $(wildcard *.h)) $(sort $(wildcard pipeline/*.h))
+
+ # all source are stored in SRCS-y
+ SRCS-$(CONFIG_RTE_LIBRTE_PIPELINE) := main.c
+--- a/examples/multi_process/client_server_mp/mp_server/Makefile
++++ b/examples/multi_process/client_server_mp/mp_server/Makefile
+@@ -49,7 +49,7 @@ APP = mp_server
+ # all source are stored in SRCS-y
+ SRCS-y := main.c init.c args.c
+
+-INC := $(wildcard *.h)
++INC := $(sort $(wildcard *.h))
+
+ CFLAGS += $(WERROR_FLAGS) -O3
+ CFLAGS += -I$(SRCDIR)/../shared
+--- a/lib/librte_eal/common/Makefile
++++ b/lib/librte_eal/common/Makefile
+@@ -50,7 +50,7 @@ GENERIC_INC := rte_atomic.h rte_byteorde
+ GENERIC_INC += rte_spinlock.h rte_memcpy.h rte_cpuflags.h rte_rwlock.h
+ # defined in mk/arch/$(RTE_ARCH)/rte.vars.mk
+ ARCH_DIR ?= $(RTE_ARCH)
+-ARCH_INC := $(notdir $(wildcard $(RTE_SDK)/lib/librte_eal/common/include/arch/$(ARCH_DIR)/*.h))
++ARCH_INC := $(sort $(notdir $(wildcard $(RTE_SDK)/lib/librte_eal/common/include/arch/$(ARCH_DIR)/*.h)))
+
+ SYMLINK-$(CONFIG_RTE_LIBRTE_EAL)-include := $(addprefix include/,$(INC))
+ SYMLINK-$(CONFIG_RTE_LIBRTE_EAL)-include += \
diff --git a/debian/patches/mk-sort-list-of-shared-objects-in-linker-script.patch b/debian/patches/mk-sort-list-of-shared-objects-in-linker-script.patch
new file mode 100644
index 00000000..d64a233c
--- /dev/null
+++ b/debian/patches/mk-sort-list-of-shared-objects-in-linker-script.patch
@@ -0,0 +1,27 @@
+Description: mk: sort list of shared objects in linker script
+
+The output of wildcard might not be stable and depend on the
+filesystem and other factors.
+This means the content libdpdk.so linker script might change between
+builds from the same sources.
+Run the list through sort to ensure reproducibility.
+
+Origin: http://dpdk.org/dev/patchwork/patch/27507/
+Forwarded: yes
+Author: Luca Boccassi <luca.boccassi@gmail.com>
+Last-Update: 2017-08-10
+---
+ mk/rte.combinedlib.mk | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/mk/rte.combinedlib.mk
++++ b/mk/rte.combinedlib.mk
+@@ -42,7 +42,7 @@ endif
+ RTE_LIBNAME := dpdk
+ COMBINEDLIB := lib$(RTE_LIBNAME)$(EXT)
+
+-LIBS := $(filter-out $(COMBINEDLIB), $(notdir $(wildcard $(RTE_OUTPUT)/lib/*$(EXT))))
++LIBS := $(filter-out $(COMBINEDLIB), $(sort $(notdir $(wildcard $(RTE_OUTPUT)/lib/*$(EXT)))))
+
+ all: FORCE
+ $(Q)echo "GROUP ( $(LIBS) )" > $(RTE_OUTPUT)/lib/$(COMBINEDLIB)
diff --git a/debian/patches/mk-sort-object-files-when-building-deps-lists.patch b/debian/patches/mk-sort-object-files-when-building-deps-lists.patch
new file mode 100644
index 00000000..aa592ddb
--- /dev/null
+++ b/debian/patches/mk-sort-object-files-when-building-deps-lists.patch
@@ -0,0 +1,64 @@
+Description: mk: sort object files when building deps lists
+
+In order to achieve reproducible builds, always use the same
+order when listing object files to build dependencies lists.
+
+Origin: http://dpdk.org/dev/patchwork/patch/27511/
+Forwarded: yes
+Author: Luca Boccassi <luca.boccassi@gmail.com>
+Last-Update: 2017-08-10
+---
+ mk/rte.app.mk | 4 ++--
+ mk/rte.hostapp.mk | 4 ++--
+ mk/rte.shared.mk | 4 ++--
+ 3 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/mk/rte.app.mk b/mk/rte.app.mk
+index bcaf1b382..54134dea4 100644
+--- a/mk/rte.app.mk
++++ b/mk/rte.app.mk
+@@ -263,8 +263,8 @@ LDLIBS_NAMES += $(patsubst -Wl$(comma)-l%,lib%.a,$(filter -Wl$(comma)-l%,$(LDLIB
+
+ # list of found libraries files (useful for deps). If not found, the
+ # library is silently ignored and dep won't be checked
+-LDLIBS_FILES := $(wildcard $(foreach dir,$(LDLIBS_PATH),\
+- $(addprefix $(dir)/,$(LDLIBS_NAMES))))
++LDLIBS_FILES := $(sort $(wildcard $(foreach dir,$(LDLIBS_PATH),\
++ $(addprefix $(dir)/,$(LDLIBS_NAMES)))))
+
+ #
+ # Compile executable file if needed
+diff --git a/mk/rte.hostapp.mk b/mk/rte.hostapp.mk
+index 5cb4909cb..f58173c31 100644
+--- a/mk/rte.hostapp.mk
++++ b/mk/rte.hostapp.mk
+@@ -69,9 +69,9 @@ O_TO_EXE_DO = @set -e; \
+ -include .$(HOSTAPP).cmd
+
+ # list of .a files that are linked to this application
+-LDLIBS_FILES := $(wildcard \
++LDLIBS_FILES := $(sort $(wildcard \
+ $(addprefix $(RTE_OUTPUT)/lib/, \
+- $(patsubst -l%,lib%.a,$(filter -l%,$(LDLIBS)))))
++ $(patsubst -l%,lib%.a,$(filter -l%,$(LDLIBS))))))
+
+ #
+ # Compile executable file if needed
+diff --git a/mk/rte.shared.mk b/mk/rte.shared.mk
+index 87ccf0ba4..4e680bc03 100644
+--- a/mk/rte.shared.mk
++++ b/mk/rte.shared.mk
+@@ -85,8 +85,8 @@ LDLIBS_NAMES += $(patsubst -Wl$(comma)-l%,lib%.a,$(filter -Wl$(comma)-l%,$(LDLIB
+
+ # list of found libraries files (useful for deps). If not found, the
+ # library is silently ignored and dep won't be checked
+-LDLIBS_FILES := $(wildcard $(foreach dir,$(LDLIBS_PATH),\
+- $(addprefix $(dir)/,$(LDLIBS_NAMES))))
++LDLIBS_FILES := $(sort $(wildcard $(foreach dir,$(LDLIBS_PATH),\
++ $(addprefix $(dir)/,$(LDLIBS_NAMES)))))
+
+ #
+ # Archive objects in .so file if needed
+--
+2.11.0
+
diff --git a/debian/patches/mk-sort-source-files-before-passing-them-to-the-comp.patch b/debian/patches/mk-sort-source-files-before-passing-them-to-the-comp.patch
new file mode 100644
index 00000000..220f6988
--- /dev/null
+++ b/debian/patches/mk-sort-source-files-before-passing-them-to-the-comp.patch
@@ -0,0 +1,97 @@
+Description: mk: sort source files before passing them to the compiler
+
+In order to achieve reproducible builds, always use the same
+order when listing files for compilation.
+
+Origin: http://dpdk.org/dev/patchwork/patch/27510/
+Forwarded: yes
+Author: Luca Boccassi <luca.boccassi@gmail.com>
+Last-Update: 2017-08-10
+---
+ drivers/net/cxgbe/Makefile | 2 +-
+ drivers/net/e1000/Makefile | 2 +-
+ drivers/net/fm10k/Makefile | 2 +-
+ drivers/net/i40e/Makefile | 2 +-
+ drivers/net/ixgbe/Makefile | 2 +-
+ drivers/net/qede/Makefile | 2 +-
+ drivers/net/sfc/Makefile | 2 +-
+ drivers/net/thunderx/Makefile | 2 +-
+ 8 files changed, 8 insertions(+), 8 deletions(-)
+
+--- a/drivers/net/cxgbe/Makefile
++++ b/drivers/net/cxgbe/Makefile
+@@ -67,7 +67,7 @@ endif
+ # Add extra flags for base driver files (also known as shared code)
+ # to disable warnings in them
+ #
+-BASE_DRIVER_OBJS=$(patsubst %.c,%.o,$(notdir $(wildcard $(SRCDIR)/base/*.c)))
++BASE_DRIVER_OBJS=$(sort $(patsubst %.c,%.o,$(notdir $(wildcard $(SRCDIR)/base/*.c))))
+ $(foreach obj, $(BASE_DRIVER_OBJS), $(eval CFLAGS_$(obj)+=$(CFLAGS_BASE_DRIVER)))
+
+ VPATH += $(SRCDIR)/base
+--- a/drivers/net/e1000/Makefile
++++ b/drivers/net/e1000/Makefile
+@@ -65,7 +65,7 @@ endif
+ # Add extra flags for base driver files (also known as shared code)
+ # to disable warnings in them
+ #
+-BASE_DRIVER_OBJS=$(patsubst %.c,%.o,$(notdir $(wildcard $(SRCDIR)/base/*.c)))
++BASE_DRIVER_OBJS=$(sort $(patsubst %.c,%.o,$(notdir $(wildcard $(SRCDIR)/base/*.c))))
+ $(foreach obj, $(BASE_DRIVER_OBJS), $(eval CFLAGS_$(obj)+=$(CFLAGS_BASE_DRIVER)))
+
+ VPATH += $(SRCDIR)/base
+--- a/drivers/net/fm10k/Makefile
++++ b/drivers/net/fm10k/Makefile
+@@ -77,7 +77,7 @@ endif
+ #
+ # Add extra flags for base driver source files to disable warnings in them
+ #
+-BASE_DRIVER_OBJS=$(patsubst %.c,%.o,$(notdir $(wildcard $(SRCDIR)/base/*.c)))
++BASE_DRIVER_OBJS=$(sort $(patsubst %.c,%.o,$(notdir $(wildcard $(SRCDIR)/base/*.c))))
+ $(foreach obj, $(BASE_DRIVER_OBJS), $(eval CFLAGS_$(obj)+=$(CFLAGS_BASE_DRIVER)))
+
+ VPATH += $(SRCDIR)/base
+--- a/drivers/net/i40e/Makefile
++++ b/drivers/net/i40e/Makefile
+@@ -78,7 +78,7 @@ endif
+
+ CFLAGS_i40e_lan_hmc.o += -Wno-error
+ endif
+-OBJS_BASE_DRIVER=$(patsubst %.c,%.o,$(notdir $(wildcard $(SRCDIR)/base/*.c)))
++OBJS_BASE_DRIVER=$(sort $(patsubst %.c,%.o,$(notdir $(wildcard $(SRCDIR)/base/*.c))))
+ $(foreach obj, $(OBJS_BASE_DRIVER), $(eval CFLAGS_$(obj)+=$(CFLAGS_BASE_DRIVER)))
+
+ VPATH += $(SRCDIR)/base
+--- a/drivers/net/ixgbe/Makefile
++++ b/drivers/net/ixgbe/Makefile
+@@ -84,7 +84,7 @@ endif
+ # Add extra flags for base driver files (also known as shared code)
+ # to disable warnings in them
+ #
+-BASE_DRIVER_OBJS=$(patsubst %.c,%.o,$(notdir $(wildcard $(SRCDIR)/base/*.c)))
++BASE_DRIVER_OBJS=$(sort $(patsubst %.c,%.o,$(notdir $(wildcard $(SRCDIR)/base/*.c))))
+ $(foreach obj, $(BASE_DRIVER_OBJS), $(eval CFLAGS_$(obj)+=$(CFLAGS_BASE_DRIVER)))
+
+ VPATH += $(SRCDIR)/base
+--- a/drivers/net/qede/Makefile
++++ b/drivers/net/qede/Makefile
+@@ -75,7 +75,7 @@ endif
+ # to disable warnings in them
+ #
+ #
+-BASE_DRIVER_OBJS=$(patsubst %.c,%.o,$(notdir $(wildcard $(SRCDIR)/base/*.c)))
++BASE_DRIVER_OBJS=$(sort $(patsubst %.c,%.o,$(notdir $(wildcard $(SRCDIR)/base/*.c))))
+ $(foreach obj, $(BASE_DRIVER_OBJS), $(eval CFLAGS+=$(CFLAGS_BASE_DRIVER)))
+
+ #
+--- a/drivers/net/thunderx/Makefile
++++ b/drivers/net/thunderx/Makefile
+@@ -45,7 +45,7 @@ EXPORT_MAP := rte_pmd_thunderx_nicvf_ver
+
+ LIBABIVER := 1
+
+-OBJS_BASE_DRIVER=$(patsubst %.c,%.o,$(notdir $(wildcard $(SRCDIR)/base/*.c)))
++OBJS_BASE_DRIVER=$(sort $(patsubst %.c,%.o,$(notdir $(wildcard $(SRCDIR)/base/*.c))))
+ $(foreach obj, $(OBJS_BASE_DRIVER), $(eval CFLAGS_$(obj)+=$(CFLAGS_BASE_DRIVER)))
+
+ VPATH += $(SRCDIR)/base
diff --git a/debian/patches/mk-use-make-silent-flag-to-print-HTML-doc-version.patch b/debian/patches/mk-use-make-silent-flag-to-print-HTML-doc-version.patch
new file mode 100644
index 00000000..77a248bb
--- /dev/null
+++ b/debian/patches/mk-use-make-silent-flag-to-print-HTML-doc-version.patch
@@ -0,0 +1,31 @@
+Description: mk: use make silent flag to print HTML doc version
+
+Depending on the environment, make might echo the command being ran.
+In mk/rte.sdkdoc.mk make is used to print the DPDK version to be
+piped to doxygen. This causes the following to be written:
+
+<div id="projectname">DPDK
+&#160;<span id="projectnumber">/usr/bin/make-f/build/dpdk-jYjqnr/dpdk-16.11.2/mk/rte.sdkconfig.mkshowversion</span>
+</div>
+
+Use -s (--silent) to prevent echoing.
+
+Origin: http://dpdk.org/dev/patchwork/patch/25673/
+Forwarded: yes
+Author: Luca Boccassi <luca.boccassi@gmail.com>
+Last-Update: 2017-06-24
+---
+ mk/rte.sdkdoc.mk | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/mk/rte.sdkdoc.mk
++++ b/mk/rte.sdkdoc.mk
+@@ -71,7 +71,7 @@ api-html: api-html-clean
+ $(Q)mkdir -p $(RTE_OUTPUT)/doc/html
+ $(Q)(cat $(RTE_SDK)/doc/api/doxy-api.conf && \
+ printf 'PROJECT_NUMBER = ' && \
+- $(MAKE) -rR showversion && \
++ $(MAKE) -rRs showversion && \
+ echo OUTPUT_DIRECTORY = $(RTE_OUTPUT)/doc && \
+ echo HTML_OUTPUT = html/api && \
+ echo GENERATE_HTML = YES && \
diff --git a/debian/patches/nicvf-0001-net-thunderx-check-data-offset-alignment-requirement.patch b/debian/patches/nicvf-0001-net-thunderx-check-data-offset-alignment-requirement.patch
new file mode 100644
index 00000000..d5402b82
--- /dev/null
+++ b/debian/patches/nicvf-0001-net-thunderx-check-data-offset-alignment-requirement.patch
@@ -0,0 +1,58 @@
+From 34c2e7026fb30f6756d2c84d07d99c94106bb2ab Mon Sep 17 00:00:00 2001
+From: Jerin Jacob <jerin.jacob@caviumnetworks.com>
+Date: Mon, 13 Mar 2017 13:32:11 +0530
+Subject: [PATCH] net/thunderx: check data offset alignment requirement
+
+nicvf HW expects the DMA address of the packet data to be
+aligned with cache line size.
+
+Packet data offset is a function of struct mbuf size,
+mbuf private size and headroom. mbuf private size can
+be changed from the application in pool creation, this
+check detects HW alignment requirement constraint in pmd
+start function.
+
+Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
+Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>
+---
+ drivers/net/thunderx/nicvf_ethdev.c | 14 +++++++++++---
+ 1 file changed, 11 insertions(+), 3 deletions(-)
+
+Origin: http://dpdk.org/browse/dpdk/commit/?id=34c2e7026fb30f6756d2c84d07d99c94106bb2ab
+Original-Author: Jerin Jacob <jerin.jacob@caviumnetworks.com>
+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/dpdk/+bug/1691659
+Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
+Last-Update: 2017-05-18
+
+--- a/drivers/net/thunderx/nicvf_ethdev.c
++++ b/drivers/net/thunderx/nicvf_ethdev.c
+@@ -1407,7 +1407,7 @@
+ nicvf_vf_start(struct rte_eth_dev *dev, struct nicvf *nic, uint32_t rbdrsz)
+ {
+ int ret;
+- uint16_t qidx;
++ uint16_t qidx, data_off;
+ uint32_t total_rxq_desc, nb_rbdr_desc, exp_buffs;
+ uint64_t mbuf_phys_off = 0;
+ struct nicvf_rxq *rxq;
+@@ -1448,10 +1448,18 @@
+ nic->vf_id, qidx, rxq->pool->name);
+ return -ENOMEM;
+ }
+- rxq->mbuf_phys_off -= nicvf_mbuff_meta_length(mbuf);
+- rxq->mbuf_phys_off -= RTE_PKTMBUF_HEADROOM;
++ data_off = nicvf_mbuff_meta_length(mbuf);
++ data_off += RTE_PKTMBUF_HEADROOM;
+ rte_pktmbuf_free(mbuf);
+
++ if (data_off % RTE_CACHE_LINE_SIZE) {
++ PMD_INIT_LOG(ERR, "%s: unaligned data_off=%d delta=%d",
++ rxq->pool->name, data_off,
++ data_off % RTE_CACHE_LINE_SIZE);
++ return -EINVAL;
++ }
++ rxq->mbuf_phys_off -= data_off;
++
+ if (mbuf_phys_off == 0)
+ mbuf_phys_off = rxq->mbuf_phys_off;
+ if (mbuf_phys_off != rxq->mbuf_phys_off) {
diff --git a/debian/patches/nicvf-0003-config-enable-thunderx-nicvf.patch b/debian/patches/nicvf-0003-config-enable-thunderx-nicvf.patch
new file mode 100644
index 00000000..465dd491
--- /dev/null
+++ b/debian/patches/nicvf-0003-config-enable-thunderx-nicvf.patch
@@ -0,0 +1,62 @@
+From 0bc8874b3b2c2da74bb955ce2de2da7eb009a8bf Mon Sep 17 00:00:00 2001
+From: Jerin Jacob <jerin.jacob@caviumnetworks.com>
+Date: Sun, 19 Mar 2017 20:18:48 +0530
+Subject: [PATCH] config: enable thunderx nicvf
+
+Enable Thunderx nicvf PMD driver in the common
+config as it does not have build dependency
+with any external library and/or architecture.
+
+Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
+---
+ config/common_base | 2 +-
+ config/defconfig_arm64-thunderx-linuxapp-gcc | 10 ----------
+ doc/guides/nics/thunderx.rst | 3 +--
+ 3 files changed, 2 insertions(+), 13 deletions(-)
+
+Origin: http://dpdk.org/browse/dpdk/commit/?id=0bc8874b3b2c2da74bb955ce2de2da7eb009a8bf
+Original-Author: Jerin Jacob <jerin.jacob@caviumnetworks.com>
+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/dpdk/+bug/1691659
+Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
+Last-Update: 2017-05-18
+
+--- a/config/common_base
++++ b/config/common_base
+@@ -264,7 +264,7 @@
+ #
+ # Compile burst-oriented Cavium Thunderx NICVF PMD driver
+ #
+-CONFIG_RTE_LIBRTE_THUNDERX_NICVF_PMD=n
++CONFIG_RTE_LIBRTE_THUNDERX_NICVF_PMD=y
+ CONFIG_RTE_LIBRTE_THUNDERX_NICVF_DEBUG_INIT=n
+ CONFIG_RTE_LIBRTE_THUNDERX_NICVF_DEBUG_RX=n
+ CONFIG_RTE_LIBRTE_THUNDERX_NICVF_DEBUG_TX=n
+--- a/config/defconfig_arm64-thunderx-linuxapp-gcc
++++ b/config/defconfig_arm64-thunderx-linuxapp-gcc
+@@ -36,13 +36,3 @@
+ CONFIG_RTE_CACHE_LINE_SIZE=128
+ CONFIG_RTE_MAX_NUMA_NODES=2
+ CONFIG_RTE_MAX_LCORE=96
+-
+-#
+-# Compile Cavium Thunderx NICVF PMD driver
+-#
+-CONFIG_RTE_LIBRTE_THUNDERX_NICVF_PMD=y
+-CONFIG_RTE_LIBRTE_THUNDERX_NICVF_DEBUG_INIT=n
+-CONFIG_RTE_LIBRTE_THUNDERX_NICVF_DEBUG_RX=n
+-CONFIG_RTE_LIBRTE_THUNDERX_NICVF_DEBUG_TX=n
+-CONFIG_RTE_LIBRTE_THUNDERX_NICVF_DEBUG_DRIVER=n
+-CONFIG_RTE_LIBRTE_THUNDERX_NICVF_DEBUG_MBOX=n
+--- a/doc/guides/nics/thunderx.rst
++++ b/doc/guides/nics/thunderx.rst
+@@ -77,9 +77,8 @@
+ The following options can be modified in the ``config`` file.
+ Please note that enabling debugging options may affect system performance.
+
+-- ``CONFIG_RTE_LIBRTE_THUNDERX_NICVF_PMD`` (default ``n``)
++- ``CONFIG_RTE_LIBRTE_THUNDERX_NICVF_PMD`` (default ``y``)
+
+- By default it is enabled only for defconfig_arm64-thunderx-* config.
+ Toggle compilation of the ``librte_pmd_thunderx_nicvf`` driver.
+
+ - ``CONFIG_RTE_LIBRTE_THUNDERX_NICVF_DEBUG_INIT`` (default ``n``)
diff --git a/debian/patches/nicvf-0004-net-thunderx-sync-mailbox-definitions-with-Linux-PF-.patch b/debian/patches/nicvf-0004-net-thunderx-sync-mailbox-definitions-with-Linux-PF-.patch
new file mode 100644
index 00000000..2ff3a2db
--- /dev/null
+++ b/debian/patches/nicvf-0004-net-thunderx-sync-mailbox-definitions-with-Linux-PF-.patch
@@ -0,0 +1,80 @@
+From 2d5a4b62ff2d7b79ca937a5c88654deecf4aa986 Mon Sep 17 00:00:00 2001
+From: Jerin Jacob <jerin.jacob@caviumnetworks.com>
+Date: Mon, 20 Mar 2017 19:40:40 +0530
+Subject: [PATCH] net/thunderx: sync mailbox definitions with Linux PF driver
+
+- bgx_link_status mbox definition was changed in Linux
+commit 1cc702591bae ("net: thunderx: Add ethtool support")
+- NIC_MBOX_MSG_RES_BIT related changes were never part of Linux PF driver
+
+Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
+---
+ drivers/net/thunderx/base/nicvf_mbox.c | 7 ++-----
+ drivers/net/thunderx/base/nicvf_mbox.h | 11 +++--------
+ 2 files changed, 5 insertions(+), 13 deletions(-)
+
+Origin: http://dpdk.org/browse/dpdk/commit/?id=2d5a4b62ff2d7b79ca937a5c88654deecf4aa986
+Original-Author: Jerin Jacob <jerin.jacob@caviumnetworks.com>
+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/dpdk/+bug/1691659
+Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
+Last-Update: 2017-05-18
+
+--- a/drivers/net/thunderx/base/nicvf_mbox.c
++++ b/drivers/net/thunderx/base/nicvf_mbox.c
+@@ -62,9 +62,6 @@
+ [NIC_MBOX_MSG_RESET_STAT_COUNTER] = "NIC_MBOX_MSG_RESET_STAT_COUNTER",
+ [NIC_MBOX_MSG_CFG_DONE] = "NIC_MBOX_MSG_CFG_DONE",
+ [NIC_MBOX_MSG_SHUTDOWN] = "NIC_MBOX_MSG_SHUTDOWN",
+- [NIC_MBOX_MSG_RES_BIT] = "NIC_MBOX_MSG_RES_BIT",
+- [NIC_MBOX_MSG_RSS_SIZE_RES_BIT] = "NIC_MBOX_MSG_RSS_SIZE",
+- [NIC_MBOX_MSG_ALLOC_SQS_RES_BIT] = "NIC_MBOX_MSG_ALLOC_SQS",
+ };
+
+ static inline const char * __attribute__((unused))
+@@ -176,7 +173,7 @@
+ case NIC_MBOX_MSG_NACK:
+ nic->pf_nacked = true;
+ break;
+- case NIC_MBOX_MSG_RSS_SIZE_RES_BIT:
++ case NIC_MBOX_MSG_RSS_SIZE:
+ nic->rss_info.rss_size = mbx.rss_size.ind_tbl_size;
+ nic->pf_acked = true;
+ break;
+@@ -186,7 +183,7 @@
+ nic->speed = mbx.link_status.speed;
+ nic->pf_acked = true;
+ break;
+- case NIC_MBOX_MSG_ALLOC_SQS_RES_BIT:
++ case NIC_MBOX_MSG_ALLOC_SQS:
+ assert_primary(nic);
+ if (mbx.sqs_alloc.qs_count != nic->sqs_count) {
+ nicvf_log_error("Received %" PRIu8 "/%" PRIu8
+--- a/drivers/net/thunderx/base/nicvf_mbox.h
++++ b/drivers/net/thunderx/base/nicvf_mbox.h
+@@ -68,16 +68,10 @@
+ #define NIC_MBOX_MSG_ALLOC_SQS 0x12 /* Allocate secondary Qset */
+ #define NIC_MBOX_MSG_LOOPBACK 0x16 /* Set interface in loopback */
+ #define NIC_MBOX_MSG_RESET_STAT_COUNTER 0x17 /* Reset statistics counters */
+-#define NIC_MBOX_MSG_CFG_DONE 0x7E /* VF configuration done */
+-#define NIC_MBOX_MSG_SHUTDOWN 0x7F /* VF is being shutdown */
+-#define NIC_MBOX_MSG_RES_BIT 0x80 /* Reset bit from PF */
++#define NIC_MBOX_MSG_CFG_DONE 0xF0 /* VF configuration done */
++#define NIC_MBOX_MSG_SHUTDOWN 0xF1 /* VF is being shutdown */
+ #define NIC_MBOX_MSG_MAX 0x100 /* Maximum number of messages */
+
+-#define NIC_MBOX_MSG_RSS_SIZE_RES_BIT \
+- (NIC_MBOX_MSG_RSS_SIZE | NIC_MBOX_MSG_RES_BIT)
+-#define NIC_MBOX_MSG_ALLOC_SQS_RES_BIT \
+- (NIC_MBOX_MSG_ALLOC_SQS | NIC_MBOX_MSG_RES_BIT)
+-
+ /* Get vNIC VF configuration */
+ struct nic_cfg_msg {
+ uint8_t msg;
+@@ -157,6 +151,7 @@
+ /* Physical interface link status */
+ struct bgx_link_status {
+ uint8_t msg;
++ uint8_t mac_type;
+ uint8_t link_up;
+ uint8_t duplex;
+ uint32_t speed;
diff --git a/debian/patches/nicvf-0005-net-thunderx-wait-to-complete-during-link-update.patch b/debian/patches/nicvf-0005-net-thunderx-wait-to-complete-during-link-update.patch
new file mode 100644
index 00000000..32937a1c
--- /dev/null
+++ b/debian/patches/nicvf-0005-net-thunderx-wait-to-complete-during-link-update.patch
@@ -0,0 +1,59 @@
+From 0cca56708d781b42561e382fcbcb1f1647b932b9 Mon Sep 17 00:00:00 2001
+From: Andriy Berestovskyy <andriy.berestovskyy@caviumnetworks.com>
+Date: Fri, 31 Mar 2017 15:57:49 +0200
+Subject: [PATCH] net/thunderx: wait to complete during link update
+
+Some DPDK applications/examples check link status on their
+start. NICVF does not wait for the link, so those apps fail.
+
+Wait up to 9 seconds for the link as other PMDs do in order
+to fix those apps/examples.
+
+Signed-off-by: Andriy Berestovskyy <andriy.berestovskyy@caviumnetworks.com>
+Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
+---
+ drivers/net/thunderx/nicvf_ethdev.c | 21 +++++++++++++++++----
+ 1 file changed, 17 insertions(+), 4 deletions(-)
+
+Origin: http://dpdk.org/browse/dpdk/commit/?id=0cca56708d781b42561e382fcbcb1f1647b932b9
+Original-Author: Andriy Berestovskyy <andriy.berestovskyy@caviumnetworks.com>
+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/dpdk/+bug/1691659
+Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
+Last-Update: 2017-05-18
+
+--- a/drivers/net/thunderx/nicvf_ethdev.c
++++ b/drivers/net/thunderx/nicvf_ethdev.c
+@@ -145,16 +145,29 @@
+ * Return 0 means link status changed, -1 means not changed
+ */
+ static int
+-nicvf_dev_link_update(struct rte_eth_dev *dev,
+- int wait_to_complete __rte_unused)
++nicvf_dev_link_update(struct rte_eth_dev *dev, int wait_to_complete)
+ {
++#define CHECK_INTERVAL 100 /* 100ms */
++#define MAX_CHECK_TIME 90 /* 9s (90 * 100ms) in total */
+ struct rte_eth_link link;
+ struct nicvf *nic = nicvf_pmd_priv(dev);
++ int i;
+
+ PMD_INIT_FUNC_TRACE();
+
+- memset(&link, 0, sizeof(link));
+- nicvf_set_eth_link_status(nic, &link);
++ if (wait_to_complete) {
++ /* rte_eth_link_get() might need to wait up to 9 seconds */
++ for (i = 0; i < MAX_CHECK_TIME; i++) {
++ memset(&link, 0, sizeof(link));
++ nicvf_set_eth_link_status(nic, &link);
++ if (link.link_status)
++ break;
++ rte_delay_ms(CHECK_INTERVAL);
++ }
++ } else {
++ memset(&link, 0, sizeof(link));
++ nicvf_set_eth_link_status(nic, &link);
++ }
+ return nicvf_atomic_write_link_status(dev, &link);
+ }
+
diff --git a/debian/patches/nicvf-0007-net-thunderx-disable-PMD-for-old-compilers.patch b/debian/patches/nicvf-0007-net-thunderx-disable-PMD-for-old-compilers.patch
new file mode 100644
index 00000000..61590496
--- /dev/null
+++ b/debian/patches/nicvf-0007-net-thunderx-disable-PMD-for-old-compilers.patch
@@ -0,0 +1,80 @@
+From 0b9ce550c4f60a69da558da6044e1b394256b43c Mon Sep 17 00:00:00 2001
+From: Ferruh Yigit <ferruh.yigit@intel.com>
+Date: Thu, 6 Apr 2017 18:05:09 +0100
+Subject: [PATCH] net/thunderx: disable PMD for old compilers
+
+Disable for gcc < 4.7 and icc <= 14.0
+
+PMD uses some compiler builtins and new compiler options. Tested with
+gcc 4.5.1 and following were not supported:
+
+option:
+-Ofast
+
+macros:
+_Static_assert
+
+__ORDER_LITTLE_ENDIAN__
+__ORDER_BIG_ENDIAN__
+__BYTE_ORDER__
+
+__atomic_fetch_add
+__ATOMIC_ACQUIRE
+__atomic_load_n
+__ATOMIC_RELAXED
+__atomic_store_n
+__ATOMIC_RELEASE
+
+It is not easy to fix all in PMD, disabling PMD for older compilers.
+
+Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
+---
+ drivers/net/Makefile | 5 +++++
+ mk/toolchain/gcc/rte.toolchain-compat.mk | 5 +++++
+ mk/toolchain/icc/rte.toolchain-compat.mk | 5 +++++
+ 3 files changed, 15 insertions(+)
+
+Origin: http://dpdk.org/browse/dpdk/commit/?id=0b9ce550c4f60a69da558da6044e1b394256b43c
+Original-Author: Ferruh Yigit <ferruh.yigit@intel.com>
+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/dpdk/+bug/1691659
+Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
+Last-Update: 2017-05-18
+
+--- a/drivers/net/Makefile
++++ b/drivers/net/Makefile
+@@ -31,6 +31,11 @@
+
+ include $(RTE_SDK)/mk/rte.vars.mk
+
++# set in mk/toolchain/xxx/rte.toolchain-compat.mk
++ifeq ($(CONFIG_RTE_LIBRTE_THUNDERX_NICVF_PMD),d)
++ $(warning thunderx pmd is not supported by old compilers)
++endif
++
+ DIRS-$(CONFIG_RTE_LIBRTE_PMD_AF_PACKET) += af_packet
+ DIRS-$(CONFIG_RTE_LIBRTE_BNX2X_PMD) += bnx2x
+ DIRS-$(CONFIG_RTE_LIBRTE_PMD_BOND) += bonding
+--- a/mk/toolchain/gcc/rte.toolchain-compat.mk
++++ b/mk/toolchain/gcc/rte.toolchain-compat.mk
+@@ -89,4 +89,9 @@
+ ifeq ($(shell test $(GCC_VERSION) -lt 42 && echo 1), 1)
+ MACHINE_CFLAGS := $(filter-out -march% -mtune% -msse%,$(MACHINE_CFLAGS))
+ endif
++
++ # Disable thunderx PMD for gcc < 4.7
++ ifeq ($(shell test $(GCC_VERSION) -lt 47 && echo 1), 1)
++ CONFIG_RTE_LIBRTE_THUNDERX_NICVF_PMD=d
++ endif
+ endif
+--- a/mk/toolchain/icc/rte.toolchain-compat.mk
++++ b/mk/toolchain/icc/rte.toolchain-compat.mk
+@@ -72,4 +72,9 @@
+ # remove march options
+ MACHINE_CFLAGS := $(patsubst -march=%,-xSSE3,$(MACHINE_CFLAGS))
+ endif
++
++ # Disable thunderx PMD for icc <= 14.0
++ ifeq ($(shell test $(ICC_MAJOR_VERSION) -le 14 && echo 1), 1)
++ CONFIG_RTE_LIBRTE_THUNDERX_NICVF_PMD=d
++ endif
+ endif
diff --git a/debian/patches/nicvf-0009-config-set-cache-line-as-128B-for-generic-arm64.patch b/debian/patches/nicvf-0009-config-set-cache-line-as-128B-for-generic-arm64.patch
new file mode 100644
index 00000000..95e02d03
--- /dev/null
+++ b/debian/patches/nicvf-0009-config-set-cache-line-as-128B-for-generic-arm64.patch
@@ -0,0 +1,65 @@
+From 852572d5db26d1d7d9021648740d9f2e0c4503c1 Mon Sep 17 00:00:00 2001
+From: Jerin Jacob <jerin.jacob@caviumnetworks.com>
+Date: Wed, 26 Apr 2017 21:59:19 +0530
+Subject: [PATCH] config: set cache line as 128B for generic arm64
+
+armv8 implementations may have 64B or 128B cache line.
+Setting to the maximum available cache line size in generic config to
+address minimum DMA alignment across all arm64 implementations.
+
+Increasing the cacheline size has no negative impact to cache invalidation
+on systems with a smaller cache line.
+
+The need for the minimum DMA alignment has impact on functional aspects
+of the platform so default config should cater the functional aspects.
+
+There is an impact on memory usage with this scheme, but that's not too
+important for the single image arm64 distribution use case.
+
+The arm64 linux kernel followed the similar approach for single
+arm64 image use case.
+http://lxr.free-electrons.com/source/arch/arm64/include/asm/cache.h
+
+Signed-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
+Acked-by: Jianbo Liu <jianbo.liu@linaro.org>
+Acked-by: Santosh Shukla <santosh.shukla@caviumnetworks.com>
+---
+ config/defconfig_arm64-armv8a-linuxapp-gcc | 5 +++++
+ config/defconfig_arm64-dpaa2-linuxapp-gcc | 1 +
+ config/defconfig_arm64-xgene1-linuxapp-gcc | 1 +
+ 3 files changed, 7 insertions(+)
+
+Origin: http://dpdk.org/browse/dpdk/commit/?id=852572d5db26d1d7d9021648740d9f2e0c4503c1
+Original-Author: Jerin Jacob <jerin.jacob@caviumnetworks.com>
+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/dpdk/+bug/1691659
+Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
+Last-Update: 2017-05-18
+
+--- a/config/defconfig_arm64-armv8a-linuxapp-gcc
++++ b/config/defconfig_arm64-armv8a-linuxapp-gcc
+@@ -42,6 +42,11 @@
+ CONFIG_RTE_TOOLCHAIN="gcc"
+ CONFIG_RTE_TOOLCHAIN_GCC=y
+
++# Maximum available cache line size in arm64 implementations.
++# Setting to maximum available cache line size in generic config
++# to address minimum DMA alignment across all arm64 implementations.
++CONFIG_RTE_CACHE_LINE_SIZE=128
++
+ CONFIG_RTE_EAL_IGB_UIO=n
+
+ CONFIG_RTE_LIBRTE_FM10K_PMD=n
+--- a/config/defconfig_arm64-dpaa2-linuxapp-gcc
++++ b/config/defconfig_arm64-dpaa2-linuxapp-gcc
+@@ -40,3 +40,4 @@
+ #
+ CONFIG_RTE_MAX_LCORE=8
+ CONFIG_RTE_MAX_NUMA_NODES=1
++CONFIG_RTE_CACHE_LINE_SIZE=64
+--- a/config/defconfig_arm64-xgene1-linuxapp-gcc
++++ b/config/defconfig_arm64-xgene1-linuxapp-gcc
+@@ -32,3 +32,4 @@
+ #include "defconfig_arm64-armv8a-linuxapp-gcc"
+
+ CONFIG_RTE_MACHINE="xgene1"
++CONFIG_RTE_CACHE_LINE_SIZE=64
diff --git a/debian/patches/series b/debian/patches/series
new file mode 100644
index 00000000..5878f97f
--- /dev/null
+++ b/debian/patches/series
@@ -0,0 +1,15 @@
+fix-vhost-user-socket-permission.patch
+fix-power-default-config.patch
+nicvf-0001-net-thunderx-check-data-offset-alignment-requirement.patch
+nicvf-0003-config-enable-thunderx-nicvf.patch
+nicvf-0004-net-thunderx-sync-mailbox-definitions-with-Linux-PF-.patch
+nicvf-0005-net-thunderx-wait-to-complete-during-link-update.patch
+nicvf-0007-net-thunderx-disable-PMD-for-old-compilers.patch
+nicvf-0009-config-set-cache-line-as-128B-for-generic-arm64.patch
+mk-use-make-silent-flag-to-print-HTML-doc-version.patch
+mk-fix-excluding-.doctrees-when-installing-docs.patch
+mk-sort-list-of-shared-objects-in-linker-script.patch
+mk-sort-headers-before-wildcard-inclusion.patch
+mk-sort-source-files-before-passing-them-to-the-comp.patch
+mk-sort-object-files-when-building-deps-lists.patch
+mk-order-CFLAGS-so-that-ISCDIR-comes-before-IRTE_OUT.patch
diff --git a/debian/prep-modules b/debian/prep-modules
new file mode 100755
index 00000000..0caf81ed
--- /dev/null
+++ b/debian/prep-modules
@@ -0,0 +1,123 @@
+#! /bin/sh
+#
+# Copyright (c) 2009-2016 Andreas Beckmann <anbe@debian.org>
+# 2010-2016 Russ Allbery <rra@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this script. If not, see <http://www.gnu.org/licenses/>.
+#
+# This script originally comes from:
+# https://anonscm.debian.org/viewvc/pkg-nvidia/packages/nvidia-graphics-drivers/trunk/debian/module/debian/prep-modules?view=markup
+# The original copyright and license (GPL2+) can be found at:
+# https://anonscm.debian.org/viewvc/pkg-nvidia/packages/nvidia-graphics-drivers/trunk/debian/copyright?view=markup
+#
+# Prepares to build kernel modules. This script figures out and munges
+# version strings. The goal is:
+#
+# * Set the package name to dpdk-modules-$(KVERS) where $(KVERS) is the
+# major kernel revision plus the debian subrevision and whatever
+# architecture string is appropriate if building against the stock Debian
+# kernels. $(KVERS) should be identical to the version component contained
+# in the Debian kernel package names (in other words, the ABI version, not
+# the package version).
+#
+# * Make the package depend on linux-image-$(KVERS) (= version) as appropriate
+# for the kernel version that we're building against. Use depend as the
+# kernel ABI is not stable and it's not guaranteed that a module built
+# against a version of the headers will work under a different kernel.
+#
+# * Save the version number of the binary package in debian/VERSION for later
+# use by dh_gencontrol. This will be the version number of the source
+# package followed by a + and the version number of the kernel package that
+# we're building against. If the kernel package version contains an epoch,
+# try to hack our way into doing the right thing by using that epoch number
+# as our own. This isn't quite the right thing, but seems reasonably good.
+#
+# This script generates debian/control from debian/control.template using sed.
+# Unfortunately, substvars cannot be used since the name of the package is
+# modified and substvars happens too late. It also outputs debian/VERSION,
+# containing the version of the binary package.
+
+set -e
+
+if [ "$#" -ne 1 ]; then
+ echo "Usage: $0 <kernel-source-location>"
+ exit 1
+fi
+
+# We can get the kernel version from one of three places. If KVERS and KDREV
+# are both already set in the environment (which will be the case when invoked
+# by make-kpkg or module-assistant), use them. Otherwise, if we have a kernel
+# source directory that contains debian/changelog (generated by make-kpkg),
+# parse that file to find the version information. Finally, if neither works,
+# extract the kernel version from the kernel headers, append INT_SUBARCH to
+# that version if it's available, and assume a kernel package revision of -1
+# if none is provided.
+#
+# Set the variables $dpdk_kvers, which will hold the revision of the kernel,
+# and $dpdk_kdrev, which will hold the version of the kernel package that
+# we're building against.
+
+changelog="$1/debian/changelog"
+if [ -n "$KVERS" ] && [ -n "$KDREV" ]; then
+ dpdk_kvers="${KVERS}${INT_SUBARCH}"
+ dpdk_kdrev="${KDREV}"
+elif [ ! -f "$changelog" ] ; then
+ if [ -n "$KVERS" ] ; then
+ dpdk_kvers="$KVERS"
+ else
+ dpdk_kvers=`perl debian/kernel-version "$1"`
+ fi
+ if [ -z "$KDREV" ] ; then
+ set +e
+ dpdk_kdrev=`dpkg-query -W -f='${Version}\n' linux-headers-${dpdk_kvers} 2> /dev/null`
+ if [ $? -ne 0 ] ; then
+ dpdk_kdrev="${dpdk_kvers}-1"
+ fi
+ set -e
+ else
+ dpdk_kvers="${dpdk_kvers}${INT_SUBARCH}"
+ dpdk_kdrev="${KDREV}"
+ fi
+else
+ if [ -n "$KVERS" ] ; then
+ dpdk_kvers="$KVERS"
+ else
+ dpdk_kvers=`head -1 "$changelog" \
+ | sed -e 's/.*source-\([^ ]*\) (\([^)]*\)).*/\1/'`
+ fi
+ dpdk_kdrev=`head -1 "$changelog" \
+ | sed -e 's/.*source-\([^ ]*\) (\([^)]*\)).*/\2/'`
+fi
+
+# Sanitize.
+dpdk_kvers="$(echo "$dpdk_kvers" | tr _ -)"
+dpdk_kdrev="$(echo "$dpdk_kdrev" | tr _ -)"
+
+# Generate the control file from the template.
+
+sed -e "s/#KVERS#/${dpdk_kvers}/g" -e "s/#KDREV#/(= ${dpdk_kdrev})/g" debian/control.modules.in > debian/control.modules
+
+# Now, calcuate the binary package version. Extract the epoch from the kernel
+# package revision and add it to the beginning of the binary package version
+# if present. Then, concatenate the source version, '+', and the kernel
+# package revision without the epoch.
+
+dpdk_version=`head -1 debian/changelog | sed -e 's/.*(\([^)]*\)).*/\1/'`
+dpdk_epoch=`echo ${dpdk_kdrev} | sed -n -e 's/^\([0-9]*\):.*/\1/p'`
+dpdk_version="${dpdk_version}+`echo ${dpdk_kdrev} | sed 's/^[0-9]*://'`"
+if [ -n "$dpdk_epoch" ] ; then
+ dpdk_version="${dpdk_epoch}:${dpdk_version}"
+fi
+
+echo "$dpdk_version" > debian/VERSION
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 00000000..961fd50b
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,365 @@
+#!/usr/bin/make -f
+# See debhelper(7) (uncomment to enable)
+# output every command that modifies files on the build system.
+export DH_VERBOSE=1
+export DH_OPTIONS=-v
+
+# see EXAMPLES in dpkg-buildflags(1) and read /usr/share/dpkg/*
+include /usr/share/dpkg/default.mk
+
+DPDK_ABI := $(shell echo $(DEB_VERSION_UPSTREAM) | cut -d '-' -f1 | cut -d '.' -f1-2 | cut -d '~' -f1)
+
+# see FEATURE AREAS in dpkg-buildflags(1)
+export DEB_BUILD_MAINT_OPTIONS = hardening=+all,-pie
+
+# see ENVIRONMENT in dpkg-buildflags(1)
+DPKG_EXPORT_BUILDFLAGS = 1
+include /usr/share/dpkg/buildflags.mk
+
+# Support backporting to jessie
+dpkg_version_lt = $(shell dpkg --compare-versions $$(dpkg --status dpkg-dev | grep Version | cut -d' ' -f2) lt-nl "1.18.11" && echo yes)
+ifeq (yes, $(dpkg_version_lt))
+ # package maintainers to append CFLAGS
+ # For Debian, dpkg-dev >= 1.18.11 and gcc 6.x, dpkg-buildflags and gcc
+ # handle -fPIC and related flags relying on specs files
+ # (/usr/share/dpkg/*specs)
+ export DEB_CFLAGS_MAINT_APPEND = -fPIC
+ export EXTRA_CFLAGS=$(CFLAGS)
+ export EXTRA_CPPFLAGS=$(CPPFLAGS)
+ export HOST_EXTRA_CFLAGS=$(CFLAGS)
+ export HOST_EXTRA_CPPFLAGS=$(CPPFLAGS)
+ # need to be stripped as DPDK build system adds them and it would be -Wl,-Wl,opt
+ export EXTRA_LDFLAGS=$(shell echo $(LDFLAGS) | sed 's/-Wl,//g')
+ # HOST_CC build system does not add -Wl ...
+ export EXTRA_HOST_LDFLAGS=$(LDFLAGS)
+endif
+
+export RTE_DEVEL_BUILD=n
+export EXTRA_CFLAGS+=-g
+
+# People rebuilding this package can overwrite DPDK_CONFIG, RTE_MACHINE and
+# RTE_TARGET via DEB_BUILD_OPTIONS if they like
+ifneq (,$(filter dpdk_config=%,$(DEB_BUILD_OPTIONS)))
+ DPDK_CONFIG ?= $(patsubst dpdk_config=%,%,$(filter dpdk_config=%,$(DEB_BUILD_OPTIONS)))
+endif
+ifneq (,$(filter rte_machine=%,$(DEB_BUILD_OPTIONS)))
+ RTE_MACHINE ?= $(patsubst rte_machine=%,%,$(filter rte_machine=%,$(DEB_BUILD_OPTIONS)))
+endif
+ifneq (,$(filter rte_target=%,$(DEB_BUILD_OPTIONS)))
+ RTE_TARGET ?= $(patsubst rte_target=%,%,$(filter rte_target=%,$(DEB_BUILD_OPTIONS)))
+endif
+
+ifneq (,$(filter $(DEB_HOST_ARCH), arm64))
+DPDK_CONFIG ?= "arm64-armv8a-linuxapp-gcc"
+RTE_MACHINE ?= "armv8a"
+RTE_TARGET ?= "arm64-armv8a-linuxapp-gcc"
+INCLUDE_ARCH := arm
+else
+ifneq (,$(filter $(DEB_HOST_ARCH), ppc64el))
+DPDK_CONFIG ?= "ppc_64-power8-linuxapp-gcc"
+RTE_MACHINE ?= "power8"
+RTE_TARGET ?= "ppc_64-power8-linuxapp-gcc"
+INCLUDE_ARCH := ppc_64
+else
+DPDK_CONFIG ?= "$(DEB_HOST_GNU_CPU)-native-linuxapp-gcc"
+RTE_MACHINE ?= "default"
+RTE_TARGET ?= "$(DEB_HOST_GNU_CPU)-default-linuxapp-gcc"
+INCLUDE_ARCH := x86
+endif
+endif
+DPDK_STATIC_DIR = "debian/build/static-root"
+DPDK_SHARED_DIR = "debian/build/shared-root"
+
+# now stable with parallel comilation, so support -j
+ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
+ PAR := $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
+ MAKEFLAGS += -j$(PAR)
+endif
+
+ifneq (,$(findstring nodoc,$(DEB_BUILD_OPTIONS)))
+BUILD_DOCS=n
+else
+BUILD_DOCS=y
+endif
+
+ifneq (,$(findstring nostatic,$(DEB_BUILD_OPTIONS)))
+BUILD_STATIC_LIB=n
+else
+BUILD_STATIC_LIB=y
+endif
+
+# kernel_modules can be passed via DEB_BUILD_OPTIONS to enable building the
+# optional binary kernel modules package. By default it will be built against
+# the current kernel, or ksrc can be passed with a path to the target kernel
+# sources instead.
+ifeq (,$(findstring kernel_modules,$(DEB_BUILD_OPTIONS)))
+DPDK_CONFIG_BUILD_KMOD=n
+KSRC=""
+else
+ifneq (,$(filter ksrc=%,$(DEB_BUILD_OPTIONS)))
+ KSRC := $(patsubst ksrc=%,%,$(filter ksrc=%,$(DEB_BUILD_OPTIONS)))
+else
+ KSRC := /lib/modules/$(shell uname -r)/build
+endif
+
+KVERS := $(shell perl debian/kernel-version $(KSRC))
+export KVERS
+export MODULE_CFLAGS=-fno-PIE
+
+DPDK_CONFIG_BUILD_KMOD=y
+
+# Since the binary module package is generated at build time depending on the
+# local kernel version, we have to append the new package in d/control.
+# We cannot use a separate control file since that wouldn't work with
+# dpkg-genchanges, and also would require a lot of overrides for debhelpers.
+get_built_using ?= $(filter-out (=),$(shell dpkg-query -f='$${source:Package} (=$${source:Version})' -W $1))
+
+build:
+ @if [ x"$(KVERS)" = x ] ; then \
+ echo 'No version in $(KSRC)/include/linux/version.h' >&2; \
+ exit 1; \
+ fi
+ sh debian/prep-modules $(KSRC)
+ cat debian/control.modules >> debian/control
+ dh $@ --with python2,dkms,systemd
+endif
+
+%:
+ dh $@ --with python2,dkms,systemd
+
+override_dh_gencontrol:
+ dh_gencontrol
+ # debian/files will not exist until dh_gencontrol has ran at least once,
+ # so we need to run gencontrol for libdpdk-dev and libdpdk-dbgsym after.
+ # The list of libraries and PMDs is everchanging, so generate the dependency
+ # list for libdpdk-dev to avoid having to maintain it manually.
+ # Same for the recommends list for dpdk, were we want the PMDs and the mempools.
+ dh_gencontrol -p libdpdk-dev -- -V"librte:Depends=`grep -E 'librte-*' ./debian/files | grep -v dbgsym | tr '_' ' ' | awk '{ print $$1,"(=",$$2 ")" }' | paste -sd ',' - | sed -e 's/,/, /g'`"
+ dh_gencontrol -p dpdk -- -V"librte:Recommends=`grep -E 'librte-(pmd|mempool).*' ./debian/files | grep -v dbgsym | tr '_' ' ' | awk '{ print $$1,"(=",$$2 ")" }' | paste -sd ',' - | sed -e 's/,/, /g'`"
+ifneq (,$(findstring kernel_modules,$(DEB_BUILD_OPTIONS)))
+ dh_gencontrol -p dpdk-modules-$(KVERS) -- \
+ -v`cat debian/VERSION` \
+ -V'built:using:kernel=$(call get_built_using,linux-headers-$(KVERS))'
+endif
+ifneq (,$(findstring dbgsym_meta,$(DEB_BUILD_OPTIONS)))
+ ./debian/dh-dbgsym-metapkg libdpdk$(DPDK_ABI)-dbgsym
+endif
+
+# dbgsym_meta can be passed via DEB_BUILD_OPTIONS to enable building the
+# optional dbgsym meta package libdpdk<ABI>-dbgsym.
+# This is not built by default as it would go in main but depend on
+# packages in the debian-debug archive.
+# Debian Developers and FTP masters strongly discourage this.
+# We provide this optional flag as a convenience for rebuilders.
+ifneq (,$(findstring dbgsym_meta,$(DEB_BUILD_OPTIONS)))
+override_dh_builddeb:
+ dh_builddeb
+ dh_builddeb -plibdpdk$(DPDK_ABI)-dbgsym
+endif
+
+override_dh_auto_clean:
+ rm -rf debian/build debian/tmp debian/dpdk-modules-* \
+ debian/control.modules debian/VERSION
+ sed -i '/Package: dpdk-modules-/,/`tail -n1 debian/control.modules.in`/d' debian/control
+ test -L config/defconfig_$(DPDK_CONFIG) && rm -f config/defconfig_$(DPDK_CONFIG) || true
+ rm -f debian/dpdk-igb-uio-dkms.dkms debian/dpdk-rte-kni-dkms.dkms
+ rm -f debian/dpdk-dev.preinst
+
+override_dh_auto_configure:
+ # Add support for a custom defconfig file in the debian directory.
+ifneq (,$(filter dpdk_config=%,$(DEB_BUILD_OPTIONS)))
+ test -e config/defconfig_$(DPDK_CONFIG) || ln -fs ../debian/defconfig_$(DPDK_CONFIG) config/defconfig_$(DPDK_CONFIG)
+endif
+ # report dpkg-buildflags status to build log
+ dpkg-buildflags --status
+ echo EXTRA_CFLAGS $$EXTRA_CFLAGS
+ echo EXTRA_LDFLAGS: $$EXTRA_LDFLAGS
+ $(MAKE) V=$(DH_VERBOSE) O=$(DPDK_STATIC_DIR) T=$(DPDK_CONFIG) config
+ifeq (,$(filter dpdk_config=%,$(DEB_BUILD_OPTIONS)))
+ sed -ri -e 's,(RTE_MACHINE=).*,\1$(RTE_MACHINE),' \
+ -e 's,(RTE_NEXT_ABI=).*,\1n,' \
+ -e 's,(CONFIG_RTE_EAL_IGB_UIO=).*,\1$(DPDK_CONFIG_BUILD_KMOD),' \
+ -e 's,(CONFIG_RTE_KNI_KMOD=).*,\1$(DPDK_CONFIG_BUILD_KMOD),' \
+ -e 's,(LIBRTE_PMD_PCAP=).*,\1y,' \
+ -e 's,(LIBRTE_PMD_XENVIRT=).*,\1y,' \
+ -e 's,(CONFIG_RTE_EAL_PMD_PATH=).*,\1"/usr/lib/$(DEB_HOST_MULTIARCH)/dpdk-pmds/",' \
+ $(DPDK_STATIC_DIR)/.config
+ # xen not available on ppc64el
+ifneq (,$(filter $(DEB_HOST_ARCH), ppc64el))
+ sed -ri -e 's,(LIBRTE_PMD_XENVIRT=).*,\1n,' $(DPDK_STATIC_DIR)/.config
+endif
+endif
+ dh_auto_configure
+
+override_dh_auto_build-indep:
+ifeq (y,$(BUILD_DOCS))
+ $(MAKE) V=$(DH_VERBOSE) O=$(DPDK_STATIC_DIR) doc-api-html doc-guides-html
+endif
+
+override_dh_auto_install-indep:
+ # Package: dpdk-doc
+ # All files based on the install-doc rule (includes examples)
+ifeq (y,$(BUILD_DOCS))
+ $(MAKE) V=$(DH_VERBOSE) O=$(DPDK_STATIC_DIR) prefix=/usr \
+ DESTDIR=debian/dpdk-doc install-doc
+endif
+
+override_dh_auto_build-arch:
+ifeq (y,$(BUILD_STATIC_LIB))
+ $(MAKE) V=$(DH_VERBOSE) O=$(DPDK_STATIC_DIR) RTE_KERNELDIR=$(KSRC) build
+endif
+ # Unfortunately the decision about having static or shared libraries is
+ # made for the whole build, which then produces only .a or .so files
+ # (but not both).
+ # And the target layout for target selection has no field for the
+ # type of library.
+ # Right now I hack this by doing a second build which only differs in
+ # the selection of shared libs.
+ # Shared libs should be default, so the previous static build is only
+ # used to get static libraries.
+ cp -a $(DPDK_STATIC_DIR) $(DPDK_SHARED_DIR)
+ sed -ri 's,(RTE_BUILD_SHARED_LIB=).*,\1y,' \
+ $(DPDK_SHARED_DIR)/.config
+ $(MAKE) V=$(DH_VERBOSE) O=$(DPDK_SHARED_DIR) RTE_KERNELDIR=$(KSRC) build
+ifeq (y,$(BUILD_DOCS))
+ # need to be around for dh_installman to be picked up
+ $(MAKE) V=$(DH_VERBOSE) O=$(DPDK_SHARED_DIR) RTE_KERNELDIR=$(KSRC) doc-guides-man
+endif
+
+override_dh_auto_install-arch: LIBDIR=/usr/lib/$(DEB_HOST_MULTIARCH)
+override_dh_auto_install-arch:
+ # Package: dpdk (runtime)
+ifeq (y,$(BUILD_STATIC_LIB))
+ $(MAKE) V=$(DH_VERBOSE) O=$(DPDK_STATIC_DIR) prefix=/usr libdir=$(LIBDIR) \
+ DESTDIR=debian/dpdk install-runtime
+endif
+ $(MAKE) V=$(DH_VERBOSE) O=$(DPDK_SHARED_DIR) prefix=/usr libdir=$(LIBDIR) \
+ DESTDIR=debian/dpdk install-runtime
+ mkdir -p debian/dpdk/etc/dpdk
+ cp debian/dpdk.interfaces debian/dpdk/etc/dpdk/interfaces
+ rm debian/dpdk/usr/sbin/dpdk-devbind
+ mkdir -p debian/dpdk/sbin
+ ln -s /usr/share/dpdk/tools/dpdk-devbind.py \
+ debian/dpdk/sbin/dpdk-devbind
+ # Package: dpdk-dev (build environment)
+ # workaround to fix symbolic link creation
+ mkdir -p debian/dpdk-dev/$(LIBDIR)
+ $(MAKE) V=$(DH_VERBOSE) O=$(DPDK_SHARED_DIR) prefix=/usr libdir=$(LIBDIR) \
+ DESTDIR=debian/dpdk-dev install-sdk
+ # remove workaround
+ rm -fr debian/dpdk-dev/usr/lib
+ cp $(DPDK_SHARED_DIR)/.config debian/dpdk-dev/usr/share/dpdk/config
+ sed -e 's/SDK_TARGET/$(RTE_TARGET)/' debian/dpdk-sdk-env.sh.in > \
+ debian/dpdk-dev/usr/share/dpdk/dpdk-sdk-env.sh
+ # include the bundled autotest suite to be usable from the dpdk-dev package
+ mkdir -p debian/dpdk-dev/usr/share/dpdk/test
+ cp -a app/test/autotest* debian/dpdk-dev/usr/share/dpdk/test
+ cp $(DPDK_SHARED_DIR)/app/test debian/dpdk-dev/usr/share/dpdk/test/
+ # since we move libs to multiarch dirs update the non aware symlink
+ rm debian/dpdk-dev/usr/share/dpdk/$(RTE_TARGET)/lib
+ ln -rs debian/dpdk-dev/$(LIBDIR)/ \
+ debian/dpdk-dev/usr/share/dpdk/$(RTE_TARGET)/lib
+ # Package: libdpdk-dev (bare headers, static devel libs and linker
+ # script)
+ mkdir -p debian/libdpdk-dev/$(LIBDIR)
+ # linker script
+ mv debian/dpdk/$(LIBDIR)/libdpdk.so debian/libdpdk-dev/$(LIBDIR)/
+ # includes
+ # Some headers have architecture-specific content, but the upstream build
+ # system installs them in the same directory, breaking multiarch.
+ # Move them in /usr/include/<arch>/dpdk instead.
+ mkdir -p debian/libdpdk-dev/usr/include/$(DEB_HOST_MULTIARCH)/dpdk
+ # Before moving the files, remove the symlink in usr/share/dpdk and copy them over,
+ # as the SDK subdir is architecture specific and requires the arch-specific headers
+ # in the top level
+ rm -f debian/dpdk-dev/usr/share/dpdk/$(RTE_TARGET)/include
+ mkdir -p debian/dpdk-dev/usr/share/dpdk/$(RTE_TARGET)/include
+ cp -r debian/dpdk-dev/usr/include/dpdk/* debian/dpdk-dev/usr/share/dpdk/$(RTE_TARGET)/include
+ # genereate the preinst to deal with the symlink -> directory transition smoothly
+ sed "s/@@RTE_TARGET@@/$(RTE_TARGET)/g" debian/dpdk-dev.preinst.in > debian/dpdk-dev.preinst
+ mv $(addprefix debian/dpdk-dev/usr/include/dpdk/,$(notdir $(wildcard lib/librte_eal/common/include/arch/$(INCLUDE_ARCH)/*.h))) \
+ debian/libdpdk-dev/usr/include/$(DEB_HOST_MULTIARCH)/dpdk/
+ mv debian/dpdk-dev/usr/include/dpdk/rte_config.h \
+ debian/libdpdk-dev/usr/include/$(DEB_HOST_MULTIARCH)/dpdk/
+ mv debian/dpdk-dev/usr/include/dpdk debian/libdpdk-dev/usr/include/
+ rmdir debian/dpdk-dev/usr/include
+ # backward compatibility: to ease things for the majority of users,
+ # which are on x86_64, symlink the x86 headers into the global
+ # directory.
+ifeq (x86_64-linux-gnu,$(DEB_HOST_MULTIARCH))
+ ln -rs debian/libdpdk-dev/usr/include/$(DEB_HOST_MULTIARCH)/dpdk/*.h \
+ debian/libdpdk-dev/usr/include/dpdk
+endif
+ # have the DKMS build include the correct per-arch directory
+ sed "s/@@DEB_HOST_MULTIARCH@@/$(DEB_HOST_MULTIARCH)/g" debian/dpdk-igb-uio-dkms.dkms.in > debian/dpdk-igb-uio-dkms.dkms
+ sed "s/@@DEB_HOST_MULTIARCH@@/$(DEB_HOST_MULTIARCH)/g" debian/dpdk-rte-kni-dkms.dkms.in > debian/dpdk-rte-kni-dkms.dkms
+ # all static libs are in the dev package
+ifeq (y,$(BUILD_STATIC_LIB))
+ mv debian/dpdk/$(LIBDIR)/lib*.a debian/libdpdk-dev/$(LIBDIR)/
+endif
+ # symlinks to last .so's are in the non versioned libdpdk-dev as well
+ # this allows multiple libdpdk-<NAME><VER> at different VER concurrently
+ # libdpdk-dev depends on all sublibs so symlinks are never broken
+ mv debian/dpdk/$(LIBDIR)/*.so debian/libdpdk-dev/$(LIBDIR)/
+ # Package(s): libdpdk-<NAME><VER> (bare runtime libs)
+ for lib in $$(ls -1 debian/dpdk/$(LIBDIR)/*.so.*); do \
+ BN=$$(basename $${lib}); \
+ VER=$$(echo $${BN} | sed -e 's/^.*\.so\.//'); \
+ LN=$$(echo $${BN} | sed -e 's/\.so\.[0-9]*$$//' | tr '_' '-'); \
+ if echo $${LN} | grep -q ".*[0-9]$$"; then \
+ PKG=$${LN}-$${VER}; \
+ else \
+ PKG=$${LN}$${VER}; \
+ fi; \
+ LIBF="$$(basename $${lib})"; \
+ LIBD="debian/$${PKG}/$(LIBDIR)"; \
+ echo "moving $${lib} for library $${PKG}"; \
+ mkdir -p $${LIBD}; \
+ mv $${lib} $${LIBD}; \
+ if [ "$${LIBF#librte_pmd_}x" != "$${LIBF}x" ]; then \
+ mkdir -p $${LIBD}/dpdk-pmds; \
+ echo "PMD: linking $${LIBF} into RTE_EAL_PMD_PATH at $${LIBD}/dpdk-pmds/"; \
+ ln -s --relative --target-directory=$${LIBD}/dpdk-pmds/ $${LIBD}/$${LIBF}; \
+ fi; \
+ if [ "$${LIBF#librte_mempool_}x" != "$${LIBF}x" ]; then \
+ mkdir -p $${LIBD}/dpdk-pmds; \
+ echo "MEMPOOL: linking $${LIBF} into RTE_EAL_PMD_PATH at $${LIBD}/dpdk-pmds/"; \
+ ln -s --relative --target-directory=$${LIBD}/dpdk-pmds/ $${LIBD}/$${LIBF}; \
+ fi; \
+ if [ "$${LIBF#librte_eal}x" != "$${LIBF}x" ]; then \
+ mkdir -p $${LIBD}/dpdk-pmds; \
+ fi; \
+ done
+ # pkg-config
+ mkdir -p debian/libdpdk-dev/$(LIBDIR)/pkgconfig
+ LIBS=$$(sed -e 's/GROUP ( \(.*\) )/\1/' -e 's/lib/-l/g' -e 's/\.so//g' \
+ $(CURDIR)/debian/libdpdk-dev/$(LIBDIR)/libdpdk.so); \
+ sed -e "s/@DPDK_LIBS@/$${LIBS}/" -e "s/@VERSION@/$(DEB_VERSION_UPSTREAM)/" \
+ -e "s|@DEB_HOST_MULTIARCH@|$(DEB_HOST_MULTIARCH)|g" \
+ debian/libdpdk.pc.in > debian/libdpdk-dev/$(LIBDIR)/pkgconfig/libdpdk.pc
+ # Package: dpdk-igb-uio-dkms
+ mkdir -p debian/dpdk-igb-uio-dkms/usr/src/dpdk-igb-uio-$(DEB_VERSION_UPSTREAM)
+ cp lib/librte_eal/linuxapp/igb_uio/* \
+ debian/dpdk-igb-uio-dkms/usr/src/dpdk-igb-uio-$(DEB_VERSION_UPSTREAM)
+ # Package: dpdk-rte-kni-dkms
+ mkdir -p debian/dpdk-rte-kni-dkms/usr/src/dpdk-rte-kni-$(DEB_VERSION_UPSTREAM)
+ cp -a lib/librte_eal/linuxapp/kni/* \
+ debian/dpdk-rte-kni-dkms/usr/src/dpdk-rte-kni-$(DEB_VERSION_UPSTREAM)
+ifneq (,$(KVERS))
+ # Package: dpdk-modules-<kernel version>
+ $(MAKE) V=$(DH_VERBOSE) O=$(DPDK_SHARED_DIR) \
+ kerneldir=/lib/modules/$(KVERS)/extra/dpdk \
+ DESTDIR=debian/dpdk-modules-$(KVERS) install-kmod
+endif
+
+override_dh_dkms:
+ dh_dkms -V $(DEB_VERSION_UPSTREAM)
+
+override_dh_installinit:
+ dh_installinit --no-start --no-restart-on-upgrade
+
+override_dh_systemd_start:
+ dh_systemd_start --no-start --no-restart-on-upgrade
+
+override_dh_auto_test:
+
diff --git a/debian/source/format b/debian/source/format
new file mode 100644
index 00000000..163aaf8d
--- /dev/null
+++ b/debian/source/format
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/debian/source/options b/debian/source/options
new file mode 100644
index 00000000..23fcc113
--- /dev/null
+++ b/debian/source/options
@@ -0,0 +1 @@
+extend-diff-ignore = '(^|/)(\.gitreview|\.git|maven_env.txt)$'
diff --git a/debian/tests/check-dpdk-supported-arch.sh b/debian/tests/check-dpdk-supported-arch.sh
new file mode 100644
index 00000000..1105dc2e
--- /dev/null
+++ b/debian/tests/check-dpdk-supported-arch.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+arch=$(dpkg --print-architecture)
+case $arch in
+ amd64|arm64|i386|ppc64el)
+ echo "Architecture ${arch} supported, go on with test"
+ ;;
+ *)
+ echo "Architecture ${arch} not supported, SKIP test"
+ exit 0
+ ;;
+esac
diff --git a/debian/tests/control b/debian/tests/control
new file mode 100644
index 00000000..ea380337
--- /dev/null
+++ b/debian/tests/control
@@ -0,0 +1,17 @@
+Tests: test-initscripts
+Restrictions: allow-stderr, isolation-machine, needs-root
+Depends: dpdk [amd64 arm64 i386 ppc64el], gawk, mount, systemd, sysvinit-utils
+
+Tests: test-linkage
+Restrictions: allow-stderr
+Depends: libdpdk-dev [amd64 arm64 i386 ppc64el], libc6, libc6-dev, gcc,
+ grep, libpcap-dev, libxenstore3.0 [amd64 arm64 i386], pax-utils
+
+Tests: test-dkms
+Restrictions: allow-stderr, isolation-machine, needs-root
+Depends: kmod, dpdk-igb-uio-dkms [amd64 arm64 i386 ppc64el],
+ dpdk-rte-kni-dkms [amd64 arm64 i386 ppc64el]
+
+Tests: test-autotest
+Restrictions: allow-stderr, isolation-machine, needs-root
+Depends: dpdk-dev [amd64 arm64 i386 ppc64el], python, python-pexpect
diff --git a/debian/tests/test-autotest b/debian/tests/test-autotest
new file mode 100644
index 00000000..0ab308fd
--- /dev/null
+++ b/debian/tests/test-autotest
@@ -0,0 +1,62 @@
+#!/bin/bash
+set -u
+
+basedir=$(dirname "$0")
+. "${basedir}"/check-dpdk-supported-arch.sh
+
+# since these tests really execute dpdk code they have to check for the
+# required minimum cpu features
+ARCH=$(dpkg --print-architecture)
+echo "Check required features on arch: ${ARCH}"
+case "${ARCH}" in
+ amd64)
+ if ! grep -q '^flags.*sse3' /proc/cpuinfo; then
+ echo "Missing sse3 on ${ARCH} - not supported, SKIP test"
+ exit 0
+ fi
+ ;;
+ *)
+ echo "DPDK autotest not supported on ${ARCH}, SKIP test"
+ exit 0
+ ;;
+esac
+echo "no known missing feature on ${ARCH}, continue test"
+
+echo "Get required 1G huge pages"
+echo 512 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
+sleep 5s
+realhp=$(cat /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages)
+if [[ "$realhp" != "512" ]]; then
+ echo "Unable to allocate the huge pages required for the test, SKIP test"
+ exit 0
+fi
+
+# fetch build config
+. /usr/share/dpdk/dpdk-sdk-env.sh
+
+# Reasons for not being an dh_autotest
+# - needs root and hugepages
+# - build environment capabilities too unpredictable
+# - certain workarounds needed to get running, needing root for some which is
+# not available in the build environment
+
+# blacklist reasons:
+# known upstream: http://www.dpdk.org/ml/archives/dev/2016-May/038849.html
+# - KNI: we deliver via dkms but test doesn't match
+# - power_acpi_cpufreq: in many environments blocked by other cpufreq
+# - power_kvm_vm_autotest: no avail in all environments, only for virt power management e.g. /dev/virtio-ports/virtio.serial.port.poweragent.0
+# - IVSHMEM fails in virtual environment
+# - eal_flags needs at least 8 cpus for lcores test not to fail
+# - pci doesn't initialize in all virt env causing command not found issues
+# - rather slow performance tests not suited for regular build associated tests: ring_perf,mempool_perf,memcpy_perf,hash_perf,timer_perf
+
+python "${RTE_SDK}/test/autotest.py" \
+ "${RTE_SDK}/test/test" \
+ "${RTE_TARGET}" \
+ "-KNI,power_acpi_cpufreq,power_kvm_vm,IVSHMEM,eal_flags,pci,ring_perf,mempool_perf,memcpy_perf,hash_perf,timer_perf" \
+
+# Pass/Fail
+# For now the autotest is too unreliable, so we run it to get some logs in
+# different environments, but never (want to) fail until it is stable.
+
+echo "OK"
diff --git a/debian/tests/test-dkms b/debian/tests/test-dkms
new file mode 100644
index 00000000..5db36af9
--- /dev/null
+++ b/debian/tests/test-dkms
@@ -0,0 +1,22 @@
+#!/bin/bash
+set -eu
+
+basedir=$(dirname "$0")
+. "${basedir}"/check-dpdk-supported-arch.sh
+
+if [ -d /var/lib/dkms ]; then
+ (cd /var/lib/dkms; find -name "make.log" -print0 | xargs -0 tar c) > "$ADT_ARTIFACTS/dkms-make-logs.tar"
+fi
+
+# check that the dkms build fine (on dep install), load and unload
+printf "\n\nChecking igb_uio\n"
+modinfo igb_uio
+modprobe igb_uio
+rmmod igb_uio
+echo "OK"
+
+printf "\n\nChecking igb_uio\n"
+modinfo rte_kni
+modprobe rte_kni
+rmmod rte_kni
+echo "OK"
diff --git a/debian/tests/test-initscripts b/debian/tests/test-initscripts
new file mode 100644
index 00000000..1643a2ea
--- /dev/null
+++ b/debian/tests/test-initscripts
@@ -0,0 +1,149 @@
+#!/bin/sh
+set -e
+
+basedir=$(dirname "$0")
+. "${basedir}"/check-dpdk-supported-arch.sh
+
+# Overall that could require up to 1.2G for hugepages in the test environment
+EXPECT2MHP=10
+# Some page sizes like e.g. 1G might not be available in all test environments
+# The test still configures 1 page of 1G size.
+# One of two things will happen, depending on the test environment:
+# - has 1G huge page size => they will tried to be allocated (usually env is
+# too small, but we want to see it fail gracefully for that)
+# We will not check for the 1G alloc, as we know it often fails in small adt's
+# - has no 1G huge page size (HW feature) => we check if it fails gracefully
+EXPECT1GHP=1
+EXPECT16MHP=2
+
+DPDK_CONF="/etc/dpdk/dpdk.conf"
+DPDK_INTERF="/etc/dpdk/interfaces"
+
+checkhp() {
+ MMDIR="/sys/kernel/mm/hugepages/${1}"
+ EXPECTHP="${2}"
+ if [ -d "$MMDIR" -a -r "$MMDIR/nr_hugepages" ]; then
+ hpcount=$(cat "$MMDIR/nr_hugepages")
+ if [ "${hpcount}" -ne "${EXPECTHP}" ]; then
+ echo "Hugepages (${hpcount}) not as expected (${EXPECTHP})"
+ exit 1
+ else
+ echo "Hugepages ok (${hpcount})"
+ fi
+ fi
+}
+
+checkstatus() {
+ MARK=${1}
+ EXPMPCOUNT=${2}
+ PRE=${3}
+ POST=${4}
+ EXPECTEDSTATUS=${5}
+ echo "Status after ${MARK}"
+ echo "Status of the Service"
+ ${PRE} status "${POST}" || true
+
+ GOTSTATUS=$(${PRE} status "${POST}" | awk '/^ *Active: / { print $2 }')
+ if [ "${GOTSTATUS}" != "${EXPECTEDSTATUS}" ]; then
+ echo "Service status (${GOTSTATUS}) not as expected (${EXPECTEDSTATUS})"
+ exit 1
+ else
+ echo "Service status (${GOTSTATUS}) as expected"
+ fi
+
+ echo "Status of hugetlbfs mount points"
+ # this section is ok to create bad RCs when no mounts are available
+ set +e
+ grep hugetlbfs < /proc/mounts
+ htlbfscount=$(grep -c hugetlbfs < /proc/mounts)
+ set -e
+
+ # we have to reduce the expected mountpoint count in case some sizes are
+ # not supported by the current kernel/environment
+ if [ ${EXPMPCOUNT} -gt 0 ]; then
+ if [ ! -d /sys/kernel/mm/hugepages/hugepages-2048kB ]; then
+ EXPMPCOUNT=$((EXPMPCOUNT-1))
+ fi
+ if [ ! -d /sys/kernel/mm/hugepages/hugepages-16384kB ]; then
+ EXPMPCOUNT=$((EXPMPCOUNT-1))
+ fi
+ if [ ! -d /sys/kernel/mm/hugepages/hugepages-1048576kB ]; then
+ EXPMPCOUNT=$((EXPMPCOUNT-1))
+ fi
+ fi
+
+ if [ "${htlbfscount}" -eq "${EXPMPCOUNT}" ]; then
+ echo "MP Count (${htlbfscount}) as expected (${EXPMPCOUNT})"
+ else
+ echo "MP Count (${htlbfscount}) not as expected (${EXPMPCOUNT})"
+ exit 1
+ fi
+
+ # check if setting HP worked
+ if [ "${EXPMPCOUNT}" -ne "0" ]; then
+ checkhp "hugepages-2048kB" "${EXPECT2MHP}"
+ checkhp "hugepages-16384kB" "${EXPECT16MHP}"
+ # We do not check 1G/16M alloc, as it is known to be often not available
+ fi
+}
+
+resetservice() {
+ # help a bit with memory fragmentation regarding huge page allocation
+ sync
+ echo 3 > /proc/sys/vm/drop_caches
+
+ # stopping and resetting Service
+ systemctl stop dpdk.service || /bin/true
+ systemctl reset-failed dpdk.service || /bin/true
+
+ echo "Unmounting all potential hugetlbfs mounts"
+ awk '/hugetlbfs/ {print $2}' /proc/mounts | while read hugetlbmount; do
+ umount -v "$hugetlbmount"
+ done
+}
+
+checkinitstyle() {
+ # We want to verify that
+ # - initially our environment has no hugetlbfs mount
+ # - a system without hugetlbfs mount gets it mounted
+ # - a restart of the service does neither drop nor duplicate the mount
+ PRE=${1}
+ POST=${2}
+ TYPE=${3}
+ printf "\n\n### Checking Type %s ###\n" "${TYPE}"
+ resetservice
+ checkstatus "${TYPE}-BEGIN" 0 "${PRE}" "${POST}" "inactive"
+ echo "### Starting Service ###"
+ ${PRE} start "${POST}"
+ checkstatus "${TYPE}-START" 3 "${PRE}" "${POST}" "active"
+ echo "### Restarting Service ###"
+ ${PRE} restart "${POST}"
+ checkstatus "${TYPE}-RESTART" 3 "${PRE}" "${POST}" "active"
+}
+
+echo "NR_2M_PAGES=$EXPECT2MHP" >> ${DPDK_CONF}
+echo "NR_1G_PAGES=$EXPECT1GHP" >> ${DPDK_CONF}
+echo "NR_16M_PAGES=$EXPECT16MHP" >> ${DPDK_CONF}
+
+# We can't rely on any real device for DPDK tests in adt-* environments. But
+# we can expect all kind of broken configuration not to break it (would be
+# detected via set -e).
+# So add all kind of known-to-be-broken definitions and expect it not to fail.
+cat <<EOF > ${DPDK_INTERF}
+# wrong bus
+pTi 0000:04:00.0 uio-pci-generic
+# not enough parms
+0000:04:00.0 uio-pci-generic
+# empty line
+
+# non existing device
+pci 1234:56:78.9 uio-pci-generic
+EOF
+
+# some had issues in the past caused by different init systems, so we test all
+# Direct Calls
+checkinitstyle "/etc/init.d/dpdk" "" "Direct"
+# System V style init
+checkinitstyle "service dpdk" "" "SysV"
+# SystemD style init
+checkinitstyle "systemctl" "dpdk.service" "SystemD"
diff --git a/debian/tests/test-linkage b/debian/tests/test-linkage
new file mode 100644
index 00000000..31e409eb
--- /dev/null
+++ b/debian/tests/test-linkage
@@ -0,0 +1,49 @@
+#!/bin/bash
+set -eu
+
+basedir=$(dirname "$0")
+. "${basedir}"/check-dpdk-supported-arch.sh
+
+cat > testlinkage.c << EOF
+#include <stdio.h>
+#include "dpdk/rte_common.h"
+
+int main()
+{
+ printf("Hello rte_exit %p\n", rte_exit);
+ return 0;
+}
+EOF
+
+# -ldpdk actually refers to a linker script now, not a real .so
+# with broken linkage this will fail with undefined symbols
+printf "\n\nChecking compile with link against DPDK\n"
+gcc -v testlinkage.c -o testlinkage.bin -Wall -Werror -ldpdk
+echo "OK"
+
+printf "\n\nLinkage info\n"
+lddtree testlinkage.bin
+
+printf "\n\nChecking for expected internal libraries\n"
+# a few of the sublibs that it should use
+lddtree testlinkage.bin | grep '^ librte_eal.so'
+echo "OK"
+
+printf "\n\nChecking for expected secondary library dependencies\n"
+lddtree testlinkage.bin | grep '^ libpthread.so'
+echo "OK"
+
+printf "\n\nChecking for expected feature dependent library dependencies\n"
+# features only used by the lib that we enabled
+ldd /usr/lib/*/librte_pmd_pcap.so | grep libpcap
+echo "OK"
+
+printf "\n\nChecking test execution\n"
+# It doesn't do much, but it should work - so calling it is a minor extra test.
+# It is known to fail without SSE3 in e.g. some adt environments, in that
+# case check at least that we get the correct error message (this will trigger
+# a test fail if it neither finds the success nor the expected error message)
+(./testlinkage.bin 2>&1 || /bin/true ) | \
+grep -E 'ERROR: This system does not support "SSSE3".|Hello rte_exit 0x'
+
+echo "OK"
diff --git a/debian/watch b/debian/watch
new file mode 100644
index 00000000..76fd1371
--- /dev/null
+++ b/debian/watch
@@ -0,0 +1,2 @@
+version=3
+http://fast.dpdk.org/rel/dpdk-(16.11.+)\.(?:zip|tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz)))