From f53e5d53b030dfcc0b5b5128e8697f5b4c6501a3 Mon Sep 17 00:00:00 2001 From: Louis Scalbert Date: Fri, 15 Dec 2023 17:26:41 +0100 Subject: [PATCH] bgpd: fix show rpki json void output "show rpki XX json" should not return a void output because json.loads() considers it to be an incorrect JSON. > >>> json.loads("") > Traceback (most recent call last): > File "", line 1, in > File "/usr/lib/python3.9/json/__init__.py", line 346, in loads > return _default_decoder.decode(s) > File "/usr/lib/python3.9/json/decoder.py", line 337, in decode > obj, end = self.raw_decode(s, idx=_w(s, 0).end()) > File "/usr/lib/python3.9/json/decoder.py", line 355, in raw_decode > raise JSONDecodeError("Expecting value", s, err.value) from None > json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) > >>> json.loads("{}") > {} Return "{}" instead in such a case. Link: https://github.com/FRRouting/frr/pull/15034 Fixes: dff41cc8a9 ("bgpd: Add JSON output for `show rpki prefix` and other show commands") Signed-off-by: Louis Scalbert --- bgpd/bgp_rpki.c | 45 ++++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/bgpd/bgp_rpki.c b/bgpd/bgp_rpki.c index f0b2ffdee522..05d1b4fcc7db 100644 --- a/bgpd/bgp_rpki.c +++ b/bgpd/bgp_rpki.c @@ -733,7 +733,9 @@ static void print_prefix_table_by_asn(struct vty *vty, as_t as, arg.asnotation = bgp_get_asnotation(bgp_lookup_by_vrf_id(VRF_DEFAULT)); if (!group) { - if (!json) + if (json) + vty_json(vty, json); + else vty_out(vty, "Cannot find a connected group.\n"); return; } @@ -786,7 +788,9 @@ static void print_prefix_table(struct vty *vty, json_object *json) arg.asnotation = bgp_get_asnotation(bgp_lookup_by_vrf_id(VRF_DEFAULT)); if (!group) { - if (!json) + if (json) + vty_json(vty, json); + else vty_out(vty, "Cannot find a connected group.\n"); return; } @@ -1326,15 +1330,17 @@ DEFPY (show_rpki_prefix_table, { struct json_object *json = NULL; + if (uj) + json = json_object_new_object(); + if (!is_synchronized()) { - if (!uj) + if (uj) + vty_json(vty, json); + else vty_out(vty, "No connection to RPKI cache server.\n"); return CMD_WARNING; } - if (uj) - json = json_object_new_object(); - print_prefix_table(vty, json); return CMD_SUCCESS; } @@ -1350,15 +1356,17 @@ DEFPY (show_rpki_as_number, { struct json_object *json = NULL; + if (uj) + json = json_object_new_object(); + if (!is_synchronized()) { - if (!uj) + if (uj) + vty_json(vty, json); + else vty_out(vty, "No Connection to RPKI cache server.\n"); return CMD_WARNING; } - if (uj) - json = json_object_new_object(); - print_prefix_table_by_asn(vty, by_asn, json); return CMD_SUCCESS; } @@ -1378,8 +1386,13 @@ DEFPY (show_rpki_prefix, json_object *json_records = NULL; enum asnotation_mode asnotation; + if (uj) + json = json_object_new_object(); + if (!is_synchronized()) { - if (!uj) + if (uj) + vty_json(vty, json); + else vty_out(vty, "No Connection to RPKI cache server.\n"); return CMD_WARNING; } @@ -1392,7 +1405,9 @@ DEFPY (show_rpki_prefix, memcpy(addr_str, prefix_str, addr_len); if (lrtr_ip_str_to_addr(addr_str, &addr) != 0) { - if (!json) + if (json) + vty_json(vty, json); + else vty_out(vty, "Invalid IP prefix\n"); return CMD_WARNING; } @@ -1404,13 +1419,13 @@ DEFPY (show_rpki_prefix, if (pfx_table_validate_r(rtr_config->pfx_table, &matches, &match_count, asn, &addr, prefix->prefixlen, &result) != PFX_SUCCESS) { - if (!json) + if (json) + vty_json(vty, json); + else vty_out(vty, "Prefix lookup failed\n"); return CMD_WARNING; } - if (uj) - json = json_object_new_object(); if (!json) { vty_out(vty, "%-40s %s %s\n", "Prefix", "Prefix Length",