diff options
author | Sai Gomathi N <nsaigomathi@vmware.com> | 2022-06-13 10:49:03 +0200 |
---|---|---|
committer | Sai Gomathi N <nsaigomathi@vmware.com> | 2022-06-30 13:09:14 +0200 |
commit | fc19632faa63c8a93f99dd12dbde8f51823aca98 (patch) | |
tree | 9d5be8523ed3bf0c7363d09c4117ac501e31358e /pimd/pim_cmd.c | |
parent | pimd: json support for nexthop (diff) | |
download | frr-fc19632faa63c8a93f99dd12dbde8f51823aca98.tar.xz frr-fc19632faa63c8a93f99dd12dbde8f51823aca98.zip |
pimd, pim6d: Adding json support for show ipv6 nexthop
Moving the reusable code of pim_show_nexthop apis to common file
pim_cmd_common.c file and adding the json support for show ipv6 pim nexthop
Signed-off-by: Sai Gomathi N <nsaigomathi@vmware.com>
Diffstat (limited to 'pimd/pim_cmd.c')
-rw-r--r-- | pimd/pim_cmd.c | 123 |
1 files changed, 1 insertions, 122 deletions
diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index 119909b4c..8f3777e03 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -1443,118 +1443,6 @@ static void igmp_show_source_retransmission(struct pim_instance *pim, } /* scan interfaces */ } -struct vty_pnc_cache_walk_data { - struct vty *vty; - struct pim_instance *pim; -}; - -struct json_pnc_cache_walk_data { - json_object *json_obj; - struct pim_instance *pim; -}; - -static int pim_print_vty_pnc_cache_walkcb(struct hash_bucket *bucket, void *arg) -{ - struct pim_nexthop_cache *pnc = bucket->data; - struct vty_pnc_cache_walk_data *cwd = arg; - struct vty *vty = cwd->vty; - struct pim_instance *pim = cwd->pim; - struct nexthop *nh_node = NULL; - ifindex_t first_ifindex; - struct interface *ifp = NULL; - char buf[PREFIX_STRLEN]; - - for (nh_node = pnc->nexthop; nh_node; nh_node = nh_node->next) { - first_ifindex = nh_node->ifindex; - ifp = if_lookup_by_index(first_ifindex, pim->vrf->vrf_id); - - vty_out(vty, "%-15s ", inet_ntop(AF_INET, - &pnc->rpf.rpf_addr.u.prefix4, - buf, sizeof(buf))); - vty_out(vty, "%-16s ", ifp ? ifp->name : "NULL"); - vty_out(vty, "%pI4 ", &nh_node->gate.ipv4); - vty_out(vty, "\n"); - } - return CMD_SUCCESS; -} - -static int pim_print_json_pnc_cache_walkcb(struct hash_bucket *backet, - void *arg) -{ - struct pim_nexthop_cache *pnc = backet->data; - struct json_pnc_cache_walk_data *cwd = arg; - struct pim_instance *pim = cwd->pim; - struct nexthop *nh_node = NULL; - ifindex_t first_ifindex; - struct interface *ifp = NULL; - char buf[PREFIX_STRLEN]; - json_object *json_row = NULL; - json_object *json_ifp = NULL; - json_object *json_arr = NULL; - - for (nh_node = pnc->nexthop; nh_node; nh_node = nh_node->next) { - first_ifindex = nh_node->ifindex; - ifp = if_lookup_by_index(first_ifindex, pim->vrf->vrf_id); - json_object_object_get_ex( - cwd->json_obj, - inet_ntop(AF_INET, &pnc->rpf.rpf_addr.u.prefix4, - buf, sizeof(buf)), - &json_row); - if (!json_row) { - json_row = json_object_new_object(); - json_object_string_add( - json_row, "address", - inet_ntop(AF_INET, &pnc->rpf.rpf_addr.u.prefix4, - buf, sizeof(buf))); - json_object_object_add( - cwd->json_obj, - inet_ntop(AF_INET, &pnc->rpf.rpf_addr.u.prefix4, - buf, sizeof(buf)), - json_row); - json_arr = json_object_new_array(); - json_object_object_add(json_row, "nextHops", json_arr); - } - json_ifp = json_object_new_object(); - json_object_string_add(json_ifp, "interface", - ifp ? ifp->name : "NULL"); - json_object_string_add(json_ifp, "nexthop", - inet_ntop(AF_INET, &nh_node->gate.ipv4, - buf, sizeof(buf))); - json_object_array_add(json_arr, json_ifp); - } - return CMD_SUCCESS; -} - -static void pim_show_nexthop_json(struct pim_instance *pim, struct vty *vty, bool uj) -{ - struct vty_pnc_cache_walk_data cwd; - struct json_pnc_cache_walk_data jcwd; - - cwd.vty = vty; - cwd.pim = pim; - jcwd.pim = pim; - - if (uj) { - jcwd.json_obj = json_object_new_object(); - } else { - vty_out(vty, "Number of registered addresses: %lu\n", - pim->rpf_hash->count); - vty_out(vty, "Address Interface Nexthop\n"); - vty_out(vty, "---------------------------------------------\n"); - } - - if (uj) { - hash_walk(pim->rpf_hash, pim_print_json_pnc_cache_walkcb, - &jcwd); - vty_out(vty, "%s\n", - json_object_to_json_string_ext( - jcwd.json_obj, JSON_C_TO_STRING_PRETTY)); - json_object_free(jcwd.json_obj); - } else { - hash_walk(pim->rpf_hash, pim_print_vty_pnc_cache_walkcb, &cwd); - } -} - static void pim_show_bsr(struct pim_instance *pim, struct vty *vty, bool uj) @@ -2902,16 +2790,7 @@ DEFPY (show_ip_pim_nexthop, "PIM cached nexthop rpf information\n" JSON_STR) { - struct vrf *v; - - v = vrf_lookup_by_name(vrf ? vrf : VRF_DEFAULT_NAME); - - if (!v) - return CMD_WARNING; - - pim_show_nexthop_json(v->info, vty, !!json); - - return CMD_SUCCESS; + return pim_show_nexthop_cmd_helper(vrf, vty, !!json); } DEFPY (show_ip_pim_nexthop_lookup, |