xref: /netbsd-src/external/bsd/ntp/dist/include/ntpd.h (revision 6a493d6bc668897c91594964a732d38505b70cbb)
1 /*	$NetBSD: ntpd.h,v 1.4 2013/12/28 03:20:13 christos Exp $	*/
2 
3 /*
4  * ntpd.h - Prototypes and external variables for ntpd.
5  *
6  * Note the first half is primarily function prototypes, type
7  * declarations, and preprocessor macros, with variables declared
8  * primarily in the second half.
9  *
10  * Each half is further divided into sections for each source file.
11  */
12 
13 #include "ntp.h"
14 #include "ntp_stdlib.h"
15 #include "ntp_syslog.h"
16 #include "ntp_debug.h"
17 #include "ntp_syslog.h"
18 #include "ntp_select.h"
19 #include "ntp_malloc.h"
20 #include "ntp_refclock.h"
21 #include "ntp_intres.h"
22 #include "recvbuff.h"
23 
24 /*
25  * First half: ntpd types, functions, macros
26  * -----------------------------------------
27  */
28 
29 /*
30  * macro for debugging output - cut down on #ifdef pollution.
31  *
32  * DPRINTF() is for use by ntpd only, and compiles away to nothing
33  * without DEBUG (configure --disable-debugging).
34  *
35  * TRACE() is similar for libntp and utilities, which retain full
36  * debug capability even when compiled without DEBUG.
37  *
38  * The calling convention is not attractive:
39  *     DPRINTF(debuglevel, (fmt, ...));
40  *     DPRINTF(2, ("shows #ifdef DEBUG and if debug >= %d\n", 2));
41  */
42 #ifdef DEBUG
43 # define DPRINTF(lvl, arg)				\
44 	do { 						\
45 		if (debug >= (lvl))			\
46 			mprintf arg;			\
47 	} while (0)
48 #else
49 # define DPRINTF(lvl, arg)	do {} while (0)
50 #endif
51 
52 
53 /* nt_clockstuff.c */
54 #ifdef SYS_WINNT
55 extern	void	win_time_stepped(void);
56 #endif
57 
58 /* ntp_config.c */
59 #define	TAI_1972	10	/* initial TAI offset (s) */
60 extern	char	*keysdir;	/* crypto keys and leaptable directory */
61 extern	char *	saveconfigdir;	/* ntpq saveconfig output directory */
62 
63 extern	void	getconfig	(int, char **);
64 extern	void	ctl_clr_stats	(void);
65 extern	int	ctlclrtrap	(sockaddr_u *, struct interface *, int);
66 extern	u_short ctlpeerstatus	(struct peer *);
67 extern	int	ctlsettrap	(sockaddr_u *, struct interface *, int, int);
68 extern	u_short ctlsysstatus	(void);
69 extern	void	init_control	(void);
70 extern	void	process_control (struct recvbuf *, int);
71 extern	void	report_event	(int, struct peer *, const char *);
72 extern	int	mprintf_event	(int, struct peer *, const char *, ...)
73 			NTP_PRINTF(3, 4);
74 
75 /* ntp_control.c */
76 /*
77  * Structure for translation tables between internal system
78  * variable indices and text format.
79  */
80 struct ctl_var {
81 	u_short code;
82 	u_short flags;
83 	const char *text;
84 };
85 /*
86  * Flag values
87  */
88 #define	CAN_READ	0x01
89 #define	CAN_WRITE	0x02
90 
91 #define DEF		0x20
92 #define	PADDING		0x40
93 #define	EOV		0x80
94 
95 #define	RO	(CAN_READ)
96 #define	WO	(CAN_WRITE)
97 #define	RW	(CAN_READ|CAN_WRITE)
98 
99 extern	char *	add_var (struct ctl_var **, u_long, u_short);
100 extern	void	free_varlist (struct ctl_var *);
101 extern	void	set_var (struct ctl_var **, const char *, u_long, u_short);
102 extern	void	set_sys_var (const char *, u_long, u_short);
103 extern	const char *	get_ext_sys_var(const char *tag);
104 
105 /* ntp_io.c */
106 typedef struct interface_info {
107 	endpt *	ep;
108 	u_char	action;
109 } interface_info_t;
110 
111 typedef void	(*interface_receiver_t)	(void *, interface_info_t *);
112 
113 extern	void	interface_enumerate	(interface_receiver_t, void *);
114 extern	endpt *	getinterface		(sockaddr_u *, u_int32);
115 extern	endpt *	select_peerinterface	(struct peer *, sockaddr_u *,
116 					 endpt *);
117 extern	endpt *	findinterface		(sockaddr_u *);
118 extern	endpt *	findbcastinter		(sockaddr_u *);
119 extern	void	enable_broadcast	(endpt *, sockaddr_u *);
120 extern	void	enable_multicast_if	(endpt *, sockaddr_u *);
121 extern	void	interface_update	(interface_receiver_t, void *);
122 #ifndef HAVE_IO_COMPLETION_PORT
123 extern  void    io_handler              (void);
124 #endif
125 extern	void	init_io 	(void);
126 extern	void	io_open_sockets	(void);
127 extern	void	io_clr_stats	(void);
128 extern	void	io_setbclient	(void);
129 extern	void	io_unsetbclient	(void);
130 extern	void	io_multicast_add(sockaddr_u *);
131 extern	void	io_multicast_del(sockaddr_u *);
132 extern	void	sendpkt 	(sockaddr_u *, struct interface *, int, struct pkt *, int);
133 #ifdef DEBUG
134 extern	void	collect_timing  (struct recvbuf *, const char *, int, l_fp *);
135 #endif
136 #ifdef HAVE_SIGNALED_IO
137 extern	void	wait_for_signal		(void);
138 extern	void	unblock_io_and_alarm	(void);
139 extern	void	block_io_and_alarm	(void);
140 # define	UNBLOCK_IO_AND_ALARM()	unblock_io_and_alarm()
141 # define	BLOCK_IO_AND_ALARM()	block_io_and_alarm()
142 #else
143 # define	UNBLOCK_IO_AND_ALARM()	do {} while (0)
144 # define	BLOCK_IO_AND_ALARM()	do {} while (0)
145 #endif
146 #define		latoa(pif)	localaddrtoa(pif)
147 extern const char * localaddrtoa(endpt *);
148 
149 /* ntp_loopfilter.c */
150 extern	void	init_loopfilter(void);
151 extern	int 	local_clock(struct peer *, double);
152 extern	void	adj_host_clock(void);
153 extern	void	loop_config(int, double);
154 extern	void	select_loop(int);
155 extern	void	huffpuff(void);
156 extern	u_long	sys_clocktime;
157 extern	u_int	sys_tai;
158 extern 	int	freq_cnt;
159 
160 /* ntp_monitor.c */
161 #define MON_HASH_SIZE		(1U << mon_hash_bits)
162 #define MON_HASH_MASK		(MON_HASH_SIZE - 1)
163 #define	MON_HASH(addr)		(sock_hash(addr) & MON_HASH_MASK)
164 extern	void	init_mon	(void);
165 extern	void	mon_start	(int);
166 extern	void	mon_stop	(int);
167 extern	u_short	ntp_monitor	(struct recvbuf *, u_short);
168 extern	void	mon_clearinterface(endpt *interface);
169 
170 /* ntp_peer.c */
171 extern	void	init_peer	(void);
172 extern	struct peer *findexistingpeer(sockaddr_u *, const char *,
173 				      struct peer *, int, u_char);
174 extern	struct peer *findpeer	(struct recvbuf *, int, int *);
175 extern	struct peer *findpeerbyassoc(associd_t);
176 extern  void	set_peerdstadr	(struct peer *, endpt *);
177 extern	struct peer *newpeer	(sockaddr_u *, const char *,
178 				 endpt *, u_char, u_char,
179 				 u_char, u_char, u_int, u_char, u_int32,
180 				 keyid_t, const char *);
181 extern	void	peer_all_reset	(void);
182 extern	void	peer_clr_stats	(void);
183 extern	struct peer *peer_config(sockaddr_u *, const char *,
184 				 endpt *, u_char, u_char,
185 				 u_char, u_char, u_int, u_int32,
186 				 keyid_t, const char *);
187 extern	void	peer_reset	(struct peer *);
188 extern	void	refresh_all_peerinterfaces(void);
189 extern	void	unpeer		(struct peer *);
190 extern	void	clear_all	(void);
191 extern	int	score_all	(struct peer *);
192 extern	struct peer *findmanycastpeer(struct recvbuf *);
193 
194 /* ntp_crypto.c */
195 #ifdef AUTOKEY
196 extern	int	crypto_recv	(struct peer *, struct recvbuf *);
197 extern	int	crypto_xmit	(struct peer *, struct pkt *,
198 				    struct recvbuf *, int,
199 				    struct exten *, keyid_t);
200 extern	keyid_t	session_key	(sockaddr_u *, sockaddr_u *, keyid_t,
201 				    keyid_t, u_long);
202 extern	int	make_keylist	(struct peer *, struct interface *);
203 extern	void	key_expire	(struct peer *);
204 extern	void	crypto_update	(void);
205 extern	void	crypto_config	(int, char *);
206 extern	void	crypto_setup	(void);
207 extern	u_int	crypto_ident	(struct peer *);
208 extern	struct exten *crypto_args (struct peer *, u_int, associd_t, char *);
209 extern	int	crypto_public	(struct peer *, u_char *, u_int);
210 extern	void	value_free	(struct value *);
211 extern	char	*iffpar_file;
212 extern	EVP_PKEY *iffpar_pkey;
213 extern	char	*gqpar_file;
214 extern	EVP_PKEY *gqpar_pkey;
215 extern	char	*mvpar_file;
216 extern	EVP_PKEY *mvpar_pkey;
217 extern struct value tai_leap;
218 #endif	/* AUTOKEY */
219 
220 /* ntp_proto.c */
221 extern	void	transmit	(struct peer *);
222 extern	void	receive 	(struct recvbuf *);
223 extern	void	peer_clear	(struct peer *, const char *);
224 extern	void 	process_packet	(struct peer *, struct pkt *, u_int);
225 extern	void	clock_select	(void);
226 
227 extern	u_long	leapsec;	/* seconds to next leap (proximity class) */
228 extern  int     leapdif;        /* TAI difference step at next leap second*/
229 extern	int	sys_orphan;
230 extern	double	sys_mindisp;
231 extern	double	sys_maxdist;
232 
233 extern	char	*sys_ident;	/* identity scheme */
234 extern	void	poll_update	(struct peer *, u_char);
235 
236 extern	void	clear		(struct peer *);
237 extern	void	clock_filter	(struct peer *, double, double, double);
238 extern	void	init_proto	(void);
239 extern	void	set_sys_tick_precision(double);
240 extern	void	proto_config	(int, u_long, double, sockaddr_u *);
241 extern	void	proto_clr_stats (void);
242 
243 /* ntp_refclock.c */
244 #ifdef	REFCLOCK
245 extern	int	refclock_newpeer (struct peer *);
246 extern	void	refclock_unpeer (struct peer *);
247 extern	void	refclock_receive (struct peer *);
248 extern	void	refclock_transmit (struct peer *);
249 extern	void	init_refclock	(void);
250 #endif	/* REFCLOCK */
251 
252 /* ntp_request.c */
253 extern	void	init_request	(void);
254 extern	void	process_private (struct recvbuf *, int);
255 extern	void	reset_auth_stats(void);
256 
257 /* ntp_restrict.c */
258 extern	void	init_restrict	(void);
259 extern	u_short	restrictions	(sockaddr_u *);
260 extern	void	hack_restrict	(int, sockaddr_u *, sockaddr_u *,
261 				 u_short, u_short, u_long);
262 extern	void	restrict_source	(sockaddr_u *, int, u_long);
263 
264 /* ntp_timer.c */
265 extern	void	init_timer	(void);
266 extern	void	reinit_timer	(void);
267 extern	void	timer		(void);
268 extern	void	timer_clr_stats (void);
269 extern	void	timer_interfacetimeout (u_long);
270 extern	volatile int interface_interval;
271 extern	u_long	orphwait;		/* orphan wait time */
272 #ifdef AUTOKEY
273 extern	char	*sys_hostname;	/* host name */
274 extern	char	*sys_groupname;	/* group name */
275 extern	char	*group_name;	/* group name */
276 extern	u_long	sys_revoke;	/* keys revoke timeout */
277 extern	u_long	sys_automax;	/* session key timeout */
278 #endif	/* AUTOKEY */
279 
280 /* ntp_util.c */
281 extern	void	init_util	(void);
282 extern	void	write_stats	(void);
283 extern	void	stats_config	(int, const char *);
284 extern	void	record_peer_stats (sockaddr_u *, int, double, double, double, double);
285 extern	void	record_proto_stats (char *);
286 extern	void	record_loop_stats (double, double, double, double, int);
287 extern	void	record_clock_stats (sockaddr_u *, const char *);
288 extern	int	mprintf_clock_stats(sockaddr_u *, const char *, ...)
289 			NTP_PRINTF(2, 3);
290 extern	void	record_raw_stats (sockaddr_u *srcadr, sockaddr_u *dstadr, l_fp *t1, l_fp *t2, l_fp *t3, l_fp *t4, int leap, int version, int mode, int stratum, int poll, int precision, double root_delay, double root_dispersion, u_int32 refid);
291 extern	int	check_leap_file	(void);
292 extern	void	record_crypto_stats (sockaddr_u *, const char *);
293 #ifdef DEBUG
294 extern	void	record_timing_stats (const char *);
295 #endif
296 extern	char *	fstostr(time_t);	/* NTP timescale seconds */
297 
298 /* ntpd.c */
299 extern	void	parse_cmdline_opts(int *, char ***);
300 /*
301  * Signals we catch for debugging.
302  */
303 #define MOREDEBUGSIG	SIGUSR1
304 #define LESSDEBUGSIG	SIGUSR2
305 /*
306  * Signals which terminate us gracefully.
307  */
308 #ifndef SYS_WINNT
309 # define SIGDIE1	SIGHUP
310 # define SIGDIE2	SIGINT
311 # define SIGDIE3	SIGQUIT
312 # define SIGDIE4	SIGTERM
313 #endif /* SYS_WINNT */
314 
315 
316 /*
317  * Last half: ntpd variables
318  * -------------------------
319  */
320 
321 /* ntp_config.c */
322 extern char const *	progname;
323 extern char	*sys_phone[];		/* ACTS phone numbers */
324 #if defined(HAVE_SCHED_SETSCHEDULER)
325 extern int	config_priority_override;
326 extern int	config_priority;
327 #endif
328 extern char *ntp_signd_socket;
329 extern struct config_tree_tag *cfg_tree_history;
330 
331 #ifdef BC_LIST_FRAMEWORK_NOT_YET_USED
332 /*
333  * backwards compatibility flags
334  */
335 typedef struct bc_entry_tag {
336 	int	token;
337 	int	enabled;
338 } bc_entry;
339 
340 extern bc_entry bc_list[];
341 #endif
342 
343 /* ntp_control.c */
344 extern int	num_ctl_traps;
345 extern keyid_t	ctl_auth_keyid;		/* keyid used for authenticating write requests */
346 
347 /*
348  * Statistic counters to keep track of requests and responses.
349  */
350 extern u_long	ctltimereset;		/* time stats reset */
351 extern u_long	numctlreq;		/* number of requests we've received */
352 extern u_long	numctlbadpkts;		/* number of bad control packets */
353 extern u_long	numctlresponses; 	/* number of resp packets sent with data */
354 extern u_long	numctlfrags; 		/* number of fragments sent */
355 extern u_long	numctlerrors;		/* number of error responses sent */
356 extern u_long	numctltooshort;		/* number of too short input packets */
357 extern u_long	numctlinputresp; 	/* number of responses on input */
358 extern u_long	numctlinputfrag; 	/* number of fragments on input */
359 extern u_long	numctlinputerr;		/* number of input pkts with err bit set */
360 extern u_long	numctlbadoffset; 	/* number of input pkts with nonzero offset */
361 extern u_long	numctlbadversion;	/* number of input pkts with unknown version */
362 extern u_long	numctldatatooshort;	/* data too short for count */
363 extern u_long	numctlbadop; 		/* bad op code found in packet */
364 extern u_long	numasyncmsgs;		/* number of async messages we've sent */
365 
366 /*
367  * Other statistics of possible interest
368  */
369 extern volatile u_long packets_dropped;	/* total number of packets dropped on reception */
370 extern volatile u_long packets_ignored;	/* packets received on wild card interface */
371 extern volatile u_long packets_received;/* total number of packets received */
372 extern u_long	packets_sent;		/* total number of packets sent */
373 extern u_long	packets_notsent; 	/* total number of packets which couldn't be sent */
374 
375 extern volatile u_long handler_calls;	/* number of calls to interrupt handler */
376 extern volatile u_long handler_pkts;	/* number of pkts received by handler */
377 extern u_long	io_timereset;		/* time counters were reset */
378 
379 /* ntp_io.c */
380 extern  int	disable_dynamic_updates;
381 extern u_int	sys_ifnum;		/* next .ifnum to assign */
382 extern endpt *	any_interface;		/* IPv4 wildcard */
383 extern endpt *	any6_interface;		/* IPv6 wildcard */
384 extern endpt *	loopback_interface;	/* IPv4 loopback for refclocks */
385 extern endpt *	ep_list;		/* linked list */
386 
387 /* ntp_loopfilter.c */
388 extern double	drift_comp;		/* clock frequency (s/s) */
389 extern double	clock_stability;	/* clock stability (s/s) */
390 extern double	clock_max;		/* max offset before step (s) */
391 extern double	clock_panic;		/* max offset before panic (s) */
392 extern double	clock_phi;		/* dispersion rate (s/s) */
393 extern double	clock_minstep;		/* step timeout (s) */
394 extern double	clock_codec;		/* codec frequency */
395 #ifdef KERNEL_PLL
396 extern int	pll_status;		/* status bits for kernel pll */
397 #endif /* KERNEL_PLL */
398 
399 /*
400  * Clock state machine control flags
401  */
402 extern int	ntp_enable;		/* clock discipline enabled */
403 extern int	pll_control;		/* kernel support available */
404 extern int	kern_enable;		/* kernel support enabled */
405 extern int	pps_enable;		/* kernel PPS discipline enabled */
406 extern int	ext_enable;		/* external clock enabled */
407 extern int	cal_enable;		/* refclock calibrate enable */
408 extern int	allow_panic;		/* allow panic correction */
409 extern int	mode_ntpdate;		/* exit on first clock set */
410 extern int	peer_ntpdate;		/* count of ntpdate peers */
411 
412 /*
413  * Clock state machine variables
414  */
415 extern u_char	sys_poll;		/* system poll interval (log2 s) */
416 extern int	state;			/* clock discipline state */
417 extern int	tc_counter;		/* poll-adjust counter */
418 extern u_long	last_time;		/* time of last clock update (s) */
419 extern double	last_offset;		/* last clock offset (s) */
420 extern u_char	allan_xpt;		/* Allan intercept (log2 s) */
421 extern double	clock_jitter;		/* clock jitter (s) */
422 extern double	sys_offset;		/* system offset (s) */
423 extern double	sys_jitter;		/* system jitter (s) */
424 
425 /* ntp_monitor.c */
426 extern u_char	mon_hash_bits;		/* log2 size of hash table */
427 extern mon_entry ** mon_hash;		/* MRU hash table */
428 extern mon_entry mon_mru_list;		/* mru listhead */
429 extern u_int	mon_enabled;		/* MON_OFF (0) or other MON_* */
430 extern u_int	mru_alloc;		/* mru list + free list count */
431 extern u_int	mru_entries;		/* mru list count */
432 extern u_int	mru_peakentries;	/* highest mru_entries */
433 extern u_int	mru_initalloc;		/* entries to preallocate */
434 extern u_int	mru_incalloc;		/* allocation batch factor */
435 extern u_int	mru_mindepth;		/* preempt above this */
436 extern int	mru_maxage;		/* for entries older than */
437 extern u_int	mru_maxdepth; 		/* MRU size hard limit */
438 extern int	mon_age;		/* preemption limit */
439 
440 /* ntp_peer.c */
441 extern struct peer *peer_hash[NTP_HASH_SIZE];	/* peer hash table */
442 extern int	peer_hash_count[NTP_HASH_SIZE];	/* count of in each bucket */
443 extern struct peer *assoc_hash[NTP_HASH_SIZE];	/* association ID hash table */
444 extern int	assoc_hash_count[NTP_HASH_SIZE];/* count of in each bucket */
445 extern struct peer *peer_list;		/* peer structures list */
446 extern int	peer_count;		/* count in peer_list */
447 extern int	peer_free_count;	/* count in peer_free */
448 
449 /*
450  * Miscellaneous statistic counters which may be queried.
451  */
452 extern u_long	peer_timereset;		/* time stat counters were zeroed */
453 extern u_long	findpeer_calls;		/* number of calls to findpeer */
454 extern u_long	assocpeer_calls;	/* number of calls to findpeerbyassoc */
455 extern u_long	peer_allocations;	/* number of allocations from the free list */
456 extern u_long	peer_demobilizations;	/* number of structs freed to free list */
457 extern int	total_peer_structs;	/* number of peer structs in circulation */
458 extern int	peer_associations;	/* mobilized associations */
459 extern int	peer_preempt;		/* preemptable associations */
460 
461 /* ntp_proto.c */
462 /*
463  * System variables are declared here.	See Section 3.2 of the
464  * specification.
465  */
466 extern u_char	sys_leap;		/* system leap indicator */
467 extern u_char	sys_stratum;		/* system stratum */
468 extern s_char	sys_precision;		/* local clock precision */
469 extern double	sys_rootdelay;		/* roundtrip delay to primary source */
470 extern double	sys_rootdisp;		/* dispersion to primary source */
471 extern u_int32	sys_refid;		/* reference id */
472 extern l_fp	sys_reftime;		/* last update time */
473 extern struct peer *sys_peer;		/* current peer */
474 
475 /*
476  * Nonspecified system state variables.
477  */
478 extern int	sys_bclient;		/* we set our time to broadcasts */
479 extern double	sys_bdelay; 		/* broadcast client default delay */
480 extern int	sys_authenticate;	/* requre authentication for config */
481 extern l_fp	sys_authdelay;		/* authentication delay */
482 extern u_long 	sys_epoch;		/* last clock update time */
483 extern keyid_t	sys_private;		/* private value for session seed */
484 extern int	sys_manycastserver;	/* respond to manycast client pkts */
485 extern int	sys_minclock;		/* minimum survivors */
486 extern int	sys_minsane;		/* minimum candidates */
487 extern int	sys_floor;		/* cluster stratum floor */
488 extern int	sys_ceiling;		/* cluster stratum ceiling */
489 extern u_char	sys_ttl[MAX_TTL];	/* ttl mapping vector */
490 extern int	sys_ttlmax;		/* max ttl mapping vector index */
491 
492 /*
493  * Statistics counters
494  */
495 extern u_long	sys_stattime;		/* time since reset */
496 extern u_long	sys_received;		/* packets received */
497 extern u_long	sys_processed;		/* packets for this host */
498 extern u_long	sys_restricted;	 	/* restricted packets */
499 extern u_long	sys_newversion;		/* current version  */
500 extern u_long	sys_oldversion;		/* old version */
501 extern u_long	sys_restricted;		/* access denied */
502 extern u_long	sys_badlength;		/* bad length or format */
503 extern u_long	sys_badauth;		/* bad authentication */
504 extern u_long	sys_declined;		/* declined */
505 extern u_long	sys_limitrejected;	/* rate exceeded */
506 extern u_long	sys_kodsent;		/* KoD sent */
507 
508 /* ntp_request.c */
509 extern keyid_t	info_auth_keyid;	/* keyid used to authenticate requests */
510 extern u_long	auth_timereset;
511 
512 /* ntp_restrict.c */
513 extern restrict_u *	restrictlist4;	/* IPv4 restriction list */
514 extern restrict_u *	restrictlist6;	/* IPv6 restriction list */
515 extern int		ntp_minpkt;
516 extern u_char		ntp_minpoll;
517 
518 /* ntp_scanner.c */
519 extern u_int32		conf_file_sum;	/* Simple sum of characters */
520 
521 /* ntp_signd.c */
522 #ifdef HAVE_NTP_SIGND
523 extern void send_via_ntp_signd(struct recvbuf *, int, keyid_t, int,
524 			       struct pkt *);
525 #endif
526 
527 /* ntp_timer.c */
528 extern volatile int alarm_flag;		/* alarm flag */
529 extern volatile u_long alarm_overflow;
530 extern u_long	current_time;		/* seconds since startup */
531 extern u_long	timer_timereset;
532 extern u_long	timer_overflows;
533 extern u_long	timer_xmtcalls;
534 #ifdef SYS_WINNT
535 HANDLE WaitableTimerHandle;
536 #endif
537 
538 /* ntp_util.c */
539 extern	char	statsdir[MAXFILENAME];
540 extern	int	stats_control;		/* write stats to fileset? */
541 extern	int	stats_write_period;	/* # of seconds between writes. */
542 extern	double	stats_write_tolerance;
543 extern	double	wander_threshold;
544 
545 /* ntpd.c */
546 extern	int	nofork;		/* no-fork flag */
547 extern	int	initializing;	/* initializing flag */
548 #ifdef HAVE_DROPROOT
549 extern	int	droproot;	/* flag: try to drop root privileges after startup */
550 extern	int	root_dropped;	/* root has been dropped */
551 extern char *user;		/* user to switch to */
552 extern char *group;		/* group to switch to */
553 extern const char *chrootdir;	/* directory to chroot() to */
554 #endif
555 #ifdef HAVE_WORKING_FORK
556 extern	int	waitsync_fd_to_close;	/* -w/--wait-sync */
557 #endif
558 
559 /* ntservice.c */
560 #ifdef SYS_WINNT
561 extern int accept_wildcard_if_for_winnt;
562 #endif
563 
564 /* refclock_conf.c */
565 #ifdef REFCLOCK
566 /* refclock configuration table */
567 extern struct refclock * const refclock_conf[];
568 extern u_char	num_refclock_conf;
569 #endif
570 
571