Shared VLAN Support

The following procedure can be used to utilize shared VLANs that are defined on rack configuration.

  1. Quantum networks must be available on the head-node.
  2. ORCA slice is created with a broadcast link, VLAN tag is specified.
  3. OpenFlow slice is created on the dataplane switch for the specified VLAN.

Below are the commands listed to show the actions with examples on PUCP rack. Flowvisor fvctl tool is used to manage OpenFlow slices. Scripts that utilize fvctl are located at /opt/custom/scripts_for_shared_vlan directory.

1. Quantum networks must be available on the head-node. Quantum networks are already created for VLANs 100-109 and 110-149 as below, so this step can be skipped. (Bandwidth is set to max 10Gb/s on the quantum network configuration, however this is a shared resource.)

# Source novarc

[root@pucp-hn ~]# source /etc/orca/am+broker-12080/ec2/novarc 


# Create quantum network: Specify type as “vlan-data” and VLAN tag

[root@pucp-hn ~]# quantum-network-create.sh -h
   Usage: /home/mcevik/scripts_for_shared_vlan/quantum-network-create.sh [-n <network>] [-t <vlan_tag>] [-h]
	 -n: network:       vlan-data
	 -t: vlan_tag:      100-109, 110-149
	 -h: Usage

[root@pucp-hn ~]# quantum-network-create.sh -n vlan-data -t 100
--- QUANTUM Create Net for VLAN: 100
line
--- QUANTUM List Nets
Virtual Networks for Tenant geni-orca
	Network ipv4:vlan-data:508:10000:1250 with ID: 120f4c09-d99b-4c9c-bfdf-04c1a7ec8ae9
	Network ipv4:vlan-data:100:10000000000:1250000 with ID: 7f8e1aa4-23c4-4122-8a6a-a162ff4b1528
	Network ipv4:of-data:1750:10000000000:1250000 with ID: cecd77ff-9a28-4638-bf54-971aeb623241
	Network ipv4:vlan-storage:1009:10000000000:1250000 with ID: d35f7475-e1d4-461e-80be-8f0210624b9e


# List quantum networks

[root@pucp-hn ~]# quantum list_nets_detail geni-orca
Virtual Networks for Tenant geni-orca
	Network ipv4:vlan-data:107:9940000:1242500 with ID: 0fd0b738-8c80-49e2-bd08-e73e2e021d97
	Network ipv4:vlan-data:103:9940000:1242500 with ID: 21ed0237-0db2-425f-ae57-5be9acce6f1a
	Network ipv4:vlan-data:100:9940000:1242500 with ID: 307d26cb-da48-4059-8056-2914057e0225
	Network ipv4:vlan-data:104:9940000:1242500 with ID: 3a01f56e-6770-4110-8ff2-1ccf0521e984
	Network ipv4:vlan-data:108:9940000:1242500 with ID: 71355094-9d56-41c0-b888-2e5d653569ea
	Network ipv4:vlan-data:508:10000:1250 with ID: 7ed16130-9522-4dce-b0e3-a309e2057017
	Network ipv4:vlan-data:102:9940000:1242500 with ID: 93a956ff-bb77-428d-aadc-04f8386b5c92
	Network ipv4:vlan-data:509:100000:12500 with ID: 95c906d3-4a5d-4976-8fbd-6b9d75e9f057
	Network ipv4:vlan-data:105:9940000:1242500 with ID: a1b73f84-9c64-4f23-a5a1-b66db99fd7ce
	Network ipv4:vlan-data:106:9940000:1242500 with ID: b69ab4a1-4fc5-4f51-8ea5-4ec05443c25f
	Network ipv4:of-data:1750:10000000000:1250000 with ID: cecd77ff-9a28-4638-bf54-971aeb623241
	Network ipv4:vlan-storage:1009:10000000000:1250000 with ID: d35f7475-e1d4-461e-80be-8f0210624b9e
	Network ipv4:vlan-data:109:9940000:1242500 with ID: dca91863-df39-4f78-b796-8da7784a46a9
	Network ipv4:vlan-data:101:9940000:1242500 with ID: eb0145dd-dc86-4cb5-b1d0-e3d7b314d269

2. Create slice with a broadcast link, specify the VLAN tag.

After the slice is created, dataplane interfaces on the VMs are plumbed and connected to the quantum network automatically. Interfaces can be seen as below.

