mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-10-15 17:31:31 +02:00
80 lines
2.3 KiB
Python
Executable File
80 lines
2.3 KiB
Python
Executable File
#!/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 )
|