mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-15 03:27:25 +00:00
vrrpd: add 'show vrrp summary' command
Shows a brief summary table of all VRRP routers Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
This commit is contained in:
parent
a881aecde7
commit
30a1595df8
@ -572,6 +572,23 @@ static void vrrp_show(struct vty *vty, struct vrrp_vrouter *vr)
|
|||||||
ttable_del(tt);
|
ttable_del(tt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sort comparator, used when sorting VRRP instances for display purposes.
|
||||||
|
*
|
||||||
|
* Sorts by interface name first, then by VRID ascending.
|
||||||
|
*/
|
||||||
|
static int vrrp_instance_display_sort_cmp(const void **d1, const void **d2)
|
||||||
|
{
|
||||||
|
const struct vrrp_vrouter *vr1 = *d1;
|
||||||
|
const struct vrrp_vrouter *vr2 = *d2;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
result = strcmp(vr1->ifp->name, vr2->ifp->name);
|
||||||
|
result += !result * (vr1->vrid - vr2->vrid);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/* clang-format off */
|
/* clang-format off */
|
||||||
|
|
||||||
DEFPY(vrrp_vrid_show,
|
DEFPY(vrrp_vrid_show,
|
||||||
@ -589,6 +606,8 @@ DEFPY(vrrp_vrid_show,
|
|||||||
struct list *ll = hash_to_list(vrrp_vrouters_hash);
|
struct list *ll = hash_to_list(vrrp_vrouters_hash);
|
||||||
struct json_object *j = json_object_new_array();
|
struct json_object *j = json_object_new_array();
|
||||||
|
|
||||||
|
list_sort(ll, vrrp_instance_display_sort_cmp);
|
||||||
|
|
||||||
for (ALL_LIST_ELEMENTS_RO(ll, ln, vr)) {
|
for (ALL_LIST_ELEMENTS_RO(ll, ln, vr)) {
|
||||||
if (ifn && !strmatch(ifn, vr->ifp->name))
|
if (ifn && !strmatch(ifn, vr->ifp->name))
|
||||||
continue;
|
continue;
|
||||||
@ -613,6 +632,55 @@ DEFPY(vrrp_vrid_show,
|
|||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEFPY(vrrp_vrid_show_summary,
|
||||||
|
vrrp_vrid_show_summary_cmd,
|
||||||
|
"show vrrp [interface INTERFACE$ifn] [(1-255)$vrid] summary",
|
||||||
|
SHOW_STR
|
||||||
|
VRRP_STR
|
||||||
|
INTERFACE_STR
|
||||||
|
"Only show VRRP instances on this interface\n"
|
||||||
|
VRRP_VRID_STR
|
||||||
|
"Summarize all VRRP instances\n")
|
||||||
|
{
|
||||||
|
struct vrrp_vrouter *vr;
|
||||||
|
struct listnode *ln;
|
||||||
|
struct list *ll = hash_to_list(vrrp_vrouters_hash);
|
||||||
|
|
||||||
|
list_sort(ll, vrrp_instance_display_sort_cmp);
|
||||||
|
|
||||||
|
struct ttable *tt = ttable_new(&ttable_styles[TTSTYLE_BLANK]);
|
||||||
|
|
||||||
|
ttable_add_row(
|
||||||
|
tt, "Interface|VRID|Priority|IPv4|IPv6|State (v4)|State (v6)");
|
||||||
|
ttable_rowseps(tt, 0, BOTTOM, true, '-');
|
||||||
|
|
||||||
|
for (ALL_LIST_ELEMENTS_RO(ll, ln, vr)) {
|
||||||
|
if (ifn && !strmatch(ifn, vr->ifp->name))
|
||||||
|
continue;
|
||||||
|
if (vrid && ((uint8_t)vrid) != vr->vrid)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
ttable_add_row(
|
||||||
|
tt, "%s|%" PRIu8 "|%" PRIu8 "|%d|%d|%s|%s",
|
||||||
|
vr->ifp->name, vr->vrid, vr->priority,
|
||||||
|
vr->v4->addrs->count, vr->v6->addrs->count,
|
||||||
|
vr->v4->fsm.state == VRRP_STATE_MASTER ? "Master"
|
||||||
|
: "Backup",
|
||||||
|
vr->v6->fsm.state == VRRP_STATE_MASTER ? "Master"
|
||||||
|
: "Backup");
|
||||||
|
}
|
||||||
|
|
||||||
|
char *table = ttable_dump(tt, "\n");
|
||||||
|
|
||||||
|
vty_out(vty, "\n%s\n", table);
|
||||||
|
XFREE(MTYPE_TMP, table);
|
||||||
|
ttable_del(tt);
|
||||||
|
|
||||||
|
list_delete(&ll);
|
||||||
|
|
||||||
|
return CMD_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
DEFPY(debug_vrrp,
|
DEFPY(debug_vrrp,
|
||||||
debug_vrrp_cmd,
|
debug_vrrp_cmd,
|
||||||
@ -667,6 +735,7 @@ void vrrp_vty_init(void)
|
|||||||
if_cmd_init();
|
if_cmd_init();
|
||||||
|
|
||||||
install_element(VIEW_NODE, &vrrp_vrid_show_cmd);
|
install_element(VIEW_NODE, &vrrp_vrid_show_cmd);
|
||||||
|
install_element(VIEW_NODE, &vrrp_vrid_show_summary_cmd);
|
||||||
install_element(VIEW_NODE, &show_debugging_vrrp_cmd);
|
install_element(VIEW_NODE, &show_debugging_vrrp_cmd);
|
||||||
install_element(VIEW_NODE, &debug_vrrp_cmd);
|
install_element(VIEW_NODE, &debug_vrrp_cmd);
|
||||||
install_element(CONFIG_NODE, &debug_vrrp_cmd);
|
install_element(CONFIG_NODE, &debug_vrrp_cmd);
|
||||||
|
Loading…
Reference in New Issue
Block a user