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 | |