Merge "clean up code"
This commit is contained in:
commit
509d04c108
|
@ -66,7 +66,7 @@ cd ovs; git checkout ${OVS_COMMIT}; rm -rf .git
|
|||
cd ${BUILD_HOME}; cp -r ovs ovs-dpdk
|
||||
|
||||
cd ovs-dpdk
|
||||
cp -r ${BUILD_SRC}/openvswitch-dpdk_2.5.90/debian .
|
||||
cp -r ${BUILD_SRC}/openvswitch_2.6-dpdk_16.07/debian .
|
||||
cat << EOF > debian/changelog
|
||||
openvswitch-dpdk (${OVS_VER}-1) unstable; urgency=low
|
||||
[ Open vSwitch team ]
|
||||
|
|
|
@ -71,7 +71,7 @@ done
|
|||
cd ${BUILD_HOME}; cp -r ovs ovs-dpdk
|
||||
|
||||
cd ovs-dpdk
|
||||
cp -r ${BUILD_SRC}/openvswitch-dpdk_2.5.90/debian .
|
||||
cp -r ${BUILD_SRC}/openvswitch_2.6-dpdk_16.07/debian .
|
||||
cat << EOF > debian/changelog
|
||||
openvswitch-dpdk (${OVS_VER}-1.nsh) unstable; urgency=low
|
||||
[ Open vSwitch team ]
|
||||
|
|
|
@ -1,236 +0,0 @@
|
|||
dpdk (2.2.0-0ubuntu8) xenial; 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> Mon, 25 Apr 2016 11:42:40 +0200
|
||||
|
||||
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
|
|
@ -1,81 +0,0 @@
|
|||
Source: dpdk
|
||||
Priority: optional
|
||||
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
|
||||
Build-Depends: debhelper (>= 9),
|
||||
dh-python,
|
||||
dh-systemd (>= 1.5),
|
||||
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-Original-Git: git://dpdk.org/dpdk
|
||||
Vcs-Original-Browser: http://www.dpdk.org/browse/dpdk/refs/
|
||||
Vcs-Git: https://git.launchpad.net/~ubuntu-server/dpdk
|
||||
Vcs-Browser: https://code.launchpad.net/~ubuntu-server/dpdk/+git/dpdk
|
||||
|
||||
Package: dpdk
|
||||
Section: devel
|
||||
Architecture: amd64 i386
|
||||
Depends: libdpdk0 (= ${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 i386
|
||||
Depends: libdpdk0 (= ${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
|
||||
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: libdpdk0
|
||||
Architecture: amd64 i386
|
||||
Multi-Arch: same
|
||||
Pre-Depends: ${misc:Pre-Depends}
|
||||
Depends: ${misc:Depends}, ${shlibs:Depends}
|
||||
Description: Data Plane Development Kit (runtime libraries)
|
||||
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 which require at least SSE3
|
||||
support in the CPU.
|
||||
|
||||
Package: libdpdk-dev
|
||||
Section: libdevel
|
||||
Architecture: amd64 i386
|
||||
Multi-Arch: same
|
||||
Pre-Depends: ${misc:Pre-Depends}
|
||||
Depends: libdpdk0 (= ${binary:Version}), ${misc:Depends}
|
||||
Description: Data Plane Development Kit (basic development files)
|
||||
DPDK is a set of libraries for fast packet processing. Applications run
|
||||
in user-space and communicate directly with dedicated network interfaces.
|
||||
This package contains the basic headers and library files required to
|
||||
build external applications which will also require at least SSE3 support
|
||||
when running.
|
|
@ -1,48 +0,0 @@
|
|||
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 Canonical Ltd. <stefan.bader@canonical.com>
|
||||
Copyright: 2015, 2016 Canonical Ltd. <christian.ehrhardt@canonical.com>
|
||||
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/>.
|
|
@ -1 +0,0 @@
|
|||
usr/share/dpdk
|
|
@ -1 +0,0 @@
|
|||
debian/dpdk-sdk-env.sh /usr/share/dpdk/
|
|
@ -1,52 +0,0 @@
|
|||
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
|
|
@ -1 +0,0 @@
|
|||
usr/share/doc/dpdk
|
|
@ -1,251 +0,0 @@
|
|||
#!/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
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
export RTE_TARGET="$(uname -m)-default-linuxapp-gcc"
|
||||
export RTE_SDK="/usr/share/dpdk/"
|
||||
export RTE_INCLUDE="/usr/include/dpdk"
|
|
@ -1,54 +0,0 @@
|
|||
#
|
||||
# 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.
|
||||
#
|
|
@ -1,5 +0,0 @@
|
|||
etc/dpdk
|
||||
lib/dpdk
|
||||
sbin
|
||||
usr/bin
|
||||
usr/lib/dpdk
|
|
@ -1,57 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# Provides: dpdk
|
||||
# Required-Start: $local_fs
|
||||
# Required-Stop: $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
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
debian/dpdk-init lib/dpdk/
|
||||
debian/dpdk.conf etc/dpdk/
|
|
@ -1,13 +0,0 @@
|
|||
#
|
||||
# <bus> Currently only "pci" is supported
|
||||
# <id> Device ID on the specified bus
|
||||
# <driver> Driver to bind against (vfio-pci or uio_pci_generic)
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
# <bus> <id> <driver>
|
||||
# pci 0000:04:00.0 vfio-pci
|
||||
# pci 0000:04:00.1 uio_pci_generic
|
|
@ -1,12 +0,0 @@
|
|||
[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
|
|
@ -1 +0,0 @@
|
|||
usr/include
|
|
@ -1 +0,0 @@
|
|||
usr/lib
|
|
@ -1,580 +0,0 @@
|
|||
libdpdk.so.0 libdpdk0 #MINVER#
|
||||
* Build-Depends-Package: libdpdk-dev
|
||||
DPDK_2.0@DPDK_2.0 2.2
|
||||
DPDK_2.1@DPDK_2.1 2.2
|
||||
DPDK_2.2@DPDK_2.2 2.2
|
||||
__rte_panic@DPDK_2.0 2.2
|
||||
_rte_eth_dev_callback_process@DPDK_2.2 2.2
|
||||
cirbuf_add_buf_head@DPDK_2.0 2.2
|
||||
cirbuf_add_buf_tail@DPDK_2.0 2.2
|
||||
cirbuf_add_head@DPDK_2.0 2.2
|
||||
cirbuf_add_head_safe@DPDK_2.0 2.2
|
||||
cirbuf_add_tail@DPDK_2.0 2.2
|
||||
cirbuf_add_tail_safe@DPDK_2.0 2.2
|
||||
cirbuf_align_left@DPDK_2.0 2.2
|
||||
cirbuf_align_right@DPDK_2.0 2.2
|
||||
cirbuf_del_buf_head@DPDK_2.0 2.2
|
||||
cirbuf_del_buf_tail@DPDK_2.0 2.2
|
||||
cirbuf_del_head@DPDK_2.0 2.2
|
||||
cirbuf_del_head_safe@DPDK_2.0 2.2
|
||||
cirbuf_del_tail@DPDK_2.0 2.2
|
||||
cirbuf_del_tail_safe@DPDK_2.0 2.2
|
||||
cirbuf_get_buf_head@DPDK_2.0 2.2
|
||||
cirbuf_get_buf_tail@DPDK_2.0 2.2
|
||||
cirbuf_get_head@DPDK_2.0 2.2
|
||||
cirbuf_get_tail@DPDK_2.0 2.2
|
||||
cirbuf_init@DPDK_2.0 2.2
|
||||
cmdline_complete@DPDK_2.0 2.2
|
||||
cmdline_complete_get_elt_string@DPDK_2.0 2.2
|
||||
cmdline_complete_get_nb_string@DPDK_2.0 2.2
|
||||
cmdline_file_new@DPDK_2.0 2.2
|
||||
cmdline_free@DPDK_2.0 2.2
|
||||
cmdline_get_help_etheraddr@DPDK_2.0 2.2
|
||||
cmdline_get_help_ipaddr@DPDK_2.0 2.2
|
||||
cmdline_get_help_num@DPDK_2.0 2.2
|
||||
cmdline_get_help_portlist@DPDK_2.0 2.2
|
||||
cmdline_get_help_string@DPDK_2.0 2.2
|
||||
cmdline_in@DPDK_2.0 2.2
|
||||
cmdline_interact@DPDK_2.0 2.2
|
||||
cmdline_isendoftoken@DPDK_2.0 2.2
|
||||
cmdline_new@DPDK_2.0 2.2
|
||||
cmdline_parse@DPDK_2.0 2.2
|
||||
cmdline_parse_etheraddr@DPDK_2.0 2.2
|
||||
cmdline_parse_ipaddr@DPDK_2.0 2.2
|
||||
cmdline_parse_num@DPDK_2.0 2.2
|
||||
cmdline_parse_portlist@DPDK_2.0 2.2
|
||||
cmdline_parse_string@DPDK_2.0 2.2
|
||||
cmdline_poll@DPDK_2.1 2.2
|
||||
cmdline_printf@DPDK_2.0 2.2
|
||||
cmdline_quit@DPDK_2.0 2.2
|
||||
cmdline_set_prompt@DPDK_2.0 2.2
|
||||
cmdline_stdin_exit@DPDK_2.0 2.2
|
||||
cmdline_stdin_new@DPDK_2.0 2.2
|
||||
cmdline_token_etheraddr_ops@DPDK_2.0 2.2
|
||||
cmdline_token_ipaddr_ops@DPDK_2.0 2.2
|
||||
cmdline_token_num_ops@DPDK_2.0 2.2
|
||||
cmdline_token_portlist_ops@DPDK_2.0 2.2
|
||||
cmdline_token_string_ops@DPDK_2.0 2.2
|
||||
cmdline_write_char@DPDK_2.0 2.2
|
||||
devargs_list@DPDK_2.0 2.2
|
||||
eal_parse_sysfs_value@DPDK_2.0 2.2
|
||||
eal_timer_source@DPDK_2.0 2.2
|
||||
eth_dev_null_create@DPDK_2.2 2.2
|
||||
lcore_config@DPDK_2.0 2.2
|
||||
pci_device_list@DPDK_2.0 2.2
|
||||
pci_driver_list@DPDK_2.0 2.2
|
||||
per_lcore__lcore_id@DPDK_2.0 2.2
|
||||
per_lcore__rte_errno@DPDK_2.0 2.2
|
||||
rdline_add_history@DPDK_2.0 2.2
|
||||
rdline_char_in@DPDK_2.0 2.2
|
||||
rdline_clear_history@DPDK_2.0 2.2
|
||||
rdline_get_buffer@DPDK_2.0 2.2
|
||||
rdline_get_history_item@DPDK_2.0 2.2
|
||||
rdline_init@DPDK_2.0 2.2
|
||||
rdline_newline@DPDK_2.0 2.2
|
||||
rdline_quit@DPDK_2.0 2.2
|
||||
rdline_redisplay@DPDK_2.0 2.2
|
||||
rdline_reset@DPDK_2.0 2.2
|
||||
rdline_restart@DPDK_2.0 2.2
|
||||
rdline_stop@DPDK_2.0 2.2
|
||||
rte_acl_add_rules@DPDK_2.0 2.2
|
||||
rte_acl_build@DPDK_2.0 2.2
|
||||
rte_acl_classify@DPDK_2.0 2.2
|
||||
rte_acl_classify_alg@DPDK_2.0 2.2
|
||||
rte_acl_classify_scalar@DPDK_2.0 2.2
|
||||
rte_acl_create@DPDK_2.0 2.2
|
||||
rte_acl_dump@DPDK_2.0 2.2
|
||||
rte_acl_find_existing@DPDK_2.0 2.2
|
||||
rte_acl_free@DPDK_2.0 2.2
|
||||
rte_acl_list_dump@DPDK_2.0 2.2
|
||||
rte_acl_reset@DPDK_2.0 2.2
|
||||
rte_acl_reset_rules@DPDK_2.0 2.2
|
||||
rte_acl_set_ctx_classify@DPDK_2.0 2.2
|
||||
rte_approx@DPDK_2.0 2.2
|
||||
rte_calloc@DPDK_2.0 2.2
|
||||
rte_calloc_socket@DPDK_2.0 2.2
|
||||
rte_cfgfile_close@DPDK_2.0 2.2
|
||||
rte_cfgfile_get_entry@DPDK_2.0 2.2
|
||||
rte_cfgfile_has_entry@DPDK_2.0 2.2
|
||||
rte_cfgfile_has_section@DPDK_2.0 2.2
|
||||
rte_cfgfile_load@DPDK_2.0 2.2
|
||||
rte_cfgfile_num_sections@DPDK_2.0 2.2
|
||||
rte_cfgfile_section_entries@DPDK_2.0 2.2
|
||||
rte_cfgfile_section_num_entries@DPDK_2.0 2.2
|
||||
rte_cfgfile_sections@DPDK_2.0 2.2
|
||||
rte_cpu_check_supported@DPDK_2.0 2.2
|
||||
rte_cryptodev_callback_register@DPDK_2.2 2.2
|
||||
rte_cryptodev_callback_unregister@DPDK_2.2 2.2
|
||||
rte_cryptodev_close@DPDK_2.2 2.2
|
||||
rte_cryptodev_configure@DPDK_2.2 2.2
|
||||
rte_cryptodev_count@DPDK_2.2 2.2
|
||||
rte_cryptodev_count_devtype@DPDK_2.2 2.2
|
||||
rte_cryptodev_create_vdev@DPDK_2.2 2.2
|
||||
rte_cryptodev_get_dev_id@DPDK_2.2 2.2
|
||||
rte_cryptodev_info_get@DPDK_2.2 2.2
|
||||
rte_cryptodev_pmd_allocate@DPDK_2.2 2.2
|
||||
rte_cryptodev_pmd_callback_process@DPDK_2.2 2.2
|
||||
rte_cryptodev_pmd_driver_register@DPDK_2.2 2.2
|
||||
rte_cryptodev_pmd_release_device@DPDK_2.2 2.2
|
||||
rte_cryptodev_pmd_virtual_dev_init@DPDK_2.2 2.2
|
||||
rte_cryptodev_queue_pair_count@DPDK_2.2 2.2
|
||||
rte_cryptodev_queue_pair_setup@DPDK_2.2 2.2
|
||||
rte_cryptodev_queue_pair_start@DPDK_2.2 2.2
|
||||
rte_cryptodev_queue_pair_stop@DPDK_2.2 2.2
|
||||
rte_cryptodev_session_create@DPDK_2.2 2.2
|
||||
rte_cryptodev_session_free@DPDK_2.2 2.2
|
||||
rte_cryptodev_socket_id@DPDK_2.2 2.2
|
||||
rte_cryptodev_start@DPDK_2.2 2.2
|
||||
rte_cryptodev_stats_get@DPDK_2.2 2.2
|
||||
rte_cryptodev_stats_reset@DPDK_2.2 2.2
|
||||
rte_cryptodev_stop@DPDK_2.2 2.2
|
||||
rte_cryptodevs@DPDK_2.2 2.2
|
||||
rte_ctrlmbuf_init@DPDK_2.0 2.2
|
||||
rte_cycles_vmware_tsc_map@DPDK_2.0 2.2
|
||||
rte_delay_us@DPDK_2.0 2.2
|
||||
rte_distributor_clear_returns@DPDK_2.0 2.2
|
||||
rte_distributor_create@DPDK_2.0 2.2
|
||||
rte_distributor_flush@DPDK_2.0 2.2
|
||||
rte_distributor_get_pkt@DPDK_2.0 2.2
|
||||
rte_distributor_poll_pkt@DPDK_2.0 2.2
|
||||
rte_distributor_process@DPDK_2.0 2.2
|
||||
rte_distributor_request_pkt@DPDK_2.0 2.2
|
||||
rte_distributor_return_pkt@DPDK_2.0 2.2
|
||||
rte_distributor_returned_pkts@DPDK_2.0 2.2
|
||||
rte_dom0_mempool_create@DPDK_2.0 2.2
|
||||
rte_dump_physmem_layout@DPDK_2.0 2.2
|
||||
rte_dump_registers@DPDK_2.0 2.2
|
||||
rte_dump_stack@DPDK_2.0 2.2
|
||||
rte_dump_tailq@DPDK_2.0 2.2
|
||||
rte_eal_alarm_cancel@DPDK_2.0 2.2
|
||||
rte_eal_alarm_set@DPDK_2.0 2.2
|
||||
rte_eal_dev_init@DPDK_2.0 2.2
|
||||
rte_eal_devargs_add@DPDK_2.0 2.2
|
||||
rte_eal_devargs_dump@DPDK_2.0 2.2
|
||||
rte_eal_devargs_type_count@DPDK_2.0 2.2
|
||||
rte_eal_driver_register@DPDK_2.0 2.2
|
||||
rte_eal_driver_unregister@DPDK_2.0 2.2
|
||||
rte_eal_get_configuration@DPDK_2.0 2.2
|
||||
rte_eal_get_lcore_state@DPDK_2.0 2.2
|
||||
rte_eal_get_physmem_layout@DPDK_2.0 2.2
|
||||
rte_eal_get_physmem_size@DPDK_2.0 2.2
|
||||
rte_eal_has_hugepages@DPDK_2.0 2.2
|
||||
rte_eal_init@DPDK_2.0 2.2
|
||||
rte_eal_iopl_init@DPDK_2.0 2.2
|
||||
rte_eal_lcore_role@DPDK_2.0 2.2
|
||||
rte_eal_mp_remote_launch@DPDK_2.0 2.2
|
||||
rte_eal_mp_wait_lcore@DPDK_2.0 2.2
|
||||
rte_eal_parse_devargs_str@DPDK_2.0 2.2
|
||||
rte_eal_pci_detach@DPDK_2.1 2.2
|
||||
rte_eal_pci_dump@DPDK_2.0 2.2
|
||||
rte_eal_pci_probe@DPDK_2.0 2.2
|
||||
rte_eal_pci_probe_one@DPDK_2.0 2.2
|
||||
rte_eal_pci_read_config@DPDK_2.1 2.2
|
||||
rte_eal_pci_register@DPDK_2.0 2.2
|
||||
rte_eal_pci_scan@DPDK_2.0 2.2
|
||||
rte_eal_pci_unregister@DPDK_2.0 2.2
|
||||
rte_eal_pci_write_config@DPDK_2.1 2.2
|
||||
rte_eal_process_type@DPDK_2.0 2.2
|
||||
rte_eal_remote_launch@DPDK_2.0 2.2
|
||||
rte_eal_tailq_lookup@DPDK_2.0 2.2
|
||||
rte_eal_tailq_register@DPDK_2.0 2.2
|
||||
rte_eal_vdev_init@DPDK_2.0 2.2
|
||||
rte_eal_vdev_uninit@DPDK_2.0 2.2
|
||||
rte_eal_wait_lcore@DPDK_2.0 2.2
|
||||
rte_epoll_ctl@DPDK_2.1 2.2
|
||||
rte_epoll_wait@DPDK_2.1 2.2
|
||||
rte_eth_add_rx_callback@DPDK_2.2 2.2
|
||||
rte_eth_add_tx_callback@DPDK_2.2 2.2
|
||||
rte_eth_allmulticast_disable@DPDK_2.2 2.2
|
||||
rte_eth_allmulticast_enable@DPDK_2.2 2.2
|
||||
rte_eth_allmulticast_get@DPDK_2.2 2.2
|
||||
rte_eth_bond_8023ad_conf_get@DPDK_2.0 2.2
|
||||
rte_eth_bond_8023ad_setup@DPDK_2.0 2.2
|
||||
rte_eth_bond_active_slaves_get@DPDK_2.0 2.2
|
||||
rte_eth_bond_create@DPDK_2.0 2.2
|
||||
rte_eth_bond_free@DPDK_2.1 2.2
|
||||
rte_eth_bond_link_monitoring_set@DPDK_2.0 2.2
|
||||
rte_eth_bond_mac_address_reset@DPDK_2.0 2.2
|
||||
rte_eth_bond_mac_address_set@DPDK_2.0 2.2
|
||||
rte_eth_bond_mode_get@DPDK_2.0 2.2
|
||||
rte_eth_bond_mode_set@DPDK_2.0 2.2
|
||||
rte_eth_bond_primary_get@DPDK_2.0 2.2
|
||||
rte_eth_bond_primary_set@DPDK_2.0 2.2
|
||||
rte_eth_bond_slave_add@DPDK_2.0 2.2
|
||||
rte_eth_bond_slave_remove@DPDK_2.0 2.2
|
||||
rte_eth_bond_slaves_get@DPDK_2.0 2.2
|
||||
rte_eth_bond_xmit_policy_get@DPDK_2.0 2.2
|
||||
rte_eth_bond_xmit_policy_set@DPDK_2.0 2.2
|
||||
rte_eth_copy_pci_info@DPDK_2.2 2.2
|
||||
rte_eth_dev_allocate@DPDK_2.2 2.2
|
||||
rte_eth_dev_allocated@DPDK_2.2 2.2
|
||||
rte_eth_dev_attach@DPDK_2.2 2.2
|
||||
rte_eth_dev_callback_register@DPDK_2.2 2.2
|
||||
rte_eth_dev_callback_unregister@DPDK_2.2 2.2
|
||||
rte_eth_dev_close@DPDK_2.2 2.2
|
||||
rte_eth_dev_configure@DPDK_2.2 2.2
|
||||
rte_eth_dev_count@DPDK_2.2 2.2
|
||||
rte_eth_dev_default_mac_addr_set@DPDK_2.2 2.2
|
||||
rte_eth_dev_detach@DPDK_2.2 2.2
|
||||
rte_eth_dev_filter_ctrl@DPDK_2.2 2.2
|
||||
rte_eth_dev_filter_supported@DPDK_2.2 2.2
|
||||
rte_eth_dev_flow_ctrl_get@DPDK_2.2 2.2
|
||||
rte_eth_dev_flow_ctrl_set@DPDK_2.2 2.2
|
||||
rte_eth_dev_get_dcb_info@DPDK_2.2 2.2
|
||||
rte_eth_dev_get_eeprom@DPDK_2.2 2.2
|
||||
rte_eth_dev_get_eeprom_length@DPDK_2.2 2.2
|
||||
rte_eth_dev_get_mtu@DPDK_2.2 2.2
|
||||
rte_eth_dev_get_reg_info@DPDK_2.2 2.2
|
||||
rte_eth_dev_get_reg_length@DPDK_2.2 2.2
|
||||
rte_eth_dev_get_vlan_offload@DPDK_2.2 2.2
|
||||
rte_eth_dev_info_get@DPDK_2.2 2.2
|
||||
rte_eth_dev_is_valid_port@DPDK_2.2 2.2
|
||||
rte_eth_dev_mac_addr_add@DPDK_2.2 2.2
|
||||
rte_eth_dev_mac_addr_remove@DPDK_2.2 2.2
|
||||
rte_eth_dev_priority_flow_ctrl_set@DPDK_2.2 2.2
|
||||
rte_eth_dev_release_port@DPDK_2.2 2.2
|
||||
rte_eth_dev_rss_hash_conf_get@DPDK_2.2 2.2
|
||||
rte_eth_dev_rss_hash_update@DPDK_2.2 2.2
|
||||
rte_eth_dev_rss_reta_query@DPDK_2.2 2.2
|
||||
rte_eth_dev_rss_reta_update@DPDK_2.2 2.2
|
||||
rte_eth_dev_rx_intr_ctl@DPDK_2.2 2.2
|
||||
rte_eth_dev_rx_intr_ctl_q@DPDK_2.2 2.2
|
||||
rte_eth_dev_rx_intr_disable@DPDK_2.2 2.2
|
||||
rte_eth_dev_rx_intr_enable@DPDK_2.2 2.2
|
||||
rte_eth_dev_rx_queue_start@DPDK_2.2 2.2
|
||||
rte_eth_dev_rx_queue_stop@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_eeprom@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_link_down@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_link_up@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_mc_addr_list@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_mtu@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_rx_queue_stats_mapping@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_tx_queue_stats_mapping@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_vf_rx@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_vf_rxmode@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_vf_tx@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_vf_vlan_filter@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_vlan_ether_type@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_vlan_offload@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_vlan_pvid@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_vlan_strip_on_queue@DPDK_2.2 2.2
|
||||
rte_eth_dev_socket_id@DPDK_2.2 2.2
|
||||
rte_eth_dev_start@DPDK_2.2 2.2
|
||||
rte_eth_dev_stop@DPDK_2.2 2.2
|
||||
rte_eth_dev_tx_queue_start@DPDK_2.2 2.2
|
||||
rte_eth_dev_tx_queue_stop@DPDK_2.2 2.2
|
||||
rte_eth_dev_uc_all_hash_table_set@DPDK_2.2 2.2
|
||||
rte_eth_dev_uc_hash_table_set@DPDK_2.2 2.2
|
||||
rte_eth_dev_udp_tunnel_add@DPDK_2.2 2.2
|
||||
rte_eth_dev_udp_tunnel_delete@DPDK_2.2 2.2
|
||||
rte_eth_dev_vlan_filter@DPDK_2.2 2.2
|
||||
rte_eth_devices@DPDK_2.2 2.2
|
||||
rte_eth_dma_zone_reserve@DPDK_2.2 2.2
|
||||
rte_eth_driver_register@DPDK_2.2 2.2
|
||||
rte_eth_from_ring@DPDK_2.2 2.2
|
||||
rte_eth_from_rings@DPDK_2.0 2.2
|
||||
rte_eth_led_off@DPDK_2.2 2.2
|
||||
rte_eth_led_on@DPDK_2.2 2.2
|
||||
rte_eth_link_get@DPDK_2.2 2.2
|
||||
rte_eth_link_get_nowait@DPDK_2.2 2.2
|
||||
rte_eth_macaddr_get@DPDK_2.2 2.2
|
||||
rte_eth_mirror_rule_reset@DPDK_2.2 2.2
|
||||
rte_eth_mirror_rule_set@DPDK_2.2 2.2
|
||||
rte_eth_promiscuous_disable@DPDK_2.2 2.2
|
||||
rte_eth_promiscuous_enable@DPDK_2.2 2.2
|
||||
rte_eth_promiscuous_get@DPDK_2.2 2.2
|
||||
rte_eth_remove_rx_callback@DPDK_2.2 2.2
|
||||
rte_eth_remove_tx_callback@DPDK_2.2 2.2
|
||||
rte_eth_rx_queue_info_get@DPDK_2.2 2.2
|
||||
rte_eth_rx_queue_setup@DPDK_2.2 2.2
|
||||
rte_eth_set_queue_rate_limit@DPDK_2.2 2.2
|
||||
rte_eth_set_vf_rate_limit@DPDK_2.2 2.2
|
||||
rte_eth_stats_get@DPDK_2.2 2.2
|
||||
rte_eth_stats_reset@DPDK_2.2 2.2
|
||||
rte_eth_timesync_adjust_time@DPDK_2.2 2.2
|
||||
rte_eth_timesync_disable@DPDK_2.2 2.2
|
||||
rte_eth_timesync_enable@DPDK_2.2 2.2
|
||||
rte_eth_timesync_read_rx_timestamp@DPDK_2.2 2.2
|
||||
rte_eth_timesync_read_time@DPDK_2.2 2.2
|
||||
rte_eth_timesync_read_tx_timestamp@DPDK_2.2 2.2
|
||||
rte_eth_timesync_write_time@DPDK_2.2 2.2
|
||||
rte_eth_tx_queue_info_get@DPDK_2.2 2.2
|
||||
rte_eth_tx_queue_setup@DPDK_2.2 2.2
|
||||
rte_eth_xstats_get@DPDK_2.2 2.2
|
||||
rte_eth_xstats_reset@DPDK_2.2 2.2
|
||||
rte_exit@DPDK_2.0 2.2
|
||||
rte_fbk_hash_create@DPDK_2.0 2.2
|
||||
rte_fbk_hash_find_existing@DPDK_2.0 2.2
|
||||
rte_fbk_hash_free@DPDK_2.0 2.2
|
||||
rte_free@DPDK_2.0 2.2
|
||||
rte_get_rx_ol_flag_name@DPDK_2.0 2.2
|
||||
rte_get_tsc_hz@DPDK_2.0 2.2
|
||||
rte_get_tx_ol_flag_name@DPDK_2.0 2.2
|
||||
rte_hash_add_key@DPDK_2.0 2.2
|
||||
rte_hash_add_key_data@DPDK_2.1 2.2
|
||||
rte_hash_add_key_with_hash@DPDK_2.0 2.2
|
||||
rte_hash_add_key_with_hash_data@DPDK_2.1 2.2
|
||||
rte_hash_create@DPDK_2.0 2.2
|
||||
rte_hash_del_key@DPDK_2.0 2.2
|
||||
rte_hash_del_key_with_hash@DPDK_2.0 2.2
|
||||
rte_hash_find_existing@DPDK_2.0 2.2
|
||||
rte_hash_free@DPDK_2.0 2.2
|
||||
rte_hash_hash@DPDK_2.0 2.2
|
||||
rte_hash_iterate@DPDK_2.1 2.2
|
||||
rte_hash_lookup@DPDK_2.0 2.2
|
||||
rte_hash_lookup_bulk@DPDK_2.0 2.2
|
||||
rte_hash_lookup_bulk_data@DPDK_2.1 2.2
|
||||
rte_hash_lookup_data@DPDK_2.1 2.2
|
||||
rte_hash_lookup_with_hash@DPDK_2.0 2.2
|
||||
rte_hash_lookup_with_hash_data@DPDK_2.1 2.2
|
||||
rte_hash_reset@DPDK_2.1 2.2
|
||||
rte_hash_set_cmp_func@DPDK_2.2 2.2
|
||||
rte_hexdump@DPDK_2.0 2.2
|
||||
rte_intr_allow_others@DPDK_2.1 2.2
|
||||
rte_intr_callback_register@DPDK_2.0 2.2
|
||||
rte_intr_callback_unregister@DPDK_2.0 2.2
|
||||
rte_intr_cap_multiple@DPDK_2.2 2.2
|
||||
rte_intr_disable@DPDK_2.0 2.2
|
||||
rte_intr_dp_is_en@DPDK_2.1 2.2
|
||||
rte_intr_efd_disable@DPDK_2.1 2.2
|
||||
rte_intr_efd_enable@DPDK_2.1 2.2
|
||||
rte_intr_enable@DPDK_2.0 2.2
|
||||
rte_intr_rx_ctl@DPDK_2.1 2.2
|
||||
rte_intr_tls_epfd@DPDK_2.1 2.2
|
||||
rte_ip_frag_free_death_row@DPDK_2.0 2.2
|
||||
rte_ip_frag_table_create@DPDK_2.0 2.2
|
||||
rte_ip_frag_table_statistics_dump@DPDK_2.0 2.2
|
||||
rte_ipv4_frag_reassemble_packet@DPDK_2.0 2.2
|
||||
rte_ipv4_fragment_packet@DPDK_2.0 2.2
|
||||
rte_ipv6_frag_reassemble_packet@DPDK_2.0 2.2
|
||||
rte_ipv6_fragment_packet@DPDK_2.0 2.2
|
||||
rte_jobstats_context_finish@DPDK_2.0 2.2
|
||||
rte_jobstats_context_init@DPDK_2.0 2.2
|
||||
rte_jobstats_context_reset@DPDK_2.0 2.2
|
||||
rte_jobstats_context_start@DPDK_2.0 2.2
|
||||
rte_jobstats_finish@DPDK_2.0 2.2
|
||||
rte_jobstats_init@DPDK_2.0 2.2
|
||||
rte_jobstats_reset@DPDK_2.0 2.2
|
||||
rte_jobstats_set_max@DPDK_2.0 2.2
|
||||
rte_jobstats_set_min@DPDK_2.0 2.2
|
||||
rte_jobstats_set_period@DPDK_2.0 2.2
|
||||
rte_jobstats_set_target@DPDK_2.0 2.2
|
||||
rte_jobstats_set_update_period_function@DPDK_2.0 2.2
|
||||
rte_jobstats_start@DPDK_2.0 2.2
|
||||
rte_keepalive_create@DPDK_2.2 2.2
|
||||
rte_keepalive_dispatch_pings@DPDK_2.2 2.2
|
||||
rte_keepalive_register_core@DPDK_2.2 2.2
|
||||
rte_kni_alloc@DPDK_2.0 2.2
|
||||
rte_kni_close@DPDK_2.0 2.2
|
||||
rte_kni_get@DPDK_2.0 2.2
|
||||
rte_kni_get_name@DPDK_2.0 2.2
|
||||
rte_kni_handle_request@DPDK_2.0 2.2
|
||||
rte_kni_init@DPDK_2.0 2.2
|
||||
rte_kni_register_handlers@DPDK_2.0 2.2
|
||||
rte_kni_release@DPDK_2.0 2.2
|
||||
rte_kni_rx_burst@DPDK_2.0 2.2
|
||||
rte_kni_tx_burst@DPDK_2.0 2.2
|
||||
rte_kni_unregister_handlers@DPDK_2.0 2.2
|
||||
rte_kvargs_count@DPDK_2.0 2.2
|
||||
rte_kvargs_free@DPDK_2.0 2.2
|
||||
rte_kvargs_parse@DPDK_2.0 2.2
|
||||
rte_kvargs_process@DPDK_2.0 2.2
|
||||
rte_log@DPDK_2.0 2.2
|
||||
rte_log_add_in_history@DPDK_2.0 2.2
|
||||
rte_log_cur_msg_loglevel@DPDK_2.0 2.2
|
||||
rte_log_cur_msg_logtype@DPDK_2.0 2.2
|
||||
rte_log_dump_history@DPDK_2.0 2.2
|
||||
rte_log_set_history@DPDK_2.0 2.2
|
||||
rte_logs@DPDK_2.0 2.2
|
||||
rte_lpm6_add@DPDK_2.0 2.2
|
||||
rte_lpm6_create@DPDK_2.0 2.2
|
||||
rte_lpm6_delete@DPDK_2.0 2.2
|
||||
rte_lpm6_delete_all@DPDK_2.0 2.2
|
||||
rte_lpm6_delete_bulk_func@DPDK_2.0 2.2
|
||||
rte_lpm6_find_existing@DPDK_2.0 2.2
|
||||
rte_lpm6_free@DPDK_2.0 2.2
|
||||
rte_lpm6_is_rule_present@DPDK_2.0 2.2
|
||||
rte_lpm6_lookup@DPDK_2.0 2.2
|
||||
rte_lpm6_lookup_bulk_func@DPDK_2.0 2.2
|
||||
rte_lpm_add@DPDK_2.0 2.2
|
||||
rte_lpm_create@DPDK_2.0 2.2
|
||||
rte_lpm_delete@DPDK_2.0 2.2
|
||||
rte_lpm_delete_all@DPDK_2.0 2.2
|
||||
rte_lpm_find_existing@DPDK_2.0 2.2
|
||||
rte_lpm_free@DPDK_2.0 2.2
|
||||
rte_lpm_is_rule_present@DPDK_2.0 2.2
|
||||
rte_malloc@DPDK_2.0 2.2
|
||||
rte_malloc_dump_stats@DPDK_2.0 2.2
|
||||
rte_malloc_get_socket_stats@DPDK_2.0 2.2
|
||||
rte_malloc_set_limit@DPDK_2.0 2.2
|
||||
rte_malloc_socket@DPDK_2.0 2.2
|
||||
rte_malloc_validate@DPDK_2.0 2.2
|
||||
rte_malloc_virt2phy@DPDK_2.0 2.2
|
||||
rte_mbuf_sanity_check@DPDK_2.0 2.2
|
||||
rte_mem_lock_page@DPDK_2.0 2.2
|
||||
rte_mem_virt2phy@DPDK_2.0 2.2
|
||||
rte_memdump@DPDK_2.0 2.2
|
||||
rte_memory_get_nchannel@DPDK_2.0 2.2
|
||||
rte_memory_get_nrank@DPDK_2.0 2.2
|
||||
rte_mempool_audit@DPDK_2.0 2.2
|
||||
rte_mempool_calc_obj_size@DPDK_2.0 2.2
|
||||
rte_mempool_count@DPDK_2.0 2.2
|
||||
rte_mempool_create@DPDK_2.0 2.2
|
||||
rte_mempool_dump@DPDK_2.0 2.2
|
||||
rte_mempool_gntalloc_create@DPDK_2.0 2.2
|
||||
rte_mempool_list_dump@DPDK_2.0 2.2
|
||||
rte_mempool_lookup@DPDK_2.0 2.2
|
||||
rte_mempool_obj_iter@DPDK_2.0 2.2
|
||||
rte_mempool_walk@DPDK_2.0 2.2
|
||||
rte_mempool_xmem_create@DPDK_2.0 2.2
|
||||
rte_mempool_xmem_size@DPDK_2.0 2.2
|
||||
rte_mempool_xmem_usage@DPDK_2.0 2.2
|
||||
rte_memzone_dump@DPDK_2.0 2.2
|
||||
rte_memzone_free@DPDK_2.1 2.2
|
||||
rte_memzone_lookup@DPDK_2.0 2.2
|
||||
rte_memzone_reserve@DPDK_2.0 2.2
|
||||
rte_memzone_reserve_aligned@DPDK_2.0 2.2
|
||||
rte_memzone_reserve_bounded@DPDK_2.0 2.2
|
||||
rte_memzone_walk@DPDK_2.0 2.2
|
||||
rte_meter_srtcm_config@DPDK_2.0 2.2
|
||||
rte_meter_trtcm_config@DPDK_2.0 2.2
|
||||
rte_openlog_stream@DPDK_2.0 2.2
|
||||
rte_pipeline_check@DPDK_2.0 2.2
|
||||
rte_pipeline_create@DPDK_2.0 2.2
|
||||
rte_pipeline_flush@DPDK_2.0 2.2
|
||||
rte_pipeline_free@DPDK_2.0 2.2
|
||||
rte_pipeline_port_in_connect_to_table@DPDK_2.0 2.2
|
||||
rte_pipeline_port_in_create@DPDK_2.0 2.2
|
||||
rte_pipeline_port_in_disable@DPDK_2.0 2.2
|
||||
rte_pipeline_port_in_enable@DPDK_2.0 2.2
|
||||
rte_pipeline_port_in_stats_read@DPDK_2.1 2.2
|
||||
rte_pipeline_port_out_create@DPDK_2.0 2.2
|
||||
rte_pipeline_port_out_packet_insert@DPDK_2.0 2.2
|
||||
rte_pipeline_port_out_stats_read@DPDK_2.1 2.2
|
||||
rte_pipeline_run@DPDK_2.0 2.2
|
||||
rte_pipeline_table_create@DPDK_2.0 2.2
|
||||
rte_pipeline_table_default_entry_add@DPDK_2.0 2.2
|
||||
rte_pipeline_table_default_entry_delete@DPDK_2.0 2.2
|
||||
rte_pipeline_table_entry_add@DPDK_2.0 2.2
|
||||
rte_pipeline_table_entry_add_bulk@DPDK_2.2 2.2
|
||||
rte_pipeline_table_entry_delete@DPDK_2.0 2.2
|
||||
rte_pipeline_table_entry_delete_bulk@DPDK_2.2 2.2
|
||||
rte_pipeline_table_stats_read@DPDK_2.1 2.2
|
||||
rte_pktmbuf_dump@DPDK_2.0 2.2
|
||||
rte_pktmbuf_init@DPDK_2.0 2.2
|
||||
rte_pktmbuf_offload_pool_create@DPDK_2.2 2.2
|
||||
rte_pktmbuf_pool_create@DPDK_2.1 2.2
|
||||
rte_pktmbuf_pool_init@DPDK_2.0 2.2
|
||||
rte_pmd_af_packet_devinit@DPDK_2.0 2.2
|
||||
rte_port_ethdev_reader_ops@DPDK_2.0 2.2
|
||||
rte_port_ethdev_writer_nodrop_ops@DPDK_2.1 2.2
|
||||
rte_port_ethdev_writer_ops@DPDK_2.0 2.2
|
||||
rte_port_ring_multi_reader_ops@DPDK_2.2 2.2
|
||||
rte_port_ring_multi_writer_nodrop_ops@DPDK_2.2 2.2
|
||||
rte_port_ring_multi_writer_ops@DPDK_2.2 2.2
|
||||
rte_port_ring_reader_ipv4_frag_ops@DPDK_2.0 2.2
|
||||
rte_port_ring_reader_ipv6_frag_ops@DPDK_2.1 2.2
|
||||
rte_port_ring_reader_ops@DPDK_2.0 2.2
|
||||
rte_port_ring_writer_ipv4_ras_ops@DPDK_2.0 2.2
|
||||
rte_port_ring_writer_ipv6_ras_ops@DPDK_2.1 2.2
|
||||
rte_port_ring_writer_nodrop_ops@DPDK_2.1 2.2
|
||||
rte_port_ring_writer_ops@DPDK_2.0 2.2
|
||||
rte_port_sched_reader_ops@DPDK_2.0 2.2
|
||||
rte_port_sched_writer_ops@DPDK_2.0 2.2
|
||||
rte_port_sink_ops@DPDK_2.0 2.2
|
||||
rte_port_source_ops@DPDK_2.0 2.2
|
||||
rte_power_exit@DPDK_2.0 2.2
|
||||
rte_power_freq_down@DPDK_2.0 2.2
|
||||
rte_power_freq_max@DPDK_2.0 2.2
|
||||
rte_power_freq_min@DPDK_2.0 2.2
|
||||
rte_power_freq_up@DPDK_2.0 2.2
|
||||
rte_power_freqs@DPDK_2.0 2.2
|
||||
rte_power_get_env@DPDK_2.0 2.2
|
||||
rte_power_get_freq@DPDK_2.0 2.2
|
||||
rte_power_init@DPDK_2.0 2.2
|
||||
rte_power_set_env@DPDK_2.0 2.2
|
||||
rte_power_set_freq@DPDK_2.0 2.2
|
||||
rte_power_unset_env@DPDK_2.0 2.2
|
||||
rte_realloc@DPDK_2.0 2.2
|
||||
rte_red_config_init@DPDK_2.0 2.2
|
||||
rte_red_log2_1_minus_Wq@DPDK_2.0 2.2
|
||||
rte_red_pow2_frac_inv@DPDK_2.0 2.2
|
||||
rte_red_rand_seed@DPDK_2.0 2.2
|
||||
rte_red_rand_val@DPDK_2.0 2.2
|
||||
rte_red_rt_data_init@DPDK_2.0 2.2
|
||||
rte_reorder_create@DPDK_2.0 2.2
|
||||
rte_reorder_drain@DPDK_2.0 2.2
|
||||
rte_reorder_find_existing@DPDK_2.0 2.2
|
||||
rte_reorder_free@DPDK_2.0 2.2
|
||||
rte_reorder_init@DPDK_2.0 2.2
|
||||
rte_reorder_insert@DPDK_2.0 2.2
|
||||
rte_reorder_reset@DPDK_2.0 2.2
|
||||
rte_ring_create@DPDK_2.0 2.2
|
||||
rte_ring_dump@DPDK_2.0 2.2
|
||||
rte_ring_free@DPDK_2.2 2.2
|
||||
rte_ring_get_memsize@DPDK_2.0 2.2
|
||||
rte_ring_init@DPDK_2.0 2.2
|
||||
rte_ring_list_dump@DPDK_2.0 2.2
|
||||
rte_ring_lookup@DPDK_2.0 2.2
|
||||
rte_ring_set_water_mark@DPDK_2.0 2.2
|
||||
rte_sched_pipe_config@DPDK_2.0 2.2
|
||||
rte_sched_port_config@DPDK_2.0 2.2
|
||||
rte_sched_port_dequeue@DPDK_2.0 2.2
|
||||
rte_sched_port_enqueue@DPDK_2.0 2.2
|
||||
rte_sched_port_free@DPDK_2.0 2.2
|
||||
rte_sched_port_get_memory_footprint@DPDK_2.0 2.2
|
||||
rte_sched_port_pkt_read_color@DPDK_2.1 2.2
|
||||
rte_sched_port_pkt_read_tree_path@DPDK_2.1 2.2
|
||||
rte_sched_port_pkt_write@DPDK_2.1 2.2
|
||||
rte_sched_queue_read_stats@DPDK_2.0 2.2
|
||||
rte_sched_subport_config@DPDK_2.0 2.2
|
||||
rte_sched_subport_read_stats@DPDK_2.0 2.2
|
||||
rte_set_application_usage_hook@DPDK_2.0 2.2
|
||||
rte_set_log_level@DPDK_2.0 2.2
|
||||
rte_set_log_type@DPDK_2.0 2.2
|
||||
rte_socket_id@DPDK_2.0 2.2
|
||||
rte_strerror@DPDK_2.0 2.2
|
||||
rte_strsplit@DPDK_2.0 2.2
|
||||
rte_sys_gettid@DPDK_2.0 2.2
|
||||
rte_table_acl_ops@DPDK_2.0 2.2
|
||||
rte_table_array_ops@DPDK_2.0 2.2
|
||||
rte_table_hash_ext_ops@DPDK_2.0 2.2
|
||||
rte_table_hash_key16_ext_dosig_ops@DPDK_2.2 2.2
|
||||
rte_table_hash_key16_ext_ops@DPDK_2.0 2.2
|
||||
rte_table_hash_key16_lru_ops@DPDK_2.0 2.2
|
||||
rte_table_hash_key32_ext_ops@DPDK_2.0 2.2
|
||||
rte_table_hash_key32_lru_ops@DPDK_2.0 2.2
|
||||
rte_table_hash_key8_ext_dosig_ops@DPDK_2.0 2.2
|
||||
rte_table_hash_key8_ext_ops@DPDK_2.0 2.2
|
||||
rte_table_hash_key8_lru_dosig_ops@DPDK_2.0 2.2
|
||||
rte_table_hash_key8_lru_ops@DPDK_2.0 2.2
|
||||
rte_table_hash_lru_ops@DPDK_2.0 2.2
|
||||
rte_table_lpm_ipv6_ops@DPDK_2.0 2.2
|
||||
rte_table_lpm_ops@DPDK_2.0 2.2
|
||||
rte_table_stub_ops@DPDK_2.0 2.2
|
||||
rte_thread_get_affinity@DPDK_2.0 2.2
|
||||
rte_thread_set_affinity@DPDK_2.0 2.2
|
||||
rte_timer_dump_stats@DPDK_2.0 2.2
|
||||
rte_timer_init@DPDK_2.0 2.2
|
||||
rte_timer_manage@DPDK_2.0 2.2
|
||||
rte_timer_pending@DPDK_2.0 2.2
|
||||
rte_timer_reset@DPDK_2.0 2.2
|
||||
rte_timer_reset_sync@DPDK_2.0 2.2
|
||||
rte_timer_stop@DPDK_2.0 2.2
|
||||
rte_timer_stop_sync@DPDK_2.0 2.2
|
||||
rte_timer_subsystem_init@DPDK_2.0 2.2
|
||||
rte_vhost_dequeue_burst@DPDK_2.0 2.2
|
||||
rte_vhost_driver_callback_register@DPDK_2.0 2.2
|
||||
rte_vhost_driver_register@DPDK_2.0 2.2
|
||||
rte_vhost_driver_session_start@DPDK_2.0 2.2
|
||||
rte_vhost_driver_unregister@DPDK_2.1 2.2
|
||||
rte_vhost_enable_guest_notification@DPDK_2.0 2.2
|
||||
rte_vhost_enqueue_burst@DPDK_2.0 2.2
|
||||
rte_vhost_feature_disable@DPDK_2.0 2.2
|
||||
rte_vhost_feature_enable@DPDK_2.0 2.2
|
||||
rte_vhost_feature_get@DPDK_2.0 2.2
|
||||
rte_vlog@DPDK_2.0 2.2
|
||||
rte_zmalloc@DPDK_2.0 2.2
|
||||
rte_zmalloc_socket@DPDK_2.0 2.2
|
||||
vt100_init@DPDK_2.0 2.2
|
||||
vt100_parser@DPDK_2.0 2.2
|
|
@ -1,569 +0,0 @@
|
|||
libdpdk.so.0 libdpdk0 #MINVER#
|
||||
* Build-Depends-Package: libdpdk-dev
|
||||
DPDK_2.0@DPDK_2.0 2.2
|
||||
DPDK_2.1@DPDK_2.1 2.2
|
||||
DPDK_2.2@DPDK_2.2 2.2
|
||||
__rte_panic@DPDK_2.0 2.2
|
||||
_rte_eth_dev_callback_process@DPDK_2.2 2.2
|
||||
cirbuf_add_buf_head@DPDK_2.0 2.2
|
||||
cirbuf_add_buf_tail@DPDK_2.0 2.2
|
||||
cirbuf_add_head@DPDK_2.0 2.2
|
||||
cirbuf_add_head_safe@DPDK_2.0 2.2
|
||||
cirbuf_add_tail@DPDK_2.0 2.2
|
||||
cirbuf_add_tail_safe@DPDK_2.0 2.2
|
||||
cirbuf_align_left@DPDK_2.0 2.2
|
||||
cirbuf_align_right@DPDK_2.0 2.2
|
||||
cirbuf_del_buf_head@DPDK_2.0 2.2
|
||||
cirbuf_del_buf_tail@DPDK_2.0 2.2
|
||||
cirbuf_del_head@DPDK_2.0 2.2
|
||||
cirbuf_del_head_safe@DPDK_2.0 2.2
|
||||
cirbuf_del_tail@DPDK_2.0 2.2
|
||||
cirbuf_del_tail_safe@DPDK_2.0 2.2
|
||||
cirbuf_get_buf_head@DPDK_2.0 2.2
|
||||
cirbuf_get_buf_tail@DPDK_2.0 2.2
|
||||
cirbuf_get_head@DPDK_2.0 2.2
|
||||
cirbuf_get_tail@DPDK_2.0 2.2
|
||||
cirbuf_init@DPDK_2.0 2.2
|
||||
cmdline_complete@DPDK_2.0 2.2
|
||||
cmdline_complete_get_elt_string@DPDK_2.0 2.2
|
||||
cmdline_complete_get_nb_string@DPDK_2.0 2.2
|
||||
cmdline_file_new@DPDK_2.0 2.2
|
||||
cmdline_free@DPDK_2.0 2.2
|
||||
cmdline_get_help_etheraddr@DPDK_2.0 2.2
|
||||
cmdline_get_help_ipaddr@DPDK_2.0 2.2
|
||||
cmdline_get_help_num@DPDK_2.0 2.2
|
||||
cmdline_get_help_portlist@DPDK_2.0 2.2
|
||||
cmdline_get_help_string@DPDK_2.0 2.2
|
||||
cmdline_in@DPDK_2.0 2.2
|
||||
cmdline_interact@DPDK_2.0 2.2
|
||||
cmdline_isendoftoken@DPDK_2.0 2.2
|
||||
cmdline_new@DPDK_2.0 2.2
|
||||
cmdline_parse@DPDK_2.0 2.2
|
||||
cmdline_parse_etheraddr@DPDK_2.0 2.2
|
||||
cmdline_parse_ipaddr@DPDK_2.0 2.2
|
||||
cmdline_parse_num@DPDK_2.0 2.2
|
||||
cmdline_parse_portlist@DPDK_2.0 2.2
|
||||
cmdline_parse_string@DPDK_2.0 2.2
|
||||
cmdline_poll@DPDK_2.1 2.2
|
||||
cmdline_printf@DPDK_2.0 2.2
|
||||
cmdline_quit@DPDK_2.0 2.2
|
||||
cmdline_set_prompt@DPDK_2.0 2.2
|
||||
cmdline_stdin_exit@DPDK_2.0 2.2
|
||||
cmdline_stdin_new@DPDK_2.0 2.2
|
||||
cmdline_token_etheraddr_ops@DPDK_2.0 2.2
|
||||
cmdline_token_ipaddr_ops@DPDK_2.0 2.2
|
||||
cmdline_token_num_ops@DPDK_2.0 2.2
|
||||
cmdline_token_portlist_ops@DPDK_2.0 2.2
|
||||
cmdline_token_string_ops@DPDK_2.0 2.2
|
||||
cmdline_write_char@DPDK_2.0 2.2
|
||||
devargs_list@DPDK_2.0 2.2
|
||||
eal_parse_sysfs_value@DPDK_2.0 2.2
|
||||
eal_timer_source@DPDK_2.0 2.2
|
||||
eth_dev_null_create@DPDK_2.2 2.2
|
||||
lcore_config@DPDK_2.0 2.2
|
||||
pci_device_list@DPDK_2.0 2.2
|
||||
pci_driver_list@DPDK_2.0 2.2
|
||||
per_lcore__lcore_id@DPDK_2.0 2.2
|
||||
per_lcore__rte_errno@DPDK_2.0 2.2
|
||||
rdline_add_history@DPDK_2.0 2.2
|
||||
rdline_char_in@DPDK_2.0 2.2
|
||||
rdline_clear_history@DPDK_2.0 2.2
|
||||
rdline_get_buffer@DPDK_2.0 2.2
|
||||
rdline_get_history_item@DPDK_2.0 2.2
|
||||
rdline_init@DPDK_2.0 2.2
|
||||
rdline_newline@DPDK_2.0 2.2
|
||||
rdline_quit@DPDK_2.0 2.2
|
||||
rdline_redisplay@DPDK_2.0 2.2
|
||||
rdline_reset@DPDK_2.0 2.2
|
||||
rdline_restart@DPDK_2.0 2.2
|
||||
rdline_stop@DPDK_2.0 2.2
|
||||
rte_acl_add_rules@DPDK_2.0 2.2
|
||||
rte_acl_build@DPDK_2.0 2.2
|
||||
rte_acl_classify@DPDK_2.0 2.2
|
||||
rte_acl_classify_alg@DPDK_2.0 2.2
|
||||
rte_acl_classify_scalar@DPDK_2.0 2.2
|
||||
rte_acl_create@DPDK_2.0 2.2
|
||||
rte_acl_dump@DPDK_2.0 2.2
|
||||
rte_acl_find_existing@DPDK_2.0 2.2
|
||||
rte_acl_free@DPDK_2.0 2.2
|
||||
rte_acl_list_dump@DPDK_2.0 2.2
|
||||
rte_acl_reset@DPDK_2.0 2.2
|
||||
rte_acl_reset_rules@DPDK_2.0 2.2
|
||||
rte_acl_set_ctx_classify@DPDK_2.0 2.2
|
||||
rte_approx@DPDK_2.0 2.2
|
||||
rte_calloc@DPDK_2.0 2.2
|
||||
rte_calloc_socket@DPDK_2.0 2.2
|
||||
rte_cfgfile_close@DPDK_2.0 2.2
|
||||
rte_cfgfile_get_entry@DPDK_2.0 2.2
|
||||
rte_cfgfile_has_entry@DPDK_2.0 2.2
|
||||
rte_cfgfile_has_section@DPDK_2.0 2.2
|
||||
rte_cfgfile_load@DPDK_2.0 2.2
|
||||
rte_cfgfile_num_sections@DPDK_2.0 2.2
|
||||
rte_cfgfile_section_entries@DPDK_2.0 2.2
|
||||
rte_cfgfile_section_num_entries@DPDK_2.0 2.2
|
||||
rte_cfgfile_sections@DPDK_2.0 2.2
|
||||
rte_cpu_check_supported@DPDK_2.0 2.2
|
||||
rte_cryptodev_callback_register@DPDK_2.2 2.2
|
||||
rte_cryptodev_callback_unregister@DPDK_2.2 2.2
|
||||
rte_cryptodev_close@DPDK_2.2 2.2
|
||||
rte_cryptodev_configure@DPDK_2.2 2.2
|
||||
rte_cryptodev_count@DPDK_2.2 2.2
|
||||
rte_cryptodev_count_devtype@DPDK_2.2 2.2
|
||||
rte_cryptodev_create_vdev@DPDK_2.2 2.2
|
||||
rte_cryptodev_get_dev_id@DPDK_2.2 2.2
|
||||
rte_cryptodev_info_get@DPDK_2.2 2.2
|
||||
rte_cryptodev_pmd_allocate@DPDK_2.2 2.2
|
||||
rte_cryptodev_pmd_callback_process@DPDK_2.2 2.2
|
||||
rte_cryptodev_pmd_driver_register@DPDK_2.2 2.2
|
||||
rte_cryptodev_pmd_release_device@DPDK_2.2 2.2
|
||||
rte_cryptodev_pmd_virtual_dev_init@DPDK_2.2 2.2
|
||||
rte_cryptodev_queue_pair_count@DPDK_2.2 2.2
|
||||
rte_cryptodev_queue_pair_setup@DPDK_2.2 2.2
|
||||
rte_cryptodev_queue_pair_start@DPDK_2.2 2.2
|
||||
rte_cryptodev_queue_pair_stop@DPDK_2.2 2.2
|
||||
rte_cryptodev_session_create@DPDK_2.2 2.2
|
||||
rte_cryptodev_session_free@DPDK_2.2 2.2
|
||||
rte_cryptodev_socket_id@DPDK_2.2 2.2
|
||||
rte_cryptodev_start@DPDK_2.2 2.2
|
||||
rte_cryptodev_stats_get@DPDK_2.2 2.2
|
||||
rte_cryptodev_stats_reset@DPDK_2.2 2.2
|
||||
rte_cryptodev_stop@DPDK_2.2 2.2
|
||||
rte_cryptodevs@DPDK_2.2 2.2
|
||||
rte_ctrlmbuf_init@DPDK_2.0 2.2
|
||||
rte_cycles_vmware_tsc_map@DPDK_2.0 2.2
|
||||
rte_delay_us@DPDK_2.0 2.2
|
||||
rte_distributor_clear_returns@DPDK_2.0 2.2
|
||||
rte_distributor_create@DPDK_2.0 2.2
|
||||
rte_distributor_flush@DPDK_2.0 2.2
|
||||
rte_distributor_get_pkt@DPDK_2.0 2.2
|
||||
rte_distributor_poll_pkt@DPDK_2.0 2.2
|
||||
rte_distributor_process@DPDK_2.0 2.2
|
||||
rte_distributor_request_pkt@DPDK_2.0 2.2
|
||||
rte_distributor_return_pkt@DPDK_2.0 2.2
|
||||
rte_distributor_returned_pkts@DPDK_2.0 2.2
|
||||
rte_dom0_mempool_create@DPDK_2.0 2.2
|
||||
rte_dump_physmem_layout@DPDK_2.0 2.2
|
||||
rte_dump_registers@DPDK_2.0 2.2
|
||||
rte_dump_stack@DPDK_2.0 2.2
|
||||
rte_dump_tailq@DPDK_2.0 2.2
|
||||
rte_eal_alarm_cancel@DPDK_2.0 2.2
|
||||
rte_eal_alarm_set@DPDK_2.0 2.2
|
||||
rte_eal_dev_init@DPDK_2.0 2.2
|
||||
rte_eal_devargs_add@DPDK_2.0 2.2
|
||||
rte_eal_devargs_dump@DPDK_2.0 2.2
|
||||
rte_eal_devargs_type_count@DPDK_2.0 2.2
|
||||
rte_eal_driver_register@DPDK_2.0 2.2
|
||||
rte_eal_driver_unregister@DPDK_2.0 2.2
|
||||
rte_eal_get_configuration@DPDK_2.0 2.2
|
||||
rte_eal_get_lcore_state@DPDK_2.0 2.2
|
||||
rte_eal_get_physmem_layout@DPDK_2.0 2.2
|
||||
rte_eal_get_physmem_size@DPDK_2.0 2.2
|
||||
rte_eal_has_hugepages@DPDK_2.0 2.2
|
||||
rte_eal_init@DPDK_2.0 2.2
|
||||
rte_eal_iopl_init@DPDK_2.0 2.2
|
||||
rte_eal_lcore_role@DPDK_2.0 2.2
|
||||
rte_eal_mp_remote_launch@DPDK_2.0 2.2
|
||||
rte_eal_mp_wait_lcore@DPDK_2.0 2.2
|
||||
rte_eal_parse_devargs_str@DPDK_2.0 2.2
|
||||
rte_eal_pci_detach@DPDK_2.1 2.2
|
||||
rte_eal_pci_dump@DPDK_2.0 2.2
|
||||
rte_eal_pci_probe@DPDK_2.0 2.2
|
||||
rte_eal_pci_probe_one@DPDK_2.0 2.2
|
||||
rte_eal_pci_read_config@DPDK_2.1 2.2
|
||||
rte_eal_pci_register@DPDK_2.0 2.2
|
||||
rte_eal_pci_scan@DPDK_2.0 2.2
|
||||
rte_eal_pci_unregister@DPDK_2.0 2.2
|
||||
rte_eal_pci_write_config@DPDK_2.1 2.2
|
||||
rte_eal_process_type@DPDK_2.0 2.2
|
||||
rte_eal_remote_launch@DPDK_2.0 2.2
|
||||
rte_eal_tailq_lookup@DPDK_2.0 2.2
|
||||
rte_eal_tailq_register@DPDK_2.0 2.2
|
||||
rte_eal_vdev_init@DPDK_2.0 2.2
|
||||
rte_eal_vdev_uninit@DPDK_2.0 2.2
|
||||
rte_eal_wait_lcore@DPDK_2.0 2.2
|
||||
rte_epoll_ctl@DPDK_2.1 2.2
|
||||
rte_epoll_wait@DPDK_2.1 2.2
|
||||
rte_eth_add_rx_callback@DPDK_2.2 2.2
|
||||
rte_eth_add_tx_callback@DPDK_2.2 2.2
|
||||
rte_eth_allmulticast_disable@DPDK_2.2 2.2
|
||||
rte_eth_allmulticast_enable@DPDK_2.2 2.2
|
||||
rte_eth_allmulticast_get@DPDK_2.2 2.2
|
||||
rte_eth_bond_8023ad_conf_get@DPDK_2.0 2.2
|
||||
rte_eth_bond_8023ad_setup@DPDK_2.0 2.2
|
||||
rte_eth_bond_active_slaves_get@DPDK_2.0 2.2
|
||||
rte_eth_bond_create@DPDK_2.0 2.2
|
||||
rte_eth_bond_free@DPDK_2.1 2.2
|
||||
rte_eth_bond_link_monitoring_set@DPDK_2.0 2.2
|
||||
rte_eth_bond_mac_address_reset@DPDK_2.0 2.2
|
||||
rte_eth_bond_mac_address_set@DPDK_2.0 2.2
|
||||
rte_eth_bond_mode_get@DPDK_2.0 2.2
|
||||
rte_eth_bond_mode_set@DPDK_2.0 2.2
|
||||
rte_eth_bond_primary_get@DPDK_2.0 2.2
|
||||
rte_eth_bond_primary_set@DPDK_2.0 2.2
|
||||
rte_eth_bond_slave_add@DPDK_2.0 2.2
|
||||
rte_eth_bond_slave_remove@DPDK_2.0 2.2
|
||||
rte_eth_bond_slaves_get@DPDK_2.0 2.2
|
||||
rte_eth_bond_xmit_policy_get@DPDK_2.0 2.2
|
||||
rte_eth_bond_xmit_policy_set@DPDK_2.0 2.2
|
||||
rte_eth_copy_pci_info@DPDK_2.2 2.2
|
||||
rte_eth_dev_allocate@DPDK_2.2 2.2
|
||||
rte_eth_dev_allocated@DPDK_2.2 2.2
|
||||
rte_eth_dev_attach@DPDK_2.2 2.2
|
||||
rte_eth_dev_callback_register@DPDK_2.2 2.2
|
||||
rte_eth_dev_callback_unregister@DPDK_2.2 2.2
|
||||
rte_eth_dev_close@DPDK_2.2 2.2
|
||||
rte_eth_dev_configure@DPDK_2.2 2.2
|
||||
rte_eth_dev_count@DPDK_2.2 2.2
|
||||
rte_eth_dev_default_mac_addr_set@DPDK_2.2 2.2
|
||||
rte_eth_dev_detach@DPDK_2.2 2.2
|
||||
rte_eth_dev_filter_ctrl@DPDK_2.2 2.2
|
||||
rte_eth_dev_filter_supported@DPDK_2.2 2.2
|
||||
rte_eth_dev_flow_ctrl_get@DPDK_2.2 2.2
|
||||
rte_eth_dev_flow_ctrl_set@DPDK_2.2 2.2
|
||||
rte_eth_dev_get_dcb_info@DPDK_2.2 2.2
|
||||
rte_eth_dev_get_eeprom@DPDK_2.2 2.2
|
||||
rte_eth_dev_get_eeprom_length@DPDK_2.2 2.2
|
||||
rte_eth_dev_get_mtu@DPDK_2.2 2.2
|
||||
rte_eth_dev_get_reg_info@DPDK_2.2 2.2
|
||||
rte_eth_dev_get_reg_length@DPDK_2.2 2.2
|
||||
rte_eth_dev_get_vlan_offload@DPDK_2.2 2.2
|
||||
rte_eth_dev_info_get@DPDK_2.2 2.2
|
||||
rte_eth_dev_is_valid_port@DPDK_2.2 2.2
|
||||
rte_eth_dev_mac_addr_add@DPDK_2.2 2.2
|
||||
rte_eth_dev_mac_addr_remove@DPDK_2.2 2.2
|
||||
rte_eth_dev_priority_flow_ctrl_set@DPDK_2.2 2.2
|
||||
rte_eth_dev_release_port@DPDK_2.2 2.2
|
||||
rte_eth_dev_rss_hash_conf_get@DPDK_2.2 2.2
|
||||
rte_eth_dev_rss_hash_update@DPDK_2.2 2.2
|
||||
rte_eth_dev_rss_reta_query@DPDK_2.2 2.2
|
||||
rte_eth_dev_rss_reta_update@DPDK_2.2 2.2
|
||||
rte_eth_dev_rx_intr_ctl@DPDK_2.2 2.2
|
||||
rte_eth_dev_rx_intr_ctl_q@DPDK_2.2 2.2
|
||||
rte_eth_dev_rx_intr_disable@DPDK_2.2 2.2
|
||||
rte_eth_dev_rx_intr_enable@DPDK_2.2 2.2
|
||||
rte_eth_dev_rx_queue_start@DPDK_2.2 2.2
|
||||
rte_eth_dev_rx_queue_stop@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_eeprom@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_link_down@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_link_up@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_mc_addr_list@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_mtu@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_rx_queue_stats_mapping@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_tx_queue_stats_mapping@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_vf_rx@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_vf_rxmode@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_vf_tx@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_vf_vlan_filter@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_vlan_ether_type@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_vlan_offload@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_vlan_pvid@DPDK_2.2 2.2
|
||||
rte_eth_dev_set_vlan_strip_on_queue@DPDK_2.2 2.2
|
||||
rte_eth_dev_socket_id@DPDK_2.2 2.2
|
||||
rte_eth_dev_start@DPDK_2.2 2.2
|
||||
rte_eth_dev_stop@DPDK_2.2 2.2
|
||||
rte_eth_dev_tx_queue_start@DPDK_2.2 2.2
|
||||
rte_eth_dev_tx_queue_stop@DPDK_2.2 2.2
|
||||
rte_eth_dev_uc_all_hash_table_set@DPDK_2.2 2.2
|
||||
rte_eth_dev_uc_hash_table_set@DPDK_2.2 2.2
|
||||
rte_eth_dev_udp_tunnel_add@DPDK_2.2 2.2
|
||||
rte_eth_dev_udp_tunnel_delete@DPDK_2.2 2.2
|
||||
rte_eth_dev_vlan_filter@DPDK_2.2 2.2
|
||||
rte_eth_devices@DPDK_2.2 2.2
|
||||
rte_eth_dma_zone_reserve@DPDK_2.2 2.2
|
||||
rte_eth_driver_register@DPDK_2.2 2.2
|
||||
rte_eth_from_ring@DPDK_2.2 2.2
|
||||
rte_eth_from_rings@DPDK_2.0 2.2
|
||||
rte_eth_led_off@DPDK_2.2 2.2
|
||||
rte_eth_led_on@DPDK_2.2 2.2
|
||||
rte_eth_link_get@DPDK_2.2 2.2
|
||||
rte_eth_link_get_nowait@DPDK_2.2 2.2
|
||||
rte_eth_macaddr_get@DPDK_2.2 2.2
|
||||
rte_eth_mirror_rule_reset@DPDK_2.2 2.2
|
||||
rte_eth_mirror_rule_set@DPDK_2.2 2.2
|
||||
rte_eth_promiscuous_disable@DPDK_2.2 2.2
|
||||
rte_eth_promiscuous_enable@DPDK_2.2 2.2
|
||||
rte_eth_promiscuous_get@DPDK_2.2 2.2
|
||||
rte_eth_remove_rx_callback@DPDK_2.2 2.2
|
||||
rte_eth_remove_tx_callback@DPDK_2.2 2.2
|
||||
rte_eth_rx_queue_info_get@DPDK_2.2 2.2
|
||||
rte_eth_rx_queue_setup@DPDK_2.2 2.2
|
||||
rte_eth_set_queue_rate_limit@DPDK_2.2 2.2
|
||||
rte_eth_set_vf_rate_limit@DPDK_2.2 2.2
|
||||
rte_eth_stats_get@DPDK_2.2 2.2
|
||||
rte_eth_stats_reset@DPDK_2.2 2.2
|
||||
rte_eth_timesync_adjust_time@DPDK_2.2 2.2
|
||||
rte_eth_timesync_disable@DPDK_2.2 2.2
|
||||
rte_eth_timesync_enable@DPDK_2.2 2.2
|
||||
rte_eth_timesync_read_rx_timestamp@DPDK_2.2 2.2
|
||||
rte_eth_timesync_read_time@DPDK_2.2 2.2
|
||||
rte_eth_timesync_read_tx_timestamp@DPDK_2.2 2.2
|
||||
rte_eth_timesync_write_time@DPDK_2.2 2.2
|
||||
rte_eth_tx_queue_info_get@DPDK_2.2 2.2
|
||||
rte_eth_tx_queue_setup@DPDK_2.2 2.2
|
||||
rte_eth_xstats_get@DPDK_2.2 2.2
|
||||
rte_eth_xstats_reset@DPDK_2.2 2.2
|
||||
rte_exit@DPDK_2.0 2.2
|
||||
rte_fbk_hash_create@DPDK_2.0 2.2
|
||||
rte_fbk_hash_find_existing@DPDK_2.0 2.2
|
||||
rte_fbk_hash_free@DPDK_2.0 2.2
|
||||
rte_free@DPDK_2.0 2.2
|
||||
rte_get_rx_ol_flag_name@DPDK_2.0 2.2
|
||||
rte_get_tsc_hz@DPDK_2.0 2.2
|
||||
rte_get_tx_ol_flag_name@DPDK_2.0 2.2
|
||||
rte_hash_add_key@DPDK_2.0 2.2
|
||||
rte_hash_add_key_data@DPDK_2.1 2.2
|
||||
rte_hash_add_key_with_hash@DPDK_2.0 2.2
|
||||
rte_hash_add_key_with_hash_data@DPDK_2.1 2.2
|
||||
rte_hash_create@DPDK_2.0 2.2
|
||||
rte_hash_del_key@DPDK_2.0 2.2
|
||||
rte_hash_del_key_with_hash@DPDK_2.0 2.2
|
||||
rte_hash_find_existing@DPDK_2.0 2.2
|
||||
rte_hash_free@DPDK_2.0 2.2
|
||||
rte_hash_hash@DPDK_2.0 2.2
|
||||
rte_hash_iterate@DPDK_2.1 2.2
|
||||
rte_hash_lookup@DPDK_2.0 2.2
|
||||
rte_hash_lookup_bulk@DPDK_2.0 2.2
|
||||
rte_hash_lookup_bulk_data@DPDK_2.1 2.2
|
||||
rte_hash_lookup_data@DPDK_2.1 2.2
|
||||
rte_hash_lookup_with_hash@DPDK_2.0 2.2
|
||||
rte_hash_lookup_with_hash_data@DPDK_2.1 2.2
|
||||
rte_hash_reset@DPDK_2.1 2.2
|
||||
rte_hash_set_cmp_func@DPDK_2.2 2.2
|
||||
rte_hexdump@DPDK_2.0 2.2
|
||||
rte_intr_allow_others@DPDK_2.1 2.2
|
||||
rte_intr_callback_register@DPDK_2.0 2.2
|
||||
rte_intr_callback_unregister@DPDK_2.0 2.2
|
||||
rte_intr_cap_multiple@DPDK_2.2 2.2
|
||||
rte_intr_disable@DPDK_2.0 2.2
|
||||
rte_intr_dp_is_en@DPDK_2.1 2.2
|
||||
rte_intr_efd_disable@DPDK_2.1 2.2
|
||||
rte_intr_efd_enable@DPDK_2.1 2.2
|
||||
rte_intr_enable@DPDK_2.0 2.2
|
||||
rte_intr_rx_ctl@DPDK_2.1 2.2
|
||||
rte_intr_tls_epfd@DPDK_2.1 2.2
|
||||
rte_ip_frag_free_death_row@DPDK_2.0 2.2
|
||||
rte_ip_frag_table_create@DPDK_2.0 2.2
|
||||
rte_ip_frag_table_statistics_dump@DPDK_2.0 2.2
|
||||
rte_ipv4_frag_reassemble_packet@DPDK_2.0 2.2
|
||||
rte_ipv4_fragment_packet@DPDK_2.0 2.2
|
||||
rte_ipv6_frag_reassemble_packet@DPDK_2.0 2.2
|
||||
rte_ipv6_fragment_packet@DPDK_2.0 2.2
|
||||
rte_jobstats_context_finish@DPDK_2.0 2.2
|
||||
rte_jobstats_context_init@DPDK_2.0 2.2
|
||||
rte_jobstats_context_reset@DPDK_2.0 2.2
|
||||
rte_jobstats_context_start@DPDK_2.0 2.2
|
||||
rte_jobstats_finish@DPDK_2.0 2.2
|
||||
rte_jobstats_init@DPDK_2.0 2.2
|
||||
rte_jobstats_reset@DPDK_2.0 2.2
|
||||
rte_jobstats_set_max@DPDK_2.0 2.2
|
||||
rte_jobstats_set_min@DPDK_2.0 2.2
|
||||
rte_jobstats_set_period@DPDK_2.0 2.2
|
||||
rte_jobstats_set_target@DPDK_2.0 2.2
|
||||
rte_jobstats_set_update_period_function@DPDK_2.0 2.2
|
||||
rte_jobstats_start@DPDK_2.0 2.2
|
||||
rte_keepalive_create@DPDK_2.2 2.2
|
||||
rte_keepalive_dispatch_pings@DPDK_2.2 2.2
|
||||
rte_keepalive_register_core@DPDK_2.2 2.2
|
||||
rte_kvargs_count@DPDK_2.0 2.2
|
||||
rte_kvargs_free@DPDK_2.0 2.2
|
||||
rte_kvargs_parse@DPDK_2.0 2.2
|
||||
rte_kvargs_process@DPDK_2.0 2.2
|
||||
rte_log@DPDK_2.0 2.2
|
||||
rte_log_add_in_history@DPDK_2.0 2.2
|
||||
rte_log_cur_msg_loglevel@DPDK_2.0 2.2
|
||||
rte_log_cur_msg_logtype@DPDK_2.0 2.2
|
||||
rte_log_dump_history@DPDK_2.0 2.2
|
||||
rte_log_set_history@DPDK_2.0 2.2
|
||||
rte_logs@DPDK_2.0 2.2
|
||||
rte_lpm6_add@DPDK_2.0 2.2
|
||||
rte_lpm6_create@DPDK_2.0 2.2
|
||||
rte_lpm6_delete@DPDK_2.0 2.2
|
||||
rte_lpm6_delete_all@DPDK_2.0 2.2
|
||||
rte_lpm6_delete_bulk_func@DPDK_2.0 2.2
|
||||
rte_lpm6_find_existing@DPDK_2.0 2.2
|
||||
rte_lpm6_free@DPDK_2.0 2.2
|
||||
rte_lpm6_is_rule_present@DPDK_2.0 2.2
|
||||
rte_lpm6_lookup@DPDK_2.0 2.2
|
||||
rte_lpm6_lookup_bulk_func@DPDK_2.0 2.2
|
||||
rte_lpm_add@DPDK_2.0 2.2
|
||||
rte_lpm_create@DPDK_2.0 2.2
|
||||
rte_lpm_delete@DPDK_2.0 2.2
|
||||
rte_lpm_delete_all@DPDK_2.0 2.2
|
||||
rte_lpm_find_existing@DPDK_2.0 2.2
|
||||
rte_lpm_free@DPDK_2.0 2.2
|
||||
rte_lpm_is_rule_present@DPDK_2.0 2.2
|
||||
rte_malloc@DPDK_2.0 2.2
|
||||
rte_malloc_dump_stats@DPDK_2.0 2.2
|
||||
rte_malloc_get_socket_stats@DPDK_2.0 2.2
|
||||
rte_malloc_set_limit@DPDK_2.0 2.2
|
||||
rte_malloc_socket@DPDK_2.0 2.2
|
||||
rte_malloc_validate@DPDK_2.0 2.2
|
||||
rte_malloc_virt2phy@DPDK_2.0 2.2
|
||||
rte_mbuf_sanity_check@DPDK_2.0 2.2
|
||||
rte_mem_lock_page@DPDK_2.0 2.2
|
||||
rte_mem_virt2phy@DPDK_2.0 2.2
|
||||
rte_memdump@DPDK_2.0 2.2
|
||||
rte_memory_get_nchannel@DPDK_2.0 2.2
|
||||
rte_memory_get_nrank@DPDK_2.0 2.2
|
||||
rte_mempool_audit@DPDK_2.0 2.2
|
||||
rte_mempool_calc_obj_size@DPDK_2.0 2.2
|
||||
rte_mempool_count@DPDK_2.0 2.2
|
||||
rte_mempool_create@DPDK_2.0 2.2
|
||||
rte_mempool_dump@DPDK_2.0 2.2
|
||||
rte_mempool_gntalloc_create@DPDK_2.0 2.2
|
||||
rte_mempool_list_dump@DPDK_2.0 2.2
|
||||
rte_mempool_lookup@DPDK_2.0 2.2
|
||||
rte_mempool_obj_iter@DPDK_2.0 2.2
|
||||
rte_mempool_walk@DPDK_2.0 2.2
|
||||
rte_mempool_xmem_create@DPDK_2.0 2.2
|
||||
rte_mempool_xmem_size@DPDK_2.0 2.2
|
||||
rte_mempool_xmem_usage@DPDK_2.0 2.2
|
||||
rte_memzone_dump@DPDK_2.0 2.2
|
||||
rte_memzone_free@DPDK_2.1 2.2
|
||||
rte_memzone_lookup@DPDK_2.0 2.2
|
||||
rte_memzone_reserve@DPDK_2.0 2.2
|
||||
rte_memzone_reserve_aligned@DPDK_2.0 2.2
|
||||
rte_memzone_reserve_bounded@DPDK_2.0 2.2
|
||||
rte_memzone_walk@DPDK_2.0 2.2
|
||||
rte_meter_srtcm_config@DPDK_2.0 2.2
|
||||
rte_meter_trtcm_config@DPDK_2.0 2.2
|
||||
rte_openlog_stream@DPDK_2.0 2.2
|
||||
rte_pipeline_check@DPDK_2.0 2.2
|
||||
rte_pipeline_create@DPDK_2.0 2.2
|
||||
rte_pipeline_flush@DPDK_2.0 2.2
|
||||
rte_pipeline_free@DPDK_2.0 2.2
|
||||
rte_pipeline_port_in_connect_to_table@DPDK_2.0 2.2
|
||||
rte_pipeline_port_in_create@DPDK_2.0 2.2
|
||||
rte_pipeline_port_in_disable@DPDK_2.0 2.2
|
||||
rte_pipeline_port_in_enable@DPDK_2.0 2.2
|
||||
rte_pipeline_port_in_stats_read@DPDK_2.1 2.2
|
||||
rte_pipeline_port_out_create@DPDK_2.0 2.2
|
||||
rte_pipeline_port_out_packet_insert@DPDK_2.0 2.2
|
||||
rte_pipeline_port_out_stats_read@DPDK_2.1 2.2
|
||||
rte_pipeline_run@DPDK_2.0 2.2
|
||||
rte_pipeline_table_create@DPDK_2.0 2.2
|
||||
rte_pipeline_table_default_entry_add@DPDK_2.0 2.2
|
||||
rte_pipeline_table_default_entry_delete@DPDK_2.0 2.2
|
||||
rte_pipeline_table_entry_add@DPDK_2.0 2.2
|
||||
rte_pipeline_table_entry_add_bulk@DPDK_2.2 2.2
|
||||
rte_pipeline_table_entry_delete@DPDK_2.0 2.2
|
||||
rte_pipeline_table_entry_delete_bulk@DPDK_2.2 2.2
|
||||
rte_pipeline_table_stats_read@DPDK_2.1 2.2
|
||||
rte_pktmbuf_dump@DPDK_2.0 2.2
|
||||
rte_pktmbuf_init@DPDK_2.0 2.2
|
||||
rte_pktmbuf_offload_pool_create@DPDK_2.2 2.2
|
||||
rte_pktmbuf_pool_create@DPDK_2.1 2.2
|
||||
rte_pktmbuf_pool_init@DPDK_2.0 2.2
|
||||
rte_pmd_af_packet_devinit@DPDK_2.0 2.2
|
||||
rte_port_ethdev_reader_ops@DPDK_2.0 2.2
|
||||
rte_port_ethdev_writer_nodrop_ops@DPDK_2.1 2.2
|
||||
rte_port_ethdev_writer_ops@DPDK_2.0 2.2
|
||||
rte_port_ring_multi_reader_ops@DPDK_2.2 2.2
|
||||
rte_port_ring_multi_writer_nodrop_ops@DPDK_2.2 2.2
|
||||
rte_port_ring_multi_writer_ops@DPDK_2.2 2.2
|
||||
rte_port_ring_reader_ipv4_frag_ops@DPDK_2.0 2.2
|
||||
rte_port_ring_reader_ipv6_frag_ops@DPDK_2.1 2.2
|
||||
rte_port_ring_reader_ops@DPDK_2.0 2.2
|
||||
rte_port_ring_writer_ipv4_ras_ops@DPDK_2.0 2.2
|
||||
rte_port_ring_writer_ipv6_ras_ops@DPDK_2.1 2.2
|
||||
rte_port_ring_writer_nodrop_ops@DPDK_2.1 2.2
|
||||
rte_port_ring_writer_ops@DPDK_2.0 2.2
|
||||
rte_port_sched_reader_ops@DPDK_2.0 2.2
|
||||
rte_port_sched_writer_ops@DPDK_2.0 2.2
|
||||
rte_port_sink_ops@DPDK_2.0 2.2
|
||||
rte_port_source_ops@DPDK_2.0 2.2
|
||||
rte_power_exit@DPDK_2.0 2.2
|
||||
rte_power_freq_down@DPDK_2.0 2.2
|
||||
rte_power_freq_max@DPDK_2.0 2.2
|
||||
rte_power_freq_min@DPDK_2.0 2.2
|
||||
rte_power_freq_up@DPDK_2.0 2.2
|
||||
rte_power_freqs@DPDK_2.0 2.2
|
||||
rte_power_get_env@DPDK_2.0 2.2
|
||||
rte_power_get_freq@DPDK_2.0 2.2
|
||||
rte_power_init@DPDK_2.0 2.2
|
||||
rte_power_set_env@DPDK_2.0 2.2
|
||||
rte_power_set_freq@DPDK_2.0 2.2
|
||||
rte_power_unset_env@DPDK_2.0 2.2
|
||||
rte_realloc@DPDK_2.0 2.2
|
||||
rte_red_config_init@DPDK_2.0 2.2
|
||||
rte_red_log2_1_minus_Wq@DPDK_2.0 2.2
|
||||
rte_red_pow2_frac_inv@DPDK_2.0 2.2
|
||||
rte_red_rand_seed@DPDK_2.0 2.2
|
||||
rte_red_rand_val@DPDK_2.0 2.2
|
||||
rte_red_rt_data_init@DPDK_2.0 2.2
|
||||
rte_reorder_create@DPDK_2.0 2.2
|
||||
rte_reorder_drain@DPDK_2.0 2.2
|
||||
rte_reorder_find_existing@DPDK_2.0 2.2
|
||||
rte_reorder_free@DPDK_2.0 2.2
|
||||
rte_reorder_init@DPDK_2.0 2.2
|
||||
rte_reorder_insert@DPDK_2.0 2.2
|
||||
rte_reorder_reset@DPDK_2.0 2.2
|
||||
rte_ring_create@DPDK_2.0 2.2
|
||||
rte_ring_dump@DPDK_2.0 2.2
|
||||
rte_ring_free@DPDK_2.2 2.2
|
||||
rte_ring_get_memsize@DPDK_2.0 2.2
|
||||
rte_ring_init@DPDK_2.0 2.2
|
||||
rte_ring_list_dump@DPDK_2.0 2.2
|
||||
rte_ring_lookup@DPDK_2.0 2.2
|
||||
rte_ring_set_water_mark@DPDK_2.0 2.2
|
||||
rte_sched_pipe_config@DPDK_2.0 2.2
|
||||
rte_sched_port_config@DPDK_2.0 2.2
|
||||
rte_sched_port_dequeue@DPDK_2.0 2.2
|
||||
rte_sched_port_enqueue@DPDK_2.0 2.2
|
||||
rte_sched_port_free@DPDK_2.0 2.2
|
||||
rte_sched_port_get_memory_footprint@DPDK_2.0 2.2
|
||||
rte_sched_port_pkt_read_color@DPDK_2.1 2.2
|
||||
rte_sched_port_pkt_read_tree_path@DPDK_2.1 2.2
|
||||
rte_sched_port_pkt_write@DPDK_2.1 2.2
|
||||
rte_sched_queue_read_stats@DPDK_2.0 2.2
|
||||
rte_sched_subport_config@DPDK_2.0 2.2
|
||||
rte_sched_subport_read_stats@DPDK_2.0 2.2
|
||||
rte_set_application_usage_hook@DPDK_2.0 2.2
|
||||
rte_set_log_level@DPDK_2.0 2.2
|
||||
rte_set_log_type@DPDK_2.0 2.2
|
||||
rte_socket_id@DPDK_2.0 2.2
|
||||
rte_strerror@DPDK_2.0 2.2
|
||||
rte_strsplit@DPDK_2.0 2.2
|
||||
rte_sys_gettid@DPDK_2.0 2.2
|
||||
rte_table_acl_ops@DPDK_2.0 2.2
|
||||
rte_table_array_ops@DPDK_2.0 2.2
|
||||
rte_table_hash_ext_ops@DPDK_2.0 2.2
|
||||
rte_table_hash_key16_ext_dosig_ops@DPDK_2.2 2.2
|
||||
rte_table_hash_key16_ext_ops@DPDK_2.0 2.2
|
||||
rte_table_hash_key16_lru_ops@DPDK_2.0 2.2
|
||||
rte_table_hash_key32_ext_ops@DPDK_2.0 2.2
|
||||
rte_table_hash_key32_lru_ops@DPDK_2.0 2.2
|
||||
rte_table_hash_key8_ext_dosig_ops@DPDK_2.0 2.2
|
||||
rte_table_hash_key8_ext_ops@DPDK_2.0 2.2
|
||||
rte_table_hash_key8_lru_dosig_ops@DPDK_2.0 2.2
|
||||
rte_table_hash_key8_lru_ops@DPDK_2.0 2.2
|
||||
rte_table_hash_lru_ops@DPDK_2.0 2.2
|
||||
rte_table_lpm_ipv6_ops@DPDK_2.0 2.2
|
||||
rte_table_lpm_ops@DPDK_2.0 2.2
|
||||
rte_table_stub_ops@DPDK_2.0 2.2
|
||||
rte_thread_get_affinity@DPDK_2.0 2.2
|
||||
rte_thread_set_affinity@DPDK_2.0 2.2
|
||||
rte_timer_dump_stats@DPDK_2.0 2.2
|
||||
rte_timer_init@DPDK_2.0 2.2
|
||||
rte_timer_manage@DPDK_2.0 2.2
|
||||
rte_timer_pending@DPDK_2.0 2.2
|
||||
rte_timer_reset@DPDK_2.0 2.2
|
||||
rte_timer_reset_sync@DPDK_2.0 2.2
|
||||
rte_timer_stop@DPDK_2.0 2.2
|
||||
rte_timer_stop_sync@DPDK_2.0 2.2
|
||||
rte_timer_subsystem_init@DPDK_2.0 2.2
|
||||
rte_vhost_dequeue_burst@DPDK_2.0 2.2
|
||||
rte_vhost_driver_callback_register@DPDK_2.0 2.2
|
||||
rte_vhost_driver_register@DPDK_2.0 2.2
|
||||
rte_vhost_driver_session_start@DPDK_2.0 2.2
|
||||
rte_vhost_driver_unregister@DPDK_2.1 2.2
|
||||
rte_vhost_enable_guest_notification@DPDK_2.0 2.2
|
||||
rte_vhost_enqueue_burst@DPDK_2.0 2.2
|
||||
rte_vhost_feature_disable@DPDK_2.0 2.2
|
||||
rte_vhost_feature_enable@DPDK_2.0 2.2
|
||||
rte_vhost_feature_get@DPDK_2.0 2.2
|
||||
rte_vlog@DPDK_2.0 2.2
|
||||
rte_zmalloc@DPDK_2.0 2.2
|
||||
rte_zmalloc_socket@DPDK_2.0 2.2
|
||||
vt100_init@DPDK_2.0 2.2
|
||||
vt100_parser@DPDK_2.0 2.2
|
|
@ -1,44 +0,0 @@
|
|||
ubuntu-fix-doc-installpath.patch
|
||||
ubuntu-combined-shared-lib-abiversion.patch
|
||||
ubuntu-fix-library-linkage.patch
|
||||
ubuntu-fix-testpmd-without-xen.patch
|
||||
ubuntu-fix-lpm-use-after-free-and-leak.patch
|
||||
ubuntu-backport-01-app-testpmd-handle-SIGINT-and-SIGTERM.patch
|
||||
ubuntu-backport-02-examples-l3fwd-handle-SIGINT-and-SIGTERM.patch
|
||||
ubuntu-backport-03-tools-fix-unbinding-failure-handling.patch
|
||||
ubuntu-backport-04-tools-support-Python-3-in-bind-script.patch
|
||||
ubuntu-backport-05-tools-support-binding-to-built-in-kernel-modules.patch
|
||||
ubuntu-backport-06-eal-linux-support-built-in-kernel-modules.patch
|
||||
ubuntu-backport-07-mempool-fix-leak-when-creation-fails.patch
|
||||
ubuntu-backport-08-vhost-fix-leak-of-fds-and-mmaps.patch
|
||||
ubuntu-backport-09-port-fix-crash-for-ring-writer-nodrop.patch
|
||||
ubuntu-backport-10-port-fix-crash-for-ethdev-writer-nodrop.patch
|
||||
ubuntu-backport-11-i40e-fix-overflow.patch
|
||||
ubuntu-backport-12-i40e-fix-inverted-check-for-no-refcount.patch
|
||||
ubuntu-backport-13-i40e-fix-VLAN-filtering.patch
|
||||
ubuntu-backport-14-i40e-base-fix-missing-check-for-stopped-admin-queue.patch
|
||||
ubuntu-backport-15-i40e-base-fix-driver-load-failure.patch
|
||||
ubuntu-backport-16-fm10k-fix-VLAN-flag-in-scattered-Rx.patch
|
||||
ubuntu-backport-17-pcap-fix-captured-frame-length.patch
|
||||
ubuntu-backport-18-bonding-fix-detach-of-bonded-device.patch
|
||||
ubuntu-backport-19-bonding-fix-detach-of-slave-devices.patch
|
||||
ubuntu-backport-20-bonding-copy-entire-config-structure-in-mode-4.patch
|
||||
ubuntu-backport-21-bonding-do-not-ignore-multicast-in-mode-4.patch
|
||||
ubuntu-backport-22-bonding-fix-active-slaves-with-no-primary.patch
|
||||
ubuntu-backport-23-bonding-do-not-activate-slave-twice.patch
|
||||
ubuntu-backport-24-bonding-fix-crash-when-no-slave-device.patch
|
||||
ubuntu-backport-25-virtio-fix-crash-in-statistics-functions.patch
|
||||
ubuntu-backport-26-virtio-fix-descriptors-pointing-to-the-same-buffer.patch
|
||||
ubuntu-backport-27-virtio-fix-restart.patch
|
||||
ubuntu-backport-28-lpm-fix-allocation-of-an-existing-object.patch
|
||||
ubuntu-backport-29-hash-fix-multi-process-support.patch
|
||||
ubuntu-backport-30-hash-fix-allocation-of-an-existing-object.patch
|
||||
ubuntu-backport-31-hash-fix-race-condition-at-creation.patch
|
||||
ubuntu-backport-32-eal-fix-resource-leak.patch
|
||||
ubuntu-backport-33-vhost-user-add-error-handling-for-fd-1023.patch
|
||||
ubuntu-backport-34-port-fix-ring-writer-buffer-overflow.patch
|
||||
ubuntu-backport-35-port-fix-burst-size-mask-type.patch
|
||||
ubuntu-backport-36-pci-identify-devices-not-managed-by-any-kernel-drive.patch
|
||||
ubuntu-backport-37-pci-ignore-devices-already-managed-in-Linux-when-map.patch
|
||||
ubuntu-backport-38-dpdk-dev-Memory-leak-when-adding-removing-vhost_user-ports.patch
|
||||
ubuntu-fix-vhost-user-socket-permission.patch
|
|
@ -1,146 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc1 fix for LP: #1559981
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-03-20
|
||||
|
||||
From d3a274ce9dee28118b8647e0db72ef0f4b6a6323 Mon Sep 17 00:00:00 2001
|
||||
From: Zhihong Wang <zhihong.wang@intel.com>
|
||||
Date: Wed, 30 Dec 2015 16:59:49 -0500
|
||||
Subject: [PATCH] app/testpmd: handle SIGINT and SIGTERM
|
||||
|
||||
Handle SIGINT and SIGTERM in testpmd.
|
||||
|
||||
Signed-off-by: Zhihong Wang <zhihong.wang@intel.com>
|
||||
Acked-by: Michael Qiu <michael.qiu@intel.com>
|
||||
---
|
||||
app/test-pmd/cmdline.c | 20 +++++++++++++-------
|
||||
app/test-pmd/testpmd.c | 39 +++++++++++++++++++++++++++++++++------
|
||||
app/test-pmd/testpmd.h | 1 +
|
||||
3 files changed, 47 insertions(+), 13 deletions(-)
|
||||
|
||||
Index: dpdk/app/test-pmd/cmdline.c
|
||||
===================================================================
|
||||
--- dpdk.orig/app/test-pmd/cmdline.c
|
||||
+++ dpdk/app/test-pmd/cmdline.c
|
||||
@@ -90,6 +90,8 @@
|
||||
|
||||
#include "testpmd.h"
|
||||
|
||||
+static struct cmdline *testpmd_cl;
|
||||
+
|
||||
static void cmd_reconfig_device_queue(portid_t id, uint8_t dev, uint8_t queue);
|
||||
|
||||
#ifdef RTE_NIC_BYPASS
|
||||
@@ -9778,17 +9780,21 @@ cmdline_parse_ctx_t main_ctx[] = {
|
||||
void
|
||||
prompt(void)
|
||||
{
|
||||
- struct cmdline *cl;
|
||||
-
|
||||
/* initialize non-constant commands */
|
||||
cmd_set_fwd_mode_init();
|
||||
|
||||
- cl = cmdline_stdin_new(main_ctx, "testpmd> ");
|
||||
- if (cl == NULL) {
|
||||
+ testpmd_cl = cmdline_stdin_new(main_ctx, "testpmd> ");
|
||||
+ if (testpmd_cl == NULL)
|
||||
return;
|
||||
- }
|
||||
- cmdline_interact(cl);
|
||||
- cmdline_stdin_exit(cl);
|
||||
+ cmdline_interact(testpmd_cl);
|
||||
+ cmdline_stdin_exit(testpmd_cl);
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+prompt_exit(void)
|
||||
+{
|
||||
+ if (testpmd_cl != NULL)
|
||||
+ cmdline_quit(testpmd_cl);
|
||||
}
|
||||
|
||||
static void
|
||||
Index: dpdk/app/test-pmd/testpmd.c
|
||||
===================================================================
|
||||
--- dpdk.orig/app/test-pmd/testpmd.c
|
||||
+++ dpdk/app/test-pmd/testpmd.c
|
||||
@@ -1569,13 +1569,16 @@ pmd_test_exit(void)
|
||||
if (test_done == 0)
|
||||
stop_packet_forwarding();
|
||||
|
||||
- FOREACH_PORT(pt_id, ports) {
|
||||
- printf("Stopping port %d...", pt_id);
|
||||
- fflush(stdout);
|
||||
- rte_eth_dev_close(pt_id);
|
||||
- printf("done\n");
|
||||
+ if (ports != NULL) {
|
||||
+ no_link_check = 1;
|
||||
+ FOREACH_PORT(pt_id, ports) {
|
||||
+ printf("\nShutting down port %d...\n", pt_id);
|
||||
+ fflush(stdout);
|
||||
+ stop_port(pt_id);
|
||||
+ close_port(pt_id);
|
||||
+ }
|
||||
}
|
||||
- printf("bye...\n");
|
||||
+ printf("\nBye...\n");
|
||||
}
|
||||
|
||||
typedef void (*cmd_func_t)(void);
|
||||
@@ -1983,12 +1986,35 @@ init_port(void)
|
||||
ports[pid].enabled = 1;
|
||||
}
|
||||
|
||||
+static void
|
||||
+force_quit(void)
|
||||
+{
|
||||
+ pmd_test_exit();
|
||||
+ prompt_exit();
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+signal_handler(int signum)
|
||||
+{
|
||||
+ if (signum == SIGINT || signum == SIGTERM) {
|
||||
+ printf("\nSignal %d received, preparing to exit...\n",
|
||||
+ signum);
|
||||
+ force_quit();
|
||||
+ /* exit with the expected status */
|
||||
+ signal(signum, SIG_DFL);
|
||||
+ kill(getpid(), signum);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
int
|
||||
main(int argc, char** argv)
|
||||
{
|
||||
int diag;
|
||||
uint8_t port_id;
|
||||
|
||||
+ signal(SIGINT, signal_handler);
|
||||
+ signal(SIGTERM, signal_handler);
|
||||
+
|
||||
diag = rte_eal_init(argc, argv);
|
||||
if (diag < 0)
|
||||
rte_panic("Cannot init EAL\n");
|
||||
@@ -2040,6 +2066,7 @@ main(int argc, char** argv)
|
||||
start_packet_forwarding(0);
|
||||
printf("Press enter to exit\n");
|
||||
rc = read(0, &c, 1);
|
||||
+ pmd_test_exit();
|
||||
if (rc < 0)
|
||||
return 1;
|
||||
}
|
||||
Index: dpdk/app/test-pmd/testpmd.h
|
||||
===================================================================
|
||||
--- dpdk.orig/app/test-pmd/testpmd.h
|
||||
+++ dpdk/app/test-pmd/testpmd.h
|
||||
@@ -462,6 +462,7 @@ unsigned int parse_item_list(char* str,
|
||||
unsigned int *parsed_items, int check_unique_values);
|
||||
void launch_args_parse(int argc, char** argv);
|
||||
void prompt(void);
|
||||
+void prompt_exit(void);
|
||||
void nic_stats_display(portid_t port_id);
|
||||
void nic_stats_clear(portid_t port_id);
|
||||
void nic_xstats_display(portid_t port_id);
|
|
@ -1,134 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc1 fix for LP: #1559981
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-03-20
|
||||
|
||||
From 308df2bfba3d238fc1d2d16cc10c84681803b408 Mon Sep 17 00:00:00 2001
|
||||
From: Zhihong Wang <zhihong.wang@intel.com>
|
||||
Date: Wed, 30 Dec 2015 16:59:51 -0500
|
||||
Subject: [PATCH] examples/l3fwd: handle SIGINT and SIGTERM
|
||||
|
||||
Handle SIGINT and SIGTERM in l3fwd.
|
||||
|
||||
Signed-off-by: Zhihong Wang <zhihong.wang@intel.com>
|
||||
Acked-by: Michael Qiu <michael.qiu@intel.com>
|
||||
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
|
||||
---
|
||||
examples/l3fwd/main.c | 46 ++++++++++++++++++++++++++++++++++++++++++----
|
||||
1 file changed, 42 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/examples/l3fwd/main.c b/examples/l3fwd/main.c
|
||||
index 5b0c2dd..21a5782 100644
|
||||
--- a/examples/l3fwd/main.c
|
||||
+++ b/examples/l3fwd/main.c
|
||||
@@ -41,6 +41,8 @@
|
||||
#include <stdarg.h>
|
||||
#include <errno.h>
|
||||
#include <getopt.h>
|
||||
+#include <signal.h>
|
||||
+#include <stdbool.h>
|
||||
|
||||
#include <rte_common.h>
|
||||
#include <rte_vect.h>
|
||||
@@ -75,6 +77,8 @@
|
||||
#include <cmdline_parse.h>
|
||||
#include <cmdline_parse_etheraddr.h>
|
||||
|
||||
+static volatile bool force_quit;
|
||||
+
|
||||
#define APP_LOOKUP_EXACT_MATCH 0
|
||||
#define APP_LOOKUP_LPM 1
|
||||
#define DO_RFC_1812_CHECKS
|
||||
@@ -1553,7 +1557,7 @@ main_loop(__attribute__((unused)) void *dummy)
|
||||
portid, queueid);
|
||||
}
|
||||
|
||||
- while (1) {
|
||||
+ while (!force_quit) {
|
||||
|
||||
cur_tsc = rte_rdtsc();
|
||||
|
||||
@@ -1781,6 +1785,8 @@ main_loop(__attribute__((unused)) void *dummy)
|
||||
|
||||
}
|
||||
}
|
||||
+
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -2516,8 +2522,12 @@ check_all_ports_link_status(uint8_t port_num, uint32_t port_mask)
|
||||
printf("\nChecking link status");
|
||||
fflush(stdout);
|
||||
for (count = 0; count <= MAX_CHECK_TIME; count++) {
|
||||
+ if (force_quit)
|
||||
+ return;
|
||||
all_ports_up = 1;
|
||||
for (portid = 0; portid < port_num; portid++) {
|
||||
+ if (force_quit)
|
||||
+ return;
|
||||
if ((port_mask & (1 << portid)) == 0)
|
||||
continue;
|
||||
memset(&link, 0, sizeof(link));
|
||||
@@ -2559,6 +2569,16 @@ check_all_ports_link_status(uint8_t port_num, uint32_t port_mask)
|
||||
}
|
||||
}
|
||||
|
||||
+static void
|
||||
+signal_handler(int signum)
|
||||
+{
|
||||
+ if (signum == SIGINT || signum == SIGTERM) {
|
||||
+ printf("\n\nSignal %d received, preparing to exit...\n",
|
||||
+ signum);
|
||||
+ force_quit = true;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
@@ -2579,6 +2599,10 @@ main(int argc, char **argv)
|
||||
argc -= ret;
|
||||
argv += ret;
|
||||
|
||||
+ force_quit = false;
|
||||
+ signal(SIGINT, signal_handler);
|
||||
+ signal(SIGTERM, signal_handler);
|
||||
+
|
||||
/* pre-init dst MACs for all ports to 02:00:00:00:00:xx */
|
||||
for (portid = 0; portid < RTE_MAX_ETHPORTS; portid++) {
|
||||
dest_eth_addr[portid] = ETHER_LOCAL_ADMIN_ADDR + ((uint64_t)portid << 40);
|
||||
@@ -2733,12 +2757,26 @@ main(int argc, char **argv)
|
||||
|
||||
check_all_ports_link_status((uint8_t)nb_ports, enabled_port_mask);
|
||||
|
||||
+ ret = 0;
|
||||
/* launch per-lcore init on every lcore */
|
||||
rte_eal_mp_remote_launch(main_loop, NULL, CALL_MASTER);
|
||||
RTE_LCORE_FOREACH_SLAVE(lcore_id) {
|
||||
- if (rte_eal_wait_lcore(lcore_id) < 0)
|
||||
- return -1;
|
||||
+ if (rte_eal_wait_lcore(lcore_id) < 0) {
|
||||
+ ret = -1;
|
||||
+ break;
|
||||
+ }
|
||||
}
|
||||
|
||||
- return 0;
|
||||
+ /* stop ports */
|
||||
+ for (portid = 0; portid < nb_ports; portid++) {
|
||||
+ if ((enabled_port_mask & (1 << portid)) == 0)
|
||||
+ continue;
|
||||
+ printf("Closing port %d...", portid);
|
||||
+ rte_eth_dev_stop(portid);
|
||||
+ rte_eth_dev_close(portid);
|
||||
+ printf(" Done\n");
|
||||
+ }
|
||||
+ printf("Bye...\n");
|
||||
+
|
||||
+ return ret;
|
||||
}
|
||||
--
|
||||
2.7.3
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc1 fix for LP: #1559981
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-03-20
|
||||
|
||||
From da82ee17e6ea99bf2931383ac33b0caccaaaefce Mon Sep 17 00:00:00 2001
|
||||
From: Jeff Shaw <jeffrey.b.shaw@intel.com>
|
||||
Date: Mon, 8 Feb 2016 16:33:46 -0800
|
||||
Subject: [PATCH] tools: fix unbinding failure handling
|
||||
|
||||
We should call sys.exit(), not divide sys by exit().
|
||||
|
||||
Signed-off-by: Jeff Shaw <jeffrey.b.shaw@intel.com>
|
||||
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
|
||||
---
|
||||
tools/dpdk_nic_bind.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/tools/dpdk_nic_bind.py b/tools/dpdk_nic_bind.py
|
||||
index f02454e..a1923c5 100755
|
||||
--- a/tools/dpdk_nic_bind.py
|
||||
+++ b/tools/dpdk_nic_bind.py
|
||||
@@ -317,7 +317,7 @@ def unbind_one(dev_id, force):
|
||||
f = open(filename, "a")
|
||||
except:
|
||||
print "Error: unbind failed for %s - Cannot open %s" % (dev_id, filename)
|
||||
- sys/exit(1)
|
||||
+ sys.exit(1)
|
||||
f.write(dev_id)
|
||||
f.close()
|
||||
|
||||
--
|
||||
2.7.3
|
||||
|
|
@ -1,259 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc1 fix for LP: #1559981
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-03-20
|
||||
|
||||
From 16c1814c802c205f6d3c32e3d3d10de9f87e7f22 Mon Sep 17 00:00:00 2001
|
||||
From: Dawid Jurczak <dawid_jurek@vp.pl>
|
||||
Date: Wed, 27 Jan 2016 20:59:44 +0100
|
||||
Subject: [PATCH] tools: support Python 3 in bind script
|
||||
|
||||
This patch fixes syntax errors during binding ethernet device
|
||||
on systems where Python 3 is default.
|
||||
Backward compatibility with Python 2 is preserved.
|
||||
|
||||
Signed-off-by: Dawid Jurczak <dawid_jurek@vp.pl>
|
||||
---
|
||||
tools/dpdk_nic_bind.py | 74 +++++++++++++++++++++++++-------------------------
|
||||
1 file changed, 37 insertions(+), 37 deletions(-)
|
||||
|
||||
diff --git a/tools/dpdk_nic_bind.py b/tools/dpdk_nic_bind.py
|
||||
index a1923c5..dfefdae 100755
|
||||
--- a/tools/dpdk_nic_bind.py
|
||||
+++ b/tools/dpdk_nic_bind.py
|
||||
@@ -54,7 +54,7 @@ args = []
|
||||
def usage():
|
||||
'''Print usage information for the program'''
|
||||
argv0 = basename(sys.argv[0])
|
||||
- print """
|
||||
+ print ("""
|
||||
Usage:
|
||||
------
|
||||
|
||||
@@ -110,7 +110,7 @@ To unbind 0000:01:00.0 from using any driver
|
||||
To bind 0000:02:00.0 and 0000:02:00.1 to the ixgbe kernel driver
|
||||
%(argv0)s -b ixgbe 02:00.0 02:00.1
|
||||
|
||||
- """ % locals() # replace items from local variables
|
||||
+ """ % locals()) # replace items from local variables
|
||||
|
||||
# This is roughly compatible with check_output function in subprocess module
|
||||
# which is only available in python 2.7.
|
||||
@@ -156,7 +156,7 @@ def check_modules():
|
||||
'''Checks that igb_uio is loaded'''
|
||||
global dpdk_drivers
|
||||
|
||||
- fd = file("/proc/modules")
|
||||
+ fd = open("/proc/modules", 'r')
|
||||
loaded_mods = fd.readlines()
|
||||
fd.close()
|
||||
|
||||
@@ -176,10 +176,10 @@ def check_modules():
|
||||
# check if we have at least one loaded module
|
||||
if True not in [mod["Found"] for mod in mods] and b_flag is not None:
|
||||
if b_flag in dpdk_drivers:
|
||||
- print "Error - no supported modules(DPDK driver) are loaded"
|
||||
+ print ("Error - no supported modules(DPDK driver) are loaded")
|
||||
sys.exit(1)
|
||||
else:
|
||||
- print "Warning - no supported modules(DPDK driver) are loaded"
|
||||
+ print ("Warning - no supported modules(DPDK driver) are loaded")
|
||||
|
||||
# change DPDK driver list to only contain drivers that are loaded
|
||||
dpdk_drivers = [mod["Name"] for mod in mods if mod["Found"]]
|
||||
@@ -198,7 +198,7 @@ def get_pci_device_details(dev_id):
|
||||
for line in extra_info:
|
||||
if len(line) == 0:
|
||||
continue
|
||||
- name, value = line.split("\t", 1)
|
||||
+ name, value = line.decode().split("\t", 1)
|
||||
name = name.strip(":") + "_str"
|
||||
device[name] = value
|
||||
# check for a unix interface name
|
||||
@@ -234,7 +234,7 @@ def get_nic_details():
|
||||
dev["Device"] = int(dev["Device"],16)
|
||||
devices[dev["Slot"]] = dict(dev) # use dict to make copy of dev
|
||||
else:
|
||||
- name, value = dev_line.split("\t", 1)
|
||||
+ name, value = dev_line.decode().split("\t", 1)
|
||||
dev[name.rstrip(":")] = value
|
||||
|
||||
# check what is the interface if any for an ssh connection if
|
||||
@@ -243,17 +243,17 @@ def get_nic_details():
|
||||
route = check_output(["ip", "-o", "route"])
|
||||
# filter out all lines for 169.254 routes
|
||||
route = "\n".join(filter(lambda ln: not ln.startswith("169.254"),
|
||||
- route.splitlines()))
|
||||
+ route.decode().splitlines()))
|
||||
rt_info = route.split()
|
||||
- for i in xrange(len(rt_info) - 1):
|
||||
+ for i in range(len(rt_info) - 1):
|
||||
if rt_info[i] == "dev":
|
||||
ssh_if.append(rt_info[i+1])
|
||||
|
||||
# based on the basic info, get extended text details
|
||||
for d in devices.keys():
|
||||
# get additional info and add it to existing data
|
||||
- devices[d] = dict(devices[d].items() +
|
||||
- get_pci_device_details(d).items())
|
||||
+ devices[d] = devices[d].copy()
|
||||
+ devices[d].update(get_pci_device_details(d).items())
|
||||
|
||||
for _if in ssh_if:
|
||||
if _if in devices[d]["Interface"].split(","):
|
||||
@@ -293,22 +293,22 @@ def dev_id_from_dev_name(dev_name):
|
||||
if dev_name in devices[d]["Interface"].split(","):
|
||||
return devices[d]["Slot"]
|
||||
# if nothing else matches - error
|
||||
- print "Unknown device: %s. " \
|
||||
- "Please specify device in \"bus:slot.func\" format" % dev_name
|
||||
+ print ("Unknown device: %s. " \
|
||||
+ "Please specify device in \"bus:slot.func\" format" % dev_name)
|
||||
sys.exit(1)
|
||||
|
||||
def unbind_one(dev_id, force):
|
||||
'''Unbind the device identified by "dev_id" from its current driver'''
|
||||
dev = devices[dev_id]
|
||||
if not has_driver(dev_id):
|
||||
- print "%s %s %s is not currently managed by any driver\n" % \
|
||||
- (dev["Slot"], dev["Device_str"], dev["Interface"])
|
||||
+ print ("%s %s %s is not currently managed by any driver\n" % \
|
||||
+ (dev["Slot"], dev["Device_str"], dev["Interface"]))
|
||||
return
|
||||
|
||||
# prevent us disconnecting ourselves
|
||||
if dev["Ssh_if"] and not force:
|
||||
- print "Routing table indicates that interface %s is active" \
|
||||
- ". Skipping unbind" % (dev_id)
|
||||
+ print ("Routing table indicates that interface %s is active" \
|
||||
+ ". Skipping unbind" % (dev_id))
|
||||
return
|
||||
|
||||
# write to /sys to unbind
|
||||
@@ -316,7 +316,7 @@ def unbind_one(dev_id, force):
|
||||
try:
|
||||
f = open(filename, "a")
|
||||
except:
|
||||
- print "Error: unbind failed for %s - Cannot open %s" % (dev_id, filename)
|
||||
+ print ("Error: unbind failed for %s - Cannot open %s" % (dev_id, filename))
|
||||
sys.exit(1)
|
||||
f.write(dev_id)
|
||||
f.close()
|
||||
@@ -329,14 +329,14 @@ def bind_one(dev_id, driver, force):
|
||||
|
||||
# prevent disconnection of our ssh session
|
||||
if dev["Ssh_if"] and not force:
|
||||
- print "Routing table indicates that interface %s is active" \
|
||||
- ". Not modifying" % (dev_id)
|
||||
+ print ("Routing table indicates that interface %s is active" \
|
||||
+ ". Not modifying" % (dev_id))
|
||||
return
|
||||
|
||||
# unbind any existing drivers we don't want
|
||||
if has_driver(dev_id):
|
||||
if dev["Driver_str"] == driver:
|
||||
- print "%s already bound to driver %s, skipping\n" % (dev_id, driver)
|
||||
+ print ("%s already bound to driver %s, skipping\n" % (dev_id, driver))
|
||||
return
|
||||
else:
|
||||
saved_driver = dev["Driver_str"]
|
||||
@@ -349,14 +349,14 @@ def bind_one(dev_id, driver, force):
|
||||
try:
|
||||
f = open(filename, "w")
|
||||
except:
|
||||
- print "Error: bind failed for %s - Cannot open %s" % (dev_id, filename)
|
||||
+ print ("Error: bind failed for %s - Cannot open %s" % (dev_id, filename))
|
||||
return
|
||||
try:
|
||||
f.write("%04x %04x" % (dev["Vendor"], dev["Device"]))
|
||||
f.close()
|
||||
except:
|
||||
- print "Error: bind failed for %s - Cannot write new PCI ID to " \
|
||||
- "driver %s" % (dev_id, driver)
|
||||
+ print ("Error: bind failed for %s - Cannot write new PCI ID to " \
|
||||
+ "driver %s" % (dev_id, driver))
|
||||
return
|
||||
|
||||
# do the bind by writing to /sys
|
||||
@@ -364,7 +364,7 @@ def bind_one(dev_id, driver, force):
|
||||
try:
|
||||
f = open(filename, "a")
|
||||
except:
|
||||
- print "Error: bind failed for %s - Cannot open %s" % (dev_id, filename)
|
||||
+ print ("Error: bind failed for %s - Cannot open %s" % (dev_id, filename))
|
||||
if saved_driver is not None: # restore any previous driver
|
||||
bind_one(dev_id, saved_driver, force)
|
||||
return
|
||||
@@ -378,7 +378,7 @@ def bind_one(dev_id, driver, force):
|
||||
tmp = get_pci_device_details(dev_id)
|
||||
if "Driver_str" in tmp and tmp["Driver_str"] == driver:
|
||||
return
|
||||
- print "Error: bind failed for %s - Cannot bind to driver %s" % (dev_id, driver)
|
||||
+ print ("Error: bind failed for %s - Cannot bind to driver %s" % (dev_id, driver))
|
||||
if saved_driver is not None: # restore any previous driver
|
||||
bind_one(dev_id, saved_driver, force)
|
||||
return
|
||||
@@ -423,8 +423,8 @@ def display_devices(title, dev_list, extra_params = None):
|
||||
%()s fields in it for replacement by the named fields in each device's
|
||||
dictionary.'''
|
||||
strings = [] # this holds the strings to print. We sort before printing
|
||||
- print "\n%s" % title
|
||||
- print "="*len(title)
|
||||
+ print ("\n%s" % title)
|
||||
+ print ("="*len(title))
|
||||
if len(dev_list) == 0:
|
||||
strings.append("<none>")
|
||||
else:
|
||||
@@ -436,7 +436,7 @@ def display_devices(title, dev_list, extra_params = None):
|
||||
strings.append("%s '%s'" % (dev["Slot"], dev["Device_str"]))
|
||||
# sort before printing, so that the entries appear in PCI order
|
||||
strings.sort()
|
||||
- print "\n".join(strings) # print one per line
|
||||
+ print ("\n".join(strings)) # print one per line
|
||||
|
||||
def show_status():
|
||||
'''Function called when the script is passed the "--status" option. Displays
|
||||
@@ -480,9 +480,9 @@ def parse_args():
|
||||
opts, args = getopt.getopt(sys.argv[1:], "b:us",
|
||||
["help", "usage", "status", "force",
|
||||
"bind=", "unbind"])
|
||||
- except getopt.GetoptError, error:
|
||||
- print str(error)
|
||||
- print "Run '%s --usage' for further information" % sys.argv[0]
|
||||
+ except (getopt.GetoptError, error):
|
||||
+ print (str(error))
|
||||
+ print ("Run '%s --usage' for further information" % sys.argv[0])
|
||||
sys.exit(1)
|
||||
|
||||
for opt, arg in opts:
|
||||
@@ -495,7 +495,7 @@ def parse_args():
|
||||
force_flag = True
|
||||
if opt == "-b" or opt == "-u" or opt == "--bind" or opt == "--unbind":
|
||||
if b_flag is not None:
|
||||
- print "Error - Only one bind or unbind may be specified\n"
|
||||
+ print ("Error - Only one bind or unbind may be specified\n")
|
||||
sys.exit(1)
|
||||
if opt == "-u" or opt == "--unbind":
|
||||
b_flag = "none"
|
||||
@@ -510,13 +510,13 @@ def do_arg_actions():
|
||||
global args
|
||||
|
||||
if b_flag is None and not status_flag:
|
||||
- print "Error: No action specified for devices. Please give a -b or -u option"
|
||||
- print "Run '%s --usage' for further information" % sys.argv[0]
|
||||
+ print ("Error: No action specified for devices. Please give a -b or -u option")
|
||||
+ print ("Run '%s --usage' for further information" % sys.argv[0])
|
||||
sys.exit(1)
|
||||
|
||||
if b_flag is not None and len(args) == 0:
|
||||
- print "Error: No devices specified."
|
||||
- print "Run '%s --usage' for further information" % sys.argv[0]
|
||||
+ print ("Error: No devices specified.")
|
||||
+ print ("Run '%s --usage' for further information" % sys.argv[0])
|
||||
sys.exit(1)
|
||||
|
||||
if b_flag == "none" or b_flag == "None":
|
||||
--
|
||||
2.7.3
|
||||
|
|
@ -1,75 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc1 fix for LP: #1559981
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-03-20
|
||||
|
||||
From bb9f408550d13af6c1da104b0d9d9b9837f69bde Mon Sep 17 00:00:00 2001
|
||||
From: Kamil Rytarowski <kamil.rytarowski@caviumnetworks.com>
|
||||
Date: Thu, 28 Jan 2016 14:13:53 +0100
|
||||
Subject: [PATCH] tools: support binding to built-in kernel modules
|
||||
|
||||
Currently dpdk_nic_bind.py detects Linux kernel modules via reading
|
||||
/proc/modules. Built-in ones aren't listed there and therefore they are
|
||||
not being found by the script.
|
||||
|
||||
Add support for checking built-in modules with parsing the sysfs files.
|
||||
|
||||
This commit obsoletes the /proc/modules parsing approach.
|
||||
|
||||
Signed-off-by: Kamil Rytarowski <kamil.rytarowski@caviumnetworks.com>
|
||||
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
|
||||
---
|
||||
tools/dpdk_nic_bind.py | 30 ++++++++++++++++++++----------
|
||||
1 file changed, 20 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/tools/dpdk_nic_bind.py b/tools/dpdk_nic_bind.py
|
||||
index dfefdae..14c5311 100755
|
||||
--- a/tools/dpdk_nic_bind.py
|
||||
+++ b/tools/dpdk_nic_bind.py
|
||||
@@ -156,22 +156,32 @@ def check_modules():
|
||||
'''Checks that igb_uio is loaded'''
|
||||
global dpdk_drivers
|
||||
|
||||
- fd = open("/proc/modules", 'r')
|
||||
- loaded_mods = fd.readlines()
|
||||
- fd.close()
|
||||
-
|
||||
# list of supported modules
|
||||
mods = [{"Name" : driver, "Found" : False} for driver in dpdk_drivers]
|
||||
|
||||
# first check if module is loaded
|
||||
- for line in loaded_mods:
|
||||
+ try:
|
||||
+ # Get list of sysfs modules (both built-in and dynamically loaded)
|
||||
+ sysfs_path = '/sys/module/'
|
||||
+
|
||||
+ # Get the list of directories in sysfs_path
|
||||
+ sysfs_mods = [os.path.join(sysfs_path, o) for o
|
||||
+ in os.listdir(sysfs_path)
|
||||
+ if os.path.isdir(os.path.join(sysfs_path, o))]
|
||||
+
|
||||
+ # Extract the last element of '/sys/module/abc' in the array
|
||||
+ sysfs_mods = [a.split('/')[-1] for a in sysfs_mods]
|
||||
+
|
||||
+ # special case for vfio_pci (module is named vfio-pci,
|
||||
+ # but its .ko is named vfio_pci)
|
||||
+ sysfs_mods = map(lambda a:
|
||||
+ a if a != 'vfio_pci' else 'vfio-pci', sysfs_mods)
|
||||
+
|
||||
for mod in mods:
|
||||
- if line.startswith(mod["Name"]):
|
||||
- mod["Found"] = True
|
||||
- # special case for vfio_pci (module is named vfio-pci,
|
||||
- # but its .ko is named vfio_pci)
|
||||
- elif line.replace("_", "-").startswith(mod["Name"]):
|
||||
+ if mod["Name"] in sysfs_mods:
|
||||
mod["Found"] = True
|
||||
+ except:
|
||||
+ pass
|
||||
|
||||
# check if we have at least one loaded module
|
||||
if True not in [mod["Found"] for mod in mods] and b_flag is not None:
|
||||
--
|
||||
2.7.3
|
||||
|
|
@ -1,89 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc1 fix for LP: #1559981
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-03-20
|
||||
|
||||
From 6e7caa1ad9d597fed0a49468af25ae6e68b8c443 Mon Sep 17 00:00:00 2001
|
||||
From: Kamil Rytarowski <kamil.rytarowski@caviumnetworks.com>
|
||||
Date: Thu, 28 Jan 2016 14:13:54 +0100
|
||||
Subject: [PATCH] eal/linux: support built-in kernel modules
|
||||
|
||||
Currently rte_eal_check_module() detects Linux kernel modules via reading
|
||||
/proc/modules. Built-in ones aren't listed there and therefore they are not
|
||||
being found.
|
||||
|
||||
Add support for checking built-in modules with parsing the sysfs files
|
||||
|
||||
This commit obsoletes the /proc/modules parsing approach.
|
||||
|
||||
Signed-off-by: Kamil Rytarowski <kamil.rytarowski@caviumnetworks.com>
|
||||
Acked-by: David Marchand <david.marchand@6wind.com>
|
||||
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
|
||||
---
|
||||
lib/librte_eal/linuxapp/eal/eal.c | 35 +++++++++++++++++++++--------------
|
||||
1 file changed, 21 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c
|
||||
index 635ec36..4d3e0de 100644
|
||||
--- a/lib/librte_eal/linuxapp/eal/eal.c
|
||||
+++ b/lib/librte_eal/linuxapp/eal/eal.c
|
||||
@@ -49,6 +49,7 @@
|
||||
#include <errno.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/queue.h>
|
||||
+#include <sys/stat.h>
|
||||
#if defined(RTE_ARCH_X86_64) || defined(RTE_ARCH_I686)
|
||||
#include <sys/io.h>
|
||||
#endif
|
||||
@@ -901,27 +902,33 @@ int rte_eal_has_hugepages(void)
|
||||
int
|
||||
rte_eal_check_module(const char *module_name)
|
||||
{
|
||||
- char mod_name[30]; /* Any module names can be longer than 30 bytes? */
|
||||
- int ret = 0;
|
||||
+ char sysfs_mod_name[PATH_MAX];
|
||||
+ struct stat st;
|
||||
int n;
|
||||
|
||||
if (NULL == module_name)
|
||||
return -1;
|
||||
|
||||
- FILE *fd = fopen("/proc/modules", "r");
|
||||
- if (NULL == fd) {
|
||||
- RTE_LOG(ERR, EAL, "Open /proc/modules failed!"
|
||||
- " error %i (%s)\n", errno, strerror(errno));
|
||||
+ /* Check if there is sysfs mounted */
|
||||
+ if (stat("/sys/module", &st) != 0) {
|
||||
+ RTE_LOG(DEBUG, EAL, "sysfs is not mounted! error %i (%s)\n",
|
||||
+ errno, strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
- while (!feof(fd)) {
|
||||
- n = fscanf(fd, "%29s %*[^\n]", mod_name);
|
||||
- if ((n == 1) && !strcmp(mod_name, module_name)) {
|
||||
- ret = 1;
|
||||
- break;
|
||||
- }
|
||||
+
|
||||
+ /* A module might be built-in, therefore try sysfs */
|
||||
+ n = snprintf(sysfs_mod_name, PATH_MAX, "/sys/module/%s", module_name);
|
||||
+ if (n < 0 || n > PATH_MAX) {
|
||||
+ RTE_LOG(DEBUG, EAL, "Could not format module path\n");
|
||||
+ return -1;
|
||||
}
|
||||
- fclose(fd);
|
||||
|
||||
- return ret;
|
||||
+ if (stat(sysfs_mod_name, &st) != 0) {
|
||||
+ RTE_LOG(DEBUG, EAL, "Module %s not found! error %i (%s)\n",
|
||||
+ sysfs_mod_name, errno, strerror(errno));
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ /* Module has been found */
|
||||
+ return 1;
|
||||
}
|
||||
--
|
||||
2.7.3
|
||||
|
|
@ -1,95 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc1 fix for LP: #1559981
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-03-20
|
||||
|
||||
From 86f36ff9578b5f3d697c8fcf6072dcb70e2b246f Mon Sep 17 00:00:00 2001
|
||||
From: Olivier Matz <olivier.matz@6wind.com>
|
||||
Date: Tue, 16 Feb 2016 15:40:10 +0100
|
||||
Subject: [PATCH] mempool: fix leak when creation fails
|
||||
|
||||
Since commits ff909fe21f and 4e32101f9b, it is now possible to free
|
||||
memzones and rings.
|
||||
|
||||
The rte_mempool_create() should be modified to take advantage of this
|
||||
and not leak memory when an allocation fails.
|
||||
|
||||
Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
|
||||
---
|
||||
lib/librte_mempool/rte_mempool.c | 28 +++++++++++++---------------
|
||||
1 file changed, 13 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/lib/librte_mempool/rte_mempool.c b/lib/librte_mempool/rte_mempool.c
|
||||
index aff5f6d..f8781e1 100644
|
||||
--- a/lib/librte_mempool/rte_mempool.c
|
||||
+++ b/lib/librte_mempool/rte_mempool.c
|
||||
@@ -438,8 +438,8 @@ rte_mempool_xmem_create(const char *name, unsigned n, unsigned elt_size,
|
||||
char rg_name[RTE_RING_NAMESIZE];
|
||||
struct rte_mempool_list *mempool_list;
|
||||
struct rte_mempool *mp = NULL;
|
||||
- struct rte_tailq_entry *te;
|
||||
- struct rte_ring *r;
|
||||
+ struct rte_tailq_entry *te = NULL;
|
||||
+ struct rte_ring *r = NULL;
|
||||
const struct rte_memzone *mz;
|
||||
size_t mempool_size;
|
||||
int mz_flags = RTE_MEMZONE_1GB|RTE_MEMZONE_SIZE_HINT_ONLY;
|
||||
@@ -511,7 +511,7 @@ rte_mempool_xmem_create(const char *name, unsigned n, unsigned elt_size,
|
||||
snprintf(rg_name, sizeof(rg_name), RTE_MEMPOOL_MZ_FORMAT, name);
|
||||
r = rte_ring_create(rg_name, rte_align32pow2(n+1), socket_id, rg_flags);
|
||||
if (r == NULL)
|
||||
- goto exit;
|
||||
+ goto exit_unlock;
|
||||
|
||||
/*
|
||||
* reserve a memory zone for this mempool: private data is
|
||||
@@ -536,7 +536,7 @@ rte_mempool_xmem_create(const char *name, unsigned n, unsigned elt_size,
|
||||
te = rte_zmalloc("MEMPOOL_TAILQ_ENTRY", sizeof(*te), 0);
|
||||
if (te == NULL) {
|
||||
RTE_LOG(ERR, MEMPOOL, "Cannot allocate tailq entry!\n");
|
||||
- goto exit;
|
||||
+ goto exit_unlock;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -561,15 +561,8 @@ rte_mempool_xmem_create(const char *name, unsigned n, unsigned elt_size,
|
||||
snprintf(mz_name, sizeof(mz_name), RTE_MEMPOOL_MZ_FORMAT, name);
|
||||
|
||||
mz = rte_memzone_reserve(mz_name, mempool_size, socket_id, mz_flags);
|
||||
-
|
||||
- /*
|
||||
- * no more memory: in this case we loose previously reserved
|
||||
- * space for the ring as we cannot free it
|
||||
- */
|
||||
- if (mz == NULL) {
|
||||
- rte_free(te);
|
||||
- goto exit;
|
||||
- }
|
||||
+ if (mz == NULL)
|
||||
+ goto exit_unlock;
|
||||
|
||||
if (rte_eal_has_hugepages()) {
|
||||
startaddr = (void*)mz->addr;
|
||||
@@ -633,11 +626,16 @@ rte_mempool_xmem_create(const char *name, unsigned n, unsigned elt_size,
|
||||
rte_rwlock_write_lock(RTE_EAL_TAILQ_RWLOCK);
|
||||
TAILQ_INSERT_TAIL(mempool_list, te, next);
|
||||
rte_rwlock_write_unlock(RTE_EAL_TAILQ_RWLOCK);
|
||||
-
|
||||
-exit:
|
||||
rte_rwlock_write_unlock(RTE_EAL_MEMPOOL_RWLOCK);
|
||||
|
||||
return mp;
|
||||
+
|
||||
+exit_unlock:
|
||||
+ rte_rwlock_write_unlock(RTE_EAL_MEMPOOL_RWLOCK);
|
||||
+ rte_ring_free(r);
|
||||
+ rte_free(te);
|
||||
+
|
||||
+ return NULL;
|
||||
}
|
||||
|
||||
/* Return the number of entries in the mempool */
|
||||
--
|
||||
2.7.3
|
||||
|
|
@ -1,154 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc1 fix for LP: #1559981
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-03-20
|
||||
|
||||
From ca67ed289a76f38d6c4a4021985a36eaf1d77e28 Mon Sep 17 00:00:00 2001
|
||||
From: Rich Lane <rich.lane@bigswitch.com>
|
||||
Date: Wed, 10 Feb 2016 10:40:55 -0800
|
||||
Subject: [PATCH] vhost: fix leak of fds and mmaps
|
||||
|
||||
The common vhost code only supported a single mmap per device. vhost-user
|
||||
worked around this by saving the address/length/fd of each mmap after the end
|
||||
of the rte_virtio_memory struct. This only works if the vhost-user code frees
|
||||
dev->mem, since the common code is unaware of the extra info. The
|
||||
VHOST_USER_RESET_OWNER message is one situation where the common code frees
|
||||
dev->mem and leaks the fds and mappings. This happens every time I shut down a
|
||||
VM.
|
||||
|
||||
The new code calls back into the implementation (vhost-user or vhost-cuse) to
|
||||
clean up these resources.
|
||||
|
||||
The vhost-cuse changes are only compile tested.
|
||||
|
||||
Signed-off-by: Rich Lane <rich.lane@bigswitch.com>
|
||||
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
|
||||
---
|
||||
lib/librte_vhost/vhost-net.h | 6 ++++++
|
||||
lib/librte_vhost/vhost_cuse/virtio-net-cdev.c | 12 ++++++++++++
|
||||
lib/librte_vhost/vhost_user/vhost-net-user.c | 1 -
|
||||
lib/librte_vhost/vhost_user/virtio-net-user.c | 25 ++++++++++---------------
|
||||
lib/librte_vhost/vhost_user/virtio-net-user.h | 1 -
|
||||
lib/librte_vhost/virtio-net.c | 8 +-------
|
||||
6 files changed, 29 insertions(+), 24 deletions(-)
|
||||
|
||||
Index: dpdk/lib/librte_vhost/vhost-net.h
|
||||
===================================================================
|
||||
--- dpdk.orig/lib/librte_vhost/vhost-net.h
|
||||
+++ dpdk/lib/librte_vhost/vhost-net.h
|
||||
@@ -115,4 +115,10 @@ struct vhost_net_device_ops {
|
||||
|
||||
|
||||
struct vhost_net_device_ops const *get_virtio_net_callbacks(void);
|
||||
+
|
||||
+/*
|
||||
+ * Backend-specific cleanup. Defined by vhost-cuse and vhost-user.
|
||||
+ */
|
||||
+void vhost_backend_cleanup(struct virtio_net *dev);
|
||||
+
|
||||
#endif /* _VHOST_NET_CDEV_H_ */
|
||||
Index: dpdk/lib/librte_vhost/vhost_cuse/virtio-net-cdev.c
|
||||
===================================================================
|
||||
--- dpdk.orig/lib/librte_vhost/vhost_cuse/virtio-net-cdev.c
|
||||
+++ dpdk/lib/librte_vhost/vhost_cuse/virtio-net-cdev.c
|
||||
@@ -421,3 +421,15 @@ int cuse_set_backend(struct vhost_device
|
||||
|
||||
return ops->set_backend(ctx, file);
|
||||
}
|
||||
+
|
||||
+void
|
||||
+vhost_backend_cleanup(struct virtio_net *dev)
|
||||
+{
|
||||
+ /* Unmap QEMU memory file if mapped. */
|
||||
+ if (dev->mem) {
|
||||
+ munmap((void *)(uintptr_t)dev->mem->mapped_address,
|
||||
+ (size_t)dev->mem->mapped_size);
|
||||
+ free(dev->mem);
|
||||
+ dev->mem = NULL;
|
||||
+ }
|
||||
+}
|
||||
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
|
||||
@@ -347,7 +347,6 @@ vserver_message_handler(int connfd, void
|
||||
close(connfd);
|
||||
*remove = 1;
|
||||
free(cfd_ctx);
|
||||
- user_destroy_device(ctx);
|
||||
ops->destroy_device(ctx);
|
||||
|
||||
return;
|
||||
Index: dpdk/lib/librte_vhost/vhost_user/virtio-net-user.c
|
||||
===================================================================
|
||||
--- dpdk.orig/lib/librte_vhost/vhost_user/virtio-net-user.c
|
||||
+++ dpdk/lib/librte_vhost/vhost_user/virtio-net-user.c
|
||||
@@ -88,6 +88,16 @@ free_mem_region(struct virtio_net *dev)
|
||||
}
|
||||
}
|
||||
|
||||
+void
|
||||
+vhost_backend_cleanup(struct virtio_net *dev)
|
||||
+{
|
||||
+ if (dev->mem) {
|
||||
+ free_mem_region(dev);
|
||||
+ free(dev->mem);
|
||||
+ dev->mem = NULL;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
int
|
||||
user_set_mem_table(struct vhost_device_ctx ctx, struct VhostUserMsg *pmsg)
|
||||
{
|
||||
@@ -339,21 +349,6 @@ user_set_vring_enable(struct vhost_devic
|
||||
}
|
||||
|
||||
void
|
||||
-user_destroy_device(struct vhost_device_ctx ctx)
|
||||
-{
|
||||
- struct virtio_net *dev = get_device(ctx);
|
||||
-
|
||||
- if (dev && (dev->flags & VIRTIO_DEV_RUNNING))
|
||||
- notify_ops->destroy_device(dev);
|
||||
-
|
||||
- if (dev && dev->mem) {
|
||||
- free_mem_region(dev);
|
||||
- free(dev->mem);
|
||||
- dev->mem = NULL;
|
||||
- }
|
||||
-}
|
||||
-
|
||||
-void
|
||||
user_set_protocol_features(struct vhost_device_ctx ctx,
|
||||
uint64_t protocol_features)
|
||||
{
|
||||
Index: dpdk/lib/librte_vhost/vhost_user/virtio-net-user.h
|
||||
===================================================================
|
||||
--- dpdk.orig/lib/librte_vhost/vhost_user/virtio-net-user.h
|
||||
+++ dpdk/lib/librte_vhost/vhost_user/virtio-net-user.h
|
||||
@@ -55,5 +55,4 @@ int user_get_vring_base(struct vhost_dev
|
||||
int user_set_vring_enable(struct vhost_device_ctx ctx,
|
||||
struct vhost_vring_state *state);
|
||||
|
||||
-void user_destroy_device(struct vhost_device_ctx);
|
||||
#endif
|
||||
Index: dpdk/lib/librte_vhost/virtio-net.c
|
||||
===================================================================
|
||||
--- dpdk.orig/lib/librte_vhost/virtio-net.c
|
||||
+++ dpdk/lib/librte_vhost/virtio-net.c
|
||||
@@ -199,13 +199,7 @@ cleanup_device(struct virtio_net *dev, i
|
||||
{
|
||||
uint32_t i;
|
||||
|
||||
- /* Unmap QEMU memory file if mapped. */
|
||||
- if (dev->mem) {
|
||||
- munmap((void *)(uintptr_t)dev->mem->mapped_address,
|
||||
- (size_t)dev->mem->mapped_size);
|
||||
- free(dev->mem);
|
||||
- dev->mem = NULL;
|
||||
- }
|
||||
+ vhost_backend_cleanup(dev);
|
||||
|
||||
for (i = 0; i < dev->virt_qp_nb; i++) {
|
||||
cleanup_vq(dev->virtqueue[i * VIRTIO_QNUM + VIRTIO_RXQ], destroy);
|
|
@ -1,80 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc1 fix for LP: #1559981
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-03-20
|
||||
|
||||
From fa11a8a7251e14eca0a4190128732386f13551bd Mon Sep 17 00:00:00 2001
|
||||
From: Jasvinder Singh <jasvinder.singh@intel.com>
|
||||
Date: Wed, 2 Mar 2016 21:19:58 +0000
|
||||
Subject: [PATCH] port: fix crash for ring writer nodrop
|
||||
|
||||
Error log:
|
||||
[APP] Initializing PIPELINE0 ...
|
||||
pipeline> [APP] Initializing PIPELINE1 ...
|
||||
[PIPELINE1] Pass-through
|
||||
[APP] Initializing PIPELINE2 ...
|
||||
[PIPELINE2] Pass-through
|
||||
Segmentation fault (core dumped)
|
||||
|
||||
Fixes: 5f4cd47309d6 ("port: add ring writer nodrop")
|
||||
Fixes: d58f69c54172 ("port: add ring multi reader or writer")
|
||||
|
||||
Signed-off-by: Jasvinder Singh <jasvinder.singh@intel.com>
|
||||
---
|
||||
lib/librte_port/rte_port_ring.c | 16 ++++++++++++----
|
||||
1 file changed, 12 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/lib/librte_port/rte_port_ring.c b/lib/librte_port/rte_port_ring.c
|
||||
index 755dfc1..b847fea 100644
|
||||
--- a/lib/librte_port/rte_port_ring.c
|
||||
+++ b/lib/librte_port/rte_port_ring.c
|
||||
@@ -520,16 +520,20 @@ send_burst_nodrop(struct rte_port_ring_writer_nodrop *p)
|
||||
p->tx_buf_count);
|
||||
|
||||
/* We sent all the packets in a first try */
|
||||
- if (nb_tx >= p->tx_buf_count)
|
||||
+ if (nb_tx >= p->tx_buf_count) {
|
||||
+ p->tx_buf_count = 0;
|
||||
return;
|
||||
+ }
|
||||
|
||||
for (i = 0; i < p->n_retries; i++) {
|
||||
nb_tx += rte_ring_sp_enqueue_burst(p->ring,
|
||||
(void **) (p->tx_buf + nb_tx), p->tx_buf_count - nb_tx);
|
||||
|
||||
/* We sent all the packets in more than one try */
|
||||
- if (nb_tx >= p->tx_buf_count)
|
||||
+ if (nb_tx >= p->tx_buf_count) {
|
||||
+ p->tx_buf_count = 0;
|
||||
return;
|
||||
+ }
|
||||
}
|
||||
|
||||
/* We didn't send the packets in maximum allowed attempts */
|
||||
@@ -549,16 +553,20 @@ send_burst_mp_nodrop(struct rte_port_ring_writer_nodrop *p)
|
||||
p->tx_buf_count);
|
||||
|
||||
/* We sent all the packets in a first try */
|
||||
- if (nb_tx >= p->tx_buf_count)
|
||||
+ if (nb_tx >= p->tx_buf_count) {
|
||||
+ p->tx_buf_count = 0;
|
||||
return;
|
||||
+ }
|
||||
|
||||
for (i = 0; i < p->n_retries; i++) {
|
||||
nb_tx += rte_ring_mp_enqueue_burst(p->ring,
|
||||
(void **) (p->tx_buf + nb_tx), p->tx_buf_count - nb_tx);
|
||||
|
||||
/* We sent all the packets in more than one try */
|
||||
- if (nb_tx >= p->tx_buf_count)
|
||||
+ if (nb_tx >= p->tx_buf_count) {
|
||||
+ p->tx_buf_count = 0;
|
||||
return;
|
||||
+ }
|
||||
}
|
||||
|
||||
/* We didn't send the packets in maximum allowed attempts */
|
||||
--
|
||||
2.7.3
|
||||
|
|
@ -1,55 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc1 fix for LP: #1559981
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-03-20
|
||||
|
||||
From 04f366906ab395c8047bebfc1ddea244dfcb40f5 Mon Sep 17 00:00:00 2001
|
||||
From: Jasvinder Singh <jasvinder.singh@intel.com>
|
||||
Date: Wed, 2 Mar 2016 21:19:29 +0000
|
||||
Subject: [PATCH] port: fix crash for ethdev writer nodrop
|
||||
|
||||
Error log:
|
||||
[APP] Initializing PIPELINE0 ...
|
||||
pipeline> [APP] Initializing PIPELINE1 ...
|
||||
[PIPELINE1] Pass-through
|
||||
Segmentation fault (core dumped)
|
||||
|
||||
Fixes: 304c8091e90a ("port: add ethdev writer nodrop")
|
||||
|
||||
Signed-off-by: Jasvinder Singh <jasvinder.singh@intel.com>
|
||||
Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
|
||||
---
|
||||
lib/librte_port/rte_port_ethdev.c | 8 ++++++--
|
||||
1 file changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/lib/librte_port/rte_port_ethdev.c b/lib/librte_port/rte_port_ethdev.c
|
||||
index 1f0c81c..1c34602 100644
|
||||
--- a/lib/librte_port/rte_port_ethdev.c
|
||||
+++ b/lib/librte_port/rte_port_ethdev.c
|
||||
@@ -390,16 +390,20 @@ send_burst_nodrop(struct rte_port_ethdev_writer_nodrop *p)
|
||||
p->tx_buf_count);
|
||||
|
||||
/* We sent all the packets in a first try */
|
||||
- if (nb_tx >= p->tx_buf_count)
|
||||
+ if (nb_tx >= p->tx_buf_count) {
|
||||
+ p->tx_buf_count = 0;
|
||||
return;
|
||||
+ }
|
||||
|
||||
for (i = 0; i < p->n_retries; i++) {
|
||||
nb_tx += rte_eth_tx_burst(p->port_id, p->queue_id,
|
||||
p->tx_buf + nb_tx, p->tx_buf_count - nb_tx);
|
||||
|
||||
/* We sent all the packets in more than one try */
|
||||
- if (nb_tx >= p->tx_buf_count)
|
||||
+ if (nb_tx >= p->tx_buf_count) {
|
||||
+ p->tx_buf_count = 0;
|
||||
return;
|
||||
+ }
|
||||
}
|
||||
|
||||
/* We didn't send the packets in maximum allowed attempts */
|
||||
--
|
||||
2.7.3
|
||||
|
|
@ -1,45 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc1 fix for LP: #1559981
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-03-20
|
||||
|
||||
From c7a4ff80722e9237a4c504106d21ba5ca27d8df2 Mon Sep 17 00:00:00 2001
|
||||
From: Helin Zhang <helin.zhang@intel.com>
|
||||
Date: Sat, 12 Mar 2016 00:50:58 +0800
|
||||
Subject: [PATCH] i40e: fix overflow
|
||||
|
||||
The array 'ptype_table' was defined in depth of 'UINT8_MAX' which
|
||||
is 255, while the querying index could be from 0 to 255. The issue
|
||||
can be fixed with expanding the array to one more element.
|
||||
|
||||
Fixes: 9571ea028489 ("i40e: replace some offload flags with unified packet type")
|
||||
|
||||
Signed-off-by: Helin Zhang <helin.zhang@intel.com>
|
||||
Acked-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
|
||||
---
|
||||
drivers/net/i40e/i40e_rxtx.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: dpdk/drivers/net/i40e/i40e_rxtx.c
|
||||
===================================================================
|
||||
--- dpdk.orig/drivers/net/i40e/i40e_rxtx.c
|
||||
+++ dpdk/drivers/net/i40e/i40e_rxtx.c
|
||||
@@ -198,7 +198,7 @@ i40e_get_iee15888_flags(struct rte_mbuf
|
||||
static inline uint32_t
|
||||
i40e_rxd_pkt_type_mapping(uint8_t ptype)
|
||||
{
|
||||
- static const uint32_t ptype_table[UINT8_MAX] __rte_cache_aligned = {
|
||||
+ static const uint32_t type_table[UINT8_MAX + 1] __rte_cache_aligned = {
|
||||
/* L2 types */
|
||||
/* [0] reserved */
|
||||
[1] = RTE_PTYPE_L2_ETHER,
|
||||
@@ -724,7 +724,7 @@ i40e_rxd_pkt_type_mapping(uint8_t ptype)
|
||||
/* All others reserved */
|
||||
};
|
||||
|
||||
- return ptype_table[ptype];
|
||||
+ return type_table[ptype];
|
||||
}
|
||||
|
||||
#define I40E_RX_DESC_EXT_STATUS_FLEXBH_MASK 0x03
|
|
@ -1,36 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc1 fix for LP: #1559981
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-03-20
|
||||
|
||||
From 097e920c32bf19cf918cc071525f33b0abdeebaf Mon Sep 17 00:00:00 2001
|
||||
From: Rich Lane <rich.lane@bigswitch.com>
|
||||
Date: Wed, 23 Dec 2015 00:08:00 -0800
|
||||
Subject: [PATCH] i40e: fix inverted check for no refcount
|
||||
|
||||
The no-refcount path was being taken without the application opting
|
||||
in to it.
|
||||
|
||||
Fixes: 4861cde46116 ("i40e: new poll mode driver")
|
||||
|
||||
Reported-by: Mike Stolarchuk <mike.stolarchuk@bigswitch.com>
|
||||
Signed-off-by: Rich Lane <rich.lane@bigswitch.com>
|
||||
Acked-by: Helin Zhang <helin.zhang@intel.com>
|
||||
---
|
||||
drivers/net/i40e/i40e_rxtx.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: dpdk/drivers/net/i40e/i40e_rxtx.c
|
||||
===================================================================
|
||||
--- dpdk.orig/drivers/net/i40e/i40e_rxtx.c
|
||||
+++ dpdk/drivers/net/i40e/i40e_rxtx.c
|
||||
@@ -1762,7 +1762,7 @@ i40e_tx_free_bufs(struct i40e_tx_queue *
|
||||
for (i = 0; i < txq->tx_rs_thresh; i++)
|
||||
rte_prefetch0((txep + i)->mbuf);
|
||||
|
||||
- if (!(txq->txq_flags & (uint32_t)ETH_TXQ_FLAGS_NOREFCOUNT)) {
|
||||
+ if (txq->txq_flags & (uint32_t)ETH_TXQ_FLAGS_NOREFCOUNT) {
|
||||
for (i = 0; i < txq->tx_rs_thresh; ++i, ++txep) {
|
||||
rte_mempool_put(txep->mbuf->pool, txep->mbuf);
|
||||
txep->mbuf = NULL;
|
|
@ -1,150 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc1 fix for LP: #1559981
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-03-20
|
||||
|
||||
From 330aa319382aec9ea595f9ebcb9a3c44647ad66c Mon Sep 17 00:00:00 2001
|
||||
From: Julien Meunier <julien.meunier@6wind.com>
|
||||
Date: Thu, 4 Feb 2016 12:02:16 +0100
|
||||
Subject: [PATCH] i40e: fix VLAN filtering
|
||||
|
||||
VLAN filtering was always performed, even if hw_vlan_filter was
|
||||
disabled. During device initialization, default filter
|
||||
RTE_MACVLAN_PERFECT_MATCH was applied. In this situation, all incoming
|
||||
VLAN frames were dropped by the card (increase of the register RUPP - Rx
|
||||
Unsupported Protocol).
|
||||
|
||||
In order to restore default behavior, if HW VLAN filtering is activated,
|
||||
set a filter to match MAC and VLAN. If not, set a filter to only match
|
||||
MAC.
|
||||
|
||||
Fixes: 4861cde46116 ("i40e: new poll mode driver")
|
||||
Fixes: 912b595146d6 ("i40e: mac vlan filter")
|
||||
|
||||
Signed-off-by: Julien Meunier <julien.meunier@6wind.com>
|
||||
Acked-by: Helin Zhang <helin.zhang@intel.com>
|
||||
---
|
||||
drivers/net/i40e/i40e_ethdev.c | 73 ++++++++++++++++++++++++++++++++++++++++--
|
||||
drivers/net/i40e/i40e_ethdev.h | 1 +
|
||||
2 files changed, 72 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: dpdk/drivers/net/i40e/i40e_ethdev.c
|
||||
===================================================================
|
||||
--- dpdk.orig/drivers/net/i40e/i40e_ethdev.c
|
||||
+++ dpdk/drivers/net/i40e/i40e_ethdev.c
|
||||
@@ -2332,6 +2332,13 @@ i40e_vlan_offload_set(struct rte_eth_dev
|
||||
struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);
|
||||
struct i40e_vsi *vsi = pf->main_vsi;
|
||||
|
||||
+ if (mask & ETH_VLAN_FILTER_MASK) {
|
||||
+ if (dev->data->dev_conf.rxmode.hw_vlan_filter)
|
||||
+ i40e_vsi_config_vlan_filter(vsi, TRUE);
|
||||
+ else
|
||||
+ i40e_vsi_config_vlan_filter(vsi, FALSE);
|
||||
+ }
|
||||
+
|
||||
if (mask & ETH_VLAN_STRIP_MASK) {
|
||||
/* Enable or disable VLAN stripping */
|
||||
if (dev->data->dev_conf.rxmode.hw_vlan_strip)
|
||||
@@ -2583,7 +2590,10 @@ i40e_macaddr_add(struct rte_eth_dev *dev
|
||||
}
|
||||
|
||||
(void)rte_memcpy(&mac_filter.mac_addr, mac_addr, ETHER_ADDR_LEN);
|
||||
- mac_filter.filter_type = RTE_MACVLAN_PERFECT_MATCH;
|
||||
+ if (dev->data->dev_conf.rxmode.hw_vlan_filter)
|
||||
+ mac_filter.filter_type = RTE_MACVLAN_PERFECT_MATCH;
|
||||
+ else
|
||||
+ mac_filter.filter_type = RTE_MAC_PERFECT_MATCH;
|
||||
|
||||
if (pool == 0)
|
||||
vsi = pf->main_vsi;
|
||||
@@ -4156,6 +4166,63 @@ fail_mem:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
+/* Configure vlan filter on or off */
|
||||
+int
|
||||
+i40e_vsi_config_vlan_filter(struct i40e_vsi *vsi, bool on)
|
||||
+{
|
||||
+ int i, num;
|
||||
+ struct i40e_mac_filter *f;
|
||||
+ struct i40e_mac_filter_info *mac_filter;
|
||||
+ enum rte_mac_filter_type desired_filter;
|
||||
+ int ret = I40E_SUCCESS;
|
||||
+
|
||||
+ if (on) {
|
||||
+ /* Filter to match MAC and VLAN */
|
||||
+ desired_filter = RTE_MACVLAN_PERFECT_MATCH;
|
||||
+ } else {
|
||||
+ /* Filter to match only MAC */
|
||||
+ desired_filter = RTE_MAC_PERFECT_MATCH;
|
||||
+ }
|
||||
+
|
||||
+ num = vsi->mac_num;
|
||||
+
|
||||
+ mac_filter = rte_zmalloc("mac_filter_info_data",
|
||||
+ num * sizeof(*mac_filter), 0);
|
||||
+ if (mac_filter == NULL) {
|
||||
+ PMD_DRV_LOG(ERR, "failed to allocate memory");
|
||||
+ return I40E_ERR_NO_MEMORY;
|
||||
+ }
|
||||
+
|
||||
+ i = 0;
|
||||
+
|
||||
+ /* Remove all existing mac */
|
||||
+ TAILQ_FOREACH(f, &vsi->mac_list, next) {
|
||||
+ mac_filter[i] = f->mac_info;
|
||||
+ ret = i40e_vsi_delete_mac(vsi, &f->mac_info.mac_addr);
|
||||
+ if (ret) {
|
||||
+ PMD_DRV_LOG(ERR, "Update VSI failed to %s vlan filter",
|
||||
+ on ? "enable" : "disable");
|
||||
+ goto DONE;
|
||||
+ }
|
||||
+ i++;
|
||||
+ }
|
||||
+
|
||||
+ /* Override with new filter */
|
||||
+ for (i = 0; i < num; i++) {
|
||||
+ mac_filter[i].filter_type = desired_filter;
|
||||
+ ret = i40e_vsi_add_mac(vsi, &mac_filter[i]);
|
||||
+ if (ret) {
|
||||
+ PMD_DRV_LOG(ERR, "Update VSI failed to %s vlan filter",
|
||||
+ on ? "enable" : "disable");
|
||||
+ goto DONE;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+DONE:
|
||||
+ rte_free(mac_filter);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
/* Configure vlan stripping on or off */
|
||||
int
|
||||
i40e_vsi_config_vlan_stripping(struct i40e_vsi *vsi, bool on)
|
||||
@@ -4203,9 +4270,11 @@ i40e_dev_init_vlan(struct rte_eth_dev *d
|
||||
{
|
||||
struct rte_eth_dev_data *data = dev->data;
|
||||
int ret;
|
||||
+ int mask = 0;
|
||||
|
||||
/* Apply vlan offload setting */
|
||||
- i40e_vlan_offload_set(dev, ETH_VLAN_STRIP_MASK);
|
||||
+ mask = ETH_VLAN_STRIP_MASK | ETH_VLAN_FILTER_MASK;
|
||||
+ i40e_vlan_offload_set(dev, mask);
|
||||
|
||||
/* Apply double-vlan setting, not implemented yet */
|
||||
|
||||
Index: dpdk/drivers/net/i40e/i40e_ethdev.h
|
||||
===================================================================
|
||||
--- dpdk.orig/drivers/net/i40e/i40e_ethdev.h
|
||||
+++ dpdk/drivers/net/i40e/i40e_ethdev.h
|
||||
@@ -551,6 +551,7 @@ void i40e_vsi_queues_unbind_intr(struct
|
||||
int i40e_vsi_vlan_pvid_set(struct i40e_vsi *vsi,
|
||||
struct i40e_vsi_vlan_pvid_info *info);
|
||||
int i40e_vsi_config_vlan_stripping(struct i40e_vsi *vsi, bool on);
|
||||
+int i40e_vsi_config_vlan_filter(struct i40e_vsi *vsi, bool on);
|
||||
uint64_t i40e_config_hena(uint64_t flags);
|
||||
uint64_t i40e_parse_hena(uint64_t flags);
|
||||
enum i40e_status_code i40e_fdir_setup_tx_resources(struct i40e_pf *pf);
|
|
@ -1,55 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc1 fix for LP: #1559981
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-03-20
|
||||
|
||||
From 9f44dd3d8ad447c7f797a9564d30a15e5ab7f72b Mon Sep 17 00:00:00 2001
|
||||
From: Helin Zhang <helin.zhang@intel.com>
|
||||
Date: Tue, 8 Mar 2016 16:14:14 +0800
|
||||
Subject: [PATCH] i40e/base: fix missing check for stopped admin queue
|
||||
|
||||
It's possible that while waiting for the spinlock, another
|
||||
entity (that owns the spinlock) has shut down the admin queue.
|
||||
If it then attempts to use the queue, it will panic.
|
||||
It adds a check for this condition on the receive side. This
|
||||
matches an existing check on the send queue side.
|
||||
|
||||
Fixes: 8db9e2a1b232 ("i40e: base driver")
|
||||
|
||||
Signed-off-by: Helin Zhang <helin.zhang@intel.com>
|
||||
Acked-by: Jingjing Wu <jingjing.wu@intel.com>
|
||||
Acked-by: Remy Horton <remy.horton@intel.com>
|
||||
---
|
||||
drivers/net/i40e/base/i40e_adminq.c | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/i40e/base/i40e_adminq.c b/drivers/net/i40e/base/i40e_adminq.c
|
||||
index 998582c..e1a162e 100644
|
||||
--- a/drivers/net/i40e/base/i40e_adminq.c
|
||||
+++ b/drivers/net/i40e/base/i40e_adminq.c
|
||||
@@ -1035,6 +1035,13 @@ enum i40e_status_code i40e_clean_arq_element(struct i40e_hw *hw,
|
||||
/* take the lock before we start messing with the ring */
|
||||
i40e_acquire_spinlock(&hw->aq.arq_spinlock);
|
||||
|
||||
+ if (hw->aq.arq.count == 0) {
|
||||
+ i40e_debug(hw, I40E_DEBUG_AQ_MESSAGE,
|
||||
+ "AQRX: Admin queue not initialized.\n");
|
||||
+ ret_code = I40E_ERR_QUEUE_EMPTY;
|
||||
+ goto clean_arq_element_err;
|
||||
+ }
|
||||
+
|
||||
/* set next_to_use to head */
|
||||
#ifdef PF_DRIVER
|
||||
#ifdef INTEGRATED_VF
|
||||
@@ -1113,6 +1120,7 @@ clean_arq_element_out:
|
||||
/* Set pending if needed, unlock and return */
|
||||
if (pending != NULL)
|
||||
*pending = (ntc > ntu ? hw->aq.arq.count : 0) + (ntu - ntc);
|
||||
+clean_arq_element_err:
|
||||
i40e_release_spinlock(&hw->aq.arq_spinlock);
|
||||
|
||||
#ifdef PF_DRIVER
|
||||
--
|
||||
2.7.3
|
||||
|
|
@ -1,44 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc1 fix for LP: #1559981
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-03-20
|
||||
|
||||
From 8a8807369ffafef90c410279b4b2645d2d7a7483 Mon Sep 17 00:00:00 2001
|
||||
From: Helin Zhang <helin.zhang@intel.com>
|
||||
Date: Tue, 8 Mar 2016 16:14:28 +0800
|
||||
Subject: [PATCH] i40e/base: fix driver load failure
|
||||
|
||||
Fix the driver load failure with linking with some
|
||||
PHY types, as the amount of time it takes for the
|
||||
GLGEN_RSTAT_DEVSTATE to be set increases greatly on those PHY
|
||||
types, which can lead to a timeout.
|
||||
|
||||
Fixes: 9aeefed05538 ("i40e/base: support ESS")
|
||||
|
||||
Signed-off-by: Helin Zhang <helin.zhang@intel.com>
|
||||
Acked-by: Jingjing Wu <jingjing.wu@intel.com>
|
||||
Acked-by: Remy Horton <remy.horton@intel.com>
|
||||
---
|
||||
drivers/net/i40e/base/i40e_common.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
Index: dpdk/drivers/net/i40e/base/i40e_common.c
|
||||
===================================================================
|
||||
--- dpdk.orig/drivers/net/i40e/base/i40e_common.c
|
||||
+++ dpdk/drivers/net/i40e/base/i40e_common.c
|
||||
@@ -1303,11 +1303,11 @@ enum i40e_status_code i40e_pf_reset(stru
|
||||
grst_del = (rd32(hw, I40E_GLGEN_RSTCTL) &
|
||||
I40E_GLGEN_RSTCTL_GRSTDEL_MASK) >>
|
||||
I40E_GLGEN_RSTCTL_GRSTDEL_SHIFT;
|
||||
-#ifdef I40E_ESS_SUPPORT
|
||||
+
|
||||
/* It can take upto 15 secs for GRST steady state */
|
||||
grst_del = grst_del * 20; /* bump it to 16 secs max to be safe */
|
||||
-#endif
|
||||
- for (cnt = 0; cnt < grst_del + 10; cnt++) {
|
||||
+
|
||||
+ for (cnt = 0; cnt < grst_del; cnt++) {
|
||||
reg = rd32(hw, I40E_GLGEN_RSTAT);
|
||||
if (!(reg & I40E_GLGEN_RSTAT_DEVSTATE_MASK))
|
||||
break;
|
|
@ -1,38 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc1 fix for LP: #1559981
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-03-20
|
||||
|
||||
From 7656a546c0609f3205558a5d48352c82607d38d3 Mon Sep 17 00:00:00 2001
|
||||
From: Xiao Wang <xiao.w.wang@intel.com>
|
||||
Date: Fri, 18 Dec 2015 11:09:18 +0800
|
||||
Subject: [PATCH] fm10k: fix VLAN flag in scattered Rx
|
||||
|
||||
In fm10k_recv_scattered_pkts function, a packet is stored in a linked list,
|
||||
offload flags such as PKT_RX_VLAN_PKT should be set in the first segment.
|
||||
|
||||
Fixes: 6b59a3bc82b1 ("fm10k: fix VLAN in Rx mbuf")
|
||||
|
||||
Signed-off-by: Wang Xiao W <xiao.w.wang@intel.com>
|
||||
Acked-by: Shaopeng He <shaopeng.he@intel.com>
|
||||
---
|
||||
drivers/net/fm10k/fm10k_rxtx.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/fm10k/fm10k_rxtx.c b/drivers/net/fm10k/fm10k_rxtx.c
|
||||
index e958865..de31cad 100644
|
||||
--- a/drivers/net/fm10k/fm10k_rxtx.c
|
||||
+++ b/drivers/net/fm10k/fm10k_rxtx.c
|
||||
@@ -305,7 +305,7 @@ fm10k_recv_scattered_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
|
||||
* So, always PKT_RX_VLAN_PKT flag is set and vlan_tci
|
||||
* is valid for each RX packet's mbuf.
|
||||
*/
|
||||
- mbuf->ol_flags |= PKT_RX_VLAN_PKT;
|
||||
+ first_seg->ol_flags |= PKT_RX_VLAN_PKT;
|
||||
first_seg->vlan_tci = desc.w.vlan;
|
||||
|
||||
/* Prefetch data of first segment, if configured to do so. */
|
||||
--
|
||||
2.7.3
|
||||
|
|
@ -1,64 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc1 fix for LP: #1559981
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-03-20
|
||||
|
||||
From c6fb0e55585206a89f6db396de860e6e844cad06 Mon Sep 17 00:00:00 2001
|
||||
From: Dror Birkman <dror.birkman@lightcyber.com>
|
||||
Date: Thu, 28 Jan 2016 13:09:50 +0200
|
||||
Subject: [PATCH] pcap: fix captured frame length
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The actual captured length is header.caplen, whereas header.len is
|
||||
the original length on the wire.
|
||||
|
||||
Fixes: 4c173302c307 ("pcap: add new driver")
|
||||
|
||||
Signed-off-by: Dror Birkman <dror.birkman@lightcyber.com>
|
||||
Acked-by: Nicolás Pernas Maradei <nicolas.pernas.maradei@emutex.com>
|
||||
---
|
||||
drivers/net/pcap/rte_eth_pcap.c | 12 ++++++------
|
||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/pcap/rte_eth_pcap.c b/drivers/net/pcap/rte_eth_pcap.c
|
||||
index f9230eb..1d121f8 100644
|
||||
--- a/drivers/net/pcap/rte_eth_pcap.c
|
||||
+++ b/drivers/net/pcap/rte_eth_pcap.c
|
||||
@@ -220,25 +220,25 @@ eth_pcap_rx(void *queue,
|
||||
buf_size = (uint16_t)(rte_pktmbuf_data_room_size(pcap_q->mb_pool) -
|
||||
RTE_PKTMBUF_HEADROOM);
|
||||
|
||||
- if (header.len <= buf_size) {
|
||||
+ if (header.caplen <= buf_size) {
|
||||
/* pcap packet will fit in the mbuf, go ahead and copy */
|
||||
rte_memcpy(rte_pktmbuf_mtod(mbuf, void *), packet,
|
||||
- header.len);
|
||||
- mbuf->data_len = (uint16_t)header.len;
|
||||
+ header.caplen);
|
||||
+ mbuf->data_len = (uint16_t)header.caplen;
|
||||
} else {
|
||||
/* Try read jumbo frame into multi mbufs. */
|
||||
if (unlikely(eth_pcap_rx_jumbo(pcap_q->mb_pool,
|
||||
mbuf,
|
||||
packet,
|
||||
- header.len) == -1))
|
||||
+ header.caplen) == -1))
|
||||
break;
|
||||
}
|
||||
|
||||
- mbuf->pkt_len = (uint16_t)header.len;
|
||||
+ mbuf->pkt_len = (uint16_t)header.caplen;
|
||||
mbuf->port = pcap_q->in_port;
|
||||
bufs[num_rx] = mbuf;
|
||||
num_rx++;
|
||||
- rx_bytes += header.len;
|
||||
+ rx_bytes += header.caplen;
|
||||
}
|
||||
pcap_q->rx_pkts += num_rx;
|
||||
pcap_q->rx_bytes += rx_bytes;
|
||||
--
|
||||
2.7.3
|
||||
|
|
@ -1,56 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc1 fix for LP: #1559981
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-03-20
|
||||
|
||||
From 6e02723754fb2b341701ac438486b2dfea98b523 Mon Sep 17 00:00:00 2001
|
||||
From: Bernard Iremonger <bernard.iremonger@intel.com>
|
||||
Date: Wed, 10 Feb 2016 10:13:44 +0000
|
||||
Subject: [PATCH] bonding: fix detach of bonded device
|
||||
|
||||
Check that the bonded device has no slaves before detaching it.
|
||||
|
||||
Fixes: 8d30fe7fa737 ("bonding: support port hotplug")
|
||||
|
||||
Signed-off-by: Bernard Iremonger <bernard.iremonger@intel.com>
|
||||
Acked-by: Declan Doherty <declan.doherty@intel.com>
|
||||
---
|
||||
drivers/net/bonding/rte_eth_bond_api.c | 7 ++++++-
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/bonding/rte_eth_bond_api.c b/drivers/net/bonding/rte_eth_bond_api.c
|
||||
index 8a000c8..484a6f3 100644
|
||||
--- a/drivers/net/bonding/rte_eth_bond_api.c
|
||||
+++ b/drivers/net/bonding/rte_eth_bond_api.c
|
||||
@@ -1,7 +1,7 @@
|
||||
/*-
|
||||
* BSD LICENSE
|
||||
*
|
||||
- * Copyright(c) 2010-2015 Intel Corporation. All rights reserved.
|
||||
+ * Copyright(c) 2010-2016 Intel Corporation. All rights reserved.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -277,6 +277,7 @@ int
|
||||
rte_eth_bond_free(const char *name)
|
||||
{
|
||||
struct rte_eth_dev *eth_dev = NULL;
|
||||
+ struct bond_dev_private *internals;
|
||||
|
||||
/* now free all data allocation - for eth_dev structure,
|
||||
* dummy pci driver and internal (private) data
|
||||
@@ -287,6 +288,10 @@ rte_eth_bond_free(const char *name)
|
||||
if (eth_dev == NULL)
|
||||
return -ENODEV;
|
||||
|
||||
+ internals = eth_dev->data->dev_private;
|
||||
+ if (internals->slave_count != 0)
|
||||
+ return -EBUSY;
|
||||
+
|
||||
if (eth_dev->data->dev_started == 1) {
|
||||
bond_ethdev_stop(eth_dev);
|
||||
bond_ethdev_close(eth_dev);
|
||||
--
|
||||
2.7.3
|
||||
|
|
@ -1,150 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc1 fix for LP: #1559981
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-03-20
|
||||
|
||||
From df3e8ad73f4c92b4eb8f49ff33271d4a09e6a04a Mon Sep 17 00:00:00 2001
|
||||
From: Bernard Iremonger <bernard.iremonger@intel.com>
|
||||
Date: Wed, 10 Feb 2016 10:13:45 +0000
|
||||
Subject: [PATCH] bonding: fix detach of slave devices
|
||||
|
||||
Ensure that a bonded slave device is not detached,
|
||||
until it is removed from the bonded device.
|
||||
|
||||
Fixes: 2efb58cbab6e ("bond: new link bonding library")
|
||||
Fixes: a45b288ef21a ("bond: support link status polling")
|
||||
Fixes: 494adb7f63f2 ("ethdev: add device fields from PCI layer")
|
||||
Fixes: b1fb53a39d88 ("ethdev: remove some PCI specific handling")
|
||||
|
||||
Signed-off-by: Bernard Iremonger <bernard.iremonger@intel.com>
|
||||
Acked-by: Declan Doherty <declan.doherty@intel.com>
|
||||
---
|
||||
drivers/net/bonding/rte_eth_bond_api.c | 33 +++++++++++----------------------
|
||||
lib/librte_ether/rte_ethdev.c | 8 ++++++--
|
||||
lib/librte_ether/rte_ethdev.h | 2 ++
|
||||
3 files changed, 19 insertions(+), 24 deletions(-)
|
||||
|
||||
Index: dpdk/drivers/net/bonding/rte_eth_bond_api.c
|
||||
===================================================================
|
||||
--- dpdk.orig/drivers/net/bonding/rte_eth_bond_api.c
|
||||
+++ dpdk/drivers/net/bonding/rte_eth_bond_api.c
|
||||
@@ -314,38 +314,23 @@ __eth_bond_slave_add_lock_free(uint8_t b
|
||||
{
|
||||
struct rte_eth_dev *bonded_eth_dev, *slave_eth_dev;
|
||||
struct bond_dev_private *internals;
|
||||
- struct bond_dev_private *temp_internals;
|
||||
struct rte_eth_link link_props;
|
||||
struct rte_eth_dev_info dev_info;
|
||||
|
||||
- int i, j;
|
||||
-
|
||||
if (valid_slave_port_id(slave_port_id) != 0)
|
||||
return -1;
|
||||
|
||||
bonded_eth_dev = &rte_eth_devices[bonded_port_id];
|
||||
internals = bonded_eth_dev->data->dev_private;
|
||||
|
||||
- /* Verify that new slave device is not already a slave of another
|
||||
- * bonded device */
|
||||
- for (i = rte_eth_dev_count()-1; i >= 0; i--) {
|
||||
- if (check_for_bonded_ethdev(&rte_eth_devices[i]) == 0) {
|
||||
- temp_internals = rte_eth_devices[i].data->dev_private;
|
||||
-
|
||||
- for (j = 0; j < temp_internals->slave_count; j++) {
|
||||
- /* Device already a slave of a bonded device */
|
||||
- if (temp_internals->slaves[j].port_id == slave_port_id) {
|
||||
- RTE_BOND_LOG(ERR, "Slave port %d is already a slave",
|
||||
- slave_port_id);
|
||||
- return -1;
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
-
|
||||
slave_eth_dev = &rte_eth_devices[slave_port_id];
|
||||
+ if (slave_eth_dev->data->dev_flags & RTE_ETH_DEV_BONDED_SLAVE) {
|
||||
+ RTE_BOND_LOG(ERR, "Slave device is already a slave of a bonded device");
|
||||
+ return -1;
|
||||
+ }
|
||||
|
||||
/* Add slave details to bonded device */
|
||||
+ slave_eth_dev->data->dev_flags |= RTE_ETH_DEV_BONDED_SLAVE;
|
||||
slave_add(internals, slave_eth_dev);
|
||||
|
||||
rte_eth_dev_info_get(slave_port_id, &dev_info);
|
||||
@@ -385,6 +370,7 @@ __eth_bond_slave_add_lock_free(uint8_t b
|
||||
if (internals->link_props_set) {
|
||||
if (link_properties_valid(&(bonded_eth_dev->data->dev_link),
|
||||
&(slave_eth_dev->data->dev_link))) {
|
||||
+ slave_eth_dev->data->dev_flags &= (~RTE_ETH_DEV_BONDED_SLAVE);
|
||||
RTE_BOND_LOG(ERR,
|
||||
"Slave port %d link speed/duplex not supported",
|
||||
slave_port_id);
|
||||
@@ -416,6 +402,7 @@ __eth_bond_slave_add_lock_free(uint8_t b
|
||||
|
||||
if (bonded_eth_dev->data->dev_started) {
|
||||
if (slave_configure(bonded_eth_dev, slave_eth_dev) != 0) {
|
||||
+ slave_eth_dev->data->dev_flags &= (~RTE_ETH_DEV_BONDED_SLAVE);
|
||||
RTE_BOND_LOG(ERR, "rte_bond_slaves_configure: port=%d",
|
||||
slave_port_id);
|
||||
return -1;
|
||||
@@ -468,7 +455,7 @@ __eth_bond_slave_remove_lock_free(uint8_
|
||||
{
|
||||
struct rte_eth_dev *bonded_eth_dev;
|
||||
struct bond_dev_private *internals;
|
||||
-
|
||||
+ struct rte_eth_dev *slave_eth_dev;
|
||||
int i, slave_idx;
|
||||
|
||||
if (valid_slave_port_id(slave_port_id) != 0)
|
||||
@@ -508,7 +495,9 @@ __eth_bond_slave_remove_lock_free(uint8_
|
||||
mac_address_set(&rte_eth_devices[slave_port_id],
|
||||
&(internals->slaves[slave_idx].persisted_mac_addr));
|
||||
|
||||
- slave_remove(internals, &rte_eth_devices[slave_port_id]);
|
||||
+ slave_eth_dev = &rte_eth_devices[slave_port_id];
|
||||
+ slave_remove(internals, slave_eth_dev);
|
||||
+ slave_eth_dev->data->dev_flags &= (~RTE_ETH_DEV_BONDED_SLAVE);
|
||||
|
||||
/* first slave in the active list will be the primary by default,
|
||||
* otherwise use first device in list */
|
||||
Index: dpdk/lib/librte_ether/rte_ethdev.c
|
||||
===================================================================
|
||||
--- dpdk.orig/lib/librte_ether/rte_ethdev.c
|
||||
+++ dpdk/lib/librte_ether/rte_ethdev.c
|
||||
@@ -1,7 +1,7 @@
|
||||
/*-
|
||||
* BSD LICENSE
|
||||
*
|
||||
- * Copyright(c) 2010-2015 Intel Corporation. All rights reserved.
|
||||
+ * Copyright(c) 2010-2016 Intel Corporation. All rights reserved.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -498,7 +498,11 @@ rte_eth_dev_is_detachable(uint8_t port_i
|
||||
return -ENOTSUP;
|
||||
}
|
||||
dev_flags = rte_eth_devices[port_id].data->dev_flags;
|
||||
- return !(dev_flags & RTE_ETH_DEV_DETACHABLE);
|
||||
+ if ((dev_flags & RTE_ETH_DEV_DETACHABLE) &&
|
||||
+ (!(dev_flags & RTE_ETH_DEV_BONDED_SLAVE)))
|
||||
+ return 0;
|
||||
+ else
|
||||
+ return 1;
|
||||
}
|
||||
|
||||
/* attach the new physical device, then store port_id of the device */
|
||||
Index: dpdk/lib/librte_ether/rte_ethdev.h
|
||||
===================================================================
|
||||
--- dpdk.orig/lib/librte_ether/rte_ethdev.h
|
||||
+++ dpdk/lib/librte_ether/rte_ethdev.h
|
||||
@@ -1616,6 +1616,8 @@ struct rte_eth_dev_data {
|
||||
#define RTE_ETH_DEV_DETACHABLE 0x0001
|
||||
/** Device supports link state interrupt */
|
||||
#define RTE_ETH_DEV_INTR_LSC 0x0002
|
||||
+/** Device is a bonded slave */
|
||||
+#define RTE_ETH_DEV_BONDED_SLAVE 0x0004
|
||||
|
||||
/**
|
||||
* @internal
|
|
@ -1,40 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc1 fix for LP: #1559981
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-03-20
|
||||
|
||||
From 786c990a11e6e6592dfdee02840877070aa3a79a Mon Sep 17 00:00:00 2001
|
||||
From: Eric Kinzie <ekinzie@brocade.com>
|
||||
Date: Tue, 1 Mar 2016 09:31:59 -0800
|
||||
Subject: [PATCH] bonding: copy entire config structure in mode 4
|
||||
|
||||
Copy all needed fields from the mode8023ad_private structure in
|
||||
bond_mode_8023ad_conf_get(). This help ensure that a subsequent call
|
||||
to rte_eth_bond_8023ad_setup() is not passed uninitialized data that
|
||||
would result in either incorrect behavior or a failed sanity check.
|
||||
|
||||
Fixes: 46fb43683679 ("bond: add mode 4")
|
||||
|
||||
Signed-off-by: Eric Kinzie <ekinzie@brocade.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
Acked-by: Declan Doherty <declan.doherty@intel.com>
|
||||
---
|
||||
drivers/net/bonding/rte_eth_bond_8023ad.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/net/bonding/rte_eth_bond_8023ad.c b/drivers/net/bonding/rte_eth_bond_8023ad.c
|
||||
index b3b30f6..1b7e93a 100644
|
||||
--- a/drivers/net/bonding/rte_eth_bond_8023ad.c
|
||||
+++ b/drivers/net/bonding/rte_eth_bond_8023ad.c
|
||||
@@ -1019,6 +1019,7 @@ bond_mode_8023ad_conf_get(struct rte_eth_dev *dev,
|
||||
conf->aggregate_wait_timeout_ms = mode4->aggregate_wait_timeout / ms_ticks;
|
||||
conf->tx_period_ms = mode4->tx_period_timeout / ms_ticks;
|
||||
conf->update_timeout_ms = mode4->update_timeout_us / 1000;
|
||||
+ conf->rx_marker_period_ms = mode4->rx_marker_timeout / ms_ticks;
|
||||
}
|
||||
|
||||
void
|
||||
--
|
||||
2.7.3
|
||||
|
|
@ -1,59 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc1 fix for LP: #1559981
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-03-20
|
||||
|
||||
From 6698820b5f6d955b6af2b916e1074db236d4f5a2 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Kinzie <ekinzie@brocade.com>
|
||||
Date: Tue, 1 Mar 2016 09:32:00 -0800
|
||||
Subject: [PATCH] bonding: do not ignore multicast in mode 4
|
||||
|
||||
The bonding PMD in mode 4 puts all enslaved interfaces into promiscuous
|
||||
mode in order to receive LACPDUs and must filter unwanted packets
|
||||
after the traffic has been "collected". Allow broadcast and multicast
|
||||
through so that ARP and IPv6 neighbor discovery continue to work.
|
||||
|
||||
Fixes: 46fb43683679 ("bond: add mode 4")
|
||||
|
||||
Signed-off-by: Eric Kinzie <ekinzie@brocade.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
Acked-by: Declan Doherty <declan.doherty@intel.com>
|
||||
---
|
||||
app/test/test_link_bonding_mode4.c | 7 +++++--
|
||||
drivers/net/bonding/rte_eth_bond_pmd.c | 1 +
|
||||
2 files changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/app/test/test_link_bonding_mode4.c b/app/test/test_link_bonding_mode4.c
|
||||
index 713368d..31640cd 100644
|
||||
--- a/app/test/test_link_bonding_mode4.c
|
||||
+++ b/app/test/test_link_bonding_mode4.c
|
||||
@@ -747,8 +747,11 @@ test_mode4_rx(void)
|
||||
rte_eth_macaddr_get(test_params.bonded_port_id, &bonded_mac);
|
||||
ether_addr_copy(&bonded_mac, &dst_mac);
|
||||
|
||||
- /* Assert that dst address is not bonding address */
|
||||
- dst_mac.addr_bytes[0]++;
|
||||
+ /* Assert that dst address is not bonding address. Do not set the
|
||||
+ * least significant bit of the zero byte as this would create a
|
||||
+ * multicast address.
|
||||
+ */
|
||||
+ dst_mac.addr_bytes[0] += 2;
|
||||
|
||||
/* First try with promiscuous mode enabled.
|
||||
* Add 2 packets to each slave. First with bonding MAC address, second with
|
||||
diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c
|
||||
index b63c886..011150a 100644
|
||||
--- a/drivers/net/bonding/rte_eth_bond_pmd.c
|
||||
+++ b/drivers/net/bonding/rte_eth_bond_pmd.c
|
||||
@@ -171,6 +171,7 @@ bond_ethdev_rx_burst_8023ad(void *queue, struct rte_mbuf **bufs,
|
||||
* mode and packet address does not match. */
|
||||
if (unlikely(hdr->ether_type == ether_type_slow_be ||
|
||||
!collecting || (!promisc &&
|
||||
+ !is_multicast_ether_addr(&hdr->d_addr) &&
|
||||
!is_same_ether_addr(&bond_mac, &hdr->d_addr)))) {
|
||||
|
||||
if (hdr->ether_type == ether_type_slow_be) {
|
||||
--
|
||||
2.7.3
|
||||
|
|
@ -1,49 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc1 fix for LP: #1559981
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-03-20
|
||||
|
||||
From 8997a10bfcad789d000debaac4cd85cd3db57997 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Kinzie <ekinzie@brocade.com>
|
||||
Date: Tue, 1 Mar 2016 09:32:01 -0800
|
||||
Subject: [PATCH] bonding: fix active slaves with no primary
|
||||
|
||||
If the link state of a slave is "up" when added, it is added to the list
|
||||
of active slaves but, even if it is the only slave, is not selected as
|
||||
the primary interface. Generally, handling of link state interrupts
|
||||
selects an interface to be primary, but only if the active count is zero.
|
||||
This change avoids the situation where there are active slaves but
|
||||
no primary.
|
||||
|
||||
Fixes: 2efb58cbab6e ("bond: new link bonding library")
|
||||
|
||||
Signed-off-by: Eric Kinzie <ekinzie@brocade.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
Acked-by: Declan Doherty <declan.doherty@intel.com>
|
||||
---
|
||||
drivers/net/bonding/rte_eth_bond_api.c | 7 ++++++-
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/bonding/rte_eth_bond_api.c b/drivers/net/bonding/rte_eth_bond_api.c
|
||||
index a0995ec..5292ae1 100644
|
||||
--- a/drivers/net/bonding/rte_eth_bond_api.c
|
||||
+++ b/drivers/net/bonding/rte_eth_bond_api.c
|
||||
@@ -419,8 +419,13 @@ __eth_bond_slave_add_lock_free(uint8_t bonded_port_id, uint8_t slave_port_id)
|
||||
if (bonded_eth_dev->data->dev_started) {
|
||||
rte_eth_link_get_nowait(slave_port_id, &link_props);
|
||||
|
||||
- if (link_props.link_status == 1)
|
||||
+ if (link_props.link_status == 1) {
|
||||
+ if (internals->active_slave_count == 0 &&
|
||||
+ !internals->user_defined_primary_port)
|
||||
+ bond_ethdev_primary_set(internals,
|
||||
+ slave_port_id);
|
||||
activate_slave(bonded_eth_dev, slave_port_id);
|
||||
+ }
|
||||
}
|
||||
return 0;
|
||||
|
||||
--
|
||||
2.7.3
|
||||
|
|
@ -1,47 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc1 fix for LP: #1559981
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-03-20
|
||||
|
||||
From 7a7122edf1c8d63e516d1b2c2eff6fa9b54e0f82 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Kinzie <ekinzie@brocade.com>
|
||||
Date: Tue, 1 Mar 2016 09:32:02 -0800
|
||||
Subject: [PATCH] bonding: do not activate slave twice
|
||||
|
||||
The current code for detecting link during slave addition can cause a
|
||||
slave interface to be activated twice -- once during slave_configure()
|
||||
and again at the end of __eth_bond_slave_add_lock_free(). This will
|
||||
either cause the active slave count to be incorrect or will cause the
|
||||
802.3ad activation function to panic. Ensure that the interface is not
|
||||
activated more than once.
|
||||
|
||||
Fixes: 46fb43683679 ("bond: add mode 4")
|
||||
|
||||
Signed-off-by: Eric Kinzie <ekinzie@brocade.com>
|
||||
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
|
||||
Acked-by: Declan Doherty <declan.doherty@intel.com>
|
||||
---
|
||||
drivers/net/bonding/rte_eth_bond_api.c | 6 +++++-
|
||||
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/bonding/rte_eth_bond_api.c b/drivers/net/bonding/rte_eth_bond_api.c
|
||||
index 5292ae1..c6c0ed8 100644
|
||||
--- a/drivers/net/bonding/rte_eth_bond_api.c
|
||||
+++ b/drivers/net/bonding/rte_eth_bond_api.c
|
||||
@@ -424,7 +424,11 @@ __eth_bond_slave_add_lock_free(uint8_t bonded_port_id, uint8_t slave_port_id)
|
||||
!internals->user_defined_primary_port)
|
||||
bond_ethdev_primary_set(internals,
|
||||
slave_port_id);
|
||||
- activate_slave(bonded_eth_dev, slave_port_id);
|
||||
+
|
||||
+ if (find_slave_by_id(internals->active_slaves,
|
||||
+ internals->active_slave_count,
|
||||
+ slave_port_id) == internals->active_slave_count)
|
||||
+ activate_slave(bonded_eth_dev, slave_port_id);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
--
|
||||
2.7.3
|
||||
|
|
@ -1,42 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc1 fix for LP: #1559981
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-03-20
|
||||
|
||||
From 2186fff3675d4e774cecc8f918c05063e0367d28 Mon Sep 17 00:00:00 2001
|
||||
From: Bernard Iremonger <bernard.iremonger@intel.com>
|
||||
Date: Mon, 7 Mar 2016 11:40:40 +0000
|
||||
Subject: [PATCH] bonding: fix crash when no slave device
|
||||
|
||||
If a bonded device is created when there are no slave devices
|
||||
there is a loop in bond_ethdev_promiscuous_enable() which results
|
||||
in a segmentation fault.
|
||||
|
||||
The solution is to initialise the current_primary_port to an
|
||||
invalid port value when the bonded port is created.
|
||||
|
||||
Fixes: 2efb58cbab6e ("bond: new link bonding library")
|
||||
|
||||
Signed-off-by: Bernard Iremonger <bernard.iremonger@intel.com>
|
||||
Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
|
||||
---
|
||||
drivers/net/bonding/rte_eth_bond_api.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/bonding/rte_eth_bond_api.c b/drivers/net/bonding/rte_eth_bond_api.c
|
||||
index c6c0ed8..3fca764 100644
|
||||
--- a/drivers/net/bonding/rte_eth_bond_api.c
|
||||
+++ b/drivers/net/bonding/rte_eth_bond_api.c
|
||||
@@ -231,7 +231,7 @@ rte_eth_bond_create(const char *name, uint8_t mode, uint8_t socket_id)
|
||||
|
||||
internals->port_id = eth_dev->data->port_id;
|
||||
internals->mode = BONDING_MODE_INVALID;
|
||||
- internals->current_primary_port = 0;
|
||||
+ internals->current_primary_port = RTE_MAX_ETHPORTS + 1;
|
||||
internals->balance_xmit_policy = BALANCE_XMIT_POLICY_LAYER2;
|
||||
internals->xmit_hash = xmit_l2_hash;
|
||||
internals->user_defined_mac = 0;
|
||||
--
|
||||
2.7.3
|
||||
|
|
@ -1,53 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc1 fix for LP: #1559981
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-03-23
|
||||
|
||||
From c680a4a88c4312068f60937a7ba51eac8211c9a6 Mon Sep 17 00:00:00 2001
|
||||
From: Bernard Iremonger <bernard.iremonger@intel.com>
|
||||
Date: Wed, 23 Dec 2015 09:45:19 +0000
|
||||
Subject: [PATCH] virtio: fix crash in statistics functions
|
||||
|
||||
This initialisation of nb_rx_queues and nb_tx_queues has been removed
|
||||
from eth_virtio_dev_init.
|
||||
|
||||
The nb_rx_queues and nb_tx_queues were being initialised in
|
||||
eth_virtio_dev_init before the tx_queues and rx_queues arrays were
|
||||
allocated.
|
||||
|
||||
The arrays are allocated when the ethdev port is configured and the
|
||||
nb_tx_queues and nb_rx_queues are initialised.
|
||||
|
||||
If any of the following functions were called before the ethdev
|
||||
port was configured there was a segmentation fault because
|
||||
rx_queues and tx_queues were NULL:
|
||||
|
||||
rte_eth_stats_get
|
||||
rte_eth_stats_reset
|
||||
rte_eth_xstats_get
|
||||
rte_eth_xstats_reset
|
||||
|
||||
Fixes: 823ad647950a ("virtio: support multiple queues")
|
||||
|
||||
Signed-off-by: Bernard Iremonger <bernard.iremonger@intel.com>
|
||||
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
|
||||
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
|
||||
---
|
||||
drivers/net/virtio/virtio_ethdev.c | 3 ---
|
||||
1 file changed, 3 deletions(-)
|
||||
|
||||
Index: dpdk/drivers/net/virtio/virtio_ethdev.c
|
||||
===================================================================
|
||||
--- dpdk.orig/drivers/net/virtio/virtio_ethdev.c
|
||||
+++ dpdk/drivers/net/virtio/virtio_ethdev.c
|
||||
@@ -1378,9 +1378,6 @@ eth_virtio_dev_init(struct rte_eth_dev *
|
||||
hw->max_tx_queues = 1;
|
||||
}
|
||||
|
||||
- eth_dev->data->nb_rx_queues = hw->max_rx_queues;
|
||||
- eth_dev->data->nb_tx_queues = hw->max_tx_queues;
|
||||
-
|
||||
PMD_INIT_LOG(DEBUG, "hw->max_rx_queues=%d hw->max_tx_queues=%d",
|
||||
hw->max_rx_queues, hw->max_tx_queues);
|
||||
PMD_INIT_LOG(DEBUG, "port %d vendorID=0x%x deviceID=0x%x",
|
|
@ -1,37 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc1 fix for LP: #1559981
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-03-23
|
||||
|
||||
From 3b1e3e4e362453df8cecbc6d481444be8b84326e Mon Sep 17 00:00:00 2001
|
||||
From: Huawei Xie <huawei.xie@intel.com>
|
||||
Date: Fri, 11 Dec 2015 00:07:32 +0800
|
||||
Subject: [PATCH] virtio: fix descriptors pointing to the same buffer
|
||||
|
||||
The virtio_net_hdr desc all pointed to the same buffer. It doesn't cause
|
||||
issue because in the simple TX mode we don't use the header. This patch
|
||||
makes the header desc point to different buffer.
|
||||
|
||||
Fixes: b4ae9c505f2e ("virtio: optimize ring layout")
|
||||
|
||||
Signed-off-by: Huawei Xie <huawei.xie@intel.com>
|
||||
Acked-by: Jianfeng Tan <jianfeng.tan@intel.com>
|
||||
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
|
||||
---
|
||||
drivers/net/virtio/virtio_rxtx.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: dpdk/drivers/net/virtio/virtio_rxtx.c
|
||||
===================================================================
|
||||
--- dpdk.orig/drivers/net/virtio/virtio_rxtx.c
|
||||
+++ dpdk/drivers/net/virtio/virtio_rxtx.c
|
||||
@@ -352,7 +352,7 @@ virtio_dev_vring_start(struct virtqueue
|
||||
vq->vq_ring.desc[i + mid_idx].next = i;
|
||||
vq->vq_ring.desc[i + mid_idx].addr =
|
||||
vq->virtio_net_hdr_mem +
|
||||
- mid_idx * vq->hw->vtnet_hdr_size;
|
||||
+ i * vq->hw->vtnet_hdr_size;
|
||||
vq->vq_ring.desc[i + mid_idx].len =
|
||||
vq->hw->vtnet_hdr_size;
|
||||
vq->vq_ring.desc[i + mid_idx].flags =
|
|
@ -1,72 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc1 fix for LP: #1559912
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-03-23
|
||||
|
||||
From 9a0615af7746485d73d10561cc0743bc2fcd4bf7 Mon Sep 17 00:00:00 2001
|
||||
From: Jianfeng Tan <jianfeng.tan@intel.com>
|
||||
Date: Mon, 11 Jan 2016 14:16:13 +0800
|
||||
Subject: [PATCH] virtio: fix restart
|
||||
|
||||
Fix the issue that virtio device cannot be started after stopped.
|
||||
|
||||
The field, hw->started, should be changed by virtio_dev_start/stop instead
|
||||
of virtio_dev_close.
|
||||
|
||||
Fixes: a85786dc816f ("virtio: fix states handling during initialization")
|
||||
|
||||
Reported-by: Pavel Fedin <p.fedin@samsung.com>
|
||||
Signed-off-by: Jianfeng Tan <jianfeng.tan@intel.com>
|
||||
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
|
||||
Tested-by: Pavel Fedin <p.fedin@samsung.com>
|
||||
---
|
||||
drivers/net/virtio/virtio_ethdev.c | 14 +++++++++-----
|
||||
1 file changed, 9 insertions(+), 5 deletions(-)
|
||||
|
||||
Index: dpdk/drivers/net/virtio/virtio_ethdev.c
|
||||
===================================================================
|
||||
--- dpdk.orig/drivers/net/virtio/virtio_ethdev.c
|
||||
+++ dpdk/drivers/net/virtio/virtio_ethdev.c
|
||||
@@ -490,11 +490,13 @@ virtio_dev_close(struct rte_eth_dev *dev
|
||||
|
||||
PMD_INIT_LOG(DEBUG, "virtio_dev_close");
|
||||
|
||||
+ if (hw->started == 1)
|
||||
+ virtio_dev_stop(dev);
|
||||
+
|
||||
/* reset the NIC */
|
||||
if (pci_dev->driver->drv_flags & RTE_PCI_DRV_INTR_LSC)
|
||||
vtpci_irq_config(hw, VIRTIO_MSI_NO_VECTOR);
|
||||
vtpci_reset(hw);
|
||||
- hw->started = 0;
|
||||
virtio_dev_free_mbufs(dev);
|
||||
virtio_free_queues(dev);
|
||||
}
|
||||
@@ -1405,10 +1407,9 @@ eth_virtio_dev_uninit(struct rte_eth_dev
|
||||
if (rte_eal_process_type() == RTE_PROC_SECONDARY)
|
||||
return -EPERM;
|
||||
|
||||
- if (hw->started == 1) {
|
||||
- virtio_dev_stop(eth_dev);
|
||||
- virtio_dev_close(eth_dev);
|
||||
- }
|
||||
+ /* Close it anyway since there's no way to know if closed */
|
||||
+ virtio_dev_close(eth_dev);
|
||||
+
|
||||
pci_dev = eth_dev->pci_dev;
|
||||
|
||||
eth_dev->dev_ops = NULL;
|
||||
@@ -1609,9 +1610,12 @@ static void
|
||||
virtio_dev_stop(struct rte_eth_dev *dev)
|
||||
{
|
||||
struct rte_eth_link link;
|
||||
+ struct virtio_hw *hw = dev->data->dev_private;
|
||||
|
||||
PMD_INIT_LOG(DEBUG, "stop");
|
||||
|
||||
+ hw->started = 0;
|
||||
+
|
||||
if (dev->data->dev_conf.intr_conf.lsc)
|
||||
rte_intr_disable(&dev->pci_dev->intr_handle);
|
||||
|
|
@ -1,79 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc fix for LP: #1568838
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-04-11
|
||||
|
||||
From f82f705b635d31a63446a16bc4526dbebf293c5a Mon Sep 17 00:00:00 2001
|
||||
From: Olivier Matz <olivier.matz@6wind.com>
|
||||
Date: Wed, 6 Apr 2016 15:27:58 +0200
|
||||
Subject: [PATCH] lpm: fix allocation of an existing object
|
||||
|
||||
Change rte_lpm*_create() functions to return NULL and set rte_errno to
|
||||
EEXIST when the object name already exists. This is the behavior
|
||||
described in the API documentation in the header file.
|
||||
|
||||
These functions were returning a pointer to the existing object in that
|
||||
case, but it is a problem as the caller did not know if the object had
|
||||
to be freed or not.
|
||||
|
||||
Doing this change also makes the lpm API more consistent with the other
|
||||
APIs (mempool, rings, ...).
|
||||
|
||||
Fixes: 916e4f4f4e ("memory: fix for multi process support")
|
||||
|
||||
Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
|
||||
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
|
||||
---
|
||||
app/test/test_lpm6.c | 2 +-
|
||||
lib/librte_lpm/rte_lpm.c | 10 ++++++++--
|
||||
lib/librte_lpm/rte_lpm6.c | 5 ++++-
|
||||
4 files changed, 22 insertions(+), 4 deletions(-)
|
||||
|
||||
Index: dpdk/app/test/test_lpm6.c
|
||||
===================================================================
|
||||
--- dpdk.orig/app/test/test_lpm6.c
|
||||
+++ dpdk/app/test/test_lpm6.c
|
||||
@@ -222,7 +222,7 @@ test1(void)
|
||||
|
||||
/* rte_lpm6_create: lpm name == LPM2 */
|
||||
lpm3 = rte_lpm6_create("LPM1", SOCKET_ID_ANY, &config);
|
||||
- TEST_LPM_ASSERT(lpm3 == lpm1);
|
||||
+ TEST_LPM_ASSERT(lpm3 == NULL);
|
||||
|
||||
rte_lpm6_free(lpm1);
|
||||
rte_lpm6_free(lpm2);
|
||||
Index: dpdk/lib/librte_lpm/rte_lpm.c
|
||||
===================================================================
|
||||
--- dpdk.orig/lib/librte_lpm/rte_lpm.c
|
||||
+++ dpdk/lib/librte_lpm/rte_lpm.c
|
||||
@@ -181,8 +181,11 @@ rte_lpm_create(const char *name, int soc
|
||||
if (strncmp(name, lpm->name, RTE_LPM_NAMESIZE) == 0)
|
||||
break;
|
||||
}
|
||||
- if (te != NULL)
|
||||
+ lpm = NULL;
|
||||
+ if (te != NULL) {
|
||||
+ rte_errno = EEXIST;
|
||||
goto exit;
|
||||
+ }
|
||||
|
||||
/* allocate tailq entry */
|
||||
te = rte_zmalloc("LPM_TAILQ_ENTRY", sizeof(*te), 0);
|
||||
Index: dpdk/lib/librte_lpm/rte_lpm6.c
|
||||
===================================================================
|
||||
--- dpdk.orig/lib/librte_lpm/rte_lpm6.c
|
||||
+++ dpdk/lib/librte_lpm/rte_lpm6.c
|
||||
@@ -182,8 +182,11 @@ rte_lpm6_create(const char *name, int so
|
||||
if (strncmp(name, lpm->name, RTE_LPM6_NAMESIZE) == 0)
|
||||
break;
|
||||
}
|
||||
- if (te != NULL)
|
||||
+ lpm = NULL;
|
||||
+ if (te != NULL) {
|
||||
+ rte_errno = EEXIST;
|
||||
goto exit;
|
||||
+ }
|
||||
|
||||
/* allocate tailq entry */
|
||||
te = rte_zmalloc("LPM6_TAILQ_ENTRY", sizeof(*te), 0);
|
|
@ -1,260 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc fix for LP: #1568838
|
||||
|
||||
Minimal modification to adapt to the not yet existing unified RTE_ARCH_X86
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-04-11
|
||||
|
||||
From f9bd3342114a9db436f71b12ac424aff224482cb Mon Sep 17 00:00:00 2001
|
||||
From: Pablo de Lara <pablo.de.lara.guarch@intel.com>
|
||||
Date: Fri, 1 Apr 2016 16:03:49 +0100
|
||||
Subject: [PATCH] hash: fix multi-process support
|
||||
|
||||
Hash library used a function pointer to choose a different
|
||||
key compare function, depending on the key size.
|
||||
As a result, multiple processes could not use the same hash table,
|
||||
as the function addresses vary from one process to another.
|
||||
|
||||
Instead, a jump table is used, so each process has its own
|
||||
function addresses, accessing this table with an index stored
|
||||
in the hash table (note that using a custom key compare function
|
||||
is not supported in multi-process mode).
|
||||
|
||||
Fixes: 48a399119619 ("hash: replace with cuckoo hash implementation")
|
||||
|
||||
Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
|
||||
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
|
||||
---
|
||||
doc/guides/prog_guide/hash_lib.rst | 8 +++
|
||||
doc/guides/rel_notes/release_16_04.rst | 8 +++
|
||||
lib/librte_hash/rte_cuckoo_hash.c | 107 +++++++++++++++++++++++++++------
|
||||
3 files changed, 104 insertions(+), 19 deletions(-)
|
||||
|
||||
Index: dpdk/doc/guides/prog_guide/hash_lib.rst
|
||||
===================================================================
|
||||
--- dpdk.orig/doc/guides/prog_guide/hash_lib.rst
|
||||
+++ dpdk/doc/guides/prog_guide/hash_lib.rst
|
||||
@@ -87,6 +87,14 @@ or stored in the hash table itself.
|
||||
The example hash tables in the L2/L3 Forwarding sample applications defines which port to forward a packet to based on a packet flow identified by the five-tuple lookup.
|
||||
However, this table could also be used for more sophisticated features and provide many other functions and actions that could be performed on the packets and flows.
|
||||
|
||||
+Multi-process support
|
||||
+---------------------
|
||||
+
|
||||
+The hash library can be used in a multi-process environment, minding that only lookups are thread-safe.
|
||||
+The only function that can only be used in single-process mode is rte_hash_set_cmp_func(), which sets up
|
||||
+a custom compare function, which is assigned to a function pointer (therefore, it is not supported in
|
||||
+multi-process mode).
|
||||
+
|
||||
Implementation Details
|
||||
----------------------
|
||||
|
||||
Index: dpdk/lib/librte_hash/rte_cuckoo_hash.c
|
||||
===================================================================
|
||||
--- dpdk.orig/lib/librte_hash/rte_cuckoo_hash.c
|
||||
+++ dpdk/lib/librte_hash/rte_cuckoo_hash.c
|
||||
@@ -102,6 +102,64 @@ EAL_REGISTER_TAILQ(rte_hash_tailq)
|
||||
|
||||
#define LCORE_CACHE_SIZE 8
|
||||
|
||||
+#if defined(RTE_ARCH_X86_64) || defined(RTE_ARCH_I686) ||\
|
||||
+ defined(RTE_ARCH_X86_X32) || defined(RTE_ARCH_ARM64)
|
||||
+/*
|
||||
+ * All different options to select a key compare function,
|
||||
+ * based on the key size and custom function.
|
||||
+ */
|
||||
+enum cmp_jump_table_case {
|
||||
+ KEY_CUSTOM = 0,
|
||||
+ KEY_16_BYTES,
|
||||
+ KEY_32_BYTES,
|
||||
+ KEY_48_BYTES,
|
||||
+ KEY_64_BYTES,
|
||||
+ KEY_80_BYTES,
|
||||
+ KEY_96_BYTES,
|
||||
+ KEY_112_BYTES,
|
||||
+ KEY_128_BYTES,
|
||||
+ KEY_OTHER_BYTES,
|
||||
+ NUM_KEY_CMP_CASES,
|
||||
+};
|
||||
+
|
||||
+/*
|
||||
+ * Table storing all different key compare functions
|
||||
+ * (multi-process supported)
|
||||
+ */
|
||||
+const rte_hash_cmp_eq_t cmp_jump_table[NUM_KEY_CMP_CASES] = {
|
||||
+ NULL,
|
||||
+ rte_hash_k16_cmp_eq,
|
||||
+ rte_hash_k32_cmp_eq,
|
||||
+ rte_hash_k48_cmp_eq,
|
||||
+ rte_hash_k64_cmp_eq,
|
||||
+ rte_hash_k80_cmp_eq,
|
||||
+ rte_hash_k96_cmp_eq,
|
||||
+ rte_hash_k112_cmp_eq,
|
||||
+ rte_hash_k128_cmp_eq,
|
||||
+ memcmp
|
||||
+};
|
||||
+#else
|
||||
+/*
|
||||
+ * All different options to select a key compare function,
|
||||
+ * based on the key size and custom function.
|
||||
+ */
|
||||
+enum cmp_jump_table_case {
|
||||
+ KEY_CUSTOM = 0,
|
||||
+ KEY_OTHER_BYTES,
|
||||
+ NUM_KEY_CMP_CASES,
|
||||
+};
|
||||
+
|
||||
+/*
|
||||
+ * Table storing all different key compare functions
|
||||
+ * (multi-process supported)
|
||||
+ */
|
||||
+const rte_hash_cmp_eq_t cmp_jump_table[NUM_KEY_CMP_CASES] = {
|
||||
+ NULL,
|
||||
+ memcmp
|
||||
+};
|
||||
+
|
||||
+#endif
|
||||
+
|
||||
struct lcore_cache {
|
||||
unsigned len; /**< Cache len */
|
||||
void *objs[LCORE_CACHE_SIZE]; /**< Cache objects */
|
||||
@@ -115,7 +173,10 @@ struct rte_hash {
|
||||
uint32_t key_len; /**< Length of hash key. */
|
||||
rte_hash_function hash_func; /**< Function used to calculate hash. */
|
||||
uint32_t hash_func_init_val; /**< Init value used by hash_func. */
|
||||
- rte_hash_cmp_eq_t rte_hash_cmp_eq; /**< Function used to compare keys. */
|
||||
+ rte_hash_cmp_eq_t rte_hash_custom_cmp_eq;
|
||||
+ /**< Custom function used to compare keys. */
|
||||
+ enum cmp_jump_table_case cmp_jump_table_idx;
|
||||
+ /**< Indicates which compare function to use. */
|
||||
uint32_t bucket_bitmask; /**< Bitmask for getting bucket index
|
||||
from hash signature. */
|
||||
uint32_t key_entry_size; /**< Size of each key entry. */
|
||||
@@ -187,7 +248,16 @@ rte_hash_find_existing(const char *name)
|
||||
|
||||
void rte_hash_set_cmp_func(struct rte_hash *h, rte_hash_cmp_eq_t func)
|
||||
{
|
||||
- h->rte_hash_cmp_eq = func;
|
||||
+ h->rte_hash_custom_cmp_eq = func;
|
||||
+}
|
||||
+
|
||||
+static inline int
|
||||
+rte_hash_cmp_eq(const void *key1, const void *key2, const struct rte_hash *h)
|
||||
+{
|
||||
+ if (h->cmp_jump_table_idx == KEY_CUSTOM)
|
||||
+ return h->rte_hash_custom_cmp_eq(key1, key2, h->key_len);
|
||||
+ else
|
||||
+ return cmp_jump_table[h->cmp_jump_table_idx](key1, key2, h->key_len);
|
||||
}
|
||||
|
||||
struct rte_hash *
|
||||
@@ -292,35 +362,35 @@ rte_hash_create(const struct rte_hash_pa
|
||||
/* Select function to compare keys */
|
||||
switch (params->key_len) {
|
||||
case 16:
|
||||
- h->rte_hash_cmp_eq = rte_hash_k16_cmp_eq;
|
||||
+ h->cmp_jump_table_idx = KEY_16_BYTES;
|
||||
break;
|
||||
case 32:
|
||||
- h->rte_hash_cmp_eq = rte_hash_k32_cmp_eq;
|
||||
+ h->cmp_jump_table_idx = KEY_32_BYTES;
|
||||
break;
|
||||
case 48:
|
||||
- h->rte_hash_cmp_eq = rte_hash_k48_cmp_eq;
|
||||
+ h->cmp_jump_table_idx = KEY_48_BYTES;
|
||||
break;
|
||||
case 64:
|
||||
- h->rte_hash_cmp_eq = rte_hash_k64_cmp_eq;
|
||||
+ h->cmp_jump_table_idx = KEY_64_BYTES;
|
||||
break;
|
||||
case 80:
|
||||
- h->rte_hash_cmp_eq = rte_hash_k80_cmp_eq;
|
||||
+ h->cmp_jump_table_idx = KEY_80_BYTES;
|
||||
break;
|
||||
case 96:
|
||||
- h->rte_hash_cmp_eq = rte_hash_k96_cmp_eq;
|
||||
+ h->cmp_jump_table_idx = KEY_96_BYTES;
|
||||
break;
|
||||
case 112:
|
||||
- h->rte_hash_cmp_eq = rte_hash_k112_cmp_eq;
|
||||
+ h->cmp_jump_table_idx = KEY_112_BYTES;
|
||||
break;
|
||||
case 128:
|
||||
- h->rte_hash_cmp_eq = rte_hash_k128_cmp_eq;
|
||||
+ h->cmp_jump_table_idx = KEY_128_BYTES;
|
||||
break;
|
||||
default:
|
||||
/* If key is not multiple of 16, use generic memcmp */
|
||||
- h->rte_hash_cmp_eq = memcmp;
|
||||
+ h->cmp_jump_table_idx = KEY_OTHER_BYTES;
|
||||
}
|
||||
#else
|
||||
- h->rte_hash_cmp_eq = memcmp;
|
||||
+ h->cmp_jump_table_idx = KEY_OTHER_BYTES;
|
||||
#endif
|
||||
|
||||
snprintf(ring_name, sizeof(ring_name), "HT_%s", params->name);
|
||||
@@ -594,7 +664,7 @@ __rte_hash_add_key_with_hash(const struc
|
||||
prim_bkt->signatures[i].alt == alt_hash) {
|
||||
k = (struct rte_hash_key *) ((char *)keys +
|
||||
prim_bkt->key_idx[i] * h->key_entry_size);
|
||||
- if (h->rte_hash_cmp_eq(key, k->key, h->key_len) == 0) {
|
||||
+ if (rte_hash_cmp_eq(key, k->key, h) == 0) {
|
||||
/* Enqueue index of free slot back in the ring. */
|
||||
enqueue_slot_back(h, cached_free_slots, slot_id);
|
||||
/* Update data */
|
||||
@@ -614,7 +684,7 @@ __rte_hash_add_key_with_hash(const struc
|
||||
sec_bkt->signatures[i].current == alt_hash) {
|
||||
k = (struct rte_hash_key *) ((char *)keys +
|
||||
sec_bkt->key_idx[i] * h->key_entry_size);
|
||||
- if (h->rte_hash_cmp_eq(key, k->key, h->key_len) == 0) {
|
||||
+ if (rte_hash_cmp_eq(key, k->key, h) == 0) {
|
||||
/* Enqueue index of free slot back in the ring. */
|
||||
enqueue_slot_back(h, cached_free_slots, slot_id);
|
||||
/* Update data */
|
||||
@@ -725,7 +795,7 @@ __rte_hash_lookup_with_hash(const struct
|
||||
bkt->signatures[i].sig != NULL_SIGNATURE) {
|
||||
k = (struct rte_hash_key *) ((char *)keys +
|
||||
bkt->key_idx[i] * h->key_entry_size);
|
||||
- if (h->rte_hash_cmp_eq(key, k->key, h->key_len) == 0) {
|
||||
+ if (rte_hash_cmp_eq(key, k->key, h) == 0) {
|
||||
if (data != NULL)
|
||||
*data = k->pdata;
|
||||
/*
|
||||
@@ -748,7 +818,7 @@ __rte_hash_lookup_with_hash(const struct
|
||||
bkt->signatures[i].alt == sig) {
|
||||
k = (struct rte_hash_key *) ((char *)keys +
|
||||
bkt->key_idx[i] * h->key_entry_size);
|
||||
- if (h->rte_hash_cmp_eq(key, k->key, h->key_len) == 0) {
|
||||
+ if (rte_hash_cmp_eq(key, k->key, h) == 0) {
|
||||
if (data != NULL)
|
||||
*data = k->pdata;
|
||||
/*
|
||||
@@ -840,7 +910,7 @@ __rte_hash_del_key_with_hash(const struc
|
||||
bkt->signatures[i].sig != NULL_SIGNATURE) {
|
||||
k = (struct rte_hash_key *) ((char *)keys +
|
||||
bkt->key_idx[i] * h->key_entry_size);
|
||||
- if (h->rte_hash_cmp_eq(key, k->key, h->key_len) == 0) {
|
||||
+ if (rte_hash_cmp_eq(key, k->key, h) == 0) {
|
||||
remove_entry(h, bkt, i);
|
||||
|
||||
/*
|
||||
@@ -863,7 +933,7 @@ __rte_hash_del_key_with_hash(const struc
|
||||
bkt->signatures[i].sig != NULL_SIGNATURE) {
|
||||
k = (struct rte_hash_key *) ((char *)keys +
|
||||
bkt->key_idx[i] * h->key_entry_size);
|
||||
- if (h->rte_hash_cmp_eq(key, k->key, h->key_len) == 0) {
|
||||
+ if (rte_hash_cmp_eq(key, k->key, h) == 0) {
|
||||
remove_entry(h, bkt, i);
|
||||
|
||||
/*
|
||||
@@ -980,7 +1050,7 @@ lookup_stage3(unsigned idx, const struct
|
||||
unsigned hit;
|
||||
unsigned key_idx;
|
||||
|
||||
- hit = !h->rte_hash_cmp_eq(key_slot->key, keys[idx], h->key_len);
|
||||
+ hit = !rte_hash_cmp_eq(key_slot->key, keys[idx], h);
|
||||
if (data != NULL)
|
||||
data[idx] = key_slot->pdata;
|
||||
|
|
@ -1,177 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc fix for LP: #1568838
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-04-11
|
||||
|
||||
From 1aadacb5b0ed29ea8f84eaa3ef6802663671be98 Mon Sep 17 00:00:00 2001
|
||||
From: Olivier Matz <olivier.matz@6wind.com>
|
||||
Date: Wed, 6 Apr 2016 15:27:59 +0200
|
||||
Subject: [PATCH] hash: fix allocation of an existing object
|
||||
|
||||
Change rte_hash*_create() functions to return NULL and set rte_errno to
|
||||
EEXIST when the object name already exists. This is the behavior
|
||||
described in the API documentation in the header file.
|
||||
|
||||
These functions were returning a pointer to the existing object in that
|
||||
case, but it is a problem as the caller did not know if the object had
|
||||
to be freed or not.
|
||||
|
||||
Doing this change also makes the hash API more consistent with the other
|
||||
APIs (mempool, rings, ...).
|
||||
|
||||
Fixes: 916e4f4f4e ("memory: fix for multi process support")
|
||||
|
||||
Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
|
||||
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
|
||||
---
|
||||
app/test/test_hash.c | 65 ++++++++++++----------------------
|
||||
doc/guides/rel_notes/release_16_04.rst | 9 +++++
|
||||
lib/librte_hash/rte_cuckoo_hash.c | 6 ++--
|
||||
lib/librte_hash/rte_fbk_hash.c | 5 ++-
|
||||
4 files changed, 40 insertions(+), 45 deletions(-)
|
||||
|
||||
Index: dpdk/app/test/test_hash.c
|
||||
===================================================================
|
||||
--- dpdk.orig/app/test/test_hash.c
|
||||
+++ dpdk/app/test/test_hash.c
|
||||
@@ -805,15 +805,11 @@ fbk_hash_unit_test(void)
|
||||
RETURN_IF_ERROR_FBK(handle == NULL, "fbk hash creation should have succeeded");
|
||||
|
||||
tmp = rte_fbk_hash_create(&invalid_params_same_name_2);
|
||||
- RETURN_IF_ERROR_FBK(tmp == NULL, "fbk hash creation should have succeeded");
|
||||
- if (tmp != handle) {
|
||||
- printf("ERROR line %d: hashes should have been the same\n", __LINE__);
|
||||
- rte_fbk_hash_free(handle);
|
||||
- rte_fbk_hash_free(tmp);
|
||||
- return -1;
|
||||
- }
|
||||
+ if (tmp != NULL)
|
||||
+ rte_fbk_hash_free(tmp);
|
||||
+ RETURN_IF_ERROR_FBK(tmp != NULL, "fbk hash creation should have failed");
|
||||
|
||||
- /* we are not freeing tmp or handle here because we need a hash list
|
||||
+ /* we are not freeing handle here because we need a hash list
|
||||
* to be not empty for the next test */
|
||||
|
||||
/* create a hash in non-empty list - good for coverage */
|
||||
@@ -988,7 +984,7 @@ static int test_fbk_hash_find_existing(v
|
||||
*/
|
||||
static int test_hash_creation_with_bad_parameters(void)
|
||||
{
|
||||
- struct rte_hash *handle;
|
||||
+ struct rte_hash *handle, *tmp;
|
||||
struct rte_hash_parameters params;
|
||||
|
||||
handle = rte_hash_create(NULL);
|
||||
@@ -1038,7 +1034,23 @@ static int test_hash_creation_with_bad_p
|
||||
return -1;
|
||||
}
|
||||
|
||||
+ /* test with same name should fail */
|
||||
+ memcpy(¶ms, &ut_params, sizeof(params));
|
||||
+ params.name = "same_name";
|
||||
+ handle = rte_hash_create(¶ms);
|
||||
+ if (handle == NULL) {
|
||||
+ printf("Cannot create first hash table with 'same_name'\n");
|
||||
+ return -1;
|
||||
+ }
|
||||
+ tmp = rte_hash_create(¶ms);
|
||||
+ if (tmp != NULL) {
|
||||
+ printf("Creation of hash table with same name should fail\n");
|
||||
+ rte_hash_free(handle);
|
||||
+ rte_hash_free(tmp);
|
||||
+ return -1;
|
||||
+ }
|
||||
rte_hash_free(handle);
|
||||
+
|
||||
printf("# Test successful. No more errors expected\n");
|
||||
|
||||
return 0;
|
||||
@@ -1051,12 +1063,12 @@ static int test_hash_creation_with_bad_p
|
||||
static int
|
||||
test_hash_creation_with_good_parameters(void)
|
||||
{
|
||||
- struct rte_hash *handle, *tmp;
|
||||
+ struct rte_hash *handle;
|
||||
struct rte_hash_parameters params;
|
||||
|
||||
/* create with null hash function - should choose DEFAULT_HASH_FUNC */
|
||||
memcpy(¶ms, &ut_params, sizeof(params));
|
||||
- params.name = "same_name";
|
||||
+ params.name = "name";
|
||||
params.hash_func = NULL;
|
||||
handle = rte_hash_create(¶ms);
|
||||
if (handle == NULL) {
|
||||
@@ -1064,37 +1076,6 @@ test_hash_creation_with_good_parameters(
|
||||
return -1;
|
||||
}
|
||||
|
||||
- /* this test is trying to create a hash with the same name as previous one.
|
||||
- * this should return a pointer to the hash we previously created.
|
||||
- * the previous hash isn't freed exactly for the purpose of it being in
|
||||
- * the hash list.
|
||||
- */
|
||||
- memcpy(¶ms, &ut_params, sizeof(params));
|
||||
- params.name = "same_name";
|
||||
- tmp = rte_hash_create(¶ms);
|
||||
-
|
||||
- /* check if the returned handle is actually equal to the previous hash */
|
||||
- if (handle != tmp) {
|
||||
- rte_hash_free(handle);
|
||||
- rte_hash_free(tmp);
|
||||
- printf("Creating hash with existing name was successful\n");
|
||||
- return -1;
|
||||
- }
|
||||
-
|
||||
- /* try creating hash when there already are hashes in the list.
|
||||
- * the previous hash is not freed to have a non-empty hash list.
|
||||
- * the other hash that's in the list is still pointed to by "handle" var.
|
||||
- */
|
||||
- memcpy(¶ms, &ut_params, sizeof(params));
|
||||
- params.name = "different_name";
|
||||
- tmp = rte_hash_create(¶ms);
|
||||
- if (tmp == NULL) {
|
||||
- rte_hash_free(handle);
|
||||
- printf("Creating hash with valid parameters failed\n");
|
||||
- return -1;
|
||||
- }
|
||||
-
|
||||
- rte_hash_free(tmp);
|
||||
rte_hash_free(handle);
|
||||
|
||||
return 0;
|
||||
Index: dpdk/lib/librte_hash/rte_cuckoo_hash.c
|
||||
===================================================================
|
||||
--- dpdk.orig/lib/librte_hash/rte_cuckoo_hash.c
|
||||
+++ dpdk/lib/librte_hash/rte_cuckoo_hash.c
|
||||
@@ -300,8 +300,10 @@ rte_hash_create(const struct rte_hash_pa
|
||||
|
||||
/* Guarantee there's no existing */
|
||||
h = rte_hash_find_existing(params->name);
|
||||
- if (h != NULL)
|
||||
- return h;
|
||||
+ if (h != NULL) {
|
||||
+ rte_errno = EEXIST;
|
||||
+ return NULL;
|
||||
+ }
|
||||
|
||||
te = rte_zmalloc("HASH_TAILQ_ENTRY", sizeof(*te), 0);
|
||||
if (te == NULL) {
|
||||
Index: dpdk/lib/librte_hash/rte_fbk_hash.c
|
||||
===================================================================
|
||||
--- dpdk.orig/lib/librte_hash/rte_fbk_hash.c
|
||||
+++ dpdk/lib/librte_hash/rte_fbk_hash.c
|
||||
@@ -140,8 +140,11 @@ rte_fbk_hash_create(const struct rte_fbk
|
||||
if (strncmp(params->name, ht->name, RTE_FBK_HASH_NAMESIZE) == 0)
|
||||
break;
|
||||
}
|
||||
- if (te != NULL)
|
||||
+ ht = NULL;
|
||||
+ if (te != NULL) {
|
||||
+ rte_errno = EEXIST;
|
||||
goto exit;
|
||||
+ }
|
||||
|
||||
te = rte_zmalloc("FBK_HASH_TAILQ_ENTRY", sizeof(*te), 0);
|
||||
if (te == NULL) {
|
|
@ -1,160 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc fix for LP: #1568838
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-04-11
|
||||
|
||||
From 5d7bfb7337e917c8d97b43a75264789b01b6cfce Mon Sep 17 00:00:00 2001
|
||||
From: Olivier Matz <olivier.matz@6wind.com>
|
||||
Date: Wed, 6 Apr 2016 15:28:00 +0200
|
||||
Subject: [PATCH] hash: fix race condition at creation
|
||||
|
||||
To avoid a race condition while creating a new hash object, the
|
||||
list has to be locked before the lookup, and released only once the
|
||||
new object is added in the list.
|
||||
|
||||
As the lock is held by the rte_ring_create(), move its creation at the
|
||||
beginning of the function and only take the lock after the ring is
|
||||
created to avoid a deadlock.
|
||||
|
||||
Fixes: 48a3991196 ("hash: replace with cuckoo hash implementation")
|
||||
|
||||
Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
|
||||
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
|
||||
---
|
||||
lib/librte_hash/rte_cuckoo_hash.c | 70 ++++++++++++++++++++++-----------------
|
||||
1 file changed, 40 insertions(+), 30 deletions(-)
|
||||
|
||||
Index: dpdk/lib/librte_hash/rte_cuckoo_hash.c
|
||||
===================================================================
|
||||
--- dpdk.orig/lib/librte_hash/rte_cuckoo_hash.c
|
||||
+++ dpdk/lib/librte_hash/rte_cuckoo_hash.c
|
||||
@@ -296,19 +296,48 @@ rte_hash_create(const struct rte_hash_pa
|
||||
if (params->extra_flag & RTE_HASH_EXTRA_FLAGS_TRANS_MEM_SUPPORT)
|
||||
hw_trans_mem_support = 1;
|
||||
|
||||
+ /* Store all keys and leave the first entry as a dummy entry for lookup_bulk */
|
||||
+ if (hw_trans_mem_support)
|
||||
+ /*
|
||||
+ * Increase number of slots by total number of indices
|
||||
+ * that can be stored in the lcore caches
|
||||
+ * except for the first cache
|
||||
+ */
|
||||
+ num_key_slots = params->entries + (RTE_MAX_LCORE - 1) *
|
||||
+ LCORE_CACHE_SIZE + 1;
|
||||
+ else
|
||||
+ num_key_slots = params->entries + 1;
|
||||
+
|
||||
+ snprintf(ring_name, sizeof(ring_name), "HT_%s", params->name);
|
||||
+ r = rte_ring_create(ring_name, rte_align32pow2(num_key_slots),
|
||||
+ params->socket_id, 0);
|
||||
+ if (r == NULL) {
|
||||
+ RTE_LOG(ERR, HASH, "memory allocation failed\n");
|
||||
+ goto err;
|
||||
+ }
|
||||
+
|
||||
snprintf(hash_name, sizeof(hash_name), "HT_%s", params->name);
|
||||
|
||||
- /* Guarantee there's no existing */
|
||||
- h = rte_hash_find_existing(params->name);
|
||||
- if (h != NULL) {
|
||||
+ rte_rwlock_write_lock(RTE_EAL_TAILQ_RWLOCK);
|
||||
+
|
||||
+ /* guarantee there's no existing: this is normally already checked
|
||||
+ * by ring creation above */
|
||||
+ TAILQ_FOREACH(te, hash_list, next) {
|
||||
+ h = (struct rte_hash *) te->data;
|
||||
+ if (strncmp(params->name, h->name, RTE_HASH_NAMESIZE) == 0)
|
||||
+ break;
|
||||
+ }
|
||||
+ h = NULL;
|
||||
+ if (te != NULL) {
|
||||
rte_errno = EEXIST;
|
||||
- return NULL;
|
||||
+ te = NULL;
|
||||
+ goto err_unlock;
|
||||
}
|
||||
|
||||
te = rte_zmalloc("HASH_TAILQ_ENTRY", sizeof(*te), 0);
|
||||
if (te == NULL) {
|
||||
RTE_LOG(ERR, HASH, "tailq entry allocation failed\n");
|
||||
- goto err;
|
||||
+ goto err_unlock;
|
||||
}
|
||||
|
||||
h = (struct rte_hash *)rte_zmalloc_socket(hash_name, sizeof(struct rte_hash),
|
||||
@@ -316,7 +345,7 @@ rte_hash_create(const struct rte_hash_pa
|
||||
|
||||
if (h == NULL) {
|
||||
RTE_LOG(ERR, HASH, "memory allocation failed\n");
|
||||
- goto err;
|
||||
+ goto err_unlock;
|
||||
}
|
||||
|
||||
const uint32_t num_buckets = rte_align32pow2(params->entries)
|
||||
@@ -328,23 +357,10 @@ rte_hash_create(const struct rte_hash_pa
|
||||
|
||||
if (buckets == NULL) {
|
||||
RTE_LOG(ERR, HASH, "memory allocation failed\n");
|
||||
- goto err;
|
||||
+ goto err_unlock;
|
||||
}
|
||||
|
||||
const uint32_t key_entry_size = sizeof(struct rte_hash_key) + params->key_len;
|
||||
-
|
||||
- /* Store all keys and leave the first entry as a dummy entry for lookup_bulk */
|
||||
- if (hw_trans_mem_support)
|
||||
- /*
|
||||
- * Increase number of slots by total number of indices
|
||||
- * that can be stored in the lcore caches
|
||||
- * except for the first cache
|
||||
- */
|
||||
- num_key_slots = params->entries + (RTE_MAX_LCORE - 1) *
|
||||
- LCORE_CACHE_SIZE + 1;
|
||||
- else
|
||||
- num_key_slots = params->entries + 1;
|
||||
-
|
||||
const uint64_t key_tbl_size = (uint64_t) key_entry_size * num_key_slots;
|
||||
|
||||
k = rte_zmalloc_socket(NULL, key_tbl_size,
|
||||
@@ -352,7 +368,7 @@ rte_hash_create(const struct rte_hash_pa
|
||||
|
||||
if (k == NULL) {
|
||||
RTE_LOG(ERR, HASH, "memory allocation failed\n");
|
||||
- goto err;
|
||||
+ goto err_unlock;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -395,14 +411,6 @@ rte_hash_create(const struct rte_hash_pa
|
||||
h->cmp_jump_table_idx = KEY_OTHER_BYTES;
|
||||
#endif
|
||||
|
||||
- snprintf(ring_name, sizeof(ring_name), "HT_%s", params->name);
|
||||
- r = rte_ring_create(ring_name, rte_align32pow2(num_key_slots),
|
||||
- params->socket_id, 0);
|
||||
- if (r == NULL) {
|
||||
- RTE_LOG(ERR, HASH, "memory allocation failed\n");
|
||||
- goto err;
|
||||
- }
|
||||
-
|
||||
if (hw_trans_mem_support) {
|
||||
h->local_free_slots = rte_zmalloc_socket(NULL,
|
||||
sizeof(struct lcore_cache) * RTE_MAX_LCORE,
|
||||
@@ -429,13 +437,15 @@ rte_hash_create(const struct rte_hash_pa
|
||||
for (i = 1; i < params->entries + 1; i++)
|
||||
rte_ring_sp_enqueue(r, (void *)((uintptr_t) i));
|
||||
|
||||
- rte_rwlock_write_lock(RTE_EAL_TAILQ_RWLOCK);
|
||||
te->data = (void *) h;
|
||||
TAILQ_INSERT_TAIL(hash_list, te, next);
|
||||
rte_rwlock_write_unlock(RTE_EAL_TAILQ_RWLOCK);
|
||||
|
||||
return h;
|
||||
+err_unlock:
|
||||
+ rte_rwlock_write_unlock(RTE_EAL_TAILQ_RWLOCK);
|
||||
err:
|
||||
+ rte_ring_free(r);
|
||||
rte_free(te);
|
||||
rte_free(h);
|
||||
rte_free(buckets);
|
|
@ -1,36 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc fix for LP: #1568838
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-04-11
|
||||
|
||||
From fe671356ed0d9b349bd257b8fcb30adf7da103e1 Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Mrzyglod <danielx.t.mrzyglod@intel.com>
|
||||
Date: Mon, 11 Apr 2016 11:46:54 +0200
|
||||
Subject: [PATCH] vfio: fix resource leak
|
||||
|
||||
Coverity ID 13289: Resource leak:
|
||||
The system resource will not be reclaimed and reused,
|
||||
reducing the future availability of the resource.
|
||||
In pci_vfio_get_group_fd: Leak of memory or pointers to system resources
|
||||
|
||||
Fixes: ff0b67d1c868 ("vfio: DMA mapping")
|
||||
|
||||
Signed-off-by: Daniel Mrzyglod <danielx.t.mrzyglod@intel.com>
|
||||
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
|
||||
---
|
||||
lib/librte_eal/linuxapp/eal/eal_pci_vfio.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
Index: dpdk/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c
|
||||
===================================================================
|
||||
--- dpdk.orig/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c
|
||||
+++ dpdk/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c
|
||||
@@ -448,6 +448,7 @@ pci_vfio_get_group_fd(int iommu_group_no
|
||||
/* if the fd is valid, create a new group for it */
|
||||
if (vfio_cfg.vfio_group_idx == VFIO_MAX_GROUPS) {
|
||||
RTE_LOG(ERR, EAL, "Maximum number of VFIO groups reached!\n");
|
||||
+ close(vfio_group_fd);
|
||||
return -1;
|
||||
}
|
||||
vfio_cfg.vfio_groups[vfio_cfg.vfio_group_idx].group_no = iommu_group_no;
|
|
@ -1,141 +0,0 @@
|
|||
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 */
|
||||
@@ -447,6 +455,7 @@ int
|
||||
rte_vhost_driver_register(const char *path)
|
||||
{
|
||||
struct vhost_server *vserver;
|
||||
+ int ret;
|
||||
|
||||
pthread_mutex_lock(&g_vhost_server.server_mutex);
|
||||
if (ops == NULL)
|
||||
@@ -474,8 +483,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);
|
|
@ -1,54 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc fix for LP: #1568838
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-04-12
|
||||
|
||||
From 356445f97a28b66bce9e7300e21fdcfa7def55c9 Mon Sep 17 00:00:00 2001
|
||||
From: Jasvinder Singh <jasvinder.singh@intel.com>
|
||||
Date: Mon, 11 Apr 2016 18:55:37 +0100
|
||||
Subject: [PATCH] port: fix ring writer buffer overflow
|
||||
|
||||
Fixes the buffer overflow that occurs due to following;
|
||||
|
||||
1. When the input packet burst does not meet the conditions: (a) being
|
||||
contiguous (first n bits set in pkts_mask, all the other bits cleared)
|
||||
and (b) containing a full burst, i.e. at least tx_burst_sz packets
|
||||
(n >= tx_burst_size). This is the slow(er) code path taken when local
|
||||
variable expr != 0.
|
||||
2. There are some packets already in the buffer.
|
||||
3. The number of packets in the incoming burst (i.e. popcount(pkts_mask))
|
||||
plus the number of packets already in the buffer exceeds the buffer size
|
||||
(RTE_PORT_IN_BURST_SIZE_MAX, i.e. 64).
|
||||
|
||||
Fixes: bf6931b242f7 ("port: ring")
|
||||
Fixes: 5f4cd47309d6 ("port: add ring writer nodrop")
|
||||
|
||||
Signed-off-by: Jasvinder Singh <jasvinder.singh@intel.com>
|
||||
Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
|
||||
---
|
||||
lib/librte_port/rte_port_ring.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: dpdk/lib/librte_port/rte_port_ring.c
|
||||
===================================================================
|
||||
--- dpdk.orig/lib/librte_port/rte_port_ring.c
|
||||
+++ dpdk/lib/librte_port/rte_port_ring.c
|
||||
@@ -179,7 +179,7 @@ rte_port_ring_reader_stats_read(void *po
|
||||
struct rte_port_ring_writer {
|
||||
struct rte_port_out_stats stats;
|
||||
|
||||
- struct rte_mbuf *tx_buf[RTE_PORT_IN_BURST_SIZE_MAX];
|
||||
+ struct rte_mbuf *tx_buf[2 * RTE_PORT_IN_BURST_SIZE_MAX];
|
||||
struct rte_ring *ring;
|
||||
uint32_t tx_burst_sz;
|
||||
uint32_t tx_buf_count;
|
||||
@@ -447,7 +447,7 @@ rte_port_ring_writer_stats_read(void *po
|
||||
struct rte_port_ring_writer_nodrop {
|
||||
struct rte_port_out_stats stats;
|
||||
|
||||
- struct rte_mbuf *tx_buf[RTE_PORT_IN_BURST_SIZE_MAX];
|
||||
+ struct rte_mbuf *tx_buf[2 * RTE_PORT_IN_BURST_SIZE_MAX];
|
||||
struct rte_ring *ring;
|
||||
uint32_t tx_burst_sz;
|
||||
uint32_t tx_buf_count;
|
|
@ -1,84 +0,0 @@
|
|||
Description: backport of dpdk 16.04-rc fix for LP: #1568838
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-04-12
|
||||
|
||||
From 52f7a5aeb190427232ba0289ec156e91ae68d3e6 Mon Sep 17 00:00:00 2001
|
||||
From: Jasvinder Singh <jasvinder.singh@intel.com>
|
||||
Date: Mon, 11 Apr 2016 18:54:46 +0100
|
||||
Subject: [PATCH] port: fix burst size mask type
|
||||
|
||||
Fixes the variable bsz_mask type from uint32_t to uint64_t
|
||||
|
||||
Fixes: 4d97e8b565cc ("port: ethdev")
|
||||
Fixes: 304c8091e90a ("port: add ethdev writer nodrop")
|
||||
Fixes: 8dceb6aa6ecf ("port: hierarchical scheduler")
|
||||
Fixes: 3e5966837a09 ("port: new Tx burst implementation of ring writer")
|
||||
Fixes: 5f4cd47309d6 ("port: add ring writer nodrop")
|
||||
|
||||
Signed-off-by: Jasvinder Singh <jasvinder.singh@intel.com>
|
||||
Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
|
||||
---
|
||||
lib/librte_port/rte_port_ethdev.c | 4 ++--
|
||||
lib/librte_port/rte_port_ring.c | 4 ++--
|
||||
lib/librte_port/rte_port_sched.c | 2 +-
|
||||
3 files changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
Index: dpdk/lib/librte_port/rte_port_ethdev.c
|
||||
===================================================================
|
||||
--- dpdk.orig/lib/librte_port/rte_port_ethdev.c
|
||||
+++ dpdk/lib/librte_port/rte_port_ethdev.c
|
||||
@@ -229,7 +229,7 @@ rte_port_ethdev_writer_tx_bulk(void *por
|
||||
{
|
||||
struct rte_port_ethdev_writer *p =
|
||||
(struct rte_port_ethdev_writer *) port;
|
||||
- uint32_t bsz_mask = p->bsz_mask;
|
||||
+ uint64_t bsz_mask = p->bsz_mask;
|
||||
uint32_t tx_buf_count = p->tx_buf_count;
|
||||
uint64_t expr = (pkts_mask & (pkts_mask + 1)) |
|
||||
((pkts_mask & bsz_mask) ^ bsz_mask);
|
||||
@@ -436,7 +436,7 @@ rte_port_ethdev_writer_nodrop_tx_bulk(vo
|
||||
struct rte_port_ethdev_writer_nodrop *p =
|
||||
(struct rte_port_ethdev_writer_nodrop *) port;
|
||||
|
||||
- uint32_t bsz_mask = p->bsz_mask;
|
||||
+ uint64_t bsz_mask = p->bsz_mask;
|
||||
uint32_t tx_buf_count = p->tx_buf_count;
|
||||
uint64_t expr = (pkts_mask & (pkts_mask + 1)) |
|
||||
((pkts_mask & bsz_mask) ^ bsz_mask);
|
||||
Index: dpdk/lib/librte_port/rte_port_ring.c
|
||||
===================================================================
|
||||
--- dpdk.orig/lib/librte_port/rte_port_ring.c
|
||||
+++ dpdk/lib/librte_port/rte_port_ring.c
|
||||
@@ -300,7 +300,7 @@ rte_port_ring_writer_tx_bulk_internal(vo
|
||||
struct rte_port_ring_writer *p =
|
||||
(struct rte_port_ring_writer *) port;
|
||||
|
||||
- uint32_t bsz_mask = p->bsz_mask;
|
||||
+ uint64_t bsz_mask = p->bsz_mask;
|
||||
uint32_t tx_buf_count = p->tx_buf_count;
|
||||
uint64_t expr = (pkts_mask & (pkts_mask + 1)) |
|
||||
((pkts_mask & bsz_mask) ^ bsz_mask);
|
||||
@@ -614,7 +614,7 @@ rte_port_ring_writer_nodrop_tx_bulk_inte
|
||||
struct rte_port_ring_writer_nodrop *p =
|
||||
(struct rte_port_ring_writer_nodrop *) port;
|
||||
|
||||
- uint32_t bsz_mask = p->bsz_mask;
|
||||
+ uint64_t bsz_mask = p->bsz_mask;
|
||||
uint32_t tx_buf_count = p->tx_buf_count;
|
||||
uint64_t expr = (pkts_mask & (pkts_mask + 1)) |
|
||||
((pkts_mask & bsz_mask) ^ bsz_mask);
|
||||
Index: dpdk/lib/librte_port/rte_port_sched.c
|
||||
===================================================================
|
||||
--- dpdk.orig/lib/librte_port/rte_port_sched.c
|
||||
+++ dpdk/lib/librte_port/rte_port_sched.c
|
||||
@@ -214,7 +214,7 @@ rte_port_sched_writer_tx_bulk(void *port
|
||||
uint64_t pkts_mask)
|
||||
{
|
||||
struct rte_port_sched_writer *p = (struct rte_port_sched_writer *) port;
|
||||
- uint32_t bsz_mask = p->bsz_mask;
|
||||
+ uint64_t bsz_mask = p->bsz_mask;
|
||||
uint32_t tx_buf_count = p->tx_buf_count;
|
||||
uint64_t expr = (pkts_mask & (pkts_mask + 1)) |
|
||||
((pkts_mask & bsz_mask) ^ bsz_mask);
|
|
@ -1,34 +0,0 @@
|
|||
Description: backport of dpdk 16.04 fix for LP: #1570195
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-04-19
|
||||
|
||||
From ee4e23ada8cb0fcb566295756d30bd21e757c783 Mon Sep 17 00:00:00 2001
|
||||
From: Huawei Xie <huawei.xie@intel.com>
|
||||
Date: Tue, 8 Mar 2016 23:33:39 +0800
|
||||
Subject: [PATCH] pci: identify devices not managed by any kernel driver
|
||||
|
||||
Use RTE_KDRV_NONE to indicate that kernel driver (other than VFIO/UIO) isn't
|
||||
managing the device.
|
||||
|
||||
Signed-off-by: Huawei Xie <huawei.xie@intel.com>
|
||||
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
|
||||
Acked-by: David Marchand <david.marchand@6wind.com>
|
||||
---
|
||||
lib/librte_eal/linuxapp/eal/eal_pci.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: dpdk/lib/librte_eal/linuxapp/eal/eal_pci.c
|
||||
===================================================================
|
||||
--- dpdk.orig/lib/librte_eal/linuxapp/eal/eal_pci.c
|
||||
+++ dpdk/lib/librte_eal/linuxapp/eal/eal_pci.c
|
||||
@@ -362,7 +362,7 @@ pci_scan_one(const char *dirname, uint16
|
||||
else
|
||||
dev->kdrv = RTE_KDRV_UNKNOWN;
|
||||
} else
|
||||
- dev->kdrv = RTE_KDRV_UNKNOWN;
|
||||
+ dev->kdrv = RTE_KDRV_NONE;
|
||||
|
||||
/* device is valid, add in list (sorted) */
|
||||
if (TAILQ_EMPTY(&pci_device_list)) {
|
|
@ -1,94 +0,0 @@
|
|||
Description: backport of dpdk 16.04 fix for LP: #1570195
|
||||
|
||||
The whole infrastructure of 756ce64b1ecd eal: "introduce PCI ioport API" was
|
||||
introduced post DPDK 2.2.
|
||||
|
||||
Old virtio is not using lib/librte_eal/linuxapp/eal/eal_pci.c:pci_map_device
|
||||
New Code:
|
||||
vtpci_init
|
||||
First tries for modern device -> virtio_read_caps -> rte_eal_pci_map_device
|
||||
This detects and returns with "Not managed by a supported kernel driver"
|
||||
Then legacy_virtio_resource_init -> rte_eal_pci_ioport_mapi
|
||||
This is where the original patch added the check
|
||||
vtpci_init came in c52afa68 "virtio: move left PCI stuff in the right file"
|
||||
Old code was eth_virtio_dev_init -> virtio_resource_init(pci_dev)
|
||||
|
||||
The logic of the new patch isn't too complex, just the places don't exist
|
||||
yet. So we add a semantically equivalent check just before virtio_resource_init.
|
||||
|
||||
Additionally I added a message to make it more clear what happened:
|
||||
EAL: PCI device 0000:00:04.0 on NUMA socket -1
|
||||
EAL: probe driver: 1af4:1000 rte_virtio_pmd
|
||||
=> PMD: device not available (in use by the kernel)
|
||||
EAL: Error - exiting with code: 1
|
||||
Cause: Requested device 0000:00:04.0 cannot be used
|
||||
|
||||
Forwarded: n/a (already upstream)
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-04-19
|
||||
|
||||
From b8eb345378bdefc4c976eaaf5abb221e0aca3460 Mon Sep 17 00:00:00 2001
|
||||
From: Huawei Xie <huawei.xie@intel.com>
|
||||
Date: Tue, 8 Mar 2016 23:33:42 +0800
|
||||
Subject: [PATCH] pci: ignore devices already managed in Linux when mapping x86
|
||||
ioport
|
||||
|
||||
call pci_ioport_map (on x86) only if the pci device is not bound
|
||||
to a kernel driver.
|
||||
|
||||
Signed-off-by: Huawei Xie <huawei.xie@intel.com>
|
||||
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
|
||||
Acked-by: David Marchand <david.marchand@6wind.com>
|
||||
---
|
||||
lib/librte_eal/linuxapp/eal/eal_pci.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: dpdk/drivers/net/virtio/virtio_ethdev.c
|
||||
===================================================================
|
||||
--- dpdk.orig/drivers/net/virtio/virtio_ethdev.c
|
||||
+++ dpdk/drivers/net/virtio/virtio_ethdev.c
|
||||
@@ -1219,6 +1219,34 @@ static int virtio_resource_init(struct r
|
||||
}
|
||||
#endif
|
||||
|
||||
+static int virtio_resource_available(struct rte_pci_device *pci_dev)
|
||||
+{
|
||||
+ int ret = -1;
|
||||
+
|
||||
+ /* only use virtio devices if bound on a supported or no driver
|
||||
+ * backport of b8eb3453 "pci: ignore devices already managed in Linux
|
||||
+ * when mapping x86"
|
||||
+ * Fixes (LP #1570195) and avoids various workarounds and warnings
|
||||
+ * that formerly were needed */
|
||||
+ switch (pci_dev->kdrv) {
|
||||
+#ifdef VFIO_PRESENT
|
||||
+ case RTE_KDRV_VFIO:
|
||||
+#endif
|
||||
+ case RTE_KDRV_IGB_UIO:
|
||||
+ case RTE_KDRV_UIO_GENERIC:
|
||||
+ case RTE_KDRV_NONE:
|
||||
+ ret = 1;
|
||||
+ break;
|
||||
+ default:
|
||||
+ RTE_LOG(ERR, PMD, "device not available for DPDK"
|
||||
+ " (in use by kernel)\n");
|
||||
+ ret = -1;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* Process Virtio Config changed interrupt and call the callback
|
||||
* if link state changed.
|
||||
@@ -1289,6 +1317,9 @@ eth_virtio_dev_init(struct rte_eth_dev *
|
||||
|
||||
pci_dev = eth_dev->pci_dev;
|
||||
|
||||
+ if (virtio_resource_available(pci_dev) < 0)
|
||||
+ return -1;
|
||||
+
|
||||
if (virtio_resource_init(pci_dev) < 0)
|
||||
return -1;
|
||||
|
|
@ -1,77 +0,0 @@
|
|||
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.
|
||||
|
||||
new fix also relies on a lot of new code, vhost_destroy_device looks totally
|
||||
different from the former destroy_device.
|
||||
History on todays function content:
|
||||
4796ad63 - original code moved from examples to lib
|
||||
a90ca1a1 - this replaces ops->destroy_device with vhost_destroy_device
|
||||
71dc571e - simple check against null pointers
|
||||
45ca9c6f - this changed the code from linked list to arrays
|
||||
New code cleans with:
|
||||
notify_ops->destroy_device (callback into the parent)
|
||||
cleanup_device was existing before even in 2.2 code
|
||||
free_device as well existing before even in 2.2 code
|
||||
Old code cleans with:
|
||||
notify_ops->destroy_device - still there
|
||||
rm_config_ll_entry -> eventually calls cleanup_device and free_device
|
||||
(just in the more complex linked list way)
|
||||
So the only adaption for backporting needed is to replace vhost_destroy_device
|
||||
with ops->destroy_device(ctx)
|
||||
|
||||
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-04-19
|
||||
|
||||
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);
|
||||
ops->set_ifname(vdev_ctx, vserver->path,
|
||||
size);
|
||||
@@ -482,6 +483,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);
|
||||
@@ -516,6 +518,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;
|
||||
+ ops->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 */
|
|
@ -1,51 +0,0 @@
|
|||
Description: build: Set soabi for the combined shared library
|
||||
Currently the build for the combined shared library does not set
|
||||
any ABI version. Since this deviates from upstream we start with
|
||||
version 0.
|
||||
Probably it would be ok if upstream kept individual ABI versions
|
||||
for each individual library. Then the combined one would have to
|
||||
be incremented whenever any of those changes version.
|
||||
Though to me it would feel more logical if there would be only
|
||||
one ABI version for the whole set.
|
||||
Forwarded: Not yet. Needs discussion about library versioning.
|
||||
Author: Stefan Bader <stefan.bader@canonical.com>
|
||||
Last-Update: 2015-12-01
|
||||
|
||||
--- a/mk/rte.sharelib.mk
|
||||
+++ b/mk/rte.sharelib.mk
|
||||
@@ -33,10 +33,12 @@
|
||||
|
||||
# VPATH contains at least SRCDIR
|
||||
VPATH += $(SRCDIR)
|
||||
+# The shared libs abi number.
|
||||
+LIBABIVER := 0
|
||||
|
||||
ifeq ($(CONFIG_RTE_BUILD_COMBINE_LIBS),y)
|
||||
ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),y)
|
||||
-LIB_ONE := lib$(RTE_LIBNAME).so
|
||||
+LIB_ONE := lib$(RTE_LIBNAME).so.$(LIBABIVER)
|
||||
else
|
||||
LIB_ONE := lib$(RTE_LIBNAME).a
|
||||
endif
|
||||
@@ -54,10 +56,10 @@
|
||||
LD := $(CC) $(CPU_CFLAGS)
|
||||
O_TO_S = $(LD) $(call linkerprefix,$(CPU_LDFLAGS)) \
|
||||
$(call linkerprefix,$(COMBINED_LDFLAGS)) \
|
||||
- -shared $(OBJS) -o $(RTE_OUTPUT)/lib/$(LIB_ONE)
|
||||
+ -shared $(OBJS) -Wl,-soname,$(LIB_ONE) -o $(RTE_OUTPUT)/lib/$(LIB_ONE)
|
||||
else
|
||||
O_TO_S = $(LD) $(CPU_LDFLAGS) $(COMBINED_LDFLAGS) \
|
||||
- -shared $(OBJS) -o $(RTE_OUTPUT)/lib/$(LIB_ONE)
|
||||
+ -shared $(OBJS) -Wl,-soname,$(LIB_ONE) -o $(RTE_OUTPUT)/lib/$(LIB_ONE)
|
||||
endif
|
||||
|
||||
O_TO_S_STR = $(subst ','\'',$(O_TO_S)) #'# fix syntax highlight
|
||||
@@ -84,6 +86,8 @@
|
||||
@[ -d $(dir $@) ] || mkdir -p $(dir $@)
|
||||
@$(SRCDIR)/scripts/merge-maps.sh > $(COMBINED_MAP)
|
||||
$(O_TO_S_DO)
|
||||
+ @[ -L $(RTE_OUTPUT)/lib/$(basename $(LIB_ONE)) ] || \
|
||||
+ ln -s $(LIB_ONE) $(RTE_OUTPUT)/lib/$(basename $(LIB_ONE))
|
||||
else
|
||||
$(LIB_ONE): FORCE
|
||||
@[ -d $(dir $@) ] || mkdir -p $(dir $@)
|
|
@ -1,16 +0,0 @@
|
|||
Description: build: Fix doc install path
|
||||
Missing mkdir breaks building docs only
|
||||
Forwarded: yes
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-01-18
|
||||
|
||||
diff --git a/mk/rte.sdkinstall.mk b/mk/rte.sdkinstall.mk
|
||||
index c159bf7..68e56b6 100644
|
||||
--- a/mk/rte.sdkinstall.mk
|
||||
+++ b/mk/rte.sdkinstall.mk
|
||||
@@ -157,4 +157,5 @@ ifneq ($(wildcard $O/doc/*/*/*pdf),)
|
||||
$(Q)$(call rte_mkdir, $(DESTDIR)$(docdir)/guides)
|
||||
$(Q)cp -a $O/doc/*/*/*pdf $(DESTDIR)$(docdir)/guides
|
||||
endif
|
||||
+ $(Q)$(call rte_mkdir, $(DESTDIR)$(datadir))
|
||||
$(Q)cp -a $(RTE_SDK)/examples $(DESTDIR)$(datadir)
|
|
@ -1,33 +0,0 @@
|
|||
Description: build: Fix linkage of combined shared library
|
||||
Currently the build for the combined shared library does not store
|
||||
its own dependencies. Forcing consumers of the .so to know about internal
|
||||
dependencies and adding them as -l in their compile.
|
||||
This patch adds the correct linkage for the currently packaged library
|
||||
Forwarded: No, upstream will solve it for DPDK 2.3 via linker script
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-02-24
|
||||
|
||||
--- a/mk/rte.sharelib.mk
|
||||
+++ b/mk/rte.sharelib.mk
|
||||
@@ -51,12 +51,20 @@ sharelib: $(LIB_ONE) FORCE
|
||||
|
||||
OBJS = $(wildcard $(RTE_OUTPUT)/build/lib/*.o)
|
||||
|
||||
+# fix linkage of combined shared library, so that app linking against it don't
|
||||
+# need to know the internal dependencies.
|
||||
+# Derived from a test run of mk/rtc.app.mk _LDLIBS-y and EXECENV_LDLIBS
|
||||
+# static until moving to linker script see LP: 1547517 and LP: 1546547 for more
|
||||
+# This fixes only the build path the ubuntu packaging currently passes
|
||||
+MISSINGLINKAGE = -lpcap -lxenstore -lpthread $(EXECENV_LDLIBS)
|
||||
+
|
||||
ifeq ($(LINK_USING_CC),1)
|
||||
# Override the definition of LD here, since we're linking with CC
|
||||
LD := $(CC) $(CPU_CFLAGS)
|
||||
O_TO_S = $(LD) $(call linkerprefix,$(CPU_LDFLAGS)) \
|
||||
$(call linkerprefix,$(COMBINED_LDFLAGS)) \
|
||||
- -shared $(OBJS) -Wl,-soname,$(LIB_ONE) -o $(RTE_OUTPUT)/lib/$(LIB_ONE)
|
||||
+ -shared $(OBJS) $(MISSINGLINKAGE) \
|
||||
+ -Wl,-soname,$(LIB_ONE) -o $(RTE_OUTPUT)/lib/$(LIB_ONE)
|
||||
else
|
||||
O_TO_S = $(LD) $(CPU_LDFLAGS) $(COMBINED_LDFLAGS) \
|
||||
-shared $(OBJS) -Wl,-soname,$(LIB_ONE) -o $(RTE_OUTPUT)/lib/$(LIB_ONE)
|
|
@ -1,75 +0,0 @@
|
|||
Description: lpm/lpm6: fix use after free and missing frees
|
||||
|
||||
In certain autotests lpm->max_rules turned out to be non initialized.
|
||||
Also lpm6 autotests failed with the default alloc of 512M Memory.
|
||||
While >=2500M was a workaround it became clear while debugging that it
|
||||
had a leak.
|
||||
|
||||
That eventually led to the identification of various use after free and leaks
|
||||
in the lpm/lpm6 code.
|
||||
|
||||
Along that is also makes the RTE_LOG messages of the failed allocation unique.
|
||||
|
||||
The patches are upstream accepted in 4 pieces now.
|
||||
This combines them plus a minor tweak currently in review at
|
||||
http://dpdk.org/dev/patchwork/patch/12025/
|
||||
|
||||
Forwarded: Yes - accepted 768f0e45 732a5b5c 34c4b584 d4c18f0a
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-04-12
|
||||
|
||||
Index: dpdk/lib/librte_lpm/rte_lpm.c
|
||||
===================================================================
|
||||
--- dpdk.orig/lib/librte_lpm/rte_lpm.c
|
||||
+++ dpdk/lib/librte_lpm/rte_lpm.c
|
||||
@@ -236,13 +236,10 @@ rte_lpm_free(struct rte_lpm *lpm)
|
||||
if (te->data == (void *) lpm)
|
||||
break;
|
||||
}
|
||||
- if (te == NULL) {
|
||||
- rte_rwlock_write_unlock(RTE_EAL_TAILQ_RWLOCK);
|
||||
- return;
|
||||
+ if (te != NULL) {
|
||||
+ TAILQ_REMOVE(lpm_list, te, next);
|
||||
}
|
||||
|
||||
- TAILQ_REMOVE(lpm_list, te, next);
|
||||
-
|
||||
rte_rwlock_write_unlock(RTE_EAL_TAILQ_RWLOCK);
|
||||
|
||||
rte_free(lpm);
|
||||
Index: dpdk/lib/librte_lpm/rte_lpm6.c
|
||||
===================================================================
|
||||
--- dpdk.orig/lib/librte_lpm/rte_lpm6.c
|
||||
+++ dpdk/lib/librte_lpm/rte_lpm6.c
|
||||
@@ -206,8 +206,9 @@ rte_lpm6_create(const char *name, int so
|
||||
(size_t)rules_size, RTE_CACHE_LINE_SIZE, socket_id);
|
||||
|
||||
if (lpm->rules_tbl == NULL) {
|
||||
- RTE_LOG(ERR, LPM, "LPM memory allocation failed\n");
|
||||
+ RTE_LOG(ERR, LPM, "LPM rules_tbl allocation failed\n");
|
||||
rte_free(lpm);
|
||||
+ lpm = NULL;
|
||||
rte_free(te);
|
||||
goto exit;
|
||||
}
|
||||
@@ -277,15 +278,14 @@ rte_lpm6_free(struct rte_lpm6 *lpm)
|
||||
if (te->data == (void *) lpm)
|
||||
break;
|
||||
}
|
||||
- if (te == NULL) {
|
||||
- rte_rwlock_write_unlock(RTE_EAL_TAILQ_RWLOCK);
|
||||
- return;
|
||||
- }
|
||||
|
||||
- TAILQ_REMOVE(lpm_list, te, next);
|
||||
+ if (te != NULL) {
|
||||
+ TAILQ_REMOVE(lpm_list, te, next);
|
||||
+ }
|
||||
|
||||
rte_rwlock_write_unlock(RTE_EAL_TAILQ_RWLOCK);
|
||||
|
||||
+ rte_free(lpm->rules_tbl);
|
||||
rte_free(lpm);
|
||||
rte_free(te);
|
||||
}
|
|
@ -1,77 +0,0 @@
|
|||
Description: build: avoid testpmd only working in XEN
|
||||
|
||||
With LIBRTE_PMD_XENVIRT enabled testpmd is built in a way to ONLY work
|
||||
in XEN environments.
|
||||
It will surface as:
|
||||
PMD: gntalloc: ioctl error
|
||||
EAL: Error - exiting with code: 1
|
||||
Cause: Creation of mbuf pool for socket 0 failed
|
||||
|
||||
There could be a complex solution checking if this is a Xen env via
|
||||
something like:
|
||||
#include <xenstore.h>
|
||||
struct xs_handle *xsh = NULL;
|
||||
xsh = xs_open(XS_OPEN_READONLY);
|
||||
check for xsh being NULL ...
|
||||
|
||||
But I see no reason to go so complex and instead the patch goes the
|
||||
simple and more readable way of just falling back to the normal
|
||||
allocation if the xen based allocation failed.
|
||||
|
||||
Forwarded: Yes - Accepted as bece7b6cf6849331c1817e1034c03fab251952a7
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-04-12
|
||||
|
||||
Index: dpdk/app/test-pmd/testpmd.c
|
||||
===================================================================
|
||||
--- dpdk.orig/app/test-pmd/testpmd.c
|
||||
+++ dpdk/app/test-pmd/testpmd.c
|
||||
@@ -410,7 +410,7 @@ mbuf_pool_create(uint16_t mbuf_seg_size,
|
||||
unsigned int socket_id)
|
||||
{
|
||||
char pool_name[RTE_MEMPOOL_NAMESIZE];
|
||||
- struct rte_mempool *rte_mp;
|
||||
+ struct rte_mempool *rte_mp = NULL;
|
||||
uint32_t mb_size;
|
||||
|
||||
mb_size = sizeof(struct rte_mbuf) + mbuf_seg_size;
|
||||
@@ -423,24 +423,23 @@ mbuf_pool_create(uint16_t mbuf_seg_size,
|
||||
rte_pktmbuf_pool_init, NULL,
|
||||
rte_pktmbuf_init, NULL,
|
||||
socket_id, 0);
|
||||
-
|
||||
-
|
||||
-
|
||||
-#else
|
||||
- if (mp_anon != 0)
|
||||
- rte_mp = mempool_anon_create(pool_name, nb_mbuf, mb_size,
|
||||
- (unsigned) mb_mempool_cache,
|
||||
- sizeof(struct rte_pktmbuf_pool_private),
|
||||
- rte_pktmbuf_pool_init, NULL,
|
||||
- rte_pktmbuf_init, NULL,
|
||||
- socket_id, 0);
|
||||
- else
|
||||
- /* wrapper to rte_mempool_create() */
|
||||
- rte_mp = rte_pktmbuf_pool_create(pool_name, nb_mbuf,
|
||||
- mb_mempool_cache, 0, mbuf_seg_size, socket_id);
|
||||
-
|
||||
#endif
|
||||
|
||||
+ /* if the former XEN allocation failed fall back to normal allocation */
|
||||
+ if (rte_mp == NULL) {
|
||||
+ if (mp_anon != 0)
|
||||
+ rte_mp = mempool_anon_create(pool_name, nb_mbuf,
|
||||
+ mb_size, (unsigned) mb_mempool_cache,
|
||||
+ sizeof(struct rte_pktmbuf_pool_private),
|
||||
+ rte_pktmbuf_pool_init, NULL,
|
||||
+ rte_pktmbuf_init, NULL,
|
||||
+ socket_id, 0);
|
||||
+ else
|
||||
+ /* wrapper to rte_mempool_create() */
|
||||
+ rte_mp = rte_pktmbuf_pool_create(pool_name, nb_mbuf,
|
||||
+ mb_mempool_cache, 0, mbuf_seg_size, socket_id);
|
||||
+ }
|
||||
+
|
||||
if (rte_mp == NULL) {
|
||||
rte_exit(EXIT_FAILURE, "Creation of mbuf pool for socket %u "
|
||||
"failed\n", socket_id);
|
|
@ -1,350 +0,0 @@
|
|||
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
|
||||
|
||||
Forwarded: yes
|
||||
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||||
Last-Update: 2016-04-24
|
||||
|
||||
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);
|
||||
@@ -482,6 +484,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_64) || defined(RTE_ARCH_I686)
|
||||
#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 "
|
||||
@@ -932,3 +945,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
|
||||
@@ -234,6 +234,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
|
||||
----------------------------
|
|
@ -1,159 +0,0 @@
|
|||
#!/usr/bin/make -f
|
||||
# See debhelper(7) (uncomment to enable)
|
||||
# output every command that modifies files on the build system.
|
||||
#export DH_VERBOSE = 1
|
||||
|
||||
# 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
|
||||
export EXTRA_CFLAGS = -g
|
||||
|
||||
# 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
|
||||
|
||||
DPDK_CONFIG = "$(DEB_HOST_GNU_CPU)-native-linuxapp-gcc"
|
||||
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"default",' \
|
||||
-e 's,(RTE_NEXT_ABI=).*,\1n,' \
|
||||
-e 's,(RTE_APP_TEST=).*,\1n,' \
|
||||
-e 's,(CONFIG_RTE_EAL_IGB_UIO=).*,\1n,' \
|
||||
-e 's,(CONFIG_RTE_KNI_KMOD=).*,\1n,' \
|
||||
-e 's,(CONFIG_RTE_BUILD_COMBINE_LIBS=).*,\1y,' \
|
||||
-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: libdpdk0 (bare runtime libs)
|
||||
mkdir -p debian/libdpdk0/$(LIBDIR)
|
||||
# NOTE so far upstream dpdk has not settled on really versioning the
|
||||
# combined lib. There are discussions ongoing and various alternative
|
||||
# approaches.
|
||||
# We have to wait until that is clarified upstream (in a follow on dpdk
|
||||
# version).
|
||||
# One likely solution will make us ship the non combined .so and a
|
||||
# linker script which replaces the combined lib.
|
||||
# To easen package management a few notes how this will change if that
|
||||
# happens:
|
||||
# NOTE: linker script - this becomes a nop (linker skript has no sover
|
||||
# on its own)
|
||||
rm debian/dpdk/usr/lib/libdpdk.so
|
||||
cp $(DPDK_SHARED_DIR)/lib/libdpdk.so.0 debian/libdpdk0/$(LIBDIR)/
|
||||
# NOTE: linker script - insert basenames loop for all .so's
|
||||
# NOTE: linker script - we also will need multiple symbol files then
|
||||
# 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
|
||||
# Package: libdpdk-dev (bare headers and static devel libs)
|
||||
mkdir -p debian/libdpdk-dev/$(LIBDIR)
|
||||
# NOTE: linker script - insert basenames loop for all .a's
|
||||
ln -s /$(LIBDIR)/libdpdk.so.0 \
|
||||
debian/libdpdk-dev/$(LIBDIR)/libdpdk.so
|
||||
mv debian/dpdk/usr/lib/libdpdk.a debian/libdpdk-dev/$(LIBDIR)/
|
||||
mv debian/dpdk-dev/usr/include/dpdk debian/libdpdk-dev/usr/include/
|
||||
# NOTE: linker script - package instead of removing all sublibs
|
||||
rm -rf debian/dpdk/usr/lib*
|
||||
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
|
|
@ -1,12 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
arch=$(dpkg --print-architecture)
|
||||
case $arch in
|
||||
amd64|i386)
|
||||
echo "Architecture ${arch} supported, go on with test"
|
||||
;;
|
||||
*)
|
||||
echo "Architecture ${arch} not supported, SKIP test"
|
||||
exit 0
|
||||
;;
|
||||
esac
|
|
@ -1,8 +0,0 @@
|
|||
Tests: test-initscripts
|
||||
Restrictions: allow-stderr, isolation-machine, needs-root
|
||||
Depends: dpdk [amd64 i386], gawk, mount, systemd, sysvinit-utils
|
||||
|
||||
Tests: test-linkage
|
||||
Restrictions: allow-stderr
|
||||
Depends: libdpdk0 [amd64 i386], libdpdk-dev [amd64 i386], libc6, libc6-dev, gcc,
|
||||
grep, libpcap-dev, libxenstore3.0 [amd64 i386]
|
|
@ -1,143 +0,0 @@
|
|||
#!/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"
|
|
@ -1,41 +0,0 @@
|
|||
#!/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
|
||||
|
||||
# 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\nChecking for expected libraries\n"
|
||||
# The binary should inherit dependencies from the .so
|
||||
# check one of the libs that came in due to features
|
||||
ldd testlinkage.bin | grep libpcap
|
||||
# check one of the libs that came in due to basic dpdp linuxapp config
|
||||
ldd testlinkage.bin | grep libm
|
||||
# one that it uses implicitly
|
||||
ldd testlinkage.bin | grep libpthread
|
||||
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"
|
|
@ -1,2 +0,0 @@
|
|||
version=3
|
||||
http://www.dpdk.org/download /browse/dpdk/snapshot/dpdk-(.+)\.(?:zip|tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz)))
|
|
@ -1 +0,0 @@
|
|||
9
|
|
@ -1 +0,0 @@
|
|||
3.0 (quilt)
|
|
@ -1,19 +0,0 @@
|
|||
check-debian-changelog-version:
|
||||
@DEB_VERSION=`echo '$(VERSION)' | sed 's/pre/~pre/'`; \
|
||||
if $(FGREP) '($(DEB_VERSION)' $(srcdir)/debian/changelog >/dev/null; \
|
||||
then \
|
||||
:; \
|
||||
else \
|
||||
echo "Update debian/changelog to mention version $(VERSION)"; \
|
||||
exit 1; \
|
||||
fi
|
||||
ALL_LOCAL += check-debian-changelog-version
|
||||
DIST_HOOKS += check-debian-changelog-version
|
||||
|
||||
$(srcdir)/debian/copyright: AUTHORS debian/copyright.in
|
||||
$(AM_V_GEN) \
|
||||
{ sed -n -e '/%AUTHORS%/q' -e p < $(srcdir)/debian/copyright.in; \
|
||||
sed '1,/^$$/d' $(srcdir)/AUTHORS | \
|
||||
sed -n -e '/^$$/q' -e 's/^/ /p'; \
|
||||
sed -e '1,/%AUTHORS%/d' $(srcdir)/debian/copyright.in; \
|
||||
} > $@
|
|
@ -1,3 +0,0 @@
|
|||
openvswitch-dpdk (2.5.90-1.nsh) unstable; urgency=low
|
||||
* Support NSH
|
||||
-- Open vSwitch team <dev@openvswitch.org> Sat, 03 Sep 2016 20:00:00 +0200
|
|
@ -1 +0,0 @@
|
|||
9
|
|
@ -1,54 +0,0 @@
|
|||
Source: openvswitch-dpdk
|
||||
Section: net
|
||||
Priority: extra
|
||||
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
|
||||
XSBC-Original-Maintainer: Open vSwitch developers <dev@openvswitch.org>
|
||||
Uploaders: Ben Pfaff <pfaffben@debian.org>,
|
||||
Simon Horman <horms@debian.org>,
|
||||
Build-Depends: autoconf (>= 2.64),
|
||||
automake (>= 1.10) | automake1.10,
|
||||
bzip2,
|
||||
debhelper (>= 9~),
|
||||
dh-autoreconf,
|
||||
dh-systemd (>= 1.5),
|
||||
graphviz,
|
||||
libdpdk-dev,
|
||||
libfuse-dev,
|
||||
libssl-dev,
|
||||
libtool,
|
||||
openssl,
|
||||
procps,
|
||||
python-all (>= 2.6.6-3~),
|
||||
python-qt4,
|
||||
python-twisted-conch,
|
||||
python-zopeinterface,
|
||||
Standards-Version: 3.9.6
|
||||
Homepage: http://openvswitch.org/
|
||||
XS-Testsuite: autopkgtest
|
||||
|
||||
Package: openvswitch-switch-dpdk
|
||||
Architecture: i386 amd64
|
||||
Depends: dpdk,
|
||||
openvswitch-switch (>= 2.4.0),
|
||||
${misc:Depends},
|
||||
${python:Depends},
|
||||
${shlibs:Depends},
|
||||
Enhances: openvswitch-switch,
|
||||
Description: DPDK enabled Open vSwitch switch implementation
|
||||
Open vSwitch is a production quality, multilayer, software-based,
|
||||
Ethernet virtual switch. It is designed to enable massive network
|
||||
automation through programmatic extension, while still supporting
|
||||
standard management interfaces and protocols (e.g. NetFlow, IPFIX,
|
||||
sFlow, SPAN, RSPAN, CLI, LACP, 802.1ag). In addition, it is designed
|
||||
to support distribution across multiple physical servers similar to
|
||||
VMware's vNetwork distributed vswitch or Cisco's Nexus 1000V.
|
||||
.
|
||||
openvswitch-switch provides the userspace components and utilities for
|
||||
the Open vSwitch kernel-based switch.
|
||||
.
|
||||
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.
|
||||
.
|
||||
This package provides a DPDK enabled implementation of the ovs-vswitchd
|
||||
binary.
|
|
@ -1,716 +0,0 @@
|
|||
The original sources for this package can be found at:
|
||||
|
||||
http://openvswitch.org/
|
||||
|
||||
Upstream Authors (from AUTHORS):
|
||||
|
||||
%AUTHORS%
|
||||
|
||||
Upstream Copyright Holders:
|
||||
|
||||
Copyright (c) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Nicira, Inc.
|
||||
Copyright (c) 2010 Jean Tourrilhes - HP-Labs.
|
||||
Copyright (c) 2008,2009,2010 Citrix Systems, Inc.
|
||||
and authors listed above.
|
||||
Copyright (c) 2011 Gaetano Catalli
|
||||
Copyright (C) 2000-2003 Geoffrey Wossum (gwossum@acm.org)
|
||||
Copyright (C) 2000 The NetBSD Foundation, Inc.
|
||||
Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
|
||||
Copyright (c) 1982, 1986, 1990, 1993 The Regents of the University of California.
|
||||
Copyright (c) 2008, 2012 Vincent Bernat <bernat@luffy.cx>
|
||||
Copyright (c) 2014 Michael Chapman
|
||||
Copyright (c) 2014 WindRiver, Inc.
|
||||
Copyright (c) 2014 Avaya, Inc.
|
||||
|
||||
License:
|
||||
|
||||
* The following components are licensed under the
|
||||
GNU Lesser General Public License version 2.1 only
|
||||
with the exception clause below as a pre-amble.
|
||||
|
||||
xenserver/etc_xensource_scripts_vif
|
||||
xenserver/opt_xensource_libexec_InterfaceReconfigure.py
|
||||
xenserver/opt_xensource_libexec_InterfaceReconfigureBridge.py
|
||||
xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py
|
||||
xenserver/opt_xensource_libexec_interface-reconfigure
|
||||
xenserver/usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py
|
||||
|
||||
* These components are only distributed in the source package.
|
||||
They do not appear in any binary packages.
|
||||
|
||||
On Debian systems, the complete text of the
|
||||
GNU Lesser General Public License version 2.1 can be found in
|
||||
`/usr/share/common-licenses/LGPL-2.1'
|
||||
|
||||
The exception clause pre-amble reads:
|
||||
|
||||
As a special exception to the GNU Lesser General Public License, you
|
||||
may link, statically or dynamically, a "work that uses the Library"
|
||||
with a publicly distributed version of the Library to produce an
|
||||
executable file containing portions of the Library, and distribute
|
||||
that executable file under terms of your choice, without any of the
|
||||
additional requirements listed in clause 6 of the GNU Lesser General
|
||||
Public License. By "a publicly distributed version of the Library",
|
||||
we mean either the unmodified Library as distributed, or a
|
||||
modified version of the Library that is distributed under the
|
||||
conditions defined in clause 3 of the GNU Library General Public
|
||||
License. This exception does not however invalidate any other reasons
|
||||
why the executable file might be covered by the GNU Lesser General
|
||||
Public License.
|
||||
|
||||
* The following components are licensed under the
|
||||
GNU Lesser General Public License version 2.1.
|
||||
|
||||
utilities/bugtool/ovs-bugtool
|
||||
utilities/bugtool/ovs-bugtool-*
|
||||
utilities/bugtool/plugins/kernel-info/openvswitch.xml
|
||||
utilities/bugtool/plugins/network-status/openvswitch.xml
|
||||
utilities/bugtool/plugins/system-configuration.xml
|
||||
utilities/bugtool/plugins/system-configuration/openvswitch.xml
|
||||
|
||||
On Debian systems, the complete text of the
|
||||
GNU Lesser General Public License version 2.1 can be found in
|
||||
`/usr/share/common-licenses/LGPL-2.1'
|
||||
|
||||
* The following component is licensed under the GNU General Public License
|
||||
version 2.
|
||||
|
||||
datapath/
|
||||
|
||||
On Debian systems, the complete text of the GNU General Public License
|
||||
version 2 can be found in `/usr/share/common-licenses/GPL-2'
|
||||
|
||||
* The following file is licensed under the GNU General Public License
|
||||
version 2.
|
||||
|
||||
build-aux/cccl
|
||||
|
||||
* The following files are licensed under the 2-clause BSD license.
|
||||
|
||||
lib/getopt_long.c
|
||||
include/windows/getopt.h
|
||||
|
||||
* The following files are licensed under the 3-clause BSD-license
|
||||
|
||||
include/windows/netinet/icmp6.h
|
||||
include/windows/netinet/ip6.h
|
||||
lib/strsep.c
|
||||
|
||||
* The following components are dual-licensed under the
|
||||
GNU General Public License version 2 and the Apache License Version 2.0.
|
||||
|
||||
datapath/linux/compat/include/linux/openvswitch.h
|
||||
|
||||
On Debian systems, the complete text of the GNU General Public License
|
||||
version 2 can be found in `/usr/share/common-licenses/GPL-2'.
|
||||
On Debian systems, the complete text of the Apache License version 2.0
|
||||
can be found in '/usr/share/common-licenses/Apache-2.0'.
|
||||
|
||||
* The following components are licensed under the terms of either the
|
||||
Sun Industry Standard Source License 1.1 or the InMon sFlow License:
|
||||
|
||||
lib/sflow.h
|
||||
lib/sflow_agent.c
|
||||
lib/sflow_api.h
|
||||
lib/sflow_poller.c
|
||||
lib/sflow_receiver.c
|
||||
lib/sflow_sampler.c
|
||||
|
||||
These licenses are available, respectively, the following URLs:
|
||||
|
||||
http://host-sflow.sourceforge.net/sissl.html
|
||||
http://www.inmon.com/technology/sflowlicense.txt
|
||||
|
||||
The full text of each license is also appended to the end of this
|
||||
file.
|
||||
|
||||
* The following components are licensed for use as desired without restriction:
|
||||
|
||||
lib/crc32c.c
|
||||
|
||||
* The following components are licensed under the
|
||||
Python Software Foundation License Version 2.
|
||||
|
||||
python/compat/uuid.py
|
||||
python/compat/argparse.py
|
||||
|
||||
* These components are only distributed in the source package.
|
||||
They do not appear in any binary packages.
|
||||
|
||||
PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
|
||||
--------------------------------------------
|
||||
|
||||
1. This LICENSE AGREEMENT is between the Python Software Foundation
|
||||
("PSF"), and the Individual or Organization ("Licensee") accessing and
|
||||
otherwise using this software ("Python") in source or binary form and
|
||||
its associated documentation.
|
||||
|
||||
2. Subject to the terms and conditions of this License Agreement, PSF
|
||||
hereby grants Licensee a nonexclusive, royalty-free, world-wide
|
||||
license to reproduce, analyze, test, perform and/or display publicly,
|
||||
prepare derivative works, distribute, and otherwise use Python
|
||||
alone or in any derivative version, provided, however, that PSF's
|
||||
License Agreement and PSF's notice of copyright, i.e., "Copyright (c)
|
||||
2001, 2002, 2003, 2004, 2005, 2006, 2007 Python Software Foundation;
|
||||
All Rights Reserved" are retained in Python alone or in any derivative
|
||||
version prepared by Licensee.
|
||||
|
||||
3. In the event Licensee prepares a derivative work that is based on
|
||||
or incorporates Python or any part thereof, and wants to make
|
||||
the derivative work available to others as provided herein, then
|
||||
Licensee hereby agrees to include in any such work a brief summary of
|
||||
the changes made to Python.
|
||||
|
||||
4. PSF is making Python available to Licensee on an "AS IS"
|
||||
basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
|
||||
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
|
||||
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
|
||||
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
|
||||
INFRINGE ANY THIRD PARTY RIGHTS.
|
||||
|
||||
5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
|
||||
FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
|
||||
A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
|
||||
OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
|
||||
|
||||
6. This License Agreement will automatically terminate upon a material
|
||||
breach of its terms and conditions.
|
||||
|
||||
7. Nothing in this License Agreement shall be deemed to create any
|
||||
relationship of agency, partnership, or joint venture between PSF and
|
||||
Licensee. This License Agreement does not grant permission to use PSF
|
||||
trademarks or trade name in a trademark sense to endorse or promote
|
||||
products or services of Licensee, or any third party.
|
||||
|
||||
8. By copying, installing or otherwise using Python, Licensee
|
||||
agrees to be bound by the terms and conditions of this License
|
||||
Agreement.
|
||||
|
||||
* lib/ovs.tmac in the source distribution, and manpages in the
|
||||
binaries, includes troff macros from groff 1.21 that contain the
|
||||
following notice:
|
||||
|
||||
.\" an-ext.tmac
|
||||
.\"
|
||||
.\" Written by Eric S. Raymond <esr@thyrsus.com>
|
||||
.\" Werner Lemberg <wl@gnu.org>
|
||||
.\"
|
||||
.\" Version 2007-Feb-02
|
||||
.\"
|
||||
.\" Copyright (C) 2007, 2009, 2011 Free Software Foundation, Inc.
|
||||
.\" You may freely use, modify and/or distribute this file.
|
||||
|
||||
* m4/absolute-header.m4, by Derek Price, and m4/include_next.m4, by
|
||||
Paul Eggert and Derek Price bear the following notices:
|
||||
|
||||
Copyright (C) 2006-2013 Free Software Foundation, Inc.
|
||||
This file is free software; the Free Software Foundation
|
||||
gives unlimited permission to copy and/or distribute it,
|
||||
with or without modifications, as long as this notice is preserved.
|
||||
|
||||
* The following files are licensed under the ISC-license
|
||||
|
||||
lib/lldp/aa-structs.h
|
||||
lib/lldp/lldpd.c
|
||||
lib/lldp/lldpd.h
|
||||
lib/lldp/lldpd-structs.c
|
||||
lib/lldp/lldpd-structs.h
|
||||
lib/lldp/lldp.c
|
||||
lib/lldp/lldp-tlv.h
|
||||
lib/lldp/lldp-const.h
|
||||
|
||||
* All other components of this package are licensed under
|
||||
The Apache License Version 2.0.
|
||||
|
||||
On Debian systems, the complete text of the Apache License version 2.0
|
||||
can be found in '/usr/share/common-licenses/Apache-2.0'.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Retrieved from http://host-sflow.sourceforge.net/sissl.html, 2011-12-12:
|
||||
|
||||
Sun Industry Standards Source License - Version 1.1
|
||||
|
||||
1.0 DEFINITIONS
|
||||
|
||||
1.1 "Commercial Use" means distribution or otherwise making the
|
||||
Original Code available to a third party.
|
||||
|
||||
1.2 "Contributor Version" means the combination of the Original Code,
|
||||
and the Modifications made by that particular Contributor.
|
||||
|
||||
1.3 "Electronic Distribution Mechanism" means a mechanism generally
|
||||
accepted in the software development community for the electronic
|
||||
transfer of data.
|
||||
|
||||
1.4 "Executable" means Original Code in any form other than Source
|
||||
Code.
|
||||
|
||||
1.5 "Initial Developer" means the individual or entity identified as
|
||||
the Initial Developer in the Source Code notice required by Exhibit A.
|
||||
|
||||
1.6 "Larger Work" means a work which combines Original Code or portions
|
||||
thereof with code not governed by the terms of this License.
|
||||
|
||||
1.7 "License" means this document.
|
||||
|
||||
1.8 "Licensable" means having the right to grant, to the maximum extent
|
||||
possible, whether at the time of the initial grant or subsequently
|
||||
acquired, any and all of the rights conveyed herein.
|
||||
|
||||
1.9 "Modifications" means any addition to or deletion from the
|
||||
substance or structure of either the Original Code or any previous
|
||||
Modifications. A Modification is:
|
||||
|
||||
A. Any addition to or deletion from the contents of a file containing
|
||||
Original Code or previous Modifications.
|
||||
|
||||
B. Any new file that contains any part of the Original Code or previous
|
||||
Modifications.
|
||||
|
||||
1.10 "Original Code" means Source Code of computer software code which
|
||||
is described in the Source Code notice required by Exhibit A as
|
||||
Original Code.
|
||||
|
||||
1.11 "Patent Claims" means any patent claim(s), now owned or hereafter
|
||||
acquired, including without limitation, method, process, and apparatus
|
||||
claims, in any patent Licensable by grantor.
|
||||
|
||||
1.12 "Source Code" means the preferred form of the Original Code for
|
||||
making modifications to it, including all modules it contains, plus any
|
||||
associated interface definition files, or scripts used to control
|
||||
compilation and installation of an Executable.
|
||||
|
||||
1.13 "Standards" means the standards identified in Exhibit B.
|
||||
|
||||
1.14 "You" (or "Your") means an individual or a legal entity exercising
|
||||
rights under, and complying with all of the terms of, this License or a
|
||||
future version of this License issued under Section 6.1. For legal
|
||||
entities, "You'' includes any entity which controls, is controlled by,
|
||||
or is under common control with You. For purposes of this definition,
|
||||
"control'' means (a) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (b) ownership of more than fifty percent (50%) of the
|
||||
outstanding shares or beneficial ownership of such entity.
|
||||
|
||||
2.0 SOURCE CODE LICENSE
|
||||
|
||||
2.1 The Initial Developer Grant
|
||||
The Initial Developer hereby grants You a world-wide, royalty-free,
|
||||
non-exclusive license, subject to third party intellectual property
|
||||
claims:
|
||||
|
||||
(a) under intellectual property rights (other than patent or trademark)
|
||||
Licensable by Initial Developer to use, reproduce, modify, display,
|
||||
perform, sublicense and distribute the Original Code (or portions
|
||||
thereof) with or without Modifications, and/or as part of a Larger
|
||||
Work; and
|
||||
|
||||
(b) under Patents Claims infringed by the making, using or selling of
|
||||
Original Code, to make, have made, use, practice, sell, and offer for
|
||||
sale, and/or otherwise dispose of the Original Code (or portions
|
||||
thereof).
|
||||
|
||||
(c) the licenses granted in this Section 2.1(a) and (b) are effective
|
||||
on the date Initial Developer first distributes Original Code under the
|
||||
terms of this License.
|
||||
|
||||
(d) Notwithstanding Section 2.1(b) above, no patent license is granted:
|
||||
1) for code that You delete from the Original Code; 2) separate from
|
||||
the Original Code; or 3) for infringements caused by: i) the
|
||||
modification of the Original Code or ii) the combination of the
|
||||
Original Code with other software or devices, including but not limited
|
||||
to Modifications.
|
||||
3.0 DISTRIBUTION OBLIGATIONS
|
||||
|
||||
3.1 Application of License.
|
||||
The Source Code version of Original Code may be distributed only under
|
||||
the terms of this License or a future version of this License released
|
||||
under Section 6.1, and You must include a copy of this License with
|
||||
every copy of the Source Code You distribute. You may not offer or
|
||||
impose any terms on any Source Code version that alters or restricts
|
||||
the applicable version of this License or the recipients' rights
|
||||
hereunder. Your license for shipment of the Contributor Version is
|
||||
conditioned upon Your full compliance with this Section. The
|
||||
Modifications which You create must comply with all requirements set
|
||||
out by the Standards body in effect one hundred twenty (120) days
|
||||
before You ship the Contributor Version. In the event that the
|
||||
Modifications do not meet such requirements, You agree to publish
|
||||
either (i) any deviation from the Standards protocol resulting from
|
||||
implementation of Your Modifications and a reference implementation of
|
||||
Your Modifications or (ii) Your Modifications in Source Code form, and
|
||||
to make any such deviation and reference implementation or
|
||||
Modifications available to all third parties under the same terms as
|
||||
this license on a royalty free basis within thirty (30) days of Your
|
||||
first customer shipment of Your Modifications.
|
||||
|
||||
3.2 Required Notices.
|
||||
You must duplicate the notice in Exhibit A in each file of the Source
|
||||
Code. If it is not possible to put such notice in a particular Source
|
||||
Code file due to its structure, then You must include such notice in a
|
||||
location (such as a relevant directory) where a user would be likely to
|
||||
look for such a notice. If You created one or more Modification(s) You
|
||||
may add Your name as a Contributor to the notice described in Exhibit
|
||||
A. You must also duplicate this License in any documentation for the
|
||||
Source Code where You describe recipients' rights or ownership rights
|
||||
relating to Initial Code. You may choose to offer, and to charge a fee
|
||||
for, warranty, support, indemnity or liability obligations to one or
|
||||
more recipients of Your version of the Code. However, You may do so
|
||||
only on Your own behalf, and not on behalf of the Initial Developer.
|
||||
You must make it absolutely clear than any such warranty, support,
|
||||
indemnity or liability obligation is offered by You alone, and You
|
||||
hereby agree to indemnify the Initial Developer for any liability
|
||||
incurred by the Initial Developer as a result of warranty, support,
|
||||
indemnity or liability terms You offer.
|
||||
|
||||
3.3 Distribution of Executable Versions.
|
||||
You may distribute Original Code in Executable and Source form only if
|
||||
the requirements of Sections 3.1 and 3.2 have been met for that
|
||||
Original Code, and if You include a notice stating that the Source Code
|
||||
version of the Original Code is available under the terms of this
|
||||
License. The notice must be conspicuously included in any notice in an
|
||||
Executable or Source versions, related documentation or collateral in
|
||||
which You describe recipients' rights relating to the Original Code.
|
||||
You may distribute the Executable and Source versions of Your version
|
||||
of the Code or ownership rights under a license of Your choice, which
|
||||
may contain terms different from this License, provided that You are in
|
||||
compliance with the terms of this License. If You distribute the
|
||||
Executable and Source versions under a different license You must make
|
||||
it absolutely clear that any terms which differ from this License are
|
||||
offered by You alone, not by the Initial Developer. You hereby agree to
|
||||
indemnify the Initial Developer for any liability incurred by the
|
||||
Initial Developer as a result of any such terms You offer.
|
||||
|
||||
3.4 Larger Works.
|
||||
You may create a Larger Work by combining Original Code with other code
|
||||
not governed by the terms of this License and distribute the Larger
|
||||
Work as a single product. In such a case, You must make sure the
|
||||
requirements of this License are fulfilled for the Original Code.
|
||||
|
||||
4.0 INABILITY TO COMPLY DUE TO STATUTE OR REGULATION
|
||||
|
||||
If it is impossible for You to comply with any of the terms of this
|
||||
License with respect to some or all of the Original Code due to
|
||||
statute, judicial order, or regulation then You must: (a) comply with
|
||||
the terms of this License to the maximum extent possible; and (b)
|
||||
describe the limitations and the code they affect. Such description
|
||||
must be included in the LEGAL file described in Section 3.2 and must be
|
||||
included with all distributions of the Source Code. Except to the
|
||||
extent prohibited by statute or regulation, such description must be
|
||||
sufficiently detailed for a recipient of ordinary skill to be able to
|
||||
understand it.
|
||||
|
||||
5.0 APPLICATION OF THIS LICENSE
|
||||
|
||||
This License applies to code to which the Initial Developer has
|
||||
attached the notice in Exhibit A and to related Modifications as set
|
||||
out in Section 3.1.
|
||||
|
||||
6.0 VERSIONS OF THE LICENSE
|
||||
|
||||
6.1 New Versions.
|
||||
Sun may publish revised and/or new versions of the License from time to
|
||||
time. Each version will be given a distinguishing version number.
|
||||
|
||||
6.2 Effect of New Versions.
|
||||
Once Original Code has been published under a particular version of the
|
||||
License, You may always continue to use it under the terms of that
|
||||
version. You may also choose to use such Original Code under the terms
|
||||
of any subsequent version of the License published by Sun. No one other
|
||||
than Sun has the right to modify the terms applicable to Original Code.
|
||||
|
||||
7.0 DISCLAIMER OF WARRANTY
|
||||
|
||||
ORIGINAL CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||
WITHOUT LIMITATION, WARRANTIES THAT THE ORIGINAL CODE IS FREE OF
|
||||
DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
|
||||
THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE ORIGINAL CODE
|
||||
IS WITH YOU. SHOULD ANY ORIGINAL CODE PROVE DEFECTIVE IN ANY RESPECT,
|
||||
YOU (NOT THE INITIAL DEVELOPER) ASSUME THE COST OF ANY NECESSARY
|
||||
SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY
|
||||
CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY ORIGINAL
|
||||
CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
|
||||
|
||||
8.0 TERMINATION
|
||||
|
||||
8.1 This License and the rights granted hereunder will terminate
|
||||
automatically if You fail to comply with terms herein and fail to cure
|
||||
such breach within 30 days of becoming aware of the breach. All
|
||||
sublicenses to the Original Code which are properly granted shall
|
||||
survive any termination of this License. Provisions which, by their
|
||||
nature, must remain in effect beyond the termination of this License
|
||||
shall survive.
|
||||
|
||||
8.2 In the event of termination under Section 8.1 above, all end user
|
||||
license agreements (excluding distributors and resellers) which have
|
||||
been validly granted by You or any distributor hereunder prior to
|
||||
termination shall survive termination.
|
||||
|
||||
9.0 LIMIT OF LIABILITY
|
||||
|
||||
UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
|
||||
(INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
|
||||
DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF ORIGINAL CODE,
|
||||
OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY
|
||||
INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
|
||||
CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
|
||||
WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
|
||||
COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
|
||||
INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
|
||||
LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
|
||||
RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
|
||||
PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
|
||||
EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS
|
||||
EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
10.0 U.S. GOVERNMENT END USERS
|
||||
|
||||
U.S. Government: If this Software is being acquired by or on behalf of
|
||||
the U.S. Government or by a U.S. Government prime contractor or
|
||||
subcontractor (at any tier), then the Government's rights in the
|
||||
Software and accompanying documentation shall be only as set forth in
|
||||
this license; this is in accordance with 48 C.F.R. 227.7201 through
|
||||
227.7202-4 (for Department of Defense (DoD) acquisitions) and with 48
|
||||
C.F.R. 2.101 and 12.212 (for non-DoD acquisitions).
|
||||
|
||||
11.0 MISCELLANEOUS
|
||||
|
||||
This License represents the complete agreement concerning subject
|
||||
matter hereof. If any provision of this License is held to be
|
||||
unenforceable, such provision shall be reformed only to the extent
|
||||
necessary to make it enforceable. This License shall be governed by
|
||||
California law provisions (except to the extent applicable law, if any,
|
||||
provides otherwise), excluding its conflict-of-law provisions. With
|
||||
respect to disputes in which at least one party is a citizen of, or an
|
||||
entity chartered or registered to do business in the United States of
|
||||
America, any litigation relating to this License shall be subject to
|
||||
the jurisdiction of the Federal Courts of the Northern District of
|
||||
California, with venue lying in Santa Clara County, California, with
|
||||
the losing party responsible for costs, including without limitation,
|
||||
court costs and reasonable attorneys' fees and expenses. The
|
||||
application of the United Nations Convention on Contracts for the
|
||||
International Sale of Goods is expressly excluded. Any law or
|
||||
regulation which provides that the language of a contract shall be
|
||||
construed against the drafter shall not apply to this License.
|
||||
|
||||
EXHIBIT A - Sun Standards License
|
||||
"The contents of this file are subject to the Sun Standards
|
||||
License Version 1.1 (the "License");
|
||||
You may not use this file except in compliance with the
|
||||
License. You may obtain a copy of the
|
||||
License at _______________________________.
|
||||
|
||||
Software distributed under the License is distributed on
|
||||
an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
|
||||
express or implied. See the License for the specific
|
||||
language governing rights and limitations under the License.
|
||||
|
||||
The Original Code is ______________________________________.
|
||||
|
||||
The Initial Developer of the Original Code is:
|
||||
InMon Corp.
|
||||
|
||||
Portions created by: _______________________________________
|
||||
|
||||
are Copyright (C): _______________________________________
|
||||
|
||||
All Rights Reserved.
|
||||
|
||||
Contributor(s): _______________________________________
|
||||
|
||||
EXHIBIT B - Standards
|
||||
|
||||
The Standard is defined as the following:
|
||||
|
||||
sFlow Specification, located at
|
||||
[1]http://sflow.org/developers/specifications.php
|
||||
|
||||
References
|
||||
|
||||
1. http://sflow.org/developers/specifications.php
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Retrieved from http://www.inmon.com/technology/sflowlicense.txt, 2011-12-12:
|
||||
|
||||
LICENSE AGREEMENT
|
||||
|
||||
PLEASE READ THIS LICENSE AGREEMENT ("AGREEMENT") CAREFULLY BEFORE REPRODUCING OR IN ANY WAY
|
||||
UTILIZING THE sFlow(R) SOFTWARE ("SOFTWARE") AND/OR ANY ACCOMPANYING DOCUMENTATION
|
||||
("DOCUMENTATION") AND/OR THE RELATED SPECIFICATIONS ("SPECIFICATIONS"). YOUR REPRODUCTION
|
||||
OR USE OF THE SOFTWARE AND/OR THE DOCUMENTATION AND/OR THE SPECIFICATIONS CONSTITUTES YOUR
|
||||
ACCEPTANCE OF THE TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE TO BE BOUND
|
||||
BY THE TERMS AND CONDITIONS OF THIS AGREEMENT, YOU MAY NOT REPRODUCE OR IN ANY WAY UTILIZE
|
||||
THE SOFTWARE OR THE DOCUMENTATION OR THE SPECIFICATIONS.
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"Documentation" means the user manuals, training materials, and operating materials, if any,
|
||||
InMon provides to Licensee under this Agreement.
|
||||
|
||||
"InMon" means InMon Corporation, its affiliates and subsidiaries.
|
||||
|
||||
"Intellectual Property Rights" means any trade secrets, patents, including without
|
||||
limitation any patents covering the Software, copyrights, know-how, moral rights and
|
||||
similar rights of any type under the laws of any governmental authority, domestic or
|
||||
foreign, including all applications and registrations relating to any of the foregoing.
|
||||
|
||||
"Licensee Hardware" means all computers, routers, or other equipment owned or controlled by
|
||||
or on behalf of Licensee.
|
||||
|
||||
"Products" means any and all software applications, computers, routers, or other equipment
|
||||
manufactured by or on behalf of Licensee for the purpose of resale or lease to any other
|
||||
third party, or otherwise made available by Licensee free of charge.
|
||||
|
||||
"Software" means the sFlow(R) software programs, in source or binary code format, that
|
||||
Licensee licenses from InMon under this Agreement and any bug fixes or error corrections
|
||||
which InMon may provide to Licensee.
|
||||
|
||||
"Specifications" means the published specifications provided or otherwise made available by
|
||||
InMon at: http://www.sflow.org.
|
||||
|
||||
"Trademark" means InMon's "sFlow(R)" trademark.
|
||||
|
||||
2. License Grant.
|
||||
|
||||
2.1 Software, Documentation and Specifications License Grant. InMon hereby grants to
|
||||
Licensee, under all of InMon's Intellectual Property Rights therein, a perpetual (subject
|
||||
to InMon's termination rights under Section 7 below), nonexclusive, royalty-free, worldwide,
|
||||
transferable, sublicensable license, to: (i) use and reproduce the Software, the
|
||||
Documentation, and the Specifications; (ii) modify the Software; (iii) implement the
|
||||
Specifications in the Products; (iv) install the Software, or software in which the
|
||||
Specifications have been implemented, on Licensee Hardware and Products, and (v) distribute
|
||||
any Products that include the Software, the Documentation, or software in which the
|
||||
Specifications have been implemented.
|
||||
|
||||
2.2 Trademark License. InMon hereby grants to Licensee a perpetual (subject to InMon's
|
||||
termination rights under Section 7 below), nonexclusive, royalty-free, worldwide,
|
||||
transferable, sublicensable license to use the Trademark on or in connection with the
|
||||
Software, the Documentation, the Specifications and any software that implements the
|
||||
Specifications.
|
||||
|
||||
2.3 Restrictions. Licensee agrees that it will not use the Software in a way
|
||||
inconsistent with the license granted in Section 2.1. Further, Licensee agrees that, in
|
||||
exercising its rights under the license granted to it in this Agreement, Licensee will:
|
||||
(i) strictly adhere to and fully comply with the Specifications; (ii) use the Trademark,
|
||||
and no other mark, to identify the Software, the Documentation, the Specifications and any
|
||||
Products that implement the Specifications; (iii) place, in a font or graphic design
|
||||
designated by InMon, the phrase "sFlow(R)" on any technical documentation,
|
||||
sales/marketing materials, catalogs, or other such materials relating to products it
|
||||
manufactures or markets which it has configured to be compatible with the Software or
|
||||
otherwise implement the Specifications; (iv) in connection with any Products shipped to or
|
||||
sold in other countries that include the Software or any software that implements the
|
||||
Specifications, comply with the patent and trademark laws and practice of such other
|
||||
country; and (v) not alter or impair any acknowledgment of copyright or trademark rights of
|
||||
InMon that may appear in or on the Software, the Documentation or the Specifications. In
|
||||
the event InMon determines that Licensee is not complying with its obligations under
|
||||
clauses (i)-(v) above, InMon shall notify Licensee of such non-compliance, and if Licensee
|
||||
fails to correct such non-compliance within three (3) months, InMon may immediately
|
||||
terminate this Agreement as provided under paragraph 7 below and pursue any and all
|
||||
actions and remedies as it deems necessary, including, but not limited to breach of
|
||||
contract.
|
||||
|
||||
3. Ownership. Except for the license expressly granted in Section 2, Inmon hereby
|
||||
retains all right, title, and interest in and to the Trademark and all its Intellectual
|
||||
Property Rights in the Software, the Documentation and the Specifications. Licensee
|
||||
obtains no rights hereunder in the Trademark, Software, Documentation or Specifications by
|
||||
implication, estoppel or otherwise. Licensee acknowledges that the Trademark, Software,
|
||||
Documentation and Specifications are being licensed and not sold under this Agreement, and
|
||||
that this Agreement does not transfer title in the Trademark, Software, Documentation or
|
||||
Specifications, or any copy thereof, to Licensee.
|
||||
|
||||
4. Support. Inmon shall have no obligation under this Agreement to (a) supply
|
||||
maintenance or support, bug fixes or error corrections to the Licensed Software,
|
||||
(b) supply future versions of the Licensed Software or (c) provide Licensed Software
|
||||
development tools to Licensee.
|
||||
|
||||
5. Warranty. INMON HEREBY DISCLAIMS ALL WARRANTIES, EITHER EXPRESS, IMPLIED OR
|
||||
STATUTORY, WITH RESPECT TO THE TRADEMARK, THE SOFTWARE, THE DOCUMENTATION, THE
|
||||
SPECIFICATIONS. OR OTHERWISE, INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT OF ANY INTELLECTUAL
|
||||
PROPERTY RIGHTS.
|
||||
|
||||
6. Limitation of Liability. IN NO EVENT SHALL INMON OR ITS SUPPLIERS OR LICENSORS BE
|
||||
LIABLE FOR ANY CONSEQUENTIAL, INCIDENTAL, SPECIAL, INDIRECT OR EXEMPLARY DAMAGES WHATSOEVER,
|
||||
WHETHER RELATED TO OR ARISING OUT OF THIS AGREEMENT, THE TRADEMARK, THE SOFTWARE, THE
|
||||
DOCUMENTATION, THE SPECIFICATIONS, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, DAMAGES FOR
|
||||
LOSS OF PROFITS, BUSINESS INTERRUPTION, LOSS OF DATA, COSTS OF PROCUREMENT OF SUBSTITUTE
|
||||
GOODS OR SERVICES OR FOR ANY CLAIM OR DEMAND AGAINST LICENSEE BY ANY OTHER PARTY, OR OTHER
|
||||
PECUNIARY LOSS, EVEN IF INMON HAS BEEN ADVISED OF OR KNOWS OF THE POSSIBILITY OF SUCH
|
||||
DAMAGES.
|
||||
|
||||
7. Term and Termination. The term of this Agreement will begin on the Effective Date,
|
||||
which shall be deemed to be the date of delivery of the Software and/or Documentation and/or
|
||||
Specifications to Licensee, and shall continue indefinitely unless and until terminated by
|
||||
Licensee's giving written notice of termination to InMon, or by InMon pursuant to InMon's
|
||||
termination rights as set forth in Section 2.3 above. Upon any termination of this
|
||||
Agreement, Licensee shall cease exercising its license rights under this Agreement,
|
||||
including the right to distribute Products that incorporate the Software or Documentation
|
||||
or that implement the Specifications. The rights and obligations contained in Sections 1,
|
||||
3, 5, 6, 7, and 8 shall survive any termination of this Agreement.
|
||||
|
||||
8. General Provisions.
|
||||
|
||||
8.1 Assignment. This Agreement shall be binding upon and inure to the benefit of the
|
||||
parties hereto and their permitted successors and permitted assigns. InMon will have the
|
||||
right to assign this Agreement without notice to Licensee. Licensee may assign or transfer
|
||||
(whether by merger, operation of law or in any other manner) any of its rights or delegate
|
||||
any of its obligations hereunder without the prior written consent of InMon, provided the
|
||||
assignee assumes in writing all of Licensee's obligations hereunder.
|
||||
|
||||
8.2 Notices. All notices permitted or required under this Agreement shall be in
|
||||
writing and shall be delivered in person or mailed by first class, registered or certified
|
||||
mail, postage prepaid, to the address of the party specified in this Agreement or such
|
||||
other address as either party may specify in writing. Such notice shall be deemed to have
|
||||
been given upon receipt.
|
||||
|
||||
8.3 Non-Waiver. No term or provision hereof shall be deemed waived, and no breach
|
||||
excused, unless such waiver or consent shall be in writing and signed by the party claimed
|
||||
to have waived or consented. Any consent or waiver, whether express or implied, shall not
|
||||
constitute a consent or waiver of, or excuse for any separate, different or subsequent
|
||||
breach.
|
||||
|
||||
8.4 Independent Contractor. The parties' relationship shall be solely that of
|
||||
independent contractors, and nothing contained in this Agreement shall be construed to make
|
||||
either party an agent, partner, representative or principal of the other for any purpose.
|
||||
|
||||
8.5 Choice of Law and Forum. This Agreement shall be governed by and construed under
|
||||
the laws of the State of California, without giving effect to such state's conflict of laws
|
||||
principles. The parties hereby submit to the personal jurisdiction of, and agree that any
|
||||
legal proceeding with respect to or arising under this Agreement shall be brought in, the
|
||||
United States District Court for the Northern District of California or the state courts
|
||||
of the State of California for the County of San Francisco.
|
||||
|
||||
8.6 U.S. Government Licenses. The Software and Documentation are considered a
|
||||
"commercial item" as that term is defined at 48 C.F.R 2.101, or "commercial computer
|
||||
software" and "commercial computer software documentation" as such terms are used in
|
||||
48 C.F.R 12.212 of the Federal Acquisition Regulations and its successors, and
|
||||
48 C.F.R. 227.7202 of the DoD FAR Supplement and its successors.
|
||||
|
||||
8.7 Severability. If any provision of this Agreement is held to be unenforceable under
|
||||
applicable law, then such provision shall be excluded from this Agreement and the balance
|
||||
of this Agreement shall be interpreted as if such provision were so excluded and shall be
|
||||
enforceable in accordance with its terms. The court in its discretion may substitute for
|
||||
the excluded provision an enforceable provision which in economic substance reasonably
|
||||
approximates the excluded provision.
|
||||
|
||||
8.8 Compliance With Law. Licensee shall comply with all applicable laws and
|
||||
regulations (including privacy laws and regulations) having application to or governing its
|
||||
use and/or operation of the Software and agrees to indemnify and hold InMon harmless from
|
||||
and against any claims, damages, losses or obligations suffered or incurred by InMon
|
||||
arising from its failure to so comply.
|
||||
|
||||
8.9 Entire Agreement; Amendment. This Agreement constitutes the final, complete and
|
||||
entire agreement between the parties with respect to the subject matter hereof, and
|
||||
supersedes any previous proposals, negotiations, agreements, or arrangements, whether
|
||||
verbal or written, made between the parties with respect to such subject matter. This
|
||||
Agreement shall control over any additional or conflicting terms in any of Licensee's
|
||||
purchase orders or other business forms. This Agreement may only be amended or modified
|
||||
by mutual agreement of authorized representatives of the parties in writing.
|
||||
|
||||
InMon Corp.
|
||||
580 California Street, 5th Floor, San Francisco, CA 94104
|
||||
Phone: (415) 283-3260
|
||||
URL: www.inmon.com
|
||||
Email: info@inmon.com
|
|
@ -1,716 +0,0 @@
|
|||
The original sources for this package can be found at:
|
||||
|
||||
http://openvswitch.org/
|
||||
|
||||
Upstream Authors (from AUTHORS):
|
||||
|
||||
%AUTHORS%
|
||||
|
||||
Upstream Copyright Holders:
|
||||
|
||||
Copyright (c) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Nicira, Inc.
|
||||
Copyright (c) 2010 Jean Tourrilhes - HP-Labs.
|
||||
Copyright (c) 2008,2009,2010 Citrix Systems, Inc.
|
||||
and authors listed above.
|
||||
Copyright (c) 2011 Gaetano Catalli
|
||||
Copyright (C) 2000-2003 Geoffrey Wossum (gwossum@acm.org)
|
||||
Copyright (C) 2000 The NetBSD Foundation, Inc.
|
||||
Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
|
||||
Copyright (c) 1982, 1986, 1990, 1993 The Regents of the University of California.
|
||||
Copyright (c) 2008, 2012 Vincent Bernat <bernat@luffy.cx>
|
||||
Copyright (c) 2014 Michael Chapman
|
||||
Copyright (c) 2014 WindRiver, Inc.
|
||||
Copyright (c) 2014 Avaya, Inc.
|
||||
|
||||
License:
|
||||
|
||||
* The following components are licensed under the
|
||||
GNU Lesser General Public License version 2.1 only
|
||||
with the exception clause below as a pre-amble.
|
||||
|
||||
xenserver/etc_xensource_scripts_vif
|
||||
xenserver/opt_xensource_libexec_InterfaceReconfigure.py
|
||||
xenserver/opt_xensource_libexec_InterfaceReconfigureBridge.py
|
||||
xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py
|
||||
xenserver/opt_xensource_libexec_interface-reconfigure
|
||||
xenserver/usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py
|
||||
|
||||
* These components are only distributed in the source package.
|
||||
They do not appear in any binary packages.
|
||||
|
||||
On Debian systems, the complete text of the
|
||||
GNU Lesser General Public License version 2.1 can be found in
|
||||
`/usr/share/common-licenses/LGPL-2.1'
|
||||
|
||||
The exception clause pre-amble reads:
|
||||
|
||||
As a special exception to the GNU Lesser General Public License, you
|
||||
may link, statically or dynamically, a "work that uses the Library"
|
||||
with a publicly distributed version of the Library to produce an
|
||||
executable file containing portions of the Library, and distribute
|
||||
that executable file under terms of your choice, without any of the
|
||||
additional requirements listed in clause 6 of the GNU Lesser General
|
||||
Public License. By "a publicly distributed version of the Library",
|
||||
we mean either the unmodified Library as distributed, or a
|
||||
modified version of the Library that is distributed under the
|
||||
conditions defined in clause 3 of the GNU Library General Public
|
||||
License. This exception does not however invalidate any other reasons
|
||||
why the executable file might be covered by the GNU Lesser General
|
||||
Public License.
|
||||
|
||||
* The following components are licensed under the
|
||||
GNU Lesser General Public License version 2.1.
|
||||
|
||||
utilities/bugtool/ovs-bugtool
|
||||
utilities/bugtool/ovs-bugtool-*
|
||||
utilities/bugtool/plugins/kernel-info/openvswitch.xml
|
||||
utilities/bugtool/plugins/network-status/openvswitch.xml
|
||||
utilities/bugtool/plugins/system-configuration.xml
|
||||
utilities/bugtool/plugins/system-configuration/openvswitch.xml
|
||||
|
||||
On Debian systems, the complete text of the
|
||||
GNU Lesser General Public License version 2.1 can be found in
|
||||
`/usr/share/common-licenses/LGPL-2.1'
|
||||
|
||||
* The following component is licensed under the GNU General Public License
|
||||
version 2.
|
||||
|
||||
datapath/
|
||||
|
||||
On Debian systems, the complete text of the GNU General Public License
|
||||
version 2 can be found in `/usr/share/common-licenses/GPL-2'
|
||||
|
||||
* The following file is licensed under the GNU General Public License
|
||||
version 2.
|
||||
|
||||
build-aux/cccl
|
||||
|
||||
* The following files are licensed under the 2-clause BSD license.
|
||||
|
||||
lib/getopt_long.c
|
||||
include/windows/getopt.h
|
||||
|
||||
* The following files are licensed under the 3-clause BSD-license
|
||||
|
||||
include/windows/netinet/icmp6.h
|
||||
include/windows/netinet/ip6.h
|
||||
lib/strsep.c
|
||||
|
||||
* The following components are dual-licensed under the
|
||||
GNU General Public License version 2 and the Apache License Version 2.0.
|
||||
|
||||
datapath/linux/compat/include/linux/openvswitch.h
|
||||
|
||||
On Debian systems, the complete text of the GNU General Public License
|
||||
version 2 can be found in `/usr/share/common-licenses/GPL-2'.
|
||||
On Debian systems, the complete text of the Apache License version 2.0
|
||||
can be found in '/usr/share/common-licenses/Apache-2.0'.
|
||||
|
||||
* The following components are licensed under the terms of either the
|
||||
Sun Industry Standard Source License 1.1 or the InMon sFlow License:
|
||||
|
||||
lib/sflow.h
|
||||
lib/sflow_agent.c
|
||||
lib/sflow_api.h
|
||||
lib/sflow_poller.c
|
||||
lib/sflow_receiver.c
|
||||
lib/sflow_sampler.c
|
||||
|
||||
These licenses are available, respectively, the following URLs:
|
||||
|
||||
http://host-sflow.sourceforge.net/sissl.html
|
||||
http://www.inmon.com/technology/sflowlicense.txt
|
||||
|
||||
The full text of each license is also appended to the end of this
|
||||
file.
|
||||
|
||||
* The following components are licensed for use as desired without restriction:
|
||||
|
||||
lib/crc32c.c
|
||||
|
||||
* The following components are licensed under the
|
||||
Python Software Foundation License Version 2.
|
||||
|
||||
python/compat/uuid.py
|
||||
python/compat/argparse.py
|
||||
|
||||
* These components are only distributed in the source package.
|
||||
They do not appear in any binary packages.
|
||||
|
||||
PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
|
||||
--------------------------------------------
|
||||
|
||||
1. This LICENSE AGREEMENT is between the Python Software Foundation
|
||||
("PSF"), and the Individual or Organization ("Licensee") accessing and
|
||||
otherwise using this software ("Python") in source or binary form and
|
||||
its associated documentation.
|
||||
|
||||
2. Subject to the terms and conditions of this License Agreement, PSF
|
||||
hereby grants Licensee a nonexclusive, royalty-free, world-wide
|
||||
license to reproduce, analyze, test, perform and/or display publicly,
|
||||
prepare derivative works, distribute, and otherwise use Python
|
||||
alone or in any derivative version, provided, however, that PSF's
|
||||
License Agreement and PSF's notice of copyright, i.e., "Copyright (c)
|
||||
2001, 2002, 2003, 2004, 2005, 2006, 2007 Python Software Foundation;
|
||||
All Rights Reserved" are retained in Python alone or in any derivative
|
||||
version prepared by Licensee.
|
||||
|
||||
3. In the event Licensee prepares a derivative work that is based on
|
||||
or incorporates Python or any part thereof, and wants to make
|
||||
the derivative work available to others as provided herein, then
|
||||
Licensee hereby agrees to include in any such work a brief summary of
|
||||
the changes made to Python.
|
||||
|
||||
4. PSF is making Python available to Licensee on an "AS IS"
|
||||
basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
|
||||
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
|
||||
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
|
||||
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
|
||||
INFRINGE ANY THIRD PARTY RIGHTS.
|
||||
|
||||
5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
|
||||
FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
|
||||
A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
|
||||
OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
|
||||
|
||||
6. This License Agreement will automatically terminate upon a material
|
||||
breach of its terms and conditions.
|
||||
|
||||
7. Nothing in this License Agreement shall be deemed to create any
|
||||
relationship of agency, partnership, or joint venture between PSF and
|
||||
Licensee. This License Agreement does not grant permission to use PSF
|
||||
trademarks or trade name in a trademark sense to endorse or promote
|
||||
products or services of Licensee, or any third party.
|
||||
|
||||
8. By copying, installing or otherwise using Python, Licensee
|
||||
agrees to be bound by the terms and conditions of this License
|
||||
Agreement.
|
||||
|
||||
* lib/ovs.tmac in the source distribution, and manpages in the
|
||||
binaries, includes troff macros from groff 1.21 that contain the
|
||||
following notice:
|
||||
|
||||
.\" an-ext.tmac
|
||||
.\"
|
||||
.\" Written by Eric S. Raymond <esr@thyrsus.com>
|
||||
.\" Werner Lemberg <wl@gnu.org>
|
||||
.\"
|
||||
.\" Version 2007-Feb-02
|
||||
.\"
|
||||
.\" Copyright (C) 2007, 2009, 2011 Free Software Foundation, Inc.
|
||||
.\" You may freely use, modify and/or distribute this file.
|
||||
|
||||
* m4/absolute-header.m4, by Derek Price, and m4/include_next.m4, by
|
||||
Paul Eggert and Derek Price bear the following notices:
|
||||
|
||||
Copyright (C) 2006-2013 Free Software Foundation, Inc.
|
||||
This file is free software; the Free Software Foundation
|
||||
gives unlimited permission to copy and/or distribute it,
|
||||
with or without modifications, as long as this notice is preserved.
|
||||
|
||||
* The following files are licensed under the ISC-license
|
||||
|
||||
lib/lldp/aa-structs.h
|
||||
lib/lldp/lldpd.c
|
||||
lib/lldp/lldpd.h
|
||||
lib/lldp/lldpd-structs.c
|
||||
lib/lldp/lldpd-structs.h
|
||||
lib/lldp/lldp.c
|
||||
lib/lldp/lldp-tlv.h
|
||||
lib/lldp/lldp-const.h
|
||||
|
||||
* All other components of this package are licensed under
|
||||
The Apache License Version 2.0.
|
||||
|
||||
On Debian systems, the complete text of the Apache License version 2.0
|
||||
can be found in '/usr/share/common-licenses/Apache-2.0'.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Retrieved from http://host-sflow.sourceforge.net/sissl.html, 2011-12-12:
|
||||
|
||||
Sun Industry Standards Source License - Version 1.1
|
||||
|
||||
1.0 DEFINITIONS
|
||||
|
||||
1.1 "Commercial Use" means distribution or otherwise making the
|
||||
Original Code available to a third party.
|
||||
|
||||
1.2 "Contributor Version" means the combination of the Original Code,
|
||||
and the Modifications made by that particular Contributor.
|
||||
|
||||
1.3 "Electronic Distribution Mechanism" means a mechanism generally
|
||||
accepted in the software development community for the electronic
|
||||
transfer of data.
|
||||
|
||||
1.4 "Executable" means Original Code in any form other than Source
|
||||
Code.
|
||||
|
||||
1.5 "Initial Developer" means the individual or entity identified as
|
||||
the Initial Developer in the Source Code notice required by Exhibit A.
|
||||
|
||||
1.6 "Larger Work" means a work which combines Original Code or portions
|
||||
thereof with code not governed by the terms of this License.
|
||||
|
||||
1.7 "License" means this document.
|
||||
|
||||
1.8 "Licensable" means having the right to grant, to the maximum extent
|
||||
possible, whether at the time of the initial grant or subsequently
|
||||
acquired, any and all of the rights conveyed herein.
|
||||
|
||||
1.9 "Modifications" means any addition to or deletion from the
|
||||
substance or structure of either the Original Code or any previous
|
||||
Modifications. A Modification is:
|
||||
|
||||
A. Any addition to or deletion from the contents of a file containing
|
||||
Original Code or previous Modifications.
|
||||
|
||||
B. Any new file that contains any part of the Original Code or previous
|
||||
Modifications.
|
||||
|
||||
1.10 "Original Code" means Source Code of computer software code which
|
||||
is described in the Source Code notice required by Exhibit A as
|
||||
Original Code.
|
||||
|
||||
1.11 "Patent Claims" means any patent claim(s), now owned or hereafter
|
||||
acquired, including without limitation, method, process, and apparatus
|
||||
claims, in any patent Licensable by grantor.
|
||||
|
||||
1.12 "Source Code" means the preferred form of the Original Code for
|
||||
making modifications to it, including all modules it contains, plus any
|
||||
associated interface definition files, or scripts used to control
|
||||
compilation and installation of an Executable.
|
||||
|
||||
1.13 "Standards" means the standards identified in Exhibit B.
|
||||
|
||||
1.14 "You" (or "Your") means an individual or a legal entity exercising
|
||||
rights under, and complying with all of the terms of, this License or a
|
||||
future version of this License issued under Section 6.1. For legal
|
||||
entities, "You'' includes any entity which controls, is controlled by,
|
||||
or is under common control with You. For purposes of this definition,
|
||||
"control'' means (a) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (b) ownership of more than fifty percent (50%) of the
|
||||
outstanding shares or beneficial ownership of such entity.
|
||||
|
||||
2.0 SOURCE CODE LICENSE
|
||||
|
||||
2.1 The Initial Developer Grant
|
||||
The Initial Developer hereby grants You a world-wide, royalty-free,
|
||||
non-exclusive license, subject to third party intellectual property
|
||||
claims:
|
||||
|
||||
(a) under intellectual property rights (other than patent or trademark)
|
||||
Licensable by Initial Developer to use, reproduce, modify, display,
|
||||
perform, sublicense and distribute the Original Code (or portions
|
||||
thereof) with or without Modifications, and/or as part of a Larger
|
||||
Work; and
|
||||
|
||||
(b) under Patents Claims infringed by the making, using or selling of
|
||||
Original Code, to make, have made, use, practice, sell, and offer for
|
||||
sale, and/or otherwise dispose of the Original Code (or portions
|
||||
thereof).
|
||||
|
||||
(c) the licenses granted in this Section 2.1(a) and (b) are effective
|
||||
on the date Initial Developer first distributes Original Code under the
|
||||
terms of this License.
|
||||
|
||||
(d) Notwithstanding Section 2.1(b) above, no patent license is granted:
|
||||
1) for code that You delete from the Original Code; 2) separate from
|
||||
the Original Code; or 3) for infringements caused by: i) the
|
||||
modification of the Original Code or ii) the combination of the
|
||||
Original Code with other software or devices, including but not limited
|
||||
to Modifications.
|
||||
3.0 DISTRIBUTION OBLIGATIONS
|
||||
|
||||
3.1 Application of License.
|
||||
The Source Code version of Original Code may be distributed only under
|
||||
the terms of this License or a future version of this License released
|
||||
under Section 6.1, and You must include a copy of this License with
|
||||
every copy of the Source Code You distribute. You may not offer or
|
||||
impose any terms on any Source Code version that alters or restricts
|
||||
the applicable version of this License or the recipients' rights
|
||||
hereunder. Your license for shipment of the Contributor Version is
|
||||
conditioned upon Your full compliance with this Section. The
|
||||
Modifications which You create must comply with all requirements set
|
||||
out by the Standards body in effect one hundred twenty (120) days
|
||||
before You ship the Contributor Version. In the event that the
|
||||
Modifications do not meet such requirements, You agree to publish
|
||||
either (i) any deviation from the Standards protocol resulting from
|
||||
implementation of Your Modifications and a reference implementation of
|
||||
Your Modifications or (ii) Your Modifications in Source Code form, and
|
||||
to make any such deviation and reference implementation or
|
||||
Modifications available to all third parties under the same terms as
|
||||
this license on a royalty free basis within thirty (30) days of Your
|
||||
first customer shipment of Your Modifications.
|
||||
|
||||
3.2 Required Notices.
|
||||
You must duplicate the notice in Exhibit A in each file of the Source
|
||||
Code. If it is not possible to put such notice in a particular Source
|
||||
Code file due to its structure, then You must include such notice in a
|
||||
location (such as a relevant directory) where a user would be likely to
|
||||
look for such a notice. If You created one or more Modification(s) You
|
||||
may add Your name as a Contributor to the notice described in Exhibit
|
||||
A. You must also duplicate this License in any documentation for the
|
||||
Source Code where You describe recipients' rights or ownership rights
|
||||
relating to Initial Code. You may choose to offer, and to charge a fee
|
||||
for, warranty, support, indemnity or liability obligations to one or
|
||||
more recipients of Your version of the Code. However, You may do so
|
||||
only on Your own behalf, and not on behalf of the Initial Developer.
|
||||
You must make it absolutely clear than any such warranty, support,
|
||||
indemnity or liability obligation is offered by You alone, and You
|
||||
hereby agree to indemnify the Initial Developer for any liability
|
||||
incurred by the Initial Developer as a result of warranty, support,
|
||||
indemnity or liability terms You offer.
|
||||
|
||||
3.3 Distribution of Executable Versions.
|
||||
You may distribute Original Code in Executable and Source form only if
|
||||
the requirements of Sections 3.1 and 3.2 have been met for that
|
||||
Original Code, and if You include a notice stating that the Source Code
|
||||
version of the Original Code is available under the terms of this
|
||||
License. The notice must be conspicuously included in any notice in an
|
||||
Executable or Source versions, related documentation or collateral in
|
||||
which You describe recipients' rights relating to the Original Code.
|
||||
You may distribute the Executable and Source versions of Your version
|
||||
of the Code or ownership rights under a license of Your choice, which
|
||||
may contain terms different from this License, provided that You are in
|
||||
compliance with the terms of this License. If You distribute the
|
||||
Executable and Source versions under a different license You must make
|
||||
it absolutely clear that any terms which differ from this License are
|
||||
offered by You alone, not by the Initial Developer. You hereby agree to
|
||||
indemnify the Initial Developer for any liability incurred by the
|
||||
Initial Developer as a result of any such terms You offer.
|
||||
|
||||
3.4 Larger Works.
|
||||
You may create a Larger Work by combining Original Code with other code
|
||||
not governed by the terms of this License and distribute the Larger
|
||||
Work as a single product. In such a case, You must make sure the
|
||||
requirements of this License are fulfilled for the Original Code.
|
||||
|
||||
4.0 INABILITY TO COMPLY DUE TO STATUTE OR REGULATION
|
||||
|
||||
If it is impossible for You to comply with any of the terms of this
|
||||
License with respect to some or all of the Original Code due to
|
||||
statute, judicial order, or regulation then You must: (a) comply with
|
||||
the terms of this License to the maximum extent possible; and (b)
|
||||
describe the limitations and the code they affect. Such description
|
||||
must be included in the LEGAL file described in Section 3.2 and must be
|
||||
included with all distributions of the Source Code. Except to the
|
||||
extent prohibited by statute or regulation, such description must be
|
||||
sufficiently detailed for a recipient of ordinary skill to be able to
|
||||
understand it.
|
||||
|
||||
5.0 APPLICATION OF THIS LICENSE
|
||||
|
||||
This License applies to code to which the Initial Developer has
|
||||
attached the notice in Exhibit A and to related Modifications as set
|
||||
out in Section 3.1.
|
||||
|
||||
6.0 VERSIONS OF THE LICENSE
|
||||
|
||||
6.1 New Versions.
|
||||
Sun may publish revised and/or new versions of the License from time to
|
||||
time. Each version will be given a distinguishing version number.
|
||||
|
||||
6.2 Effect of New Versions.
|
||||
Once Original Code has been published under a particular version of the
|
||||
License, You may always continue to use it under the terms of that
|
||||
version. You may also choose to use such Original Code under the terms
|
||||
of any subsequent version of the License published by Sun. No one other
|
||||
than Sun has the right to modify the terms applicable to Original Code.
|
||||
|
||||
7.0 DISCLAIMER OF WARRANTY
|
||||
|
||||
ORIGINAL CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||
WITHOUT LIMITATION, WARRANTIES THAT THE ORIGINAL CODE IS FREE OF
|
||||
DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
|
||||
THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE ORIGINAL CODE
|
||||
IS WITH YOU. SHOULD ANY ORIGINAL CODE PROVE DEFECTIVE IN ANY RESPECT,
|
||||
YOU (NOT THE INITIAL DEVELOPER) ASSUME THE COST OF ANY NECESSARY
|
||||
SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY
|
||||
CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY ORIGINAL
|
||||
CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
|
||||
|
||||
8.0 TERMINATION
|
||||
|
||||
8.1 This License and the rights granted hereunder will terminate
|
||||
automatically if You fail to comply with terms herein and fail to cure
|
||||
such breach within 30 days of becoming aware of the breach. All
|
||||
sublicenses to the Original Code which are properly granted shall
|
||||
survive any termination of this License. Provisions which, by their
|
||||
nature, must remain in effect beyond the termination of this License
|
||||
shall survive.
|
||||
|
||||
8.2 In the event of termination under Section 8.1 above, all end user
|
||||
license agreements (excluding distributors and resellers) which have
|
||||
been validly granted by You or any distributor hereunder prior to
|
||||
termination shall survive termination.
|
||||
|
||||
9.0 LIMIT OF LIABILITY
|
||||
|
||||
UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
|
||||
(INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
|
||||
DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF ORIGINAL CODE,
|
||||
OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY
|
||||
INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
|
||||
CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
|
||||
WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
|
||||
COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
|
||||
INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
|
||||
LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
|
||||
RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
|
||||
PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
|
||||
EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS
|
||||
EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
10.0 U.S. GOVERNMENT END USERS
|
||||
|
||||
U.S. Government: If this Software is being acquired by or on behalf of
|
||||
the U.S. Government or by a U.S. Government prime contractor or
|
||||
subcontractor (at any tier), then the Government's rights in the
|
||||
Software and accompanying documentation shall be only as set forth in
|
||||
this license; this is in accordance with 48 C.F.R. 227.7201 through
|
||||
227.7202-4 (for Department of Defense (DoD) acquisitions) and with 48
|
||||
C.F.R. 2.101 and 12.212 (for non-DoD acquisitions).
|
||||
|
||||
11.0 MISCELLANEOUS
|
||||
|
||||
This License represents the complete agreement concerning subject
|
||||
matter hereof. If any provision of this License is held to be
|
||||
unenforceable, such provision shall be reformed only to the extent
|
||||
necessary to make it enforceable. This License shall be governed by
|
||||
California law provisions (except to the extent applicable law, if any,
|
||||
provides otherwise), excluding its conflict-of-law provisions. With
|
||||
respect to disputes in which at least one party is a citizen of, or an
|
||||
entity chartered or registered to do business in the United States of
|
||||
America, any litigation relating to this License shall be subject to
|
||||
the jurisdiction of the Federal Courts of the Northern District of
|
||||
California, with venue lying in Santa Clara County, California, with
|
||||
the losing party responsible for costs, including without limitation,
|
||||
court costs and reasonable attorneys' fees and expenses. The
|
||||
application of the United Nations Convention on Contracts for the
|
||||
International Sale of Goods is expressly excluded. Any law or
|
||||
regulation which provides that the language of a contract shall be
|
||||
construed against the drafter shall not apply to this License.
|
||||
|
||||
EXHIBIT A - Sun Standards License
|
||||
"The contents of this file are subject to the Sun Standards
|
||||
License Version 1.1 (the "License");
|
||||
You may not use this file except in compliance with the
|
||||
License. You may obtain a copy of the
|
||||
License at _______________________________.
|
||||
|
||||
Software distributed under the License is distributed on
|
||||
an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
|
||||
express or implied. See the License for the specific
|
||||
language governing rights and limitations under the License.
|
||||
|
||||
The Original Code is ______________________________________.
|
||||
|
||||
The Initial Developer of the Original Code is:
|
||||
InMon Corp.
|
||||
|
||||
Portions created by: _______________________________________
|
||||
|
||||
are Copyright (C): _______________________________________
|
||||
|
||||
All Rights Reserved.
|
||||
|
||||
Contributor(s): _______________________________________
|
||||
|
||||
EXHIBIT B - Standards
|
||||
|
||||
The Standard is defined as the following:
|
||||
|
||||
sFlow Specification, located at
|
||||
[1]http://sflow.org/developers/specifications.php
|
||||
|
||||
References
|
||||
|
||||
1. http://sflow.org/developers/specifications.php
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Retrieved from http://www.inmon.com/technology/sflowlicense.txt, 2011-12-12:
|
||||
|
||||
LICENSE AGREEMENT
|
||||
|
||||
PLEASE READ THIS LICENSE AGREEMENT ("AGREEMENT") CAREFULLY BEFORE REPRODUCING OR IN ANY WAY
|
||||
UTILIZING THE sFlow(R) SOFTWARE ("SOFTWARE") AND/OR ANY ACCOMPANYING DOCUMENTATION
|
||||
("DOCUMENTATION") AND/OR THE RELATED SPECIFICATIONS ("SPECIFICATIONS"). YOUR REPRODUCTION
|
||||
OR USE OF THE SOFTWARE AND/OR THE DOCUMENTATION AND/OR THE SPECIFICATIONS CONSTITUTES YOUR
|
||||
ACCEPTANCE OF THE TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE TO BE BOUND
|
||||
BY THE TERMS AND CONDITIONS OF THIS AGREEMENT, YOU MAY NOT REPRODUCE OR IN ANY WAY UTILIZE
|
||||
THE SOFTWARE OR THE DOCUMENTATION OR THE SPECIFICATIONS.
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"Documentation" means the user manuals, training materials, and operating materials, if any,
|
||||
InMon provides to Licensee under this Agreement.
|
||||
|
||||
"InMon" means InMon Corporation, its affiliates and subsidiaries.
|
||||
|
||||
"Intellectual Property Rights" means any trade secrets, patents, including without
|
||||
limitation any patents covering the Software, copyrights, know-how, moral rights and
|
||||
similar rights of any type under the laws of any governmental authority, domestic or
|
||||
foreign, including all applications and registrations relating to any of the foregoing.
|
||||
|
||||
"Licensee Hardware" means all computers, routers, or other equipment owned or controlled by
|
||||
or on behalf of Licensee.
|
||||
|
||||
"Products" means any and all software applications, computers, routers, or other equipment
|
||||
manufactured by or on behalf of Licensee for the purpose of resale or lease to any other
|
||||
third party, or otherwise made available by Licensee free of charge.
|
||||
|
||||
"Software" means the sFlow(R) software programs, in source or binary code format, that
|
||||
Licensee licenses from InMon under this Agreement and any bug fixes or error corrections
|
||||
which InMon may provide to Licensee.
|
||||
|
||||
"Specifications" means the published specifications provided or otherwise made available by
|
||||
InMon at: http://www.sflow.org.
|
||||
|
||||
"Trademark" means InMon's "sFlow(R)" trademark.
|
||||
|
||||
2. License Grant.
|
||||
|
||||
2.1 Software, Documentation and Specifications License Grant. InMon hereby grants to
|
||||
Licensee, under all of InMon's Intellectual Property Rights therein, a perpetual (subject
|
||||
to InMon's termination rights under Section 7 below), nonexclusive, royalty-free, worldwide,
|
||||
transferable, sublicensable license, to: (i) use and reproduce the Software, the
|
||||
Documentation, and the Specifications; (ii) modify the Software; (iii) implement the
|
||||
Specifications in the Products; (iv) install the Software, or software in which the
|
||||
Specifications have been implemented, on Licensee Hardware and Products, and (v) distribute
|
||||
any Products that include the Software, the Documentation, or software in which the
|
||||
Specifications have been implemented.
|
||||
|
||||
2.2 Trademark License. InMon hereby grants to Licensee a perpetual (subject to InMon's
|
||||
termination rights under Section 7 below), nonexclusive, royalty-free, worldwide,
|
||||
transferable, sublicensable license to use the Trademark on or in connection with the
|
||||
Software, the Documentation, the Specifications and any software that implements the
|
||||
Specifications.
|
||||
|
||||
2.3 Restrictions. Licensee agrees that it will not use the Software in a way
|
||||
inconsistent with the license granted in Section 2.1. Further, Licensee agrees that, in
|
||||
exercising its rights under the license granted to it in this Agreement, Licensee will:
|
||||
(i) strictly adhere to and fully comply with the Specifications; (ii) use the Trademark,
|
||||
and no other mark, to identify the Software, the Documentation, the Specifications and any
|
||||
Products that implement the Specifications; (iii) place, in a font or graphic design
|
||||
designated by InMon, the phrase "sFlow(R)" on any technical documentation,
|
||||
sales/marketing materials, catalogs, or other such materials relating to products it
|
||||
manufactures or markets which it has configured to be compatible with the Software or
|
||||
otherwise implement the Specifications; (iv) in connection with any Products shipped to or
|
||||
sold in other countries that include the Software or any software that implements the
|
||||
Specifications, comply with the patent and trademark laws and practice of such other
|
||||
country; and (v) not alter or impair any acknowledgment of copyright or trademark rights of
|
||||
InMon that may appear in or on the Software, the Documentation or the Specifications. In
|
||||
the event InMon determines that Licensee is not complying with its obligations under
|
||||
clauses (i)-(v) above, InMon shall notify Licensee of such non-compliance, and if Licensee
|
||||
fails to correct such non-compliance within three (3) months, InMon may immediately
|
||||
terminate this Agreement as provided under paragraph 7 below and pursue any and all
|
||||
actions and remedies as it deems necessary, including, but not limited to breach of
|
||||
contract.
|
||||
|
||||
3. Ownership. Except for the license expressly granted in Section 2, Inmon hereby
|
||||
retains all right, title, and interest in and to the Trademark and all its Intellectual
|
||||
Property Rights in the Software, the Documentation and the Specifications. Licensee
|
||||
obtains no rights hereunder in the Trademark, Software, Documentation or Specifications by
|
||||
implication, estoppel or otherwise. Licensee acknowledges that the Trademark, Software,
|
||||
Documentation and Specifications are being licensed and not sold under this Agreement, and
|
||||
that this Agreement does not transfer title in the Trademark, Software, Documentation or
|
||||
Specifications, or any copy thereof, to Licensee.
|
||||
|
||||
4. Support. Inmon shall have no obligation under this Agreement to (a) supply
|
||||
maintenance or support, bug fixes or error corrections to the Licensed Software,
|
||||
(b) supply future versions of the Licensed Software or (c) provide Licensed Software
|
||||
development tools to Licensee.
|
||||
|
||||
5. Warranty. INMON HEREBY DISCLAIMS ALL WARRANTIES, EITHER EXPRESS, IMPLIED OR
|
||||
STATUTORY, WITH RESPECT TO THE TRADEMARK, THE SOFTWARE, THE DOCUMENTATION, THE
|
||||
SPECIFICATIONS. OR OTHERWISE, INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT OF ANY INTELLECTUAL
|
||||
PROPERTY RIGHTS.
|
||||
|
||||
6. Limitation of Liability. IN NO EVENT SHALL INMON OR ITS SUPPLIERS OR LICENSORS BE
|
||||
LIABLE FOR ANY CONSEQUENTIAL, INCIDENTAL, SPECIAL, INDIRECT OR EXEMPLARY DAMAGES WHATSOEVER,
|
||||
WHETHER RELATED TO OR ARISING OUT OF THIS AGREEMENT, THE TRADEMARK, THE SOFTWARE, THE
|
||||
DOCUMENTATION, THE SPECIFICATIONS, OR OTHERWISE, INCLUDING WITHOUT LIMITATION, DAMAGES FOR
|
||||
LOSS OF PROFITS, BUSINESS INTERRUPTION, LOSS OF DATA, COSTS OF PROCUREMENT OF SUBSTITUTE
|
||||
GOODS OR SERVICES OR FOR ANY CLAIM OR DEMAND AGAINST LICENSEE BY ANY OTHER PARTY, OR OTHER
|
||||
PECUNIARY LOSS, EVEN IF INMON HAS BEEN ADVISED OF OR KNOWS OF THE POSSIBILITY OF SUCH
|
||||
DAMAGES.
|
||||
|
||||
7. Term and Termination. The term of this Agreement will begin on the Effective Date,
|
||||
which shall be deemed to be the date of delivery of the Software and/or Documentation and/or
|
||||
Specifications to Licensee, and shall continue indefinitely unless and until terminated by
|
||||
Licensee's giving written notice of termination to InMon, or by InMon pursuant to InMon's
|
||||
termination rights as set forth in Section 2.3 above. Upon any termination of this
|
||||
Agreement, Licensee shall cease exercising its license rights under this Agreement,
|
||||
including the right to distribute Products that incorporate the Software or Documentation
|
||||
or that implement the Specifications. The rights and obligations contained in Sections 1,
|
||||
3, 5, 6, 7, and 8 shall survive any termination of this Agreement.
|
||||
|
||||
8. General Provisions.
|
||||
|
||||
8.1 Assignment. This Agreement shall be binding upon and inure to the benefit of the
|
||||
parties hereto and their permitted successors and permitted assigns. InMon will have the
|
||||
right to assign this Agreement without notice to Licensee. Licensee may assign or transfer
|
||||
(whether by merger, operation of law or in any other manner) any of its rights or delegate
|
||||
any of its obligations hereunder without the prior written consent of InMon, provided the
|
||||
assignee assumes in writing all of Licensee's obligations hereunder.
|
||||
|
||||
8.2 Notices. All notices permitted or required under this Agreement shall be in
|
||||
writing and shall be delivered in person or mailed by first class, registered or certified
|
||||
mail, postage prepaid, to the address of the party specified in this Agreement or such
|
||||
other address as either party may specify in writing. Such notice shall be deemed to have
|
||||
been given upon receipt.
|
||||
|
||||
8.3 Non-Waiver. No term or provision hereof shall be deemed waived, and no breach
|
||||
excused, unless such waiver or consent shall be in writing and signed by the party claimed
|
||||
to have waived or consented. Any consent or waiver, whether express or implied, shall not
|
||||
constitute a consent or waiver of, or excuse for any separate, different or subsequent
|
||||
breach.
|
||||
|
||||
8.4 Independent Contractor. The parties' relationship shall be solely that of
|
||||
independent contractors, and nothing contained in this Agreement shall be construed to make
|
||||
either party an agent, partner, representative or principal of the other for any purpose.
|
||||
|
||||
8.5 Choice of Law and Forum. This Agreement shall be governed by and construed under
|
||||
the laws of the State of California, without giving effect to such state's conflict of laws
|
||||
principles. The parties hereby submit to the personal jurisdiction of, and agree that any
|
||||
legal proceeding with respect to or arising under this Agreement shall be brought in, the
|
||||
United States District Court for the Northern District of California or the state courts
|
||||
of the State of California for the County of San Francisco.
|
||||
|
||||
8.6 U.S. Government Licenses. The Software and Documentation are considered a
|
||||
"commercial item" as that term is defined at 48 C.F.R 2.101, or "commercial computer
|
||||
software" and "commercial computer software documentation" as such terms are used in
|
||||
48 C.F.R 12.212 of the Federal Acquisition Regulations and its successors, and
|
||||
48 C.F.R. 227.7202 of the DoD FAR Supplement and its successors.
|
||||
|
||||
8.7 Severability. If any provision of this Agreement is held to be unenforceable under
|
||||
applicable law, then such provision shall be excluded from this Agreement and the balance
|
||||
of this Agreement shall be interpreted as if such provision were so excluded and shall be
|
||||
enforceable in accordance with its terms. The court in its discretion may substitute for
|
||||
the excluded provision an enforceable provision which in economic substance reasonably
|
||||
approximates the excluded provision.
|
||||
|
||||
8.8 Compliance With Law. Licensee shall comply with all applicable laws and
|
||||
regulations (including privacy laws and regulations) having application to or governing its
|
||||
use and/or operation of the Software and agrees to indemnify and hold InMon harmless from
|
||||
and against any claims, damages, losses or obligations suffered or incurred by InMon
|
||||
arising from its failure to so comply.
|
||||
|
||||
8.9 Entire Agreement; Amendment. This Agreement constitutes the final, complete and
|
||||
entire agreement between the parties with respect to the subject matter hereof, and
|
||||
supersedes any previous proposals, negotiations, agreements, or arrangements, whether
|
||||
verbal or written, made between the parties with respect to such subject matter. This
|
||||
Agreement shall control over any additional or conflicting terms in any of Licensee's
|
||||
purchase orders or other business forms. This Agreement may only be amended or modified
|
||||
by mutual agreement of authorized representatives of the parties in writing.
|
||||
|
||||
InMon Corp.
|
||||
580 California Street, 5th Floor, San Francisco, CA 94104
|
||||
Phone: (415) 283-3260
|
||||
URL: www.inmon.com
|
||||
Email: info@inmon.com
|
|
@ -1,42 +0,0 @@
|
|||
openvswitch-switch-dpdk
|
||||
-----------------------
|
||||
|
||||
This package provides a DPDK enabled version of the OpenvSwitch vswitchd
|
||||
binary; by default, the ovs-vswitchd binary from openvswitch-switch will
|
||||
be used:
|
||||
|
||||
$ update-alternatives --query ovs-vswitchd
|
||||
Name: ovs-vswitchd
|
||||
Link: /usr/sbin/ovs-vswitchd
|
||||
Status: auto
|
||||
Best: /usr/lib/openvswitch-switch/ovs-vswitchd
|
||||
Value: /usr/lib/openvswitch-switch/ovs-vswitchd
|
||||
|
||||
Alternative: /usr/lib/openvswitch-switch-dpdk/ovs-vswitchd-dpdk
|
||||
Priority: 50
|
||||
|
||||
Alternative: /usr/lib/openvswitch-switch/ovs-vswitchd
|
||||
Priority: 100
|
||||
|
||||
DPDK provides fast packet processing in userspace, and has some specific
|
||||
requirements in terms of system configuration - see the upstream
|
||||
documentation for more details:
|
||||
|
||||
/usr/share/doc/openvswitch-common/INSTALL.DPDK.md.gz
|
||||
|
||||
DPDK has a minimum CPU feature set of SSE3, so is not appropriate for all
|
||||
amd64 CPU types hence is not enabled by default.
|
||||
|
||||
To switch to the DPDK version:
|
||||
|
||||
sudo update-alternatives --set ovs-vswitchd \
|
||||
/usr/lib/openvswitch-switch-dpdk/ovs-vswitchd-dpdk
|
||||
sudo service openvswitch-switch restart
|
||||
|
||||
and to switch back:
|
||||
|
||||
sudo update-alternatives --set ovs-vswitchd \
|
||||
/usr/lib/openvswitch-switch/ovs-vswitchd
|
||||
sudo service openvswitch-switch restart
|
||||
|
||||
-- James Page <james.page@ubuntu.com> Tue, 21 Jul 2015 12:06:49 +0100
|
|
@ -1,10 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
update-alternatives --install /usr/sbin/ovs-vswitchd ovs-vswitchd \
|
||||
/usr/lib/openvswitch-switch-dpdk/ovs-vswitchd-dpdk 50
|
||||
|
||||
#DEBHELPER#
|
||||
|
||||
exit 0
|
|
@ -1,10 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
update-alternatives --remove ovs-vswitchd /usr/lib/openvswitch-switch/ovs-vswitchd-dpdk
|
||||
|
||||
#DEBHELPER#
|
||||
|
||||
exit 0
|
||||
|
|
@ -1,494 +0,0 @@
|
|||
#!/usr/bin/python
|
||||
# Copyright (c) 2009, 2010, 2011, 2012 Nicira, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at:
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
|
||||
# A daemon to monitor attempts to create GRE-over-IPsec tunnels.
|
||||
# Uses racoon and setkey to support the configuration. Assumes that
|
||||
# OVS has complete control over IPsec configuration for the box.
|
||||
|
||||
# xxx To-do:
|
||||
# - Doesn't actually check that Interface is connected to bridge
|
||||
# - If a certificate is badly formed, Racoon will refuse to start. We
|
||||
# should do a better job of verifying certificates are valid before
|
||||
# adding an interface to racoon.conf.
|
||||
|
||||
|
||||
import argparse
|
||||
import glob
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
import ovs.dirs
|
||||
from ovs.db import error
|
||||
from ovs.db import types
|
||||
import ovs.util
|
||||
import ovs.daemon
|
||||
import ovs.db.idl
|
||||
import ovs.unixctl
|
||||
import ovs.unixctl.server
|
||||
import ovs.vlog
|
||||
|
||||
vlog = ovs.vlog.Vlog("ovs-monitor-ipsec")
|
||||
root_prefix = '' # Prefix for absolute file names, for testing.
|
||||
SETKEY = "/usr/sbin/setkey"
|
||||
exiting = False
|
||||
|
||||
|
||||
def unixctl_exit(conn, unused_argv, unused_aux):
|
||||
global exiting
|
||||
exiting = True
|
||||
conn.reply(None)
|
||||
|
||||
|
||||
# Class to configure the racoon daemon, which handles IKE negotiation
|
||||
class Racoon:
|
||||
# Default locations for files
|
||||
conf_file = "/etc/racoon/racoon.conf"
|
||||
cert_dir = "/etc/racoon/certs"
|
||||
psk_file = "/etc/racoon/psk.txt"
|
||||
|
||||
# Racoon configuration header we use for IKE
|
||||
conf_header = """# Configuration file generated by Open vSwitch
|
||||
#
|
||||
# Do not modify by hand!
|
||||
|
||||
path pre_shared_key "%s";
|
||||
path certificate "%s";
|
||||
|
||||
"""
|
||||
|
||||
# Racoon configuration footer we use for IKE
|
||||
conf_footer = """sainfo anonymous {
|
||||
pfs_group 2;
|
||||
lifetime time 1 hour;
|
||||
encryption_algorithm aes;
|
||||
authentication_algorithm hmac_sha1, hmac_md5;
|
||||
compression_algorithm deflate;
|
||||
}
|
||||
|
||||
"""
|
||||
|
||||
# Certificate entry template.
|
||||
cert_entry = """remote %s {
|
||||
exchange_mode main;
|
||||
nat_traversal on;
|
||||
ike_frag on;
|
||||
certificate_type x509 "%s" "%s";
|
||||
my_identifier asn1dn;
|
||||
peers_identifier asn1dn;
|
||||
peers_certfile x509 "%s";
|
||||
verify_identifier on;
|
||||
proposal {
|
||||
encryption_algorithm aes;
|
||||
hash_algorithm sha1;
|
||||
authentication_method rsasig;
|
||||
dh_group 2;
|
||||
}
|
||||
}
|
||||
|
||||
"""
|
||||
|
||||
# Pre-shared key template.
|
||||
psk_entry = """remote %s {
|
||||
exchange_mode main;
|
||||
nat_traversal on;
|
||||
proposal {
|
||||
encryption_algorithm aes;
|
||||
hash_algorithm sha1;
|
||||
authentication_method pre_shared_key;
|
||||
dh_group 2;
|
||||
}
|
||||
}
|
||||
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
self.psk_hosts = {}
|
||||
self.cert_hosts = {}
|
||||
|
||||
if not os.path.isdir(root_prefix + self.cert_dir):
|
||||
os.mkdir(self.cert_dir)
|
||||
|
||||
# Clean out stale peer certs from previous runs
|
||||
for ovs_cert in glob.glob("%s%s/ovs-*.pem"
|
||||
% (root_prefix, self.cert_dir)):
|
||||
try:
|
||||
os.remove(ovs_cert)
|
||||
except OSError:
|
||||
vlog.warn("couldn't remove %s" % ovs_cert)
|
||||
|
||||
# Replace racoon's conf file with our template
|
||||
self.commit()
|
||||
|
||||
def reload(self):
|
||||
exitcode = subprocess.call([root_prefix + "/etc/init.d/racoon",
|
||||
"reload"])
|
||||
if exitcode != 0:
|
||||
# Racoon is finicky about its configuration file and will
|
||||
# refuse to start if it sees something it doesn't like
|
||||
# (e.g., a certificate file doesn't exist). Try restarting
|
||||
# the process before giving up.
|
||||
vlog.warn("attempting to restart racoon")
|
||||
exitcode = subprocess.call([root_prefix + "/etc/init.d/racoon",
|
||||
"restart"])
|
||||
if exitcode != 0:
|
||||
vlog.warn("couldn't reload racoon")
|
||||
|
||||
def commit(self):
|
||||
# Rewrite the Racoon configuration file
|
||||
conf_file = open(root_prefix + self.conf_file, 'w')
|
||||
conf_file.write(Racoon.conf_header % (self.psk_file, self.cert_dir))
|
||||
|
||||
for host, vals in self.cert_hosts.iteritems():
|
||||
conf_file.write(Racoon.cert_entry % (host, vals["certificate"],
|
||||
vals["private_key"], vals["peer_cert_file"]))
|
||||
|
||||
for host in self.psk_hosts:
|
||||
conf_file.write(Racoon.psk_entry % host)
|
||||
|
||||
conf_file.write(Racoon.conf_footer)
|
||||
conf_file.close()
|
||||
|
||||
# Rewrite the pre-shared keys file; it must only be readable by root.
|
||||
orig_umask = os.umask(0077)
|
||||
psk_file = open(root_prefix + Racoon.psk_file, 'w')
|
||||
os.umask(orig_umask)
|
||||
|
||||
psk_file.write("# Generated by Open vSwitch...do not modify by hand!")
|
||||
psk_file.write("\n\n")
|
||||
for host, vals in self.psk_hosts.iteritems():
|
||||
psk_file.write("%s %s\n" % (host, vals["psk"]))
|
||||
psk_file.close()
|
||||
|
||||
self.reload()
|
||||
|
||||
def _add_psk(self, host, psk):
|
||||
if host in self.cert_hosts:
|
||||
raise error.Error("host %s already defined for cert" % host)
|
||||
|
||||
self.psk_hosts[host] = psk
|
||||
self.commit()
|
||||
|
||||
def _verify_certs(self, vals):
|
||||
# Racoon will refuse to start if the certificate files don't
|
||||
# exist, so verify that they're there.
|
||||
if not os.path.isfile(root_prefix + vals["certificate"]):
|
||||
raise error.Error("'certificate' file does not exist: %s"
|
||||
% vals["certificate"])
|
||||
elif not os.path.isfile(root_prefix + vals["private_key"]):
|
||||
raise error.Error("'private_key' file does not exist: %s"
|
||||
% vals["private_key"])
|
||||
|
||||
# Racoon won't start if a given certificate or private key isn't
|
||||
# valid. This is a weak test, but will detect the most flagrant
|
||||
# errors.
|
||||
if vals["peer_cert"].find("-----BEGIN CERTIFICATE-----") == -1:
|
||||
raise error.Error("'peer_cert' is not in valid PEM format")
|
||||
|
||||
cert = open(root_prefix + vals["certificate"]).read()
|
||||
if cert.find("-----BEGIN CERTIFICATE-----") == -1:
|
||||
raise error.Error("'certificate' is not in valid PEM format")
|
||||
|
||||
cert = open(root_prefix + vals["private_key"]).read()
|
||||
if cert.find("-----BEGIN RSA PRIVATE KEY-----") == -1:
|
||||
raise error.Error("'private_key' is not in valid PEM format")
|
||||
|
||||
def _add_cert(self, host, vals):
|
||||
if host in self.psk_hosts:
|
||||
raise error.Error("host %s already defined for psk" % host)
|
||||
|
||||
if vals["certificate"] == None:
|
||||
raise error.Error("'certificate' not defined for %s" % host)
|
||||
elif vals["private_key"] == None:
|
||||
# Assume the private key is stored in the same PEM file as
|
||||
# the certificate. We make a copy of "vals" so that we don't
|
||||
# modify the original "vals", which would cause the script
|
||||
# to constantly think that the configuration has changed
|
||||
# in the database.
|
||||
vals = vals.copy()
|
||||
vals["private_key"] = vals["certificate"]
|
||||
|
||||
self._verify_certs(vals)
|
||||
|
||||
# The peer's certificate comes to us in PEM format as a string.
|
||||
# Write that string to a file for Racoon to use.
|
||||
f = open(root_prefix + vals["peer_cert_file"], "w")
|
||||
f.write(vals["peer_cert"])
|
||||
f.close()
|
||||
|
||||
self.cert_hosts[host] = vals
|
||||
self.commit()
|
||||
|
||||
def _del_cert(self, host):
|
||||
peer_cert_file = self.cert_hosts[host]["peer_cert_file"]
|
||||
del self.cert_hosts[host]
|
||||
self.commit()
|
||||
try:
|
||||
os.remove(root_prefix + peer_cert_file)
|
||||
except OSError:
|
||||
pass
|
||||
|
||||
def add_entry(self, host, vals):
|
||||
if vals["peer_cert"]:
|
||||
self._add_cert(host, vals)
|
||||
elif vals["psk"]:
|
||||
self._add_psk(host, vals)
|
||||
|
||||
def del_entry(self, host):
|
||||
if host in self.cert_hosts:
|
||||
self._del_cert(host)
|
||||
elif host in self.psk_hosts:
|
||||
del self.psk_hosts[host]
|
||||
self.commit()
|
||||
|
||||
|
||||
# Class to configure IPsec on a system using racoon for IKE and setkey
|
||||
# for maintaining the Security Association Database (SAD) and Security
|
||||
# Policy Database (SPD). Only policies for GRE are supported.
|
||||
class IPsec:
|
||||
def __init__(self):
|
||||
self.sad_flush()
|
||||
self.spd_flush()
|
||||
self.racoon = Racoon()
|
||||
self.entries = []
|
||||
|
||||
def call_setkey(self, cmds):
|
||||
try:
|
||||
p = subprocess.Popen([root_prefix + SETKEY, "-c"],
|
||||
stdin=subprocess.PIPE,
|
||||
stdout=subprocess.PIPE)
|
||||
except:
|
||||
vlog.err("could not call %s%s" % (root_prefix, SETKEY))
|
||||
sys.exit(1)
|
||||
|
||||
# xxx It is safer to pass the string into the communicate()
|
||||
# xxx method, but it didn't work for slightly longer commands.
|
||||
# xxx An alternative may need to be found.
|
||||
p.stdin.write(cmds)
|
||||
return p.communicate()[0]
|
||||
|
||||
def get_spi(self, local_ip, remote_ip, proto="esp"):
|
||||
# Run the setkey dump command to retrieve the SAD. Then, parse
|
||||
# the output looking for SPI buried in the output. Note that
|
||||
# multiple SAD entries can exist for the same "flow", since an
|
||||
# older entry could be in a "dying" state.
|
||||
spi_list = []
|
||||
host_line = "%s %s" % (local_ip, remote_ip)
|
||||
results = self.call_setkey("dump ;\n").split("\n")
|
||||
for i in range(len(results)):
|
||||
if results[i].strip() == host_line:
|
||||
# The SPI is in the line following the host pair
|
||||
spi_line = results[i + 1]
|
||||
if (spi_line[1:4] == proto):
|
||||
spi = spi_line.split()[2]
|
||||
spi_list.append(spi.split('(')[1].rstrip(')'))
|
||||
return spi_list
|
||||
|
||||
def sad_flush(self):
|
||||
self.call_setkey("flush;\n")
|
||||
|
||||
def sad_del(self, local_ip, remote_ip):
|
||||
# To delete all SAD entries, we should be able to use setkey's
|
||||
# "deleteall" command. Unfortunately, it's fundamentally broken
|
||||
# on Linux and not documented as such.
|
||||
cmds = ""
|
||||
|
||||
# Delete local_ip->remote_ip SAD entries
|
||||
spi_list = self.get_spi(local_ip, remote_ip)
|
||||
for spi in spi_list:
|
||||
cmds += "delete %s %s esp %s;\n" % (local_ip, remote_ip, spi)
|
||||
|
||||
# Delete remote_ip->local_ip SAD entries
|
||||
spi_list = self.get_spi(remote_ip, local_ip)
|
||||
for spi in spi_list:
|
||||
cmds += "delete %s %s esp %s;\n" % (remote_ip, local_ip, spi)
|
||||
|
||||
if cmds:
|
||||
self.call_setkey(cmds)
|
||||
|
||||
def spd_flush(self):
|
||||
self.call_setkey("spdflush;\n")
|
||||
|
||||
def spd_add(self, local_ip, remote_ip):
|
||||
cmds = ("spdadd %s %s gre -P out ipsec esp/transport//require;\n" %
|
||||
(local_ip, remote_ip))
|
||||
cmds += ("spdadd %s %s gre -P in ipsec esp/transport//require;\n" %
|
||||
(remote_ip, local_ip))
|
||||
self.call_setkey(cmds)
|
||||
|
||||
def spd_del(self, local_ip, remote_ip):
|
||||
cmds = "spddelete %s %s gre -P out;\n" % (local_ip, remote_ip)
|
||||
cmds += "spddelete %s %s gre -P in;\n" % (remote_ip, local_ip)
|
||||
self.call_setkey(cmds)
|
||||
|
||||
def add_entry(self, local_ip, remote_ip, vals):
|
||||
if remote_ip in self.entries:
|
||||
raise error.Error("host %s already configured for ipsec"
|
||||
% remote_ip)
|
||||
|
||||
self.racoon.add_entry(remote_ip, vals)
|
||||
self.spd_add(local_ip, remote_ip)
|
||||
|
||||
self.entries.append(remote_ip)
|
||||
|
||||
def del_entry(self, local_ip, remote_ip):
|
||||
if remote_ip in self.entries:
|
||||
self.racoon.del_entry(remote_ip)
|
||||
self.spd_del(local_ip, remote_ip)
|
||||
self.sad_del(local_ip, remote_ip)
|
||||
|
||||
self.entries.remove(remote_ip)
|
||||
|
||||
|
||||
def update_ipsec(ipsec, interfaces, new_interfaces):
|
||||
for name, vals in interfaces.iteritems():
|
||||
if name not in new_interfaces:
|
||||
ipsec.del_entry(vals["local_ip"], vals["remote_ip"])
|
||||
|
||||
for name, vals in new_interfaces.iteritems():
|
||||
orig_vals = interfaces.get(name)
|
||||
if orig_vals:
|
||||
# Configuration for this host already exists. Check if it's
|
||||
# changed. We use set difference, since we want to ignore
|
||||
# any local additions to "orig_vals" that we've made
|
||||
# (e.g. the "peer_cert_file" key).
|
||||
if set(vals.items()) - set(orig_vals.items()):
|
||||
ipsec.del_entry(vals["local_ip"], vals["remote_ip"])
|
||||
else:
|
||||
continue
|
||||
|
||||
try:
|
||||
ipsec.add_entry(vals["local_ip"], vals["remote_ip"], vals)
|
||||
except error.Error, msg:
|
||||
vlog.warn("skipping ipsec config for %s: %s" % (name, msg))
|
||||
|
||||
|
||||
def get_ssl_cert(data):
|
||||
for ovs_rec in data["Open_vSwitch"].rows.itervalues():
|
||||
if ovs_rec.ssl:
|
||||
ssl = ovs_rec.ssl[0]
|
||||
if ssl.certificate and ssl.private_key:
|
||||
return (ssl.certificate, ssl.private_key)
|
||||
|
||||
return None
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("database", metavar="DATABASE",
|
||||
help="A socket on which ovsdb-server is listening.")
|
||||
parser.add_argument("--root-prefix", metavar="DIR",
|
||||
help="Use DIR as alternate root directory"
|
||||
" (for testing).")
|
||||
|
||||
ovs.vlog.add_args(parser)
|
||||
ovs.daemon.add_args(parser)
|
||||
args = parser.parse_args()
|
||||
ovs.vlog.handle_args(args)
|
||||
ovs.daemon.handle_args(args)
|
||||
|
||||
global root_prefix
|
||||
if args.root_prefix:
|
||||
root_prefix = args.root_prefix
|
||||
|
||||
remote = args.database
|
||||
schema_helper = ovs.db.idl.SchemaHelper()
|
||||
schema_helper.register_columns("Interface", ["name", "type", "options"])
|
||||
schema_helper.register_columns("Open_vSwitch", ["ssl"])
|
||||
schema_helper.register_columns("SSL", ["certificate", "private_key"])
|
||||
idl = ovs.db.idl.Idl(remote, schema_helper)
|
||||
|
||||
ovs.daemon.daemonize()
|
||||
|
||||
ovs.unixctl.command_register("exit", "", 0, 0, unixctl_exit, None)
|
||||
error, unixctl_server = ovs.unixctl.server.UnixctlServer.create(None)
|
||||
if error:
|
||||
ovs.util.ovs_fatal(error, "could not create unixctl server", vlog)
|
||||
|
||||
ipsec = IPsec()
|
||||
|
||||
interfaces = {}
|
||||
seqno = idl.change_seqno # Sequence number when we last processed the db
|
||||
while True:
|
||||
unixctl_server.run()
|
||||
if exiting:
|
||||
break
|
||||
|
||||
idl.run()
|
||||
if seqno == idl.change_seqno:
|
||||
poller = ovs.poller.Poller()
|
||||
unixctl_server.wait(poller)
|
||||
idl.wait(poller)
|
||||
poller.block()
|
||||
continue
|
||||
seqno = idl.change_seqno
|
||||
|
||||
ssl_cert = get_ssl_cert(idl.tables)
|
||||
|
||||
new_interfaces = {}
|
||||
for rec in idl.tables["Interface"].rows.itervalues():
|
||||
if rec.type == "ipsec_gre" or rec.type == "ipsec_gre64":
|
||||
name = rec.name
|
||||
options = rec.options
|
||||
peer_cert_name = "ovs-%s.pem" % (options.get("remote_ip"))
|
||||
entry = {
|
||||
"remote_ip": options.get("remote_ip"),
|
||||
"local_ip": options.get("local_ip", "0.0.0.0/0"),
|
||||
"certificate": options.get("certificate"),
|
||||
"private_key": options.get("private_key"),
|
||||
"use_ssl_cert": options.get("use_ssl_cert"),
|
||||
"peer_cert": options.get("peer_cert"),
|
||||
"peer_cert_file": Racoon.cert_dir + "/" + peer_cert_name,
|
||||
"psk": options.get("psk")}
|
||||
|
||||
if entry["peer_cert"] and entry["psk"]:
|
||||
vlog.warn("both 'peer_cert' and 'psk' defined for %s"
|
||||
% name)
|
||||
continue
|
||||
elif not entry["peer_cert"] and not entry["psk"]:
|
||||
vlog.warn("no 'peer_cert' or 'psk' defined for %s" % name)
|
||||
continue
|
||||
|
||||
# The "use_ssl_cert" option is deprecated and will
|
||||
# likely go away in the near future.
|
||||
if entry["use_ssl_cert"] == "true":
|
||||
if not ssl_cert:
|
||||
vlog.warn("no valid SSL entry for %s" % name)
|
||||
continue
|
||||
|
||||
entry["certificate"] = ssl_cert[0]
|
||||
entry["private_key"] = ssl_cert[1]
|
||||
|
||||
new_interfaces[name] = entry
|
||||
|
||||
if interfaces != new_interfaces:
|
||||
update_ipsec(ipsec, interfaces, new_interfaces)
|
||||
interfaces = new_interfaces
|
||||
|
||||
unixctl_server.close()
|
||||
idl.close()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
try:
|
||||
main()
|
||||
except SystemExit:
|
||||
# Let system.exit() calls complete normally
|
||||
raise
|
||||
except:
|
||||
vlog.exception("traceback")
|
||||
sys.exit(ovs.daemon.RESTART_EXIT_CODE)
|
|
@ -1,15 +0,0 @@
|
|||
--- a/utilities/ovs-ctl.in
|
||||
+++ b/utilities/ovs-ctl.in
|
||||
@@ -253,7 +253,11 @@ start_forwarding () {
|
||||
fi
|
||||
|
||||
# Start ovs-vswitchd.
|
||||
- set ovs-vswitchd unix:"$DB_SOCK"
|
||||
+ set ovs-vswitchd
|
||||
+ if test X"$DPDK_OPTS" != X; then
|
||||
+ set "$@" $DPDK_OPTS --
|
||||
+ fi
|
||||
+ set "$@" unix:"$DB_SOCK"
|
||||
set "$@" -vconsole:emer -vsyslog:err -vfile:info
|
||||
if test X"$MLOCKALL" != Xno; then
|
||||
set "$@" --mlockall
|
|
@ -1 +0,0 @@
|
|||
ovs-ctl-dpdk.patch
|
|
@ -1,68 +0,0 @@
|
|||
#!/usr/bin/make -f
|
||||
# -*- makefile -*-
|
||||
#export DH_VERBOSE=1
|
||||
|
||||
%:
|
||||
dh $@ --with autoreconf,python2,systemd --parallel
|
||||
|
||||
# use --as-needed only if supported by dh-autoreconf (to simplify backporting)
|
||||
DH_AS_NEEDED=$(shell dpkg --compare-versions $$(dpkg --status dh-autoreconf | grep Version | cut -d' ' -f2) ge 6 && echo --as-needed)
|
||||
override_dh_autoreconf:
|
||||
dh_autoreconf $(DH_AS_NEEDED)
|
||||
|
||||
ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
|
||||
PARALLEL = -j$(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
|
||||
else
|
||||
PARALLEL =
|
||||
endif
|
||||
|
||||
override_dh_auto_configure:
|
||||
dh_auto_configure -- --enable-ssl --with-dpdk=/usr $(DATAPATH_CONFIGURE_OPTS)
|
||||
|
||||
override_dh_auto_test:
|
||||
# NOTE(jamespage): skip tests on powerpc until
|
||||
# https://bugs.launchpad.net/ubuntu/+source/openvswitch/+bug/1483572
|
||||
# is resolved
|
||||
ifneq (powerpc, $(DEB_BUILD_ARCH))
|
||||
ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
|
||||
if $(MAKE) check TESTSUITEFLAGS='$(PARALLEL)' || \
|
||||
$(MAKE) check TESTSUITEFLAGS='--recheck'; then :; \
|
||||
else \
|
||||
cat tests/testsuite.log; \
|
||||
exit 1; \
|
||||
fi
|
||||
endif
|
||||
endif # powerpc
|
||||
|
||||
override_dh_auto_build:
|
||||
dh_auto_build -- distdir=openvswitch
|
||||
|
||||
override_dh_auto_clean:
|
||||
rm -f python/ovs/*.pyc python/ovs/db/*.pyc
|
||||
dh_auto_clean
|
||||
|
||||
override_dh_install:
|
||||
install -D vswitchd/ovs-vswitchd \
|
||||
$(CURDIR)/debian/openvswitch-switch-dpdk/usr/lib/openvswitch-switch-dpdk/ovs-vswitchd-dpdk
|
||||
|
||||
override_dh_installinit:
|
||||
:
|
||||
|
||||
override_dh_auto_install:
|
||||
:
|
||||
|
||||
# Helper target for creating snapshots from upstream git
|
||||
DATE=$(shell date +%Y%m%d)
|
||||
# Upstream branch to track
|
||||
BRANCH=branch-2.4
|
||||
|
||||
get-orig-snapshot:
|
||||
rm -Rf openvswitch-upstream
|
||||
git clone https://github.com/openvswitch/ovs openvswitch-upstream
|
||||
cd openvswitch-upstream && \
|
||||
git checkout -b $(BRANCH) remotes/origin/$(BRANCH) && \
|
||||
export COMMIT=`git rev-parse --short HEAD` && \
|
||||
export UPSTREAM_VERSION=`head -1 NEWS | awk '{ print $$1 }' | sed 's/v//'` && \
|
||||
git archive --format tgz --prefix=openvswitch-$$UPSTREAM_VERSION+git$(DATE)/ \
|
||||
-o ../../openvswitch_$$UPSTREAM_VERSION~git$(DATE).$$COMMIT.orig.tar.gz $(BRANCH)
|
||||
rm -Rf openvswitch-upstream
|
|
@ -1 +0,0 @@
|
|||
3.0 (quilt)
|
|
@ -1,23 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
update-alternatives --set ovs-vswitchd \
|
||||
/usr/lib/openvswitch-switch-dpdk/ovs-vswitchd-dpdk
|
||||
service openvswitch-switch restart
|
||||
|
||||
modprobe openvswitch || true
|
||||
|
||||
echo "kernel modules loaded: "
|
||||
# Check that ovs loaded
|
||||
lsmod | grep "openvswitch"
|
||||
echo "OK"
|
||||
|
||||
echo "Checking daemons: "
|
||||
pgrep ovs-vswitchd
|
||||
pgrep ovsdb-server
|
||||
echo "OK"
|
||||
|
||||
echo -n "running openflow tests using mininet"
|
||||
python `dirname $0`/openflow.py 2>&1
|
||||
echo "OK"
|
|
@ -1,4 +0,0 @@
|
|||
Tests: kernel
|
||||
Depends: mininet (>= 2.2.0~), iperf, openvswitch-switch-dpdk,
|
||||
openvswitch-testcontroller
|
||||
Restrictions: needs-root rw-build-tree
|
|
@ -1,5 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
`dirname $0`/common
|
|
@ -1,7 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
service openvswitch-controller stop
|
||||
|
||||
python `dirname $0`/openflow.py 2>&1
|
|
@ -1,66 +0,0 @@
|
|||
import unittest
|
||||
import logging
|
||||
from mininet.net import Mininet
|
||||
import mininet.log as log
|
||||
from mininet.node import OVSController, OVSKernelSwitch
|
||||
|
||||
Switch = OVSKernelSwitch
|
||||
Controller = OVSController
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
log.setLogLevel('info')
|
||||
|
||||
|
||||
class BasicOpenflowTest(unittest.TestCase):
|
||||
|
||||
def addHost(self, N):
|
||||
logging.debug("Creating host h%s and add to net.", N)
|
||||
name = 'h%d' % N
|
||||
ip = '10.0.0.%d' % N
|
||||
return self.net.addHost(name, ip=ip)
|
||||
|
||||
def setUp(self):
|
||||
self.net = Mininet(controller=Controller, switch=Switch)
|
||||
|
||||
logging.info("Creating controllers")
|
||||
self.net.addController('c1', command='ovs-testcontroller')
|
||||
|
||||
logging.info("Creating switches")
|
||||
s1 = self.net.addSwitch('s1', protocols="OpenFlow10")
|
||||
s2 = self.net.addSwitch('s2', protocols="OpenFlow10")
|
||||
|
||||
logging.info("Creating hosts (7 on each switch)")
|
||||
hosts1 = [self.addHost(n) for n in (1, 2, 3, 4, 5, 6, 7)]
|
||||
hosts2 = [self.addHost(n) for n in (8, 9, 10, 11, 12, 13, 14)]
|
||||
|
||||
logging.info("Creating links")
|
||||
for h in hosts1:
|
||||
self.net.addLink(s1, h)
|
||||
for h in hosts2:
|
||||
self.net.addLink(s2, h)
|
||||
self.net.addLink(s1, s2)
|
||||
|
||||
logging.info("Starting network")
|
||||
self.net.start()
|
||||
|
||||
def testPingAll(self):
|
||||
logging.info("Testing network")
|
||||
packetLoss = self.net.pingAll()
|
||||
self.assertTrue(
|
||||
packetLoss == 0,
|
||||
"Packet loss during ping test %s" %
|
||||
packetLoss)
|
||||
|
||||
def testIPerfTCP(self):
|
||||
logging.info("Running TCP performance test")
|
||||
self.net.iperf()
|
||||
|
||||
def testIPerfUDP(self):
|
||||
logging.info("Running UDP performance test")
|
||||
self.net.iperf(l4Type='UDP')
|
||||
|
||||
def tearDown(self):
|
||||
logging.info("Stopping network")
|
||||
self.net.stop()
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
|
@ -1,2 +0,0 @@
|
|||
version=3
|
||||
http://openvswitch.org/releases/ openvswitch-(.*).tar.gz
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue