- def attachExternalSAP(self, sap_name, sap_ip):
- # create SAP as OVS internal interface
- sap_intf = self.switch.attachInternalIntf(sap_name, sap_ip)
-
- # add this as a link to the DCnetwork graph, so it is available for routing
- attr_dict2 = {'src_port_id': sap_name, 'src_port_nr': None,
- 'src_port_name': sap_name,
- 'dst_port_id': self.switch.ports[sap_intf], 'dst_port_nr': self.switch.ports[sap_intf],
- 'dst_port_name': sap_intf.name}
- self.net.DCNetwork_graph.add_edge(sap_name, self.switch.name, attr_dict=attr_dict2)
-
- attr_dict2 = {'dst_port_id': sap_name, 'dst_port_nr': None,
- 'dst_port_name': sap_name,
- 'src_port_id': self.switch.ports[sap_intf], 'src_port_nr': self.switch.ports[sap_intf],
- 'src_port_name': sap_intf.name}
- self.net.DCNetwork_graph.add_edge(self.switch.name, sap_name, attr_dict=attr_dict2)
-
+ 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))