-
-
Save krobus00/9e760f84a599f0f8cafe9c06f96c8ecc to your computer and use it in GitHub Desktop.
Parking Lot Topology for Mininet
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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