Merge Ubuntu DPDK packaging as of 15th June 2016 79/1579/1
authorChristian Ehrhardt <christian.ehrhardt@canonical.com>
Wed, 15 Jun 2016 18:29:06 +0000 (20:29 +0200)
committerChristian Ehrhardt <christian.ehrhardt@canonical.com>
Wed, 15 Jun 2016 18:37:12 +0000 (20:37 +0200)
As discussed this shall be our initial baseline.
If history is needed for any sort of debugging or analysis it can be
found at https://code.launchpad.net/~ubuntu-server/dpdk/+git/dpdk

Change-Id: Ie95c7effbbea34d723df14f6451c1f782000cbc1
Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
82 files changed:
debian/changelog [new file with mode: 0644]
debian/compat [new file with mode: 0644]
debian/control [new file with mode: 0644]
debian/copyright [new file with mode: 0644]
debian/dpdk-dev.dirs [new file with mode: 0644]
debian/dpdk-doc.README.Debian [new file with mode: 0644]
debian/dpdk-doc.dirs [new file with mode: 0644]
debian/dpdk-igb-uio-dkms.dkms [new file with mode: 0644]
debian/dpdk-init [new file with mode: 0755]
debian/dpdk-rte-kni-dkms.dkms [new file with mode: 0644]
debian/dpdk-sdk-env.sh.in [new file with mode: 0755]
debian/dpdk.conf [new file with mode: 0644]
debian/dpdk.dirs [new file with mode: 0644]
debian/dpdk.init [new file with mode: 0644]
debian/dpdk.install [new file with mode: 0644]
debian/dpdk.interfaces [new file with mode: 0644]
debian/dpdk.service [new file with mode: 0644]
debian/libdpdk-dev.dirs [new file with mode: 0644]
debian/libdpdk-libethdev3.symbols [new file with mode: 0644]
debian/libdpdk-librte-acl2.symbols [new file with mode: 0644]
debian/libdpdk-librte-cfgfile2.symbols [new file with mode: 0644]
debian/libdpdk-librte-cmdline2.symbols [new file with mode: 0644]
debian/libdpdk-librte-cryptodev1.symbols [new file with mode: 0644]
debian/libdpdk-librte-distributor1.symbols [new file with mode: 0644]
debian/libdpdk-librte-eal2.symbols [new file with mode: 0644]
debian/libdpdk-librte-hash2.symbols [new file with mode: 0644]
debian/libdpdk-librte-ip-frag1.symbols [new file with mode: 0644]
debian/libdpdk-librte-jobstats1.symbols [new file with mode: 0644]
debian/libdpdk-librte-kni2.symbols [new file with mode: 0644]
debian/libdpdk-librte-kvargs1.symbols [new file with mode: 0644]
debian/libdpdk-librte-lpm2.symbols [new file with mode: 0644]
debian/libdpdk-librte-mbuf2.symbols [new file with mode: 0644]
debian/libdpdk-librte-mempool1.symbols [new file with mode: 0644]
debian/libdpdk-librte-meter1.symbols [new file with mode: 0644]
debian/libdpdk-librte-pipeline3.symbols [new file with mode: 0644]
debian/libdpdk-librte-pmd-af-packet1.symbols [new file with mode: 0644]
debian/libdpdk-librte-pmd-bond1.symbols [new file with mode: 0644]
debian/libdpdk-librte-pmd-cxgbe1.symbols [new file with mode: 0644]
debian/libdpdk-librte-pmd-e10001.symbols [new file with mode: 0644]
debian/libdpdk-librte-pmd-ena1.symbols [new file with mode: 0644]
debian/libdpdk-librte-pmd-enic1.symbols [new file with mode: 0644]
debian/libdpdk-librte-pmd-fm10k1.symbols [new file with mode: 0644]
debian/libdpdk-librte-pmd-i40e1.symbols [new file with mode: 0644]
debian/libdpdk-librte-pmd-ixgbe1.symbols [new file with mode: 0644]
debian/libdpdk-librte-pmd-null-crypto1.symbols [new file with mode: 0644]
debian/libdpdk-librte-pmd-null1.symbols [new file with mode: 0644]
debian/libdpdk-librte-pmd-pcap1.symbols [new file with mode: 0644]
debian/libdpdk-librte-pmd-ring2.symbols [new file with mode: 0644]
debian/libdpdk-librte-pmd-vhost1.symbols [new file with mode: 0644]
debian/libdpdk-librte-pmd-virtio1.symbols [new file with mode: 0644]
debian/libdpdk-librte-pmd-vmxnet3-uio1.symbols [new file with mode: 0644]
debian/libdpdk-librte-pmd-xenvirt1.symbols [new file with mode: 0644]
debian/libdpdk-librte-port2.symbols [new file with mode: 0644]
debian/libdpdk-librte-power1.symbols [new file with mode: 0644]
debian/libdpdk-librte-reorder1.symbols [new file with mode: 0644]
debian/libdpdk-librte-ring1.symbols [new file with mode: 0644]
debian/libdpdk-librte-sched1.symbols [new file with mode: 0644]
debian/libdpdk-librte-table2.symbols [new file with mode: 0644]
debian/libdpdk-librte-timer1.symbols [new file with mode: 0644]
debian/libdpdk-librte-vhost2.symbols [new file with mode: 0644]
debian/libdpdk0.dirs [new file with mode: 0644]
debian/patches/series [new file with mode: 0644]
debian/patches/ubuntu-backport-33-vhost-user-add-error-handling-for-fd-1023.patch [new file with mode: 0644]
debian/patches/ubuntu-backport-38-dpdk-dev-Memory-leak-when-adding-removing-vhost_user-ports.patch [new file with mode: 0644]
debian/patches/ubuntu-backport-39-lpm-fix-freeing-in-compatibility-mode.patch [new file with mode: 0644]
debian/patches/ubuntu-backport-40-linking-fixes-stage-1-4.patch [new file with mode: 0644]
debian/patches/ubuntu-backport-40-linking-fixes-stage-2-4.patch [new file with mode: 0644]
debian/patches/ubuntu-backport-40-linking-fixes-stage-3-4.patch [new file with mode: 0644]
debian/patches/ubuntu-backport-40-linking-fixes-stage-4-4.patch [new file with mode: 0644]
debian/patches/ubuntu-backport-41-fix-install-tar-1.29.patch [new file with mode: 0644]
debian/patches/ubuntu-backport-42-increase-default-logging-level.patch [new file with mode: 0644]
debian/patches/ubuntu-backport-43-fix-level-type-retrieving.patch [new file with mode: 0644]
debian/patches/ubuntu-fix-vhost-user-socket-permission.patch [new file with mode: 0644]
debian/patches/ubuntu-fix-xenvirt-support-dynamic-page-size.patch [new file with mode: 0644]
debian/rules [new file with mode: 0755]
debian/source/format [new file with mode: 0644]
debian/tests/check-dpdk-supported-arch.sh [new file with mode: 0644]
debian/tests/control [new file with mode: 0644]
debian/tests/test-dkms [new file with mode: 0644]
debian/tests/test-initscripts [new file with mode: 0644]
debian/tests/test-linkage [new file with mode: 0644]
debian/watch [new file with mode: 0644]

diff --git a/debian/changelog b/debian/changelog
new file mode 100644 (file)
index 0000000..36a7642
--- /dev/null
@@ -0,0 +1,302 @@
+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
+      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-43-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
+  * 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 (file)
index 0000000..ec63514
--- /dev/null
@@ -0,0 +1 @@
+9
diff --git a/debian/control b/debian/control
new file mode 100644 (file)
index 0000000..9a93490
--- /dev/null
@@ -0,0 +1,686 @@
+Source: dpdk
+Priority: optional
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+Build-Depends: debhelper (>= 9),
+               dh-python,
+               dh-systemd (>= 1.5),
+               dkms,
+               doxygen,
+               graphviz,
+               inkscape,
+               libcap-dev,
+               libpcap-dev,
+               libxen-dev,
+               libxenstore3.0,
+               python,
+               python-sphinx,
+               texlive-fonts-recommended,
+               texlive-latex-extra
+Standards-Version: 3.9.6
+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
+Homepage: http://www.dpdk.org
+Depends: libdpdk-dev (= ${binary:Version}),
+         lsb-base (>= 3.2-14),
+         ${misc:Depends},
+         ${python:Depends},
+         ${shlibs:Depends}
+Suggests: linux-image-generic
+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
+Homepage: http://www.dpdk.org
+Depends: libdpdk-dev (= ${binary:Version}), ${misc: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
+Homepage: http://dpdk.org/doc/guides/index.html
+Depends: libjs-jquery, libjs-underscore, ${misc:Depends}
+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
+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
+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
+Multi-Arch: same
+Homepage: http://www.dpdk.org
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends},
+         libdpdk-libethdev3 (= ${binary:Version}),
+         libdpdk-librte-acl2 (= ${binary:Version}),
+         libdpdk-librte-cfgfile2 (= ${binary:Version}),
+         libdpdk-librte-cmdline2 (= ${binary:Version}),
+         libdpdk-librte-cryptodev1 (= ${binary:Version}),
+         libdpdk-librte-distributor1 (= ${binary:Version}),
+         libdpdk-librte-eal2 (= ${binary:Version}),
+         libdpdk-librte-hash2 (= ${binary:Version}),
+         libdpdk-librte-ip-frag1 (= ${binary:Version}),
+         libdpdk-librte-jobstats1 (= ${binary:Version}),
+         libdpdk-librte-kni2 (= ${binary:Version}) [amd64 arm64],
+         libdpdk-librte-kvargs1 (= ${binary:Version}),
+         libdpdk-librte-lpm2 (= ${binary:Version}),
+         libdpdk-librte-mbuf2 (= ${binary:Version}),
+         libdpdk-librte-mempool1 (= ${binary:Version}),
+         libdpdk-librte-meter1 (= ${binary:Version}),
+         libdpdk-librte-pipeline3 (= ${binary:Version}),
+         libdpdk-librte-pmd-af-packet1 (= ${binary:Version}),
+         libdpdk-librte-pmd-bond1 (= ${binary:Version}),
+         libdpdk-librte-pmd-cxgbe1 (= ${binary:Version}),
+         libdpdk-librte-pmd-e10001 (= ${binary:Version}),
+         libdpdk-librte-pmd-ena1 (= ${binary:Version}),
+         libdpdk-librte-pmd-enic1 (= ${binary:Version}),
+         libdpdk-librte-pmd-fm10k1 (= ${binary:Version}) [amd64 i386],
+         libdpdk-librte-pmd-i40e1 (= ${binary:Version}) [amd64 i386],
+         libdpdk-librte-pmd-ixgbe1 (= ${binary:Version}),
+         libdpdk-librte-pmd-null-crypto1 (= ${binary:Version}),
+         libdpdk-librte-pmd-null1 (= ${binary:Version}),
+         libdpdk-librte-pmd-pcap1 (= ${binary:Version}),
+         libdpdk-librte-pmd-ring2 (= ${binary:Version}),
+         libdpdk-librte-pmd-vhost1 (= ${binary:Version}),
+         libdpdk-librte-pmd-virtio1 (= ${binary:Version}),
+         libdpdk-librte-pmd-vmxnet3-uio1 (= ${binary:Version}),
+         libdpdk-librte-pmd-xenvirt1 (= ${binary:Version}),
+         libdpdk-librte-port2 (= ${binary:Version}),
+         libdpdk-librte-power1 (= ${binary:Version}),
+         libdpdk-librte-reorder1 (= ${binary:Version}),
+         libdpdk-librte-ring1 (= ${binary:Version}),
+         libdpdk-librte-sched1 (= ${binary:Version}),
+         libdpdk-librte-table2 (= ${binary:Version}),
+         libdpdk-librte-timer1 (= ${binary:Version}),
+         libdpdk-librte-vhost2 (= ${binary:Version})
+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: libdpdk-libethdev3
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-acl2
+Architecture: amd64 arm64 i386
+Section: libs
+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 (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: libdpdk-librte-cfgfile2
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-cmdline2
+Architecture: amd64 arm64 i386
+Section: libs
+Multi-Arch: same
+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: libdpdk-librte-cryptodev1
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-distributor1
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-eal2
+Architecture: amd64 arm64 i386
+Section: libs
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/api/rte__eal_8h.html
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}, libdpdk-librte-mempool1
+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: libdpdk-librte-hash2
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-ip-frag1
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-jobstats1
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-kni2
+Architecture: amd64 arm64
+Section: libs
+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: libdpdk-librte-kvargs1
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-lpm2
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-mbuf2
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-mempool1
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-meter1
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-pipeline3
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-pmd-af-packet1
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-pmd-bond1
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-pmd-cxgbe1
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-pmd-e10001
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-pmd-ena1
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-pmd-enic1
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-pmd-fm10k1
+Architecture: amd64 i386
+Section: libs
+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: libdpdk-librte-pmd-i40e1
+Architecture: amd64 i386
+Section: libs
+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: libdpdk-librte-pmd-ixgbe1
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-pmd-null-crypto1
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-pmd-null1
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-pmd-pcap1
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-pmd-ring2
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-pmd-vhost1
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-pmd-virtio1
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-pmd-vmxnet3-uio1
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-pmd-xenvirt1
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-port2
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-power1
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-reorder1
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-ring1
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-sched1
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-table2
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-timer1
+Architecture: amd64 arm64 i386
+Section: libs
+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: libdpdk-librte-vhost2
+Architecture: amd64 arm64 i386
+Section: libs
+Multi-Arch: same
+Homepage: http://dpdk.org/doc/api/rte__virtio__net_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
diff --git a/debian/copyright b/debian/copyright
new file mode 100644 (file)
index 0000000..1c6ee2c
--- /dev/null
@@ -0,0 +1,47 @@
+Format: http://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-2015 Intel Corporation.
+           2010-2013 Tilera Corporation.
+           2012      Mellanox.
+           2007      VMware, Inc.
+           2007      Nuova Systems, Inc.
+           2014      IBM Corporation.
+License: BSD+GPLv2+LGPLv2
+ On Debian systems, the complete text of the BSD License can be
+ found in "/usr/share/common-licenses/BSD".
+ .
+ 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.
+ .
+ This package 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/>
+ .
+ On Debian systems, the complete text of the GNU General
+ Public License version 2 can be found in "/usr/share/common-licenses/GPL-2".
+
+Files: debian/*
+Copyright: 2015, 2016 Canonical Ltd.
+License: GPL-3
+ 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 warranties of
+ MERCHANTABILITY, SATISFACTORY QUALITY, 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/>.
diff --git a/debian/dpdk-dev.dirs b/debian/dpdk-dev.dirs
new file mode 100644 (file)
index 0000000..bdac81a
--- /dev/null
@@ -0,0 +1 @@
+usr/share/dpdk
diff --git a/debian/dpdk-doc.README.Debian b/debian/dpdk-doc.README.Debian
new file mode 100644 (file)
index 0000000..669bf39
--- /dev/null
@@ -0,0 +1,52 @@
+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 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
+
+ -- Christian Ehrhardt <christian.ehrhardt@canonical.com>  Thu, 04 Feb 2016 09:16:11 +0100
diff --git a/debian/dpdk-doc.dirs b/debian/dpdk-doc.dirs
new file mode 100644 (file)
index 0000000..fcd9dfe
--- /dev/null
@@ -0,0 +1 @@
+usr/share/doc/dpdk
diff --git a/debian/dpdk-igb-uio-dkms.dkms b/debian/dpdk-igb-uio-dkms.dkms
new file mode 100644 (file)
index 0000000..10dfecc
--- /dev/null
@@ -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/dpdk -include /usr/include/dpdk/rte_config.h'"
+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 (executable)
index 0000000..86eda2c
--- /dev/null
@@ -0,0 +1,251 @@
+#!/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_nic_bind"
+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_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-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 b/debian/dpdk-rte-kni-dkms.dkms
new file mode 100644 (file)
index 0000000..efccf1f
--- /dev/null
@@ -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/dpdk -include /usr/include/dpdk/rte_config.h -I$source_tree/dpdk-rte-kni-#MODULE_VERSION#/ethtool/ixgbe -I$source_tree/dpdk-rte-kni-#MODULE_VERSION#/ethtool/igb'"
+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 (executable)
index 0000000..8cc3944
--- /dev/null
@@ -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 (file)
index 0000000..fb4572d
--- /dev/null
@@ -0,0 +1,54 @@
+#
+# The number of 2M hugepages to reserve on system boot
+#
+# Default is 0
+# To e.g. let it reserve 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 2x 1G Hugepages set:
+# NR_1G_PAGES=2
+
+#
+# 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.
+
+# 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.dirs b/debian/dpdk.dirs
new file mode 100644 (file)
index 0000000..29ca563
--- /dev/null
@@ -0,0 +1,5 @@
+etc/dpdk
+lib/dpdk
+sbin
+usr/bin
+usr/lib/dpdk
diff --git a/debian/dpdk.init b/debian/dpdk.init
new file mode 100644 (file)
index 0000000..01b4784
--- /dev/null
@@ -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)
+    ;;
+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 (file)
index 0000000..24c8d45
--- /dev/null
@@ -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 (file)
index 0000000..3442343
--- /dev/null
@@ -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 (file)
index 0000000..09ef8be
--- /dev/null
@@ -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/libdpdk-dev.dirs b/debian/libdpdk-dev.dirs
new file mode 100644 (file)
index 0000000..e43b95c
--- /dev/null
@@ -0,0 +1 @@
+usr/include
diff --git a/debian/libdpdk-libethdev3.symbols b/debian/libdpdk-libethdev3.symbols
new file mode 100644 (file)
index 0000000..4631372
--- /dev/null
@@ -0,0 +1,112 @@
+libethdev.so.3 libdpdk-libethdev3 #MINVER#
+ DPDK_16.04@DPDK_16.04 16.04
+ DPDK_2.2@DPDK_2.2 16.04
+ _rte_eth_dev_callback_process@DPDK_2.2 16.04
+ rte_eth_add_rx_callback@DPDK_2.2 16.04
+ rte_eth_add_tx_callback@DPDK_2.2 16.04
+ rte_eth_allmulticast_disable@DPDK_2.2 16.04
+ rte_eth_allmulticast_enable@DPDK_2.2 16.04
+ rte_eth_allmulticast_get@DPDK_2.2 16.04
+ rte_eth_copy_pci_info@DPDK_2.2 16.04
+ rte_eth_dev_allocate@DPDK_2.2 16.04
+ rte_eth_dev_allocated@DPDK_2.2 16.04
+ rte_eth_dev_attach@DPDK_2.2 16.04
+ rte_eth_dev_callback_register@DPDK_2.2 16.04
+ rte_eth_dev_callback_unregister@DPDK_2.2 16.04
+ rte_eth_dev_close@DPDK_2.2 16.04
+ rte_eth_dev_configure@DPDK_2.2 16.04
+ rte_eth_dev_count@DPDK_2.2 16.04
+ rte_eth_dev_default_mac_addr_set@DPDK_2.2 16.04
+ rte_eth_dev_detach@DPDK_2.2 16.04
+ rte_eth_dev_filter_ctrl@DPDK_2.2 16.04
+ rte_eth_dev_filter_supported@DPDK_2.2 16.04
+ rte_eth_dev_flow_ctrl_get@DPDK_2.2 16.04
+ rte_eth_dev_flow_ctrl_set@DPDK_2.2 16.04
+ rte_eth_dev_get_dcb_info@DPDK_2.2 16.04
+ rte_eth_dev_get_eeprom@DPDK_2.2 16.04
+ rte_eth_dev_get_eeprom_length@DPDK_2.2 16.04
+ rte_eth_dev_get_mtu@DPDK_2.2 16.04
+ rte_eth_dev_get_reg_info@DPDK_2.2 16.04
+ rte_eth_dev_get_reg_length@DPDK_2.2 16.04
+ rte_eth_dev_get_supported_ptypes@DPDK_16.04 16.04
+ rte_eth_dev_get_vlan_offload@DPDK_2.2 16.04
+ rte_eth_dev_info_get@DPDK_2.2 16.04
+ rte_eth_dev_is_valid_port@DPDK_2.2 16.04
+ rte_eth_dev_l2_tunnel_eth_type_conf@DPDK_16.04 16.04
+ rte_eth_dev_l2_tunnel_offload_set@DPDK_16.04 16.04
+ rte_eth_dev_mac_addr_add@DPDK_2.2 16.04
+ rte_eth_dev_mac_addr_remove@DPDK_2.2 16.04
+ rte_eth_dev_priority_flow_ctrl_set@DPDK_2.2 16.04
+ rte_eth_dev_release_port@DPDK_2.2 16.04
+ rte_eth_dev_rss_hash_conf_get@DPDK_2.2 16.04
+ rte_eth_dev_rss_hash_update@DPDK_2.2 16.04
+ rte_eth_dev_rss_reta_query@DPDK_2.2 16.04
+ rte_eth_dev_rss_reta_update@DPDK_2.2 16.04
+ rte_eth_dev_rx_intr_ctl@DPDK_2.2 16.04
+ rte_eth_dev_rx_intr_ctl_q@DPDK_2.2 16.04
+ rte_eth_dev_rx_intr_disable@DPDK_2.2 16.04
+ rte_eth_dev_rx_intr_enable@DPDK_2.2 16.04
+ rte_eth_dev_rx_queue_start@DPDK_2.2 16.04
+ rte_eth_dev_rx_queue_stop@DPDK_2.2 16.04
+ rte_eth_dev_set_eeprom@DPDK_2.2 16.04
+ rte_eth_dev_set_link_down@DPDK_2.2 16.04
+ rte_eth_dev_set_link_up@DPDK_2.2 16.04
+ rte_eth_dev_set_mc_addr_list@DPDK_2.2 16.04
+ rte_eth_dev_set_mtu@DPDK_2.2 16.04
+ rte_eth_dev_set_rx_queue_stats_mapping@DPDK_2.2 16.04
+ rte_eth_dev_set_tx_queue_stats_mapping@DPDK_2.2 16.04
+ rte_eth_dev_set_vf_rx@DPDK_2.2 16.04
+ rte_eth_dev_set_vf_rxmode@DPDK_2.2 16.04
+ rte_eth_dev_set_vf_tx@DPDK_2.2 16.04
+ rte_eth_dev_set_vf_vlan_filter@DPDK_2.2 16.04
+ rte_eth_dev_set_vlan_ether_type@DPDK_2.2 16.04
+ rte_eth_dev_set_vlan_offload@DPDK_2.2 16.04
+ rte_eth_dev_set_vlan_pvid@DPDK_2.2 16.04
+ rte_eth_dev_set_vlan_strip_on_queue@DPDK_2.2 16.04
+ rte_eth_dev_socket_id@DPDK_2.2 16.04
+ rte_eth_dev_start@DPDK_2.2 16.04
+ rte_eth_dev_stop@DPDK_2.2 16.04
+ rte_eth_dev_tx_queue_start@DPDK_2.2 16.04
+ rte_eth_dev_tx_queue_stop@DPDK_2.2 16.04
+ rte_eth_dev_uc_all_hash_table_set@DPDK_2.2 16.04
+ rte_eth_dev_uc_hash_table_set@DPDK_2.2 16.04
+ rte_eth_dev_udp_tunnel_port_add@DPDK_16.04 16.04
+ rte_eth_dev_udp_tunnel_port_delete@DPDK_16.04 16.04
+ rte_eth_dev_vlan_filter@DPDK_2.2 16.04
+ rte_eth_devices@DPDK_2.2 16.04
+ rte_eth_dma_zone_reserve@DPDK_2.2 16.04
+ rte_eth_driver_register@DPDK_2.2 16.04
+ rte_eth_led_off@DPDK_2.2 16.04
+ rte_eth_led_on@DPDK_2.2 16.04
+ rte_eth_link_get@DPDK_2.2 16.04
+ rte_eth_link_get_nowait@DPDK_2.2 16.04
+ rte_eth_macaddr_get@DPDK_2.2 16.04
+ rte_eth_mirror_rule_reset@DPDK_2.2 16.04
+ rte_eth_mirror_rule_set@DPDK_2.2 16.04
+ rte_eth_promiscuous_disable@DPDK_2.2 16.04
+ rte_eth_promiscuous_enable@DPDK_2.2 16.04
+ rte_eth_promiscuous_get@DPDK_2.2 16.04
+ rte_eth_remove_rx_callback@DPDK_2.2 16.04
+ rte_eth_remove_tx_callback@DPDK_2.2 16.04
+ rte_eth_rx_queue_info_get@DPDK_2.2 16.04
+ rte_eth_rx_queue_setup@DPDK_2.2 16.04
+ rte_eth_set_queue_rate_limit@DPDK_2.2 16.04
+ rte_eth_set_vf_rate_limit@DPDK_2.2 16.04
+ rte_eth_speed_bitflag@DPDK_16.04 16.04
+ rte_eth_stats_get@DPDK_2.2 16.04
+ rte_eth_stats_reset@DPDK_2.2 16.04
+ rte_eth_timesync_adjust_time@DPDK_2.2 16.04
+ rte_eth_timesync_disable@DPDK_2.2 16.04
+ rte_eth_timesync_enable@DPDK_2.2 16.04
+ rte_eth_timesync_read_rx_timestamp@DPDK_2.2 16.04
+ rte_eth_timesync_read_time@DPDK_2.2 16.04
+ rte_eth_timesync_read_tx_timestamp@DPDK_2.2 16.04
+ rte_eth_timesync_write_time@DPDK_2.2 16.04
+ rte_eth_tx_buffer_count_callback@DPDK_16.04 16.04
+ rte_eth_tx_buffer_drop_callback@DPDK_16.04 16.04
+ rte_eth_tx_buffer_init@DPDK_16.04 16.04
+ rte_eth_tx_buffer_set_err_callback@DPDK_16.04 16.04
+ rte_eth_tx_queue_info_get@DPDK_2.2 16.04
+ rte_eth_tx_queue_setup@DPDK_2.2 16.04
+ rte_eth_xstats_get@DPDK_2.2 16.04
+ rte_eth_xstats_reset@DPDK_2.2 16.04
diff --git a/debian/libdpdk-librte-acl2.symbols b/debian/libdpdk-librte-acl2.symbols
new file mode 100644 (file)
index 0000000..b889abe
--- /dev/null
@@ -0,0 +1,15 @@
+librte_acl.so.2 libdpdk-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/libdpdk-librte-cfgfile2.symbols b/debian/libdpdk-librte-cfgfile2.symbols
new file mode 100644 (file)
index 0000000..c25969d
--- /dev/null
@@ -0,0 +1,13 @@
+librte_cfgfile.so.2 libdpdk-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/libdpdk-librte-cmdline2.symbols b/debian/libdpdk-librte-cmdline2.symbols
new file mode 100644 (file)
index 0000000..feeb1e6
--- /dev/null
@@ -0,0 +1,68 @@
+librte_cmdline.so.2 libdpdk-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/libdpdk-librte-cryptodev1.symbols b/debian/libdpdk-librte-cryptodev1.symbols
new file mode 100644 (file)
index 0000000..9c74dd9
--- /dev/null
@@ -0,0 +1,30 @@
+librte_cryptodev.so.1 libdpdk-librte-cryptodev1 #MINVER#
+ DPDK_16.04@DPDK_16.04 16.04
+ 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_pmd_allocate@DPDK_16.04 16.04
+ rte_cryptodev_pmd_callback_process@DPDK_16.04 16.04
+ rte_cryptodev_pmd_driver_register@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/libdpdk-librte-distributor1.symbols b/debian/libdpdk-librte-distributor1.symbols
new file mode 100644 (file)
index 0000000..61f8d9d
--- /dev/null
@@ -0,0 +1,11 @@
+librte_distributor.so.1 libdpdk-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/libdpdk-librte-eal2.symbols b/debian/libdpdk-librte-eal2.symbols
new file mode 100644 (file)
index 0000000..730ee11
--- /dev/null
@@ -0,0 +1,131 @@
+librte_eal.so.2 libdpdk-librte-eal2 #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_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
+ 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_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_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_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_register_core@DPDK_2.2 16.04
+ rte_log@DPDK_2.0 16.04
+ rte_log_add_in_history@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_log_dump_history@DPDK_2.0 16.04
+ rte_log_set_history@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
+ 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_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/libdpdk-librte-hash2.symbols b/debian/libdpdk-librte-hash2.symbols
new file mode 100644 (file)
index 0000000..0173e0d
--- /dev/null
@@ -0,0 +1,26 @@
+librte_hash.so.2 libdpdk-librte-hash2 #MINVER#
+ 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_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/libdpdk-librte-ip-frag1.symbols b/debian/libdpdk-librte-ip-frag1.symbols
new file mode 100644 (file)
index 0000000..503ebdf
--- /dev/null
@@ -0,0 +1,9 @@
+librte_ip_frag.so.1 libdpdk-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/libdpdk-librte-jobstats1.symbols b/debian/libdpdk-librte-jobstats1.symbols
new file mode 100644 (file)
index 0000000..af11901
--- /dev/null
@@ -0,0 +1,17 @@
+librte_jobstats.so.1 libdpdk-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/libdpdk-librte-kni2.symbols b/debian/libdpdk-librte-kni2.symbols
new file mode 100644 (file)
index 0000000..661595e
--- /dev/null
@@ -0,0 +1,13 @@
+librte_kni.so.2 libdpdk-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/libdpdk-librte-kvargs1.symbols b/debian/libdpdk-librte-kvargs1.symbols
new file mode 100644 (file)
index 0000000..d61a316
--- /dev/null
@@ -0,0 +1,6 @@
+librte_kvargs.so.1 libdpdk-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/libdpdk-librte-lpm2.symbols b/debian/libdpdk-librte-lpm2.symbols
new file mode 100644 (file)
index 0000000..e87ef64
--- /dev/null
@@ -0,0 +1,27 @@
+librte_lpm.so.2 libdpdk-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/libdpdk-librte-mbuf2.symbols b/debian/libdpdk-librte-mbuf2.symbols
new file mode 100644 (file)
index 0000000..d0e8c45
--- /dev/null
@@ -0,0 +1,11 @@
+librte_mbuf.so.2 libdpdk-librte-mbuf2 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
+ DPDK_2.1@DPDK_2.1 16.04
+ rte_ctrlmbuf_init@DPDK_2.0 16.04
+ rte_get_rx_ol_flag_name@DPDK_2.0 16.04
+ 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/libdpdk-librte-mempool1.symbols b/debian/libdpdk-librte-mempool1.symbols
new file mode 100644 (file)
index 0000000..024efc4
--- /dev/null
@@ -0,0 +1,15 @@
+librte_mempool.so.1 libdpdk-librte-mempool1 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
+ rte_dom0_mempool_create@DPDK_2.0 16.04
+ rte_mempool_audit@DPDK_2.0 16.04
+ rte_mempool_calc_obj_size@DPDK_2.0 16.04
+ rte_mempool_count@DPDK_2.0 16.04
+ rte_mempool_create@DPDK_2.0 16.04
+ rte_mempool_dump@DPDK_2.0 16.04
+ rte_mempool_list_dump@DPDK_2.0 16.04
+ rte_mempool_lookup@DPDK_2.0 16.04
+ rte_mempool_obj_iter@DPDK_2.0 16.04
+ rte_mempool_walk@DPDK_2.0 16.04
+ rte_mempool_xmem_create@DPDK_2.0 16.04
+ rte_mempool_xmem_size@DPDK_2.0 16.04
+ rte_mempool_xmem_usage@DPDK_2.0 16.04
diff --git a/debian/libdpdk-librte-meter1.symbols b/debian/libdpdk-librte-meter1.symbols
new file mode 100644 (file)
index 0000000..adf2cec
--- /dev/null
@@ -0,0 +1,4 @@
+librte_meter.so.1 libdpdk-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/libdpdk-librte-pipeline3.symbols b/debian/libdpdk-librte-pipeline3.symbols
new file mode 100644 (file)
index 0000000..7204deb
--- /dev/null
@@ -0,0 +1,28 @@
+librte_pipeline.so.3 libdpdk-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/libdpdk-librte-pmd-af-packet1.symbols b/debian/libdpdk-librte-pmd-af-packet1.symbols
new file mode 100644 (file)
index 0000000..d36eb82
--- /dev/null
@@ -0,0 +1,2 @@
+librte_pmd_af_packet.so.1 libdpdk-librte-pmd-af-packet1 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
diff --git a/debian/libdpdk-librte-pmd-bond1.symbols b/debian/libdpdk-librte-pmd-bond1.symbols
new file mode 100644 (file)
index 0000000..57d525e
--- /dev/null
@@ -0,0 +1,20 @@
+librte_pmd_bond.so.1 libdpdk-librte-pmd-bond1 #MINVER#
+ 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_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/libdpdk-librte-pmd-cxgbe1.symbols b/debian/libdpdk-librte-pmd-cxgbe1.symbols
new file mode 100644 (file)
index 0000000..0b6059e
--- /dev/null
@@ -0,0 +1,2 @@
+librte_pmd_cxgbe.so.1 libdpdk-librte-pmd-cxgbe1 #MINVER#
+ DPDK_2.1@DPDK_2.1 16.04
diff --git a/debian/libdpdk-librte-pmd-e10001.symbols b/debian/libdpdk-librte-pmd-e10001.symbols
new file mode 100644 (file)
index 0000000..052ee05
--- /dev/null
@@ -0,0 +1,2 @@
+librte_pmd_e1000.so.1 libdpdk-librte-pmd-e10001 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
diff --git a/debian/libdpdk-librte-pmd-ena1.symbols b/debian/libdpdk-librte-pmd-ena1.symbols
new file mode 100644 (file)
index 0000000..3684a58
--- /dev/null
@@ -0,0 +1,2 @@
+librte_pmd_ena.so.1 libdpdk-librte-pmd-ena1 #MINVER#
+ DPDK_16.04@DPDK_16.04 16.04
diff --git a/debian/libdpdk-librte-pmd-enic1.symbols b/debian/libdpdk-librte-pmd-enic1.symbols
new file mode 100644 (file)
index 0000000..2c7c2b6
--- /dev/null
@@ -0,0 +1,2 @@
+librte_pmd_enic.so.1 libdpdk-librte-pmd-enic1 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
diff --git a/debian/libdpdk-librte-pmd-fm10k1.symbols b/debian/libdpdk-librte-pmd-fm10k1.symbols
new file mode 100644 (file)
index 0000000..5cf6b71
--- /dev/null
@@ -0,0 +1,2 @@
+librte_pmd_fm10k.so.1 libdpdk-librte-pmd-fm10k1 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
diff --git a/debian/libdpdk-librte-pmd-i40e1.symbols b/debian/libdpdk-librte-pmd-i40e1.symbols
new file mode 100644 (file)
index 0000000..61a933b
--- /dev/null
@@ -0,0 +1,2 @@
+librte_pmd_i40e.so.1 libdpdk-librte-pmd-i40e1 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
diff --git a/debian/libdpdk-librte-pmd-ixgbe1.symbols b/debian/libdpdk-librte-pmd-ixgbe1.symbols
new file mode 100644 (file)
index 0000000..5ee113c
--- /dev/null
@@ -0,0 +1,2 @@
+librte_pmd_ixgbe.so.1 libdpdk-librte-pmd-ixgbe1 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
diff --git a/debian/libdpdk-librte-pmd-null-crypto1.symbols b/debian/libdpdk-librte-pmd-null-crypto1.symbols
new file mode 100644 (file)
index 0000000..487b0f8
--- /dev/null
@@ -0,0 +1,2 @@
+librte_pmd_null_crypto.so.1 libdpdk-librte-pmd-null-crypto1 #MINVER#
+ DPDK_16.04@DPDK_16.04 16.04
diff --git a/debian/libdpdk-librte-pmd-null1.symbols b/debian/libdpdk-librte-pmd-null1.symbols
new file mode 100644 (file)
index 0000000..19ffeb6
--- /dev/null
@@ -0,0 +1,4 @@
+librte_pmd_null.so.1 libdpdk-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/libdpdk-librte-pmd-pcap1.symbols b/debian/libdpdk-librte-pmd-pcap1.symbols
new file mode 100644 (file)
index 0000000..4aaa6cd
--- /dev/null
@@ -0,0 +1,2 @@
+librte_pmd_pcap.so.1 libdpdk-librte-pmd-pcap1 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
diff --git a/debian/libdpdk-librte-pmd-ring2.symbols b/debian/libdpdk-librte-pmd-ring2.symbols
new file mode 100644 (file)
index 0000000..bca6270
--- /dev/null
@@ -0,0 +1,5 @@
+librte_pmd_ring.so.2 libdpdk-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/libdpdk-librte-pmd-vhost1.symbols b/debian/libdpdk-librte-pmd-vhost1.symbols
new file mode 100644 (file)
index 0000000..3253224
--- /dev/null
@@ -0,0 +1,6 @@
+librte_pmd_vhost.so.1 libdpdk-librte-pmd-vhost1 #MINVER#
+ DPDK_16.04@DPDK_16.04 16.04
+ 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
diff --git a/debian/libdpdk-librte-pmd-virtio1.symbols b/debian/libdpdk-librte-pmd-virtio1.symbols
new file mode 100644 (file)
index 0000000..41f3e77
--- /dev/null
@@ -0,0 +1,2 @@
+librte_pmd_virtio.so.1 libdpdk-librte-pmd-virtio1 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
diff --git a/debian/libdpdk-librte-pmd-vmxnet3-uio1.symbols b/debian/libdpdk-librte-pmd-vmxnet3-uio1.symbols
new file mode 100644 (file)
index 0000000..4a3fb96
--- /dev/null
@@ -0,0 +1,2 @@
+librte_pmd_vmxnet3_uio.so.1 libdpdk-librte-pmd-vmxnet3-uio1 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
diff --git a/debian/libdpdk-librte-pmd-xenvirt1.symbols b/debian/libdpdk-librte-pmd-xenvirt1.symbols
new file mode 100644 (file)
index 0000000..76f116e
--- /dev/null
@@ -0,0 +1,3 @@
+librte_pmd_xenvirt.so.1 libdpdk-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/libdpdk-librte-port2.symbols b/debian/libdpdk-librte-port2.symbols
new file mode 100644 (file)
index 0000000..c94782a
--- /dev/null
@@ -0,0 +1,21 @@
+librte_port.so.2 libdpdk-librte-port2 #MINVER#
+ 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_port_ethdev_reader_ops@DPDK_2.0 16.04
+ rte_port_ethdev_writer_nodrop_ops@DPDK_2.1 16.04
+ rte_port_ethdev_writer_ops@DPDK_2.0 16.04
+ rte_port_ring_multi_reader_ops@DPDK_2.2 16.04
+ rte_port_ring_multi_writer_nodrop_ops@DPDK_2.2 16.04
+ rte_port_ring_multi_writer_ops@DPDK_2.2 16.04
+ rte_port_ring_reader_ipv4_frag_ops@DPDK_2.0 16.04
+ rte_port_ring_reader_ipv6_frag_ops@DPDK_2.1 16.04
+ rte_port_ring_reader_ops@DPDK_2.0 16.04
+ rte_port_ring_writer_ipv4_ras_ops@DPDK_2.0 16.04
+ rte_port_ring_writer_ipv6_ras_ops@DPDK_2.1 16.04
+ rte_port_ring_writer_nodrop_ops@DPDK_2.1 16.04
+ rte_port_ring_writer_ops@DPDK_2.0 16.04
+ rte_port_sched_reader_ops@DPDK_2.0 16.04
+ rte_port_sched_writer_ops@DPDK_2.0 16.04
+ rte_port_sink_ops@DPDK_2.0 16.04
+ rte_port_source_ops@DPDK_2.0 16.04
diff --git a/debian/libdpdk-librte-power1.symbols b/debian/libdpdk-librte-power1.symbols
new file mode 100644 (file)
index 0000000..2211785
--- /dev/null
@@ -0,0 +1,14 @@
+librte_power.so.1 libdpdk-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/libdpdk-librte-reorder1.symbols b/debian/libdpdk-librte-reorder1.symbols
new file mode 100644 (file)
index 0000000..24d5cd2
--- /dev/null
@@ -0,0 +1,9 @@
+librte_reorder.so.1 libdpdk-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/libdpdk-librte-ring1.symbols b/debian/libdpdk-librte-ring1.symbols
new file mode 100644 (file)
index 0000000..29c8b9e
--- /dev/null
@@ -0,0 +1,11 @@
+librte_ring.so.1 libdpdk-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/libdpdk-librte-sched1.symbols b/debian/libdpdk-librte-sched1.symbols
new file mode 100644 (file)
index 0000000..100829a
--- /dev/null
@@ -0,0 +1,22 @@
+librte_sched.so.1 libdpdk-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/libdpdk-librte-table2.symbols b/debian/libdpdk-librte-table2.symbols
new file mode 100644 (file)
index 0000000..89dc550
--- /dev/null
@@ -0,0 +1,19 @@
+librte_table.so.2 libdpdk-librte-table2 #MINVER#
+ 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_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_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_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/libdpdk-librte-timer1.symbols b/debian/libdpdk-librte-timer1.symbols
new file mode 100644 (file)
index 0000000..9e82b0e
--- /dev/null
@@ -0,0 +1,11 @@
+librte_timer.so.1 libdpdk-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/libdpdk-librte-vhost2.symbols b/debian/libdpdk-librte-vhost2.symbols
new file mode 100644 (file)
index 0000000..e938271
--- /dev/null
@@ -0,0 +1,13 @@
+librte_vhost.so.2 libdpdk-librte-vhost2 #MINVER#
+ DPDK_2.0@DPDK_2.0 16.04
+ DPDK_2.1@DPDK_2.1 16.04
+ rte_vhost_dequeue_burst@DPDK_2.0 16.04
+ rte_vhost_driver_callback_register@DPDK_2.0 16.04
+ rte_vhost_driver_register@DPDK_2.0 16.04
+ rte_vhost_driver_session_start@DPDK_2.0 16.04
+ rte_vhost_driver_unregister@DPDK_2.1 16.04
+ rte_vhost_enable_guest_notification@DPDK_2.0 16.04
+ rte_vhost_enqueue_burst@DPDK_2.0 16.04
+ rte_vhost_feature_disable@DPDK_2.0 16.04
+ rte_vhost_feature_enable@DPDK_2.0 16.04
+ rte_vhost_feature_get@DPDK_2.0 16.04
diff --git a/debian/libdpdk0.dirs b/debian/libdpdk0.dirs
new file mode 100644 (file)
index 0000000..6845771
--- /dev/null
@@ -0,0 +1 @@
+usr/lib
diff --git a/debian/patches/series b/debian/patches/series
new file mode 100644 (file)
index 0000000..baab84f
--- /dev/null
@@ -0,0 +1,12 @@
+ubuntu-backport-33-vhost-user-add-error-handling-for-fd-1023.patch
+ubuntu-backport-38-dpdk-dev-Memory-leak-when-adding-removing-vhost_user-ports.patch
+ubuntu-fix-vhost-user-socket-permission.patch
+ubuntu-backport-39-lpm-fix-freeing-in-compatibility-mode.patch
+ubuntu-fix-xenvirt-support-dynamic-page-size.patch
+ubuntu-backport-40-linking-fixes-stage-1-4.patch
+ubuntu-backport-40-linking-fixes-stage-2-4.patch
+ubuntu-backport-40-linking-fixes-stage-3-4.patch
+ubuntu-backport-40-linking-fixes-stage-4-4.patch
+ubuntu-backport-41-fix-install-tar-1.29.patch
+ubuntu-backport-42-increase-default-logging-level.patch
+ubuntu-backport-43-fix-level-type-retrieving.patch
diff --git a/debian/patches/ubuntu-backport-33-vhost-user-add-error-handling-for-fd-1023.patch b/debian/patches/ubuntu-backport-33-vhost-user-add-error-handling-for-fd-1023.patch
new file mode 100644 (file)
index 0000000..ea1ff75
--- /dev/null
@@ -0,0 +1,141 @@
+Description: backport of dpdk fix for LP: #1566874
+
+Forwarded: n/a (already discussed upstream)
+Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
+Last-Update: 2016-04-11
+
+Extended by Christian Ehrhardt <christian.ehrhardt@canonical.com>
+Close fd on vserver->listenfd (Part of the upstream discussion)
+
+Original:
+From: Patrik Andersson <patrik.r.andersson@ericsson.com>
+
+Protect against DPDK crash when allocation of listen fd >= 1023.
+For events on fd:s >1023, the current implementation will trigger
+an abort due to access outside of allocated bit mask.
+
+Corrections would include:
+
+  * Match fdset_add() signature in fd_man.c to fd_man.h
+  * Handling of return codes from fdset_add()
+  * Addition of check of fd number in fdset_add_fd()
+
+The rationale behind the suggested code change is that,
+fdset_event_dispatch() could attempt access outside of the FD_SET
+bitmask if there is an event on a file descriptor that in turn
+looks up a virtio file descriptor with a value > 1023.
+Such an attempt will lead to an abort() and a restart of any
+vswitch using DPDK.
+
+A discussion topic exist in the ovs-discuss mailing list that can
+provide a little more background:
+
+http://openvswitch.org/pipermail/discuss/2016-February/020243.html
+
+Signed-off-by: Patrik Andersson <patrik.r.andersson@ericsson.com>
+---
+ fd_man.c         |   11 ++++++-----
+ vhost-net-user.c |   23 +++++++++++++++++++++--
+ 2 files changed, 27 insertions(+), 7 deletions(-)
+
+Index: dpdk/lib/librte_vhost/vhost_user/fd_man.c
+===================================================================
+--- dpdk.orig/lib/librte_vhost/vhost_user/fd_man.c
++++ dpdk/lib/librte_vhost/vhost_user/fd_man.c
+@@ -71,20 +71,22 @@ fdset_find_free_slot(struct fdset *pfdse
+       return fdset_find_fd(pfdset, -1);
+ }
+-static void
++static int
+ fdset_add_fd(struct fdset  *pfdset, int idx, int fd,
+       fd_cb rcb, fd_cb wcb, void *dat)
+ {
+       struct fdentry *pfdentry;
+-      if (pfdset == NULL || idx >= MAX_FDS)
+-              return;
++      if (pfdset == NULL || idx >= MAX_FDS || fd >= FD_SETSIZE)
++              return -1;
+       pfdentry = &pfdset->fd[idx];
+       pfdentry->fd = fd;
+       pfdentry->rcb = rcb;
+       pfdentry->wcb = wcb;
+       pfdentry->dat = dat;
++
++      return 0;
+ }
+ /**
+@@ -150,12 +152,11 @@ fdset_add(struct fdset *pfdset, int fd,
+       /* Find a free slot in the list. */
+       i = fdset_find_free_slot(pfdset);
+-      if (i == -1) {
++      if (i == -1 || fdset_add_fd(pfdset, i, fd, rcb, wcb, dat) < 0) {
+               pthread_mutex_unlock(&pfdset->fd_mutex);
+               return -2;
+       }
+-      fdset_add_fd(pfdset, i, fd, rcb, wcb, dat);
+       pfdset->num++;
+       pthread_mutex_unlock(&pfdset->fd_mutex);
+Index: dpdk/lib/librte_vhost/vhost_user/vhost-net-user.c
+===================================================================
+--- dpdk.orig/lib/librte_vhost/vhost_user/vhost-net-user.c
++++ dpdk/lib/librte_vhost/vhost_user/vhost-net-user.c
+@@ -288,6 +288,7 @@ vserver_new_vq_conn(int fd, void *dat, _
+       int fh;
+       struct vhost_device_ctx vdev_ctx = { (pid_t)0, 0 };
+       unsigned int size;
++      int ret;
+       conn_fd = accept(fd, NULL, NULL);
+       RTE_LOG(INFO, VHOST_CONFIG,
+@@ -317,8 +318,15 @@ vserver_new_vq_conn(int fd, void *dat, _
+       ctx->vserver = vserver;
+       ctx->fh = fh;
+-      fdset_add(&g_vhost_server.fdset,
++      ret = fdset_add(&g_vhost_server.fdset,
+               conn_fd, vserver_message_handler, NULL, ctx);
++      if (ret < 0) {
++              free(ctx);
++              close(conn_fd);
++              RTE_LOG(ERR, VHOST_CONFIG,
++                              "failed to add fd %d into vhost server fdset\n",
++                              conn_fd);
++      }
+ }
+ /* callback when there is message on the connfd */
+@@ -453,6 +461,7 @@ int
+ rte_vhost_driver_register(const char *path)
+ {
+       struct vhost_server *vserver;
++      int ret;
+       pthread_mutex_lock(&g_vhost_server.server_mutex);
+@@ -478,8 +487,18 @@ rte_vhost_driver_register(const char *pa
+       vserver->path = strdup(path);
+-      fdset_add(&g_vhost_server.fdset, vserver->listenfd,
++      ret = fdset_add(&g_vhost_server.fdset, vserver->listenfd,
+               vserver_new_vq_conn, NULL, vserver);
++      if (ret < 0) {
++              pthread_mutex_unlock(&g_vhost_server.server_mutex);
++              RTE_LOG(ERR, VHOST_CONFIG,
++                              "failed to add listen fd %d to vhost server fdset\n",
++                              vserver->listenfd);
++              close(vserver->listenfd);
++              free(vserver->path);
++              free(vserver);
++              return -1;
++      }
+       g_vhost_server.server[g_vhost_server.vserver_cnt++] = vserver;
+       pthread_mutex_unlock(&g_vhost_server.server_mutex);
diff --git a/debian/patches/ubuntu-backport-38-dpdk-dev-Memory-leak-when-adding-removing-vhost_user-ports.patch b/debian/patches/ubuntu-backport-38-dpdk-dev-Memory-leak-when-adding-removing-vhost_user-ports.patch
new file mode 100644 (file)
index 0000000..b756d8f
--- /dev/null
@@ -0,0 +1,63 @@
+Description: backport of dpdk 16.07 fix for LP: #1570466
+
+Backported from this discussion
+http://dpdk.org/dev/patchwork/patch/12103/
+Not accepted yet, but likely to be accepted in some form once tested and
+confirmed.
+
+Update 2016-05-17:
+Moving to 16.04 this now applies as-is without modifications, dropping the
+former backport changes.
+
+Also along the discussion vserver-fh is now initialized with -1 to avoid
+accidentially deleting the first connected port if we delete another not yet
+connected port.
+
+Forwarded: yes (based on an upstream discussion)
+Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
+Last-Update: 2016-05-17
+
+Index: dpdk/lib/librte_vhost/vhost_user/vhost-net-user.c
+===================================================================
+--- dpdk.orig/lib/librte_vhost/vhost_user/vhost-net-user.c
++++ dpdk/lib/librte_vhost/vhost_user/vhost-net-user.c
+@@ -310,6 +310,7 @@ vserver_new_vq_conn(int fd, void *dat, _
+       }
+       vdev_ctx.fh = fh;
++      vserver->fh = fh;
+       size = strnlen(vserver->path, PATH_MAX);
+       vhost_set_ifname(vdev_ctx, vserver->path,
+               size);
+@@ -486,6 +487,7 @@ rte_vhost_driver_register(const char *pa
+       }
+       vserver->path = strdup(path);
++      vserver->fh = -1;
+       ret = fdset_add(&g_vhost_server.fdset, vserver->listenfd,
+               vserver_new_vq_conn, NULL, vserver);
+@@ -520,6 +522,11 @@ rte_vhost_driver_unregister(const char *
+       for (i = 0; i < g_vhost_server.vserver_cnt; i++) {
+               if (!strcmp(g_vhost_server.server[i]->path, path)) {
++                      struct vhost_device_ctx ctx;
++
++                      ctx.fh = g_vhost_server.server[i]->fh;
++                      vhost_destroy_device(ctx);
++
+                       fdset_del(&g_vhost_server.fdset,
+                               g_vhost_server.server[i]->listenfd);
+Index: dpdk/lib/librte_vhost/vhost_user/vhost-net-user.h
+===================================================================
+--- dpdk.orig/lib/librte_vhost/vhost_user/vhost-net-user.h
++++ dpdk/lib/librte_vhost/vhost_user/vhost-net-user.h
+@@ -43,6 +43,7 @@
+ struct vhost_server {
+       char *path; /**< The path the uds is bind to. */
+       int listenfd;     /**< The listener sockfd. */
++      uint32_t fh;
+ };
+ /* refer to hw/virtio/vhost-user.c */
diff --git a/debian/patches/ubuntu-backport-39-lpm-fix-freeing-in-compatibility-mode.patch b/debian/patches/ubuntu-backport-39-lpm-fix-freeing-in-compatibility-mode.patch
new file mode 100644 (file)
index 0000000..4224cad
--- /dev/null
@@ -0,0 +1,52 @@
+Description: backport of dpdk 16.07 fix 7cc3f2c2
+
+Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
+Date:   Tue Apr 12 15:49:27 2016 +0200
+
+    lpm: fix freeing in compatibility mode
+
+    Back then when we fixed the missing free lpm I was to quickly to say yes
+    if it applies not only to the lpm6 but also to all of the lpm code.
+
+    It turned out to not apply to all of them. In rte_lpm_create_v20 there
+    is an unexpected fused allocation:
+    mem_size = sizeof(*lpm) + (sizeof(lpm->rules_tbl[0]) * max_rules);
+    [...]
+    lpm = (struct rte_lpm_v20 *)rte_zmalloc_socket(mem_name,mem_size,
+                   RTE_CACHE_LINE_SIZE, socket_id);
+
+    That causes lpm->rules_tbl not to have an own struct malloc_elem that
+    can be derived via RTE_PTR_SUB(data, MALLOC_ELEM_HEADER_LEN) in
+    malloc_elem_from_data.
+    Due to that the rte_lpm_free_v20 accidentially misderives the elem and
+    assumes it is ELEM_FREE triggering in malloc_elem_free
+    if (!malloc_elem_cookies_ok(elem) || elem->state !=
+            return -1;
+
+    While it seems counter-intuitive the way to properly remove rules_tbl in
+    the old fused allocation style of rte_lpm_free_v20 is to not remove it.
+
+    The newer rte_lpm_free_v1604 is safe because in rte_lpm_create_v1604
+    rules_tbl is a separate allocation.
+
+    Fixes: d4c18f0a1d5d ("lpm: fix missing free")
+
+    Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
+    Acked-by: Olivier Matz <olivier.matz@6wind.com>
+
+Forwarded: yes (in DPDK 16.07)
+Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
+Last-Update: 2016-05-17
+
+Index: dpdk/lib/librte_lpm/rte_lpm.c
+===================================================================
+--- dpdk.orig/lib/librte_lpm/rte_lpm.c
++++ dpdk/lib/librte_lpm/rte_lpm.c
+@@ -373,7 +373,6 @@ rte_lpm_free_v20(struct rte_lpm_v20 *lpm
+       rte_rwlock_write_unlock(RTE_EAL_TAILQ_RWLOCK);
+-      rte_free(lpm->rules_tbl);
+       rte_free(lpm);
+       rte_free(te);
+ }
diff --git a/debian/patches/ubuntu-backport-40-linking-fixes-stage-1-4.patch b/debian/patches/ubuntu-backport-40-linking-fixes-stage-1-4.patch
new file mode 100644 (file)
index 0000000..5336cd4
--- /dev/null
@@ -0,0 +1,101 @@
+Description: backport of dpdk 16.07 fix for library underlinking - stage 1/4
+
+This is a merge of related upstream fixes:
+- c6417ce6: mk: add build-time library directory to linker path
+- aace9d0b: mk: cleanup leftover references to malloc library
+- bf5a46fa: mk: generate internal library dependencies
+
+Forwarded: yes (in DPDK 16.07)
+Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
+Last-Update: 2016-06-14
+
+Index: dpdk/drivers/net/cxgbe/Makefile
+===================================================================
+--- dpdk.orig/drivers/net/cxgbe/Makefile
++++ dpdk/drivers/net/cxgbe/Makefile
+@@ -82,6 +82,6 @@ SRCS-$(CONFIG_RTE_LIBRTE_CXGBE_PMD) += t
+ # this lib depends upon:
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_CXGBE_PMD) += lib/librte_eal lib/librte_ether
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_CXGBE_PMD) += lib/librte_mempool lib/librte_mbuf
+-DEPDIRS-$(CONFIG_RTE_LIBRTE_CXGBE_PMD) += lib/librte_net lib/librte_malloc
++DEPDIRS-$(CONFIG_RTE_LIBRTE_CXGBE_PMD) += lib/librte_net
+ include $(RTE_SDK)/mk/rte.lib.mk
+Index: dpdk/drivers/net/ena/Makefile
+===================================================================
+--- dpdk.orig/drivers/net/ena/Makefile
++++ dpdk/drivers/net/ena/Makefile
+@@ -54,7 +54,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_ENA_PMD) += ena
+ # this lib depends upon:
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_ENA_PMD) += lib/librte_eal lib/librte_ether
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_ENA_PMD) += lib/librte_mempool lib/librte_mbuf
+-DEPDIRS-$(CONFIG_RTE_LIBRTE_ENA_PMD) += lib/librte_net lib/librte_malloc
++DEPDIRS-$(CONFIG_RTE_LIBRTE_ENA_PMD) += lib/librte_net
+ CFLAGS += $(INCLUDES)
+Index: dpdk/drivers/net/mpipe/Makefile
+===================================================================
+--- dpdk.orig/drivers/net/mpipe/Makefile
++++ dpdk/drivers/net/mpipe/Makefile
+@@ -42,6 +42,6 @@ SRCS-$(CONFIG_RTE_LIBRTE_MPIPE_PMD) += m
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_MPIPE_PMD) += lib/librte_eal lib/librte_ether
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_MPIPE_PMD) += lib/librte_mempool lib/librte_mbuf
+-DEPDIRS-$(CONFIG_RTE_LIBRTE_MPIPE_PMD) += lib/librte_net lib/librte_malloc
++DEPDIRS-$(CONFIG_RTE_LIBRTE_MPIPE_PMD) += lib/librte_net
+ include $(RTE_SDK)/mk/rte.lib.mk
+Index: dpdk/drivers/net/nfp/Makefile
+===================================================================
+--- dpdk.orig/drivers/net/nfp/Makefile
++++ dpdk/drivers/net/nfp/Makefile
+@@ -53,6 +53,6 @@ SRCS-$(CONFIG_RTE_LIBRTE_NFP_PMD) += nfp
+ # this lib depends upon:
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_NFP_PMD) += lib/librte_eal lib/librte_ether
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_NFP_PMD) += lib/librte_mempool lib/librte_mbuf
+-DEPDIRS-$(CONFIG_RTE_LIBRTE_NFP_PMD) += lib/librte_net lib/librte_malloc
++DEPDIRS-$(CONFIG_RTE_LIBRTE_NFP_PMD) += lib/librte_net
+ include $(RTE_SDK)/mk/rte.lib.mk
+Index: dpdk/drivers/net/szedata2/Makefile
+===================================================================
+--- dpdk.orig/drivers/net/szedata2/Makefile
++++ dpdk/drivers/net/szedata2/Makefile
+@@ -57,7 +57,6 @@ SYMLINK-y-include +=
+ # this lib depends upon:
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_SZEDATA2) += lib/librte_mbuf
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_SZEDATA2) += lib/librte_ether
+-DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_SZEDATA2) += lib/librte_malloc
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_SZEDATA2) += lib/librte_kvargs
+ include $(RTE_SDK)/mk/rte.lib.mk
+Index: dpdk/mk/rte.lib.mk
+===================================================================
+--- dpdk.orig/mk/rte.lib.mk
++++ dpdk/mk/rte.lib.mk
+@@ -77,6 +77,13 @@ else
+ _CPU_LDFLAGS := $(CPU_LDFLAGS)
+ endif
++# Translate DEPDIRS-y into LDLIBS
++# Ignore (sub)directory dependencies which do not provide an actual library
++_IGNORE_DIRS = lib/librte_eal/% lib/librte_net lib/librte_compat
++_DEPDIRS = $(filter-out $(_IGNORE_DIRS),$(DEPDIRS-y))
++_LDDIRS = $(subst librte_ether,libethdev,$(_DEPDIRS))
++LDLIBS += $(subst lib/lib,-l,$(_LDDIRS))
++
+ O_TO_A = $(AR) crDs $(LIB) $(OBJS-y)
+ O_TO_A_STR = $(subst ','\'',$(O_TO_A)) #'# fix syntax highlight
+ O_TO_A_DISP = $(if $(V),"$(O_TO_A_STR)","  AR $(@)")
+@@ -86,8 +93,8 @@ O_TO_A_DO = @set -e; \
+       $(O_TO_A) && \
+       echo $(O_TO_A_CMD) > $(call exe2cmd,$(@))
+-O_TO_S = $(LD) $(_CPU_LDFLAGS) $(EXTRA_LDFLAGS) -shared $(OBJS-y) $(LDLIBS) \
+-       -Wl,-soname,$(LIB) -o $(LIB)
++O_TO_S = $(LD) -L$(RTE_OUTPUT)/lib $(_CPU_LDFLAGS) $(EXTRA_LDFLAGS) \
++        -shared $(OBJS-y) $(LDLIBS) -Wl,-soname,$(LIB) -o $(LIB)
+ O_TO_S_STR = $(subst ','\'',$(O_TO_S)) #'# fix syntax highlight
+ O_TO_S_DISP = $(if $(V),"$(O_TO_S_STR)","  LD $(@)")
+ O_TO_S_DO = @set -e; \
diff --git a/debian/patches/ubuntu-backport-40-linking-fixes-stage-2-4.patch b/debian/patches/ubuntu-backport-40-linking-fixes-stage-2-4.patch
new file mode 100644 (file)
index 0000000..30ca0d5
--- /dev/null
@@ -0,0 +1,556 @@
+Description: backport of dpdk 16.07 fix for library underlinking - stage 2/4
+
+This is a merge of related upstream fixes:
+- a3f34a98 log: deprecate history dump
+- 3037e5e2 eal: remove useless includes of mempool and ring
+
+Forwarded: yes (in DPDK 16.07)
+Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
+Last-Update: 2016-06-14
+
+Index: dpdk/app/test-pmd/cmdline.c
+===================================================================
+--- dpdk.orig/app/test-pmd/cmdline.c
++++ dpdk/app/test-pmd/cmdline.c
+@@ -7191,8 +7191,6 @@ static void cmd_dump_parsed(void *parsed
+               rte_dump_physmem_layout(stdout);
+       else if (!strcmp(res->dump, "dump_memzone"))
+               rte_memzone_dump(stdout);
+-      else if (!strcmp(res->dump, "dump_log_history"))
+-              rte_log_dump_history(stdout);
+       else if (!strcmp(res->dump, "dump_struct_sizes"))
+               dump_struct_sizes();
+       else if (!strcmp(res->dump, "dump_ring"))
+@@ -7207,7 +7205,6 @@ cmdline_parse_token_string_t cmd_dump_du
+       TOKEN_STRING_INITIALIZER(struct cmd_dump_result, dump,
+               "dump_physmem#"
+               "dump_memzone#"
+-              "dump_log_history#"
+               "dump_struct_sizes#"
+               "dump_ring#"
+               "dump_mempool#"
+Index: dpdk/app/test/autotest_data.py
+===================================================================
+--- dpdk.orig/app/test/autotest_data.py
++++ dpdk/app/test/autotest_data.py
+@@ -88,12 +88,6 @@ parallel_test_group_list = [
+                "Report" :     None,
+               },
+               {
+-               "Name" :       "Dump log history",
+-               "Command" :    "dump_log_history",
+-               "Func" :       dump_autotest,
+-               "Report" :     None,
+-              },
+-              {
+                "Name" :       "Dump rings",
+                "Command" :    "dump_ring",
+                "Func" :       dump_autotest,
+Index: dpdk/app/test/autotest_test_funcs.py
+===================================================================
+--- dpdk.orig/app/test/autotest_test_funcs.py
++++ dpdk/app/test/autotest_test_funcs.py
+@@ -151,12 +151,6 @@ def logs_autotest(child, test_name):
+               "TESTAPP2: this is a info level message",
+               "TESTAPP2: this is a warning level message",
+               "TESTAPP1: this is a debug level message",
+-              "TESTAPP1: this is a debug level message",
+-              "TESTAPP1: this is a info level message",
+-              "TESTAPP1: this is a warning level message",
+-              "TESTAPP2: this is a info level message",
+-              "TESTAPP2: this is a warning level message",
+-              "TESTAPP1: this is a debug level message",
+       ]
+       for log_msg in log_list:
+Index: dpdk/app/test/commands.c
+===================================================================
+--- dpdk.orig/app/test/commands.c
++++ dpdk/app/test/commands.c
+@@ -150,8 +150,6 @@ static void cmd_dump_parsed(void *parsed
+               rte_dump_physmem_layout(stdout);
+       else if (!strcmp(res->dump, "dump_memzone"))
+               rte_memzone_dump(stdout);
+-      else if (!strcmp(res->dump, "dump_log_history"))
+-              rte_log_dump_history(stdout);
+       else if (!strcmp(res->dump, "dump_struct_sizes"))
+               dump_struct_sizes();
+       else if (!strcmp(res->dump, "dump_ring"))
+@@ -164,7 +162,7 @@ static void cmd_dump_parsed(void *parsed
+ cmdline_parse_token_string_t cmd_dump_dump =
+       TOKEN_STRING_INITIALIZER(struct cmd_dump_result, dump,
+-                               "dump_physmem#dump_memzone#dump_log_history#"
++                               "dump_physmem#dump_memzone#"
+                                "dump_struct_sizes#dump_ring#dump_mempool#"
+                                "dump_devargs");
+Index: dpdk/app/test/test_logs.c
+===================================================================
+--- dpdk.orig/app/test/test_logs.c
++++ dpdk/app/test/test_logs.c
+@@ -85,8 +85,6 @@ test_logs(void)
+       RTE_LOG(DEBUG, TESTAPP1, "this is a debug level message\n");
+       RTE_LOG(DEBUG, TESTAPP2, "debug level message (not displayed)\n");
+-      rte_log_dump_history(stdout);
+-
+       return 0;
+ }
+Index: dpdk/doc/guides/prog_guide/mempool_lib.rst
+===================================================================
+--- dpdk.orig/doc/guides/prog_guide/mempool_lib.rst
++++ dpdk/doc/guides/prog_guide/mempool_lib.rst
+@@ -38,9 +38,7 @@ In the DPDK, it is identified by name an
+ It provides some other optional services such as a per-core object cache and
+ an alignment helper to ensure that objects are padded to spread them equally on all DRAM or DDR3 channels.
+-This library is used by the
+-:ref:`Mbuf Library <Mbuf_Library>` and the
+-:ref:`Environment Abstraction Layer <Environment_Abstraction_Layer>` (for logging history).
++This library is used by the :ref:`Mbuf Library <Mbuf_Library>`.
+ Cookies
+ -------
+Index: dpdk/doc/guides/rel_notes/deprecation.rst
+===================================================================
+--- dpdk.orig/doc/guides/rel_notes/deprecation.rst
++++ dpdk/doc/guides/rel_notes/deprecation.rst
+@@ -8,6 +8,9 @@ API and ABI deprecation notices are to b
+ Deprecation Notices
+ -------------------
++* The log history is deprecated.
++  It is voided in 16.07 and will be removed in release 16.11.
++
+ * The ethdev hotplug API is going to be moved to EAL with a notification
+   mechanism added to crypto and ethdev libraries so that hotplug is now
+   available to both of them. This API will be stripped of the device arguments
+Index: dpdk/lib/librte_eal/bsdapp/eal/Makefile
+===================================================================
+--- dpdk.orig/lib/librte_eal/bsdapp/eal/Makefile
++++ dpdk/lib/librte_eal/bsdapp/eal/Makefile
+@@ -40,8 +40,6 @@ VPATH += $(RTE_SDK)/lib/librte_eal/commo
+ CFLAGS += -I$(SRCDIR)/include
+ CFLAGS += -I$(RTE_SDK)/lib/librte_eal/common
+ CFLAGS += -I$(RTE_SDK)/lib/librte_eal/common/include
+-CFLAGS += -I$(RTE_SDK)/lib/librte_ring
+-CFLAGS += -I$(RTE_SDK)/lib/librte_mempool
+ CFLAGS += $(WERROR_FLAGS) -O3
+ LDLIBS += -lexecinfo
+Index: dpdk/lib/librte_eal/bsdapp/eal/eal_debug.c
+===================================================================
+--- dpdk.orig/lib/librte_eal/bsdapp/eal/eal_debug.c
++++ dpdk/lib/librte_eal/bsdapp/eal/eal_debug.c
+@@ -77,9 +77,6 @@ void __rte_panic(const char *funcname, c
+ {
+       va_list ap;
+-      /* disable history */
+-      rte_log_set_history(0);
+-
+       rte_log(RTE_LOG_CRIT, RTE_LOGTYPE_EAL, "PANIC in %s():\n", funcname);
+       va_start(ap, format);
+       rte_vlog(RTE_LOG_CRIT, RTE_LOGTYPE_EAL, format, ap);
+@@ -98,9 +95,6 @@ rte_exit(int exit_code, const char *form
+ {
+       va_list ap;
+-      /* disable history */
+-      rte_log_set_history(0);
+-
+       if (exit_code != 0)
+               RTE_LOG(CRIT, EAL, "Error - exiting with code: %d\n"
+                               "  Cause: ", exit_code);
+Index: dpdk/lib/librte_eal/common/eal_common_log.c
+===================================================================
+--- dpdk.orig/lib/librte_eal/common/eal_common_log.c
++++ dpdk/lib/librte_eal/common/eal_common_log.c
+@@ -31,54 +31,16 @@
+  *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  */
+-#include <string.h>
+ #include <stdio.h>
+ #include <stdint.h>
+ #include <stdarg.h>
+-#include <sys/types.h>
+ #include <stdlib.h>
+-#include <unistd.h>
+-#include <inttypes.h>
+-#include <errno.h>
+-#include <sys/queue.h>
+ #include <rte_log.h>
+-#include <rte_memory.h>
+-#include <rte_memzone.h>
+-#include <rte_launch.h>
+-#include <rte_common.h>
+-#include <rte_cycles.h>
+-#include <rte_eal.h>
+ #include <rte_per_lcore.h>
+-#include <rte_lcore.h>
+-#include <rte_atomic.h>
+-#include <rte_debug.h>
+-#include <rte_spinlock.h>
+-#include <rte_branch_prediction.h>
+-#include <rte_ring.h>
+-#include <rte_mempool.h>
+ #include "eal_private.h"
+-#define LOG_ELT_SIZE     2048
+-
+-#define LOG_HISTORY_MP_NAME "log_history"
+-
+-STAILQ_HEAD(log_history_list, log_history);
+-
+-/**
+- * The structure of a message log in the log history.
+- */
+-struct log_history {
+-      STAILQ_ENTRY(log_history) next;
+-      unsigned size;
+-      char buf[0];
+-};
+-
+-static struct rte_mempool *log_history_mp = NULL;
+-static unsigned log_history_size = 0;
+-static struct log_history_list log_history;
+-
+ /* global log structure */
+ struct rte_logs rte_logs = {
+       .type = ~0,
+@@ -86,10 +48,7 @@ struct rte_logs rte_logs = {
+       .file = NULL,
+ };
+-static rte_spinlock_t log_dump_lock = RTE_SPINLOCK_INITIALIZER;
+-static rte_spinlock_t log_list_lock = RTE_SPINLOCK_INITIALIZER;
+ static FILE *default_log_stream;
+-static int history_enabled = 1;
+ /**
+  * This global structure stores some informations about the message
+@@ -105,59 +64,16 @@ static struct log_cur_msg log_cur_msg[RT
+ /* default logs */
+ int
+-rte_log_add_in_history(const char *buf, size_t size)
++rte_log_add_in_history(const char *buf __rte_unused, size_t size __rte_unused)
+ {
+-      struct log_history *hist_buf = NULL;
+-      static const unsigned hist_buf_size = LOG_ELT_SIZE - sizeof(*hist_buf);
+-      void *obj;
+-
+-      if (history_enabled == 0)
+-              return 0;
+-
+-      rte_spinlock_lock(&log_list_lock);
+-
+-      /* get a buffer for adding in history */
+-      if (log_history_size > RTE_LOG_HISTORY) {
+-              hist_buf = STAILQ_FIRST(&log_history);
+-              if (hist_buf) {
+-                      STAILQ_REMOVE_HEAD(&log_history, next);
+-                      log_history_size--;
+-              }
+-      }
+-      else {
+-              if (rte_mempool_mc_get(log_history_mp, &obj) < 0)
+-                      obj = NULL;
+-              hist_buf = obj;
+-      }
+-
+-      /* no buffer */
+-      if (hist_buf == NULL) {
+-              rte_spinlock_unlock(&log_list_lock);
+-              return -ENOBUFS;
+-      }
+-
+-      /* not enough room for msg, buffer go back in mempool */
+-      if (size >= hist_buf_size) {
+-              rte_mempool_mp_put(log_history_mp, hist_buf);
+-              rte_spinlock_unlock(&log_list_lock);
+-              return -ENOBUFS;
+-      }
+-
+-      /* add in history */
+-      memcpy(hist_buf->buf, buf, size);
+-      hist_buf->buf[size] = hist_buf->buf[hist_buf_size-1] = '\0';
+-      hist_buf->size = size;
+-      STAILQ_INSERT_TAIL(&log_history, hist_buf, next);
+-      log_history_size++;
+-      rte_spinlock_unlock(&log_list_lock);
+-
+       return 0;
+ }
+ void
+ rte_log_set_history(int enable)
+ {
+-      history_enabled = enable;
++      if (enable)
++              RTE_LOG(WARNING, EAL, "The log history is deprecated.\n");
+ }
+ /* Change the stream that will be used by logging system */
+@@ -224,44 +140,8 @@ int rte_log_cur_msg_logtype(void)
+ /* Dump log history to file */
+ void
+-rte_log_dump_history(FILE *out)
++rte_log_dump_history(FILE *out __rte_unused)
+ {
+-      struct log_history_list tmp_log_history;
+-      struct log_history *hist_buf;
+-      unsigned i;
+-
+-      /* only one dump at a time */
+-      rte_spinlock_lock(&log_dump_lock);
+-
+-      /* save list, and re-init to allow logging during dump */
+-      rte_spinlock_lock(&log_list_lock);
+-      tmp_log_history = log_history;
+-      STAILQ_INIT(&log_history);
+-      log_history_size = 0;
+-      rte_spinlock_unlock(&log_list_lock);
+-
+-      for (i=0; i<RTE_LOG_HISTORY; i++) {
+-
+-              /* remove one message from history list */
+-              hist_buf = STAILQ_FIRST(&tmp_log_history);
+-
+-              if (hist_buf == NULL)
+-                      break;
+-
+-              STAILQ_REMOVE_HEAD(&tmp_log_history, next);
+-
+-              /* write on stdout */
+-              if (fwrite(hist_buf->buf, hist_buf->size, 1, out) == 0) {
+-                      rte_mempool_mp_put(log_history_mp, hist_buf);
+-                      break;
+-              }
+-
+-              /* put back message structure in pool */
+-              rte_mempool_mp_put(log_history_mp, hist_buf);
+-      }
+-      fflush(out);
+-
+-      rte_spinlock_unlock(&log_dump_lock);
+ }
+ /*
+@@ -308,29 +188,11 @@ rte_log(uint32_t level, uint32_t logtype
+ }
+ /*
+- * called by environment-specific log init function to initialize log
+- * history
++ * called by environment-specific log init function
+  */
+ int
+ rte_eal_common_log_init(FILE *default_log)
+ {
+-      STAILQ_INIT(&log_history);
+-
+-      /* reserve RTE_LOG_HISTORY*2 elements, so we can dump and
+-       * keep logging during this time */
+-      log_history_mp = rte_mempool_create(LOG_HISTORY_MP_NAME, RTE_LOG_HISTORY*2,
+-                              LOG_ELT_SIZE, 0, 0,
+-                              NULL, NULL,
+-                              NULL, NULL,
+-                              SOCKET_ID_ANY, 0);
+-
+-      if ((log_history_mp == NULL) &&
+-          ((log_history_mp = rte_mempool_lookup(LOG_HISTORY_MP_NAME)) == NULL)){
+-              RTE_LOG(ERR, EAL, "%s(): cannot create log_history mempool\n",
+-                      __func__);
+-              return -1;
+-      }
+-
+       default_log_stream = default_log;
+       rte_openlog_stream(default_log);
+       return 0;
+Index: dpdk/lib/librte_eal/common/eal_private.h
+===================================================================
+--- dpdk.orig/lib/librte_eal/common/eal_private.h
++++ dpdk/lib/librte_eal/common/eal_private.h
+@@ -49,9 +49,6 @@ int rte_eal_memzone_init(void);
+ /**
+  * Common log initialization function (private to eal).
+  *
+- * Called by environment-specific log initialization function to initialize
+- * log history.
+- *
+  * @param default_log
+  *   The default log stream to be used.
+  * @return
+Index: dpdk/lib/librte_eal/common/include/rte_log.h
+===================================================================
+--- dpdk.orig/lib/librte_eal/common/include/rte_log.h
++++ dpdk/lib/librte_eal/common/include/rte_log.h
+@@ -42,6 +42,8 @@
+  * This file provides a log API to RTE applications.
+  */
++#include "rte_common.h" /* for __rte_deprecated macro */
++
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+@@ -179,22 +181,27 @@ int rte_log_cur_msg_loglevel(void);
+ int rte_log_cur_msg_logtype(void);
+ /**
++ * @deprecated
+  * Enable or disable the history (enabled by default)
+  *
+  * @param enable
+  *   true to enable, or 0 to disable history.
+  */
++__rte_deprecated
+ void rte_log_set_history(int enable);
+ /**
++ * @deprecated
+  * Dump the log history to a file
+  *
+  * @param f
+  *   A pointer to a file for output
+  */
++__rte_deprecated
+ void rte_log_dump_history(FILE *f);
+ /**
++ * @deprecated
+  * Add a log message to the history.
+  *
+  * This function can be called from a user-defined log stream. It adds
+@@ -209,6 +216,7 @@ void rte_log_dump_history(FILE *f);
+  *   - 0: Success.
+  *   - (-ENOBUFS) if there is no room to store the message.
+  */
++__rte_deprecated
+ int rte_log_add_in_history(const char *buf, size_t size);
+ /**
+Index: dpdk/lib/librte_eal/linuxapp/eal/eal_debug.c
+===================================================================
+--- dpdk.orig/lib/librte_eal/linuxapp/eal/eal_debug.c
++++ dpdk/lib/librte_eal/linuxapp/eal/eal_debug.c
+@@ -77,9 +77,6 @@ void __rte_panic(const char *funcname, c
+ {
+       va_list ap;
+-      /* disable history */
+-      rte_log_set_history(0);
+-
+       rte_log(RTE_LOG_CRIT, RTE_LOGTYPE_EAL, "PANIC in %s():\n", funcname);
+       va_start(ap, format);
+       rte_vlog(RTE_LOG_CRIT, RTE_LOGTYPE_EAL, format, ap);
+@@ -98,9 +95,6 @@ rte_exit(int exit_code, const char *form
+ {
+       va_list ap;
+-      /* disable history */
+-      rte_log_set_history(0);
+-
+       if (exit_code != 0)
+               RTE_LOG(CRIT, EAL, "Error - exiting with code: %d\n"
+                               "  Cause: ", exit_code);
+Index: dpdk/lib/librte_eal/linuxapp/eal/eal_log.c
+===================================================================
+--- dpdk.orig/lib/librte_eal/linuxapp/eal/eal_log.c
++++ dpdk/lib/librte_eal/linuxapp/eal/eal_log.c
+@@ -50,8 +50,7 @@
+ #include "eal_private.h"
+ /*
+- * default log function, used once mempool (hence log history) is
+- * available
++ * default log function
+  */
+ static ssize_t
+ console_log_write(__attribute__((unused)) void *c, const char *buf, size_t size)
+@@ -60,9 +59,6 @@ console_log_write(__attribute__((unused)
+       ssize_t ret;
+       uint32_t loglevel;
+-      /* add this log in history */
+-      rte_log_add_in_history(buf, size);
+-
+       /* write on stdout */
+       ret = fwrite(buf, 1, size, stdout);
+       fflush(stdout);
+@@ -110,8 +106,7 @@ rte_eal_log_init(const char *id, int fac
+ /* early logs */
+ /*
+- * early log function, used during boot when mempool (hence log
+- * history) is not available
++ * early log function, used before rte_eal_log_init
+  */
+ static ssize_t
+ early_log_write(__attribute__((unused)) void *c, const char *buf, size_t size)
+Index: dpdk/lib/librte_eal/linuxapp/eal/Makefile
+===================================================================
+--- dpdk.orig/lib/librte_eal/linuxapp/eal/Makefile
++++ dpdk/lib/librte_eal/linuxapp/eal/Makefile
+@@ -44,9 +44,12 @@ VPATH += $(RTE_SDK)/lib/librte_eal/commo
+ CFLAGS += -I$(SRCDIR)/include
+ CFLAGS += -I$(RTE_SDK)/lib/librte_eal/common
+ CFLAGS += -I$(RTE_SDK)/lib/librte_eal/common/include
++ifeq ($(CONFIG_RTE_LIBRTE_IVSHMEM),y)
++# workaround for circular dependency eal -> ivshmem -> ring/mempool -> eal
+ CFLAGS += -I$(RTE_SDK)/lib/librte_ring
+ CFLAGS += -I$(RTE_SDK)/lib/librte_mempool
+ CFLAGS += -I$(RTE_SDK)/lib/librte_ivshmem
++endif
+ CFLAGS += $(WERROR_FLAGS) -O3
+ LDLIBS += -ldl
+Index: dpdk/lib/librte_eal/linuxapp/eal/eal_interrupts.c
+===================================================================
+--- dpdk.orig/lib/librte_eal/linuxapp/eal/eal_interrupts.c
++++ dpdk/lib/librte_eal/linuxapp/eal/eal_interrupts.c
+@@ -57,10 +57,8 @@
+ #include <rte_lcore.h>
+ #include <rte_atomic.h>
+ #include <rte_branch_prediction.h>
+-#include <rte_ring.h>
+ #include <rte_debug.h>
+ #include <rte_log.h>
+-#include <rte_mempool.h>
+ #include <rte_pci.h>
+ #include <rte_malloc.h>
+ #include <rte_errno.h>
+Index: dpdk/lib/librte_eal/linuxapp/eal/eal_ivshmem.c
+===================================================================
+--- dpdk.orig/lib/librte_eal/linuxapp/eal/eal_ivshmem.c
++++ dpdk/lib/librte_eal/linuxapp/eal/eal_ivshmem.c
+@@ -49,7 +49,6 @@
+ #include <rte_string_fns.h>
+ #include <rte_errno.h>
+ #include <rte_ring.h>
+-#include <rte_mempool.h>
+ #include <rte_malloc.h>
+ #include <rte_common.h>
+ #include <rte_ivshmem.h>
+Index: dpdk/lib/librte_ivshmem/Makefile
+===================================================================
+--- dpdk.orig/lib/librte_ivshmem/Makefile
++++ dpdk/lib/librte_ivshmem/Makefile
+@@ -46,7 +46,9 @@ SRCS-$(CONFIG_RTE_LIBRTE_IVSHMEM) := rte
+ # install includes
+ SYMLINK-$(CONFIG_RTE_LIBRTE_IVSHMEM)-include := rte_ivshmem.h
+-# this lib needs eal
++# this lib needs EAL, ring and mempool
++DEPDIRS-$(CONFIG_RTE_LIBRTE_IVSHMEM) += lib/librte_eal
++DEPDIRS-$(CONFIG_RTE_LIBRTE_IVSHMEM) += lib/librte_ring
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_IVSHMEM) += lib/librte_mempool
+ include $(RTE_SDK)/mk/rte.lib.mk
diff --git a/debian/patches/ubuntu-backport-40-linking-fixes-stage-3-4.patch b/debian/patches/ubuntu-backport-40-linking-fixes-stage-3-4.patch
new file mode 100644 (file)
index 0000000..161832e
--- /dev/null
@@ -0,0 +1,217 @@
+Description: backport of dpdk 16.07 fix for library underlinking - stage 3/4
+
+This is a merge of related upstream fixes:
+- cb8e39da mk: sort drivers in static application link list
+- ea469893 mk: fix driver dependencies order for static application
+- 4e04fd45 mk: remove library grouping during application linking
+- 6248e442 mk: prevent overlinking in applications
+- ce18c527 mk: sort libraries in level order when linking
+- 95dc3c3c mk: reduce scope of whole-archive static linking
+
+Forwarded: yes (in DPDK 16.07)
+Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
+Last-Update: 2016-06-14
+
+Index: dpdk/mk/rte.app.mk
+===================================================================
+--- dpdk.orig/mk/rte.app.mk
++++ dpdk/mk/rte.app.mk
+@@ -50,6 +50,9 @@ ifeq ($(NO_LDSCRIPT),)
+ LDSCRIPT = $(RTE_LDSCRIPT)
+ endif
++# Link only the libraries used in the application
++LDFLAGS += --as-needed
++
+ # default path for libs
+ _LDLIBS-y += -L$(RTE_SDK_BIN)/lib
+@@ -57,11 +60,6 @@ _LDLIBS-y += -L$(RTE_SDK_BIN)/lib
+ # Order is important: from higher level to lower level
+ #
+-_LDLIBS-y += --whole-archive
+-
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_DISTRIBUTOR)    += -lrte_distributor
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_REORDER)        += -lrte_reorder
+-
+ ifeq ($(CONFIG_RTE_EXEC_ENV_LINUXAPP),y)
+ _LDLIBS-$(CONFIG_RTE_LIBRTE_KNI)            += -lrte_kni
+ _LDLIBS-$(CONFIG_RTE_LIBRTE_IVSHMEM)        += -lrte_ivshmem
+@@ -70,51 +68,25 @@ endif
+ _LDLIBS-$(CONFIG_RTE_LIBRTE_PIPELINE)       += -lrte_pipeline
+ _LDLIBS-$(CONFIG_RTE_LIBRTE_TABLE)          += -lrte_table
+ _LDLIBS-$(CONFIG_RTE_LIBRTE_PORT)           += -lrte_port
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_TIMER)          += -lrte_timer
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_HASH)           += -lrte_hash
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_JOBSTATS)       += -lrte_jobstats
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_LPM)            += -lrte_lpm
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_POWER)          += -lrte_power
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_ACL)            += -lrte_acl
++
++_LDLIBS-$(CONFIG_RTE_LIBRTE_DISTRIBUTOR)    += -lrte_distributor
++_LDLIBS-$(CONFIG_RTE_LIBRTE_REORDER)        += -lrte_reorder
++_LDLIBS-$(CONFIG_RTE_LIBRTE_IP_FRAG)        += -lrte_ip_frag
+ _LDLIBS-$(CONFIG_RTE_LIBRTE_METER)          += -lrte_meter
+ _LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lrte_sched
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST)          += -lrte_vhost
++_LDLIBS-$(CONFIG_RTE_LIBRTE_LPM)            += -lrte_lpm
++_LDLIBS-$(CONFIG_RTE_LIBRTE_ACL)            += -lrte_acl
++_LDLIBS-$(CONFIG_RTE_LIBRTE_JOBSTATS)       += -lrte_jobstats
++_LDLIBS-$(CONFIG_RTE_LIBRTE_POWER)          += -lrte_power
+-# The static libraries do not know their dependencies.
+-# So linking with static library requires explicit dependencies.
+-ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),n)
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lm
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lrt
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_METER)          += -lm
+-ifeq ($(CONFIG_RTE_LIBRTE_VHOST_NUMA),y)
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST)          += -lnuma
+-endif
+-ifeq ($(CONFIG_RTE_LIBRTE_VHOST_USER),n)
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST)          += -lfuse
+-endif
+-_LDLIBS-$(CONFIG_RTE_PORT_PCAP)             += -lpcap
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_PCAP)       += -lpcap
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_BNX2X_PMD)      += -lz
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_MLX4_PMD)       += -libverbs
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_MLX5_PMD)       += -libverbs
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_SZEDATA2)   += -lsze2
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_XENVIRT)    += -lxenstore
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_MPIPE_PMD)      += -lgxio
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_NFP_PMD)        += -lm
+-# QAT / AESNI GCM PMDs are dependent on libcrypto (from openssl)
+-# for calculating HMAC precomputes
+-ifeq ($(CONFIG_RTE_LIBRTE_PMD_QAT),y)
+-_LDLIBS-y                                   += -lcrypto
+-else ifeq ($(CONFIG_RTE_LIBRTE_PMD_AESNI_GCM),y)
+-_LDLIBS-y                                   += -lcrypto
+-endif
+-endif # !CONFIG_RTE_BUILD_SHARED_LIBS
++_LDLIBS-y += --whole-archive
+-_LDLIBS-y += --start-group
++_LDLIBS-$(CONFIG_RTE_LIBRTE_TIMER)          += -lrte_timer
++_LDLIBS-$(CONFIG_RTE_LIBRTE_HASH)           += -lrte_hash
++_LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST)          += -lrte_vhost
+ _LDLIBS-$(CONFIG_RTE_LIBRTE_KVARGS)         += -lrte_kvargs
+ _LDLIBS-$(CONFIG_RTE_LIBRTE_MBUF)           += -lrte_mbuf
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_IP_FRAG)        += -lrte_ip_frag
+ _LDLIBS-$(CONFIG_RTE_LIBRTE_ETHER)          += -lethdev
+ _LDLIBS-$(CONFIG_RTE_LIBRTE_CRYPTODEV)      += -lrte_cryptodev
+ _LDLIBS-$(CONFIG_RTE_LIBRTE_MEMPOOL)        += -lrte_mempool
+@@ -123,61 +95,65 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_EAL)
+ _LDLIBS-$(CONFIG_RTE_LIBRTE_CMDLINE)        += -lrte_cmdline
+ _LDLIBS-$(CONFIG_RTE_LIBRTE_CFGFILE)        += -lrte_cfgfile
+ _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_BOND)       += -lrte_pmd_bond
+-
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_XENVIRT)    += -lrte_pmd_xenvirt
++_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_XENVIRT)    += -lrte_pmd_xenvirt -lxenstore
+ ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),n)
+ # plugins (link only if static libraries)
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_VMXNET3_PMD)    += -lrte_pmd_vmxnet3_uio
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD)     += -lrte_pmd_virtio
++_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AF_PACKET)  += -lrte_pmd_af_packet
+ _LDLIBS-$(CONFIG_RTE_LIBRTE_BNX2X_PMD)      += -lrte_pmd_bnx2x
+ _LDLIBS-$(CONFIG_RTE_LIBRTE_CXGBE_PMD)      += -lrte_pmd_cxgbe
++_LDLIBS-$(CONFIG_RTE_LIBRTE_E1000_PMD)      += -lrte_pmd_e1000
++_LDLIBS-$(CONFIG_RTE_LIBRTE_ENA_PMD)        += -lrte_pmd_ena
+ _LDLIBS-$(CONFIG_RTE_LIBRTE_ENIC_PMD)       += -lrte_pmd_enic
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_I40E_PMD)       += -lrte_pmd_i40e
+ _LDLIBS-$(CONFIG_RTE_LIBRTE_FM10K_PMD)      += -lrte_pmd_fm10k
++_LDLIBS-$(CONFIG_RTE_LIBRTE_I40E_PMD)       += -lrte_pmd_i40e
+ _LDLIBS-$(CONFIG_RTE_LIBRTE_IXGBE_PMD)      += -lrte_pmd_ixgbe
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_E1000_PMD)      += -lrte_pmd_e1000
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_ENA_PMD)        += -lrte_pmd_ena
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_MLX4_PMD)       += -lrte_pmd_mlx4
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_MLX5_PMD)       += -lrte_pmd_mlx5
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_NFP_PMD)        += -lrte_pmd_nfp
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_SZEDATA2)   += -lrte_pmd_szedata2
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_MPIPE_PMD)      += -lrte_pmd_mpipe
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_RING)       += -lrte_pmd_ring
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_PCAP)       += -lrte_pmd_pcap
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AF_PACKET)  += -lrte_pmd_af_packet
++_LDLIBS-$(CONFIG_RTE_LIBRTE_MLX4_PMD)       += -lrte_pmd_mlx4 -libverbs
++_LDLIBS-$(CONFIG_RTE_LIBRTE_MLX5_PMD)       += -lrte_pmd_mlx5 -libverbs
++_LDLIBS-$(CONFIG_RTE_LIBRTE_MPIPE_PMD)      += -lrte_pmd_mpipe -lgxio
++_LDLIBS-$(CONFIG_RTE_LIBRTE_NFP_PMD)        += -lrte_pmd_nfp -lm
+ _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_NULL)       += -lrte_pmd_null
++_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_PCAP)       += -lrte_pmd_pcap -lpcap
++_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_RING)       += -lrte_pmd_ring
++_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_SZEDATA2)   += -lrte_pmd_szedata2 -lsze2
++_LDLIBS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD)     += -lrte_pmd_virtio
++ifeq ($(CONFIG_RTE_LIBRTE_VHOST),y)
++_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_VHOST)      += -lrte_pmd_vhost
++endif # $(CONFIG_RTE_LIBRTE_VHOST)
++_LDLIBS-$(CONFIG_RTE_LIBRTE_VMXNET3_PMD)    += -lrte_pmd_vmxnet3_uio
+ ifeq ($(CONFIG_RTE_LIBRTE_CRYPTODEV),y)
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_QAT)        += -lrte_pmd_qat
+ _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_MB)   += -lrte_pmd_aesni_mb
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_GCM)   += -lrte_pmd_aesni_gcm
++_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_MB)   += -L$(AESNI_MULTI_BUFFER_LIB_PATH) -lIPSec_MB
++_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_GCM)  += -lrte_pmd_aesni_gcm
++_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_GCM)  += -L$(AESNI_MULTI_BUFFER_LIB_PATH) -lIPSec_MB
+ _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_NULL_CRYPTO) += -lrte_pmd_null_crypto
+-
+-# AESNI MULTI BUFFER / GCM PMDs are dependent on the IPSec_MB library
+-ifeq ($(CONFIG_RTE_LIBRTE_PMD_AESNI_MB),y)
+-_LDLIBS-y += -L$(AESNI_MULTI_BUFFER_LIB_PATH) -lIPSec_MB
+-else ifeq ($(CONFIG_RTE_LIBRTE_PMD_AESNI_GCM),y)
+-_LDLIBS-y += -L$(AESNI_MULTI_BUFFER_LIB_PATH) -lIPSec_MB
+-endif
+-
+-# SNOW3G PMD is dependent on the LIBSSO library
++_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_QAT)        += -lrte_pmd_qat
+ _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_SNOW3G)     += -lrte_pmd_snow3g
+ _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_SNOW3G)     += -L$(LIBSSO_PATH)/build -lsso
+ endif # CONFIG_RTE_LIBRTE_CRYPTODEV
+-ifeq ($(CONFIG_RTE_LIBRTE_VHOST),y)
+-
+-_LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_VHOST)      += -lrte_pmd_vhost
++endif # !CONFIG_RTE_BUILD_SHARED_LIBS
+-endif # $(CONFIG_RTE_LIBRTE_VHOST)
++_LDLIBS-y += --no-whole-archive
+-endif # ! $(CONFIG_RTE_BUILD_SHARED_LIB)
++ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),n)
++# The static libraries do not know their dependencies.
++# So linking with static library requires explicit dependencies.
++_LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lm
++_LDLIBS-$(CONFIG_RTE_LIBRTE_SCHED)          += -lrt
++_LDLIBS-$(CONFIG_RTE_LIBRTE_METER)          += -lm
++ifeq ($(CONFIG_RTE_LIBRTE_VHOST_NUMA),y)
++_LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST)          += -lnuma
++endif
++ifeq ($(CONFIG_RTE_LIBRTE_VHOST_USER),n)
++_LDLIBS-$(CONFIG_RTE_LIBRTE_VHOST)          += -lfuse
++endif
++_LDLIBS-$(CONFIG_RTE_PORT_PCAP)             += -lpcap
++endif # !CONFIG_RTE_BUILD_SHARED_LIBS
+ _LDLIBS-y += $(EXECENV_LDLIBS)
+-_LDLIBS-y += --end-group
+-_LDLIBS-y += --no-whole-archive
+ LDLIBS += $(_LDLIBS-y) $(CPU_LDLIBS) $(EXTRA_LDLIBS)
+Index: dpdk/mk/exec-env/linuxapp/rte.vars.mk
+===================================================================
+--- dpdk.orig/mk/exec-env/linuxapp/rte.vars.mk
++++ dpdk/mk/exec-env/linuxapp/rte.vars.mk
+@@ -45,9 +45,6 @@ else
+ EXECENV_CFLAGS  = -pthread
+ endif
+-# Workaround lack of DT_NEEDED entry
+-EXECENV_LDFLAGS = --no-as-needed
+-
+ EXECENV_LDLIBS  =
+ EXECENV_ASFLAGS =
diff --git a/debian/patches/ubuntu-backport-40-linking-fixes-stage-4-4.patch b/debian/patches/ubuntu-backport-40-linking-fixes-stage-4-4.patch
new file mode 100644 (file)
index 0000000..188ee2b
--- /dev/null
@@ -0,0 +1,149 @@
+Description: backport of dpdk 16.07 fix for library underlinking - stage 4/4
+
+This is a merge of related upstream fixes:
+- 473b718f mk: fix vhost dependency to pthread
+- 6cbf4f75 mk: fix missing internal dependencies
+
+Forwarded: yes (in DPDK 16.07)
+Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
+Last-Update: 2016-06-14
+
+Index: dpdk/drivers/net/vhost/Makefile
+===================================================================
+--- dpdk.orig/drivers/net/vhost/Makefile
++++ dpdk/drivers/net/vhost/Makefile
+@@ -36,6 +36,8 @@ include $(RTE_SDK)/mk/rte.vars.mk
+ #
+ LIB = librte_pmd_vhost.a
++LDLIBS += -lpthread
++
+ CFLAGS += -O3
+ CFLAGS += $(WERROR_FLAGS)
+@@ -54,6 +56,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_PMD_VHOST) += r
+ SYMLINK-y-include += rte_eth_vhost.h
+ # this lib depends upon:
++DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_VHOST) += lib/librte_eal
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_VHOST) += lib/librte_mbuf
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_VHOST) += lib/librte_ether
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_VHOST) += lib/librte_kvargs
+Index: dpdk/drivers/crypto/null/Makefile
+===================================================================
+--- dpdk.orig/drivers/crypto/null/Makefile
++++ dpdk/drivers/crypto/null/Makefile
+@@ -55,5 +55,7 @@ SYMLINK-y-include +=
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_NULL_CRYPTO) += lib/librte_eal
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_NULL_CRYPTO) += lib/librte_mbuf
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_NULL_CRYPTO) += lib/librte_cryptodev
++DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_NULL_CRYPTO) += lib/librte_ring
++DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_NULL_CRYPTO) += lib/librte_kvargs
+ include $(RTE_SDK)/mk/rte.lib.mk
+Index: dpdk/drivers/net/af_packet/Makefile
+===================================================================
+--- dpdk.orig/drivers/net/af_packet/Makefile
++++ dpdk/drivers/net/af_packet/Makefile
+@@ -51,6 +51,7 @@ CFLAGS += $(WERROR_FLAGS)
+ SRCS-$(CONFIG_RTE_LIBRTE_PMD_AF_PACKET) += rte_eth_af_packet.c
+ # this lib depends upon:
++DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_AF_PACKET) += lib/librte_eal
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_AF_PACKET) += lib/librte_mbuf
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_AF_PACKET) += lib/librte_ether
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_AF_PACKET) += lib/librte_kvargs
+Index: dpdk/drivers/net/bonding/Makefile
+===================================================================
+--- dpdk.orig/drivers/net/bonding/Makefile
++++ dpdk/drivers/net/bonding/Makefile
+@@ -64,5 +64,7 @@ DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_BOND) +=
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_BOND) += lib/librte_eal
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_BOND) += lib/librte_kvargs
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_BOND) += lib/librte_cmdline
++DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_BOND) += lib/librte_mempool
++DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_BOND) += lib/librte_ring
+ include $(RTE_SDK)/mk/rte.lib.mk
+Index: dpdk/drivers/net/fm10k/Makefile
+===================================================================
+--- dpdk.orig/drivers/net/fm10k/Makefile
++++ dpdk/drivers/net/fm10k/Makefile
+@@ -99,5 +99,6 @@ SRCS-$(CONFIG_RTE_LIBRTE_FM10K_INC_VECTO
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_FM10K_PMD) += lib/librte_eal lib/librte_ether
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_FM10K_PMD) += lib/librte_mempool lib/librte_mbuf
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_FM10K_PMD) += lib/librte_net
++DEPDIRS-$(CONFIG_RTE_LIBRTE_FM10K_PMD) += lib/librte_kvargs
+ include $(RTE_SDK)/mk/rte.lib.mk
+Index: dpdk/drivers/net/null/Makefile
+===================================================================
+--- dpdk.orig/drivers/net/null/Makefile
++++ dpdk/drivers/net/null/Makefile
+@@ -54,6 +54,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_PMD_NULL) += rt
+ SYMLINK-y-include += rte_eth_null.h
+ # this lib depends upon:
++DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_NULL) += lib/librte_eal
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_NULL) += lib/librte_mbuf
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_NULL) += lib/librte_ether
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_NULL) += lib/librte_kvargs
+Index: dpdk/drivers/net/pcap/Makefile
+===================================================================
+--- dpdk.orig/drivers/net/pcap/Makefile
++++ dpdk/drivers/net/pcap/Makefile
+@@ -56,6 +56,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_PMD_PCAP) += rt
+ SYMLINK-y-include +=
+ # this lib depends upon:
++DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_PCAP) += lib/librte_eal
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_PCAP) += lib/librte_mbuf
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_PCAP) += lib/librte_ether
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_PMD_PCAP) += lib/librte_kvargs
+Index: dpdk/lib/librte_ip_frag/Makefile
+===================================================================
+--- dpdk.orig/lib/librte_ip_frag/Makefile
++++ dpdk/lib/librte_ip_frag/Makefile
+@@ -54,6 +54,7 @@ SYMLINK-$(CONFIG_RTE_LIBRTE_IP_FRAG)-inc
+ # this library depends on rte_ether
++DEPDIRS-$(CONFIG_RTE_LIBRTE_IP_FRAG) += lib/librte_eal
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_IP_FRAG) += lib/librte_mempool lib/librte_ether
+ include $(RTE_SDK)/mk/rte.lib.mk
+Index: dpdk/lib/librte_pipeline/Makefile
+===================================================================
+--- dpdk.orig/lib/librte_pipeline/Makefile
++++ dpdk/lib/librte_pipeline/Makefile
+@@ -52,6 +52,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_PIPELINE) := rt
+ SYMLINK-$(CONFIG_RTE_LIBRTE_PIPELINE)-include += rte_pipeline.h
+ # this lib depends upon:
++DEPDIRS-$(CONFIG_RTE_LIBRTE_PIPELINE) += lib/librte_eal
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_PIPELINE) := lib/librte_table
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_PIPELINE) += lib/librte_port
+Index: dpdk/lib/librte_port/Makefile
+===================================================================
+--- dpdk.orig/lib/librte_port/Makefile
++++ dpdk/lib/librte_port/Makefile
+@@ -75,5 +75,6 @@ DEPDIRS-$(CONFIG_RTE_LIBRTE_PORT) += lib
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_PORT) += lib/librte_mempool
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_PORT) += lib/librte_ether
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_PORT) += lib/librte_ip_frag
++DEPDIRS-$(CONFIG_RTE_LIBRTE_PORT) += lib/librte_sched
+ include $(RTE_SDK)/mk/rte.lib.mk
+Index: dpdk/lib/librte_sched/Makefile
+===================================================================
+--- dpdk.orig/lib/librte_sched/Makefile
++++ dpdk/lib/librte_sched/Makefile
+@@ -59,6 +59,7 @@ SYMLINK-$(CONFIG_RTE_LIBRTE_SCHED)-inclu
+ SYMLINK-$(CONFIG_RTE_LIBRTE_SCHED)-include += rte_reciprocal.h
+ # this lib depends upon:
++DEPDIRS-$(CONFIG_RTE_LIBRTE_SCHED) += lib/librte_eal
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_SCHED) += lib/librte_mempool lib/librte_mbuf
+ DEPDIRS-$(CONFIG_RTE_LIBRTE_SCHED) += lib/librte_net lib/librte_timer
diff --git a/debian/patches/ubuntu-backport-41-fix-install-tar-1.29.patch b/debian/patches/ubuntu-backport-41-fix-install-tar-1.29.patch
new file mode 100644 (file)
index 0000000..e485e52
--- /dev/null
@@ -0,0 +1,25 @@
+Description: backport of dpdk 16.07 fix for tar >=1.29
+
+This is a backport of:
+- dd9ae4c7 mk: fix install with tar 1.29
+
+Forwarded: yes (in DPDK 16.07)
+Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
+Last-Update: 2016-06-14
+
+Index: dpdk/mk/rte.sdkinstall.mk
+===================================================================
+--- dpdk.orig/mk/rte.sdkinstall.mk
++++ dpdk/mk/rte.sdkinstall.mk
+@@ -116,9 +116,9 @@ install-runtime:
+       $(Q)$(call rte_mkdir, $(DESTDIR)$(libdir))
+       $(Q)cp -a    $O/lib/* $(DESTDIR)$(libdir)
+       $(Q)$(call rte_mkdir, $(DESTDIR)$(bindir))
+-      $(Q)tar -cf -      -C $O app  --exclude 'app/*.map' \
++      $(Q)tar -cf -      -C $O --exclude 'app/*.map' \
+               --exclude 'app/cmdline*' --exclude app/test \
+-              --exclude app/testacl --exclude app/testpipeline | \
++              --exclude app/testacl --exclude app/testpipeline app | \
+           tar -xf -      -C $(DESTDIR)$(bindir) --strip-components=1 \
+               --keep-newer-files --warning=no-ignore-newer
+       $(Q)$(call rte_mkdir,      $(DESTDIR)$(datadir))
diff --git a/debian/patches/ubuntu-backport-42-increase-default-logging-level.patch b/debian/patches/ubuntu-backport-42-increase-default-logging-level.patch
new file mode 100644 (file)
index 0000000..de64103
--- /dev/null
@@ -0,0 +1,81 @@
+Index: dpdk/config/common_base
+===================================================================
+--- dpdk.orig/config/common_base
++++ dpdk/config/common_base
+@@ -88,7 +88,7 @@ CONFIG_RTE_MAX_NUMA_NODES=8
+ CONFIG_RTE_MAX_MEMSEG=256
+ CONFIG_RTE_MAX_MEMZONE=2560
+ CONFIG_RTE_MAX_TAILQ=32
+-CONFIG_RTE_LOG_LEVEL=8
++CONFIG_RTE_LOG_LEVEL=RTE_LOG_INFO
+ CONFIG_RTE_LOG_HISTORY=256
+ CONFIG_RTE_LIBEAL_USE_HPET=n
+ CONFIG_RTE_EAL_ALLOW_INV_SOCKET_ID=n
+Index: dpdk/doc/guides/faq/faq.rst
+===================================================================
+--- dpdk.orig/doc/guides/faq/faq.rst
++++ dpdk/doc/guides/faq/faq.rst
+@@ -88,9 +88,7 @@ the wrong socket, the application simply
+ On application startup, there is a lot of EAL information printed. Is there any way to reduce this?
+ ---------------------------------------------------------------------------------------------------
+-Yes, each EAL has a configuration file that is located in the /config directory. Within each configuration file, you will find CONFIG_RTE_LOG_LEVEL=8.
+-You can change this to a lower value, such as 6 to reduce this printout of debug information. The following is a list of LOG levels that can be found in the rte_log.h file.
+-You must remove, then rebuild, the EAL directory for the change to become effective as the configuration file creates the rte_config.h file in the EAL directory.
++Yes, the option ``--log-level=`` accepts one of these numbers:
+ .. code-block:: c
+@@ -103,6 +101,9 @@ You must remove, then rebuild, the EAL d
+     #define RTE_LOG_INFO 7U     /* Informational. */
+     #define RTE_LOG_DEBUG 8U    /* Debug-level messages. */
++It is also possible to change the maximum (and default level) at compile time
++with ``CONFIG_RTE_LOG_LEVEL``.
++
+ How can I tune my network application to achieve lower latency?
+ ---------------------------------------------------------------
+Index: dpdk/lib/librte_eal/common/eal_common_log.c
+===================================================================
+--- dpdk.orig/lib/librte_eal/common/eal_common_log.c
++++ dpdk/lib/librte_eal/common/eal_common_log.c
+@@ -195,5 +195,10 @@ rte_eal_common_log_init(FILE *default_lo
+ {
+       default_log_stream = default_log;
+       rte_openlog_stream(default_log);
++
++#if RTE_LOG_LEVEL >= RTE_LOG_DEBUG
++      RTE_LOG(NOTICE, EAL, "Debug logs available - lower performance\n");
++#endif
++
+       return 0;
+ }
+Index: dpdk/lib/librte_eal/common/eal_common_options.c
+===================================================================
+--- dpdk.orig/lib/librte_eal/common/eal_common_options.c
++++ dpdk/lib/librte_eal/common/eal_common_options.c
+@@ -141,7 +141,11 @@ eal_reset_internal_config(struct interna
+       internal_cfg->syslog_facility = LOG_DAEMON;
+       /* default value from build option */
++#if RTE_LOG_LEVEL >= RTE_LOG_DEBUG
++      internal_cfg->log_level = RTE_LOG_INFO;
++#else
+       internal_cfg->log_level = RTE_LOG_LEVEL;
++#endif
+       internal_cfg->xen_dom0_support = 0;
+Index: dpdk/scripts/test-build.sh
+===================================================================
+--- dpdk.orig/scripts/test-build.sh
++++ dpdk/scripts/test-build.sh
+@@ -138,6 +138,7 @@ config () # <directory> <target> <option
+               ! echo $3 | grep -q '+shared' || \
+               sed -ri         's,(SHARED_LIB=)n,\1y,' $1/.config
+               ! echo $3 | grep -q '+debug' || ( \
++              sed -ri     's,(RTE_LOG_LEVEL=).*,\1RTE_LOG_DEBUG,' $1/.config
+               sed -ri           's,(_DEBUG.*=)n,\1y,' $1/.config
+               sed -ri            's,(_STAT.*=)n,\1y,' $1/.config
+               sed -ri 's,(TEST_PMD_RECORD_.*=)n,\1y,' $1/.config )
diff --git a/debian/patches/ubuntu-backport-43-fix-level-type-retrieving.patch b/debian/patches/ubuntu-backport-43-fix-level-type-retrieving.patch
new file mode 100644 (file)
index 0000000..9a56223
--- /dev/null
@@ -0,0 +1,61 @@
+Index: dpdk/lib/librte_eal/common/eal_common_log.c
+===================================================================
+--- dpdk.orig/lib/librte_eal/common/eal_common_log.c
++++ dpdk/lib/librte_eal/common/eal_common_log.c
+@@ -57,9 +57,10 @@ static FILE *default_log_stream;
+ struct log_cur_msg {
+       uint32_t loglevel; /**< log level - see rte_log.h */
+       uint32_t logtype;  /**< log type  - see rte_log.h */
+-} __rte_cache_aligned;
+-static struct log_cur_msg log_cur_msg[RTE_MAX_LCORE]; /**< per core log */
++};
++ /* per core log */
++static RTE_DEFINE_PER_LCORE(struct log_cur_msg, log_cur_msg);
+ /* default logs */
+@@ -121,21 +122,13 @@ rte_get_log_type(void)
+ /* get the current loglevel for the message beeing processed */
+ int rte_log_cur_msg_loglevel(void)
+ {
+-      unsigned lcore_id;
+-      lcore_id = rte_lcore_id();
+-      if (lcore_id >= RTE_MAX_LCORE)
+-              return rte_get_log_level();
+-      return log_cur_msg[lcore_id].loglevel;
++      return RTE_PER_LCORE(log_cur_msg).loglevel;
+ }
+ /* get the current logtype for the message beeing processed */
+ int rte_log_cur_msg_logtype(void)
+ {
+-      unsigned lcore_id;
+-      lcore_id = rte_lcore_id();
+-      if (lcore_id >= RTE_MAX_LCORE)
+-              return rte_get_log_type();
+-      return log_cur_msg[lcore_id].logtype;
++      return RTE_PER_LCORE(log_cur_msg).logtype;
+ }
+ /* Dump log history to file */
+@@ -153,17 +146,13 @@ rte_vlog(uint32_t level, uint32_t logtyp
+ {
+       int ret;
+       FILE *f = rte_logs.file;
+-      unsigned lcore_id;
+       if ((level > rte_logs.level) || !(logtype & rte_logs.type))
+               return 0;
+       /* save loglevel and logtype in a global per-lcore variable */
+-      lcore_id = rte_lcore_id();
+-      if (lcore_id < RTE_MAX_LCORE) {
+-              log_cur_msg[lcore_id].loglevel = level;
+-              log_cur_msg[lcore_id].logtype = logtype;
+-      }
++      RTE_PER_LCORE(log_cur_msg).loglevel = level;
++      RTE_PER_LCORE(log_cur_msg).logtype = logtype;
+       ret = vfprintf(f, format, ap);
+       fflush(f);
diff --git a/debian/patches/ubuntu-fix-vhost-user-socket-permission.patch b/debian/patches/ubuntu-fix-vhost-user-socket-permission.patch
new file mode 100644 (file)
index 0000000..c2a9cdb
--- /dev/null
@@ -0,0 +1,372 @@
+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.
+
+Forwarded: yes
+Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
+Last-Update: 2016-05-18
+
+Index: dpdk/lib/librte_eal/common/eal_common_options.c
+===================================================================
+--- dpdk.orig/lib/librte_eal/common/eal_common_options.c
++++ dpdk/lib/librte_eal/common/eal_common_options.c
+@@ -95,6 +95,8 @@ eal_long_options[] = {
+       {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                        }
+ };
+@@ -153,6 +155,8 @@ eal_reset_internal_config(struct interna
+ #endif
+       internal_cfg->vmware_tsc_map = 0;
+       internal_cfg->create_uio_dev = 0;
++      internal_cfg->vhost_sock_owner = NULL;
++      internal_cfg->vhost_sock_perm = NULL;
+ }
+ static int
+Index: dpdk/lib/librte_eal/common/eal_internal_cfg.h
+===================================================================
+--- dpdk.orig/lib/librte_eal/common/eal_internal_cfg.h
++++ dpdk/lib/librte_eal/common/eal_internal_cfg.h
+@@ -83,6 +83,8 @@ struct internal_config {
+       volatile enum rte_intr_mode vfio_intr_mode;
+       const char *hugefile_prefix;      /**< the base filename of hugetlbfs files */
+       const char *hugepage_dir;         /**< specific hugetlbfs directory to use */
++      const char *vhost_sock_owner;     /**< owner:group of vhost_user sockets */
++      const char *vhost_sock_perm;      /**< permissions of vhost_user sockets */
+       unsigned num_hugepage_sizes;      /**< how many sizes on this system */
+       struct hugepage_info hugepage_info[MAX_HUGEPAGE_SIZES];
+Index: dpdk/lib/librte_eal/common/eal_options.h
+===================================================================
+--- dpdk.orig/lib/librte_eal/common/eal_options.h
++++ dpdk/lib/librte_eal/common/eal_options.h
+@@ -83,6 +83,10 @@ enum {
+       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
+ };
+Index: dpdk/lib/librte_vhost/vhost_user/vhost-net-user.c
+===================================================================
+--- dpdk.orig/lib/librte_vhost/vhost_user/vhost-net-user.c
++++ dpdk/lib/librte_vhost/vhost_user/vhost-net-user.c
+@@ -51,6 +51,8 @@
+ #include "vhost-net.h"
+ #include "virtio-net-user.h"
++#include <rte_eal.h>
++
+ #define MAX_VIRTIO_BACKLOG 128
+ static void vserver_new_vq_conn(int fd, void *data, int *remove);
+@@ -486,6 +488,8 @@ rte_vhost_driver_register(const char *pa
+               return -1;
+       }
++      rte_eal_set_socket_permissions(path);
++
+       vserver->path = strdup(path);
+       vserver->fh = -1;
+Index: dpdk/lib/librte_eal/linuxapp/eal/eal.c
+===================================================================
+--- dpdk.orig/lib/librte_eal/linuxapp/eal/eal.c
++++ dpdk/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>
+@@ -343,6 +346,8 @@ eal_usage(const char *prgname)
+              "  --"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 ) {
+@@ -618,6 +623,14 @@ eal_parse_args(int argc, char **argv)
+                       internal_config.create_uio_dev = 1;
+                       break;
++              case OPT_VHOST_OWNER_NUM:
++                      internal_config.vhost_sock_owner = optarg;
++                      break;
++
++              case OPT_VHOST_PERM_NUM:
++                      internal_config.vhost_sock_perm = optarg;
++                      break;
++
+               default:
+                       if (opt < OPT_LONG_MIN_NUM && isprint(opt)) {
+                               RTE_LOG(ERR, EAL, "Option %c is not supported "
+@@ -934,3 +947,172 @@ rte_eal_check_module(const char *module_
+       /* Module has been found */
+       return 1;
+ }
++
++/* 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;
++}
++
++static void
++vhost_set_permissions(const char *vhost_sock_location)
++{
++      unsigned long int mode = strtoul(internal_config.vhost_sock_perm, NULL, 0);
++      int err = chmod(vhost_sock_location, (mode_t)mode);
++      if (err) {
++              RTE_LOG(ERR, EAL,"vhost-user socket cannot set"
++                      " permissions to %s (%s).\n",
++                      internal_config.vhost_sock_perm, strerror(err));
++              return;
++      }
++      RTE_LOG(INFO, EAL,"Socket %s changed permissions"
++                      " to %s\n", vhost_sock_location,
++                      internal_config.vhost_sock_perm);
++}
++
++static void
++vhost_set_ownership(const char *vhost_sock_location)
++{
++      uid_t vhuid=0;
++      gid_t vhgid=0;
++
++      if (get_owners_from_str(internal_config.vhost_sock_owner, &vhuid, &vhgid)) {
++              RTE_LOG(ERR, EAL,"vhost-user socket unable to get"
++                      " specified user/group: %s\n",
++                      internal_config.vhost_sock_owner);
++              return;
++      }
++
++      int err = chown(vhost_sock_location, vhuid, vhgid);
++      if (err) {
++              RTE_LOG(ERR, EAL,"vhost-user socket unable to set"
++                      " ownership to %s (%s).\n",
++                      internal_config.vhost_sock_owner, strerror(err));
++              return;
++      }
++
++      RTE_LOG(INFO, EAL,"Socket %s changed ownership"
++                      " to %s.\n", vhost_sock_location,
++                      internal_config.vhost_sock_owner);
++}
++
++void
++rte_eal_set_socket_permissions(const char *path)
++{
++      if (internal_config.vhost_sock_perm) {
++              vhost_set_permissions(path);
++      }
++
++      if (internal_config.vhost_sock_owner) {
++              vhost_set_ownership(path);
++      }
++}
+Index: dpdk/lib/librte_eal/common/include/rte_eal.h
+===================================================================
+--- dpdk.orig/lib/librte_eal/common/include/rte_eal.h
++++ dpdk/lib/librte_eal/common/include/rte_eal.h
+@@ -252,6 +252,11 @@ static inline int rte_gettid(void)
+       return RTE_PER_LCORE(_thread_id);
+ }
++/**
++ * Set owner/permissions on sockets if requested on EAL commandline
++ */
++void rte_eal_set_socket_permissions(const char *);
++
+ #ifdef __cplusplus
+ }
+ #endif
+Index: dpdk/doc/guides/testpmd_app_ug/run_app.rst
+===================================================================
+--- dpdk.orig/doc/guides/testpmd_app_ug/run_app.rst
++++ dpdk/doc/guides/testpmd_app_ug/run_app.rst
+@@ -156,6 +156,25 @@ See the DPDK Getting Started Guides for
+     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
+ ----------------------------
+Index: dpdk/lib/librte_eal/linuxapp/eal/rte_eal_version.map
+===================================================================
+--- dpdk.orig/lib/librte_eal/linuxapp/eal/rte_eal_version.map
++++ dpdk/lib/librte_eal/linuxapp/eal/rte_eal_version.map
+@@ -138,6 +138,7 @@ DPDK_2.2 {
+       rte_keepalive_mark_alive;
+       rte_keepalive_register_core;
+       rte_xen_dom0_supported;
++      rte_eal_set_socket_permissions;
+ } DPDK_2.1;
diff --git a/debian/patches/ubuntu-fix-xenvirt-support-dynamic-page-size.patch b/debian/patches/ubuntu-fix-xenvirt-support-dynamic-page-size.patch
new file mode 100644 (file)
index 0000000..ed6fb5d
--- /dev/null
@@ -0,0 +1,32 @@
+Author: Ricardo Salveti <ricardo.salveti@linaro.org>
+Last-Update: 2016-04-17
+Fowarded: yes
+Description: xenvirt: support dynamic page size
+
+Fix build failure since PAGE_SIZE is not defined on ARM (multiple values
+are possible, so it needs to dynamically get the page size used).
+
+http://dpdk.org/ml/archives/dev/2016-April/037586.html
+
+Signed-off-by: Ricardo Salveti <ricardo.salveti@linaro.org>
+---
+ drivers/net/xenvirt/rte_eth_xenvirt.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/drivers/net/xenvirt/rte_eth_xenvirt.c b/drivers/net/xenvirt/rte_eth_xenvirt.c
+index b9638d9..afc0193 100644
+--- a/drivers/net/xenvirt/rte_eth_xenvirt.c
++++ b/drivers/net/xenvirt/rte_eth_xenvirt.c
+@@ -39,6 +39,9 @@
+ #include <sys/mman.h>
+ #include <errno.h>
+ #include <sys/user.h>
++#ifndef PAGE_SIZE
++#define PAGE_SIZE sysconf(_SC_PAGE_SIZE)
++#endif
+ #include <linux/binfmts.h>
+ #include <xen/xen-compat.h>
+ #if __XEN_LATEST_INTERFACE_VERSION__ < 0x00040200
+-- 
+2.7.4
+
diff --git a/debian/rules b/debian/rules
new file mode 100755 (executable)
index 0000000..e8bf409
--- /dev/null
@@ -0,0 +1,176 @@
+#!/usr/bin/make -f
+# See debhelper(7) (uncomment to enable)
+# output every command that modifies files on the build system.
+#export DH_VERBOSE = 1
+
+VERSION := $(shell dpkg-parsechangelog | sed -nr '/^Version:/s/Version: (.*:)?(.*)-(.*)/\2/p')
+
+# see EXAMPLES in dpkg-buildflags(1) and read /usr/share/dpkg/*
+DPKG_EXPORT_BUILDFLAGS = 1
+include /usr/share/dpkg/default.mk
+
+DEB_HOST_GNU_CPU := $(shell dpkg-architecture -qDEB_HOST_GNU_CPU)
+
+# see FEATURE AREAS in dpkg-buildflags(1)
+export DEB_BUILD_MAINT_OPTIONS = hardening=+all
+
+# build with debug symbols, dh_strip will create -dgbsyms packages by that
+# also export -fPIC for the static build (already used by shared by default)
+export EXTRA_CFLAGS = -g -fPIC
+
+# see ENVIRONMENT in dpkg-buildflags(1)
+# package maintainers to append CFLAGS
+#export DEB_CFLAGS_MAINT_APPEND  = -Wall -pedantic
+# package maintainers to append LDFLAGS
+#export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed
+
+ifneq (,$(filter $(DEB_HOST_ARCH), arm64))
+DPDK_CONFIG = "arm64-armv8a-linuxapp-gcc"
+RTE_MACHINE = "armv8a"
+RTE_TARGET = "arm64-armv8a-linuxapp-gcc"
+else
+DPDK_CONFIG = "$(DEB_HOST_GNU_CPU)-native-linuxapp-gcc"
+RTE_MACHINE = "default"
+RTE_TARGET = "$(DEB_HOST_GNU_CPU)-default-linuxapp-gcc"
+endif
+DPDK_STATIC_DIR = "debian/build/static-root"
+DPDK_SHARED_DIR = "debian/build/shared-root"
+
+clean:
+       dh_testdir
+       rm -rf debian/build debian/tmp
+       dh_clean
+
+build-config:
+       dh_testdir
+       $(MAKE) O=$(DPDK_STATIC_DIR) T=$(DPDK_CONFIG) config
+       sed -ri -e 's,(RTE_MACHINE=).*,\1$(RTE_MACHINE),' \
+               -e 's,(RTE_NEXT_ABI=).*,\1n,' \
+                -e 's,(CONFIG_RTE_EAL_IGB_UIO=).*,\1n,' \
+                -e 's,(CONFIG_RTE_KNI_KMOD=).*,\1n,' \
+               -e 's,(LIBRTE_PMD_PCAP=).*,\1y,' \
+               -e 's,(LIBRTE_PMD_XENVIRT=).*,\1y,' \
+               $(DPDK_STATIC_DIR)/.config
+
+build-indep: build-config
+       dh_testdir
+       $(MAKE) O=$(DPDK_STATIC_DIR) doc-api-html doc-guides-html
+
+build-arch: build-config
+       dh_testdir
+       $(MAKE) O=$(DPDK_STATIC_DIR) build
+       # 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) O=$(DPDK_SHARED_DIR) build
+
+build: build-arch build-indep
+
+binary-indep: PACKAGE_NAME=dpdk-doc
+binary-indep: DOCDIR=usr/share/doc/dpdk
+binary-indep: export DH_OPTIONS=--indep
+binary-indep:
+       dh_testroot
+       dh_prep
+       dh_testdir
+       dh_installdirs
+       dh_install
+       dh_installdocs
+       dh_installchangelogs
+       dh_lintian
+       # Package: dpdk-doc
+       # All files based on the install-doc rule (includes examples)
+       $(MAKE) O=$(DPDK_SHARED_DIR) prefix=/usr \
+               DESTDIR=debian/dpdk-doc install-doc
+       dh_link
+       dh_compress
+       dh_fixperms
+       dh_installdeb
+       dh_gencontrol
+       dh_md5sums
+       dh_builddeb
+
+binary-arch: LIBDIR=usr/lib/$(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
+binary-arch: export DH_OPTIONS=--arch
+binary-arch:
+       dh_testroot
+       dh_prep
+       dh_testdir
+       dh_installdirs
+       dh_install
+       dh_installdocs
+       dh_installchangelogs
+       dh_lintian
+       dh_systemd_enable
+       dh_installinit --no-start --no-restart-on-upgrade
+       dh_systemd_start --no-start --no-restart-on-upgrade
+       # Package: dpdk (runtime)
+       $(MAKE) O=$(DPDK_STATIC_DIR) prefix=/usr \
+               DESTDIR=debian/dpdk install-runtime
+       $(MAKE) O=$(DPDK_SHARED_DIR) prefix=/usr \
+               DESTDIR=debian/dpdk install-runtime
+       cp debian/dpdk.interfaces debian/dpdk/etc/dpdk/interfaces
+       rm debian/dpdk/usr/sbin/dpdk_nic_bind
+       ln -s /usr/share/dpdk/tools/dpdk_nic_bind.py \
+               debian/dpdk/sbin/dpdk_nic_bind
+       # Package: dpdk-dev (build environment)
+       $(MAKE) O=$(DPDK_SHARED_DIR) prefix=/usr \
+               DESTDIR=debian/dpdk-dev install-sdk
+       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
+       # Package: libdpdk-dev (bare headers, static devel libs and linker
+       # script)
+       mkdir -p debian/libdpdk-dev/$(LIBDIR)
+       # linker script
+       mv debian/dpdk/usr/lib/libdpdk.so debian/libdpdk-dev/$(LIBDIR)/
+       # includes
+       mv debian/dpdk-dev/usr/include/dpdk debian/libdpdk-dev/usr/include/
+       # all static libs are in the dev package
+       mv debian/dpdk/usr/lib/lib*.a debian/libdpdk-dev/$(LIBDIR)/
+       # 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/usr/lib/*.so debian/libdpdk-dev/$(LIBDIR)/
+       # Package(s): libdpdk-<NAME><VER> (bare runtime libs)
+       for lib in $$(ls -1 debian/dpdk/usr/lib/*.so.*); do \
+         BN=$$(basename $${lib}); \
+         VER=$$(echo $${BN} | sed -e 's/^.*\.so\.//'); \
+         LN=$$(echo $${BN} | sed -e 's/\.so\.[0-9]*$$//' | tr '_' '-'); \
+         LNV="libdpdk-$${LN}$${VER}"; \
+         echo "moving $${lib} for library $${LNV}"; \
+         mkdir -p debian/$${LNV}/$(LIBDIR); \
+         mv $${lib} debian/$${LNV}/$(LIBDIR); \
+       done
+       # Package: dpdk-igb-uio-dkms
+       mkdir -p debian/dpdk-igb-uio-dkms/usr/src/dpdk-igb-uio-$(VERSION)
+       cp lib/librte_eal/linuxapp/igb_uio/* \
+               debian/dpdk-igb-uio-dkms/usr/src/dpdk-igb-uio-$(VERSION)
+       # Package: dpdk-rte-kni-dkms
+       mkdir -p debian/dpdk-rte-kni-dkms/usr/src/dpdk-rte-kni-$(VERSION)
+       cp -a lib/librte_eal/linuxapp/kni/* \
+               debian/dpdk-rte-kni-dkms/usr/src/dpdk-rte-kni-$(VERSION)
+       dh_dkms -V $(VERSION)
+       dh_python2
+       dh_perl
+       dh_link
+       dh_compress
+       dh_fixperms
+       dh_strip
+       dh_makeshlibs
+       dh_shlibdeps
+       dh_installdeb
+       dh_gencontrol
+       dh_md5sums
+       dh_builddeb
+
+binary: binary-arch binary-indep
diff --git a/debian/source/format b/debian/source/format
new file mode 100644 (file)
index 0000000..163aaf8
--- /dev/null
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/debian/tests/check-dpdk-supported-arch.sh b/debian/tests/check-dpdk-supported-arch.sh
new file mode 100644 (file)
index 0000000..3de6e46
--- /dev/null
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+arch=$(dpkg --print-architecture)
+case $arch in
+    amd64|arm64|i386)
+        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 (file)
index 0000000..5afed74
--- /dev/null
@@ -0,0 +1,13 @@
+Tests: test-initscripts
+Restrictions: allow-stderr, isolation-machine, needs-root
+Depends: dpdk [amd64 arm64 i386], gawk, mount, systemd, sysvinit-utils
+
+Tests: test-linkage
+Restrictions: allow-stderr
+Depends: libdpdk-dev [amd64 arm64 i386], 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],
+ dpdk-rte-kni-dkms [amd64 arm64 i386]
diff --git a/debian/tests/test-dkms b/debian/tests/test-dkms
new file mode 100644 (file)
index 0000000..ab3aca0
--- /dev/null
@@ -0,0 +1,18 @@
+#!/bin/bash
+set -eu
+
+basedir=$(dirname "$0")
+. "${basedir}"/check-dpdk-supported-arch.sh
+
+# 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 (file)
index 0000000..f465d6d
--- /dev/null
@@ -0,0 +1,143 @@
+#!/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
+
+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-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}"
+        # We do not check 1G 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
+    systemctl reset-failed dpdk.service
+
+    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" 2 "${PRE}" "${POST}" "active"
+    echo "### Restarting Service ###"
+    ${PRE} restart "${POST}"
+    checkstatus "${TYPE}-RESTART" 2 "${PRE}" "${POST}" "active"
+}
+
+echo "NR_2M_PAGES=$EXPECT2MHP" >> ${DPDK_CONF}
+echo "NR_1G_PAGES=$EXPECT1GHP" >> ${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 (file)
index 0000000..fabe1c8
--- /dev/null
@@ -0,0 +1,51 @@
+#!/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'
+lddtree testlinkage.bin | grep '^        librt.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
+ldd /usr/lib/*/librte_pmd_xenvirt.so | grep libxenstore
+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 (file)
index 0000000..418ce0c
--- /dev/null
@@ -0,0 +1,2 @@
+version=3
+http://www.dpdk.org/download /browse/dpdk/snapshot/dpdk-(.+)\.(?:zip|tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz)))