Skip to content
Snippets Groups Projects
Select Git revision
  • 4eb679adc37ad2e4f92d6e996c866016d7d5ebcd
  • main default protected
2 results

Dockerfile

Blame
  • customTopo.py 2.76 KiB
    from mininet.topo import Topo
    from mininet.node import Node
    from mininet.net import Mininet
    from mininet.cli import CLI
    from mininet.link import TCIntf
    from enum import Enum
    
    
    class NodeRoles(Enum):
      ROUTER = 'Router'
      SWITCH = 'Switch'
      HOST = 'Host'
    
    
    class Router(Node):
    
      def config(self, **params):
        super(Router, self).config(**params)
        self.cmd('sysctl net.ipv4.ip_forward=1')
        self.waitOutput()
    
      def terminate(self):
        self.cmd('sysctl net.ipv4.ip_forward=0')
        self.waitOutput()
        super(Router, self).terminate()
    
      def print_routing_table(self):
        print(self.name + ' - Routing Table')
        print(self.cmd('ip route'))
    
    
    class CustomTopo(Topo):
    
      __LINK_BANDWIDTH = 1
    
      def __init__(self):
          Topo.__init__(self)
    
      def build(self):
    
        r1 = self.addNode('r1', cls=Router, ip=None,
                          role=NodeRoles.ROUTER.value)
    
        s1 = self.addSwitch('s1', role=NodeRoles.SWITCH.value)
        s2 = self.addSwitch('s2', role=NodeRoles.SWITCH.value)
    
        h11 = self.addHost('h11', ip='10.0.1.11/24',
                           # inNamespace=False,
                           defaultRoute='via 10.0.1.254',
                           role=NodeRoles.HOST.value)
        h12 = self.addHost('h12', ip='10.0.1.12/24',
                           defaultRoute='via 10.0.1.254',
                           role=NodeRoles.HOST.value)
    
        h21 = self.addHost('h21', ip='10.0.2.21/24',
                           defaultRoute='via 10.0.2.254',
                           role=NodeRoles.HOST.value)
        h22 = self.addHost('h22', ip='10.0.2.22/24',
                           defaultRoute='via 10.0.2.254',
                           role=NodeRoles.HOST.value)
    
        for node1, node2 in [(h11, s1), (h12, s1), (h21, s2), (h22, s2)]:
          self.addLink(node1, node2,
                       cls1=TCIntf, cls2=TCIntf,
                       intfName1=node1 + '-' + node2,
                       intfName2=node2 + '-' + node1,
                       params1={'bw': self.__LINK_BANDWIDTH},
                       params2={'bw': self.__LINK_BANDWIDTH})
    
        self.addLink(r1, s1,
                     cls1=TCIntf, cls2=TCIntf,
                     intfName1=r1 + '-' + s1,
                     intfName2=s1 + '-' + r1,
                     params1={'ip': '10.0.1.254/24', 'bw': self.__LINK_BANDWIDTH},
                     params2={'bw': self.__LINK_BANDWIDTH})
    
        self.addLink(r1, s2,
                     cls1=TCIntf, cls2=TCIntf,
                     intfName1=r1 + '-' + s2,
                     intfName2=s2 + '-' + r1,
                     params1={'ip': '10.0.2.254/24', 'bw': self.__LINK_BANDWIDTH},
                     params2={'bw': self.__LINK_BANDWIDTH})
    
    
    def run():
      topo = CustomTopo()
      net = Mininet(topo=topo)
      net.start()
    
      for node in net.topo.nodes():
        print(net[node].params['role'])
      net['r1'].print_routing_table()
    
      CLI(net)
      net.stop()
    
    
    if __name__ == '__main__':
      run()