Clean up sshd.py and its test so it works on VirtualBox

This commit is contained in:
Bob Lantz
2013-09-18 20:48:22 -07:00
parent 568f6424e5
commit 76a8a1637f
2 changed files with 20 additions and 14 deletions
+19 -13
View File
@@ -21,7 +21,7 @@ import sys
from mininet.net import Mininet from mininet.net import Mininet
from mininet.cli import CLI from mininet.cli import CLI
from mininet.log import lg from mininet.log import lg
from mininet.node import Node, OVSKernelSwitch 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
@@ -30,29 +30,33 @@ def TreeNet( depth=1, fanout=2, **kwargs ):
topo = TreeTopo( depth, fanout ) topo = TreeTopo( depth, fanout )
return Mininet( topo, **kwargs ) return Mininet( topo, **kwargs )
def connectToRootNS( network, switch, ip, prefixLen, routes ): def connectToRootNS( network, switch, ip, routes ):
"""Connect hosts to root namespace via switch. Starts network. """Connect hosts to root namespace via switch. Starts network.
network: Mininet() network object network: Mininet() network object
switch: switch to connect to root namespace switch: switch to connect to root namespace
ip: IP address for root namespace node ip: IP address for root namespace node
prefixLen: IP address prefix length (e.g. 8, 16, 24)
routes: host networks to route to""" routes: host networks to route to"""
# Create a node in root namespace and link to switch 0 # Create a node in root namespace and link to switch 0
root = Node( 'root', inNamespace=False ) root = Node( 'root', inNamespace=False )
intf = Link( root, switch ).intf1 intf = Link( root, switch ).intf1
root.setIP( ip, prefixLen, intf ) root.setIP( ip, intf=intf )
# Start network that now includes link to root namespace # Start network that now includes link to root namespace
network.start() network.start()
# Add routes from root ns to hosts # Add routes from root ns to hosts
for route in routes: for route in routes:
root.cmd( 'route add -net ' + route + ' dev ' + str( intf ) ) root.cmd( 'route add -net ' + route + ' dev ' + str( intf ) )
def sshd( network, cmd='/usr/sbin/sshd', opts='-D' ): def sshd( network, cmd='/usr/sbin/sshd', opts='-D',
"Start a network, connect it to root ns, and run sshd on all hosts." ip='10.123.123.1/32', routes=None, switch=None ):
switch = network.switches[ 0 ] # switch to use """Start a network, connect it to root ns, and run sshd on all hosts.
ip = '10.123.123.1' # our IP address on host network ip: root-eth0 IP address in root namespace (10.123.123.1/32)
routes = [ '10.0.0.0/8' ] # host networks to route to routes: Mininet host networks to route to (10.0/24)
connectToRootNS( network, switch, ip, 8, routes ) switch: Mininet switch to connect to root namespace (s1)"""
if not switch:
switch = network[ 's1' ] # switch to use
if not routes:
routes = [ '10.0.0.0/24' ]
connectToRootNS( network, switch, ip, routes )
for host in network.hosts: for host in network.hosts:
host.cmd( cmd + ' ' + opts + '&' ) host.cmd( cmd + ' ' + opts + '&' )
print print
@@ -69,7 +73,9 @@ def sshd( network, cmd='/usr/sbin/sshd', opts='-D' ):
if __name__ == '__main__': if __name__ == '__main__':
lg.setLogLevel( 'info') lg.setLogLevel( 'info')
net = TreeNet( depth=1, fanout=4, switch=OVSKernelSwitch ) net = TreeNet( depth=1, fanout=4 )
# get sshd args from the command line; default: -D # get sshd args from the command line or use default args
opts = ' '.join( sys.argv[ 1: ] ) if len( sys.argv ) > 1 else '-D' # useDNS=no -u0 to avoid reverse DNS lookup timeout
opts = ' '.join( sys.argv[ 1: ] ) if len( sys.argv ) > 1 else (
'-D -o UseDNS=no -u0' )
sshd( net, opts=opts ) sshd( net, opts=opts )
+1 -1
View File
@@ -40,7 +40,7 @@ class testSSHD( unittest.TestCase ):
sh( 'cat /tmp/ssh/test_rsa.pub >> /tmp/ssh/authorized_keys' ) sh( 'cat /tmp/ssh/test_rsa.pub >> /tmp/ssh/authorized_keys' )
cmd = ( 'python -m mininet.examples.sshd -D ' cmd = ( 'python -m mininet.examples.sshd -D '
'-o AuthorizedKeysFile=/tmp/ssh/authorized_keys ' '-o AuthorizedKeysFile=/tmp/ssh/authorized_keys '
'-o StrictModes=no' ) '-o StrictModes=no -o UseDNS=no -u0' )
# run example with custom sshd args # run example with custom sshd args
self.net = pexpect.spawn( cmd ) self.net = pexpect.spawn( cmd )
self.net.expect( 'mininet>' ) self.net.expect( 'mininet>' )