OpenFlow switch (multi-platform) - The OpenFlow eXtensible DataPath daemon,an SDN datapath framework written in C/C++
C C++ M4 Python Makefile Objective-C

README.md

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:

src/xdpd/drivers/{platform_name}/README

Requirements

  • 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

How to build

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

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

Troubleshooting

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:

http://www.xdpd.org/doc/

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

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

Authorship

(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