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 <donatas@opensourcerouting.org>
This commit is contained in:
Donatas Abraitis 2022-05-24 15:43:47 +03:00
parent 0fe7b4f568
commit cc4d121f9f
2 changed files with 72 additions and 16 deletions

View File

@ -1278,37 +1278,89 @@ DEFPY (show_rpki_prefix,
return CMD_SUCCESS; return CMD_SUCCESS;
} }
DEFUN (show_rpki_cache_server, DEFPY (show_rpki_cache_server,
show_rpki_cache_server_cmd, show_rpki_cache_server_cmd,
"show rpki cache-server", "show rpki cache-server [json$uj]",
SHOW_STR SHOW_STR
RPKI_OUTPUT_STRING 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 listnode *cache_node;
struct cache *cache; 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)) { for (ALL_LIST_ELEMENTS_RO(cache_list, cache_node, cache)) {
if (cache->type == TCP) { if (cache->type == TCP) {
vty_out(vty, "host: %s port: %s\n", if (!json) {
cache->tr_config.tcp_config->host, vty_out(vty, "host: %s port: %s\n",
cache->tr_config.tcp_config->port); 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) #if defined(FOUND_SSH)
} else if (cache->type == SSH) { } else if (cache->type == SSH) {
vty_out(vty, if (!json) {
"host: %s port: %d username: %s server_hostkey_path: %s client_privkey_path: %s\n", vty_out(vty,
cache->tr_config.ssh_config->host, "host: %s port: %d username: %s server_hostkey_path: %s client_privkey_path: %s\n",
cache->tr_config.ssh_config->port, cache->tr_config.ssh_config->host,
cache->tr_config.ssh_config->username, cache->tr_config.ssh_config->port,
cache->tr_config.ssh_config cache->tr_config.ssh_config->username,
->server_hostkey_path, cache->tr_config.ssh_config
cache->tr_config.ssh_config ->server_hostkey_path,
->client_privkey_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 #endif
} }
} }
if (json)
vty_json(vty, json);
return CMD_SUCCESS; return CMD_SUCCESS;
} }

View File

@ -216,10 +216,14 @@ Displaying RPKI
received from the cache servers and stored in the router. Based on this data, received from the cache servers and stored in the router. Based on this data,
the router validates BGP Updates. 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. 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] <A.B.C.D|A.B.C.D/M|X:X::X:X|X:X::X:X/M> rpki <valid|invalid|notfound> .. clicmd:: show bgp [afi] [safi] <A.B.C.D|A.B.C.D/M|X:X::X:X|X:X::X:X/M> rpki <valid|invalid|notfound>
Display for the specified prefix or address the bgp paths that match the given rpki state. Display for the specified prefix or address the bgp paths that match the given rpki state.