Now, to reference mininet files, use 'import mininet.mininet'. PYTHONPATH mods are no longer required for installation.
51 lines
1.5 KiB
Python
Executable File
51 lines
1.5 KiB
Python
Executable File
#!/usr/bin/python
|
|
|
|
"""
|
|
Create a network and run an xterm (connected via screen(1) ) on each
|
|
host. Requires xterm(1) and GNU screen(1).
|
|
"""
|
|
|
|
import os, re
|
|
from subprocess import Popen
|
|
from mininet.mininet import init, TreeNet, quietRun
|
|
|
|
def makeXterm( node, title ):
|
|
"Run screen on a node, and hook up an xterm."
|
|
title += ': ' + node.name
|
|
if not node.inNamespace: title += ' (root)'
|
|
cmd = [ 'xterm', '-title', title, '-e' ]
|
|
if not node.execed:
|
|
node.cmdPrint( 'screen -dmS ' + node.name )
|
|
cmd += [ 'screen', '-D', '-RR', '-S', node.name ]
|
|
else:
|
|
cmd += [ 'sh', '-c', 'exec tail -f /tmp/' + node.name + '*.log' ]
|
|
return Popen( cmd )
|
|
|
|
def cleanUpScreens():
|
|
"Remove moldy old screen sessions."
|
|
r = r'(\d+.[hsc]\d+)'
|
|
output = quietRun( 'screen -ls' ).split( '\n' )
|
|
for line in output:
|
|
m = re.search( r, line )
|
|
if m is not None:
|
|
quietRun( 'screen -S ' + m.group( 1 ) + ' -X kill' )
|
|
|
|
def makeXterms( nodes, title ):
|
|
return [ makeXterm( node, title) for node in nodes]
|
|
|
|
def xterms( controllers, switches, hosts ):
|
|
cleanUpScreens()
|
|
terms = makeXterms( controllers, 'controller' )
|
|
terms += makeXterms( switches, 'switch' )
|
|
terms += makeXterms( hosts, 'host' )
|
|
# Wait for xterms to exit
|
|
for term in terms:
|
|
os.waitpid( term.pid, 0 )
|
|
cleanUpScreens()
|
|
|
|
if __name__ == '__main__':
|
|
init()
|
|
print "Running xterms on", os.environ[ 'DISPLAY' ]
|
|
network = TreeNet( depth=2, fanout=2, kernel=True )
|
|
network.run( xterms )
|