This is an OpenFlow 1.3 compatible user-space software switch implementation. The code is based on the Ericsson TrafficLab 1.1 softswitch implementation, with changes in the forwarding plane to support OpenFlow 1.3.
If you use the switch for academic purpuses, please consider the use of this citation.
@article{fernandes2020road,
title={The road to BOFUSS: The basic OpenFlow userspace software switch},
author={Fernandes, Eder Le{\~a}o and Rojas, Elisa and Alvarez-Horcajo, Joaquin and Kis, Zolt{\`a}n Lajos and Sanvito, Davide and Bonelli, Nicola and Cascone, Carmelo and Rothenberg, Christian Esteve},
journal={Journal of Network and Computer Applications},
pages={102685},
year={2020},
publisher={Elsevier}
}
Check the Wiki for some resources that could possibly help you to modify the switch.
UPDATE: A new experimental branch with contributions from the BEBA EU Project is available with lots of performance improvements and OpenFlow extensions. If you want to try the code checkout to the BEBA-EU branch.
$ git checkout remotes/origin/BEBA-EU
The following components are available in this package:
ofdatapath
: the switch implementationofprotocol
: secure channel for connecting the switch to the controlleroflib
: a library for converting to/from 1.3 wire formatdpctl
: a tool for configuring the switch from the consoleThese instructions have been tested on Ubuntu 16.04. Other distributions or versions may need different steps.
The switch makes use of the NetBee library to parse packets, so we need to install it first.
Install the following packages:
$ sudo apt-get install cmake libpcap-dev libxerces-c3.1 libxerces-c-dev libpcre3 libpcre3-dev flex bison pkg-config autoconf libtool libboost-dev
Clone and build netbee
$ git clone https://github.com/netgroup-polito/netbee.git
$ cd netbee/src
$ cmake .
$ make
Add the shared libraries built in /nbeesrc/bin/
to your /usr/local/lib
directory
$ sudo cp ../bin/libn*.so /usr/local/lib
Run ldconfig
$ sudo ldconfig
Put the contens of folder nbeesrc/include
in the /usr/include
$ sudo cp -R ../include/* /usr/include/
Run the following commands in the ofsoftswitch13
directory to build and install everything:
$ ./boot.sh
$ ./configure
$ make
$ sudo make install
Start the datapath:
$ sudo udatapath/ofdatapath --datapath-id=<dpid> --interfaces=<if-list> ptcp:<port>
This will start the datapath, with the given datapath ID, using the interaces listed. It will open a passive TCP connection on the given port. For a complete list of options, use the --help
argument.
Start the secure channel, which will connect the datapath to the controller:
$ secchan/ofprotocol tcp:<switch-host>:<switch-port> tcp:<ctrl-host>:<ctrl-port>
This will open TCP connections to both the switch and the controller, relaying OpenFlow protocol messages between them. For a complete list of options, use the --help
argument.
You can send requests to the switch using the dpctl
utility.
Check the flow statistics for table 0.
$ utilities/dpctl tcp:<switch-host>:<switch-port> stats-flow table=0
Install a flow to match IPv6 packets with extension headers hop by hop and destination and coming from port 1.
$ utilities/dpctl tcp:<switch-host>:<switch-port> flow-mod table=0,cmd=add in_port=1,eth_type=0x86dd,ext_hdr=hop+dest apply:output=2
Add a meter:
$ utilities/dpctl tcp:<switch-host>:<switch-port> meter-mod cmd=add,meter=1 drop:rate=50
Send flow to meter table
$ utilities/dpctl tcp:<switch-host>:<switch-port> flow-mod table=0,cmd=add in_port=1 meter:1
For a complete list of commands and arguments, use the --help
argument. Also, check the wiki for Flow Mod examples
Please submit your bug reports, fixes and suggestions as pull requests on GitHub, or by contacting us directly.
OpenFlow 1.3 Software Switch is released under the BSD license (BSD-like for code from the original Stanford switch).
This project was supported by Ericsson Innovation Center in Brazil. Formerly maintained by CPqD in technical collaboration with Ericsson Research.
E-mail: Eder Leao Fernandes (ederleaofernandes at gmail . com)