]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: use recent monotonic time for readtime
authorStephen Hemminger <shemminger@vyatta.com>
Fri, 4 Jan 2013 22:29:23 +0000 (22:29 +0000)
committerDavid Lamparter <equinox@opensourcerouting.org>
Tue, 15 Jan 2013 16:49:48 +0000 (17:49 +0100)
The readtime value is for diagnostic, and doesn't have to be highly
accurate. This also fixes a problem where the readtime was being measured
with system clock, but the peer_uptime() was comparing with bgp_clock.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
bgpd/bgp_packet.c

index 968c8e4d835d5bbe9f7b6fc6cf42b71d7891d429..02863d75e4297f74576df203c563b2c8b2c5c4c3 100644 (file)
@@ -2385,6 +2385,15 @@ bgp_marker_all_one (struct stream *s, int length)
   return 1;
 }
 
+/* Recent thread time.
+   On same clock base as bgp_clock (MONOTONIC)
+   but can be time of last context switch to bgp_read thread. */
+static time_t
+bgp_recent_clock (void)
+{
+  return recent_relative_time().tv_sec;
+}
+
 /* Starting point of packet process function. */
 int
 bgp_read (struct thread *thread)
@@ -2513,14 +2522,14 @@ bgp_read (struct thread *thread)
       bgp_open_receive (peer, size); /* XXX return value ignored! */
       break;
     case BGP_MSG_UPDATE:
-      peer->readtime = time(NULL);    /* Last read timer reset */
+      peer->readtime = bgp_recent_clock ();
       bgp_update_receive (peer, size);
       break;
     case BGP_MSG_NOTIFY:
       bgp_notify_receive (peer, size);
       break;
     case BGP_MSG_KEEPALIVE:
-      peer->readtime = time(NULL);    /* Last read timer reset */
+      peer->readtime = bgp_recent_clock ();
       bgp_keepalive_receive (peer, size);
       break;
     case BGP_MSG_ROUTE_REFRESH_NEW: