Skip to content
Snippets Groups Projects
Commit c8607467 authored by Bob Lantz's avatar Bob Lantz
Browse files

Merge branch 'cdburkard-patches/fix_sshd'

parents 4aa0b823 f8e98d6a
No related branches found
No related tags found
No related merge requests found
...@@ -7,23 +7,11 @@ ...@@ -7,23 +7,11 @@
from mininet.net import Mininet from mininet.net import Mininet
from mininet.node import CPULimitedHost from mininet.node import CPULimitedHost
from mininet.topolib import TreeTopo from mininet.topolib import TreeTopo
from mininet.util import custom from mininet.util import custom, waitListening
from mininet.log import setLogLevel, output, info from mininet.log import setLogLevel, output, info
from time import sleep 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 ): def bwtest( cpuLimits, period_us=100000, seconds=5 ):
"""Example/test of link and CPU bandwidth limits """Example/test of link and CPU bandwidth limits
cpu: cpu limit as fraction of overall CPU time""" cpu: cpu limit as fraction of overall CPU time"""
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
from mininet.node import Node from mininet.node import Node
from mininet.topolib import TreeTopo from mininet.topolib import TreeTopo
from mininet.link import Link from mininet.link import Link
from mininet.util import waitListening
def TreeNet( depth=1, fanout=2, **kwargs ): def TreeNet( depth=1, fanout=2, **kwargs ):
"Convenience function for creating tree networks." "Convenience function for creating tree networks."
...@@ -59,6 +60,10 @@ def sshd( network, cmd='/usr/sbin/sshd', opts='-D', ...@@ -59,6 +60,10 @@ def sshd( network, cmd='/usr/sbin/sshd', opts='-D',
connectToRootNS( network, switch, ip, routes ) connectToRootNS( network, switch, ip, routes )
for host in network.hosts: for host in network.hosts:
host.cmd( cmd + ' ' + opts + '&' ) host.cmd( cmd + ' ' + opts + '&' )
print "*** Waiting for ssh daemons to start"
for server in network.hosts:
waitListening( server=server, port=22, timeout=5 )
print print
print "*** Hosts are running sshd at the following addresses:" print "*** Hosts are running sshd at the following addresses:"
print print
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
from fcntl import fcntl, F_GETFL, F_SETFL from fcntl import fcntl, F_GETFL, F_SETFL
from os import O_NONBLOCK from os import O_NONBLOCK
import os import os
from functools import partial
# Command execution support # Command execution support
...@@ -61,12 +62,6 @@ def errRun( *cmd, **kwargs ): ...@@ -61,12 +62,6 @@ def errRun( *cmd, **kwargs ):
stderr: STDOUT to merge stderr with stdout stderr: STDOUT to merge stderr with stdout
shell: run command using shell shell: run command using shell
echo: monitor output to console""" echo: monitor output to console"""
# Allow passing in a list or a string
if len( cmd ) == 1:
cmd = cmd[ 0 ]
if isinstance( cmd, str ):
cmd = cmd.split( ' ' )
cmd = [ str( arg ) for arg in cmd ]
# By default we separate stderr, don't run in a shell, and don't echo # By default we separate stderr, don't run in a shell, and don't echo
stderr = kwargs.get( 'stderr', PIPE ) stderr = kwargs.get( 'stderr', PIPE )
shell = kwargs.get( 'shell', False ) shell = kwargs.get( 'shell', False )
...@@ -74,6 +69,14 @@ def errRun( *cmd, **kwargs ): ...@@ -74,6 +69,14 @@ def errRun( *cmd, **kwargs ):
if echo: if echo:
# cmd goes to stderr, output goes to stdout # cmd goes to stderr, output goes to stdout
info( cmd, '\n' ) info( cmd, '\n' )
if len( cmd ) == 1:
cmd = cmd[ 0 ]
# Allow passing in a list or a string
if isinstance( cmd, str ) and not shell:
cmd = cmd.split( ' ' )
cmd = [ str( arg ) for arg in cmd ]
elif isinstance( cmd, list ) and shell:
cmd = " ".join( arg for arg in cmd )
popen = Popen( cmd, stdout=PIPE, stderr=stderr, shell=shell ) popen = Popen( cmd, stdout=PIPE, stderr=stderr, shell=shell )
# We use poll() because select() doesn't work with large fd numbers, # We use poll() because select() doesn't work with large fd numbers,
# and thus communicate() doesn't work either # and thus communicate() doesn't work either
...@@ -538,3 +541,25 @@ def ensureRoot(): ...@@ -538,3 +541,25 @@ def ensureRoot():
print "*** Mininet must run as root." print "*** Mininet must run as root."
exit( 1 ) exit( 1 )
return return
def waitListening( client=None, server='127.0.0.1', port=80, timeout=None ):
"Wait until server is listening on port"
run = ( client.cmd if client else
partial( quietRun, shell=True ) )
if not run( 'which telnet' ):
raise Exception('Could not find telnet' )
serverIP = server if type( server ) is str else server.IP()
cmd = ( 'sh -c "echo A | telnet -e A %s %s"' %
( serverIP, port ) )
time = 0
while 'Connected' not in run( cmd ):
if timeout:
if time >= timeout:
error( 'could not connect to %s on port %d\n'
% ( server, port ) )
break
output('waiting for', server,
'to listen on port', port, '\n')
sleep( .5 )
time += .5
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment