blob: c649d77cdd379822d9c48918b498b2633fb2d4f0 [file] [log] [blame]
peusterm44f34152015-12-11 14:32:34 +01001# We need a properly installed Dockernet
2from mininet.net import Mininet
3from mininet.node import Controller, Docker, OVSSwitch
peusterm266d2482015-12-27 13:55:43 +01004from mininet.link import *
peusterm44f34152015-12-11 14:32:34 +01005from mininet.cli import CLI
6import mininet.log
7import logging
8import os
9import Pyro4
10
11
12class 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
peusterm266d2482015-12-27 13:55:43 +010022 def CLI(self):
peusterm44f34152015-12-11 14:32:34 +010023 CLI(self.net)
peusterm266d2482015-12-27 13:55:43 +010024
25 def stop(self):
26 try:
27 self.net.stop()
28 except Exception as e:
29 print e
30
peusterm44f34152015-12-11 14:32:34 +010031
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
peusterm266d2482015-12-27 13:55:43 +010038 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))
peusterm44f34152015-12-11 14:32:34 +010042
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
peusterm266d2482015-12-27 13:55:43 +010048 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
peusterm44f34152015-12-11 14:32:34 +010055
56def 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()