# Show quantum network information for the given network

[root@pucp-hn scripts_for_shared_vlan]# quantum show_net_detail geni-orca 307d26cb-da48-4059-8056-2914057e0225
Network ID: 307d26cb-da48-4059-8056-2914057e0225
Network Name: ipv4:vlan-data:100:9940000:1242500
operational Status: UP
Ports: 	ID: 617e18b4-5baf-4e6c-aee5-cf09b5c6728a
		administrative state: DOWN
		interface: instance-0000055a.fa:16:3e:00:24:27
	ID: a02c9075-81e9-4b2a-b87f-4f3a4b826900
		administrative state: DOWN
		interface: instance-00000558.fa:16:3e:00:41:b0
	ID: d53e90af-c2b2-4fca-9ab2-825fd0d98617
		administrative state: DOWN
		interface: instance-00000559.fa:16:3e:00:4d:a5

When the slice is deleted, interfaces are disconnected from the quantum network automatically.

[root@pucp-hn ~]# quantum show_net_detail geni-orca 307d26cb-da48-4059-8056-2914057e0225
Network ID: 307d26cb-da48-4059-8056-2914057e0225
Network Name: ipv4:vlan-data:100:9940000:1242500
operational Status: UP
Ports: 	ID: <none>
		administrative state: <none>
		interface: <none>

3. OpenFlow slices need to be created on the dataplane switch for the specified VLAN.

Below are the FlowVisor commands that are used to manage OpenFlow slices. Also, some scripts are prepared that actually utilizes fvctl to create OpenFlow slices and FlowSpaces.

# List existing OpenFlow slices

[root@pucp-hn ~]# /opt/flowvisor/bin/fvctl --passwd-file=/etc/flowvisor.passwd listSlices
Slice 0: fvadmin
Slice 1: orca-508


# List existing flow spaces

[root@pucp-hn ~]# /opt/flowvisor/bin/fvctl --passwd-file=/etc/flowvisor.passwd listFlowSpace
Got reply:
rule 0: FlowEntry[dpid=[all_dpids],ruleMatch=[OFMatch[in_port=3,dl_vlan=0x1fc]],actionsList=[Slice:orca-508=4],id[10087995],priority=[0],]
rule 1: FlowEntry[dpid=[all_dpids],ruleMatch=[OFMatch[in_port=2,dl_vlan=0x1fc]],actionsList=[Slice:orca-508=4],id[10087997],priority=[0],]
rule 2: FlowEntry[dpid=[all_dpids],ruleMatch=[OFMatch[in_port=1,dl_vlan=0x1fc]],actionsList=[Slice:orca-508=4],id[10087999],priority=[0],]
rule 3: FlowEntry[dpid=[all_dpids],ruleMatch=[OFMatch[in_port=0,dl_vlan=0x1fc]],actionsList=[Slice:orca-508=4],id[10088001],priority=[0],]
rule 4: FlowEntry[dpid=[all_dpids],ruleMatch=[OFMatch[in_port=7,dl_vlan=0x1fc]],actionsList=[Slice:orca-508=4],id[10088003],priority=[0],]
rule 5: FlowEntry[dpid=[all_dpids],ruleMatch=[OFMatch[in_port=6,dl_vlan=0x1fc]],actionsList=[Slice:orca-508=4],id[10088005],priority=[0],]
rule 6: FlowEntry[dpid=[all_dpids],ruleMatch=[OFMatch[in_port=5,dl_vlan=0x1fc]],actionsList=[Slice:orca-508=4],id[10088007],priority=[0],]
rule 7: FlowEntry[dpid=[all_dpids],ruleMatch=[OFMatch[in_port=4,dl_vlan=0x1fc]],actionsList=[Slice:orca-508=4],id[10088009],priority=[0],]


# Create OpenFlow Slice: 
# Specify VLAN tag
# A specific controller can be given, otherwise floodlight will be started

[root@pucp-hn scripts_for_shared_vlan]# openflow-slice-create.sh 
   Usage: /root/bin/openflow-slice-create.sh  [-t <fv_vlan>] [-c <controller>] [-h]
	 -t: flowvisor vlan:      100
	 -c: controller url:      tcp:hostname:port
	 -h: Usage

# Create OpenFlow slice for VLAN 100, no controller specified, floodlight is started

