diff options
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))) |