wiki:Tutorials/m0SDN/aHowTo

Version 7 (modified by akoshibe, 15 years ago) ( diff )

OpenFlow How-To

Sandbox 9 uses the OpenFlow capable switch as part of its setup as a means to provide a testbed for experimentation with the OpenFlow protocol. This tutorial describes the different components of the OpenFlow network and provides the basics needed to set up an experiment.

OpenFlow Protocol

OpenFlow is a protocol that allows for the creation of overlay networks over pre-existing network infrastructure. This allows a researcher to run experiments on production networks without the fear of affecting any of the legacy installations or setups, while having control over how data is handled across the network.

"OpenFlow" specifically refers to the protocol that is used by a network device and its controller to pass information about flows, or instructions on how to handle data packets based on the packet header, to each other.

Detailed information can be found here: http://www.openflowswitch.org/

The Testbed

Sandbox 9 consists of three nodes connected to the SB9 Console through a OpenFlow enabled switch. The OpenFlow enabled NEC IP8800/S3640-48T2XW switch currently runs firmware supporting OpenFlow v0.8.9. The switch is pre-configured so that ports 25-36 (the data VLAN, in green) is an OpenFlow virtual switch that listens for a controller running on the SB9 Console. The network topology is shown below:

No image "OFSetup.jpg" attached to Documentation/OpenFlow/OFHowTo

Installing the controller

Two controllers, one from the OpenFlow reference System (v0.8.9r2) and another from NOX-core (v0.5.0), have been successfully installed and tested on the Console. These can be downloaded from the following places:

The former is a simple implementation that comes with a few tests; latter is a full-blown network operating system/ development tool that comes with a Network API that can be used to write and develop your own controller in C++ or Python.

Both can also be installed using Git. Git can be installed with the following command:

apt-get install git-core   

Installing the OpenFlow Reference System

While presented, it is not recommended to install from tarball. The detailed instructions may be found here: http://www.openflowswitch.org/wp/getstarted/

  1. Download software and required packages. If using git:
    sudo apt-get install git-core automake m4 pkg-config libtool
    git clone http://openflowswitch.org/openflow
    cd openflow
    ./boot.sh
    

if installing from tarball:

mkdir openflow
cd openflow
wget http://openflowswitch.org/downloads/openflow-0.9.0.tar.gz
tar xzf openflow-0.9.0.tar.gz
cd openflow-0.9.0
sudo apt-get install gcc linux-headers-`uname -r`
  1. Make and install.
    ./configure --with-l26=/lib/modules/`uname -r`/build
    make
    make install
    

Installing NOX

It is not only recommended but also much simpler to use git to install NOX. Therefore the following instructions assume you are using git. The full instructions are found at noxrepo.org: http://noxrepo.org/manual/installation.html

Dependencies
NOX requires the following packages to be installed on the Console:

  • GNU Libtool (libtool)
  • Boost C++ libraries (libboost1.35-dev)
  • Apache HTTP Server (apache2)
  • Xerces C++ parser (libxerces-c28)
  • Xerces development files (libxerces-c2-dev)
  • SSL development libraries (libssl-dev)
  • SQLite 3 development files (libsqlite3-dev)
  • Simple JSON for Python (python-simplejson)

If all dependencies are taken care of, NOX will install with the following steps.

cd 
git clone git://noxrepo.org/noxcore
cd noxcore/
./boot.sh
mkdir build/
cd build/
../configure --with-python=yes
make
make check 

Starting the controller

Both commands start the controller and establish a connection with the OpenFlow switch. The -v is for verbose. -h for both will give you the help files for the controllers. In the reference system, the controller is found under …/openflow/controller/

./controller -v ptcp:6633 

and in NOX, it is found under …/noxcore/build/src/

./nox-core -v ptcp:6633 

Development

The files defining OpenFlow Protocol can be found in the following locations:

  • OpenFlow reference system: openflow/include/openflow/openflow.h
  • NOX: noxcore/src/include/openflow.hh

In addition, NOX provides a Web API that allows you to do development in C++ or Python.

Note: See TracWiki for help on using the wiki.