You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

99 lines
2.8 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()