Skip to content
Snippets Groups Projects
sshd.py 2.49 KiB
Newer Older
Bob Lantz's avatar
Bob Lantz committed
"""
Create a network and start sshd(8) on each host.
Bob Lantz's avatar
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.
Bob Lantz's avatar
Bob Lantz committed
In addition to providing ssh access to hosts, this example
demonstrates:

- creating a convenience function to construct networks
- connecting the host network to the root namespace
- running server processes (sshd in this case) on hosts
Bob Lantz's avatar
Bob Lantz committed
"""

Bob Lantz's avatar
Bob Lantz committed
from mininet.net import Mininet
Bob Lantz's avatar
Bob Lantz committed
from mininet.cli import CLI
from mininet.log import lg
from mininet.node import Node, OVSKernelSwitch
Bob Lantz's avatar
Bob Lantz committed
from mininet.topolib import TreeTopo
from mininet.util import createLink
Bob Lantz's avatar
Bob Lantz committed
def TreeNet( depth=1, fanout=2, **kwargs ):
    "Convenience function for creating tree networks."
    topo = TreeTopo( depth, fanout )
    return Mininet( topo, **kwargs )
Bob Lantz's avatar
Bob Lantz committed
def connectToRootNS( network, switch, ip, prefixLen, routes ):
    """Connect hosts to root namespace via switch. Starts network.
Bob Lantz's avatar
Bob Lantz committed
      network: Mininet() network object
      switch: switch to connect to root namespace
      ip: IP address for root namespace node
      prefixLen: IP address prefix length (e.g. 8, 16, 24)
      routes: host networks to route to"""
    # Create a node in root namespace and link to switch 0
    root = Node( 'root', inNamespace=False )
    intf = createLink( root, switch )[ 0 ]
    root.setIP( intf, ip, prefixLen )
    # Start network that now includes link to root namespace
    network.start()
    # Add routes from root ns to hosts
    for route in routes:
        root.cmd( 'route add -net ' + route + ' dev ' + intf )
Bob Lantz's avatar
Bob Lantz committed

def sshd( network, cmd='/usr/sbin/sshd', opts='-D' ):
    "Start a network, connect it to root ns, and run sshd on all hosts."
    switch = network.switches[ 0 ]  # switch to use
    ip = '10.123.123.1'  # our IP address on host network
    routes = [ '10.0.0.0/8' ]  # host networks to route to
    connectToRootNS( network, switch, ip, 8, routes )
    for host in network.hosts:
        host.cmd( cmd + ' ' + opts + '&' )
    print
    print "*** Hosts are running sshd at the following addresses:"
    print
    for host in network.hosts:
        print host.name, host.IP()
    print
    print "*** Type 'exit' or control-D to shut down network"
    CLI( network )
    for host in network.hosts:
        host.cmd( 'kill %' + cmd )
    network.stop()

if __name__ == '__main__':
    net = TreeNet( depth=1, fanout=4, switch=OVSKernelSwitch )