summaryrefslogtreecommitdiffstats
path: root/contrib/ntp/ntpd/ntp_timer.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/ntp/ntpd/ntp_timer.c')
-rw-r--r--contrib/ntp/ntpd/ntp_timer.c88
1 files changed, 65 insertions, 23 deletions
diff --git a/contrib/ntp/ntpd/ntp_timer.c b/contrib/ntp/ntpd/ntp_timer.c
index c2b1d72..6f0f18b 100644
--- a/contrib/ntp/ntpd/ntp_timer.c
+++ b/contrib/ntp/ntpd/ntp_timer.c
@@ -23,10 +23,6 @@
# include "ntp_timer.h"
#endif
-#ifdef PUBKEY
-#include "ntp_crypto.h"
-#endif /* PUBKEY */
-
/*
* These routines provide support for the event timer. The timer is
* implemented by an interrupt routine which sets a flag once every
@@ -50,10 +46,10 @@ static u_long adjust_timer; /* second timer */
static u_long keys_timer; /* minute timer */
static u_long hourly_timer; /* hour timer */
static u_long huffpuff_timer; /* huff-n'-puff timer */
-#ifdef AUTOKEY
+#ifdef OPENSSL
static u_long revoke_timer; /* keys revoke timer */
-u_long sys_revoke = 1 << KEY_REVOKE; /* keys revoke timeout */
-#endif /* AUTOKEY */
+u_char sys_revoke = KEY_REVOKE; /* keys revoke timeout (log2 s) */
+#endif /* OPENSSL */
/*
* Statistics counter for the interested.
@@ -83,6 +79,57 @@ static HANDLE WaitableTimerHandle = NULL;
static RETSIGTYPE alarming P((int));
#endif /* SYS_WINNT */
+#if !defined(VMS)
+# if !defined SYS_WINNT || defined(SYS_CYGWIN32)
+# ifndef HAVE_TIMER_SETTIME
+ struct itimerval itimer;
+# else
+ static timer_t ntpd_timerid;
+ struct itimerspec itimer;
+# endif /* HAVE_TIMER_SETTIME */
+# endif /* SYS_WINNT */
+#endif /* VMS */
+
+/*
+ * reinit_timer - reinitialize interval timer.
+ */
+void
+reinit_timer(void)
+{
+#if !defined(SYS_WINNT) && !defined(VMS)
+# if defined(HAVE_TIMER_CREATE) && defined(HAVE_TIMER_SETTIME)
+ timer_gettime(ntpd_timerid, &itimer);
+ if (itimer.it_value.tv_sec < 0 || itimer.it_value.tv_sec > (1<<EVENT_TIMEOUT)) {
+ itimer.it_value.tv_sec = (1<<EVENT_TIMEOUT);
+ }
+ if (itimer.it_value.tv_nsec < 0 ) {
+ itimer.it_value.tv_nsec = 0;
+ }
+ if (itimer.it_value.tv_sec == 0 && itimer.it_value.tv_nsec == 0) {
+ itimer.it_value.tv_sec = (1<<EVENT_TIMEOUT);
+ itimer.it_value.tv_nsec = 0;
+ }
+ itimer.it_interval.tv_sec = (1<<EVENT_TIMEOUT);
+ itimer.it_interval.tv_nsec = 0;
+ timer_settime(ntpd_timerid, 0 /*!TIMER_ABSTIME*/, &itimer, NULL);
+# else
+ getitimer(ITIMER_REAL, &itimer);
+ if (itimer.it_value.tv_sec < 0 || itimer.it_value.tv_sec > (1<<EVENT_TIMEOUT)) {
+ itimer.it_value.tv_sec = (1<<EVENT_TIMEOUT);
+ }
+ if (itimer.it_value.tv_usec < 0 ) {
+ itimer.it_value.tv_usec = 0;
+ }
+ if (itimer.it_value.tv_sec == 0 && itimer.it_value.tv_usec == 0) {
+ itimer.it_value.tv_sec = (1<<EVENT_TIMEOUT);
+ itimer.it_value.tv_usec = 0;
+ }
+ itimer.it_interval.tv_sec = (1<<EVENT_TIMEOUT);
+ itimer.it_interval.tv_usec = 0;
+ setitimer(ITIMER_REAL, &itimer, (struct itimerval *)0);
+# endif
+# endif /* VMS */
+}
/*
* init_timer - initialize the timer data structures
@@ -90,20 +137,10 @@ static RETSIGTYPE alarming P((int));
void
init_timer(void)
{
-#if !defined(VMS)
-# if !defined SYS_WINNT || defined(SYS_CYGWIN32)
-# ifndef HAVE_TIMER_SETTIME
- struct itimerval itimer;
-# else
- static timer_t ntpd_timerid; /* should be global if we ever want */
- /* to kill timer without rebooting ... */
- struct itimerspec itimer;
-# endif /* HAVE_TIMER_SETTIME */
-# else /* SYS_WINNT */
+# if defined SYS_WINNT & !defined(SYS_CYGWIN32)
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
# endif /* SYS_WINNT */
-#endif /* !VMS */
/*
* Initialize...
@@ -218,6 +255,9 @@ void
timer(void)
{
register struct peer *peer, *next_peer;
+#ifdef OPENSSL
+ char statstr[NTP_MAXSTRLEN]; /* statistics for filegen */
+#endif /* OPENSSL */
u_int n;
current_time += (1<<EVENT_TIMEOUT);
@@ -228,6 +268,7 @@ timer(void)
if (adjust_timer <= current_time) {
adjust_timer += 1;
adj_host_clock();
+ kod_proto();
}
/*
@@ -269,20 +310,21 @@ timer(void)
huffpuff();
}
-#ifdef AUTOKEY
+#ifdef OPENSSL
/*
* Garbage collect old keys and generate new private value
*/
if (revoke_timer <= current_time) {
- revoke_timer += sys_revoke;
+ revoke_timer += RANDPOLL(sys_revoke);
expire_all();
+ sprintf(statstr, "refresh ts %u", ntohl(hostval.tstamp));
+ record_crypto_stats(NULL, statstr);
#ifdef DEBUG
if (debug)
- printf("key expire: at %lu next %lu\n",
- current_time, revoke_timer);
+ printf("timer: %s\n", statstr);
#endif
}
-#endif /* AUTOKEY */
+#endif /* OPENSSL */
/*
* Finally, call the hourly routine.
OpenPOWER on IntegriCloud