diff options
Diffstat (limited to 'pimd/pim_cmd.c')
| -rw-r--r-- | pimd/pim_cmd.c | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index 78dbbf9326..2a6d03fb91 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,12 +1308,16 @@ 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 += pim_ifp->gm_group_list ? listcount(pim_ifp->gm_group_list) : 0; + igmp_stats.peak_groups += pim_ifp->igmp_peak_group_count; + for (ALL_LIST_ELEMENTS_RO(pim_ifp->gm_group_list, group_node, group)) { @@ -1326,15 +1335,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); @@ -1350,6 +1364,8 @@ static void igmp_show_statistics(struct pim_instance *pim, struct vty *vty, igmp_stats.unsupported); json_object_int_add(json_row, "totalReceivedMessages", igmp_stats.total_recv_messages); + json_object_int_add(json_row, "peakGroups", + igmp_stats.peak_groups); json_object_int_add(json_row, "totalGroups", igmp_stats.total_groups); json_object_int_add(json_row, "totalSourceGroups", @@ -1399,6 +1415,8 @@ static void igmp_show_statistics(struct pim_instance *pim, struct vty *vty, igmp_stats.general_queries_sent); vty_out(vty, "group queries sent : %u\n", igmp_stats.group_queries_sent); + vty_out(vty, "peak groups : %u\n", + igmp_stats.peak_groups); vty_out(vty, "total groups : %u\n", igmp_stats.total_groups); vty_out(vty, "total source groups : %u\n", @@ -4051,6 +4069,7 @@ DEFUN (clear_ip_pim_interface_traffic, pim_ifp->pim_ifstat_bsm_tx = 0; pim_ifp->igmp_ifstat_joins_sent = 0; pim_ifp->igmp_ifstat_joins_failed = 0; + pim_ifp->igmp_peak_group_count = 0; } return CMD_SUCCESS; |
