| peusterm | 44f3415 | 2015-12-11 14:32:34 +0100 | [diff] [blame] | 1 | # We need a properly installed Dockernet |
| 2 | from mininet.net import Mininet |
| 3 | from mininet.node import Controller, Docker, OVSSwitch |
| peusterm | 266d248 | 2015-12-27 13:55:43 +0100 | [diff] [blame] | 4 | from mininet.link import * |
| peusterm | 44f3415 | 2015-12-11 14:32:34 +0100 | [diff] [blame] | 5 | from mininet.cli import CLI |
| 6 | import mininet.log |
| 7 | import logging |
| 8 | import os |
| peusterm | cbcd4c2 | 2015-12-28 11:33:42 +0100 | [diff] [blame] | 9 | import zerorpc |
| peusterm | 44f3415 | 2015-12-11 14:32:34 +0100 | [diff] [blame] | 10 | |
| 11 | |
| 12 | class RemoteMininetNetwork(object): |
| 13 | |
| 14 | def __init__(self): |
| peusterm | cbcd4c2 | 2015-12-28 11:33:42 +0100 | [diff] [blame] | 15 | # set mininet loglevel |
| 16 | mininet.log.setLogLevel( 'info' ) |
| peusterm | 44f3415 | 2015-12-11 14:32:34 +0100 | [diff] [blame] | 17 | self.net = Mininet( controller=Controller ) |
| 18 | self.net.addController( 'c0' ) |
| 19 | |
| peusterm | cbcd4c2 | 2015-12-28 11:33:42 +0100 | [diff] [blame] | 20 | def start_net(self): |
| peusterm | 44f3415 | 2015-12-11 14:32:34 +0100 | [diff] [blame] | 21 | self.net.start() |
| 22 | |
| peusterm | 266d248 | 2015-12-27 13:55:43 +0100 | [diff] [blame] | 23 | def CLI(self): |
| peusterm | 44f3415 | 2015-12-11 14:32:34 +0100 | [diff] [blame] | 24 | CLI(self.net) |
| peusterm | 266d248 | 2015-12-27 13:55:43 +0100 | [diff] [blame] | 25 | |
| peusterm | cbcd4c2 | 2015-12-28 11:33:42 +0100 | [diff] [blame] | 26 | def stop_net(self): |
| peusterm | 266d248 | 2015-12-27 13:55:43 +0100 | [diff] [blame] | 27 | try: |
| 28 | self.net.stop() |
| 29 | except Exception as e: |
| 30 | print e |
| 31 | |
| peusterm | cbcd4c2 | 2015-12-28 11:33:42 +0100 | [diff] [blame] | 32 | def addHost(self, name, ip=None): |
| 33 | return str(self.net.addHost(name, ip=ip)) |
| peusterm | 44f3415 | 2015-12-11 14:32:34 +0100 | [diff] [blame] | 34 | |
| peusterm | cbcd4c2 | 2015-12-28 11:33:42 +0100 | [diff] [blame] | 35 | def addDocker(self, name, dimage, ip): |
| 36 | return str(self.net.addDocker(name, dimage=dimage, ip=ip)) |
| peusterm | 44f3415 | 2015-12-11 14:32:34 +0100 | [diff] [blame] | 37 | |
| peusterm | cbcd4c2 | 2015-12-28 11:33:42 +0100 | [diff] [blame] | 38 | def addSwitch(self, name): |
| peusterm | 266d248 | 2015-12-27 13:55:43 +0100 | [diff] [blame] | 39 | # we have to use OVSSwitch to be able to do link attachments |
| 40 | # at runtime (switch.attach) method |
| peusterm | cbcd4c2 | 2015-12-28 11:33:42 +0100 | [diff] [blame] | 41 | return str(self.net.addSwitch(name, cls=OVSSwitch)) |
| peusterm | 44f3415 | 2015-12-11 14:32:34 +0100 | [diff] [blame] | 42 | |
| peusterm | cbcd4c2 | 2015-12-28 11:33:42 +0100 | [diff] [blame] | 43 | def addLink(self, node1, node2, port1=None, port2=None): |
| peusterm | 44f3415 | 2015-12-11 14:32:34 +0100 | [diff] [blame] | 44 | return str(self.net.addLink(node1, node2, |
| peusterm | cbcd4c2 | 2015-12-28 11:33:42 +0100 | [diff] [blame] | 45 | port1, port2)) |
| peusterm | 44f3415 | 2015-12-11 14:32:34 +0100 | [diff] [blame] | 46 | |
| peusterm | cbcd4c2 | 2015-12-28 11:33:42 +0100 | [diff] [blame] | 47 | def removeHost(self, name): |
| 48 | return self.net.removeHost(name) |
| peusterm | 266d248 | 2015-12-27 13:55:43 +0100 | [diff] [blame] | 49 | |
| 50 | def removeLink(self, link=None, node1=None, node2=None): |
| 51 | n1, n2 = self.net.get(node1), self.net.get(node2) |
| 52 | return self.net.removeLink(node1=n1, node2=n2) |
| 53 | |
| peusterm | 44f3415 | 2015-12-11 14:32:34 +0100 | [diff] [blame] | 54 | |
| 55 | def start_server(): |
| peusterm | cbcd4c2 | 2015-12-28 11:33:42 +0100 | [diff] [blame] | 56 | s = zerorpc.Server(RemoteMininetNetwork()) |
| 57 | s.bind("tcp://0.0.0.0:4242") |
| 58 | s.run() |