| 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 |
| 9 | import Pyro4 |
| 10 | |
| 11 | |
| 12 | class RemoteMininetNetwork(object): |
| 13 | |
| 14 | def __init__(self): |
| 15 | mininet.log.setLogLevel( 'debug' ) |
| 16 | self.net = Mininet( controller=Controller ) |
| 17 | self.net.addController( 'c0' ) |
| 18 | |
| 19 | def start(self): |
| 20 | self.net.start() |
| 21 | |
| peusterm | 266d248 | 2015-12-27 13:55:43 +0100 | [diff] [blame^] | 22 | def CLI(self): |
| peusterm | 44f3415 | 2015-12-11 14:32:34 +0100 | [diff] [blame] | 23 | CLI(self.net) |
| peusterm | 266d248 | 2015-12-27 13:55:43 +0100 | [diff] [blame^] | 24 | |
| 25 | def stop(self): |
| 26 | try: |
| 27 | self.net.stop() |
| 28 | except Exception as e: |
| 29 | print e |
| 30 | |
| peusterm | 44f3415 | 2015-12-11 14:32:34 +0100 | [diff] [blame] | 31 | |
| 32 | def addHost(self, name, cls=None, **params): |
| 33 | return str(self.net.addHost(name, cls=cls, **params)) |
| 34 | |
| 35 | def addDocker(self, name, **params): |
| 36 | return str(self.net.addDocker(name, **params)) |
| 37 | |
| peusterm | 266d248 | 2015-12-27 13:55:43 +0100 | [diff] [blame^] | 38 | def addSwitch(self, name, **params): |
| 39 | # we have to use OVSSwitch to be able to do link attachments |
| 40 | # at runtime (switch.attach) method |
| 41 | return str(self.net.addSwitch(name, cls=OVSSwitch, **params)) |
| peusterm | 44f3415 | 2015-12-11 14:32:34 +0100 | [diff] [blame] | 42 | |
| 43 | def addLink(self, node1, node2, port1=None, port2=None, |
| 44 | cls=None, **params): |
| 45 | return str(self.net.addLink(node1, node2, |
| 46 | port1, port2, cls=cls, **params)) |
| 47 | |
| peusterm | 266d248 | 2015-12-27 13:55:43 +0100 | [diff] [blame^] | 48 | def removeHost(self, name, **params): |
| 49 | return self.net.removeHost(name, **params) |
| 50 | |
| 51 | def removeLink(self, link=None, node1=None, node2=None): |
| 52 | n1, n2 = self.net.get(node1), self.net.get(node2) |
| 53 | return self.net.removeLink(node1=n1, node2=n2) |
| 54 | |
| peusterm | 44f3415 | 2015-12-11 14:32:34 +0100 | [diff] [blame] | 55 | |
| 56 | def start_server(): |
| 57 | daemon = Pyro4.Daemon() |
| 58 | # ATTENTION: |
| 59 | # we need a PyroNS instance to be running: pyro4-ns (in new terminal) |
| 60 | ns = Pyro4.locateNS() |
| 61 | uri = daemon.register(RemoteMininetNetwork()) |
| 62 | # map object URI to a nice name |
| 63 | ns.register("remote.mininet", uri) |
| 64 | |
| 65 | logging.info("Server URI is: %s", uri) |
| 66 | |
| 67 | # Start the server... |
| 68 | daemon.requestLoop() |