Select Git revision
double_gate_ADU_interface.ipynb
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()