diff options
| -rw-r--r-- | bgpd/bgp_route.c | 11 | ||||
| -rw-r--r-- | lib/vty.c | 15 | ||||
| -rw-r--r-- | lib/vty.h | 4 |
3 files changed, 28 insertions, 2 deletions
diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c index 29e2768d17..82d623a21c 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -11416,7 +11416,16 @@ static int bgp_show_table(struct vty *vty, struct bgp *bgp, safi_t safi, else vty_out(vty, ",\"%pFX\": ", dest_p); } - vty_json(vty, json_paths); + /* + * We are using no_pretty here because under + * extremely high settings( say lots and lots of + * routes with lots and lots of ways to reach + * that route via different paths ) this can + * save several minutes of output when FRR + * is run on older cpu's or more underperforming + * routers out there + */ + vty_json_no_pretty(vty, json_paths); json_paths = NULL; first = 0; } else @@ -281,7 +281,8 @@ done: return len; } -int vty_json(struct vty *vty, struct json_object *json) +static int vty_json_helper(struct vty *vty, struct json_object *json, + uint32_t options) { const char *text; @@ -296,6 +297,18 @@ int vty_json(struct vty *vty, struct json_object *json) return CMD_SUCCESS; } +int vty_json(struct vty *vty, struct json_object *json) +{ + return vty_json_helper(vty, json, + JSON_C_TO_STRING_PRETTY | + JSON_C_TO_STRING_NOSLASHESCAPE); +} + +int vty_json_no_pretty(struct vty *vty, struct json_object *json) +{ + return vty_json_helper(vty, json, JSON_C_TO_STRING_NOSLASHESCAPE); +} + /* Output current time to the vty. */ void vty_time_print(struct vty *vty, int cr) { @@ -348,8 +348,12 @@ extern void vty_endframe(struct vty *, const char *); extern bool vty_set_include(struct vty *vty, const char *regexp); /* returns CMD_SUCCESS so you can do a one-line "return vty_json(...)" * NULL check and json_object_free() is included. + * + * _no_pretty means do not add a bunch of newlines and dump the output + * as densely as possible. */ extern int vty_json(struct vty *vty, struct json_object *json); +extern int vty_json_no_pretty(struct vty *vty, struct json_object *json); /* post fd to be passed to the vtysh client * fd is owned by the VTY code after this and will be closed when done |
