update son-emu-cli network CLI
[osm/vim-emu.git] / src / emuvim / dcemulator / net.py
index faae0e3..5dfcbcd 100755 (executable)
@@ -41,7 +41,7 @@ from mininet.link import TCLink
 from mininet.clean import cleanup
 import networkx as nx
 from emuvim.dcemulator.monitoring import DCNetworkMonitor
-from emuvim.dcemulator.node import Datacenter, EmulatorCompute
+from emuvim.dcemulator.node import Datacenter, EmulatorCompute, EmulatorExtSAP
 from emuvim.dcemulator.resourcemodel import ResourceModelRegistrar
 
 LOG = logging.getLogger("dcemulator.net")
@@ -233,8 +233,21 @@ class DCNetwork(Containernet):
         """
         Remove the link from the Containernet and the networkx graph
         """
+        if link is not None:
+            node1 = link.intf1.node
+            node2 = link.intf2.node
+        assert node1 is not None
+        assert node2 is not None
         Containernet.removeLink(self, link=link, node1=node1, node2=node2)
-        self.DCNetwork_graph.remove_edge(node2.name, node1.name)
+        # TODO we might decrease the loglevel to debug:
+        try:
+            self.DCNetwork_graph.remove_edge(node2.name, node1.name)
+        except:
+            LOG.warning("%s not found in DCNetwork_graph." % ((node2.name, node1.name)))
+        try:
+            self.DCNetwork_graph.remove_edge(node1.name, node2.name)
+        except:
+            LOG.warning("%s not found in DCNetwork_graph." % ((node1.name, node2.name)))
 
     def addDocker( self, label, **params ):
         """
@@ -257,7 +270,6 @@ class DCNetwork(Containernet):
         # make sure that 'type' is set
         params['type'] = params.get('type','sap_ext')
         self.DCNetwork_graph.add_node(sap_name, type=params['type'])
-        LOG.info('add ext sap: {0}'.format(sap_name))
         return Containernet.addExtSAP(self, sap_name, sap_ip, **params)
 
     def removeExtSAP(self, sap_name, **params):
@@ -275,7 +287,6 @@ class DCNetwork(Containernet):
         # add this switch to the global topology overview
         if add_to_graph:
             self.DCNetwork_graph.add_node(name, type=params.get('type','switch'))
-            LOG.info('*** **** *** add switch: {0} type: {1}'.format(name, params.get('type')))
 
         # set the learning switch behavior
         if 'failMode' in params :
@@ -921,7 +932,14 @@ class DCNetwork(Containernet):
                 dict.update({match[0]:m2})
         return dict
 
-    def find_connected_dc_interface(self, vnf_src_name, vnf_src_interface):
+    def find_connected_dc_interface(self, vnf_src_name, vnf_src_interface=None):
+
+        if vnf_src_interface is None:
+            # take first interface by default
+            connected_sw = self.DCNetwork_graph.neighbors(vnf_src_name)[0]
+            link_dict = self.DCNetwork_graph[vnf_src_name][connected_sw]
+            vnf_src_interface = link_dict[0]['src_port_id']
+
         for connected_sw in self.DCNetwork_graph.neighbors(vnf_src_name):
             link_dict = self.DCNetwork_graph[vnf_src_name][connected_sw]
             for link in link_dict: