summaryrefslogtreecommitdiffstats
path: root/bgpd
diff options
context:
space:
mode:
authorLouis Scalbert <louis.scalbert@6wind.com>2023-12-15 17:26:41 +0100
committerLouis Scalbert <louis.scalbert@6wind.com>2024-01-11 14:13:46 +0100
commit4011682a1aaf3086b76afb9054844fef6ed5a51d (patch)
treea54564e767fbccefbe1e3db01ac63159347a9a1c /bgpd
parentMerge pull request #15098 from donaldsharp/lib_zebra_h_cleanup_2 (diff)
downloadfrr-4011682a1aaf3086b76afb9054844fef6ed5a51d.tar.xz
frr-4011682a1aaf3086b76afb9054844fef6ed5a51d.zip
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 "<stdin>", line 1, in <module> > 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 <louis.scalbert@6wind.com>
Diffstat (limited to 'bgpd')
-rw-r--r--bgpd/bgp_rpki.c45
1 files changed, 30 insertions, 15 deletions
diff --git a/bgpd/bgp_rpki.c b/bgpd/bgp_rpki.c
index f0b2ffdee..05d1b4fcc 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",