[root@pucp-hn scripts_for_shared_vlan]# openflow-slice-create.sh -t 100

============================================================================== 
--- Start Floodlight and return Controller URL
============================================================================== 
CTRL_URL=tcp:pucp-hn.exogeni.net:54848

============================================================================== 
--- Create OpenFlow Slice
============================================================================== 
creating OpenFlow slice orca-100 on flowvisor https://localhost:8080/xmlrpc
New password: success!
Slice 0: fvadmin
Slice 1: orca-100
Slice 2: orca-508
Slice 3: orca-509
adding VLAN flowspace for tag 100 with ports 0 1 2 3 4 5 6 7 in slice orca-100 on flowvisor https://localhost:8080/xmlrpc
--- FLOWMATCH: in_port=0,dl_vlan=100
success: 13788915
--- FLOWMATCH: in_port=1,dl_vlan=100
success: 13789393
--- FLOWMATCH: in_port=2,dl_vlan=100
success: 13789863
--- FLOWMATCH: in_port=3,dl_vlan=100
success: 13790283
--- FLOWMATCH: in_port=4,dl_vlan=100
success: 13790765
--- FLOWMATCH: in_port=5,dl_vlan=100
success: 13791187
--- FLOWMATCH: in_port=6,dl_vlan=100
success: 13792157
--- FLOWMATCH: in_port=7,dl_vlan=100
success: 13792987


# List OpenFlow slices

[root@pucp-hn scripts_for_shared_vlan]# /opt/flowvisor/bin/fvctl --passwd-file=/etc/flowvisor.passwd listSlices
Slice 0: fvadmin
Slice 1: orca-100
Slice 2: orca-508
Slice 3: orca-509


# Get OpenFlow slice information

[root@pucp-hn scripts_for_shared_vlan]# /opt/flowvisor/bin/fvctl --passwd-file=/etc/flowvisor.passwd getSliceInfo orca-100
Got reply:
connection_1=00:01:00:01:e8:d8:5a:1d-->/200.16.4.71:32970-->pucp-hn.exogeni.net/200.16.4.71:54848
contact_email=exogeni-ops@renci.org
controller_hostname=pucp-hn.exogeni.net
controller_port=54848
creator=fvadmin


# List FlowSpaces

[root@pucp-hn scripts_for_shared_vlan]# /opt/flowvisor/bin/fvctl --passwd-file=/etc/flowvisor.passwd listFlowSpace
Got reply:
... [output omitted] ...
rule 16: FlowEntry[dpid=[all_dpids],ruleMatch=[OFMatch[in_port=0,dl_vlan=0x64]],actionsList=[Slice:orca-100=4],id[13788915],priority=[0],]
rule 17: FlowEntry[dpid=[all_dpids],ruleMatch=[OFMatch[in_port=1,dl_vlan=0x64]],actionsList=[Slice:orca-100=4],id[13789393],priority=[0],]
rule 18: FlowEntry[dpid=[all_dpids],ruleMatch=[OFMatch[in_port=2,dl_vlan=0x64]],actionsList=[Slice:orca-100=4],id[13789863],priority=[0],]
rule 19: FlowEntry[dpid=[all_dpids],ruleMatch=[OFMatch[in_port=3,dl_vlan=0x64]],actionsList=[Slice:orca-100=4],id[13790283],priority=[0],]
rule 20: FlowEntry[dpid=[all_dpids],ruleMatch=[OFMatch[in_port=4,dl_vlan=0x64]],actionsList=[Slice:orca-100=4],id[13790765],priority=[0],]
rule 21: FlowEntry[dpid=[all_dpids],ruleMatch=[OFMatch[in_port=5,dl_vlan=0x64]],actionsList=[Slice:orca-100=4],id[13791187],priority=[0],]
rule 22: FlowEntry[dpid=[all_dpids],ruleMatch=[OFMatch[in_port=6,dl_vlan=0x64]],actionsList=[Slice:orca-100=4],id[13792157],priority=[0],]
rule 23: FlowEntry[dpid=[all_dpids],ruleMatch=[OFMatch[in_port=7,dl_vlan=0x64]],actionsList=[Slice:orca-100=4],id[13792987],priority=[0],]


# Create OpenFlow slice for VLAN 101, controller at tcp:<hostname>:port is given

