"The OpenFlow eXtensible DataPath daemon (xDPd) is a multi-platform, multi OF version, open-source datapath built focusing on performance and extensibility."
xDPd can also be considered a framework for building OpenFlow datapath elements, as it is designed to be easily extended with the support of new forwarding devices.
Shipped with all xDPd instances:
- GNU/Linux amd64/x86 user-space with MMAP suppport (
gnu-linux
). open-source - GNU/Linux Intel's DPDK accelerated driver (
gnu-linux-dpdk
). open-source - NetFGPA-10G (
netfpga10g
). open-source.
Also available:
- Broadcom Triumph2 (
bcm
). - Octeon network processors (
octeon
). - Other: refer to the wiki page for more details
You may want to have a look to the particular README pages of each platform by inspecting:
src/xdpd/drivers/{platform_name}/README
- A modern GNU build-system (autoconf, automake, libtool, ...)
- GNU/Linux and libc development headers (linux-libc-dev and libc6-dev package in Debian/Ubuntu systems)
- libconfig C++ lib (libconfig++-dev in Debian/Ubuntu systems)
- openssl (rofl-common, libssl-dev in Debian/Ubuntu systems)
- [optional] if you want to run automatic tests (make check), libcunit and libcppunit are required (in libcunit1-dev and libcppunit-dev packages in Debian-like systems).
- [optional] Doxygen to generate the documentation.
[1] https://github.com/bisdn/rofl-common [2] https://github.com/bisdn/rofl-datapath
Install the dependencies and run:
sh# ./autogen.sh
sh# mkdir -p build
sh# cd build
sh# ../configure
sh# make
sh# make install
Optionally you can make check
for consistency checks. For other platforms different than gnu-linux
, please make sure --with-hw-support=platform-name
is specified, and that the appropriate README is read (e.g. src/xdpd/drivers/example/README).
The default management plugin is config
. Read README-conf-file for more information.
Copy the example.cfg:
sh# cd build/src/xdpd
sh# cp ../../../src/xdpd/management/plugins/config/example.cfg .
Now edit the configuration. Make sure ports attached to the Logical Switch Instance (LSI) exist in the system.
sh# vi example.cfg
Run xdpd:
sh# ./xdpd -c example.cfg
What to do if something doesn't work...
- Check the controller <-> LSI OF channel. Launch xDPd with debug level 8 for maximum OF control channel output. Check the very basics (addresses, ports and OF versions).
- To troubleshoot problems with flowmod/groupmod check the OF control channel to see if the messages are correctly interpreted by the endpoint.
- If they are correct, you can check whether they have been installed in the datapath by either using a controller or using the REST plugin + CLI (remember you have to compile in the support for REST); e.g.
xcli -c "show list dp0 table 0 flows"
.
If this is not enough, you can always compile xDPd with debug (warning: it affects performance) to see the output of the fast-path. To do so:
cd <path_to_xdpd_folder>
cd build
../configure --enable-debug # add extra parameters...
make clean-libs # Clean the compiled libraries (compile them with debug)
make clean # Clean xDPd code
make -j2
And then launch xdpd with debug level 7 or more:
./xdpd -c config_file.cfg -d 8
If you think this there is a bug, please report it to the issue tracker / mailing list.
--with-hw-support=platform-name: Compiles support for the platform-name (platform driver). Default is gnu-linux.
--with-plugins="plugin1...pluginN": Compile with plugin1..pluginN enabled. Default is --with-plugins="config" plugin.
--enable-debug: Compile with debug symbols (-g) and debug output, -O0 (warning, it may affect performance).
--disable-silent-rules: Enable verbose compilation mode (AM_SILENT_RULES disabled)
You can have a look on:
Documentation can be compiled via make doc
. Documentation is generated in build/doc/ folder
RYU certification for gnu-linux/gnu-linux-dpdk: check doc/gnu-linux-ryu.cert
-
Certain GCC 4.8.X family versions are buggy and don't properly compile xDPd with -O3 optimizations. Please use GCC 4.8.3 or higher, or another version family. E.g. for gcc-4.7:
CC=gcc-4.7 CXX=g++-4.7 ../configure
http://www.xdpd.org https://github.com/bisdn/xdpd
For getting support or participate in the discussions, join the mailing list xdpd-devel@xdpd.org at https://lists.xdpd.org/mailman
(c) Copyright BISDN GmbH 2013
Marc Sune<marc.sune (at) bisdn.de>
Andreas Koepsel<andreas.koepsel (at) bisdn.de>
Victor Alvarez<victor.alvarez (at) bisdn.de>
Tobias Jungel<tobias.jungel (at) bisdn.de>
And others