]> git.puffer.fish Git - mirror/frr.git/commitdiff
lib,zebra: fix json output when vrf1 when not active 2742/head
authorNathan Van Gheem <vangheem@gmail.com>
Fri, 27 Jul 2018 14:09:38 +0000 (10:09 -0400)
committerNathan Van Gheem <vangheem@gmail.com>
Fri, 27 Jul 2018 14:17:03 +0000 (10:17 -0400)
When I did a show ip route with `json` on a vrf when it didn't exist,
frr would output invalid json.

Signed-off-by: Nathan Van Gheem <nathan@cumulusnetworks.com>
lib/if.c
lib/vrf.h
zebra/interface.c
zebra/router-id.c
zebra/zebra_vty.c

index 2320093a15c6e6428d461c6ee8f4d9d3d831c725..e31ccd8563f2744a30ee695e012e33113286fc35 100644 (file)
--- a/lib/if.c
+++ b/lib/if.c
@@ -652,7 +652,7 @@ DEFUN (interface,
        /*Pending: need proper vrf name based lookup/(possible creation of VRF)
         Imagine forward reference of a vrf by name in this interface config */
        if (vrfname)
-               VRF_GET_ID(vrf_id, vrfname);
+               VRF_GET_ID(vrf_id, vrfname, false);
 
 #ifdef SUNOS_5
        ifp = if_sunwzebra_get(ifname, vrf_id);
@@ -686,7 +686,7 @@ DEFUN_NOSH (no_interface,
        vrf_id_t vrf_id = VRF_DEFAULT;
 
        if (argc > 3)
-               VRF_GET_ID(vrf_id, vrfname);
+               VRF_GET_ID(vrf_id, vrfname, false);
 
        ifp = if_lookup_by_name(ifname, vrf_id);
 
index 8aa0fc2215b2d938e9a860db3e612d42413e1b85..88536eada89e25ea38602e55932803ceadb8cf38 100644 (file)
--- a/lib/vrf.h
+++ b/lib/vrf.h
@@ -111,15 +111,24 @@ extern struct vrf *vrf_get(vrf_id_t, const char *);
 extern const char *vrf_id_to_name(vrf_id_t vrf_id);
 extern vrf_id_t vrf_name_to_id(const char *);
 
-#define VRF_GET_ID(V, NAME)                                                    \
+#define VRF_GET_ID(V, NAME, USE_JSON)                                          \
        do {                                                                   \
                struct vrf *vrf;                                               \
                if (!(vrf = vrf_lookup_by_name(NAME))) {                       \
+                       if (USE_JSON) {                                        \
+                               vty_out(vty, "{}\n");                          \
+                       } else {                                               \
+                               vty_out(vty, "%% VRF %s not found\n", NAME);   \
+                       }                                                      \
                        vty_out(vty, "%% VRF %s not found\n", NAME);           \
                        return CMD_WARNING;                                    \
                }                                                              \
                if (vrf->vrf_id == VRF_UNKNOWN) {                              \
-                       vty_out(vty, "%% VRF %s not active\n", NAME);          \
+                       if (USE_JSON) {                                        \
+                               vty_out(vty, "{}\n");                          \
+                       } else {                                               \
+                               vty_out(vty, "%% VRF %s not active\n", NAME);  \
+                       }                                                      \
                        return CMD_WARNING;                                    \
                }                                                              \
                (V) = vrf->vrf_id;                                             \
index 6125ff9a16b37b769c6a7a3ba44127c530c65ff8..1067f9bdc1938ace635b6dd17849a7581dd47624 100644 (file)
@@ -1417,7 +1417,7 @@ DEFUN (show_interface,
        interface_update_stats();
 
        if (argc > 2)
-               VRF_GET_ID(vrf_id, argv[3]->arg);
+               VRF_GET_ID(vrf_id, argv[3]->arg, false);
 
        /* All interface print. */
        vrf = vrf_lookup_by_id(vrf_id);
@@ -1466,7 +1466,7 @@ DEFUN (show_interface_name_vrf,
 
        interface_update_stats();
 
-       VRF_GET_ID(vrf_id, argv[idx_name]->arg);
+       VRF_GET_ID(vrf_id, argv[idx_name]->arg, false);
 
        /* Specified interface print. */
        ifp = if_lookup_by_name(argv[idx_ifname]->arg, vrf_id);
@@ -1560,7 +1560,7 @@ DEFUN (show_interface_desc,
        vrf_id_t vrf_id = VRF_DEFAULT;
 
        if (argc > 3)
-               VRF_GET_ID(vrf_id, argv[4]->arg);
+               VRF_GET_ID(vrf_id, argv[4]->arg, false);
 
        if_show_description(vty, vrf_id);
 
index 252b558a8b5a087d6b33568699958c59a03bd833..3b96b3371dde4464d985ef404918c9443c593835 100644 (file)
@@ -226,7 +226,7 @@ DEFUN (router_id,
        rid.family = AF_INET;
 
        if (argc > 2)
-               VRF_GET_ID(vrf_id, argv[idx_name]->arg);
+               VRF_GET_ID(vrf_id, argv[idx_name]->arg, false);
 
        router_id_set(&rid, vrf_id);
 
@@ -251,7 +251,7 @@ DEFUN (no_router_id,
        rid.family = AF_INET;
 
        if (argc > 3)
-               VRF_GET_ID(vrf_id, argv[idx_name]->arg);
+               VRF_GET_ID(vrf_id, argv[idx_name]->arg, false);
 
        router_id_set(&rid, vrf_id);
 
index bed3b7f77cd3d69821d002bc99069759a5602c87..a2daf59396d2db0c4aeb3076c64806a433de7945 100644 (file)
@@ -1808,7 +1808,7 @@ DEFPY (show_route_table_vrf,
        vrf_id_t vrf_id = VRF_DEFAULT;
 
        if (vrf_name)
-               VRF_GET_ID(vrf_id, vrf_name);
+               VRF_GET_ID(vrf_id, vrf_name, !!json);
        zvrf = zebra_vrf_lookup_by_id(vrf_id);
 
        t = zebra_ns_find_table(zvrf->zns, table, afi);
@@ -1831,7 +1831,7 @@ DEFUN (show_ip_nht,
        vrf_id_t vrf_id = VRF_DEFAULT;
 
        if (argc == 5)
-               VRF_GET_ID(vrf_id, argv[idx_vrf]->arg);
+               VRF_GET_ID(vrf_id, argv[idx_vrf]->arg, false);
 
        zebra_print_rnh_table(vrf_id, AF_INET, vty, RNH_NEXTHOP_TYPE);
        return CMD_SUCCESS;
@@ -1871,7 +1871,7 @@ DEFUN (show_ipv6_nht,
        vrf_id_t vrf_id = VRF_DEFAULT;
 
        if (argc == 5)
-               VRF_GET_ID(vrf_id, argv[idx_vrf]->arg);
+               VRF_GET_ID(vrf_id, argv[idx_vrf]->arg, false);
 
        zebra_print_rnh_table(vrf_id, AF_INET6, vty, RNH_NEXTHOP_TYPE);
        return CMD_SUCCESS;
@@ -2037,7 +2037,7 @@ DEFPY (show_route,
                vrf_id_t vrf_id = VRF_DEFAULT;
 
                if (vrf_name)
-                       VRF_GET_ID(vrf_id, vrf_name);
+                       VRF_GET_ID(vrf_id, vrf_name, !!json);
                vrf = vrf_lookup_by_id(vrf_id);
                do_show_ip_route(vty, vrf->name, afi, SAFI_UNICAST, !!fib,
                                 !!json, tag, prefix_str ? prefix : NULL,
@@ -2111,7 +2111,7 @@ DEFPY (show_route_detail,
                vrf_id_t vrf_id = VRF_DEFAULT;
 
                if (vrf_name)
-                       VRF_GET_ID(vrf_id, vrf_name);
+                       VRF_GET_ID(vrf_id, vrf_name, false);
 
                table = zebra_vrf_table(afi, SAFI_UNICAST, vrf_id);
                if (!table)
@@ -2178,7 +2178,7 @@ DEFPY (show_route_summary,
                vrf_id_t vrf_id = VRF_DEFAULT;
 
                if (vrf_name)
-                       VRF_GET_ID(vrf_id, vrf_name);
+                       VRF_GET_ID(vrf_id, vrf_name, false);
 
                table = zebra_vrf_table(afi, SAFI_UNICAST, vrf_id);
                if (!table)
@@ -2793,7 +2793,7 @@ DEFUN (show_ipv6_mroute,
        vrf_id_t vrf_id = VRF_DEFAULT;
 
        if (argc == 5)
-               VRF_GET_ID(vrf_id, argv[4]->arg);
+               VRF_GET_ID(vrf_id, argv[4]->arg, false);
 
        table = zebra_vrf_table(AFI_IP6, SAFI_MULTICAST, vrf_id);
        if (!table)