Skip to content

Commit

Permalink
lib,zebra: fix json output when vrf1 when not active
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
vangheem committed Jul 27, 2018
1 parent 298de6e commit ec1db58
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 16 deletions.
4 changes: 2 additions & 2 deletions lib/if.c
Expand Up @@ -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);
Expand Down Expand Up @@ -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);

Expand Down
13 changes: 11 additions & 2 deletions lib/vrf.h
Expand Up @@ -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; \
Expand Down
6 changes: 3 additions & 3 deletions zebra/interface.c
Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);

Expand Down
4 changes: 2 additions & 2 deletions zebra/router-id.c
Expand Up @@ -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);

Expand All @@ -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);

Expand Down
14 changes: 7 additions & 7 deletions zebra/zebra_vty.c
Expand Up @@ -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);
Expand All @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit ec1db58

Please sign in to comment.