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)
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)
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)
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)