summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pimd/pim_cmd.c26
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);