summaryrefslogtreecommitdiff
path: root/pimd/pim_cmd.c
diff options
context:
space:
mode:
Diffstat (limited to 'pimd/pim_cmd.c')
-rw-r--r--pimd/pim_cmd.c33
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;