Changes between Initial Version and Version 1 of Internal/OpenFlow/FloodlightFVPort


Ignore:
Timestamp:
Aug 19, 2012, 7:36:09 AM (12 years ago)
Author:
akoshibe
Comment:

Legend:

Unmodified
Added
Removed
Modified
  • Internal/OpenFlow/FloodlightFVPort

    v1 v1  
     1= Enabling !FlowVisor-like Slicing in Floodlight =
     2
     3This GSoC 2012 project aims to incorporate !FlowVisor's network resource slicing features into Floodlight.
     4
     5== Motivation and Overview ==
     6
     7Floodlight is a modularized !OpenFlow controller, in that its functional components can be split into two major parts, a core event dispatcher and the various event handlers, or modules, that process these events. The key point here is that Floodlight's modular structure allows for:
     8
     9 1. Extensibility, in that new functionalities can be added as new modules, and
     10 2. Multiple functionalities to coexist as modules on the same controller.
     11
     12Currently, 2) is only partially true, as modules that have conflicting functions may not coexist on a running Floodlight instance. As an example, the learning switch and forwarding modules will conflict, as they both send a PACKET_OUT to a switch - The switch will respond with a buffer error when it receives the second PACKET_OUT, as it had already sent the packet out.   
     13
     14In the case that the conflicting modules are running on separate instances of Floodlight on the same network, this situation can be averted by network slicing. A slice can be thought of as an !OpenFlow controller and the network resources allocated to it by a hypervisor-like entity such as !FlowVisor. With proper resource allocation, which guarantees isolation, multiple controllers can coexist on the network without interfering with each other.
     15
     16This project draws an analog between the individual modules and controllers, and attempts to implement an isolation scheme within Floodlight to isolate conflicting modules, allowing them to run properly on the same controller.
     17
     18=== Design Goals ===
     19
     20The goals of this project can be summarized as follows:
     21
     22 * Implement a slicing scheme that prevents unwanted interaction between modules
     23 * Allow control of slice behavior through a configuration file
     24 * Avoid modification of existing Floodlight source code
     25 * Provide an easy way to switch between normal Floodlight and "!FlowVisor" modes of operation
     26 
     27=== Assumptions ===
     28
     29The following assumptions are made as a consideration of the amount of time provided by GSoC : 
     30
     31 * All modules to be run are loaded at startup, and remain subscribed to events as long as Floodlight is running
     32 * Several modules such as link discovery and device manager need a global view of the network and so should not be restricted
     33 * Each slice can isolate one module
     34 * The configurations are not persistent
     35
     36== Usage ==
     37
     38As of now this project is extremely rough around the edges.
     39
     40==== Installation ====
     41
     42The source code can be fetched using git and built with `ant`:
     43{{{
     44git clone git://github.com/akoshibe/floodlight.git
     45cd floodlight/
     46git checkout -b flowvisor origin/flowvisor
     47ant;
     48}}}
     49
     50As with the regular Floodlight, `ant eclipse` allows it to work with eclipse and `ant javadoc` will produce javadocs for the code.
     51
     52==== running in !FlowVisor mode ====
     53
     54To run:
     55{{{
     56java -jar target/floodlight.jar -cf src/main/resources/flowvisor.properties
     57}}}
     58
     59This brings the controller up in "!FlowVisor mode," with two default slices containing the !LearningSwitch and Forwarding modules. The slice configurations are in config.json, found with the .properties file in [floodlight working directory]/src/main/resources/. 
     60
     61==== running as a regular controller ====
     62
     63Alternatively, since none of the original code base was modified, this version of Floodlight can be run as a normal v0.85 controller by replacing
     64{{{
     65net.floodlightcontroller.core.FVProxyProvider
     66}}}
     67with
     68{{{
     69net.floodlightcontroller.core.FloodlightProvider
     70}}}
     71in `src/main/resources/META-INF/services/net.floodlight.core.module.IFloodlightModule` and launching it without the -cf option.
     72
     73==== creating a custom configuration file ====
     74As of now, !FlowVisor is required to create custom configuration files. This takes four steps:
     75
     76 1. configure the desired policies using `dpctl` against a running !FlowVisor   
     77 1. dump the configurations to file using `dpctl dumpConfig <filename>`
     78 1. edit the configuration file: add each module to be isolated to a slice, with "modules" as the key and the fully qualified name of the module as the value. The value "none" may be used for a slice not associated with any modules. For example, the following isolates the Forwarding module in a slice named "fl-1":
     79{{{
     80   ...
     81   
     82   "Slice": [
     83   ...     
     84      {
     85         "config_name": "default",
     86         "flowmap_type": "federated",
     87         "name": "fl-1",
     88         "creator": "fvadmin",
     89         "passwd_crypt": "a3b88aa4453124c025c39938fb89d3cb",
     90         "passwd_salt": "-1847302276",
     91         "controller_hostname": "localhost",
     92         "controller_port": 6634,
     93         "modules": "net.floodlightcontroller.forwarding.Forwarding",
     94         "contact_email": "foo@sampledomain.org",
     95         "drop_policy": "exact",
     96         "lldp_spam": true
     97      },
     98   ...
     99}}}
     100 4. edit flowvisor.properties to point FVProxyProvider to the new configuration file. The path should be relative to the Floodlight working directory:
     101{{{
     102net.floodlightcontroller.core.FVProxyProvider.configfile = /src/main/resources/config.json
     103}}}
     104
     105Unless already there, the modules added to the config file should also be added to flowvisor.properties.
     106
     107
     108
     109== Internal Links ==
     110 
     111
     112== External Links ==
     113 * http://floodlight.openflowhub.org/ Floodlight Home Page
     114 * https://openflow.stanford.edu/display/DOCS/Flowvisor !FlowVisor Wiki