== System Architecture == == SDN Design and Flow Set Up == The figure below shows the overall design of an OpenFlow based network that can support MobilityFirst. [[Image(GEC_Poster_Figure1.png)]] All OpenFlow switches that are to perform the functions of a MobilityFirst router are connected to a central controller. As the sender starts to transmit data, the first packet of the chunk is sent to the controller since there is no matching flow rule as of yet. The controller uses the GUID map it created using link probe messages to compute the out port on the switch and sends an appropriate flow rule. The rest of the packets are then forwarded by the switch. Chunks that have to be stored are sent to a software CLICK based router which can handle chunk storage. The figure below shows the the controller learning GUIDs from link probe messages. [[Image(guidLearning.jpg)]] The flow rules are set up using VLAN tags. Every host that wants to send MobilityFirst chunks inserts the hop ID of the packet as a VLAN tag. The controller uses this tag to set up a matching flow rule on the switch. The figure below shows the flow of a MobilityFirst chunk, with the first packet initiating the flow set up. [[Image(chunkFlow.jpg)]] == Floodlight Implementation == Floodlight is a Java based Apache licensed open source OpenFlow controller. Aside from implementing the core OpenFlow protocol and exposing a REST API for setting up static flows, Floodlight also provides a module loading system that can be used to load user defined modules that set up reactive flows. The figure below shows Floodlight's structure and its core modules. [[Image(FloodlightStructure.jpg)]] Additional modules that perform GUID learning and other MobilityFirst functions such as GUID based forwarding and storage were added to Floodlight. The figure below shows Floodlight and the interactions between the MobilityFirst modules. [[Image(FloodlightImpl.jpg)]] Detailed descriptions of the SDN design and prototype implementation on Floodlight can be found in [https://mobilityfirst.orbit-lab.org/attachment/wiki/SystemPrototyping/Projects/SDNOpenFlow/main.pdf this masters thesis].