83 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/bash
 | 
						|
#
 | 
						|
# OVS configuration
 | 
						|
 | 
						|
LAB=${LAB:=0}
 | 
						|
BR=vpplan
 | 
						|
for p in $(ovs-vsctl list-ifaces $BR); do
 | 
						|
  ovs-vsctl set port $p vlan_mode=access
 | 
						|
done
 | 
						|
 | 
						|
# Uplink is VLAN 10
 | 
						|
ovs-vsctl add port vpp${LAB}-0-0 tag 10
 | 
						|
ovs-vsctl add port uplink tag 10
 | 
						|
 | 
						|
# Link vpp${LAB}-0 <-> vpp${LAB}-1 in VLAN 20
 | 
						|
ovs-vsctl add port vpp${LAB}-0-1 tag 20
 | 
						|
ovs-vsctl add port vpp${LAB}-1-0 tag 20
 | 
						|
 | 
						|
# Link vpp${LAB}-1 <-> vpp${LAB}-2 in VLAN 21
 | 
						|
ovs-vsctl add port vpp${LAB}-1-1 tag 21
 | 
						|
ovs-vsctl add port vpp${LAB}-2-0 tag 21
 | 
						|
 | 
						|
# Link vpp${LAB}-2 <-> vpp${LAB}-3 in VLAN 22
 | 
						|
ovs-vsctl add port vpp${LAB}-2-1 tag 22
 | 
						|
ovs-vsctl add port vpp${LAB}-3-0 tag 22
 | 
						|
 | 
						|
# Enable QinQ by allowing any amount of VLANs to be stacked
 | 
						|
ovs-vsctl set Open_vSwitch . other_config:vlan-limit=0
 | 
						|
 | 
						|
## Wire host${LAB}-0-[0123] to e2 of all VPP machines
 | 
						|
ovs-vsctl set port vpp${LAB}-0-2  vlan_mode=dot1q-tunnel tag=30
 | 
						|
ovs-vsctl set port host${LAB}-0-0 vlan_mode=dot1q-tunnel tag=30
 | 
						|
ovs-vsctl set port vpp${LAB}-1-2  vlan_mode=dot1q-tunnel tag=31
 | 
						|
ovs-vsctl set port host${LAB}-0-1 vlan_mode=dot1q-tunnel tag=31
 | 
						|
ovs-vsctl set port vpp${LAB}-2-2  vlan_mode=dot1q-tunnel tag=32
 | 
						|
ovs-vsctl set port host${LAB}-0-2 vlan_mode=dot1q-tunnel tag=32
 | 
						|
ovs-vsctl set port vpp${LAB}-3-2  vlan_mode=dot1q-tunnel tag=33
 | 
						|
ovs-vsctl set port host${LAB}-0-3 vlan_mode=dot1q-tunnel tag=33
 | 
						|
 | 
						|
## Wire host${LAB}-1-[0123] to e3 of all VPP machines
 | 
						|
ovs-vsctl set port vpp${LAB}-0-3  vlan_mode=dot1q-tunnel tag=40
 | 
						|
ovs-vsctl set port host${LAB}-1-0 vlan_mode=dot1q-tunnel tag=40
 | 
						|
ovs-vsctl set port vpp${LAB}-1-3  vlan_mode=dot1q-tunnel tag=41
 | 
						|
ovs-vsctl set port host${LAB}-1-1 vlan_mode=dot1q-tunnel tag=41
 | 
						|
ovs-vsctl set port vpp${LAB}-2-3  vlan_mode=dot1q-tunnel tag=42
 | 
						|
ovs-vsctl set port host${LAB}-1-2 vlan_mode=dot1q-tunnel tag=42
 | 
						|
ovs-vsctl set port vpp${LAB}-3-3  vlan_mode=dot1q-tunnel tag=43
 | 
						|
ovs-vsctl set port host${LAB}-1-3 vlan_mode=dot1q-tunnel tag=43
 | 
						|
 | 
						|
## Wire tap${LAB}-0-0 as 'rx' tap
 | 
						|
MIRROR=mirror-rx
 | 
						|
ovs-vsctl set port tap${LAB}-0-0 vlan_mode=native-tagged
 | 
						|
[ ovs-vsctl list mirror $MIRROR >/dev/null 2>&1 ] || \
 | 
						|
  ovs-vsctl -- --id=@m get mirror $MIRROR -- remove bridge $BR mirrors @m
 | 
						|
ovs-vsctl --id=@m create mirror name=$MIRROR \
 | 
						|
  -- --id=@p get port tap${LAB}-0-0 \
 | 
						|
  -- add bridge $BR mirrors @m \
 | 
						|
  -- set mirror $MIRROR output-port=@p \
 | 
						|
  -- set mirror $MIRROR select_dst_port=[] \
 | 
						|
  -- set mirror $MIRROR select_src_port=[]
 | 
						|
for iface in $(ovs-vsctl list-ports $BR); do
 | 
						|
  [[ $iface == tap* ]] && continue
 | 
						|
  [[ $iface == uplink ]] && continue
 | 
						|
  ovs-vsctl add mirror $MIRROR select_dst_port $(ovs-vsctl get port $iface _uuid)
 | 
						|
done
 | 
						|
 | 
						|
## Wire tap${LAB}-0-1 as 'tx' tap
 | 
						|
MIRROR=mirror-tx
 | 
						|
ovs-vsctl set port tap${LAB}-0-1 vlan_mode=native-tagged
 | 
						|
[ ovs-vsctl list mirror $MIRROR >/dev/null 2>&1 ] || \
 | 
						|
  ovs-vsctl -- --id=@m get mirror $MIRROR -- remove bridge $BR mirrors @m
 | 
						|
ovs-vsctl --id=@m create mirror name=$MIRROR \
 | 
						|
  -- --id=@p get port tap${LAB}-0-1 \
 | 
						|
  -- add bridge $BR mirrors @m \
 | 
						|
  -- set mirror $MIRROR output-port=@p \
 | 
						|
  -- set mirror $MIRROR select_dst_port=[] \
 | 
						|
  -- set mirror $MIRROR select_src_port=[]
 | 
						|
for iface in $(ovs-vsctl list-ports $BR); do
 | 
						|
  [[ $iface == tap* ]] && continue
 | 
						|
  [[ $iface == uplink ]] && continue
 | 
						|
  ovs-vsctl add mirror $MIRROR select_src_port $(ovs-vsctl get port $iface _uuid)
 | 
						|
done
 |