Integrated Xconnect into SR Sanity
Change-Id: Ib70361da9f3c5fcd13c4ec65cbc9eb425c8ba0ed
diff --git a/TestON/tests/USECASE/SegmentRouting/dependencies/cord_fabric.py b/TestON/tests/USECASE/SegmentRouting/dependencies/cord_fabric.py
index c890177..4f52689 100755
--- a/TestON/tests/USECASE/SegmentRouting/dependencies/cord_fabric.py
+++ b/TestON/tests/USECASE/SegmentRouting/dependencies/cord_fabric.py
@@ -5,7 +5,7 @@
from mininet.net import Mininet
from mininet.topo import Topo
-from mininet.node import RemoteController, UserSwitch, Host
+from mininet.node import RemoteController, UserSwitch, Host, OVSBridge
from mininet.link import TCLink
from mininet.log import setLogLevel
from mininet.cli import CLI
@@ -23,7 +23,6 @@
help='number of hosts per leaf switch, default=2' )
parser.add_option( '--onos', dest='onos', type='int', default=0,
help='number of ONOS Instances, default=0, 0 means localhost, 1 will use OC1 and so on' )
-
(options, args) = parser.parse_args( )
return options, args
@@ -34,32 +33,42 @@
class LeafAndSpine( Topo ):
def __init__( self, spine=2, leaf=2, fanout=2, **opts ):
"Create Leaf and Spine Topo."
-
Topo.__init__( self, **opts )
-
# Add spine switches
spines = { }
+ leafs = { }
for s in range( spine ):
spines[ s ] = self.addSwitch( 'spine10%s' % (s + 1),
dpid="00000000010%s" % (s + 1) )
# Set link speeds to 100Mb/s
linkopts = dict( bw=100 )
-
# Add Leaf switches
for ls in range( leaf ):
- leafSwitch = self.addSwitch( 'leaf%s' % (ls + 1),
- dpid="00000000000%s" % (1 + ls) )
+ leafs[ ls ] = self.addSwitch( 'leaf%s' % (ls + 1),
+ dpid="00000000000%s" % (1 + ls) )
# Connect leaf to all spines
for s in range( spine ):
switch = spines[ s ]
- self.addLink( leafSwitch, switch, **linkopts )
+ self.addLink( leafs[ ls ], switch, **linkopts )
# Add hosts under a leaf, fanout hosts per leaf switch
for f in range( fanout ):
host = self.addHost( 'h%s' % (ls * fanout + f + 1),
cls=IpHost,
ip='10.0.%s.%s/24' % ((ls + 1), (f + 1)),
gateway='10.0.%s.254' % (ls + 1) )
- self.addLink( host, leafSwitch, **linkopts )
+ self.addLink( host, leafs[ ls ], **linkopts )
+ # Add Xconnect simulation
+ br1 = self.addSwitch( 'br1', cls=OVSBridge )
+ self.addLink( br1, leafs[ 0 ], **linkopts )
+ for vid in [ 5, 10 ]:
+ olt = self.addHost( 'olt%s' % vid, cls=VLANHost, vlan=vid,
+ ip="10.%s.0.1/24" % vid
+ , mac="00:00:%02d:00:00:01" % vid )
+ vsg = self.addHost( 'vsg%s' % vid, cls=VLANHost, vlan=vid,
+ ip="10.%s.0.2/24" % vid
+ , mac="00:00:%02d:00:00:02" % vid )
+ self.addLink( olt, leafs[ 0 ], **linkopts )
+ self.addLink( vsg, br1, **linkopts )
class IpHost( Host ):
@@ -74,6 +83,29 @@
self.cmd( 'ip route add default via %s' % self.gateway )
+class VLANHost( Host ):
+ "Host connected to VLAN interface"
+
+ def config( self, vlan=100, **params ):
+ """Configure VLANHost according to (optional) parameters:
+ vlan: VLAN ID for default interface"""
+ r = super( VLANHost, self ).config( **params )
+ intf = self.defaultIntf( )
+ # remove IP from default, "physical" interface
+ self.cmd( 'ifconfig %s inet 0' % intf )
+ intf = self.defaultIntf( )
+ # create VLAN interface
+ self.cmd( 'vconfig add %s %d' % (intf, vlan) )
+ self.cmd( 'ifconfig %s.%d %s' % (intf, vlan, params[ 'ip' ]) )
+ # update the intf name and host's intf map
+ self.cmd( 'ifconfig %s.%d mtu 1480' % (intf, vlan) )
+ newName = '%s.%d' % (intf, vlan)
+ # update the (Mininet) interface to refer to VLAN interface name
+ intf.name = newName
+ # add VLAN interface to host's name to intf map
+ self.nameToIntf[ newName ] = intf
+
+
def config( opts ):
spine = opts.spine
leaf = opts.leaf
@@ -83,9 +115,7 @@
'127.0.0.1' ]
topo = LeafAndSpine( spine=spine, leaf=leaf, fanout=fanout )
net = Mininet( topo=topo, link=TCLink, build=False,
- switch=UserSwitch,
- controller=None,
- autoSetMacs=True )
+ switch=UserSwitch, controller=None, autoSetMacs=True )
i = 0
for ip in controllers:
net.addController( "c%s" % (i), controller=RemoteController, ip=ip )