OpenFlow Tutorial
Theophilus Benson
Outline
• Components in an OpenFlow testbed• Setting up a testbed• Writing a new component– C++ components version– Python components version
OpenFlow Components• Controller• Openflow switches• Traffic generators
End host1
End host2
End host3
OpenFlow Controller
OpenFlow Enabled Switches
Virtual Testbed
• Directions available online– http://noxrepo.org/manual/using.html#setting-
up-a-noxnetwork• Requirements– Linux system– Qemu – Python– Nox code– Other linux libraries
Testbed Setup
• Compile Nox code• Set up virtual machines• Connect topology• Start controller– Use appropriate components
• Connect switches to controller
Writing Components• Two languages; c++ and python– More information found:
http://noxrepo.org/manual/app.html• Components are stored in src/nox/apps– Separate each component into a distinct directory
• Component Structure– You must inherit from class Component– You must include a call to the REGISTER_COMPONENT
macro – You must include the following methods
• Void configure(const Configuration *)• Void install()
Component Paradigm• Register for events and specify handlers– register_handler<eventtype>(boost::bind(handling_metho
d, this, _1));– register_handler<Packet_in_event>(boost::bind(&Hub::ha
ndler, this, _1));• All work done in handler– Return either CONTINUE or END– NOTE: you can start the controller with a list of
components, event get passed from one to the other– Returning CONTINUE means the next component handles
the packet– Returning END means no other components handle the
packets
Demo
• Run component in openflow controller• Ping from endhost A• Should observe printouts in controller’s
console
Resources
• Nox website– http://noxrepo.org
• OpenFlow Site– http://www.openflowswitch.org/wp/documents
Questions