]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: fix show rpki json void output
authorLouis Scalbert <louis.scalbert@6wind.com>
Fri, 15 Dec 2023 16:26:41 +0000 (17:26 +0100)
committerLouis Scalbert <louis.scalbert@6wind.com>
Thu, 11 Jan 2024 13:13:46 +0000 (14:13 +0100)
"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>
bgpd/bgp_rpki.c

index f0b2ffdee52275279819ad14dab03cd4144a3090..05d1b4fcc7db16cc87714065ffb6118ede2bd43c 100644 (file)
@@ -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",