[ospfd] record timestamp and event of last NSM state change for neighbour

2006-07-10 Paul Jakma <paul.jakma@sun.com>

	* ospf_nsm.c: (ospf_nsm_event) Record state change timestamp
	  and event in nbr struct.
	* ospf_neighbor.h: (struct ospf_neighbor) Add fields to record
	  timestamp of last NSM change and event.
	* ospf_vty.c: (show_ip_ospf_neighbor_detail_sub) Print
	  last state change timestamp and event, if available.
This commit is contained in:
Paul Jakma 2006-07-11 17:57:25 +00:00
parent 3d63f38064
commit 90c33177f5
4 changed files with 18 additions and 1 deletions

View File

@ -22,6 +22,11 @@
(ospf_nsm_event) call nsm_notice_state_changes from here. (ospf_nsm_event) call nsm_notice_state_changes from here.
Move the debug message to entry of function, so it gets out Move the debug message to entry of function, so it gets out
even if something goes wrong. even if something goes wrong.
Record state change timestamp and event in nbr struct.
* ospf_neighbor.h: (struct ospf_neighbor) Add fields to record
timestamp of last NSM change and event.
* ospf_vty.c: (show_ip_ospf_neighbor_detail_sub) Print
last state change timestamp and event, if available.
2006-07-10 Andrew J. Schorr <ajschorr@alumni.princeton.edu> 2006-07-10 Andrew J. Schorr <ajschorr@alumni.princeton.edu>

View File

@ -82,6 +82,8 @@ struct ospf_neighbor
/* Statistics Field */ /* Statistics Field */
u_int32_t state_change; u_int32_t state_change;
struct timeval ts_last_change;
const char *last_event_str;
struct ospf_nbr_nbma *nbr_nbma; struct ospf_nbr_nbma *nbr_nbma;
}; };

View File

@ -615,6 +615,9 @@ nsm_notice_state_change (struct ospf_neighbor *nbr, int next_state, int event)
LOOKUP (ospf_nsm_state_msg, next_state), LOOKUP (ospf_nsm_state_msg, next_state),
ospf_nsm_event_str [event]); ospf_nsm_event_str [event]);
nbr->ts_last_change = recent_time;
nbr->last_event_str = ospf_nsm_event_str [event];
#ifdef HAVE_SNMP #ifdef HAVE_SNMP
/* Terminal state or regression */ /* Terminal state or regression */
if ((next_state == NSM_Full) if ((next_state == NSM_Full)

View File

@ -3155,7 +3155,14 @@ show_ip_ospf_neighbor_detail_sub (struct vty *vty, struct ospf_interface *oi,
nbr->priority, LOOKUP (ospf_nsm_state_msg, nbr->state)); nbr->priority, LOOKUP (ospf_nsm_state_msg, nbr->state));
/* Show state changes. */ /* Show state changes. */
vty_out (vty, " %d state changes%s", nbr->state_change, VTY_NEWLINE); vty_out (vty, " %d state changes%s", nbr->state_change, VTY_NEWLINE);
if (nbr->ts_last_change.tv_sec || nbr->ts_last_change.tv_usec)
{
struct timeval res = tv_sub (recent_time, nbr->ts_last_change);
vty_out (vty, " Last state change %s ago, due to %s%s",
ospf_timeval_dump (&res, timebuf, sizeof(timebuf)),
(nbr->last_event_str ? nbr->last_event_str : "??"),
VTY_NEWLINE);
}
/* Show Designated Rotuer ID. */ /* Show Designated Rotuer ID. */
vty_out (vty, " DR is %s,", inet_ntoa (nbr->d_router)); vty_out (vty, " DR is %s,", inet_ntoa (nbr->d_router));
/* Show Backup Designated Rotuer ID. */ /* Show Backup Designated Rotuer ID. */