aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/tools/test/topos/optical.py
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/tools/test/topos/optical.py')
-rwxr-xr-xframework/src/onos/tools/test/topos/optical.py79
1 files changed, 79 insertions, 0 deletions
diff --git a/framework/src/onos/tools/test/topos/optical.py b/framework/src/onos/tools/test/topos/optical.py
new file mode 100755
index 00000000..300332aa
--- /dev/null
+++ b/framework/src/onos/tools/test/topos/optical.py
@@ -0,0 +1,79 @@
+#!/usr/bin/env python
+
+''' file: optical.py '''
+
+from mininet.topo import Topo
+from mininet.node import RemoteController
+from mininet.net import Mininet
+from mininet.cli import CLI
+from mininet.log import setLogLevel, info
+from mininet.link import Intf, Link
+from mininet.util import irange
+
+class NullIntf( Intf ):
+ "A dummy interface with a blank name that doesn't do any configuration"
+ def __init__( self, name, **params ):
+ self.name = ''
+
+class NullLink( Link ):
+ "A dummy link that doesn't touch either interface"
+ def makeIntfPair( cls, intf1, intf2, addr1=None, addr2=None ):
+ pass
+ def delete( self ):
+ pass
+
+class OpticalTopo( Topo ):
+
+ def addIntf( self, switch, intfName ):
+ "Add intf intfName to switch"
+ self.addLink( switch, switch, cls=NullLink,
+ intfName1=intfName, cls2=NullIntf, intfName2=intfName )
+
+ def build( self, n=2, tapStart=3 ):
+
+ # Add hosts and switches
+ hosts = []
+ switches = []
+ for i in irange( 1, n ):
+ h = self.addHost( 'h%d' % i )
+ s = self.addSwitch( 's%d' % i, dpid="0000ffffffff%04d" % i )
+ self.addLink( h, s )
+ hosts.append( h )
+ switches.append( s )
+
+ # Add optical tap interfaces
+ tapNum = tapStart
+ for sw in switches:
+ self.addIntf( sw, 'tap%d' % tapNum )
+ tapNum += 1
+
+# if you use, sudo mn --custom custom/optical.py, then register the topo:
+#sudo mn --custom optical.py --topo optical,5
+topos = { 'optical': OpticalTopo }
+
+def installStaticFlows( net ):
+ for sw in net.switches:
+ info( 'Adding flows to %s...' % sw.name )
+ sw.dpctl( 'add-flow', 'in_port=1,actions=output=2' )
+ sw.dpctl( 'add-flow', 'in_port=2,actions=output=1' )
+ info( sw.dpctl( 'dump-flows' ) )
+
+def run( n ):
+ topo = OpticalTopo( n )
+ net = Mininet( topo=topo, controller=RemoteController, autoSetMacs=True )
+ net.start()
+ #installStaticFlows( net )
+ CLI( net )
+ net.stop()
+
+# if the script is run directly (sudo custom/optical.py):
+if __name__ == '__main__':
+ import sys
+ try:
+ n = int( sys.argv[1] )
+ except:
+ print ( 'Usage: ./optical.py n # n is number of switches\n'
+ 'Starting with default of 2 switches...\n' )
+ n = 2
+ setLogLevel( 'info' )
+ run( n )