acknowledge the contributions of their colleagues of the SONATA
partner consortium (www.sonata-nfv.eu).
"""
-from mininet.node import Docker
+from mininet.node import Docker, OVSBridge
from mininet.link import Link
from emuvim.dcemulator.resourcemodel import NotEnoughResourcesAvailable
import logging
-import time
-import json
+
LOG = logging.getLogger("dcemulator.node")
LOG.setLevel(logging.DEBUG)
DCDPID_BASE = 1000 # start of switch dpid's used for data center switches
+EXTSAPDPID_BASE = 2000 # start of switch dpid's used for external SAP switches
class EmulatorCompute(Docker):
"""
status["state"] = self.dcli.inspect_container(self.dc)["State"]
status["id"] = self.dcli.inspect_container(self.dc)["Id"]
status["short_id"] = self.dcli.inspect_container(self.dc)["Id"][:12]
+ status["hostname"] = self.dcli.inspect_container(self.dc)["Config"]['Hostname']
status["datacenter"] = (None if self.datacenter is None
else self.datacenter.label)
+
return status
DCDPID_BASE += 1
return DCDPID_BASE
+ def _get_next_extSAP_dpid(self):
+ global EXTSAPDPID_BASE
+ EXTSAPDPID_BASE += 1
+ return EXTSAPDPID_BASE
+
def create(self):
"""
Each data center is represented by a single switch to which
return True
+ def attachExternalSAP(self, sap_name, sap_net, **params):
+ # create SAP as separate OVS switch with an assigned ip address
+ sap_ip = str(sap_net[1]) + '/' + str(sap_net.prefixlen)
+ # allow connection to the external internet through the host
+ params = dict(NAT=True, SAPNet=str(sap_net))
+ sap_switch = self.net.addExtSAP(sap_name, sap_ip, dpid=hex(self._get_next_extSAP_dpid())[2:], **params)
+ sap_switch.start()
+
+ # link SAP to the DC switch
+ self.net.addLink(sap_switch, self.switch, cls=Link)
+
+ def removeExternalSAP(self, sap_name, sap_net):
+ sap_switch = self.net.getNodeByName(sap_name)
+ # link SAP to the DC switch
+ self.net.removeLink(link=None, node1=sap_switch, node2=self.switch)
+ self.net.removeExtSAP(sap_name, str(sap_net))
+
def listCompute(self):
"""
Return a list of all running containers assigned to this