diff options
author | roberto <roberto@FreeBSD.org> | 2004-07-20 15:01:56 +0000 |
---|---|---|
committer | roberto <roberto@FreeBSD.org> | 2004-07-20 15:01:56 +0000 |
commit | 118e757284cbb8fc4f43a713e892b41504b50a5f (patch) | |
tree | 528d12dda44ebdc3ffcc38050f159ac553a69c17 /contrib/ntp/ntpd/ntp_timer.c | |
parent | a85d9ae25e8e8696677bc30feb6eaf7fc150e529 (diff) | |
download | FreeBSD-src-118e757284cbb8fc4f43a713e892b41504b50a5f.zip FreeBSD-src-118e757284cbb8fc4f43a713e892b41504b50a5f.tar.gz |
Virgin import of ntpd 4.2.0
Diffstat (limited to 'contrib/ntp/ntpd/ntp_timer.c')
-rw-r--r-- | contrib/ntp/ntpd/ntp_timer.c | 88 |
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. |