From cf5bbd597ab5b0ba1624039bd92211c2b7745d34 Mon Sep 17 00:00:00 2001
From: cody burkard <cody@onlab.us>
Date: Fri, 26 Sep 2014 16:52:51 -0700
Subject: [PATCH] promote waitListening to util.py

---
 examples/cpu.py  | 14 +-------------
 examples/sshd.py | 12 ++++--------
 mininet/util.py  | 19 +++++++++++++++++++
 3 files changed, 24 insertions(+), 21 deletions(-)

diff --git a/examples/cpu.py b/examples/cpu.py
index 6dfc9369..0406cc92 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 d7f45a4f..bd50e189 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 3dbbea6c..5d741ffc 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
+
-- 
GitLab