= !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 == == 1.1 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)]] == 1.2 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]. == 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 }}} == 4. Performance == == 5. Juniper Networks Hardware == There are 6 Juniper Routers available in the lab, two '''M7i''' Multiservice Edge routers and four '''J6350''' Enterprise Service routers. == 5.1 Overview == The router architectures separate control operations from packet forwarding operations, which helps to eliminate processing and traffic bottlenecks. Control operations in the router are performed by the Routing Engine, which runs Junos OS to handle routing protocols, traffic engineering, policy, policing, monitoring, and configuration management. Application-specific integrated circuits (ASICs) enable the router to forward data at the high speeds. Forwarding operations in the router are performed by the Packet Forwarding Engine, which consists of hardware, including ASICs, designed by Juniper Networks. '''M7i Edge Routers''' The M7i Multiservice Edge Router is a routing system that provides ATM, channelized, Ethernet, IP services, and SONET/SDH interfaces for large networks and network applications, such as those supported by Internet service providers (ISPs). The router accommodates upto four Physical Interface Cards (PICs). In addition to the PICs, the Fixed Interface Card (FIC) provides two Fast Ethernet ports. The built-in tunnel interface on the Compact Forwarding Engine Board (CFEB) and Enhanced Compact Forwarding Engine Board (CFEB-E) provides tunneling services. '''J 6350 Service Routers''' The J6350 is a modular router for enterprises running desktops, servers, VoIP, CRM/ERP/SCM applications. The J6350 Modular Router offers six PIM slots for additional LAN/WAN connectivity, Avaya VoIP Gateway, and WAN acceleration. The router accommodates upto six Physical Interface Cards (PICs). In addition to the PICs, the Fixed Interface Card (FIC) provides 4 Gigabit Ethernet ports. == 5.2 Specifications & Interfaces == '''1.Hardware:''' '''''M7i''''' : Both the M7i's have the same hardware specs as listed below: Routing Engine: RE-850 Processor: 850-MHz Pentium III Memory: 1536 MB Disk: 40 GB Hard disk Media: Upto 1 GB CompactFlash card Ports: 2 Fast Ethernet PIC slots: 4 PICs Onboard: One 2-port STM-1/OC-3 ATM2 MMF One 4-port STM-1/OC-3 SONET MMF One 4-port 100 Mb Ethernet '''''J 6350''''': All the 4 J 6350 routers have the same hardware specs as listed below: Memory: 1 GB Media: 2 USB ports for external storage Ports: 4 Gigabit Ethernet 10/100/1000 Mbps PIC slots: 6 PICs On board: None PICs Supported: Gigabit Ethernet(1/6/8/16–ports); Dual-Port Fast Ethernet; Dual-Port T1/E1/ISDN PRI; 4-port Fast Ethernet; 4-port ISDN For detailed hardware specs of M7i and J6350, visit: [http://www.juniper.net/as/en/products-services/routing/j-series/j6350/] [http://www.juniper.net/us/en/products-services/routing/m-series/m7i/] '''2.Software:''' '''''M7i''''' OS: Junos 11.4 (recommended), Upgradable upto 13.2 '''''J6350''''' OS: Junos 11.4 (recommended), Upgradable upto 12.1 '''''Features:''''' Junos OS v11.4: Access Privilege; Class of Service; Firewall Filters and Traffic Policers; Broadband Gateway; MPLS Applications; Multicast Protocols; Network Interfaces; Routing Policy; Routing Protocols; Services Interfaces VPNs Junos OS v12.1 onwards, OpenFlow can be enabled by installing specific daemons to the Junos OS For detailed specs of different Junos versions,visit: [http://www.juniper.net/techpubs/en_US/release-independent/junos/information-products/pathway-pages/junos/product/]