From 42982834d4959772d6026ebc488263aa1885c0b2 Mon Sep 17 00:00:00 2001 From: Donatas Abraitis Date: Mon, 14 Mar 2022 23:06:16 +0200 Subject: [PATCH] pimd: Return empty JSON if we query non existing interface for IGMP stats Now we return all zeroed stats, which seems wrong. Handle the same way, as with PIM interfaces. Return empty JSON and a warning for VTYSH. ``` exit1-debian-11# sh ip igmp statistics interface belekas % No such interface exit1-debian-11# sh ip igmp statistics interface belekas json { } ``` Signed-off-by: Donatas Abraitis --- pimd/pim_cmd.c | 26 +++++++++++++++++++------- 1 file 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); -- 2.39.5