diff options
author | Christian Ehrhardt <christian.ehrhardt@canonical.com> | 2016-06-15 20:29:06 +0200 |
---|---|---|
committer | Christian Ehrhardt <christian.ehrhardt@canonical.com> | 2016-06-15 20:37:12 +0200 |
commit | 199e427d5dea3051eec1726eb9c857aa3d5fdde2 (patch) | |
tree | 5477b3bd4868676a210bbd3ef67a469d34814e61 /debian | |
parent | b5cdd645c9fc62341d55aebbfc93a1b648415512 (diff) |
Merge Ubuntu DPDK packaging as of 15th June 2016
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>
Diffstat (limited to 'debian')
82 files changed, 4505 insertions, 0 deletions
diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 00000000..36a76421 --- /dev/null +++ b/debian/changelog @@ -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 index 00000000..ec635144 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +9 diff --git a/debian/control b/debian/control new file mode 100644 index 00000000..9a934901 --- /dev/null +++ b/debian/control @@ -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 index 00000000..1c6ee2cf --- /dev/null +++ b/debian/copyright @@ -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 index 00000000..bdac81a8 --- /dev/null +++ b/debian/dpdk-dev.dirs @@ -0,0 +1 @@ +usr/share/dpdk diff --git a/debian/dpdk-doc.README.Debian b/debian/dpdk-doc.README.Debian new file mode 100644 index 00000000..669bf396 --- /dev/null +++ b/debian/dpdk-doc.README.Debian @@ -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 index 00000000..fcd9dfe3 --- /dev/null +++ b/debian/dpdk-doc.dirs @@ -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 index 00000000..10dfecc7 --- /dev/null +++ b/debian/dpdk-igb-uio-dkms.dkms @@ -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 index 00000000..86eda2cb --- /dev/null +++ b/debian/dpdk-init @@ -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 index 00000000..efccf1fb --- /dev/null +++ b/debian/dpdk-rte-kni-dkms.dkms @@ -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 index 00000000..8cc3944f --- /dev/null +++ b/debian/dpdk-sdk-env.sh.in @@ -0,0 +1,3 @@ +export RTE_TARGET=SDK_TARGET +export RTE_SDK="/usr/share/dpdk/" +export RTE_INCLUDE="/usr/include/dpdk" diff --git a/debian/dpdk.conf b/debian/dpdk.conf new file mode 100644 index 00000000..fb4572d0 --- /dev/null +++ b/debian/dpdk.conf @@ -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 index 00000000..29ca563f --- /dev/null +++ b/debian/dpdk.dirs @@ -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 index 00000000..01b47845 --- /dev/null +++ b/debian/dpdk.init @@ -0,0 +1,57 @@ +#!/bin/sh + +### BEGIN INIT INFO +# Provides: dpdk +# Required-Start: $remote_fs $local_fs +# Required-Stop: $remote_fs $local_fs +# Default-Start: S +# Default-Stop: 0 1 6 +# Short-Description: start dpdk runtime environment +### END INIT INFO + +set -e + +PATH="/sbin:/bin:/usr/bin" + +[ -d /lib/dpdk ] || exit 0 + +# Define LSB log_* functions. +# Depend on lsb-base (>= 3.2-14) to ensure that this file is present +# and status_of_proc is working. +. /lib/lsb/init-functions + +error=0 +case "$1" in +start) + log_action_begin_msg "Starting DPDK environment" "dpdk" + output=$(/lib/dpdk/dpdk-init start 2>&1) || error="$?" + if [ ! -z "$output" ]; then + echo "$output" | while read line; do + log_action_cont_msg "$line" + done + fi + log_action_end_msg $error + exit $error + ;; +stop) + ;; +restart|force-reload) + ;; +status) + output=$(/lib/dpdk/dpdk-init --status 2>&1) || error="$?" + if [ ! -z "$output" ]; then + echo "$output" | while read line; do + log_action_cont_msg "$line" + done + fi + log_action_end_msg $error + exit $error + ;; +*) + echo "Usage: $0 {start|stop|restart|force-reload|status}" + exit 1 + ;; +esac + +exit 0 + diff --git a/debian/dpdk.install b/debian/dpdk.install new file mode 100644 index 00000000..24c8d452 --- /dev/null +++ b/debian/dpdk.install @@ -0,0 +1,2 @@ +debian/dpdk-init lib/dpdk/ +debian/dpdk.conf etc/dpdk/ diff --git a/debian/dpdk.interfaces b/debian/dpdk.interfaces new file mode 100644 index 00000000..3442343b --- /dev/null +++ b/debian/dpdk.interfaces @@ -0,0 +1,19 @@ +# +# <bus> Currently only "pci" is supported +# <id> Device ID on the specified bus +# <driver> Driver to bind against (vfio-pci, uio_pci_generic, igb_uio or +# rte_kni) +# +# Be aware that the two dpdk compatible drivers uio_pci_generic and vfio-pci are +# part of linux-image-extra-<VERSION> package. +# This package is not always installed by default - for example in cloud-images. +# So please install it in case you run into missing module issues. +# +# For the module igb_uio, please install the dpdk-igb-uio-dkms package. +# For the module rte_kni, please install the dpdk-rte-kni-dkms package. +# +# <bus> <id> <driver> +# pci 0000:04:00.0 vfio-pci +# pci 0000:04:00.1 uio_pci_generic +# pci 0000:05:00.0 igb_uio +# pci 0000:06:00.0 rte_kni diff --git a/debian/dpdk.service b/debian/dpdk.service new file mode 100644 index 00000000..09ef8bec --- /dev/null +++ b/debian/dpdk.service @@ -0,0 +1,12 @@ +[Unit] +Description=DPDK runtime environment +DefaultDependencies=false +After=network-pre.target local-fs.target + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=/lib/dpdk/dpdk-init start + +[Install] +WantedBy=multi-user.target diff --git a/debian/libdpdk-dev.dirs b/debian/libdpdk-dev.dirs new file mode 100644 index 00000000..e43b95cb --- /dev/null +++ b/debian/libdpdk-dev.dirs @@ -0,0 +1 @@ +usr/include diff --git a/debian/libdpdk-libethdev3.symbols b/debian/libdpdk-libethdev3.symbols new file mode 100644 index 00000000..46313720 --- /dev/null +++ b/debian/libdpdk-libethdev3.symbols @@ -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 index 00000000..b889abe1 --- /dev/null +++ b/debian/libdpdk-librte-acl2.symbols @@ -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 index 00000000..c25969dd --- /dev/null +++ b/debian/libdpdk-librte-cfgfile2.symbols @@ -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 index 00000000..feeb1e62 --- /dev/null +++ b/debian/libdpdk-librte-cmdline2.symbols @@ -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 index 00000000..9c74dd93 --- /dev/null +++ b/debian/libdpdk-librte-cryptodev1.symbols @@ -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 index 00000000..61f8d9d6 --- /dev/null +++ b/debian/libdpdk-librte-distributor1.symbols @@ -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 index 00000000..730ee11a --- /dev/null +++ b/debian/libdpdk-librte-eal2.symbols @@ -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 index 00000000..0173e0da --- /dev/null +++ b/debian/libdpdk-librte-hash2.symbols @@ -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 index 00000000..503ebdfd --- /dev/null +++ b/debian/libdpdk-librte-ip-frag1.symbols @@ -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 index 00000000..af119016 --- /dev/null +++ b/debian/libdpdk-librte-jobstats1.symbols @@ -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 index 00000000..661595e3 --- /dev/null +++ b/debian/libdpdk-librte-kni2.symbols @@ -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 index 00000000..d61a3168 --- /dev/null +++ b/debian/libdpdk-librte-kvargs1.symbols @@ -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 index 00000000..e87ef64d --- /dev/null +++ b/debian/libdpdk-librte-lpm2.symbols @@ -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 index 00000000..d0e8c450 --- /dev/null +++ b/debian/libdpdk-librte-mbuf2.symbols @@ -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 index 00000000..024efc42 --- /dev/null +++ b/debian/libdpdk-librte-mempool1.symbols @@ -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 index 00000000..adf2cec1 --- /dev/null +++ b/debian/libdpdk-librte-meter1.symbols @@ -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 index 00000000..7204deb6 --- /dev/null +++ b/debian/libdpdk-librte-pipeline3.symbols @@ -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 index 00000000..d36eb82f --- /dev/null +++ b/debian/libdpdk-librte-pmd-af-packet1.symbols @@ -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 index 00000000..57d525ee --- /dev/null +++ b/debian/libdpdk-librte-pmd-bond1.symbols @@ -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 index 00000000..0b6059e0 --- /dev/null +++ b/debian/libdpdk-librte-pmd-cxgbe1.symbols @@ -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 index 00000000..052ee050 --- /dev/null +++ b/debian/libdpdk-librte-pmd-e10001.symbols @@ -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 index 00000000..3684a586 --- /dev/null +++ b/debian/libdpdk-librte-pmd-ena1.symbols @@ -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 index 00000000..2c7c2b64 --- /dev/null +++ b/debian/libdpdk-librte-pmd-enic1.symbols @@ -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 index 00000000..5cf6b71f --- /dev/null +++ b/debian/libdpdk-librte-pmd-fm10k1.symbols @@ -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 index 00000000..61a933bc --- /dev/null +++ b/debian/libdpdk-librte-pmd-i40e1.symbols @@ -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 index 00000000..5ee113c9 --- /dev/null +++ b/debian/libdpdk-librte-pmd-ixgbe1.symbols @@ -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 index 00000000..487b0f8a --- /dev/null +++ b/debian/libdpdk-librte-pmd-null-crypto1.symbols @@ -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 index 00000000..19ffeb64 --- /dev/null +++ b/debian/libdpdk-librte-pmd-null1.symbols @@ -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 index 00000000..4aaa6cd5 --- /dev/null +++ b/debian/libdpdk-librte-pmd-pcap1.symbols @@ -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 index 00000000..bca62702 --- /dev/null +++ b/debian/libdpdk-librte-pmd-ring2.symbols @@ -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 index 00000000..3253224d --- /dev/null +++ b/debian/libdpdk-librte-pmd-vhost1.symbols @@ -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 index 00000000..41f3e77f --- /dev/null +++ b/debian/libdpdk-librte-pmd-virtio1.symbols @@ -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 index 00000000..4a3fb965 --- /dev/null +++ b/debian/libdpdk-librte-pmd-vmxnet3-uio1.symbols @@ -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 index 00000000..76f116e1 --- /dev/null +++ b/debian/libdpdk-librte-pmd-xenvirt1.symbols @@ -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 index 00000000..c94782a2 --- /dev/null +++ b/debian/libdpdk-librte-port2.symbols @@ -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 index 00000000..22117859 --- /dev/null +++ b/debian/libdpdk-librte-power1.symbols @@ -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 index 00000000..24d5cd2a --- /dev/null +++ b/debian/libdpdk-librte-reorder1.symbols @@ -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 index 00000000..29c8b9e9 --- /dev/null +++ b/debian/libdpdk-librte-ring1.symbols @@ -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 index 00000000..100829a6 --- /dev/null +++ b/debian/libdpdk-librte-sched1.symbols @@ -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 index 00000000..89dc550d --- /dev/null +++ b/debian/libdpdk-librte-table2.symbols @@ -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 index 00000000..9e82b0e7 --- /dev/null +++ b/debian/libdpdk-librte-timer1.symbols @@ -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 index 00000000..e9382717 --- /dev/null +++ b/debian/libdpdk-librte-vhost2.symbols @@ -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 index 00000000..68457717 --- /dev/null +++ b/debian/libdpdk0.dirs @@ -0,0 +1 @@ +usr/lib diff --git a/debian/patches/series b/debian/patches/series new file mode 100644 index 00000000..baab84f9 --- /dev/null +++ b/debian/patches/series @@ -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 index 00000000..ea1ff75b --- /dev/null +++ b/debian/patches/ubuntu-backport-33-vhost-user-add-error-handling-for-fd-1023.patch @@ -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 index 00000000..b756d8ff --- /dev/null +++ b/debian/patches/ubuntu-backport-38-dpdk-dev-Memory-leak-when-adding-removing-vhost_user-ports.patch @@ -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 index 00000000..4224cad8 --- /dev/null +++ b/debian/patches/ubuntu-backport-39-lpm-fix-freeing-in-compatibility-mode.patch @@ -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 index 00000000..5336cd49 --- /dev/null +++ b/debian/patches/ubuntu-backport-40-linking-fixes-stage-1-4.patch @@ -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 index 00000000..30ca0d50 --- /dev/null +++ b/debian/patches/ubuntu-backport-40-linking-fixes-stage-2-4.patch @@ -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 index 00000000..161832e6 --- /dev/null +++ b/debian/patches/ubuntu-backport-40-linking-fixes-stage-3-4.patch @@ -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 index 00000000..188ee2bd --- /dev/null +++ b/debian/patches/ubuntu-backport-40-linking-fixes-stage-4-4.patch @@ -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 index 00000000..e485e528 --- /dev/null +++ b/debian/patches/ubuntu-backport-41-fix-install-tar-1.29.patch @@ -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 index 00000000..de641035 --- /dev/null +++ b/debian/patches/ubuntu-backport-42-increase-default-logging-level.patch @@ -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 index 00000000..9a56223f --- /dev/null +++ b/debian/patches/ubuntu-backport-43-fix-level-type-retrieving.patch @@ -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 index 00000000..c2a9cdbf --- /dev/null +++ b/debian/patches/ubuntu-fix-vhost-user-socket-permission.patch @@ -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 index 00000000..ed6fb5d0 --- /dev/null +++ b/debian/patches/ubuntu-fix-xenvirt-support-dynamic-page-size.patch @@ -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 index 00000000..e8bf409d --- /dev/null +++ b/debian/rules @@ -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 index 00000000..163aaf8d --- /dev/null +++ b/debian/source/format @@ -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 index 00000000..3de6e467 --- /dev/null +++ b/debian/tests/check-dpdk-supported-arch.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +arch=$(dpkg --print-architecture) +case $arch in + amd64|arm64|i386) + echo "Architecture ${arch} supported, go on with test" + ;; + *) + echo "Architecture ${arch} not supported, SKIP test" + exit 0 + ;; +esac diff --git a/debian/tests/control b/debian/tests/control new file mode 100644 index 00000000..5afed744 --- /dev/null +++ b/debian/tests/control @@ -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 index 00000000..ab3aca00 --- /dev/null +++ b/debian/tests/test-dkms @@ -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 index 00000000..f465d6d6 --- /dev/null +++ b/debian/tests/test-initscripts @@ -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 index 00000000..fabe1c84 --- /dev/null +++ b/debian/tests/test-linkage @@ -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 index 00000000..418ce0c6 --- /dev/null +++ b/debian/watch @@ -0,0 +1,2 @@ +version=3 +http://www.dpdk.org/download /browse/dpdk/snapshot/dpdk-(.+)\.(?:zip|tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz))) |