You need to sign in or sign up before continuing.
Select Git revision
RWTHVRToolkit.uplugin
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()