summaryrefslogtreecommitdiff
path: root/ms_topo_4s.py
diff options
context:
space:
mode:
Diffstat (limited to 'ms_topo_4s.py')
-rw-r--r--ms_topo_4s.py108
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()
+