]> git.proxmox.com Git - mirror_frr.git/commitdiff
pimd: Return empty JSON if we query non existing interface for IGMP stats
authorDonatas Abraitis <donatas@opensourcerouting.org>
Mon, 14 Mar 2022 21:06:16 +0000 (23:06 +0200)
committerDonatas Abraitis <donatas@opensourcerouting.org>
Tue, 15 Mar 2022 15:08:35 +0000 (17:08 +0200)
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>
pimd/pim_cmd.c

index 78dbbf9326e92300278938760219ce67c4094c87..49e18ddb72fcd45f6bb8de532964c8f5a76b0904 100644 (file)
@@ -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);