Newer
Older
Bob Lantz
committed
#!/usr/bin/python
Bob Lantz
committed
While something like rshd(8) would be lighter and faster,
(and perfectly adequate on an in-machine network)
the advantage of running sshd is that scripts can work
unchanged on mininet and hardware.
"""
import sys ; readline = sys.stdin.readline
Bob Lantz
committed
from mininet import init, Node, createLink, TreeNet, Cli
def nets( hosts ):
"Return list of networks (/24) for hosts."
nets = {}
for host in hosts:
net = host.IP().split( '.' )[ : -1 ]
net = '.'.join( net ) + '.0/24'
Bob Lantz
committed
nets[ net ] = True
return nets.keys()
def connectToRootNS( network, switch ):
"Connect hosts to root namespace via switch. Starts network."
# Create a node in root namespace and link to switch 0
Bob Lantz
committed
root = Node( 'root', inNamespace=False )
Bob Lantz
committed
ip = '10.0.123.1'
root.setIP( root.intfs[ 0 ], ip, '/24' )
# Start network that now includes link to root namespace
Bob Lantz
committed
network.start()
# Add routes
routes = nets( network.hosts )
intf = root.intfs[ 0 ]
for net in routes:
root.cmdPrint( 'route add -net ' + net + ' dev ' + intf )
def startServers( network, server ):
"Start network, and servers on each host."
connectToRootNS( network, network.switches[ 0 ] )
for host in network.hosts: host.cmdPrint( server )
if __name__ == '__main__':
init()
network = TreeNet( depth=1, fanout=4, kernel=True )
startServers( network, '/usr/sbin/sshd' )
Bob Lantz
committed
print
print "*** Hosts are running sshd at the following addresses:"
print
for host in network.hosts: print host.name, host.IP()
print
print "*** Press return to shut down network: ",
readline()
Bob Lantz
committed
network.stop()