def _run( self, client: OpenrCtrl.Client, src: str, dst: str, max_hop: int, area: str, *args, **kwargs, ) -> None: if not src or not dst: host_id = client.getMyNodeName() src = src or host_id dst = dst or host_id # pyre-fixme[16]: `PathCmd` has no attribute `prefix_dbs`. self.prefix_dbs: Dict[str, openr_types.PrefixDatabase] = {} area = utils.get_area_id(client, area) # Get prefix_dbs from KvStore params = openr_types.KeyDumpParams(Consts.PREFIX_DB_MARKER) params.keys = [Consts.PREFIX_DB_MARKER] if area is None: pub = client.getKvStoreKeyValsFiltered(params) else: pub = client.getKvStoreKeyValsFilteredArea(params, area) for value in pub.keyVals.values(): utils.parse_prefix_database("", "", self.prefix_dbs, value) paths = self.get_paths(client, src, dst, max_hop) self.print_paths(paths)
def _run(self, client: OpenrCtrl.Client, src: str, dst: str, max_hop: int) -> None: if not src or not dst: host_id = client.getMyNodeName() src = src or host_id dst = dst or host_id # Get prefix_dbs from KvStore self.prefix_dbs: Dict[str, lsdb_types.PrefixDatabase] = {} pub = client.getKvStoreKeyValsFiltered( kv_store_types.KeyDumpParams(Consts.PREFIX_DB_MARKER) ) for value in pub.keyVals.values(): utils.parse_prefix_database("", "", self.prefix_dbs, value) paths = self.get_paths(client, src, dst, max_hop) self.print_paths(paths)
def test_parse_prefix_database(self): bgp1 = openr_types.PrefixEntry( prefix=ipnetwork.ip_str_to_prefix("1.0.0.0/8"), type=network_types.PrefixType.BGP, ) bgp2 = openr_types.PrefixEntry( prefix=ipnetwork.ip_str_to_prefix("2.0.0.0/8"), type=network_types.PrefixType.BGP, ) loop1 = openr_types.PrefixEntry( prefix=ipnetwork.ip_str_to_prefix("10.0.0.1/32"), type=network_types.PrefixType.LOOPBACK, ) prefix_db = openr_types.PrefixDatabase( thisNodeName="node1", prefixEntries=[bgp1, bgp2, loop1], deletePrefix=False, perfEvents=None, ) # No filter and ensure we receive everything back data = {} parse_prefix_database("", "", data, prefix_db) self.assertEqual(data["node1"].prefixEntries, [bgp1, bgp2, loop1]) # Filter on prefix data = {} parse_prefix_database("10.0.0.1/32", "", data, prefix_db) self.assertEqual(data["node1"].prefixEntries, [loop1]) # Filter on type data = {} parse_prefix_database("", "bgp", data, prefix_db) self.assertEqual(data["node1"].prefixEntries, [bgp1, bgp2]) # Filter on prefix and type both data = {} parse_prefix_database("2.0.0.0/8", "bgp", data, prefix_db) self.assertEqual(data["node1"].prefixEntries, [bgp2])