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__,
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);
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);
/* 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 */