def _AS_to_XML(self, AS_object, pl, aggregate): """Converts a given AS number into a prefix list with ipv4/ipv6 prefixes. """ if aggregate: route_list4 = [] route_list6 = [] for r in AS_object.route_obj_dir.origin_table.itervalues(): route_list4.append(r.route) for r in AS_object.route_obj_dir.origin_table_v6.itervalues(): route_list6.append(r.route) route_list4 = aggregator.aggregate_prefix_list(route_list4) route_list6 = aggregator.aggregate_prefix_list(route_list6) for r in route_list4: et.SubElement(pl, 'prefix', attrib={'type': "ROUTE"}).text = r for r in route_list6: et.SubElement(pl, 'prefix', attrib={'type': "ROUTE6"}).text = r else: for r in AS_object.route_obj_dir.origin_table.itervalues(): et.SubElement(pl, 'prefix', attrib={'type': r.ROUTE_ATTR}).text = r.route for r in AS_object.route_obj_dir.origin_table_v6.itervalues(): et.SubElement(pl, 'prefix', attrib={'type': r.ROUTE_ATTR}).text = r.route
def _AS_to_XML(self, AS_object, pl, aggregate): """Converts a given AS number into a prefix list with ipv4/ipv6 prefixes. """ if aggregate: route_list4 = [] route_list6 = [] for r in AS_object.route_obj_dir.origin_table.itervalues(): route_list4.append(r.route) for r in AS_object.route_obj_dir.origin_table_v6.itervalues(): route_list6.append(r.route) route_list4 = aggregator.aggregate_prefix_list(route_list4) route_list6 = aggregator.aggregate_prefix_list(route_list6) for r in route_list4: et.SubElement(pl, 'prefix', attrib={'type': "ROUTE"}).text = r for r in route_list6: et.SubElement(pl, 'prefix', attrib={'type': "ROUTE6"}).text = r else: for r in AS_object.route_obj_dir.origin_table.itervalues(): et.SubElement(pl, 'prefix', attrib={ 'type': r.ROUTE_ATTR }).text = r.route for r in AS_object.route_obj_dir.origin_table_v6.itervalues(): et.SubElement(pl, 'prefix', attrib={ 'type': r.ROUTE_ATTR }).text = r.route
def _convert_RS_to_dict(self, route_set_object, route_set_object_dir, aggregate): """Traverses the tree created by the RSes. Ignores duplicate routes and avoids loops. """ route_set_tree = deque([route_set_object.get_key()]) traversed_route_sets = set() traversed_routes = set() routes4 = [] routes6 = [] while route_set_tree: current_set_name = route_set_tree.popleft() current_set = route_set_object_dir.data[current_set_name] for r in current_set.members.origin_table.itervalues(): if r.route not in traversed_routes: routes4.append(r.route) traversed_routes.add(r.route) for r in current_set.mp_members.origin_table_v6.itervalues(): if r.route not in traversed_routes: routes6.append(r.route) traversed_routes.add(r.route) for child_set in current_set.RSes_dir: if child_set not in traversed_route_sets: traversed_route_sets.add(child_set) route_set_tree.append(child_set) if aggregate: routes4 = aggregator.aggregate_prefix_list(routes4) routes6 = aggregator.aggregate_prefix_list(routes6) return {'ipv4': routes4, 'ipv6': routes6}
def _convert_ASset_to_dict(self, AS_set_object, AS_object_dir, AS_set_object_dir, aggregate): """Traverses the tree created by the AS sets. Ignores duplicate ASes and avoids loops. """ AS_set_tree = deque([AS_set_object.get_key()]) traversed_AS_sets = set() traversed_ASes = set() routes4 = [] routes6 = [] while AS_set_tree: current_set_name = AS_set_tree.popleft() current_set = AS_set_object_dir.data[current_set_name] for child_AS in current_set.ASN_members: if child_AS not in traversed_ASes: traversed_ASes.add(child_AS) try: self._get_all_AS_routes(AS_object_dir.data[child_AS], routes4, routes6) except KeyError: pass for child_set in current_set.AS_set_members: if child_set not in traversed_AS_sets: traversed_AS_sets.add(child_set) AS_set_tree.append(child_set) if aggregate: routes4 = aggregator.aggregate_prefix_list(routes4) routes6 = aggregator.aggregate_prefix_list(routes6) return {'ipv4': routes4, 'ipv6': routes6}
def _convert_AS_to_dict(self, AS_object, aggregate): """Converts a given AS number into a dictionary which includes all IPv4 and IPv6 addresses """ routes4 = [] routes6 = [] self._get_all_AS_routes(AS_object, routes4, routes6) if aggregate: routes4 = aggregator.aggregate_prefix_list(routes4) routes6 = aggregator.aggregate_prefix_list(routes6) return {self.name_prefix + AS_object.origin: {'ipv4': routes4, 'ipv6': routes6}}
def _route_set_to_XML(self, route_set_object, route_set_object_dir, pl, aggregate): """Traverses the tree created by the RSes. Ignores duplicate routes and avoids loops. """ route_set_tree = deque([route_set_object.get_key()]) traversed_route_sets = set() traversed_routes = set() route_list4 = [] route_list6 = [] while route_set_tree: current_set_name = route_set_tree.popleft() current_set = route_set_object_dir.data[current_set_name] for r in current_set.members.origin_table.itervalues(): if r.route not in traversed_routes: # et.SubElement(pl, 'prefix', attrib={'type': r.ROUTE_ATTR}).text = r.route route_list4.append(r.route) traversed_routes.add(r.route) for r in current_set.mp_members.origin_table_v6.itervalues(): if r.route not in traversed_routes: # et.SubElement(pl, 'prefix', attrib={'type': r.ROUTE_ATTR}).text = r.route route_list6.append(r.route) traversed_routes.add(r.route) for child_set in current_set.RSes_dir: if child_set not in traversed_route_sets: traversed_route_sets.add(child_set) route_set_tree.append(child_set) if aggregate: route_list4 = aggregator.aggregate_prefix_list(route_list4) route_list6 = aggregator.aggregate_prefix_list(route_list6) for r in route_list4: et.SubElement(pl, 'prefix', attrib={'type': ""}).text = r.route for r in route_list6: et.SubElement(pl, 'prefix', attrib={ 'type': r.ROUTE_ATTR }).text = r.route
def _convert_AS_to_dict(self, AS_object, aggregate): """Converts a given AS number into a dictionary which includes all IPv4 and IPv6 addresses """ routes4 = [] routes6 = [] self._get_all_AS_routes(AS_object, routes4, routes6) if aggregate: routes4 = aggregator.aggregate_prefix_list(routes4) routes6 = aggregator.aggregate_prefix_list(routes6) return { self.name_prefix + AS_object.origin: { 'ipv4': routes4, 'ipv6': routes6 } }
def _route_set_to_XML(self, route_set_object, route_set_object_dir, pl, aggregate): """Traverses the tree created by the RSes. Ignores duplicate routes and avoids loops. """ route_set_tree = deque([route_set_object.get_key()]) traversed_route_sets = set() traversed_routes = set() route_list4 = [] route_list6 = [] while route_set_tree: current_set_name = route_set_tree.popleft() current_set = route_set_object_dir.data[current_set_name] for r in current_set.members.origin_table.itervalues(): if r.route not in traversed_routes: # et.SubElement(pl, 'prefix', attrib={'type': r.ROUTE_ATTR}).text = r.route route_list4.append(r.route) traversed_routes.add(r.route) for r in current_set.mp_members.origin_table_v6.itervalues(): if r.route not in traversed_routes: # et.SubElement(pl, 'prefix', attrib={'type': r.ROUTE_ATTR}).text = r.route route_list6.append(r.route) traversed_routes.add(r.route) for child_set in current_set.RSes_dir: if child_set not in traversed_route_sets: traversed_route_sets.add(child_set) route_set_tree.append(child_set) if aggregate: route_list4 = aggregator.aggregate_prefix_list(route_list4) route_list6 = aggregator.aggregate_prefix_list(route_list6) for r in route_list4: et.SubElement(pl, 'prefix', attrib={'type': ""}).text = r.route for r in route_list6: et.SubElement(pl, 'prefix', attrib={'type': r.ROUTE_ATTR}).text = r.route