= Installation and Usage = As of now this project is extremely rough around the edges. However, the information on the Floodlight [http://floodlight.openflowhub.org/getting-started/ Getting Started] page and [http://floodlight.openflowhub.org/developing-floodlight/ Development tutorial] apply almost exactly to this version of the controller and can be used to troubleshoot installation and module development/loading issues. == Installation == On Ubuntu 10.04 and later: Install dependencies: {{{ sudo apt-get install build-essential default-jdk ant python-dev eclipse }}} Fetch the source using git and built with `ant`: {{{ git clone git://github.com/akoshibe/floodlight.git cd floodlight/ git checkout -b flowvisor origin/flowvisor ant; }}} As with the regular Floodlight, `ant eclipse` allows it to work with eclipse and `ant javadoc` will produce javadocs for the code. == running in !FlowVisor mode == To run: {{{ java -jar target/floodlight.jar -cf src/main/resources/flowvisor.properties }}} This brings the controller up in "!FlowVisor mode," with two default slices containing the !LearningSwitch and Forwarding modules and four flow rules. The slice configurations are in config.json, found with the .properties file in src/main/resources/ (relative path from the Floodlight working directory). == running as a regular controller == Alternatively, since none of the original code base was modified, this version of Floodlight can be run as a normal v0.85 controller by replacing {{{ net.floodlightcontroller.core.FVProxyProvider }}} with {{{ net.floodlightcontroller.core.FloodlightProvider }}} in `src/main/resources/META-INF/services/net.floodlight.core.module.IFloodlightModule` and launching it without the -cf option. == creating a custom configuration file == As of now, !FlowVisor is required to create custom configuration files. This takes four steps: 1. configure the desired policies using `dpctl` against a running !FlowVisor 2. dump the configurations to file: {{{ dpctl dumpConfig }}} 3. 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": {{{ ... "Slice": [ ... { "config_name": "default", "flowmap_type": "federated", "name": "fl-1", "creator": "fvadmin", "passwd_crypt": "a3b88aa4453124c025c39938fb89d3cb", "passwd_salt": "-1847302276", "controller_hostname": "localhost", "controller_port": 6634, "modules": "net.floodlightcontroller.forwarding.Forwarding", "contact_email": "foo@sampledomain.org", "drop_policy": "exact", "lldp_spam": true }, ... }}} 4. edit flowvisor.properties to point FVProxyProvider to the new configuration file. The path should be relative to the Floodlight working directory: {{{ net.floodlightcontroller.core.FVProxyProvider.configfile = /src/main/resources/config.json }}} Unless already there, the modules added to the config file should also be added to flowvisor.properties.