import logging
from mininet.net import Mininet
-from mininet.node import Controller, OVSKernelSwitch, Switch
+from mininet.node import Controller, OVSKernelSwitch, Switch, Docker, Host
from mininet.cli import CLI
from mininet.log import setLogLevel, info
from mininet.link import TCLink, Link
-from node import Datacenter
+from node import Datacenter, EmulatorCompute
class DCNetwork(object):
logging.info("added switch: %s" % name)
return s
- def addLink(self, node1, node2):
+ def addLink(self, node1, node2, **params):
"""
Able to handle Datacenter objects as link
end points.
"""
assert node1 is not None
assert node2 is not None
+ logging.debug("addLink: n1=%s n2=%s" % (str(node1), str(node2)))
# ensure type of node1
if isinstance( node1, basestring ):
if node1 in self.dcs:
node2 = self.switches[node2]
if isinstance( node2, Datacenter ):
node2 = node2.switch
- # create link if everything is correct
- if (node1 is not None and isinstance(node1, OVSKernelSwitch)
- and node2 is not None and isinstance(node2, OVSKernelSwitch)):
- self.mnet.addLink(node1, node2) # TODO we need TCLinks with user defined performance here
- else:
- raise Exception(
- "one of the given nodes is not a Mininet switch or None")
+ # try to give containers a default IP
+ if isinstance( node1, Docker ):
+ if not "params1" in params:
+ params["params1"] = {}
+ if not "ip" in params["params1"]:
+ params["params1"]["ip"] = self.getNextIp()
+ if isinstance( node2, Docker ):
+ if not "params2" in params:
+ params["params2"] = {}
+ if not "ip" in params["params2"]:
+ params["params2"]["ip"] = self.getNextIp()
+
+ return self.mnet.addLink(node1, node2, **params) # TODO we need TCLinks with user defined performance here
+
+ def removeLink(self, link=None, node1=None, node2=None):
+ """
+ Removes a link. Can either be specified by link object,
+ or the nodes the link connects. Wraps Dockernet method.
+ """
+ logging.debug("removeLink: n1=%s n2=%s" % (str(node1), str(node2)))
+ return self.mnet.removeLink(link=link, node1=node1, node2=node2)
def addDocker( self, name, **params ):
"""
Wrapper for addDocker method provided by Dockernet.
"""
- return self.mnet.addDocker( name, **params)
+ return self.mnet.addDocker( name, cls=EmulatorCompute, **params)
def removeDocker( self, name, **params):
"""
"""
return self.mnet.removeDocker(name, **params)
+ def getNextIp(self):
+ return self.mnet.getNextIp()
+
def start(self):
# start
for dc in self.dcs.itervalues():