| 18 | | == Approach. == |
| 19 | | Development is done on two VMs, one hosting Flowvisor and Floodlight source, and the other, Mininet for testing our code. |
| | 18 | == Setup == |
| | 19 | Development is done on two VMs, one for Flowvisor and Floodlight source, and the other, Mininet for testing our code. |
| | 20 | |
| | 21 | * '''VM1(10.50.250.2):''' 3-switch, 3-host Mininet topology pointed to external controller in VM2: |
| | 22 | |
| | 23 | Topology: |
| | 24 | {{{ |
| | 25 | h4 h5 h6 |
| | 26 | | | | |
| | 27 | s1---s2---s3 |
| | 28 | }}} |
| | 29 | Mininet config: |
| | 30 | {{{ |
| | 31 | # mn --topo=linear,3 --controller=remote --ip=10.50.250.17 --port=6633 |
| | 32 | }}} |
| | 33 | * '''VM2(10.50.250.17):''' Flowvisor on port 6633, with a slice to point two switches to Floodlight instance on 6634 |
| | 34 | |
| | 35 | !FlowVisor configuration: |
| | 36 | {{{ |
| | 37 | # fvctl createSlice fl-1 tcp:localhost:6634 foo@sampledomain.org |
| | 38 | # fvctl addFlowSpace 00:00:00:00:00:00:00:02 1000 any "Slice:fl-1=7" |
| | 39 | # fvctl addFlowSpace 00:00:00:00:00:00:00:01 1000 any "Slice:fl-1=7" |
| | 40 | }}} |
| | 41 | Floodlight config alteration (in src/main/resources/config.properties): |
| | 42 | {{{ |
| | 43 | net.floodlightcontroller.restserver.RestApiServer.port = 8088 |
| | 44 | net.floodlightcontroller.core.FloodlightProvider.openflowport = 6634 |
| | 45 | }}} |
| | 46 | The REST API port is changed from 8080 to prevent conflict with Flowvisor's services. |
| | 47 | |
| | 48 | == Approach == |
| | 49 | The general flow of operation needed is the following: |
| | 50 | 1. The Acceptor (OFSwitchAcceptor) listens for all OFTypes (!OpenFlow message types) and all switch join/leave events. |
| | 51 | 2. When a new switch joins, the Acceptor hands the switch's connection to a Classifier (FVClassifier). |
| | 52 | 3. The Classifier fetches all slices associated with the switch and launches a Slicer (FVSlicer) per module. |
| | 53 | * mappings of DPID to slices are found through configurations (the Flowmap) |
| | 54 | * modules associated with the control module (the primary module defining the behavior of a switch for that slice) may be grouped together in a slice. |
| | 55 | 4. Each Slicer sets up event dispatching for the modules associated with a slice. |
| | 56 | |
| | 57 | Event handling would (probably) look like the following. For switch-to-slice: |
| | 58 | |