f0c726a42f
This helps with virtualenv although it can open up another security hole if you end up using an unexpected python interpreter. Overall it seems to make sense to err on the side of usability but it's good to be aware of security. However, for the remaining utility scripts that require python 2, we explicitly note this with #!/usr/bin/python2.
38 lines
1.1 KiB
Python
Executable File
38 lines
1.1 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
"""
|
|
Create a network where different switches are connected to
|
|
different controllers, by creating a custom Switch() subclass.
|
|
"""
|
|
|
|
from mininet.net import Mininet
|
|
from mininet.node import OVSSwitch, Controller, RemoteController
|
|
from mininet.topolib import TreeTopo
|
|
from mininet.log import setLogLevel
|
|
from mininet.cli import CLI
|
|
|
|
setLogLevel( 'info' )
|
|
|
|
# Two local and one "external" controller (which is actually c0)
|
|
# Ignore the warning message that the remote isn't (yet) running
|
|
c0 = Controller( 'c0', port=6633 )
|
|
c1 = Controller( 'c1', port=6634 )
|
|
c2 = RemoteController( 'c2', ip='127.0.0.1', port=6633 )
|
|
|
|
cmap = { 's1': c0, 's2': c1, 's3': c2 }
|
|
|
|
class MultiSwitch( OVSSwitch ):
|
|
"Custom Switch() subclass that connects to different controllers"
|
|
def start( self, controllers ):
|
|
return OVSSwitch.start( self, [ cmap[ self.name ] ] )
|
|
|
|
|
|
topo = TreeTopo( depth=2, fanout=2 )
|
|
net = Mininet( topo=topo, switch=MultiSwitch, build=False, waitConnected=True )
|
|
for c in [ c0, c1 ]:
|
|
net.addController(c)
|
|
net.build()
|
|
net.start()
|
|
CLI( net )
|
|
net.stop()
|