예제 #1
0
 def find_sdn_interfaces_for_se_interface(se_links,
                                          se_interface,
                                          negative_filter=[],
                                          possitive_filter=[""]):
     sdn_interfaces_match = set()
     for se_link in se_links:
         se_link_interfaces = [
             iface.get("component_id")
             for iface in se_link.get("interface_ref")
         ]
         se_link_interfaces_match = any([
             PathFinderTNtoSDNFormatUtils.remove_port_cid(se_interface)
             in se_link_interface
             for se_link_interface in se_link_interfaces
         ])
         if se_link_interfaces_match:
             # Retrieve link interfaces from SDN switches that are connected with any SE interface
             # Search for some SDN link connected to the passed SE component id (without port!)
             se_interface_noport = PathFinderTNtoSDNFormatUtils.remove_port_cid(
                 se_interface)
             # Also, avoid adding links SE-TN (this would introduce a never-ending loop)
             if se_interface_noport in se_link_interfaces[0] \
                     and not any([ param in se_link_interfaces[1] for param in negative_filter ]) \
                     and any([ param in se_link_interfaces[1] for param in possitive_filter ]):
                 sdn_interfaces_match.add(se_link_interfaces[1])
             elif se_interface_noport in se_link_interfaces[1] \
                     and not any([ param in se_link_interfaces[0] for param in negative_filter ]) \
                     and any([ param in se_link_interfaces[0] for param in possitive_filter ]):
                 sdn_interfaces_match.add(se_link_interfaces[0])
     # Convert from set to tuple to avoid unhashable problems later on
     return tuple(sdn_interfaces_match)
예제 #2
0
    def find_path_sdn(self):
        # Get SDN interfaces for (SRC, DST) SE interface
        negative_filter = ["tnrm"]
        for path_source in self.mapping_tn_se_of:
            for src_dst_value in self.src_dst_values:
                # Domains connected through VPN may not have SE links (skip)
                if "se" not in path_source[src_dst_value]:
                    return
                # possitive_filter_of_switches = [ FormatUtils.\
                # remove_port_cid(f) for f in getattr(self, \
                # "%s_of_cids" % src_dst_value) ]
                se_interface = path_source[src_dst_value]["se"]

                # Possible SE-SDN links
                sdn_candidates = []

                if se_interface is not None and len(se_interface) > 0:
                    # Search for *every* connection between SE and SDN devices
                    se_node = FormatUtils.remove_port_cid(se_interface)
                    sdn_candidates = self.find_se_sdn_links_for_se_node(
                        se_node, negative_filter)

                for se_sdn_link in sdn_candidates:
                    se_sdn_link = \
                        FormatUtils.format_verify_se_sdn_links(se_sdn_link)
                    path_source[src_dst_value]["links"].append(se_sdn_link)
예제 #3
0
파일: filter.py 프로젝트: ict-felix/stack
 def find_sdn_interfaces_for_se_interface(se_links, se_interface, negative_filter=[], possitive_filter=[""]):
     sdn_interfaces_match = set()
     for se_link in se_links:
         se_link_interfaces = [ iface.get("component_id") for iface in se_link.get("interface_ref") ]
         se_link_interfaces_match = any([ FormatUtils.remove_port_cid(se_interface) in se_link_interface for se_link_interface in se_link_interfaces ])
         if se_link_interfaces_match:
             # Retrieve link interfaces from SDN switches that are connected with any SE interface
             # Search for some SDN link connected to the passed SE component id (without port!)
             se_interface_noport = FormatUtils.remove_port_cid(se_interface)
             # Also, avoid adding links SE-TN (this would introduce a never-ending loop)
             if se_interface_noport in se_link_interfaces[0] \
                     and not any([ param in se_link_interfaces[1] for param in negative_filter ]) \
                     and any([ param in se_link_interfaces[1] for param in possitive_filter ]):
                 sdn_interfaces_match.add(se_link_interfaces[1])
             elif se_interface_noport in se_link_interfaces[1] \
                     and not any([ param in se_link_interfaces[0] for param in negative_filter ]) \
                     and any([ param in se_link_interfaces[0] for param in possitive_filter ]):
                 sdn_interfaces_match.add(se_link_interfaces[0])
     # Convert from set to tuple to avoid unhashable problems later on
     return tuple(sdn_interfaces_match)
예제 #4
0
    def find_path_sdn(self):
        # Get SDN interfaces for (SRC, DST) SE interface
        negative_filter = ["tnrm"]
        for path_source in self.mapping_tn_se_of:
            for src_dst_value in self.src_dst_values:
                # Domains connected through the VPN may not have SE links (skip)
                if "se" not in path_source[src_dst_value]:
                    return
                #possitive_filter_of_switches = [ FormatUtils.remove_port_cid(f) for f in getattr(self, "%s_of_cids" % src_dst_value) ]
                se_interface = path_source[src_dst_value]["se"]

                # Possible SE-SDN links
                sdn_candidates = []

                if se_interface is not None and len(se_interface) > 0:
                    # Search for *every* connection between SE and SDN devices
                    se_node = FormatUtils.remove_port_cid(se_interface)
                    sdn_candidates = self.find_se_sdn_links_for_se_node(
                        se_node, negative_filter)

                for se_sdn_link in sdn_candidates:
                    se_sdn_link = FormatUtils.format_verify_se_sdn_links(
                        se_sdn_link)
                    path_source[src_dst_value]["links"].append(se_sdn_link)