= !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. [[BR]] [[BR]] "!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 IP8800/S3640-48T2XW switch. [[Image(OFSetup.jpg )]] === The switch === The switch is currently running firmware supporting !OpenFlow v0.8.9. The switch is pre-configured so that ports 25-36 (the data VLAN) is an !OpenFlow virtual switch that listens to the Console as the controller. The configurations can be altered by using the `setvsi` command in the switch's command-line interface. The details behind configuring the virtual switch(es) on the IP8800 can be found [wiki:Documentation/OpenFlow/VirtualSwitch here]. === The Controller === ''' Installing the controller ''' [[BR]] The !OpenFlow reference System (v0.8.9r2) and NOX-core (v0.5.0) have been successfully installed and tested on the Console. These can be downloaded from the following places: * !OpenFlow reference system: http://www.openflowswitch.org/wp/downloads/ * NOX-core: http://noxrepo.org/wp/ 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. ''' Starting the controller ''' [[BR]] 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 }}}