OpenFlow switch (multi-platform) - The OpenFlow eXtensible DataPath daemon,an SDN datapath framework written in C/C++
C C++ M4 Python Makefile Objective-C
Failed to load latest commit information.
build Merging dynamic port discovery into devel HEAD. Still some events of … Oct 16, 2013
config dpdk: include librte_mempool as whole archive Jun 8, 2017
doc update/add .gitignore files Mar 10, 2017
src removing installation of header files for NOINST-xdpd-common library Jun 16, 2017
test update/add .gitignore files Mar 10, 2017
tools updated systemd related scripts May 20, 2017
.gitignore logging fixup Mar 10, 2017
.gitmodules update dpdk Mar 10, 2017
AUTHORS Initial import of xDPD code into the new repository Apr 12, 2013
CHANGES preparing version v0.7.9 Jun 10, 2017
COPYRIGHT Initial import of xDPD code into the new repository Apr 12, 2013 Adapting the compilation of drivers that don't support inlined pipeline Apr 23, 2015
README [Docu] Fix build steps Mar 10, 2017 Adding Apr 29, 2015 Improving READMEs Apr 1, 2015 Improving READMEs Apr 1, 2015 Typo fixed. Apr 29, 2015 Adding OFConfig documentation Apr 17, 2015 Adding as a symlink to README Apr 15, 2014
VERSION preparing version v0.7.9 Jun 10, 2017 updated to most recent dpdk version as of September 2016 Oct 5, 2016 updated RPM xdpd.spec file to v0.7.7 May 4, 2017

What it is

"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.

Supported platforms (drivers)

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:



  • 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] [2]

How to build

Install the dependencies and run:

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).

How to run it

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...

  1. 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).
  2. To troubleshoot problems with flowmod/groupmod check the OF control channel to see if the messages are correctly interpreted by the endpoint.
  3. 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.

Optional ../configure parameters

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

Doxygen documentation

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

Known issues

  • 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

More information, documentation and support

For getting support or participate in the discussions, join the mailing list at


(c) Copyright BISDN GmbH 2013

Marc Sune<marc.sune (at)>
Andreas Koepsel<andreas.koepsel (at)>
Victor Alvarez<victor.alvarez (at)>
Tobias Jungel<tobias.jungel (at)>

And others