Skip to content
Snippets Groups Projects
linuxrouter.py 1.42 KiB
Newer Older
Brian O'Connor's avatar
Brian O'Connor committed
#!/usr/bin/python

"""
linuxrouter.py: Example network with Linux IP router
 

"""

from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import Node
from mininet.log import setLogLevel
from mininet.cli import CLI
from mininet.util import irange

class Router( Node ):

    def config( self, **params ):
        super( Router, self).config( **params )
        # Enable forwarding on the router
        self.cmd( 'sysctl net.ipv4.ip_forward=1' )

    def terminate( self ):
        self.cmd( 'sysctl net.ipv4.ip_forward=0' )
        super( Router, self ).terminate()


class NetworkTopo(Topo):
    def __init__(self, n=2, h=1, **opts):
        Topo.__init__(self, **opts)

        router = self.addNode('r0', cls=Router, ip='192.168.1.1/24')
        h1 = self.addHost('h1', ip='192.168.1.100/8', defaultRoute='via 192.168.1.1')
        h2 = self.addHost('h2', ip='172.16.0.100/8', defaultRoute='via 172.16.0.1')
        h3 = self.addHost('h3', ip='10.0.0.100/24', defaultRoute='via 10.0.0.1')
        self.addLink(h1, router, intfName2='r0-eth1', params2={ 'ip' : '192.168.1.1/24' })
        self.addLink(h2, router, intfName2='r0-eth2', params2={ 'ip' : '172.16.0.1/24' })
        self.addLink(h3, router, intfName2='r0-eth3', params2={ 'ip' : '10.0.0.1/24' })

def run():
    topo = NetworkTopo()
    net = Mininet(topo=topo)
    net.start()
    CLI(net)
    net.stop()

if __name__ == '__main__':
    setLogLevel('info')
    run()