From: Donatas Abraitis Date: Tue, 24 May 2022 12:43:47 +0000 (+0300) Subject: bgpd: Add JSON support for `show rpki cache-server` X-Git-Tag: base_8.3~35^2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=cc4d121f9f0fca40141425ef9af739ba4b385e36;p=matthieu%2Ffrr.git bgpd: Add JSON support for `show rpki cache-server` ``` spine1-debian-11# sh rpki cache-server json { "servers":[ { "mode":"tcp", "host":"192.168.10.17", "port":"8283" }, { "mode":"tcp", "host":"192.168.10.17", "port":"8282" } ] } spine1-debian-11# sh rpki cache-server host: 192.168.10.17 port: 8283 host: 192.168.10.17 port: 8282 spine1-debian-11# ``` Signed-off-by: Donatas Abraitis --- diff --git a/bgpd/bgp_rpki.c b/bgpd/bgp_rpki.c index e20ea15e03..1acb36127f 100644 --- a/bgpd/bgp_rpki.c +++ b/bgpd/bgp_rpki.c @@ -1278,37 +1278,89 @@ DEFPY (show_rpki_prefix, return CMD_SUCCESS; } -DEFUN (show_rpki_cache_server, +DEFPY (show_rpki_cache_server, show_rpki_cache_server_cmd, - "show rpki cache-server", + "show rpki cache-server [json$uj]", SHOW_STR RPKI_OUTPUT_STRING - "SHOW configured cache server\n") + "Show configured cache server\n" + JSON_STR) { + struct json_object *json = NULL; + struct json_object *json_server = NULL; + struct json_object *json_servers = NULL; struct listnode *cache_node; struct cache *cache; + if (uj) { + json = json_object_new_object(); + json_servers = json_object_new_array(); + json_object_object_add(json, "servers", json_servers); + } + for (ALL_LIST_ELEMENTS_RO(cache_list, cache_node, cache)) { if (cache->type == TCP) { - vty_out(vty, "host: %s port: %s\n", - cache->tr_config.tcp_config->host, - cache->tr_config.tcp_config->port); + if (!json) { + vty_out(vty, "host: %s port: %s\n", + cache->tr_config.tcp_config->host, + cache->tr_config.tcp_config->port); + } else { + json_server = json_object_new_object(); + json_object_string_add(json_server, "mode", + "tcp"); + json_object_string_add( + json_server, "host", + cache->tr_config.tcp_config->host); + json_object_string_add( + json_server, "port", + cache->tr_config.tcp_config->port); + json_object_array_add(json_servers, + json_server); + } #if defined(FOUND_SSH) } else if (cache->type == SSH) { - vty_out(vty, - "host: %s port: %d username: %s server_hostkey_path: %s client_privkey_path: %s\n", - cache->tr_config.ssh_config->host, - cache->tr_config.ssh_config->port, - cache->tr_config.ssh_config->username, - cache->tr_config.ssh_config - ->server_hostkey_path, - cache->tr_config.ssh_config - ->client_privkey_path); + if (!json) { + vty_out(vty, + "host: %s port: %d username: %s server_hostkey_path: %s client_privkey_path: %s\n", + cache->tr_config.ssh_config->host, + cache->tr_config.ssh_config->port, + cache->tr_config.ssh_config->username, + cache->tr_config.ssh_config + ->server_hostkey_path, + cache->tr_config.ssh_config + ->client_privkey_path); + } else { + json_server = json_object_new_object(); + json_object_string_add(json_server, "mode", + "ssh"); + json_object_string_add( + json_server, "host", + cache->tr_config.ssh_config->host); + json_object_int_add( + json_server, "port", + cache->tr_config.ssh_config->port); + json_object_string_add( + json_server, "username", + cache->tr_config.ssh_config->username); + json_object_string_add( + json_server, "serverHostkeyPath", + cache->tr_config.ssh_config + ->server_hostkey_path); + json_object_string_add( + json_server, "clientPrivkeyPath", + cache->tr_config.ssh_config + ->client_privkey_path); + json_object_array_add(json_servers, + json_server); + } #endif } } + if (json) + vty_json(vty, json); + return CMD_SUCCESS; } diff --git a/doc/user/rpki.rst b/doc/user/rpki.rst index f03d8233f7..ece788d9e3 100644 --- a/doc/user/rpki.rst +++ b/doc/user/rpki.rst @@ -216,10 +216,14 @@ Displaying RPKI received from the cache servers and stored in the router. Based on this data, the router validates BGP Updates. -.. clicmd:: show rpki cache-connection [json] +.. clicmd:: show rpki cache-server [json] Display all configured cache servers, whether active or not. +.. clicmd:: show rpki cache-connection [json] + + Display all cache connections, and show which is connected or not. + .. clicmd:: show bgp [afi] [safi] rpki Display for the specified prefix or address the bgp paths that match the given rpki state.