What is OpenFlow?

OpenFlow is a communication protocol that gives access to the forwarding plane of a network switch or router over the network. A major feature of OpenFlow separates network form its components, abstracts these components, and reorganizes them. This feature is called SDN (Software Defined NEtwork), and OpenFlow is a technology that actualizes SDN. To abstract network, whole network can be a subject to a program, and the program enables to the central control, automatic configuration changes and optimization of network.

OpenFlow consists of OpenFlow Switch and OpenFlow Controller.
An OpenFlow Switch consists of one or more flow tables and a group table transmits the packets. An OpenFlow Switch follows a direction of a flow table and transmits the packet. If a packet, which is not listed on the flow table, the OpenFlow Switch asks OpenFlow Controller to how to handle this unknown packet.
The OpenFlow Controller manages the OpenFlow Switch via the OpenFlow protocol. The Open Flow Controller add, update, and delete flow entries in flow table, reactively and proactively. Since the OpenFlow Controller manages the OpenFlow Switch, the OpenFlow Switch becomes a swatch, load balancer, and router.

Standardizing OpenFlow

The communication specifications between the OpenFlow Switch and OpenFlow Controller are standardized with OpenFlow protocol.
Up to OpenFlow 1.1, the OpenFlow Switching specifications were developed by the OpenFlow Switching specification consortium, whose core team was the research group of Stanford University. The consortium was also hosted at Stanford University. The specifications are available to the public. For the details, please visit website,
Today, the specifications are developed at Open Network Foundation. As of the end of March, the specifications of OpenFlow 1.3.1 have been released.

To communicate in an OpenFlow protocol, the same versions of OpenFlow Switch and OpenFlow Controller have to be the same and they can support only the same version of the OpenFlow protocol.

Many products that adapt OpenFlow have supported only the version 1.0 and 1.1 of the OpenFlow Switches. Lately, the growth of support for version 1.3.1 of OpenFlow Switch is increased rapidly, and many products support the version 1.3.1 of OpenFlow Switch.

The Characteristics of each version are shown below.

  • 1.0 January 2010
    Decide the details of protocol, which is mainly targeted to the use of collage campus use and data center use.
  • 1.1
    February 2011
    Extend its functionalities for supporting wide area network.
    Support multiple flow tables.
  • 1.2
    December 2011
    Support IPv6.
    Expanded description matching system, Introducing TLV~. Support multiple OpenFlow Controllers.
  • 1.3
    March 2012
    Control plane supports IPv6.
    Support tunneling in the internal VPN of the data center.
    Bridge between provider backbones.
    Support QoS.
    And others.

Switch and Controller

There are two ways to implement the OpenFlow Switch. One way is implemented by software, and the other is the device implementation, which is done by device venders.
There are several ways to implement the Controller that manages the OpenFlow Switch, depending on which programming language is used to write the rules of the controller.

OpenFlow Switch

  • OpenFlow reference implementation
    The reference implementation, which is working in the user space, support OpenFlow 1.0 and 1.1. The user space is created for defining specifications. The OpenFlow reference implementation consists of elements shown below.
    • ofdtapath
      A flow table, which is implemented in a user space.
    • ofprotocol
      The secure channel part of reference implementation switch.
    • dpctl
      The configuration command for reference implementation switch.
  • Open vSwitch
    This is an open sourced virtual software switch. This is already used at several virtual platforms, and it supports many management interface. OpenvSwitch supports Linux 2.6.18 or later, and this is included in Linux kernel 3.3 or later. To set up a specific configuration, this works as a OpenFlow switch. This is based upon the specifications of OpenFlow 1.0.
    The devices, which implement Open vSwitch, are shown below.
    NEC Univerge PF5240, PF5820, IBM G864 switch, HP Procurve 5400zl series, 6600 series. Pica Proto 3290, 3780 and so on.

OpenFlow Controller

  • NOX
    This is developer by Standord University and Nicria Network. The development process of NOX is parallel to the process of defining specifications of OpenFlow. This OpenFlow Controller is an open source project and written in C++. It supports OpenFlow 1.0.
    Since the middle of 2012, this has been only occasionally maintained. There are several derivatives of NOX such as nexoflib. The old version of NOX is based upon C++/Python, and this is renamed to NOX classic.

Trema is an OpenFlow Controller written in Ruby + C. It supports OpenFlow 1.0 There is trema-edge branch, which supports OpebFlow 1.3.

This OpenFlow Controller is developed by Open Source Computing Group at NTT Laboratory. This is based upon Python.

Trying on OpenFlow

These are examples of testing OpenFlow. To combine a OpenFlow Switch with a OpenFlow Controller, test to execute several settings of OpenFlow.


mininet is a virtual network, which allows to develop and test OpenFlow. On aLinux environment, a virtual network of mininet includes OpenFlow Switch, OpenFlow Controller, and a host that connects to OpenFlow Switch. The details of how to use mini net are listed on OpenFlow/mininet.

OpenFlow Tutorial

To refer to OpenFlow Tutorial, test features of OpenFlow.

Please look at these pages shown below.
OpenFlow/OpenFlow Tutorial 1
OpenFlow/OpenFlow Tutorial 2

Open vSwitch_x86

To use a mininet environment on two different Linux machines, create OpenFlow Controller and OpenFlow Switch. Then, repeat the process that were done at OpenFlow Tutorial 1 and 2, on this virtual network. In this process, Open vSwitch is used as OpenFlow Switch.

For the details, please visit the site shown below.

Open vSwitch_bc10

In a mininet environment, bc10 is used for OpenFlow Switch, which is based upon Open vSwitch. A Linix PC remains as OpenFlow Controller.
Then, applying OpenFlow Tutorial 1 and 2, the operation of OpenFlow Switch and OpenFlow is tested.

Please look at OpenFlow/Open vSwitch_bc10 for the details.
OpenFlow/Open vSwitch_bc10

Revision History

Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New List of pages Search Recent changes   RSS of recent changes
Last-modified: 2013-08-29 (Thu) 07:25:06 (2946d)