zebra: count iface up/down events and keep last time of their occurrence

It is quite useful to be able to assert whether specific interfaces have
flapped or also to verify that specific interfaces have not flapped.

By having counters for those events and storing the last time of their
occurrence, this is made possible.

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
Acked-by: Jafar Al-Gharaibeh <jafar@atcorp.com>
This commit is contained in:
Christian Franke 2016-04-07 16:43:44 -03:00 committed by Donald Sharp
parent ae616d60b5
commit 55ce4d3add
2 changed files with 23 additions and 0 deletions

View File

@ -835,6 +835,12 @@ if_down_del_nbr_connected (struct interface *ifp)
void
if_up (struct interface *ifp)
{
struct zebra_if *zif;
zif = ifp->info;
zif->up_count++;
quagga_timestamp (2, zif->up_last, sizeof (zif->up_last));
/* Notify the protocol daemons. */
if (ifp->ptm_enable && (ifp->ptm_status == ZEBRA_PTM_STATUS_DOWN)) {
zlog_warn("%s: interface %s hasn't passed ptm check\n", __func__,
@ -859,6 +865,12 @@ if_up (struct interface *ifp)
void
if_down (struct interface *ifp)
{
struct zebra_if *zif;
zif = ifp->info;
zif->down_count++;
quagga_timestamp (2, zif->down_last, sizeof (zif->down_last));
/* Notify to the protocol daemons. */
zebra_interface_down_update (ifp);
@ -1035,6 +1047,11 @@ if_dump_vty (struct vty *vty, struct interface *ifp)
vty_out (vty, "down%s", VTY_NEWLINE);
}
vty_out (vty, " Link ups: %5u last: %s%s", zebra_if->up_count,
zebra_if->up_last[0] ? zebra_if->up_last : "(never)", VTY_NEWLINE);
vty_out (vty, " Link downs: %5u last: %s%s", zebra_if->down_count,
zebra_if->down_last[0] ? zebra_if->down_last : "(never)", VTY_NEWLINE);
zebra_ptm_show_status(vty, ifp);
vrf = vrf_lookup(ifp->vrf_id);

View File

@ -189,6 +189,12 @@ struct zebra_if
/* Installed addresses chains tree. */
struct route_table *ipv4_subnets;
/* Information about up/down changes */
unsigned int up_count;
char up_last[QUAGGA_TIMESTAMP_LEN];
unsigned int down_count;
char down_last[QUAGGA_TIMESTAMP_LEN];
#if defined(HAVE_RTADV)
struct rtadvconf rtadv;
#endif /* HAVE_RTADV */