OpenState switch implementation based on CPqD/ofsoftswitch13
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


This is an implementation of the OpenState switch based on the OpenFlow 1.3 softswitch developed by CPdQ and available at For any information about OpenState please check the home page of the project at

OpenFlow 1.3 Software Switch

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.

The following components are available in this package:

  • ofdatapath: the switch implementation
  • ofprotocol: secure channel for connecting the switch to the controller
  • oflib: a library for converting to/from 1.3 wire format
  • dpctl: a tool for configuring the switch from the console

Getting Started

These instructions have been tested on Ubuntu 12.04. Other distributions or versions may need different steps.

For Ubuntu 14.04, please check @castroflavio solution: How to compile on Ubuntu 14.04


Run the following commands in the ofsoftswitch13 directory to build and install everything:

$ ./
$ ./configure
$ make
$ sudo make install


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

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

The dpctl utility has some limitations at the moment:

  • No support for OXM masks
  • No support for multipart messages
  • Some set_field action fields are not present


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 is supported by Ericsson Innovation Center in Brazil. Maintained by CPqD in technical collaboration with Ericsson Research.


Zoltán Lajos Kis, ofsoftswitch 1.1 implementation and guidance for OpenFlow spec related subjects.

Jean Tourrilhes, lots of critical memory bug fixes on table features.

Khai Nguyen Dinh and Thanh Le Dinh, contributions on meter features.

Rich Lane, added the right compiler linker.

yu-iwata, fixed flow deletion without matchin out_port.

Yuval Adler, bug fixes related to matching on vlan and ethertype.

Hiroyasu OHYAMA, correct URL of NetBee Library.


"Your name here" -- please, let us know if we forgot to add your name to the list of contributors!


E-mail: Eder Leao Fernandes (ederleaofernandes at gmail . com)