diff --git a/examples/cpu.py b/examples/cpu.py index 6dfc936901f681199e1688894ca6553a23a8ba0e..0406cc92bd25202fe17340bdfe83b6c1860d6ebe 100755 --- a/examples/cpu.py +++ b/examples/cpu.py @@ -7,23 +7,11 @@ from mininet.net import Mininet from mininet.node import CPULimitedHost from mininet.topolib import TreeTopo -from mininet.util import custom +from mininet.util import custom, waitListening from mininet.log import setLogLevel, output from time import sleep -def waitListening(client, server, port): - "Wait until server is listening on port" - if not client.cmd('which telnet'): - raise Exception('Could not find telnet') - cmd = ('sh -c "echo A | telnet -e A %s %s"' % - (server.IP(), port)) - while 'Connected' not in client.cmd(cmd): - output('waiting for', server, - 'to listen on port', port, '\n') - sleep(.5) - - def bwtest( cpuLimits, period_us=100000, seconds=5 ): """Example/test of link and CPU bandwidth limits cpu: cpu limit as fraction of overall CPU time""" diff --git a/examples/sshd.py b/examples/sshd.py index d7f45a4f8f70341e9e6b2567172903f38a2e3cbd..bd50e189267e8cb660638ec324bd9cd13b33d1c5 100755 --- a/examples/sshd.py +++ b/examples/sshd.py @@ -24,6 +24,7 @@ from mininet.node import Node from mininet.topolib import TreeTopo from mininet.link import Link +from mininet.util import waitListening def TreeNet( depth=1, fanout=2, **kwargs ): "Convenience function for creating tree networks." @@ -59,15 +60,10 @@ def sshd( network, cmd='/usr/sbin/sshd', opts='-D', connectToRootNS( network, switch, ip, routes ) for host in network.hosts: host.cmd( cmd + ' ' + opts + '&' ) - + client = network.switches[ 0 ] # wait until each host's sshd has started up - remaining = list( network.hosts ) - while True: - for host in tuple( remaining ): - if 'sshd is running' in host.cmd( 'service ssh status' ): - remaining.remove( host ) - if not remaining: - break + for server in network.hosts: + waitListening( client, server, 22, timeout=5 ) print print "*** Hosts are running sshd at the following addresses:" diff --git a/mininet/util.py b/mininet/util.py index 3dbbea6c758cb80ce5c0268b91e74efafd7c41a1..5d741ffcfeab14bcbdc9f4862be33c9e816288a7 100644 --- a/mininet/util.py +++ b/mininet/util.py @@ -538,3 +538,22 @@ def ensureRoot(): print "*** Mininet must run as root." exit( 1 ) return + +def waitListening( client, server, port, timeout=None ): + "Wait until server is listening on port" + if not client.cmd( 'which telnet' ): + raise Exception('Could not find telnet' ) + cmd = ( 'sh -c "echo A | telnet -e A %s %s"' % + ( server.IP(), port ) ) + time = 0 + while 'Connected' not in client.cmd( cmd ): + if timeout: + if time >= timeout: + error( 'could not connect to %s on port %d\n' + % ( client, port ) ) + break + output('waiting for', server, + 'to listen on port', port, '\n') + sleep( .5 ) + time += .5 +