[quagga-dev 10147] [PATCH 4/4] bgpd: use recent monotonic time for readtime

Stephen Hemminger shemminger at vyatta.com
Fri Jan 4 23:29:23 GMT 2013


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.
---
 bgpd/bgp_packet.c |   13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c
index 2d62c8d..8b00e33 100644
--- a/bgpd/bgp_packet.c
+++ b/bgpd/bgp_packet.c
@@ -2383,6 +2383,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)
@@ -2511,14 +2520,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:
-- 
1.7.10.4





More information about the Quagga-dev mailing list