Skip to content

Instantly share code, notes, and snippets.

@krobus00
Forked from yangl1996/mininet.py
Created May 7, 2021 03:42
Show Gist options
  • Select an option

  • Save krobus00/9e760f84a599f0f8cafe9c06f96c8ecc to your computer and use it in GitHub Desktop.

Select an option

Save krobus00/9e760f84a599f0f8cafe9c06f96c8ecc to your computer and use it in GitHub Desktop.
Parking Lot Topology for Mininet
#!/usr/bin/python
"""
hl hr
7.100 8.100
| |
7.1 8.1
r1--9--r2--10-r3--11-r4--12-r5--13-r6
1.1 2.1 3.1 4.1 5.1 6.1
| | | | | |
1.100 2.100 3.100 4.100 5.100 6.100
h1 h2 h3 h4 h5 h6
"""
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import Node
from mininet.log import setLogLevel, info
from mininet.cli import CLI
class LinuxRouter( Node ):
"A Node with IP forwarding enabled."
def config( self, **params ):
super( LinuxRouter, 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( LinuxRouter, self ).terminate()
class NetworkTopo( Topo ):
"A LinuxRouter connecting three IP subnets"
def build( self, **_opts ):
r1 = self.addNode( 'r1', cls=LinuxRouter, ip='192.168.1.1/24' )
r2 = self.addNode( 'r2', cls=LinuxRouter, ip='192.168.2.1/24' )
r3 = self.addNode( 'r3', cls=LinuxRouter, ip='192.168.3.1/24' )
r4 = self.addNode( 'r4', cls=LinuxRouter, ip='192.168.4.1/24' )
r5 = self.addNode( 'r5', cls=LinuxRouter, ip='192.168.5.1/24' )
r6 = self.addNode( 'r6', cls=LinuxRouter, ip='192.168.6.1/24' )
h1 = self.addHost('h1', ip='192.168.1.100/24', defaultRoute='via 192.168.1.1')
h2 = self.addHost('h2', ip='192.168.2.100/24', defaultRoute='via 192.168.2.1')
h3 = self.addHost('h3', ip='192.168.3.100/24', defaultRoute='via 192.168.3.1')
h4 = self.addHost('h4', ip='192.168.4.100/24', defaultRoute='via 192.168.4.1')
h5 = self.addHost('h5', ip='192.168.5.100/24', defaultRoute='via 192.168.5.1')
h6 = self.addHost('h6', ip='192.168.6.100/24', defaultRoute='via 192.168.6.1')
hl = self.addHost('hl', ip='192.168.7.100/24', defaultRoute='via 192.168.7.1')
hr = self.addHost('hr', ip='192.168.8.100/24', defaultRoute='via 192.168.8.1')
self.addLink(h1, r1, intfName2='r1-eth1', params2={'ip': '192.168.1.1/24'})
self.addLink(h2, r2, intfName2='r2-eth1', params2={'ip': '192.168.2.1/24'})
self.addLink(h3, r3, intfName2='r3-eth1', params2={'ip': '192.168.3.1/24'})
self.addLink(h4, r4, intfName2='r4-eth1', params2={'ip': '192.168.4.1/24'})
self.addLink(h5, r5, intfName2='r5-eth1', params2={'ip': '192.168.5.1/24'})
self.addLink(h6, r6, intfName2='r6-eth1', params2={'ip': '192.168.6.1/24'})
self.addLink(hl, r1, intfName2='r1-eth2', params2={'ip': '192.168.7.1/24'})
self.addLink(hr, r6, intfName2='r6-eth2', params2={'ip': '192.168.8.1/24'})
self.addLink(r1, r2, intfName1='r1-eth3', intfName2='r2-eth2',
params1={'ip': '192.168.9.1/24'}, params2={'ip': '192.168.9.2/24'})
self.addLink(r2, r3, intfName1='r2-eth3', intfName2='r3-eth2',
params1={'ip': '192.168.10.1/24'}, params2={'ip': '192.168.10.2/24'})
self.addLink(r3, r4, intfName1='r3-eth3', intfName2='r4-eth2',
params1={'ip': '192.168.11.1/24'}, params2={'ip': '192.168.11.2/24'})
self.addLink(r4, r5, intfName1='r4-eth3', intfName2='r5-eth2',
params1={'ip': '192.168.12.1/24'}, params2={'ip': '192.168.12.2/24'})
self.addLink(r5, r6, intfName1='r5-eth3', intfName2='r6-eth3',
params1={'ip': '192.168.13.1/24'}, params2={'ip': '192.168.13.2/24'})
def run():
"Test linux router"
topo = NetworkTopo()
net = Mininet( topo=topo ) # controller is used by s1-s3
net.start()
r1 = net.getNodeByName('r1')
r2 = net.getNodeByName('r2')
r3 = net.getNodeByName('r3')
r4 = net.getNodeByName('r4')
r5 = net.getNodeByName('r5')
r6 = net.getNodeByName('r6')
h1 = net.getNodeByName('h1')
h2 = net.getNodeByName('h2')
h3 = net.getNodeByName('h3')
h4 = net.getNodeByName('h4')
h5 = net.getNodeByName('h5')
h6 = net.getNodeByName('h6')
hl = net.getNodeByName('hl')
hr = net.getNodeByName('hr')
r1.popen("ip route add 192.168.2.0/24 via 192.168.9.2 dev r1-eth3")
r1.popen("ip route add 192.168.3.0/24 via 192.168.9.2 dev r1-eth3")
r1.popen("ip route add 192.168.4.0/24 via 192.168.9.2 dev r1-eth3")
r1.popen("ip route add 192.168.5.0/24 via 192.168.9.2 dev r1-eth3")
r1.popen("ip route add 192.168.6.0/24 via 192.168.9.2 dev r1-eth3")
r1.popen("ip route add 192.168.8.0/24 via 192.168.9.2 dev r1-eth3")
r1.popen("ip route add 192.168.9.0/24 dev r1-eth3")
r1.popen("ip route add 192.168.10.0/24 via 192.168.9.2 dev r1-eth3")
r1.popen("ip route add 192.168.11.0/24 via 192.168.9.2 dev r1-eth3")
r1.popen("ip route add 192.168.12.0/24 via 192.168.9.2 dev r1-eth3")
r1.popen("ip route add 192.168.13.0/24 via 192.168.9.2 dev r1-eth3")
r2.popen("ip route add 192.168.1.0/24 via 192.168.9.1 dev r2-eth2")
r2.popen("ip route add 192.168.7.0/24 via 192.168.9.1 dev r2-eth2")
r2.popen("ip route add 192.168.3.0/24 via 192.168.10.2 dev r2-eth3")
r2.popen("ip route add 192.168.4.0/24 via 192.168.10.2 dev r2-eth3")
r2.popen("ip route add 192.168.5.0/24 via 192.168.10.2 dev r2-eth3")
r2.popen("ip route add 192.168.6.0/24 via 192.168.10.2 dev r2-eth3")
r2.popen("ip route add 192.168.8.0/24 via 192.168.10.2 dev r2-eth3")
r2.popen("ip route add 192.168.9.0/24 dev r2-eth2")
r2.popen("ip route add 192.168.10.0/24 dev r2-eth3")
r2.popen("ip route add 192.168.11.0/24 via 192.168.10.2 dev r2-eth3")
r2.popen("ip route add 192.168.12.0/24 via 192.168.10.2 dev r2-eth3")
r2.popen("ip route add 192.168.13.0/24 via 192.168.10.2 dev r2-eth3")
r3.popen("ip route add 192.168.1.0/24 via 192.168.10.1 dev r3-eth2")
r3.popen("ip route add 192.168.2.0/24 via 192.168.10.1 dev r3-eth2")
r3.popen("ip route add 192.168.7.0/24 via 192.168.10.1 dev r3-eth2")
r3.popen("ip route add 192.168.4.0/24 via 192.168.11.2 dev r3-eth3")
r3.popen("ip route add 192.168.5.0/24 via 192.168.11.2 dev r3-eth3")
r3.popen("ip route add 192.168.6.0/24 via 192.168.11.2 dev r3-eth3")
r3.popen("ip route add 192.168.8.0/24 via 192.168.11.2 dev r3-eth3")
r3.popen("ip route add 192.168.9.0/24 via 192.168.10.1 dev r3-eth2")
r3.popen("ip route add 192.168.10.0/24 dev r3-eth2")
r3.popen("ip route add 192.168.11.0/24 dev r3-eth3")
r3.popen("ip route add 192.168.12.0/24 via 192.168.11.2 dev r3-eth3")
r3.popen("ip route add 192.168.13.0/24 via 192.168.11.2 dev r3-eth3")
r4.popen("ip route add 192.168.1.0/24 via 192.168.11.1 dev r4-eth2")
r4.popen("ip route add 192.168.2.0/24 via 192.168.11.1 dev r4-eth2")
r4.popen("ip route add 192.168.3.0/24 via 192.168.11.1 dev r4-eth2")
r4.popen("ip route add 192.168.7.0/24 via 192.168.11.1 dev r4-eth2")
r4.popen("ip route add 192.168.5.0/24 via 192.168.12.2 dev r4-eth3")
r4.popen("ip route add 192.168.6.0/24 via 192.168.12.2 dev r4-eth3")
r4.popen("ip route add 192.168.8.0/24 via 192.168.12.2 dev r4-eth3")
r4.popen("ip route add 192.168.9.0/24 via 192.168.11.1 dev r4-eth2")
r4.popen("ip route add 192.168.10.0/24 via 192.168.11.1 dev r4-eth2")
r4.popen("ip route add 192.168.11.0/24 dev r4-eth2")
r4.popen("ip route add 192.168.12.0/24 dev r4-eth3")
r4.popen("ip route add 192.168.13.0/24 via 192.168.12.2 dev r4-eth3")
r5.popen("ip route add 192.168.1.0/24 via 192.168.12.1 dev r5-eth2")
r5.popen("ip route add 192.168.2.0/24 via 192.168.12.1 dev r5-eth2")
r5.popen("ip route add 192.168.3.0/24 via 192.168.12.1 dev r5-eth2")
r5.popen("ip route add 192.168.4.0/24 via 192.168.12.1 dev r5-eth2")
r5.popen("ip route add 192.168.7.0/24 via 192.168.12.1 dev r5-eth2")
r5.popen("ip route add 192.168.6.0/24 via 192.168.13.2 dev r5-eth3")
r5.popen("ip route add 192.168.8.0/24 via 192.168.13.2 dev r5-eth3")
r5.popen("ip route add 192.168.9.0/24 via 192.168.12.1 dev r5-eth2")
r5.popen("ip route add 192.168.10.0/24 via 192.168.12.1 dev r5-eth2")
r5.popen("ip route add 192.168.11.0/24 via 192.168.12.1 dev r5-eth2")
r5.popen("ip route add 192.168.12.0/24 dev r5-eth2")
r5.popen("ip route add 192.168.13.0/24 dev r5-eth3")
r6.popen("ip route add 192.168.1.0/24 via 192.168.13.1 dev r6-eth3")
r6.popen("ip route add 192.168.2.0/24 via 192.168.13.1 dev r6-eth3")
r6.popen("ip route add 192.168.3.0/24 via 192.168.13.1 dev r6-eth3")
r6.popen("ip route add 192.168.4.0/24 via 192.168.13.1 dev r6-eth3")
r6.popen("ip route add 192.168.5.0/24 via 192.168.13.1 dev r6-eth3")
r6.popen("ip route add 192.168.7.0/24 via 192.168.13.1 dev r6-eth3")
r6.popen("ip route add 192.168.9.0/24 via 192.168.13.1 dev r6-eth3")
r6.popen("ip route add 192.168.10.0/24 via 192.168.13.1 dev r6-eth3")
r6.popen("ip route add 192.168.11.0/24 via 192.168.13.1 dev r6-eth3")
r6.popen("ip route add 192.168.12.0/24 via 192.168.13.1 dev r6-eth3")
r6.popen("ip route add 192.168.13.0/24 dev r6-eth3")
r1.popen("sudo sysctl -w net.ipv4.icmp_ratemask=0")
r2.popen("sudo sysctl -w net.ipv4.icmp_ratemask=0")
r3.popen("sudo sysctl -w net.ipv4.icmp_ratemask=0")
r4.popen("sudo sysctl -w net.ipv4.icmp_ratemask=0")
r5.popen("sudo sysctl -w net.ipv4.icmp_ratemask=0")
r6.popen("sudo sysctl -w net.ipv4.icmp_ratemask=0")
h1.popen("sudo sysctl -w net.ipv4.icmp_ratemask=0")
h2.popen("sudo sysctl -w net.ipv4.icmp_ratemask=0")
h3.popen("sudo sysctl -w net.ipv4.icmp_ratemask=0")
h4.popen("sudo sysctl -w net.ipv4.icmp_ratemask=0")
h5.popen("sudo sysctl -w net.ipv4.icmp_ratemask=0")
h6.popen("sudo sysctl -w net.ipv4.icmp_ratemask=0")
hl.popen("sudo sysctl -w net.ipv4.icmp_ratemask=0")
hr.popen("sudo sysctl -w net.ipv4.icmp_ratemask=0")
CLI( net )
net.stop()
if __name__ == '__main__':
setLogLevel( 'info' )
run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment