Skip to content

Commit

Permalink
lib,vtysh: fix show route map JSON output
Browse files Browse the repository at this point in the history
Move the command from 'lib' to 'vtysh' so we can properly format the
JSON output in a correct manner.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
  • Loading branch information
rzalamena committed Nov 21, 2023
1 parent 43290b5 commit 21646c7
Show file tree
Hide file tree
Showing 2 changed files with 115 additions and 14 deletions.
25 changes: 11 additions & 14 deletions lib/routemap.c
Original file line number Diff line number Diff line change
Expand Up @@ -1070,20 +1070,17 @@ static int vty_show_route_map(struct vty *vty, const char *name, bool use_json)
{
struct route_map *map;
json_object *json = NULL;
json_object *json_proto = NULL;

if (use_json) {
if (use_json)
json = json_object_new_object();
json_proto = json_object_new_object();
json_object_object_add(json, frr_protonameinst, json_proto);
} else
else
vty_out(vty, "%s:\n", frr_protonameinst);

if (name) {
map = route_map_lookup_by_name(name);

if (map) {
vty_show_route_map_entry(vty, map, json_proto);
vty_show_route_map_entry(vty, map, json);
} else if (!use_json) {
vty_out(vty, "%s: 'route-map %s' not found\n",
frr_protonameinst, name);
Expand All @@ -1099,7 +1096,7 @@ static int vty_show_route_map(struct vty *vty, const char *name, bool use_json)
list_sort(maplist, sort_route_map);

for (ALL_LIST_ELEMENTS_RO(maplist, ln, map))
vty_show_route_map_entry(vty, map, json_proto);
vty_show_route_map_entry(vty, map, json);

list_delete(&maplist);
}
Expand Down Expand Up @@ -3145,13 +3142,13 @@ DEFPY (rmap_clear_counters,

}

DEFUN (rmap_show_name,
rmap_show_name_cmd,
"show route-map [WORD] [json]",
SHOW_STR
"route-map information\n"
"route-map name\n"
JSON_STR)
DEFUN_NOSH (rmap_show_name,
rmap_show_name_cmd,
"show route-map [WORD] [json]",
SHOW_STR
"route-map information\n"
"route-map name\n"
JSON_STR)
{
bool uj = use_json(argc, argv);
int idx = 0;
Expand Down
104 changes: 104 additions & 0 deletions vtysh/vtysh.c
Original file line number Diff line number Diff line change
Expand Up @@ -3391,6 +3391,107 @@ DEFUN (vtysh_show_running_config,
return vtysh_write_terminal(self, vty, argc, argv);
}

static void show_route_map_send(const char *route_map, const char *daemon,
bool json)
{
unsigned int i;
bool first = true;
char command_line[128];

snprintf(command_line, sizeof(command_line), "show route-map ");
if (route_map)
strlcat(command_line, route_map, sizeof(command_line));
if (json)
strlcat(command_line, " json", sizeof(command_line));

if (json && daemon == NULL)
vty_out(vty, "{");

for (i = 0; i < array_size(vtysh_client); i++) {
const struct vtysh_client *client = &vtysh_client[i];
bool is_connected = true;

if (!CHECK_FLAG(client->flag, VTYSH_RMAP))
continue;
if (daemon && !strmatch(client->name, daemon))
continue;

for (; client; client = client->next)
if (client->fd < 0)
is_connected = false;

if (!is_connected)
continue;

if (json && !first)
vty_out(vty, ",");
else
first = false;

if (json && daemon == NULL)
vty_out(vty, "\"%s\":", vtysh_client[i].name);

vtysh_client_execute_name(vtysh_client[i].name, command_line);
}

if (json && daemon == NULL)
vty_out(vty, "}\n");
}

DEFUN (show_route_maps,
show_route_maps_cmd,
"show route-map ["DAEMONS_LIST"] [json]",
SHOW_STR
"route-map information\n"
DAEMONS_STR
JSON_STR)
{
char *daemon = NULL;
bool json_format = false;

if (argc == 4) {
json_format = true;
daemon = argv[2]->text;
} else if (argc == 3) {
if (!strcmp(argv[2]->text, "json"))
json_format = true;
else
daemon = argv[2]->text;
}

show_route_map_send(NULL, daemon, json_format);

return CMD_SUCCESS;
}

DEFUN (show_route_map,
show_route_map_cmd,
"show route-map WORD ["DAEMONS_LIST"] [json]",
SHOW_STR
"route-map information\n"
"route-map name\n"
DAEMONS_STR
JSON_STR)
{
char *route_map = argv[2]->arg;
char *daemon = NULL;
bool json_format = false;

if (argc == 5) {
json_format = true;
daemon = argv[3]->text;
} else if (argc == 4) {
if (!strcmp(argv[3]->text, "json"))
json_format = true;
else
daemon = argv[3]->text;
}

show_route_map_send(route_map, daemon, json_format);

return CMD_SUCCESS;
}

DEFUN (vtysh_integrated_config,
vtysh_integrated_config_cmd,
"service integrated-vtysh-config",
Expand Down Expand Up @@ -5042,6 +5143,9 @@ void vtysh_init_vty(void)
install_element(ENABLE_NODE, &vtysh_copy_running_config_cmd);
install_element(ENABLE_NODE, &vtysh_copy_to_running_cmd);

install_element(ENABLE_NODE, &show_route_map_cmd);
install_element(ENABLE_NODE, &show_route_maps_cmd);

/* "write terminal" command. */
install_element(ENABLE_NODE, &vtysh_write_terminal_cmd);

Expand Down

0 comments on commit 21646c7

Please sign in to comment.