diff options
Diffstat (limited to 'ms_topo_4s.py')
| -rw-r--r-- | ms_topo_4s.py | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/ms_topo_4s.py b/ms_topo_4s.py new file mode 100644 index 0000000..f8c4637 --- /dev/null +++ b/ms_topo_4s.py @@ -0,0 +1,108 @@ +#!/usr/bin/python +from mininet.term import makeTerm +from mininet.net import Mininet +from mininet.node import Controller, RemoteController, OVSController +from mininet.node import CPULimitedHost, Host, Node +from mininet.node import OVSKernelSwitch, UserSwitch +from mininet.node import IVSSwitch +from mininet.cli import CLI +from mininet.log import setLogLevel, info +from mininet.link import TCLink, Intf +from subprocess import call +import os + +def myNetwork(): + + net = Mininet( topo=None, + build=False, + ipBase='10.0.0.0/8' + ) + + info( '*** Adding controller\n' ) + c0=net.addController(name='c0', + controller=RemoteController, + ip='127.0.0.1', + protocol='tcp', + port=6633) + + info( '*** Add switches\n') + ''' + s1 = net.addSwitch('s1', cls=OVSKernelSwitch, dpid='0000000000000001') + s2 = net.addSwitch('s2', cls=OVSKernelSwitch, dpid='0000000000000002') + s3 = net.addSwitch('s3', cls=OVSKernelSwitch, dpid='0000000000000003') + s4 = net.addSwitch('s4', cls=OVSKernelSwitch, dpid='0000000000000004') + ''' + s1 = net.addSwitch('s1', dpid='0000000000000001') + s2 = net.addSwitch('s2', dpid='0000000000000002') + s3 = net.addSwitch('s3', dpid='0000000000000003') + s4 = net.addSwitch('s4', dpid='0000000000000004') + + + info( '*** Add hosts\n') + h1 = net.addHost('h1', mac='00:00:00:00:00:01', cls=Host, ip='10.0.0.1', defaultRoute=None) + h2 = net.addHost('h2', mac='00:00:00:00:00:02', cls=Host, ip='10.0.0.2', defaultRoute=None) + h3 = net.addHost('h3', mac='00:00:00:00:00:03', cls=Host, ip='10.0.0.3', defaultRoute=None) + h4 = net.addHost('h4', mac='00:00:00:00:00:04', cls=Host, ip='10.0.0.4', defaultRoute=None) + + info( '*** Add links\n') + net.addLink(s1, h1) + net.addLink(s1, h2) + net.addLink(s1, s3) + net.addLink(s1, s4) + + net.addLink(s2, h3) + net.addLink(s2, h4) + net.addLink(s2, s3) + net.addLink(s2, s4) + + info( '*** Starting network\n') + net.build() + info( '*** Starting controllers\n') + for controller in net.controllers: + controller.start() + + info( '*** Starting switches\n') + net.get('s1').start([c0]) + net.get('s2').start([c0]) + net.get('s3').start([c0]) + net.get('s4').start([c0]) + + info( '*** Post configure switches and hosts\n') + + os.system('ovs-vsctl set bridge s1 datapath_type=netdev') + #os.system('ovs-vsctl set bridge s2 datapath_type=netdev') + os.system('ovs-vsctl set bridge s1 protocols=OpenFlow13') + #os.system('ovs-vsctl set bridge s2 protocols=OpenFlow13') + #os.system('ovs-vsctl set bridge s3 protocols=OpenFlow13') + #os.system('ovs-vsctl set bridge s4 protocols=OpenFlow13') + os.system('ovs-ofctl add-meter s1 meter=1,kbps,band=type=drop,rate=12000 -O OpenFlow13') + + os.system('ovs-ofctl add-flow s1 in_port=1,dl_src=00:00:00:00:00:01,action=meter:1,output:3 -O OpenFlow13') + os.system('ovs-ofctl add-flow s1 in_port=2,dl_src=00:00:00:00:00:02,action=meter:1,output:3 -O OpenFlow13') + os.system('ovs-ofctl add-flow s1 in_port=3,dl_src=00:00:00:00:00:03,action=output:1 -O OpenFlow13') + os.system('ovs-ofctl add-flow s1 in_port=3,dl_src=00:00:00:00:00:04,action=output:2 -O OpenFlow13') + + os.system('ovs-ofctl add-flow s2 in_port=1,dl_src=00:00:00:00:00:03,action=output:3') + os.system('ovs-ofctl add-flow s2 in_port=2,dl_src=00:00:00:00:00:04,action=output:3') + os.system('ovs-ofctl add-flow s2 in_port=3,dl_src=00:00:00:00:00:01,action=output:1') + os.system('ovs-ofctl add-flow s2 in_port=3,dl_src=00:00:00:00:00:02,action=output:2') + + os.system('ovs-ofctl add-flow s3 in_port=1,action=output:2') + os.system('ovs-ofctl add-flow s3 in_port=2,action=output:1') + os.system('ovs-ofctl add-flow s4 in_port=1,action=output:2') + os.system('ovs-ofctl add-flow s4 in_port=2,action=output:1') + + + + + #CLI(net) + makeTerm(h1) + makeTerm(h1) + makeTerm(h3) + CLI(net) + net.stop() + +if __name__ == '__main__': + setLogLevel( 'info' ) + myNetwork() + |
