# 1router_net.py: L. Seng and A. Sekercioglu # Last modified on: 20200303 import os from mininet.cli import CLI from mininet.link import TCLink, Intf from mininet.log import setLogLevel, info from mininet.net import Mininet from mininet.node import Node, Controller, CPULimitedHost class LinuxRouter( Node ): # from the Mininet library "A Node with IP forwarding enabled." def config( self, **params ): super( LinuxRouter, self).config( **params ) # Enable forwarding on the router info ('enabling forwarding on ', self) self.cmd( 'sysctl net.ipv4.ip_forward=1' ) def terminate( self ): self.cmd( 'sysctl net.ipv4.ip_forward=0' ) super( LinuxRouter, self ).terminate() def MyNetwork(): "Create an empty network and add nodes to it." net = Mininet(host=CPULimitedHost, link=TCLink, autoStaticArp=False) info( '*** Adding controller:\n' ) # turns OVS switch into an Ethernet bridge/learning bridge net.addController('c0') info( '*** Adding hosts:\n' ) s1 = net.addSwitch('s1') s2 = net.addSwitch('s2') # Router has multiple interfaces, we assign IP addresses later. r1 = net.addHost('r1', cls=LinuxRouter) # Here, we assign the IP address and set the subnet mask at the # same time: The first 24 bits of the subnet mask bits set to 1, or # 255.255.255.0 h1 = net.addHost('h1', ip='172.16.0.2/24', defaultRoute="via 172.16.0.1") h2 = net.addHost('h2', ip='172.16.0.3/24') h3 = net.addHost('h3', ip='172.16.1.2/24', defaultRoute="via 172.16.1.1") h4 = net.addHost('h4', ip='172.16.1.3/24', defaultRoute="via 172.16.1.1") info( '*** Creating links:\n' ) net.addLink(r1, s1, intfName1="r1-wan0") net.addLink(r1, s2, intfName1="r1-wan1") net.addLink(h1, s1) net.addLink(h2, s1) net.addLink(h3, s2) net.addLink(h4, s2) info( '*** Starting network:\n') net.start() info( '*** Configuring router:\n' ) r1.cmd('ifconfig r1-wan0 172.16.0.1/24') r1.cmd('ifconfig r1-wan1 172.16.1.1/24') info( '*** Running CLI:\n' ) CLI(net) info( '*** Stopping network:\n' ) net.stop() if __name__ == '__main__': os.system("sudo mn -c") setLogLevel( 'info' ) MyNetwork()