Created
December 21, 2018 21:38
-
-
Save sandhose/934ca0755355bfb6992cc5eb8b49f6b4 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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