Changes between Version 10 and Version 11 of Internal/OpenFlow/OFIntro


Ignore:
Timestamp:
Aug 1, 2013, 8:54:49 PM (11 years ago)
Author:
akoshibe
Comment:

Legend:

Unmodified
Added
Removed
Modified
  • Internal/OpenFlow/OFIntro

    v10 v11  
    130130Mininet's datapaths are backed by OVS. Therefore, if you have a Mininet install, you get OVS for "free". You can use OVS directly for your data plane.
    131131
     132----
    132133= II More complex examples = #II
    133134It is possible to run multiple instances of controllers (for whatever reason), or different logical components together in the same network.
     
    136137=== Sections ===
    137138 [#multi 2.1 Multiple Controllers ][[BR]]
    138  [#fv 2.2 With !FlowVisor (Network virtualization/slicing) ][[BR]]
     139 [#fv 2.2 Network virtualization/slicing ][[BR]]
    139140== 2.1 Multiple Controllers == #multi
    140 You may have multiple controllers in the same logical space of the control plane for various reasons - special applications, failover, etc.
     141You may have multiple controllers in the same logical space of the control plane for various reasons - special applications, fail-over, distributed control planes, etc.
    141142 
    142143 * 2.1.1 On multiple hosts
     
    146147If each controller is running on its own host (machine, VM, etc.), there is little to change; if you have hosts A,B, and C, and Floodlight instances running on each, switches can be pointed to targets A:6633, B:6633, C:6633, or any combination thereof (switches can be pointed to multiple controllers). 
    147148
    148 === 2.1.2 On the same host ===
     149=== 2.1.2 On the same host === #2_1_2
     150==== The Floodlight configuration file ====
    149151Multiple instances of Floodlight may be run on the same host, as long as each controller listens on a separate set of sockets. In this case, all controllers would be on the same IP address(es), so you must change the ports they are listening on. These ports include the !OpenFlow control port (TCP 6633), REST API (TCP 8080), and debug (TCP 6655).
    150152
     
    179181
    180182Several entries can be added to this list to tweak TCP port values. Unfortunately, these entries may change fairly frequently due to active development.
    181  * !net.floodlightcontroller.restserver.RestApiServer.port = 8080
    182  * !net.floodlightcontroller.core.internal.FloodlightProvider.openflowport = 6633
    183  * !net.floodlightcontroller.jython.JythonDebugInterface.port = 6655
     183 * net.floodlightcontroller.restserver.!RestApiServer.port = 8080
     184 * net.floodlightcontroller.core.internal.!FloodlightProvider.openflowport = 6633
     185 * net.floodlightcontroller.jython.!JythonDebugInterface.port = 6655
    184186
    185187Each entry should be on its own line, with no spaces or newlines in between lines. For example, to change the port that Floodlight listens for switches on from the default of 6633 to 6634, append:
     
    199201}}}
    200202
    201 Each instance of the controller run on the same host can then be pointed to its own .properties file with the `-cf` flag, with different port value parameters. Going with a similar example from earlier, you may have one host A and three Floodlight instances 1,2, and 3, configured as below:
     203==== Launching multiple controllers ====
     204Each instance of the controller run on the same host can be pointed to its own .properties file with the `-cf` flag, with different port value parameters. Begin by making as many copies of the default .properties file as you will have controllers. Going with a similar example as earlier, you can have one host A and three Floodlight instances 1,2, and 3, configured as below:
    202205
    203206 || || 1 || 2 || 3 || 
     
    206209 || !JythonDebugInterface.port || 6655 || 6656 || 6657 ||
    207210
    208 No ports should be shared by the three instances, or else they will likely throw errors at startup, exiting shortly after.
    209 With a .properties file for each instance under resources/ (named 1,2, and 3.properties for this example), you may launch the controllers in a loop:
     211No ports should be shared by the three instances, or else they will probably throw errors at startup and exit shortly after.
     212With a .properties file for each instance under resources/ (named 1,2, and 3.properties for this example), you can launch the controllers in a loop for example:
    210213{{{
    211214for i in `seq 1 3`; do
     
    216219
    217220== 2.2 With !FlowVisor (Network virtualization/slicing) == #fv
     221A more typical case you might encounter is a network that is sliced, or virtualized.
     222
     223 * 2.2.1 A brief intro to network virtualization
     224 * 2.2.2 Virtualization with multiple hosts
     225 * 2.2.3 On the same host
     226
     227=== 2.2.1 A brief intro to network virtualization ===
    218228A virtualized network is organized as below:
    219229{{{
     
    225235                  [network]
    226236}}}
    227 The network hypervisor provides each controller with an illusion that it is the only controller in the network. The analogy used in the !FlowVisor whitepaper is that of multiple VMs sharing the same physical machine.
     237A network hyperviser like [http://onlab.us/flowvisor.html FlowVisor] sits between the control and data plane, intercepting and re-writing the contents of the !OpenFlow control channel to one or more controllers running independently of one another. Ultimately, the network hypervisor provides each controller with an illusion that it is the only controller in the network. It accomplishes this by
     238
     239 1. Rewriting the topology information conveyed by !OpenFlow (in the form of PORT_STATs and !PacketIns triggered by LLDP messages) before it reaches each controller, allowing it to only work on a subset, or slice, of the network, and
     240 2. Mapping the !PacketIns/!PacketOuts to and from each controller to the proper sets of switches and switch ports.   
     241
     242How the re-writing occurs depends on a set of admin-defined policies.
     243
     244
     245
     246=== 2.2.2 Virtualization with multiple hosts ===
     247We begin by introducing a simple example of a virtualized topology:
     248{{{
     249[Floodlight 1] [Floodlight 2]
     250           \    /
     251         [FlowVisor]
     252              |
     253          [Mininet]   
     254}}}
     255Each component above will be run on a separate node. Since we need more than two nodes, you may want to reserve either Sandboxes 4 or 9. The components can also be run on the same node, with the caveats discussed in the next section, 2.2.3.
     256
     257Here, Mininet will be used to emulate a three-switch, three-host data plane:
     258{{{
     259h1   h2   h3
     260 |    |    |
     261s1---s2---s3
     262}}}
     263This data plane will be sliced so that one Floodlight instance will control switches s1 and s2, and the other, s3. 
     264
     265
     266
     267=== 2.2.3 On the same host ===
     268As with the case of multiple controllers on the same VM/host, you must be careful that neither !FlowVisor nor the controllers listen on the same sets of ports. For the multiple controllers, this can be avoided as described in [#2_1_2 Section 2.1.2]. !FlowVisor and Floodlight conflict on ports 6633 and 8080.     
    228269
    229270----