Skip to content

Instantly share code, notes, and snippets.

@sandhose
Created December 21, 2018 21:38
Show Gist options
  • Save sandhose/934ca0755355bfb6992cc5eb8b49f6b4 to your computer and use it in GitHub Desktop.
Save sandhose/934ca0755355bfb6992cc5eb8b49f6b4 to your computer and use it in GitHub Desktop.
import os
from mininet.cli import CLI
from mininet.log import setLogLevel
from mininet.net import Mininet
from mininet.node import Controller
class POXBridge(Controller):
def start(self):
"Start POX learning switch"
cout = '/tmp/' + self.name + '.log'
fakeways = self.params.get('fakeways', []);
module = self.params.get('module', 'forwarding.l2_learning')
self.pox = '%s/pox/pox.py' % os.environ['HOME']
cmd = 'openflow.of_01 --port=%d %s' % (self.port, module)
if fakeways:
cmd += ' --fakeways=' + ','.join(fakeways)
self.cmd(self.pox, cmd + ' 1>' + cout + ' 2>' + cout + ' &')
def stop(self):
"Stop POX"
self.cmd('kill %' + self.pox)
def configure_network(network):
# Setup hosts and switch
h1 = network.addHost('h1', ip='10.0.1.10/24', mac='00:00:00:01:10')
h2 = network.addHost('h2', ip='10.0.1.11/24', mac='00:00:00:01:11')
h3 = network.addHost('h3', ip='10.0.2.10/24', mac='00:00:00:02:10')
h4 = network.addHost('h4', ip='10.0.2.11/24', mac='00:00:00:02:11')
s1 = network.addSwitch('s1')
s2 = network.addSwitch('s2')
r1 = network.addSwitch('r1')
# Add links
network.addLink(h1, s1)
network.addLink(h2, s1)
network.addLink(h3, s2)
network.addLink(h4, s2)
network.addLink(r1, s1)
network.addLink(r1, s2)
c1 = network.addController('c1', controller=POXBridge, port=3366,
module='forwarding.l2_learning')
c2 = network.addController('c2', controller=POXBridge, port=3367,
module='forwarding.l3_learning',
fakeways=['10.0.1.1', '10.0.2.1'])
network.build()
c1.start()
c2.start()
s1.start([c1])
s2.start([c1])
r1.start([c2])
h1.cmdPrint("ip route add 10.0.2.0/24 via 10.0.1.1")
h2.cmdPrint("ip route add 10.0.2.0/24 via 10.0.1.1")
h3.cmdPrint("ip route add 10.0.1.0/24 via 10.0.2.1")
h4.cmdPrint("ip route add 10.0.1.0/24 via 10.0.2.1")
if __name__ == '__main__':
setLogLevel('info')
net = Mininet(build=False, controller=None)
configure_network(net)
net.pingAll()
CLI(net)
net.stop()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment