summaryrefslogtreecommitdiff
path: root/pimd/pim_cmd.c
diff options
context:
space:
mode:
authorDonatas Abraitis <donatas@opensourcerouting.org>2022-03-14 23:06:16 +0200
committerDonatas Abraitis <donatas@opensourcerouting.org>2022-03-15 17:08:35 +0200
commit42982834d4959772d6026ebc488263aa1885c0b2 (patch)
treea85ac72779eff96c89f9b101fa42896e2c07288f /pimd/pim_cmd.c
parenta19134542429c7e8b76af8fa805504dd88639a78 (diff)
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 <donatas@opensourcerouting.org>
Diffstat (limited to 'pimd/pim_cmd.c')
-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);