mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-16 10:38:05 +00:00
pimd: Implement show & clear ip pim statistics command
This would show only bsm related statistics for now. We shall add more statistics to this later. Sw3# show ip pim statistics BSM Statistics : ---------------- Number of Received BSMs : 1584 Number of Forwared BSMs : 793 Number of Dropped BSMs : 1320 Interface : ens192 ------------------- Number of BSMs dropped due to config miss : 0 Number of unicast BSMs dropped : 0 Number of BSMs dropped due to invalid scope zone : 0 Interface : ens224 ------------------- Number of BSMs dropped due to config miss : 0 Number of unicast BSMs dropped : 0 Number of BSMs dropped due to invalid scope zone : 0 Interface : ens256 ------------------- Number of BSMs dropped due to config miss : 0 Number of unicast BSMs dropped : 0 Number of BSMs dropped due to invalid scope zone : 0 Signed-off-by: Saravanan K <saravanank@vmware.com>
This commit is contained in:
parent
321295c1d7
commit
415f63501b
147
pimd/pim_cmd.c
147
pimd/pim_cmd.c
@ -3173,6 +3173,105 @@ static void pim_show_group_rp_mappings_info(struct pim_instance *pim,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* pim statistics - just adding only bsm related now.
|
||||||
|
* We can continue to add all pim related stats here.
|
||||||
|
*/
|
||||||
|
static void pim_show_statistics(struct pim_instance *pim, struct vty *vty,
|
||||||
|
const char *ifname, bool uj)
|
||||||
|
{
|
||||||
|
json_object *json = NULL;
|
||||||
|
struct interface *ifp;
|
||||||
|
|
||||||
|
if (uj) {
|
||||||
|
json = json_object_new_object();
|
||||||
|
json_object_int_add(json, "Number of Received BSMs",
|
||||||
|
pim->bsm_rcvd);
|
||||||
|
json_object_int_add(json, "Number of Forwared BSMs",
|
||||||
|
pim->bsm_sent);
|
||||||
|
json_object_int_add(json, "Number of Dropped BSMs",
|
||||||
|
pim->bsm_dropped);
|
||||||
|
} else {
|
||||||
|
vty_out(vty, "BSM Statistics :\n");
|
||||||
|
vty_out(vty, "----------------\n");
|
||||||
|
vty_out(vty, "Number of Received BSMs : %ld\n", pim->bsm_rcvd);
|
||||||
|
vty_out(vty, "Number of Forwared BSMs : %ld\n", pim->bsm_sent);
|
||||||
|
vty_out(vty, "Number of Dropped BSMs : %ld\n",
|
||||||
|
pim->bsm_dropped);
|
||||||
|
}
|
||||||
|
|
||||||
|
vty_out(vty, "\n");
|
||||||
|
|
||||||
|
/* scan interfaces */
|
||||||
|
FOR_ALL_INTERFACES (pim->vrf, ifp) {
|
||||||
|
struct pim_interface *pim_ifp = ifp->info;
|
||||||
|
|
||||||
|
if (ifname && strcmp(ifname, ifp->name))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!pim_ifp)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!uj) {
|
||||||
|
vty_out(vty, "Interface : %s\n", ifp->name);
|
||||||
|
vty_out(vty, "-------------------\n");
|
||||||
|
vty_out(vty,
|
||||||
|
"Number of BSMs dropped due to config miss : %u\n",
|
||||||
|
pim_ifp->pim_ifstat_bsm_cfg_miss);
|
||||||
|
vty_out(vty, "Number of unicast BSMs dropped : %u\n",
|
||||||
|
pim_ifp->pim_ifstat_ucast_bsm_cfg_miss);
|
||||||
|
vty_out(vty,
|
||||||
|
"Number of BSMs dropped due to invalid scope zone : %u\n",
|
||||||
|
pim_ifp->pim_ifstat_bsm_invalid_sz);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
json_object *json_row = NULL;
|
||||||
|
|
||||||
|
json_row = json_object_new_object();
|
||||||
|
|
||||||
|
json_object_string_add(json_row, "If Name", ifp->name);
|
||||||
|
json_object_int_add(
|
||||||
|
json_row,
|
||||||
|
"Number of BSMs dropped due to config miss",
|
||||||
|
pim_ifp->pim_ifstat_bsm_cfg_miss);
|
||||||
|
json_object_int_add(
|
||||||
|
json_row, "Number of unicast BSMs dropped",
|
||||||
|
pim_ifp->pim_ifstat_ucast_bsm_cfg_miss);
|
||||||
|
json_object_int_add(json_row,
|
||||||
|
"Number of BSMs dropped due to invalid scope zone",
|
||||||
|
pim_ifp->pim_ifstat_bsm_invalid_sz);
|
||||||
|
json_object_object_add(json, ifp->name, json_row);
|
||||||
|
}
|
||||||
|
vty_out(vty, "\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (uj) {
|
||||||
|
vty_out(vty, "%s\n", json_object_to_json_string_ext(
|
||||||
|
json, JSON_C_TO_STRING_PRETTY));
|
||||||
|
json_object_free(json);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void clear_pim_statistics(struct pim_instance *pim)
|
||||||
|
{
|
||||||
|
struct interface *ifp;
|
||||||
|
|
||||||
|
pim->bsm_rcvd = 0;
|
||||||
|
pim->bsm_sent = 0;
|
||||||
|
pim->bsm_dropped = 0;
|
||||||
|
|
||||||
|
/* scan interfaces */
|
||||||
|
FOR_ALL_INTERFACES (pim->vrf, ifp) {
|
||||||
|
struct pim_interface *pim_ifp = ifp->info;
|
||||||
|
|
||||||
|
if (!pim_ifp)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
pim_ifp->pim_ifstat_bsm_cfg_miss = 0;
|
||||||
|
pim_ifp->pim_ifstat_ucast_bsm_cfg_miss = 0;
|
||||||
|
pim_ifp->pim_ifstat_bsm_invalid_sz = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void igmp_show_groups(struct pim_instance *pim, struct vty *vty, bool uj)
|
static void igmp_show_groups(struct pim_instance *pim, struct vty *vty, bool uj)
|
||||||
{
|
{
|
||||||
struct interface *ifp;
|
struct interface *ifp;
|
||||||
@ -3643,6 +3742,25 @@ DEFUN (clear_ip_igmp_interfaces,
|
|||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEFUN (clear_ip_pim_statistics,
|
||||||
|
clear_ip_pim_statistics_cmd,
|
||||||
|
"clear ip pim statistics [vrf NAME]",
|
||||||
|
CLEAR_STR
|
||||||
|
IP_STR
|
||||||
|
CLEAR_IP_PIM_STR
|
||||||
|
VRF_CMD_HELP_STR
|
||||||
|
"Reset PIM statistics\n")
|
||||||
|
{
|
||||||
|
int idx = 2;
|
||||||
|
struct vrf *vrf = pim_cmd_lookup_vrf(vty, argv, argc, &idx);
|
||||||
|
|
||||||
|
if (!vrf)
|
||||||
|
return CMD_WARNING;
|
||||||
|
|
||||||
|
clear_pim_statistics(vrf->info);
|
||||||
|
return CMD_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
static void mroute_add_all(struct pim_instance *pim)
|
static void mroute_add_all(struct pim_instance *pim)
|
||||||
{
|
{
|
||||||
struct listnode *node;
|
struct listnode *node;
|
||||||
@ -4863,6 +4981,33 @@ DEFUN (show_ip_pim_bsrp,
|
|||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEFUN (show_ip_pim_statistics,
|
||||||
|
show_ip_pim_statistics_cmd,
|
||||||
|
"show ip pim [vrf NAME] statistics [interface WORD] [json]",
|
||||||
|
SHOW_STR
|
||||||
|
IP_STR
|
||||||
|
PIM_STR
|
||||||
|
VRF_CMD_HELP_STR
|
||||||
|
"PIM statistics\n"
|
||||||
|
"interface\n"
|
||||||
|
"PIM interface\n"
|
||||||
|
JSON_STR)
|
||||||
|
{
|
||||||
|
int idx = 2;
|
||||||
|
struct vrf *vrf = pim_cmd_lookup_vrf(vty, argv, argc, &idx);
|
||||||
|
bool uj = use_json(argc, argv);
|
||||||
|
|
||||||
|
if (!vrf)
|
||||||
|
return CMD_WARNING;
|
||||||
|
|
||||||
|
if (argv_find(argv, argc, "WORD", &idx))
|
||||||
|
pim_show_statistics(vrf->info, vty, argv[idx]->arg, uj);
|
||||||
|
else
|
||||||
|
pim_show_statistics(vrf->info, vty, NULL, uj);
|
||||||
|
|
||||||
|
return CMD_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
static void show_multicast_interfaces(struct pim_instance *pim, struct vty *vty)
|
static void show_multicast_interfaces(struct pim_instance *pim, struct vty *vty)
|
||||||
{
|
{
|
||||||
struct interface *ifp;
|
struct interface *ifp;
|
||||||
@ -9908,6 +10053,7 @@ void pim_cmd_init(void)
|
|||||||
install_element(VIEW_NODE, &show_ip_pim_nexthop_lookup_cmd);
|
install_element(VIEW_NODE, &show_ip_pim_nexthop_lookup_cmd);
|
||||||
install_element(VIEW_NODE, &show_ip_pim_bsrp_cmd);
|
install_element(VIEW_NODE, &show_ip_pim_bsrp_cmd);
|
||||||
install_element(VIEW_NODE, &show_ip_pim_bsm_db_cmd);
|
install_element(VIEW_NODE, &show_ip_pim_bsm_db_cmd);
|
||||||
|
install_element(VIEW_NODE, &show_ip_pim_statistics_cmd);
|
||||||
|
|
||||||
install_element(ENABLE_NODE, &clear_ip_interfaces_cmd);
|
install_element(ENABLE_NODE, &clear_ip_interfaces_cmd);
|
||||||
install_element(ENABLE_NODE, &clear_ip_igmp_interfaces_cmd);
|
install_element(ENABLE_NODE, &clear_ip_igmp_interfaces_cmd);
|
||||||
@ -9915,6 +10061,7 @@ void pim_cmd_init(void)
|
|||||||
install_element(ENABLE_NODE, &clear_ip_pim_interfaces_cmd);
|
install_element(ENABLE_NODE, &clear_ip_pim_interfaces_cmd);
|
||||||
install_element(ENABLE_NODE, &clear_ip_pim_interface_traffic_cmd);
|
install_element(ENABLE_NODE, &clear_ip_pim_interface_traffic_cmd);
|
||||||
install_element(ENABLE_NODE, &clear_ip_pim_oil_cmd);
|
install_element(ENABLE_NODE, &clear_ip_pim_oil_cmd);
|
||||||
|
install_element(ENABLE_NODE, &clear_ip_pim_statistics_cmd);
|
||||||
|
|
||||||
install_element(ENABLE_NODE, &debug_igmp_cmd);
|
install_element(ENABLE_NODE, &debug_igmp_cmd);
|
||||||
install_element(ENABLE_NODE, &no_debug_igmp_cmd);
|
install_element(ENABLE_NODE, &no_debug_igmp_cmd);
|
||||||
|
Loading…
Reference in New Issue
Block a user