xref: /netbsd-src/external/bsd/ntp/dist/include/ntpd.h (revision 9e9fa66ad400fe02341b89216c5270e23a212d33)
1*9e9fa66aSchristos /*	$NetBSD: ntpd.h,v 1.14 2024/10/01 20:59:51 christos Exp $	*/
2abb0f93cSkardel 
3abb0f93cSkardel /*
42950cc38Schristos  * ntpd.h - Prototypes and external variables for ntpd.
52950cc38Schristos  *
62950cc38Schristos  * Note the first half is primarily function prototypes, type
72950cc38Schristos  * declarations, and preprocessor macros, with variables declared
82950cc38Schristos  * primarily in the second half.
92950cc38Schristos  *
102950cc38Schristos  * Each half is further divided into sections for each source file.
11abb0f93cSkardel  */
12abb0f93cSkardel 
13abb0f93cSkardel #include "ntp.h"
142950cc38Schristos #include "ntp_stdlib.h"
152950cc38Schristos #include "ntp_syslog.h"
16abb0f93cSkardel #include "ntp_debug.h"
173123f114Skardel #include "ntp_syslog.h"
18abb0f93cSkardel #include "ntp_select.h"
19abb0f93cSkardel #include "ntp_malloc.h"
20abb0f93cSkardel #include "ntp_refclock.h"
212950cc38Schristos #include "ntp_intres.h"
22abb0f93cSkardel #include "recvbuff.h"
23abb0f93cSkardel 
242950cc38Schristos /*
252950cc38Schristos  * First half: ntpd types, functions, macros
262950cc38Schristos  * -----------------------------------------
272950cc38Schristos  */
28abb0f93cSkardel 
292950cc38Schristos /*
302950cc38Schristos  * macro for debugging output - cut down on #ifdef pollution.
312950cc38Schristos  *
322950cc38Schristos  * DPRINTF() is for use by ntpd only, and compiles away to nothing
332950cc38Schristos  * without DEBUG (configure --disable-debugging).
342950cc38Schristos  *
352950cc38Schristos  * TRACE() is similar for libntp and utilities, which retain full
362950cc38Schristos  * debug capability even when compiled without DEBUG.
372950cc38Schristos  *
382950cc38Schristos  * The calling convention is not attractive:
392950cc38Schristos  *     DPRINTF(debuglevel, (fmt, ...));
402950cc38Schristos  *     DPRINTF(2, ("shows #ifdef DEBUG and if debug >= %d\n", 2));
412950cc38Schristos  */
422950cc38Schristos #ifdef DEBUG
432950cc38Schristos # define DPRINTF(lvl, arg)				\
442950cc38Schristos 	do { 						\
452950cc38Schristos 		if (debug >= (lvl))			\
462950cc38Schristos 			mprintf arg;			\
472950cc38Schristos 	} while (0)
482950cc38Schristos #else
492950cc38Schristos # define DPRINTF(lvl, arg)	do {} while (0)
502950cc38Schristos #endif
512950cc38Schristos 
52eabc0478Schristos /* clear bitflag only on DEBUG builds */
53eabc0478Schristos #ifdef DEBUG
54eabc0478Schristos # define CLEAR_BIT_IF_DEBUG(bit, flags)			\
55eabc0478Schristos 	do {						\
56eabc0478Schristos 		(flags) &= ~(bit);			\
57eabc0478Schristos 	} while (FALSE)
58eabc0478Schristos #else
59eabc0478Schristos # define CLEAR_BIT_IF_DEBUG(bit, flags)			\
60eabc0478Schristos 	do {} while (FALSE)
61eabc0478Schristos #endif
62eabc0478Schristos 
632950cc38Schristos 
642950cc38Schristos /* nt_clockstuff.c */
652950cc38Schristos #ifdef SYS_WINNT
662950cc38Schristos extern	void	win_time_stepped(void);
672950cc38Schristos #endif
682950cc38Schristos 
692950cc38Schristos /* ntp_config.c */
70abb0f93cSkardel #define	TAI_1972	10	/* initial TAI offset (s) */
71abb0f93cSkardel extern	char	*keysdir;	/* crypto keys and leaptable directory */
72abb0f93cSkardel extern	char *	saveconfigdir;	/* ntpq saveconfig output directory */
73abb0f93cSkardel 
74abb0f93cSkardel extern	void	getconfig	(int, char **);
75abb0f93cSkardel extern	void	ctl_clr_stats	(void);
76eabc0478Schristos extern	int	ctlclrtrap	(sockaddr_u *, endpt *, int);
77abb0f93cSkardel extern	u_short ctlpeerstatus	(struct peer *);
78eabc0478Schristos extern	int	ctlsettrap	(sockaddr_u *, endpt *, int, int);
79abb0f93cSkardel extern	u_short ctlsysstatus	(void);
80abb0f93cSkardel extern	void	init_control	(void);
81abb0f93cSkardel extern	void	process_control (struct recvbuf *, int);
82abb0f93cSkardel extern	void	report_event	(int, struct peer *, const char *);
83eabc0478Schristos extern	int	mprintf_event	(int evcode, struct peer *p,
84eabc0478Schristos 				 const char *fmt, ...) NTP_PRINTF(3, 4);
85abb0f93cSkardel 
86abb0f93cSkardel /* ntp_control.c */
87abb0f93cSkardel /*
88abb0f93cSkardel  * Structure for translation tables between internal system
89abb0f93cSkardel  * variable indices and text format.
90abb0f93cSkardel  */
91abb0f93cSkardel struct ctl_var {
92abb0f93cSkardel 	u_short code;
93abb0f93cSkardel 	u_short flags;
94e19314b7Schristos 	const char *text;
95abb0f93cSkardel };
96abb0f93cSkardel /*
97abb0f93cSkardel  * Flag values
98abb0f93cSkardel  */
99abb0f93cSkardel #define	CAN_READ	0x01
100abb0f93cSkardel #define	CAN_WRITE	0x02
101abb0f93cSkardel 
102abb0f93cSkardel #define DEF		0x20
103abb0f93cSkardel #define	PADDING		0x40
104abb0f93cSkardel #define	EOV		0x80
105abb0f93cSkardel 
106abb0f93cSkardel #define	RO	(CAN_READ)
107abb0f93cSkardel #define	WO	(CAN_WRITE)
108abb0f93cSkardel #define	RW	(CAN_READ|CAN_WRITE)
109abb0f93cSkardel 
110abb0f93cSkardel extern	char *	add_var (struct ctl_var **, u_long, u_short);
111abb0f93cSkardel extern	void	free_varlist (struct ctl_var *);
112abb0f93cSkardel extern	void	set_var (struct ctl_var **, const char *, u_long, u_short);
113abb0f93cSkardel extern	void	set_sys_var (const char *, u_long, u_short);
1142950cc38Schristos extern	const char *	get_ext_sys_var(const char *tag);
115abb0f93cSkardel 
116abb0f93cSkardel /* ntp_io.c */
117abb0f93cSkardel typedef struct interface_info {
1183123f114Skardel 	endpt *	ep;
119abb0f93cSkardel 	u_char	action;
120abb0f93cSkardel } interface_info_t;
121abb0f93cSkardel 
122abb0f93cSkardel typedef void	(*interface_receiver_t)	(void *, interface_info_t *);
123abb0f93cSkardel 
124abb0f93cSkardel extern	void	interface_enumerate	(interface_receiver_t, void *);
1252950cc38Schristos extern	endpt *	getinterface		(sockaddr_u *, u_int32);
1262950cc38Schristos extern	endpt *	select_peerinterface	(struct peer *, sockaddr_u *,
1272950cc38Schristos 					 endpt *);
1283123f114Skardel extern	endpt *	findinterface		(sockaddr_u *);
1293123f114Skardel extern	endpt *	findbcastinter		(sockaddr_u *);
1303123f114Skardel extern	void	enable_broadcast	(endpt *, sockaddr_u *);
1313123f114Skardel extern	void	enable_multicast_if	(endpt *, sockaddr_u *);
132abb0f93cSkardel extern	void	interface_update	(interface_receiver_t, void *);
1332950cc38Schristos #ifndef HAVE_IO_COMPLETION_PORT
1342950cc38Schristos extern	void	io_handler		(void);
135eabc0478Schristos #else
136eabc0478Schristos extern	void WINAPI ip_interface_changed(ULONG_PTR ctx);
1372950cc38Schristos #endif
138abb0f93cSkardel extern	void	init_io 	(void);
139abb0f93cSkardel extern	void	io_open_sockets	(void);
140abb0f93cSkardel extern	void	io_clr_stats	(void);
141abb0f93cSkardel extern	void	io_setbclient	(void);
142abb0f93cSkardel extern	void	io_unsetbclient	(void);
143abb0f93cSkardel extern	void	io_multicast_add(sockaddr_u *);
144abb0f93cSkardel extern	void	io_multicast_del(sockaddr_u *);
145eabc0478Schristos extern	void	sendpkt		(sockaddr_u *dest, endpt * ep, int ttl,
146eabc0478Schristos 				 struct pkt *pkt, int len);
147eabc0478Schristos extern	isc_boolean_t	is_linklocal(sockaddr_u *psau);
148eabc0478Schristos #ifdef DEBUG_TIMING
149abb0f93cSkardel extern	void	collect_timing  (struct recvbuf *, const char *, int, l_fp *);
150abb0f93cSkardel #endif
151abb0f93cSkardel #ifdef HAVE_SIGNALED_IO
152abb0f93cSkardel extern	void	wait_for_signal		(void);
153abb0f93cSkardel extern	void	unblock_io_and_alarm	(void);
154abb0f93cSkardel extern	void	block_io_and_alarm	(void);
155abb0f93cSkardel # define	UNBLOCK_IO_AND_ALARM()	unblock_io_and_alarm()
156abb0f93cSkardel # define	BLOCK_IO_AND_ALARM()	block_io_and_alarm()
157abb0f93cSkardel #else
1582950cc38Schristos # define	UNBLOCK_IO_AND_ALARM()	do {} while (0)
1592950cc38Schristos # define	BLOCK_IO_AND_ALARM()	do {} while (0)
160abb0f93cSkardel #endif
161eabc0478Schristos #define		eptoa(pif)	localaddrtoa(pif)
162eabc0478Schristos #define		latoa(pif)	eptoa(pif)
1633123f114Skardel extern const char * localaddrtoa(endpt *);
164eabc0478Schristos #ifdef DEBUG
165eabc0478Schristos extern const char * iflags_str(u_int32 iflags);
166eabc0478Schristos #endif
167eabc0478Schristos 
168abb0f93cSkardel 
169abb0f93cSkardel /* ntp_loopfilter.c */
170abb0f93cSkardel extern	void	init_loopfilter(void);
171abb0f93cSkardel extern	int 	local_clock(struct peer *, double);
172abb0f93cSkardel extern	void	adj_host_clock(void);
173abb0f93cSkardel extern	void	loop_config(int, double);
1742950cc38Schristos extern	void	select_loop(int);
175abb0f93cSkardel extern	void	huffpuff(void);
176abb0f93cSkardel extern	u_long	sys_clocktime;
177abb0f93cSkardel extern	u_int	sys_tai;
1782950cc38Schristos extern 	int	freq_cnt;
179abb0f93cSkardel 
180abb0f93cSkardel /* ntp_monitor.c */
1818b8da087Schristos #define MON_HASH_SIZE		((size_t)1U << mon_hash_bits)
1822950cc38Schristos #define MON_HASH_MASK		(MON_HASH_SIZE - 1)
1832950cc38Schristos #define	MON_HASH(addr)		(sock_hash(addr) & MON_HASH_MASK)
184abb0f93cSkardel extern	void	init_mon	(void);
185abb0f93cSkardel extern	void	mon_start	(int);
186abb0f93cSkardel extern	void	mon_stop	(int);
1872950cc38Schristos extern	u_short	ntp_monitor	(struct recvbuf *, u_short);
1882950cc38Schristos extern	void	mon_clearinterface(endpt *interface);
189abb0f93cSkardel 
190abb0f93cSkardel /* ntp_peer.c */
191abb0f93cSkardel extern	void	init_peer	(void);
1922950cc38Schristos extern	struct peer *findexistingpeer(sockaddr_u *, const char *,
1934eea345dSchristos 				      struct peer *, int, u_char, int *);
1943123f114Skardel extern	struct peer *findpeer	(struct recvbuf *, int, int *);
1952950cc38Schristos extern	struct peer *findpeerbyassoc(associd_t);
1962950cc38Schristos extern  void	set_peerdstadr	(struct peer *, endpt *);
1974eea345dSchristos extern	struct peer *newpeer	(sockaddr_u *, const char *, endpt *,
1984eea345dSchristos 				 int, u_char, u_char, u_char, u_char,
1994eea345dSchristos 				 u_int, u_char, u_int32,
2002950cc38Schristos 				 keyid_t, const char *);
201abb0f93cSkardel extern	void	peer_all_reset	(void);
202abb0f93cSkardel extern	void	peer_clr_stats	(void);
2034eea345dSchristos extern	struct peer *peer_config(sockaddr_u *, const char *, endpt *,
2044eea345dSchristos 				 int, u_char, u_char, u_char, u_char,
2054eea345dSchristos 				 u_int, u_int32,
2062950cc38Schristos 				 keyid_t, const char *);
207abb0f93cSkardel extern	void	peer_reset	(struct peer *);
208abb0f93cSkardel extern	void	refresh_all_peerinterfaces(void);
209abb0f93cSkardel extern	void	unpeer		(struct peer *);
210abb0f93cSkardel extern	void	clear_all	(void);
211abb0f93cSkardel extern	int	score_all	(struct peer *);
212abb0f93cSkardel extern	struct peer *findmanycastpeer(struct recvbuf *);
2137476e6e4Schristos extern	void	peer_cleanup	(void);
214abb0f93cSkardel 
215abb0f93cSkardel /* ntp_crypto.c */
2162950cc38Schristos #ifdef AUTOKEY
217abb0f93cSkardel extern	int	crypto_recv	(struct peer *, struct recvbuf *);
218abb0f93cSkardel extern	int	crypto_xmit	(struct peer *, struct pkt *,
219abb0f93cSkardel 				    struct recvbuf *, int,
220abb0f93cSkardel 				    struct exten *, keyid_t);
221abb0f93cSkardel extern	keyid_t	session_key	(sockaddr_u *, sockaddr_u *, keyid_t,
222abb0f93cSkardel 				    keyid_t, u_long);
223eabc0478Schristos extern	int	make_keylist	(struct peer *, endpt *);
224abb0f93cSkardel extern	void	key_expire	(struct peer *);
225abb0f93cSkardel extern	void	crypto_update	(void);
2265d681e99Schristos extern	void	crypto_update_taichange(void);
227abb0f93cSkardel extern	void	crypto_config	(int, char *);
228abb0f93cSkardel extern	void	crypto_setup	(void);
229abb0f93cSkardel extern	u_int	crypto_ident	(struct peer *);
230abb0f93cSkardel extern	struct exten *crypto_args (struct peer *, u_int, associd_t, char *);
231abb0f93cSkardel extern	int	crypto_public	(struct peer *, u_char *, u_int);
232abb0f93cSkardel extern	void	value_free	(struct value *);
233abb0f93cSkardel extern	char	*iffpar_file;
234abb0f93cSkardel extern	EVP_PKEY *iffpar_pkey;
235abb0f93cSkardel extern	char	*gqpar_file;
236abb0f93cSkardel extern	EVP_PKEY *gqpar_pkey;
237abb0f93cSkardel extern	char	*mvpar_file;
238abb0f93cSkardel extern	EVP_PKEY *mvpar_pkey;
239abb0f93cSkardel extern struct value tai_leap;
2402950cc38Schristos #endif	/* AUTOKEY */
241abb0f93cSkardel 
242abb0f93cSkardel /* ntp_proto.c */
243abb0f93cSkardel extern	void	transmit	(struct peer *);
244abb0f93cSkardel extern	void	receive 	(struct recvbuf *);
245e19314b7Schristos extern	void	peer_clear	(struct peer *, const char *);
246abb0f93cSkardel extern	void 	process_packet	(struct peer *, struct pkt *, u_int);
247abb0f93cSkardel extern	void	clock_select	(void);
2485d681e99Schristos extern	void	set_sys_leap	(u_char);
249abb0f93cSkardel 
2502950cc38Schristos extern	u_long	leapsec;	/* seconds to next leap (proximity class) */
2512950cc38Schristos extern  int	leapdif;	/* TAI difference step at next leap second */
252abb0f93cSkardel extern	int	sys_orphan;
253abb0f93cSkardel extern	double	sys_mindisp;
254abb0f93cSkardel extern	double	sys_maxdist;
255abb0f93cSkardel 
2562950cc38Schristos extern	char	*sys_ident;	/* identity scheme */
257cdfa2a7eSchristos extern	void	poll_update	(struct peer *, u_char, u_char);
258abb0f93cSkardel 
259abb0f93cSkardel extern	void	clear		(struct peer *);
260abb0f93cSkardel extern	void	clock_filter	(struct peer *, double, double, double);
261abb0f93cSkardel extern	void	init_proto	(void);
2622950cc38Schristos extern	void	set_sys_tick_precision(double);
263abb0f93cSkardel extern	void	proto_config	(int, u_long, double, sockaddr_u *);
264abb0f93cSkardel extern	void	proto_clr_stats (void);
265abb0f93cSkardel 
266abb0f93cSkardel /* ntp_refclock.c */
2672950cc38Schristos #ifdef	REFCLOCK
268abb0f93cSkardel extern	int	refclock_newpeer (struct peer *);
269abb0f93cSkardel extern	void	refclock_unpeer (struct peer *);
270abb0f93cSkardel extern	void	refclock_receive (struct peer *);
271abb0f93cSkardel extern	void	refclock_transmit (struct peer *);
272abb0f93cSkardel extern	void	init_refclock	(void);
273abb0f93cSkardel #endif	/* REFCLOCK */
274abb0f93cSkardel 
275abb0f93cSkardel /* ntp_request.c */
276abb0f93cSkardel extern	void	init_request	(void);
277abb0f93cSkardel extern	void	process_private (struct recvbuf *, int);
2782950cc38Schristos extern	void	reset_auth_stats(void);
279abb0f93cSkardel 
280abb0f93cSkardel /* ntp_restrict.c */
281abb0f93cSkardel extern	void	init_restrict	(void);
2824eea345dSchristos extern	void	restrictions	(sockaddr_u *, r4addr *);
283eabc0478Schristos extern	int/*BOOL*/hack_restrict(restrict_op op, sockaddr_u *resaddr,
284eabc0478Schristos 				 sockaddr_u *resmask, short ippeerlimit,
285eabc0478Schristos 				 u_short mflags, u_short rflags,
286eabc0478Schristos 				 u_int32 expire);
287eabc0478Schristos extern	void	restrict_source	(sockaddr_u *addr, int/*BOOL*/ remove,
288eabc0478Schristos 				 u_int32 lifetime);
289eabc0478Schristos #ifdef DEBUG
2904eea345dSchristos extern	void	dump_restricts	(void);
291eabc0478Schristos extern	const char *resop_str	(restrict_op op);
292eabc0478Schristos extern	const char *rflags_str	(u_short rflags);
293eabc0478Schristos extern	const char *mflags_str	(u_short mflags);
294eabc0478Schristos #endif
295eabc0478Schristos 
296abb0f93cSkardel 
297abb0f93cSkardel /* ntp_timer.c */
298abb0f93cSkardel extern	void	init_timer	(void);
299abb0f93cSkardel extern	void	reinit_timer	(void);
300abb0f93cSkardel extern	void	timer		(void);
301abb0f93cSkardel extern	void	timer_clr_stats (void);
302eabc0478Schristos extern	int	endpt_scan_period;	/* -U option default 301s */
303eabc0478Schristos extern	u_long	endpt_scan_timer;	/* next scan current_time */
3042950cc38Schristos extern	u_long	orphwait;		/* orphan wait time */
3052950cc38Schristos #ifdef AUTOKEY
306abb0f93cSkardel extern	char	*sys_hostname;	/* host name */
307abb0f93cSkardel extern	char	*sys_groupname;	/* group name */
308abb0f93cSkardel extern	char	*group_name;	/* group name */
309cdfa2a7eSchristos extern	u_char	sys_revoke;	/* keys revoke timeout */
310cdfa2a7eSchristos extern	u_char	sys_automax;	/* session key timeout */
3112950cc38Schristos #endif	/* AUTOKEY */
312abb0f93cSkardel 
313abb0f93cSkardel /* ntp_util.c */
314abb0f93cSkardel extern	void	init_util	(void);
315abb0f93cSkardel extern	void	write_stats	(void);
316cdfa2a7eSchristos extern	void	stats_config	(int, const char *, int optflag);
317abb0f93cSkardel extern	void	record_peer_stats (sockaddr_u *, int, double, double, double, double);
318abb0f93cSkardel extern	void	record_proto_stats (char *);
319abb0f93cSkardel extern	void	record_loop_stats (double, double, double, double, int);
320abb0f93cSkardel extern	void	record_clock_stats (sockaddr_u *, const char *);
3212950cc38Schristos extern	int	mprintf_clock_stats(sockaddr_u *, const char *, ...)
3222950cc38Schristos 					NTP_PRINTF(2, 3);
323eabc0478Schristos extern	void	record_raw_stats (sockaddr_u *srcadr, sockaddr_u *dstadr,
324eabc0478Schristos 				  l_fp *t1, l_fp *t2, l_fp *t3, l_fp *t4,
325eabc0478Schristos 				  int leap, int version, int mode,
326eabc0478Schristos 				  int stratum, int ppoll, int precision,
327eabc0478Schristos 				  double root_delay, double root_dispersion,
328eabc0478Schristos 				  u_int32 refid, int len, u_char *extra);
329ea66d795Schristos extern	void	check_leap_file	(int is_daily_check, u_int32 ntptime, const time_t * systime);
330abb0f93cSkardel extern	void	record_crypto_stats (sockaddr_u *, const char *);
331abb0f93cSkardel #ifdef DEBUG
332abb0f93cSkardel extern	void	record_timing_stats (const char *);
333eabc0478Schristos extern	void	append_flagstr(char *flagstr, size_t sz, const char *text);
334abb0f93cSkardel #endif
335abb0f93cSkardel extern	char *	fstostr(time_t);	/* NTP timescale seconds */
3362950cc38Schristos 
3372950cc38Schristos /* ntpd.c */
3382950cc38Schristos extern	void	parse_cmdline_opts(int *, char ***);
339eabc0478Schristos 
340eabc0478Schristos /* ntservice.c */
341eabc0478Schristos #ifndef SYS_WINNT
342eabc0478Schristos # define	ntservice_isup()	do {} while (FALSE)
343eabc0478Schristos #endif
344eabc0478Schristos 
3452950cc38Schristos /*
3462950cc38Schristos  * Signals we catch for debugging.
3472950cc38Schristos  */
3482950cc38Schristos #define MOREDEBUGSIG	SIGUSR1
3492950cc38Schristos #define LESSDEBUGSIG	SIGUSR2
3502950cc38Schristos /*
3512950cc38Schristos  * Signals which terminate us gracefully.
3522950cc38Schristos  */
3532950cc38Schristos #ifndef SYS_WINNT
3542950cc38Schristos # define SIGDIE1	SIGHUP
3552950cc38Schristos # define SIGDIE2	SIGINT
3562950cc38Schristos # define SIGDIE3	SIGQUIT
3572950cc38Schristos # define SIGDIE4	SIGTERM
3582950cc38Schristos #endif /* SYS_WINNT */
3592950cc38Schristos 
360abb0f93cSkardel 
361abb0f93cSkardel /*
3622950cc38Schristos  * Last half: ntpd variables
3632950cc38Schristos  * -------------------------
364abb0f93cSkardel  */
3652950cc38Schristos 
366abb0f93cSkardel /* ntp_config.c */
367abb0f93cSkardel extern char const *	progname;
368ccc794f0Schristos extern int saved_argc;
369ccc794f0Schristos extern char **saved_argv;
370abb0f93cSkardel extern char	*sys_phone[];		/* ACTS phone numbers */
371abb0f93cSkardel #if defined(HAVE_SCHED_SETSCHEDULER)
372abb0f93cSkardel extern int	config_priority_override;
373abb0f93cSkardel extern int	config_priority;
374abb0f93cSkardel #endif
375abb0f93cSkardel extern char *ntp_signd_socket;
3762950cc38Schristos extern struct config_tree_tag *cfg_tree_history;
377abb0f93cSkardel 
378abb0f93cSkardel #ifdef BC_LIST_FRAMEWORK_NOT_YET_USED
379abb0f93cSkardel /*
380abb0f93cSkardel  * backwards compatibility flags
381abb0f93cSkardel  */
382abb0f93cSkardel typedef struct bc_entry_tag {
383abb0f93cSkardel 	int	token;
384abb0f93cSkardel 	int	enabled;
385abb0f93cSkardel } bc_entry;
386abb0f93cSkardel 
387abb0f93cSkardel extern bc_entry bc_list[];
388abb0f93cSkardel #endif
389abb0f93cSkardel 
390abb0f93cSkardel /* ntp_control.c */
391abb0f93cSkardel extern int	num_ctl_traps;
392abb0f93cSkardel extern keyid_t	ctl_auth_keyid;		/* keyid used for authenticating write requests */
393abb0f93cSkardel 
394abb0f93cSkardel /*
395abb0f93cSkardel  * Statistic counters to keep track of requests and responses.
396abb0f93cSkardel  */
397abb0f93cSkardel extern u_long	ctltimereset;		/* time stats reset */
398abb0f93cSkardel extern u_long	numctlreq;		/* number of requests we've received */
399abb0f93cSkardel extern u_long	numctlbadpkts;		/* number of bad control packets */
400abb0f93cSkardel extern u_long	numctlresponses; 	/* number of resp packets sent with data */
401abb0f93cSkardel extern u_long	numctlfrags; 		/* number of fragments sent */
402abb0f93cSkardel extern u_long	numctlerrors;		/* number of error responses sent */
403abb0f93cSkardel extern u_long	numctltooshort;		/* number of too short input packets */
404abb0f93cSkardel extern u_long	numctlinputresp; 	/* number of responses on input */
405abb0f93cSkardel extern u_long	numctlinputfrag; 	/* number of fragments on input */
406abb0f93cSkardel extern u_long	numctlinputerr;		/* number of input pkts with err bit set */
407abb0f93cSkardel extern u_long	numctlbadoffset; 	/* number of input pkts with nonzero offset */
408abb0f93cSkardel extern u_long	numctlbadversion;	/* number of input pkts with unknown version */
409abb0f93cSkardel extern u_long	numctldatatooshort;	/* data too short for count */
410abb0f93cSkardel extern u_long	numctlbadop; 		/* bad op code found in packet */
411abb0f93cSkardel extern u_long	numasyncmsgs;		/* number of async messages we've sent */
412abb0f93cSkardel 
413abb0f93cSkardel /*
414abb0f93cSkardel  * Other statistics of possible interest
415abb0f93cSkardel  */
416abb0f93cSkardel extern volatile u_long packets_dropped;	/* total number of packets dropped on reception */
417abb0f93cSkardel extern volatile u_long packets_ignored;	/* packets received on wild card interface */
418abb0f93cSkardel extern volatile u_long packets_received;/* total number of packets received */
419abb0f93cSkardel extern u_long	packets_sent;		/* total number of packets sent */
420abb0f93cSkardel extern u_long	packets_notsent; 	/* total number of packets which couldn't be sent */
421abb0f93cSkardel 
422abb0f93cSkardel extern volatile u_long handler_calls;	/* number of calls to interrupt handler */
423abb0f93cSkardel extern volatile u_long handler_pkts;	/* number of pkts received by handler */
424abb0f93cSkardel extern u_long	io_timereset;		/* time counters were reset */
425abb0f93cSkardel 
4262950cc38Schristos /* ntp_io.c */
427eabc0478Schristos extern int	no_periodic_scan;	/* no periodic net addr scans */
428eabc0478Schristos extern int	scan_addrs_once;	/* no net addr rescans */
429eabc0478Schristos extern int	nonlocal_v4_addr_up;	/* should we try IPv4 pool? */
430eabc0478Schristos extern int	nonlocal_v6_addr_up;	/* should we try IPv6 pool? */
4312950cc38Schristos extern u_int	sys_ifnum;		/* next .ifnum to assign */
4323123f114Skardel extern endpt *	any_interface;		/* IPv4 wildcard */
4333123f114Skardel extern endpt *	any6_interface;		/* IPv6 wildcard */
4343123f114Skardel extern endpt *	loopback_interface;	/* IPv4 loopback for refclocks */
4352950cc38Schristos extern endpt *	ep_list;		/* linked list */
436abb0f93cSkardel 
437abb0f93cSkardel /* ntp_loopfilter.c */
438abb0f93cSkardel extern double	drift_comp;		/* clock frequency (s/s) */
439abb0f93cSkardel extern double	clock_stability;	/* clock stability (s/s) */
4407476e6e4Schristos extern double	clock_max_back;		/* max backward offset before step (s) */
4417476e6e4Schristos extern double	clock_max_fwd;		/* max forward offset before step (s) */
442abb0f93cSkardel extern double	clock_panic;		/* max offset before panic (s) */
443abb0f93cSkardel extern double	clock_phi;		/* dispersion rate (s/s) */
444abb0f93cSkardel extern double	clock_minstep;		/* step timeout (s) */
445abb0f93cSkardel extern double	clock_codec;		/* codec frequency */
446abb0f93cSkardel #ifdef KERNEL_PLL
447abb0f93cSkardel extern int	pll_status;		/* status bits for kernel pll */
448abb0f93cSkardel #endif /* KERNEL_PLL */
449abb0f93cSkardel 
450abb0f93cSkardel /*
451abb0f93cSkardel  * Clock state machine control flags
452abb0f93cSkardel  */
453abb0f93cSkardel extern int	ntp_enable;		/* clock discipline enabled */
454abb0f93cSkardel extern int	pll_control;		/* kernel support available */
455abb0f93cSkardel extern int	kern_enable;		/* kernel support enabled */
456ea66d795Schristos extern int	hardpps_enable;		/* kernel PPS discipline enabled */
457abb0f93cSkardel extern int	ext_enable;		/* external clock enabled */
458abb0f93cSkardel extern int	cal_enable;		/* refclock calibrate enable */
4597476e6e4Schristos extern int	allow_panic;		/* allow panic correction (-g) */
4608b8da087Schristos extern int	enable_panic_check;	/* Can we check allow_panic's state? */
4617476e6e4Schristos extern int	force_step_once;	/* always step time once at startup (-G) */
4627476e6e4Schristos extern int	mode_ntpdate;		/* exit on first clock set (-q) */
463abb0f93cSkardel extern int	peer_ntpdate;		/* count of ntpdate peers */
464abb0f93cSkardel 
465abb0f93cSkardel /*
466abb0f93cSkardel  * Clock state machine variables
467abb0f93cSkardel  */
468abb0f93cSkardel extern u_char	sys_poll;		/* system poll interval (log2 s) */
469abb0f93cSkardel extern int	state;			/* clock discipline state */
470abb0f93cSkardel extern int	tc_counter;		/* poll-adjust counter */
471abb0f93cSkardel extern u_long	last_time;		/* time of last clock update (s) */
472abb0f93cSkardel extern double	last_offset;		/* last clock offset (s) */
473abb0f93cSkardel extern u_char	allan_xpt;		/* Allan intercept (log2 s) */
474abb0f93cSkardel extern double	clock_jitter;		/* clock jitter (s) */
475abb0f93cSkardel extern double	sys_offset;		/* system offset (s) */
476abb0f93cSkardel extern double	sys_jitter;		/* system jitter (s) */
477abb0f93cSkardel 
478abb0f93cSkardel /* ntp_monitor.c */
4792950cc38Schristos extern u_char	mon_hash_bits;		/* log2 size of hash table */
4802950cc38Schristos extern mon_entry ** mon_hash;		/* MRU hash table */
4812950cc38Schristos extern mon_entry mon_mru_list;		/* mru listhead */
4822950cc38Schristos extern u_int	mon_enabled;		/* MON_OFF (0) or other MON_* */
4832950cc38Schristos extern u_int	mru_alloc;		/* mru list + free list count */
4842950cc38Schristos extern u_int	mru_entries;		/* mru list count */
4852950cc38Schristos extern u_int	mru_peakentries;	/* highest mru_entries */
4862950cc38Schristos extern u_int	mru_initalloc;		/* entries to preallocate */
4872950cc38Schristos extern u_int	mru_incalloc;		/* allocation batch factor */
4882950cc38Schristos extern u_int	mru_mindepth;		/* preempt above this */
4892950cc38Schristos extern int	mru_maxage;		/* for entries older than */
4902950cc38Schristos extern u_int	mru_maxdepth; 		/* MRU size hard limit */
4912950cc38Schristos extern int	mon_age;		/* preemption limit */
492abb0f93cSkardel 
493abb0f93cSkardel /* ntp_peer.c */
4942950cc38Schristos extern struct peer *peer_hash[NTP_HASH_SIZE];	/* peer hash table */
4952950cc38Schristos extern int	peer_hash_count[NTP_HASH_SIZE];	/* count of in each bucket */
4962950cc38Schristos extern struct peer *assoc_hash[NTP_HASH_SIZE];	/* association ID hash table */
4972950cc38Schristos extern int	assoc_hash_count[NTP_HASH_SIZE];/* count of in each bucket */
4982950cc38Schristos extern struct peer *peer_list;		/* peer structures list */
4992950cc38Schristos extern int	peer_count;		/* count in peer_list */
5002950cc38Schristos extern int	peer_free_count;	/* count in peer_free */
501abb0f93cSkardel 
502abb0f93cSkardel /*
503abb0f93cSkardel  * Miscellaneous statistic counters which may be queried.
504abb0f93cSkardel  */
505abb0f93cSkardel extern u_long	peer_timereset;		/* time stat counters were zeroed */
506abb0f93cSkardel extern u_long	findpeer_calls;		/* number of calls to findpeer */
507abb0f93cSkardel extern u_long	assocpeer_calls;	/* number of calls to findpeerbyassoc */
508abb0f93cSkardel extern u_long	peer_allocations;	/* number of allocations from the free list */
509abb0f93cSkardel extern u_long	peer_demobilizations;	/* number of structs freed to free list */
510abb0f93cSkardel extern int	total_peer_structs;	/* number of peer structs in circulation */
511abb0f93cSkardel extern int	peer_associations;	/* mobilized associations */
512abb0f93cSkardel extern int	peer_preempt;		/* preemptable associations */
5132950cc38Schristos 
514abb0f93cSkardel /* ntp_proto.c */
515abb0f93cSkardel /*
516abb0f93cSkardel  * System variables are declared here.	See Section 3.2 of the
517abb0f93cSkardel  * specification.
518abb0f93cSkardel  */
519abb0f93cSkardel extern u_char	sys_leap;		/* system leap indicator */
520abb0f93cSkardel extern u_char	sys_stratum;		/* system stratum */
521abb0f93cSkardel extern s_char	sys_precision;		/* local clock precision */
522abb0f93cSkardel extern double	sys_rootdelay;		/* roundtrip delay to primary source */
523abb0f93cSkardel extern double	sys_rootdisp;		/* dispersion to primary source */
524abb0f93cSkardel extern u_int32	sys_refid;		/* reference id */
525abb0f93cSkardel extern l_fp	sys_reftime;		/* last update time */
526abb0f93cSkardel extern struct peer *sys_peer;		/* current peer */
527abb0f93cSkardel 
528abb0f93cSkardel /*
529abb0f93cSkardel  * Nonspecified system state variables.
530abb0f93cSkardel  */
531abb0f93cSkardel extern int	sys_bclient;		/* we set our time to broadcasts */
532eabc0478Schristos extern int	sys_mclient;		/* we set our time to manycasts */
533abb0f93cSkardel extern double	sys_bdelay; 		/* broadcast client default delay */
534abb0f93cSkardel extern int	sys_authenticate;	/* requre authentication for config */
535abb0f93cSkardel extern l_fp	sys_authdelay;		/* authentication delay */
53603cfe0ffSchristos extern u_char	sys_bcpollbstep;	/* broadcast poll backstep gate */
5372950cc38Schristos extern u_long 	sys_epoch;		/* last clock update time */
538abb0f93cSkardel extern keyid_t	sys_private;		/* private value for session seed */
539abb0f93cSkardel extern int	sys_manycastserver;	/* respond to manycast client pkts */
540ccc794f0Schristos extern int	sys_maxclock;		/* maximum survivors */
541abb0f93cSkardel extern int	sys_minclock;		/* minimum survivors */
542abb0f93cSkardel extern int	sys_minsane;		/* minimum candidates */
543abb0f93cSkardel extern int	sys_floor;		/* cluster stratum floor */
544abb0f93cSkardel extern int	sys_ceiling;		/* cluster stratum ceiling */
545abb0f93cSkardel extern u_char	sys_ttl[MAX_TTL];	/* ttl mapping vector */
546ccc794f0Schristos extern u_int	sys_ttlmax;		/* max ttl mapping vector index */
547abb0f93cSkardel 
548abb0f93cSkardel /*
549abb0f93cSkardel  * Statistics counters
550abb0f93cSkardel  */
5514eea345dSchristos extern u_long	sys_badauth;		/* bad authentication */
5524eea345dSchristos extern u_long	sys_badlength;		/* bad length or format */
5534eea345dSchristos extern u_long	sys_declined;		/* declined */
5544eea345dSchristos extern u_long	sys_kodsent;		/* KoD sent */
5554eea345dSchristos extern u_long	sys_lamport;		/* Lamport violation */
5564eea345dSchristos extern u_long	sys_limitrejected;	/* rate exceeded */
557abb0f93cSkardel extern u_long	sys_newversion;		/* current version  */
558abb0f93cSkardel extern u_long	sys_oldversion;		/* old version */
5594eea345dSchristos extern u_long	sys_processed;		/* packets for this host */
5604eea345dSchristos extern u_long	sys_received;		/* packets received */
561abb0f93cSkardel extern u_long	sys_restricted;		/* access denied */
5624eea345dSchristos extern u_long	sys_stattime;		/* time since reset */
5634eea345dSchristos extern u_long	sys_tsrounding;		/* timestamp rounding errors */
564abb0f93cSkardel 
565abb0f93cSkardel /* ntp_request.c */
566abb0f93cSkardel extern keyid_t	info_auth_keyid;	/* keyid used to authenticate requests */
5672950cc38Schristos extern u_long	auth_timereset;
568abb0f93cSkardel 
569abb0f93cSkardel /* ntp_restrict.c */
570*9e9fa66aSchristos extern struct restrict_4 *	restrictlist4;	/* IPv4 restriction list */
571*9e9fa66aSchristos extern struct restrict_6 *	restrictlist6;	/* IPv6 restriction list */
572abb0f93cSkardel extern int		ntp_minpkt;
5732950cc38Schristos extern u_char		ntp_minpoll;
5742950cc38Schristos 
5752950cc38Schristos /* ntp_scanner.c */
5762950cc38Schristos extern u_int32		conf_file_sum;	/* Simple sum of characters */
5772950cc38Schristos 
5782950cc38Schristos /* ntp_signd.c */
5792950cc38Schristos #ifdef HAVE_NTP_SIGND
5802950cc38Schristos extern void send_via_ntp_signd(struct recvbuf *, int, keyid_t, int,
5812950cc38Schristos 			       struct pkt *);
5822950cc38Schristos #endif
583abb0f93cSkardel 
584abb0f93cSkardel /* ntp_timer.c */
585abb0f93cSkardel extern volatile int alarm_flag;		/* alarm flag */
586abb0f93cSkardel extern volatile u_long alarm_overflow;
5872950cc38Schristos extern u_long	current_time;		/* seconds since startup */
588abb0f93cSkardel extern u_long	timer_timereset;
589abb0f93cSkardel extern u_long	timer_overflows;
590abb0f93cSkardel extern u_long	timer_xmtcalls;
5915d681e99Schristos extern int	leap_sec_in_progress;
5925d681e99Schristos #ifdef LEAP_SMEAR
5935d681e99Schristos extern struct leap_smear_info leap_smear;
5945d681e99Schristos extern int	leap_smear_intv;
5955d681e99Schristos #endif
5962950cc38Schristos #ifdef SYS_WINNT
5972950cc38Schristos HANDLE WaitableTimerHandle;
5982950cc38Schristos #endif
599abb0f93cSkardel 
600abb0f93cSkardel /* ntp_util.c */
6012950cc38Schristos extern	char	statsdir[MAXFILENAME];
602abb0f93cSkardel extern	int	stats_control;		/* write stats to fileset? */
603abb0f93cSkardel extern	int	stats_write_period;	/* # of seconds between writes. */
604abb0f93cSkardel extern	double	stats_write_tolerance;
6052950cc38Schristos extern	double	wander_threshold;
606abb0f93cSkardel 
607abb0f93cSkardel /* ntpd.c */
608abb0f93cSkardel extern	int	nofork;		/* no-fork flag */
609abb0f93cSkardel extern	int	initializing;	/* initializing flag */
610abb0f93cSkardel #ifdef HAVE_DROPROOT
611abb0f93cSkardel extern	int	droproot;	/* flag: try to drop root privileges after startup */
6122950cc38Schristos extern	int	root_dropped;	/* root has been dropped */
613abb0f93cSkardel extern char *user;		/* user to switch to */
614abb0f93cSkardel extern char *group;		/* group to switch to */
6152950cc38Schristos extern const char *chrootdir;	/* directory to chroot() to */
6162950cc38Schristos #endif
6172950cc38Schristos #ifdef HAVE_WORKING_FORK
618cdfa2a7eSchristos extern	int	daemon_pipe[2];	/* startup monitoring */
6192950cc38Schristos #endif
6202950cc38Schristos 
6212950cc38Schristos /* ntservice.c */
6222950cc38Schristos #ifdef SYS_WINNT
6232950cc38Schristos extern int accept_wildcard_if_for_winnt;
624abb0f93cSkardel #endif
625abb0f93cSkardel 
626abb0f93cSkardel /* refclock_conf.c */
627abb0f93cSkardel #ifdef REFCLOCK
6283123f114Skardel /* refclock configuration table */
6293123f114Skardel extern struct refclock * const refclock_conf[];
630abb0f93cSkardel extern u_char	num_refclock_conf;
631abb0f93cSkardel #endif
632abb0f93cSkardel 
633