diff options
| -rw-r--r-- | pimd/pim_cmd.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index 78dbbf9326..49e18ddb72 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -1285,9 +1285,14 @@ static void igmp_show_statistics(struct pim_instance *pim, struct vty *vty, { struct interface *ifp; struct igmp_stats igmp_stats; + bool found_ifname = false; + json_object *json = NULL; igmp_stats_init(&igmp_stats); + if (uj) + json = json_object_new_object(); + FOR_ALL_INTERFACES (pim->vrf, ifp) { struct pim_interface *pim_ifp; struct listnode *sock_node, *source_node, *group_node; @@ -1303,6 +1308,8 @@ static void igmp_show_statistics(struct pim_instance *pim, struct vty *vty, if (ifname && strcmp(ifname, ifp->name)) continue; + found_ifname = true; + igmp_stats.joins_failed += pim_ifp->igmp_ifstat_joins_failed; igmp_stats.joins_sent += pim_ifp->igmp_ifstat_joins_sent; igmp_stats.total_groups += @@ -1326,15 +1333,20 @@ static void igmp_show_statistics(struct pim_instance *pim, struct vty *vty, igmp_stats_add(&igmp_stats, &igmp->igmp_stats); } } - if (uj) { - json_object *json = NULL; - json_object *json_row = NULL; - json = json_object_new_object(); - json_row = json_object_new_object(); + if (!found_ifname) { + if (uj) + vty_json(vty, json); + else + vty_out(vty, "%% No such interface\n"); + return; + } + + if (uj) { + json_object *json_row = json_object_new_object(); - json_object_string_add(json_row, "name", ifname ? ifname : - "global"); + json_object_string_add(json_row, "name", + ifname ? ifname : "global"); json_object_int_add(json_row, "queryV1", igmp_stats.query_v1); json_object_int_add(json_row, "queryV2", igmp_stats.query_v2); json_object_int_add(json_row, "queryV3", igmp_stats.query_v3); |
