= !MobilityFirst in !OpenFlow-enabled SDN Networks = [[PageOutline(2-100,Contents, inline, unnumbered)]] == 0. Requirements == * Software prototype with reference implementation of the MobilityFirst protocol stack, for end hosts. * Software prototype with reference implementation of GSTAR for handling storage of chunks. * Floodlight controller running the MobilityFirst modules. == 1. System Architecture == 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 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. == 2. Installation == == 2.1 Required Packages == {{{ sudo apt-get install build-essential default-jdk ant python-dev eclipse git }}} == 2.2 Installing and Building Floodlight == {{{ git clone git://github.com/floodlight/floodlight.git cd floodlight git checkout fl-last-passed-build ant }}} Floodlight's installation guide can be found [http://www.openflowhub.org/display/floodlightcontroller/Installation+Guide here] The MobilityFirst modules for Floodlight can be downloaded using {{{ svn co https://svn.orbit-lab.org/mobilityfirst/trunk/code/prototype/openflow/floodlight_modules/ }}} Place the contents of floodlight_modules inside the src/main/java/net/floodlightcontroller/ folder. == 3. Running Floodlight with MobilityFirst == The [https://mobilityfirst.orbit-lab.org/wiki/SystemPrototyping/Projects/ClickRouter CLICK router project page] has details on configurations in which the software router can be used. The file sender and file receiver configurations can be used as end hosts. A node running the router configuration can be used for the storage of chunks. Before starting the controller, it has to be configured to load the MobilityFirst modules on start up and to listen for PACKET_IN messages. Open the file src/main/resources/floodlightdefault.properties and add the following lines before the lines that mention the ports for floodlight and the REST API. {{{ net.floodlightcontroller.guidtomacmapper.GUIDtoMACMapper,\ net.floodlightcontroller.mffunctions.MFFunctions }}} The file should look like {{{ floodlight.modules = net.floodlightcontroller.staticflowentry.StaticFlowEntryPusher,\ net.floodlightcontroller.forwarding.Forwarding,\ net.floodlightcontroller.jython.JythonDebugInterface,\ net.floodlightcontroller.counter.CounterStore,\ net.floodlightcontroller.perfmon.PktInProcessingTime,\ net.floodlightcontroller.guidtomacmapper.GUIDtoMACMapper,\ net.floodlightcontroller.mffunctions.MFFunctions net.floodlightcontroller.restserver.RestApiServer.port = 8080 net.floodlightcontroller.core.FloodlightProvider.openflowport = 6633 }}} Add the following two lines to src/main/resources/META_INF/services/net.floodlightcontroller.core.moduele.IFloodlightModule {{{ net.floodlightcontroller.guidtomacmapper.GUIDtoMACMapper net.floodlightcontroller.mffunctions.MFFunctions }}} The last step is to edit src/main/java/net/floodlightcontroller/forwarding/Forwarding.java to not process MF packets, i.e, to include the condition {{{ if (match.getDataLayerType == 0x27c0) return Command.CONTINUE; }}} Compile and run with, {{{ ant java -jar target/floodlight.jar }}} {{{ ____RT2____ ________________ | | | | ---> | MF Router | ---->| Android Device | / |___________| |________________| / | Reciever / | S1 _______________ ___________ / ______|______ . \ | | | | / | | . ----------> |Android Device |--->| MF Router |-> --------| GNRS Server | . / |_______________| |___________| \ |_____________| Sn SensorGateway RT1 \ | \ | \ | \ _____|_____ ________________ \ | | | | --->| MF Router | ---->| Android Devive | |___________| |________________| RT3 Reciever }}} == 4. Performance ==