}
}
+time_t
+quagga_monotime (void)
+{
+ struct timeval tv;
+ quagga_get_relative(&tv);
+ return tv.tv_sec;
+}
+
/* time_t value in terms of stabilised absolute time.
* replacement for POSIX time()
*/
* all systems, and fully monotonic on /some/ systems.
*/
extern int quagga_gettime (enum quagga_clkid, struct timeval *);
+extern time_t quagga_monotime (void);
extern time_t quagga_time (time_t *);
/* Returns elapsed real (wall clock) time. */
*/
delay = (random() % (max_delay - min_delay)) + min_delay;
- current_index = ospf->lsa_refresh_queue.index + (quagga_time (NULL)
+ current_index = ospf->lsa_refresh_queue.index + (quagga_monotime ()
- ospf->lsa_refresher_started)/OSPF_LSA_REFRESHER_GRANULARITY;
index = (current_index + delay/OSPF_LSA_REFRESHER_GRANULARITY)
modulus. */
ospf->lsa_refresh_queue.index =
((unsigned long)(ospf->lsa_refresh_queue.index +
- (quagga_time (NULL) - ospf->lsa_refresher_started)
+ (quagga_monotime () - ospf->lsa_refresher_started)
/ OSPF_LSA_REFRESHER_GRANULARITY))
% OSPF_LSA_REFRESHER_SLOTS;
ospf->t_lsa_refresher = thread_add_timer (master, ospf_lsa_refresh_walker,
ospf, ospf->lsa_refresh_interval);
- ospf->lsa_refresher_started = quagga_time (NULL);
+ ospf->lsa_refresher_started = quagga_monotime ();
for (ALL_LIST_ELEMENTS (lsa_to_refresh, node, nnode, lsa))
{
new->lsa_refresh_interval = OSPF_LSA_REFRESH_INTERVAL_DEFAULT;
new->t_lsa_refresher = thread_add_timer (master, ospf_lsa_refresh_walker,
new, new->lsa_refresh_interval);
- new->lsa_refresher_started = quagga_time (NULL);
+ new->lsa_refresher_started = quagga_monotime ();
if ((new->fd = ospf_sock_init()) < 0)
{
return 1;
time_left = ospf->lsa_refresh_interval -
- (quagga_time (NULL) - ospf->lsa_refresher_started);
+ (quagga_monotime () - ospf->lsa_refresher_started);
if (time_left > interval)
{
int time_left;
time_left = ospf->lsa_refresh_interval -
- (quagga_time (NULL) - ospf->lsa_refresher_started);
+ (quagga_monotime () - ospf->lsa_refresher_started);
if (time_left > OSPF_LSA_REFRESH_INTERVAL_DEFAULT)
{