[root@pucp-hn scripts_for_shared_vlan]# openflow-slice-create.sh -t 101 -c tcp:152.54.9.174:6633
CTRL_URL=tcp:152.54.9.174:6633

============================================================================== 
--- Create OpenFlow Slice
============================================================================== 
creating OpenFlow slice orca-101 on flowvisor https://localhost:8080/xmlrpc
New password: success!
Slice 0: orca-510
Slice 1: fvadmin
Slice 2: orca-100
Slice 3: orca-508
Slice 4: orca-101
Slice 5: orca-509
adding VLAN flowspace for tag 101 with ports 0 1 2 3 4 5 6 7 in slice orca-101 on flowvisor https://localhost:8080/xmlrpc
--- FLOWMATCH: in_port=0,dl_vlan=101
success: 14079129
--- FLOWMATCH: in_port=1,dl_vlan=101
success: 14080781
--- FLOWMATCH: in_port=2,dl_vlan=101
success: 14082347
--- FLOWMATCH: in_port=3,dl_vlan=101
success: 14083889
--- FLOWMATCH: in_port=4,dl_vlan=101
success: 14085187
--- FLOWMATCH: in_port=5,dl_vlan=101
success: 14086881
--- FLOWMATCH: in_port=6,dl_vlan=101
success: 14088701
--- FLOWMATCH: in_port=7,dl_vlan=101
success: 14090263


# Get OpenFlow slice information

[root@pucp-hn scripts_for_shared_vlan]# /opt/flowvisor/bin/fvctl --passwd-file=/etc/flowvisor.passwd getSliceInfo orca-101
Got reply:
connection_1=00:01:00:01:e8:d8:5a:1d-->/200.16.4.71:22876-->/152.54.9.174:6633
contact_email=exogeni-ops@renci.org
controller_hostname=152.54.9.174
controller_port=6633
creator=fvadmin


# List FlowSpaces

[root@pucp-hn scripts_for_shared_vlan]# /opt/flowvisor/bin/fvctl --passwd-file=/etc/flowvisor.passwd listFlowSpace
Got reply:
... [output omitted] ...
rule 32: FlowEntry[dpid=[all_dpids],ruleMatch=[OFMatch[in_port=0,dl_vlan=0x65]],actionsList=[Slice:orca-101=4],id[14079129],priority=[0],]
rule 33: FlowEntry[dpid=[all_dpids],ruleMatch=[OFMatch[in_port=1,dl_vlan=0x65]],actionsList=[Slice:orca-101=4],id[14080781],priority=[0],]
rule 34: FlowEntry[dpid=[all_dpids],ruleMatch=[OFMatch[in_port=2,dl_vlan=0x65]],actionsList=[Slice:orca-101=4],id[14082347],priority=[0],]
rule 35: FlowEntry[dpid=[all_dpids],ruleMatch=[OFMatch[in_port=3,dl_vlan=0x65]],actionsList=[Slice:orca-101=4],id[14083889],priority=[0],]
rule 36: FlowEntry[dpid=[all_dpids],ruleMatch=[OFMatch[in_port=4,dl_vlan=0x65]],actionsList=[Slice:orca-101=4],id[14085187],priority=[0],]
rule 37: FlowEntry[dpid=[all_dpids],ruleMatch=[OFMatch[in_port=5,dl_vlan=0x65]],actionsList=[Slice:orca-101=4],id[14086881],priority=[0],]
rule 38: FlowEntry[dpid=[all_dpids],ruleMatch=[OFMatch[in_port=6,dl_vlan=0x65]],actionsList=[Slice:orca-101=4],id[14088701],priority=[0],]
rule 39: FlowEntry[dpid=[all_dpids],ruleMatch=[OFMatch[in_port=7,dl_vlan=0x65]],actionsList=[Slice:orca-101=4],id[14090263],priority=[0],]


# Check running floodlight processes 

[root@pucp-hn scripts_for_shared_vlan]# ps -ef | grep flood
root      23335      1 13 00:59 pts/6    00:01:11 java -server -Xmx128m -Xms64m -Xmn32m -Xss256k -XX:+UseParallelOldGC -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:InlineSmallCode=8192 -XX:MaxInlineSize=8192 -XX:FreqInlineSize=8192 -XX:CompileThreshold=1500 -XX:PreBlockSpin=8 -Dnet.orca.vlan=vlan-100- -Dnet.floodlightcontroller.jython.JythonDebugInterface.port=0 -Dnet.floodlightcontroller.restserver.RestApiServer.port=59848 -Dnet.floodlightcontroller.core.FloodlightProvider.openflowport=54848 -jar /opt/floodlight/floodlight.jar
2006      25913      1 18 01:02 ?        00:01:06 java -server -Xmx128m -Xms64m -Xmn32m -Xss256k -XX:+UseParallelOldGC -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:InlineSmallCode=8192 -XX:MaxInlineSize=8192 -XX:FreqInlineSize=8192 -XX:CompileThreshold=1500 -XX:PreBlockSpin=8 -Dnet.orca.vlan=vlan-510- -Dnet.floodlightcontroller.jython.JythonDebugInterface.port=0 -Dnet.floodlightcontroller.restserver.RestApiServer.port=55079 -Dnet.floodlightcontroller.core.FloodlightProvider.openflowport=50079 -jar /opt/floodlight/floodlight.jar
root      32309  76484  0 01:08 pts/6    00:00:00 grep flood
2006     145009      1  3 00:27 ?        00:01:25 java -server -Xmx128m -Xms64m -Xmn32m -Xss256k -XX:+UseParallelOldGC -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:InlineSmallCode=8192 -XX:MaxInlineSize=8192 -XX:FreqInlineSize=8192 -XX:CompileThreshold=1500 -XX:PreBlockSpin=8 -Dnet.orca.vlan=vlan-508- -Dnet.floodlightcontroller.jython.JythonDebugInterface.port=0 -Dnet.floodlightcontroller.restserver.RestApiServer.port=58123 -Dnet.floodlightcontroller.core.FloodlightProvider.openflowport=53123 -jar /opt/floodlight/floodlight.jar
2006     147073      1  3 00:30 ?        00:01:27 java -server -Xmx128m -Xms64m -Xmn32m -Xss256k -XX:+UseParallelOldGC -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:InlineSmallCode=8192 -XX:MaxInlineSize=8192 -XX:FreqInlineSize=8192 -XX:CompileThreshold=1500 -XX:PreBlockSpin=8 -Dnet.orca.vlan=vlan-509- -Dnet.floodlightcontroller.jython.JythonDebugInterface.port=0 -Dnet.floodlightcontroller.restserver.RestApiServer.port=56486 -Dnet.floodlightcontroller.core.FloodlightProvider.openflowport=51486 -jar /opt/floodlight/floodlight.jar


# Delete OpenFlow Slice (FlowSpace that correspond to the slice are removed as well)
# Floodlight is stopped if running for the slice

[root@pucp-hn scripts_for_shared_vlan]# openflow-slice-delete.sh -t 101
Delete OpenFlow slice orca-101 on flowvisor https://localhost:8080/xmlrpc
success!
OpenFlow Slice: orca-101 deleted
Slice 0: orca-510
Slice 1: fvadmin
Slice 2: orca-100
Slice 3: orca-508
Slice 4: orca-509


# Delete OpenFlow Slice (FlowSpace that correspond to the slice are removed as well)
# Floodlight is stopped if running for the slice

[root@pucp-hn scripts_for_shared_vlan]# openflow-slice-delete.sh -t 100
Delete OpenFlow slice orca-100 on flowvisor https://localhost:8080/xmlrpc
success!
OpenFlow Slice: orca-100 deleted
Slice 0: orca-510
Slice 1: fvadmin
Slice 2: orca-508
Slice 3: orca-509
root      23335      1  6 00:59 pts/6    00:01:16 java -server -Xmx128m -Xms64m -Xmn32m -Xss256k -XX:+UseParallelOldGC -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:InlineSmallCode=8192 -XX:MaxInlineSize=8192 -XX:FreqInlineSize=8192 -XX:CompileThreshold=1500 -XX:PreBlockSpin=8 -Dnet.orca.vlan=vlan-100- -Dnet.floodlightcontroller.jython.JythonDebugInterface.port=0 -Dnet.floodlightcontroller.restserver.RestApiServer.port=59848 -Dnet.floodlightcontroller.core.FloodlightProvider.openflowport=54848 -jar /opt/floodlight/floodlight.jar

============================================================================== 
--- Stop Floodlight
============================================================================== 
Navigation
Print/export