ntpd.h revision 310419
1283625Sdim/*
2283625Sdim * ntpd.h - Prototypes and external variables for ntpd.
3353358Sdim *
4353358Sdim * Note the first half is primarily function prototypes, type
5353358Sdim * declarations, and preprocessor macros, with variables declared
6283625Sdim * primarily in the second half.
7283625Sdim *
8283625Sdim * Each half is further divided into sections for each source file.
9283625Sdim */
10283625Sdim
11283625Sdim#include "ntp.h"
12283625Sdim#include "ntp_stdlib.h"
13283625Sdim#include "ntp_syslog.h"
14283625Sdim#include "ntp_debug.h"
15283625Sdim#include "ntp_syslog.h"
16309124Sdim#include "ntp_select.h"
17283625Sdim#include "ntp_malloc.h"
18283625Sdim#include "ntp_refclock.h"
19283625Sdim#include "ntp_intres.h"
20283625Sdim#include "recvbuff.h"
21283625Sdim
22283625Sdim/*
23283625Sdim * First half: ntpd types, functions, macros
24283625Sdim * -----------------------------------------
25283625Sdim */
26309124Sdim
27309124Sdim/*
28283625Sdim * macro for debugging output - cut down on #ifdef pollution.
29283625Sdim *
30283625Sdim * DPRINTF() is for use by ntpd only, and compiles away to nothing
31283625Sdim * without DEBUG (configure --disable-debugging).
32283625Sdim *
33283625Sdim * TRACE() is similar for libntp and utilities, which retain full
34283625Sdim * debug capability even when compiled without DEBUG.
35341825Sdim *
36341825Sdim * The calling convention is not attractive:
37341825Sdim *     DPRINTF(debuglevel, (fmt, ...));
38341825Sdim *     DPRINTF(2, ("shows #ifdef DEBUG and if debug >= %d\n", 2));
39321369Sdim */
40309124Sdim#ifdef DEBUG
41309124Sdim# define DPRINTF(lvl, arg)				\
42327952Sdim	do { 						\
43309124Sdim		if (debug >= (lvl))			\
44283625Sdim			mprintf arg;			\
45309124Sdim	} while (0)
46309124Sdim#else
47309124Sdim# define DPRINTF(lvl, arg)	do {} while (0)
48309124Sdim#endif
49309124Sdim
50309124Sdim
51309124Sdim/* nt_clockstuff.c */
52309124Sdim#ifdef SYS_WINNT
53309124Sdimextern	void	win_time_stepped(void);
54327952Sdim#endif
55285181Sdim
56283625Sdim/* ntp_config.c */
57283625Sdim#define	TAI_1972	10	/* initial TAI offset (s) */
58283625Sdimextern	char	*keysdir;	/* crypto keys and leaptable directory */
59283625Sdimextern	char *	saveconfigdir;	/* ntpq saveconfig output directory */
60283625Sdim
61283625Sdimextern	void	getconfig	(int, char **);
62283625Sdimextern	void	ctl_clr_stats	(void);
63341825Sdimextern	int	ctlclrtrap	(sockaddr_u *, struct interface *, int);
64341825Sdimextern	u_short ctlpeerstatus	(struct peer *);
65283625Sdimextern	int	ctlsettrap	(sockaddr_u *, struct interface *, int, int);
66283625Sdimextern	u_short ctlsysstatus	(void);
67283625Sdimextern	void	init_control	(void);
68283625Sdimextern	void	process_control (struct recvbuf *, int);
69283625Sdimextern	void	report_event	(int, struct peer *, const char *);
70283625Sdimextern	int	mprintf_event	(int, struct peer *, const char *, ...)
71283625Sdim			NTP_PRINTF(3, 4);
72283625Sdim
73292735Sdim/* ntp_control.c */
74283625Sdim/*
75283625Sdim * Structure for translation tables between internal system
76283625Sdim * variable indices and text format.
77283625Sdim */
78283625Sdimstruct ctl_var {
79283625Sdim	u_short code;
80283625Sdim	u_short flags;
81283625Sdim	const char *text;
82341825Sdim};
83341825Sdim/*
84341825Sdim * Flag values
85283625Sdim */
86341825Sdim#define	CAN_READ	0x01
87341825Sdim#define	CAN_WRITE	0x02
88341825Sdim
89341825Sdim#define DEF		0x20
90341825Sdim#define	PADDING		0x40
91341825Sdim#define	EOV		0x80
92341825Sdim
93341825Sdim#define	RO	(CAN_READ)
94341825Sdim#define	WO	(CAN_WRITE)
95341825Sdim#define	RW	(CAN_READ|CAN_WRITE)
96341825Sdim
97341825Sdimextern	char *	add_var (struct ctl_var **, u_long, u_short);
98341825Sdimextern	void	free_varlist (struct ctl_var *);
99341825Sdimextern	void	set_var (struct ctl_var **, const char *, u_long, u_short);
100283625Sdimextern	void	set_sys_var (const char *, u_long, u_short);
101341825Sdimextern	const char *	get_ext_sys_var(const char *tag);
102341825Sdim
103341825Sdim/* ntp_io.c */
104341825Sdimtypedef struct interface_info {
105283625Sdim	endpt *	ep;
106341825Sdim	u_char	action;
107341825Sdim} interface_info_t;
108353358Sdim
109353358Sdimtypedef void	(*interface_receiver_t)	(void *, interface_info_t *);
110341825Sdim
111283625Sdimextern	void	interface_enumerate	(interface_receiver_t, void *);
112283625Sdimextern	endpt *	getinterface		(sockaddr_u *, u_int32);
113283625Sdimextern	endpt *	select_peerinterface	(struct peer *, sockaddr_u *,
114283625Sdim					 endpt *);
115283625Sdimextern	endpt *	findinterface		(sockaddr_u *);
116283625Sdimextern	endpt *	findbcastinter		(sockaddr_u *);
117283625Sdimextern	void	enable_broadcast	(endpt *, sockaddr_u *);
118283625Sdimextern	void	enable_multicast_if	(endpt *, sockaddr_u *);
119283625Sdimextern	void	interface_update	(interface_receiver_t, void *);
120283625Sdim#ifndef HAVE_IO_COMPLETION_PORT
121283625Sdimextern  void    io_handler              (void);
122283625Sdim#endif
123283625Sdimextern	void	init_io 	(void);
124283625Sdimextern	void	io_open_sockets	(void);
125283625Sdimextern	void	io_clr_stats	(void);
126283625Sdimextern	void	io_setbclient	(void);
127283625Sdimextern	void	io_unsetbclient	(void);
128283625Sdimextern	void	io_multicast_add(sockaddr_u *);
129283625Sdimextern	void	io_multicast_del(sockaddr_u *);
130283625Sdimextern	void	sendpkt 	(sockaddr_u *, struct interface *, int, struct pkt *, int);
131283625Sdim#ifdef DEBUG
132283625Sdimextern	void	collect_timing  (struct recvbuf *, const char *, int, l_fp *);
133283625Sdim#endif
134283625Sdim#ifdef HAVE_SIGNALED_IO
135360784Sdimextern	void	wait_for_signal		(void);
136360784Sdimextern	void	unblock_io_and_alarm	(void);
137360784Sdimextern	void	block_io_and_alarm	(void);
138283625Sdim# define	UNBLOCK_IO_AND_ALARM()	unblock_io_and_alarm()
139341825Sdim# define	BLOCK_IO_AND_ALARM()	block_io_and_alarm()
140341825Sdim#else
141341825Sdim# define	UNBLOCK_IO_AND_ALARM()	do {} while (0)
142341825Sdim# define	BLOCK_IO_AND_ALARM()	do {} while (0)
143341825Sdim#endif
144341825Sdim#define		latoa(pif)	localaddrtoa(pif)
145341825Sdimextern const char * localaddrtoa(endpt *);
146341825Sdim
147341825Sdim/* ntp_loopfilter.c */
148341825Sdimextern	void	init_loopfilter(void);
149341825Sdimextern	int 	local_clock(struct peer *, double);
150341825Sdimextern	void	adj_host_clock(void);
151341825Sdimextern	void	loop_config(int, double);
152341825Sdimextern	void	select_loop(int);
153341825Sdimextern	void	huffpuff(void);
154341825Sdimextern	u_long	sys_clocktime;
155341825Sdimextern	u_int	sys_tai;
156341825Sdimextern 	int	freq_cnt;
157341825Sdim
158327952Sdim/* ntp_monitor.c */
159341825Sdim#define MON_HASH_SIZE		((size_t)1U << mon_hash_bits)
160341825Sdim#define MON_HASH_MASK		(MON_HASH_SIZE - 1)
161341825Sdim#define	MON_HASH(addr)		(sock_hash(addr) & MON_HASH_MASK)
162341825Sdimextern	void	init_mon	(void);
163341825Sdimextern	void	mon_start	(int);
164327952Sdimextern	void	mon_stop	(int);
165341825Sdimextern	u_short	ntp_monitor	(struct recvbuf *, u_short);
166353358Sdimextern	void	mon_clearinterface(endpt *interface);
167327952Sdim
168283625Sdim/* ntp_peer.c */
169283625Sdimextern	void	init_peer	(void);
170321369Sdimextern	struct peer *findexistingpeer(sockaddr_u *, const char *,
171321369Sdim				      struct peer *, int, u_char);
172321369Sdimextern	struct peer *findpeer	(struct recvbuf *, int, int *);
173321369Sdimextern	struct peer *findpeerbyassoc(associd_t);
174327952Sdimextern  void	set_peerdstadr	(struct peer *, endpt *);
175327952Sdimextern	struct peer *newpeer	(sockaddr_u *, const char *,
176327952Sdim				 endpt *, u_char, u_char,
177327952Sdim				 u_char, u_char, u_int, u_char, u_int32,
178327952Sdim				 keyid_t, const char *);
179327952Sdimextern	void	peer_all_reset	(void);
180327952Sdimextern	void	peer_clr_stats	(void);
181327952Sdimextern	struct peer *peer_config(sockaddr_u *, const char *,
182327952Sdim				 endpt *, u_char, u_char,
183327952Sdim				 u_char, u_char, u_int, u_int32,
184327952Sdim				 keyid_t, const char *);
185327952Sdimextern	void	peer_reset	(struct peer *);
186327952Sdimextern	void	refresh_all_peerinterfaces(void);
187327952Sdimextern	void	unpeer		(struct peer *);
188327952Sdimextern	void	clear_all	(void);
189327952Sdimextern	int	score_all	(struct peer *);
190283625Sdimextern	struct peer *findmanycastpeer(struct recvbuf *);
191283625Sdimextern	void	peer_cleanup	(void);
192283625Sdim
193283625Sdim/* ntp_crypto.c */
194283625Sdim#ifdef AUTOKEY
195283625Sdimextern	int	crypto_recv	(struct peer *, struct recvbuf *);
196283625Sdimextern	int	crypto_xmit	(struct peer *, struct pkt *,
197283625Sdim				    struct recvbuf *, int,
198283625Sdim				    struct exten *, keyid_t);
199283625Sdimextern	keyid_t	session_key	(sockaddr_u *, sockaddr_u *, keyid_t,
200283625Sdim				    keyid_t, u_long);
201283625Sdimextern	int	make_keylist	(struct peer *, struct interface *);
202283625Sdimextern	void	key_expire	(struct peer *);
203283625Sdimextern	void	crypto_update	(void);
204283625Sdimextern	void	crypto_update_taichange(void);
205283625Sdimextern	void	crypto_config	(int, char *);
206283625Sdimextern	void	crypto_setup	(void);
207283625Sdimextern	u_int	crypto_ident	(struct peer *);
208309124Sdimextern	struct exten *crypto_args (struct peer *, u_int, associd_t, char *);
209309124Sdimextern	int	crypto_public	(struct peer *, u_char *, u_int);
210283625Sdimextern	void	value_free	(struct value *);
211283625Sdimextern	char	*iffpar_file;
212327952Sdimextern	EVP_PKEY *iffpar_pkey;
213283625Sdimextern	char	*gqpar_file;
214283625Sdimextern	EVP_PKEY *gqpar_pkey;
215283625Sdimextern	char	*mvpar_file;
216283625Sdimextern	EVP_PKEY *mvpar_pkey;
217283625Sdimextern struct value tai_leap;
218283625Sdim#endif	/* AUTOKEY */
219283625Sdim
220283625Sdim/* ntp_proto.c */
221283625Sdimextern	void	transmit	(struct peer *);
222283625Sdimextern	void	receive 	(struct recvbuf *);
223283625Sdimextern	void	peer_clear	(struct peer *, const char *);
224341825Sdimextern	void 	process_packet	(struct peer *, struct pkt *, u_int);
225283625Sdimextern	void	clock_select	(void);
226283625Sdimextern	void	set_sys_leap	(u_char);
227283625Sdim
228283625Sdimextern	u_long	leapsec;	/* seconds to next leap (proximity class) */
229283625Sdimextern  int     leapdif;        /* TAI difference step at next leap second*/
230341825Sdimextern	int	sys_orphan;
231341825Sdimextern	double	sys_mindisp;
232283625Sdimextern	double	sys_maxdist;
233283625Sdim
234309124Sdimextern	char	*sys_ident;	/* identity scheme */
235283625Sdimextern	void	poll_update	(struct peer *, u_char);
236283625Sdim
237341825Sdimextern	void	clear		(struct peer *);
238283625Sdimextern	void	clock_filter	(struct peer *, double, double, double);
239360784Sdimextern	void	init_proto	(void);
240360784Sdimextern	void	set_sys_tick_precision(double);
241283625Sdimextern	void	proto_config	(int, u_long, double, sockaddr_u *);
242283625Sdimextern	void	proto_clr_stats (void);
243283625Sdim
244341825Sdim/* ntp_refclock.c */
245341825Sdim#ifdef	REFCLOCK
246283625Sdimextern	int	refclock_newpeer (struct peer *);
247283625Sdimextern	void	refclock_unpeer (struct peer *);
248283625Sdimextern	void	refclock_receive (struct peer *);
249283625Sdimextern	void	refclock_transmit (struct peer *);
250283625Sdimextern	void	init_refclock	(void);
251283625Sdim#endif	/* REFCLOCK */
252283625Sdim
253283625Sdim/* ntp_request.c */
254283625Sdimextern	void	init_request	(void);
255283625Sdimextern	void	process_private (struct recvbuf *, int);
256283625Sdimextern	void	reset_auth_stats(void);
257341825Sdim
258341825Sdim/* ntp_restrict.c */
259283625Sdimextern	void	init_restrict	(void);
260283625Sdimextern	u_short	restrictions	(sockaddr_u *);
261309124Sdimextern	void	hack_restrict	(int, sockaddr_u *, sockaddr_u *,
262309124Sdim				 u_short, u_short, u_long);
263283625Sdimextern	void	restrict_source	(sockaddr_u *, int, u_long);
264283625Sdim
265283625Sdim/* ntp_timer.c */
266327952Sdimextern	void	init_timer	(void);
267309124Sdimextern	void	reinit_timer	(void);
268283625Sdimextern	void	timer		(void);
269283625Sdimextern	void	timer_clr_stats (void);
270283625Sdimextern	void	timer_interfacetimeout (u_long);
271283625Sdimextern	volatile int interface_interval;
272283625Sdimextern	u_long	orphwait;		/* orphan wait time */
273309124Sdim#ifdef AUTOKEY
274309124Sdimextern	char	*sys_hostname;	/* host name */
275283625Sdimextern	char	*sys_groupname;	/* group name */
276283625Sdimextern	char	*group_name;	/* group name */
277283625Sdimextern	u_long	sys_revoke;	/* keys revoke timeout */
278283625Sdimextern	u_long	sys_automax;	/* session key timeout */
279283625Sdim#endif	/* AUTOKEY */
280283625Sdim
281283625Sdim/* ntp_util.c */
282283625Sdimextern	void	init_util	(void);
283283625Sdimextern	void	write_stats	(void);
284283625Sdimextern	void	stats_config	(int, const char *);
285283625Sdimextern	void	record_peer_stats (sockaddr_u *, int, double, double, double, double);
286283625Sdimextern	void	record_proto_stats (char *);
287283625Sdimextern	void	record_loop_stats (double, double, double, double, int);
288283625Sdimextern	void	record_clock_stats (sockaddr_u *, const char *);
289283625Sdimextern	int	mprintf_clock_stats(sockaddr_u *, const char *, ...)
290283625Sdim			NTP_PRINTF(2, 3);
291283625Sdimextern	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 ppoll, int precision, double root_delay, double root_dispersion, u_int32 refid);
292283625Sdimextern	void	check_leap_file	(int is_daily_check, u_int32 ntptime, const time_t * systime);
293283625Sdimextern	void	record_crypto_stats (sockaddr_u *, const char *);
294283625Sdim#ifdef DEBUG
295283625Sdimextern	void	record_timing_stats (const char *);
296283625Sdim#endif
297283625Sdimextern	char *	fstostr(time_t);	/* NTP timescale seconds */
298283625Sdim
299283625Sdim/* ntpd.c */
300283625Sdimextern	void	parse_cmdline_opts(int *, char ***);
301283625Sdim/*
302283625Sdim * Signals we catch for debugging.
303341825Sdim */
304283625Sdim#define MOREDEBUGSIG	SIGUSR1
305283625Sdim#define LESSDEBUGSIG	SIGUSR2
306283625Sdim/*
307309124Sdim * Signals which terminate us gracefully.
308309124Sdim */
309283625Sdim#ifndef SYS_WINNT
310283625Sdim# define SIGDIE1	SIGHUP
311283625Sdim# define SIGDIE2	SIGINT
312283625Sdim# define SIGDIE3	SIGQUIT
313283625Sdim# define SIGDIE4	SIGTERM
314283625Sdim#endif /* SYS_WINNT */
315309124Sdim
316283625Sdim
317283625Sdim/*
318286684Sdim * Last half: ntpd variables
319321369Sdim * -------------------------
320283625Sdim */
321309124Sdim
322283625Sdim/* ntp_config.c */
323283625Sdimextern char const *	progname;
324309124Sdimextern char	*sys_phone[];		/* ACTS phone numbers */
325309124Sdim#if defined(HAVE_SCHED_SETSCHEDULER)
326309124Sdimextern int	config_priority_override;
327283625Sdimextern int	config_priority;
328283625Sdim#endif
329283625Sdimextern char *ntp_signd_socket;
330283625Sdimextern struct config_tree_tag *cfg_tree_history;
331283625Sdim
332283625Sdim#ifdef BC_LIST_FRAMEWORK_NOT_YET_USED
333283625Sdim/*
334283625Sdim * backwards compatibility flags
335283625Sdim */
336283625Sdimtypedef struct bc_entry_tag {
337283625Sdim	int	token;
338283625Sdim	int	enabled;
339283625Sdim} bc_entry;
340283625Sdim
341283625Sdimextern bc_entry bc_list[];
342283625Sdim#endif
343283625Sdim
344283625Sdim/* ntp_control.c */
345283625Sdimextern int	num_ctl_traps;
346283625Sdimextern keyid_t	ctl_auth_keyid;		/* keyid used for authenticating write requests */
347283625Sdim
348283625Sdim/*
349283625Sdim * Statistic counters to keep track of requests and responses.
350283625Sdim */
351283625Sdimextern u_long	ctltimereset;		/* time stats reset */
352283625Sdimextern u_long	numctlreq;		/* number of requests we've received */
353283625Sdimextern u_long	numctlbadpkts;		/* number of bad control packets */
354283625Sdimextern u_long	numctlresponses; 	/* number of resp packets sent with data */
355283625Sdimextern u_long	numctlfrags; 		/* number of fragments sent */
356283625Sdimextern u_long	numctlerrors;		/* number of error responses sent */
357283625Sdimextern u_long	numctltooshort;		/* number of too short input packets */
358283625Sdimextern u_long	numctlinputresp; 	/* number of responses on input */
359283625Sdimextern u_long	numctlinputfrag; 	/* number of fragments on input */
360283625Sdimextern u_long	numctlinputerr;		/* number of input pkts with err bit set */
361283625Sdimextern u_long	numctlbadoffset; 	/* number of input pkts with nonzero offset */
362283625Sdimextern u_long	numctlbadversion;	/* number of input pkts with unknown version */
363283625Sdimextern u_long	numctldatatooshort;	/* data too short for count */
364283625Sdimextern u_long	numctlbadop; 		/* bad op code found in packet */
365283625Sdimextern u_long	numasyncmsgs;		/* number of async messages we've sent */
366283625Sdim
367321369Sdim/*
368286684Sdim * Other statistics of possible interest
369283625Sdim */
370321369Sdimextern volatile u_long packets_dropped;	/* total number of packets dropped on reception */
371286684Sdimextern volatile u_long packets_ignored;	/* packets received on wild card interface */
372321369Sdimextern volatile u_long packets_received;/* total number of packets received */
373321369Sdimextern u_long	packets_sent;		/* total number of packets sent */
374321369Sdimextern u_long	packets_notsent; 	/* total number of packets which couldn't be sent */
375321369Sdim
376283625Sdimextern volatile u_long handler_calls;	/* number of calls to interrupt handler */
377283625Sdimextern volatile u_long handler_pkts;	/* number of pkts received by handler */
378283625Sdimextern u_long	io_timereset;		/* time counters were reset */
379283625Sdim
380283625Sdim/* ntp_io.c */
381283625Sdimextern  int	disable_dynamic_updates;
382283625Sdimextern u_int	sys_ifnum;		/* next .ifnum to assign */
383283625Sdimextern endpt *	any_interface;		/* IPv4 wildcard */
384283625Sdimextern endpt *	any6_interface;		/* IPv6 wildcard */
385283625Sdimextern endpt *	loopback_interface;	/* IPv4 loopback for refclocks */
386283625Sdimextern endpt *	ep_list;		/* linked list */
387283625Sdim
388283625Sdim/* ntp_loopfilter.c */
389283625Sdimextern double	drift_comp;		/* clock frequency (s/s) */
390283625Sdimextern double	clock_stability;	/* clock stability (s/s) */
391283625Sdimextern double	clock_max_back;		/* max backward offset before step (s) */
392283625Sdimextern double	clock_max_fwd;		/* max forward offset before step (s) */
393283625Sdimextern double	clock_panic;		/* max offset before panic (s) */
394283625Sdimextern double	clock_phi;		/* dispersion rate (s/s) */
395283625Sdimextern double	clock_minstep;		/* step timeout (s) */
396286684Sdimextern double	clock_codec;		/* codec frequency */
397286684Sdim#ifdef KERNEL_PLL
398283625Sdimextern int	pll_status;		/* status bits for kernel pll */
399283625Sdim#endif /* KERNEL_PLL */
400283625Sdim
401283625Sdim/*
402283625Sdim * Clock state machine control flags
403283625Sdim */
404283625Sdimextern int	ntp_enable;		/* clock discipline enabled */
405283625Sdimextern int	pll_control;		/* kernel support available */
406283625Sdimextern int	kern_enable;		/* kernel support enabled */
407283625Sdimextern int	hardpps_enable;		/* kernel PPS discipline enabled */
408283625Sdimextern int	ext_enable;		/* external clock enabled */
409283625Sdimextern int	cal_enable;		/* refclock calibrate enable */
410283625Sdimextern int	allow_panic;		/* allow panic correction (-g) */
411309124Sdimextern int	enable_panic_check;	/* Can we check allow_panic's state? */
412309124Sdimextern int	force_step_once;	/* always step time once at startup (-G) */
413283625Sdimextern int	mode_ntpdate;		/* exit on first clock set (-q) */
414283625Sdimextern int	peer_ntpdate;		/* count of ntpdate peers */
415283625Sdim
416283625Sdim/*
417283625Sdim * Clock state machine variables
418283625Sdim */
419283625Sdimextern u_char	sys_poll;		/* system poll interval (log2 s) */
420283625Sdimextern int	state;			/* clock discipline state */
421327952Sdimextern int	tc_counter;		/* poll-adjust counter */
422309124Sdimextern u_long	last_time;		/* time of last clock update (s) */
423309124Sdimextern double	last_offset;		/* last clock offset (s) */
424283625Sdimextern u_char	allan_xpt;		/* Allan intercept (log2 s) */
425283625Sdimextern double	clock_jitter;		/* clock jitter (s) */
426283625Sdimextern double	sys_offset;		/* system offset (s) */
427341825Sdimextern double	sys_jitter;		/* system jitter (s) */
428283625Sdim
429283625Sdim/* ntp_monitor.c */
430283625Sdimextern u_char	mon_hash_bits;		/* log2 size of hash table */
431283625Sdimextern mon_entry ** mon_hash;		/* MRU hash table */
432283625Sdimextern mon_entry mon_mru_list;		/* mru listhead */
433283625Sdimextern u_int	mon_enabled;		/* MON_OFF (0) or other MON_* */
434283625Sdimextern u_int	mru_alloc;		/* mru list + free list count */
435283625Sdimextern u_int	mru_entries;		/* mru list count */
436283625Sdimextern u_int	mru_peakentries;	/* highest mru_entries */
437283625Sdimextern u_int	mru_initalloc;		/* entries to preallocate */
438283625Sdimextern u_int	mru_incalloc;		/* allocation batch factor */
439283625Sdimextern u_int	mru_mindepth;		/* preempt above this */
440283625Sdimextern int	mru_maxage;		/* for entries older than */
441283625Sdimextern u_int	mru_maxdepth; 		/* MRU size hard limit */
442283625Sdimextern int	mon_age;		/* preemption limit */
443283625Sdim
444283625Sdim/* ntp_peer.c */
445283625Sdimextern struct peer *peer_hash[NTP_HASH_SIZE];	/* peer hash table */
446283625Sdimextern int	peer_hash_count[NTP_HASH_SIZE];	/* count of in each bucket */
447283625Sdimextern struct peer *assoc_hash[NTP_HASH_SIZE];	/* association ID hash table */
448283625Sdimextern int	assoc_hash_count[NTP_HASH_SIZE];/* count of in each bucket */
449283625Sdimextern struct peer *peer_list;		/* peer structures list */
450283625Sdimextern int	peer_count;		/* count in peer_list */
451283625Sdimextern int	peer_free_count;	/* count in peer_free */
452283625Sdim
453283625Sdim/*
454283625Sdim * Miscellaneous statistic counters which may be queried.
455283625Sdim */
456309124Sdimextern u_long	peer_timereset;		/* time stat counters were zeroed */
457309124Sdimextern u_long	findpeer_calls;		/* number of calls to findpeer */
458283625Sdimextern u_long	assocpeer_calls;	/* number of calls to findpeerbyassoc */
459283625Sdimextern u_long	peer_allocations;	/* number of allocations from the free list */
460283625Sdimextern u_long	peer_demobilizations;	/* number of structs freed to free list */
461283625Sdimextern int	total_peer_structs;	/* number of peer structs in circulation */
462283625Sdimextern int	peer_associations;	/* mobilized associations */
463283625Sdimextern int	peer_preempt;		/* preemptable associations */
464283625Sdim
465309124Sdim/* ntp_proto.c */
466309124Sdim/*
467309124Sdim * System variables are declared here.	See Section 3.2 of the
468309124Sdim * specification.
469283625Sdim */
470283625Sdimextern u_char	sys_leap;		/* system leap indicator */
471341825Sdimextern u_char	sys_stratum;		/* system stratum */
472283625Sdimextern s_char	sys_precision;		/* local clock precision */
473283625Sdimextern double	sys_rootdelay;		/* roundtrip delay to primary source */
474283625Sdimextern double	sys_rootdisp;		/* dispersion to primary source */
475283625Sdimextern u_int32	sys_refid;		/* reference id */
476283625Sdimextern l_fp	sys_reftime;		/* last update time */
477283625Sdimextern struct peer *sys_peer;		/* current peer */
478283625Sdim
479283625Sdim/*
480283625Sdim * Nonspecified system state variables.
481283625Sdim */
482283625Sdimextern int	sys_bclient;		/* we set our time to broadcasts */
483283625Sdimextern double	sys_bdelay; 		/* broadcast client default delay */
484283625Sdimextern int	sys_authenticate;	/* requre authentication for config */
485283625Sdimextern l_fp	sys_authdelay;		/* authentication delay */
486283625Sdimextern u_char	sys_bcpollbstep;	/* broadcast poll backstep gate */
487283625Sdimextern u_long 	sys_epoch;		/* last clock update time */
488283625Sdimextern keyid_t	sys_private;		/* private value for session seed */
489283625Sdimextern int	sys_manycastserver;	/* respond to manycast client pkts */
490283625Sdimextern int	sys_minclock;		/* minimum survivors */
491283625Sdimextern int	sys_minsane;		/* minimum candidates */
492283625Sdimextern int	sys_floor;		/* cluster stratum floor */
493283625Sdimextern int	sys_ceiling;		/* cluster stratum ceiling */
494283625Sdimextern u_char	sys_ttl[MAX_TTL];	/* ttl mapping vector */
495283625Sdimextern int	sys_ttlmax;		/* max ttl mapping vector index */
496283625Sdim
497283625Sdim/*
498283625Sdim * Statistics counters
499283625Sdim */
500283625Sdimextern u_long	sys_stattime;		/* time since reset */
501283625Sdimextern u_long	sys_received;		/* packets received */
502283625Sdimextern u_long	sys_processed;		/* packets for this host */
503283625Sdimextern u_long	sys_restricted;	 	/* restricted packets */
504283625Sdimextern u_long	sys_newversion;		/* current version  */
505283625Sdimextern u_long	sys_oldversion;		/* old version */
506327952Sdimextern u_long	sys_restricted;		/* access denied */
507327952Sdimextern u_long	sys_badlength;		/* bad length or format */
508283625Sdimextern u_long	sys_badauth;		/* bad authentication */
509283625Sdimextern u_long	sys_declined;		/* declined */
510353358Sdimextern u_long	sys_limitrejected;	/* rate exceeded */
511283625Sdimextern u_long	sys_kodsent;		/* KoD sent */
512283625Sdim
513283625Sdim/* ntp_request.c */
514283625Sdimextern keyid_t	info_auth_keyid;	/* keyid used to authenticate requests */
515283625Sdimextern u_long	auth_timereset;
516283625Sdim
517283625Sdim/* ntp_restrict.c */
518283625Sdimextern restrict_u *	restrictlist4;	/* IPv4 restriction list */
519283625Sdimextern restrict_u *	restrictlist6;	/* IPv6 restriction list */
520283625Sdimextern int		ntp_minpkt;
521327952Sdimextern u_char		ntp_minpoll;
522327952Sdim
523283625Sdim/* ntp_scanner.c */
524341825Sdimextern u_int32		conf_file_sum;	/* Simple sum of characters */
525283625Sdim
526283625Sdim/* ntp_signd.c */
527283625Sdim#ifdef HAVE_NTP_SIGND
528283625Sdimextern void send_via_ntp_signd(struct recvbuf *, int, keyid_t, int,
529283625Sdim			       struct pkt *);
530283625Sdim#endif
531283625Sdim
532283625Sdim/* ntp_timer.c */
533283625Sdimextern volatile int alarm_flag;		/* alarm flag */
534283625Sdimextern volatile u_long alarm_overflow;
535283625Sdimextern u_long	current_time;		/* seconds since startup */
536283625Sdimextern u_long	timer_timereset;
537283625Sdimextern u_long	timer_overflows;
538283625Sdimextern u_long	timer_xmtcalls;
539283625Sdimextern int	leap_sec_in_progress;
540283625Sdim#ifdef LEAP_SMEAR
541283625Sdimextern struct leap_smear_info leap_smear;
542283625Sdimextern int	leap_smear_intv;
543283625Sdim#endif
544283625Sdim#ifdef SYS_WINNT
545341825SdimHANDLE WaitableTimerHandle;
546341825Sdim#endif
547283625Sdim
548283625Sdim/* ntp_util.c */
549283625Sdimextern	char	statsdir[MAXFILENAME];
550283625Sdimextern	int	stats_control;		/* write stats to fileset? */
551283625Sdimextern	int	stats_write_period;	/* # of seconds between writes. */
552283625Sdimextern	double	stats_write_tolerance;
553321369Sdimextern	double	wander_threshold;
554321369Sdim
555321369Sdim/* ntpd.c */
556283625Sdimextern	int	nofork;		/* no-fork flag */
557321369Sdimextern	int	initializing;	/* initializing flag */
558283625Sdim#ifdef HAVE_DROPROOT
559283625Sdimextern	int	droproot;	/* flag: try to drop root privileges after startup */
560283625Sdimextern	int	root_dropped;	/* root has been dropped */
561283625Sdimextern char *user;		/* user to switch to */
562283625Sdimextern char *group;		/* group to switch to */
563341825Sdimextern const char *chrootdir;	/* directory to chroot() to */
564341825Sdim#endif
565341825Sdim#ifdef HAVE_WORKING_FORK
566341825Sdimextern	int	waitsync_fd_to_close;	/* -w/--wait-sync */
567341825Sdim#endif
568341825Sdim
569341825Sdim/* ntservice.c */
570341825Sdim#ifdef SYS_WINNT
571341825Sdimextern int accept_wildcard_if_for_winnt;
572341825Sdim#endif
573360784Sdim
574360784Sdim/* refclock_conf.c */
575360784Sdim#ifdef REFCLOCK
576341825Sdim/* refclock configuration table */
577341825Sdimextern struct refclock * const refclock_conf[];
578341825Sdimextern u_char	num_refclock_conf;
579341825Sdim#endif
580341825Sdim
581341825Sdim