xref: /netbsd-src/external/bsd/ntp/dist/include/ntpd.h (revision 7788a0781fe6ff2cce37368b4578a7ade0850cb1)
1 /*	$NetBSD: ntpd.h,v 1.3 2012/02/01 07:46:21 kardel Exp $	*/
2 
3 /*
4  * ntpd.h - Prototypes for ntpd.
5  */
6 
7 #include "ntp.h"
8 #include "ntp_debug.h"
9 #include "ntp_syslog.h"
10 #include "ntp_select.h"
11 #include "ntp_malloc.h"
12 #include "ntp_refclock.h"
13 #include "recvbuff.h"
14 
15 /* ntp_config.c */
16 
17 #define	TAI_1972	10	/* initial TAI offset (s) */
18 extern	char	*keysdir;	/* crypto keys and leaptable directory */
19 extern	char *	saveconfigdir;	/* ntpq saveconfig output directory */
20 
21 extern	void	getconfig	(int, char **);
22 extern	void	ctl_clr_stats	(void);
23 extern	int	ctlclrtrap	(sockaddr_u *, struct interface *, int);
24 extern	u_short ctlpeerstatus	(struct peer *);
25 extern	int	ctlsettrap	(sockaddr_u *, struct interface *, int, int);
26 extern	u_short ctlsysstatus	(void);
27 extern	void	init_control	(void);
28 extern	void	init_logging	(char const *, int);
29 extern	void	setup_logfile	(void);
30 extern	void	process_control (struct recvbuf *, int);
31 extern	void	report_event	(int, struct peer *, const char *);
32 
33 /* ntp_control.c */
34 /*
35  * Structure for translation tables between internal system
36  * variable indices and text format.
37  */
38 struct ctl_var {
39 	u_short code;
40 	u_short flags;
41 	const char *text;
42 };
43 /*
44  * Flag values
45  */
46 #define	CAN_READ	0x01
47 #define	CAN_WRITE	0x02
48 
49 #define DEF		0x20
50 #define	PADDING		0x40
51 #define	EOV		0x80
52 
53 #define	RO	(CAN_READ)
54 #define	WO	(CAN_WRITE)
55 #define	RW	(CAN_READ|CAN_WRITE)
56 
57 extern  char *  add_var (struct ctl_var **, u_long, u_short);
58 extern  void    free_varlist (struct ctl_var *);
59 extern  void    set_var (struct ctl_var **, const char *, u_long, u_short);
60 extern  void    set_sys_var (const char *, u_long, u_short);
61 
62 /* ntp_intres.c */
63 extern	void	ntp_res_name	(sockaddr_u, u_short);
64 extern	void	ntp_res_recv	(void);
65 extern	void	ntp_intres	(void);
66 #ifdef SYS_WINNT
67 extern	unsigned WINAPI	ntp_intres_thread	(void *);
68 #endif
69 
70 /* ntp_io.c */
71 typedef struct interface_info {
72 	endpt *	ep;
73 	u_char	action;
74 } interface_info_t;
75 
76 typedef void	(*interface_receiver_t)	(void *, interface_info_t *);
77 
78 extern  int	disable_dynamic_updates;
79 
80 extern	void	interface_enumerate	(interface_receiver_t, void *);
81 extern	endpt *	findinterface		(sockaddr_u *);
82 extern	endpt *	findbcastinter		(sockaddr_u *);
83 extern	void	enable_broadcast	(endpt *, sockaddr_u *);
84 extern	void	enable_multicast_if	(endpt *, sockaddr_u *);
85 extern	void	interface_update	(interface_receiver_t, void *);
86 
87 extern	void	init_io 	(void);
88 extern	void	io_open_sockets	(void);
89 extern	void	input_handler	(l_fp *);
90 extern	void	io_clr_stats	(void);
91 extern	void	io_setbclient	(void);
92 extern	void	io_unsetbclient	(void);
93 extern	void	io_multicast_add(sockaddr_u *);
94 extern	void	io_multicast_del(sockaddr_u *);
95 extern	void	sendpkt 	(sockaddr_u *, struct interface *, int, struct pkt *, int);
96 #ifndef SYS_WINNT
97 extern	void	kill_asyncio	(int);
98 #endif
99 #ifdef DEBUG
100 extern	void	collect_timing  (struct recvbuf *, const char *, int, l_fp *);
101 #endif
102 #ifdef HAVE_SIGNALED_IO
103 extern	void	wait_for_signal		(void);
104 extern	void	unblock_io_and_alarm	(void);
105 extern	void	block_io_and_alarm	(void);
106 #define UNBLOCK_IO_AND_ALARM()		unblock_io_and_alarm()
107 #define BLOCK_IO_AND_ALARM()		block_io_and_alarm()
108 #else
109 #define UNBLOCK_IO_AND_ALARM()
110 #define BLOCK_IO_AND_ALARM()
111 #endif
112 #define		latoa(pif)	localaddrtoa(pif)
113 extern const char * localaddrtoa(endpt *);
114 
115 /* ntp_loopfilter.c */
116 extern	void	init_loopfilter(void);
117 extern	int 	local_clock(struct peer *, double);
118 extern	void	adj_host_clock(void);
119 extern	void	loop_config(int, double);
120 extern	void	huffpuff(void);
121 extern	u_long	sys_clocktime;
122 extern	u_int	sys_tai;
123 
124 /* ntp_monitor.c */
125 extern	void	init_mon	(void);
126 extern	void	mon_start	(int);
127 extern	void	mon_stop	(int);
128 extern	int	ntp_monitor	(struct recvbuf *, int);
129 extern  void    ntp_monclearinterface (struct interface *interface);
130 
131 /* ntp_peer.c */
132 extern	void	init_peer	(void);
133 extern	struct peer *findexistingpeer (sockaddr_u *, struct peer *, int, u_char);
134 extern	struct peer *findpeer	(struct recvbuf *, int, int *);
135 extern	struct peer *findpeerbyassoc (u_int);
136 extern  void	set_peerdstadr	(struct peer *peer, struct interface *interface);
137 extern	struct peer *newpeer	(sockaddr_u *, struct interface *, int, int, int, int, u_int, u_char, int, keyid_t);
138 extern	void	peer_all_reset	(void);
139 extern	void	peer_clr_stats	(void);
140 extern	struct peer *peer_config (sockaddr_u *, struct interface *, int, int, int, int, u_int, int, keyid_t, const u_char *);
141 extern	void	peer_reset	(struct peer *);
142 extern	void	refresh_all_peerinterfaces (void);
143 extern	void	unpeer		(struct peer *);
144 extern	void	clear_all	(void);
145 extern	int	score_all	(struct peer *);
146 extern	struct	peer *findmanycastpeer	(struct recvbuf *);
147 
148 /* ntp_crypto.c */
149 #ifdef OPENSSL
150 extern	int	crypto_recv	(struct peer *, struct recvbuf *);
151 extern	int	crypto_xmit	(struct peer *, struct pkt *,
152 				    struct recvbuf *, int,
153 				    struct exten *, keyid_t);
154 extern	keyid_t	session_key	(sockaddr_u *, sockaddr_u *, keyid_t,
155 				    keyid_t, u_long);
156 extern	int	make_keylist	(struct peer *, struct interface *);
157 extern	void	key_expire	(struct peer *);
158 extern	void	crypto_update	(void);
159 extern	void	crypto_config	(int, char *);
160 extern	void	crypto_setup	(void);
161 extern	u_int	crypto_ident	(struct peer *);
162 extern	struct exten *crypto_args (struct peer *, u_int, associd_t, char *);
163 extern	int	crypto_public	(struct peer *, u_char *, u_int);
164 extern	void	value_free	(struct value *);
165 extern	char	*iffpar_file;
166 extern	EVP_PKEY *iffpar_pkey;
167 extern	char	*gqpar_file;
168 extern	EVP_PKEY *gqpar_pkey;
169 extern	char	*mvpar_file;
170 extern	EVP_PKEY *mvpar_pkey;
171 extern struct value tai_leap;
172 #endif /* OPENSSL */
173 
174 /* ntp_proto.c */
175 extern	void	transmit	(struct peer *);
176 extern	void	receive 	(struct recvbuf *);
177 extern	void	peer_clear	(struct peer *, const char *);
178 extern	void 	process_packet	(struct peer *, struct pkt *, u_int);
179 extern	void	clock_select	(void);
180 
181 extern	int	leap_tai;	/* TAI at next leap */
182 extern	u_long	leap_sec;	/* next scheduled leap from file */
183 extern	u_long	leap_peers;	/* next scheduled leap from peers */
184 extern	u_long	leapsec;	/* seconds to next leap */
185 extern	u_long	leap_expire;	/* leap information expiration */
186 extern	int	sys_orphan;
187 extern	double	sys_mindisp;
188 extern	double	sys_maxdist;
189 
190 /*
191  * there seems to be a bug in the IRIX 4 compiler which prevents
192  * u_char from beeing used in prototyped functions.
193  * This is also true AIX compiler.
194  * So give up and define it to be int. WLJ
195  */
196 extern	void	poll_update (struct peer *, int);
197 
198 extern	void	clear		(struct peer *);
199 extern	void	clock_filter	(struct peer *, double, double, double);
200 extern	void	init_proto	(void);
201 extern	void	proto_config	(int, u_long, double, sockaddr_u *);
202 extern	void	proto_clr_stats (void);
203 
204 #ifdef	REFCLOCK
205 /* ntp_refclock.c */
206 extern	int	refclock_newpeer (struct peer *);
207 extern	void	refclock_unpeer (struct peer *);
208 extern	void	refclock_receive (struct peer *);
209 extern	void	refclock_transmit (struct peer *);
210 extern	void	init_refclock	(void);
211 #endif	/* REFCLOCK */
212 
213 /* ntp_request.c */
214 extern	void	init_request	(void);
215 extern	void	process_private (struct recvbuf *, int);
216 
217 /* ntp_restrict.c */
218 extern	void	init_restrict	(void);
219 extern	u_short	restrictions	(sockaddr_u *);
220 extern	void	hack_restrict	(int, sockaddr_u *, sockaddr_u *, u_short, u_short);
221 
222 /* ntp_timer.c */
223 extern	void	init_timer	(void);
224 extern	void	reinit_timer	(void);
225 extern	void	timer		(void);
226 extern	void	timer_clr_stats (void);
227 extern  void    timer_interfacetimeout (u_long);
228 extern  volatile int interface_interval;
229 #ifdef OPENSSL
230 extern	char	*sys_hostname;	/* host name */
231 extern	char	*sys_groupname;	/* group name */
232 extern	char	*group_name;	/* group name */
233 extern u_long	sys_revoke;	/* keys revoke timeout */
234 extern u_long	sys_automax;	/* session key timeout */
235 #endif /* OPENSSL */
236 
237 /* ntp_util.c */
238 extern	void	init_util	(void);
239 extern	void	write_stats	(void);
240 extern	void	stats_config	(int, const char *);
241 extern	void	record_peer_stats (sockaddr_u *, int, double, double, double, double);
242 extern	void	record_proto_stats (char *);
243 extern	void	record_loop_stats (double, double, double, double, int);
244 extern	void	record_clock_stats (sockaddr_u *, const char *);
245 extern	void	record_raw_stats (sockaddr_u *, sockaddr_u *, l_fp *, l_fp *, l_fp *, l_fp *);
246 extern	u_long	leap_month(u_long);
247 extern	void	record_crypto_stats (sockaddr_u *, const char *);
248 #ifdef DEBUG
249 extern	void	record_timing_stats (const char *);
250 #endif
251 extern  u_short	sock_hash (sockaddr_u *);
252 extern	char *	fstostr(time_t);	/* NTP timescale seconds */
253 extern	double	old_drift;
254 extern	int	drift_file_sw;
255 extern	double	wander_threshold;
256 extern	double	wander_resid;
257 
258 /*
259  * Variable declarations for ntpd.
260  */
261 /* ntp_config.c */
262 extern char const *	progname;
263 extern char	*sys_phone[];		/* ACTS phone numbers */
264 #if defined(HAVE_SCHED_SETSCHEDULER)
265 extern int	config_priority_override;
266 extern int	config_priority;
267 #endif
268 extern char *ntp_signd_socket;
269 extern struct config_tree *cfg_tree_history;
270 
271 #ifdef BC_LIST_FRAMEWORK_NOT_YET_USED
272 /*
273  * backwards compatibility flags
274  */
275 typedef struct bc_entry_tag {
276 	int	token;
277 	int	enabled;
278 } bc_entry;
279 
280 extern bc_entry bc_list[];
281 #endif
282 
283 /* ntp_control.c */
284 extern int	num_ctl_traps;
285 extern keyid_t	ctl_auth_keyid;		/* keyid used for authenticating write requests */
286 
287 /*
288  * Statistic counters to keep track of requests and responses.
289  */
290 extern u_long	ctltimereset;		/* time stats reset */
291 extern u_long	numctlreq;		/* number of requests we've received */
292 extern u_long	numctlbadpkts;		/* number of bad control packets */
293 extern u_long	numctlresponses; 	/* number of resp packets sent with data */
294 extern u_long	numctlfrags; 		/* number of fragments sent */
295 extern u_long	numctlerrors;		/* number of error responses sent */
296 extern u_long	numctltooshort;		/* number of too short input packets */
297 extern u_long	numctlinputresp; 	/* number of responses on input */
298 extern u_long	numctlinputfrag; 	/* number of fragments on input */
299 extern u_long	numctlinputerr;		/* number of input pkts with err bit set */
300 extern u_long	numctlbadoffset; 	/* number of input pkts with nonzero offset */
301 extern u_long	numctlbadversion;	/* number of input pkts with unknown version */
302 extern u_long	numctldatatooshort;	/* data too short for count */
303 extern u_long	numctlbadop; 		/* bad op code found in packet */
304 extern u_long	numasyncmsgs;		/* number of async messages we've sent */
305 
306 /* ntp_intres.c */
307 extern keyid_t	req_keyid;		/* request keyid */
308 extern int	req_keytype;		/* OpenSSL NID such as NID_md5 */
309 extern size_t	req_hashlen;		/* digest size for req_keytype */
310 extern char *	req_file;		/* name of the file with configuration info */
311 #ifdef SYS_WINNT
312 extern HANDLE ResolverEventHandle;
313 #else
314 extern int resolver_pipe_fd[2];  /* used to let the resolver process alert the parent process */
315 #endif /* SYS_WINNT */
316 
317 /*
318  * Other statistics of possible interest
319  */
320 extern volatile u_long packets_dropped;	/* total number of packets dropped on reception */
321 extern volatile u_long packets_ignored;	/* packets received on wild card interface */
322 extern volatile u_long packets_received;/* total number of packets received */
323 extern u_long	packets_sent;		/* total number of packets sent */
324 extern u_long	packets_notsent; 	/* total number of packets which couldn't be sent */
325 
326 extern volatile u_long handler_calls;	/* number of calls to interrupt handler */
327 extern volatile u_long handler_pkts;	/* number of pkts received by handler */
328 extern u_long	io_timereset;		/* time counters were reset */
329 
330 /*
331  * Interface stuff
332  */
333 extern endpt *	any_interface;		/* IPv4 wildcard */
334 extern endpt *	any6_interface;		/* IPv6 wildcard */
335 extern endpt *	loopback_interface;	/* IPv4 loopback for refclocks */
336 
337 /*
338  * File descriptor masks etc. for call to select
339  */
340 extern fd_set	activefds;
341 extern int	maxactivefd;
342 
343 /* ntp_loopfilter.c */
344 extern double	drift_comp;		/* clock frequency (s/s) */
345 extern double	clock_stability;	/* clock stability (s/s) */
346 extern double	clock_max;		/* max offset before step (s) */
347 extern double	clock_panic;		/* max offset before panic (s) */
348 extern double	clock_phi;		/* dispersion rate (s/s) */
349 extern double	clock_minstep;		/* step timeout (s) */
350 extern double	clock_codec;		/* codec frequency */
351 #ifdef KERNEL_PLL
352 extern int	pll_status;		/* status bits for kernel pll */
353 #endif /* KERNEL_PLL */
354 
355 /*
356  * Clock state machine control flags
357  */
358 extern int	ntp_enable;		/* clock discipline enabled */
359 extern int	pll_control;		/* kernel support available */
360 extern int	kern_enable;		/* kernel support enabled */
361 extern int	pps_enable;		/* kernel PPS discipline enabled */
362 extern int	ext_enable;		/* external clock enabled */
363 extern int	cal_enable;		/* refclock calibrate enable */
364 extern int	allow_panic;		/* allow panic correction */
365 extern int	mode_ntpdate;		/* exit on first clock set */
366 extern int	peer_ntpdate;		/* count of ntpdate peers */
367 
368 /*
369  * Clock state machine variables
370  */
371 extern u_char	sys_poll;		/* system poll interval (log2 s) */
372 extern int	state;			/* clock discipline state */
373 extern int	tc_counter;		/* poll-adjust counter */
374 extern u_long	last_time;		/* time of last clock update (s) */
375 extern double	last_offset;		/* last clock offset (s) */
376 extern u_char	allan_xpt;		/* Allan intercept (log2 s) */
377 extern double	clock_jitter;		/* clock jitter (s) */
378 extern double	sys_offset;		/* system offset (s) */
379 extern double	sys_jitter;		/* system jitter (s) */
380 
381 /* ntp_monitor.c */
382 extern struct mon_data mon_mru_list;
383 extern struct mon_data mon_fifo_list;
384 extern int	mon_enabled;
385 
386 /* ntp_peer.c */
387 extern struct peer *peer_hash[];	/* peer hash table */
388 extern int	peer_hash_count[];	/* count of peers in each bucket */
389 extern struct peer *assoc_hash[];	/* association ID hash table */
390 extern int	assoc_hash_count[];
391 extern int	peer_free_count;
392 
393 /*
394  * Miscellaneous statistic counters which may be queried.
395  */
396 extern u_long	peer_timereset;		/* time stat counters were zeroed */
397 extern u_long	findpeer_calls;		/* number of calls to findpeer */
398 extern u_long	assocpeer_calls;	/* number of calls to findpeerbyassoc */
399 extern u_long	peer_allocations;	/* number of allocations from the free list */
400 extern u_long	peer_demobilizations;	/* number of structs freed to free list */
401 extern int	total_peer_structs;	/* number of peer structs in circulation */
402 extern int	peer_associations;	/* mobilized associations */
403 extern int	peer_preempt;		/* preemptable associations */
404 /* ntp_proto.c */
405 /*
406  * System variables are declared here.	See Section 3.2 of the
407  * specification.
408  */
409 extern u_char	sys_leap;		/* system leap indicator */
410 extern u_char	sys_stratum;		/* system stratum */
411 extern s_char	sys_precision;		/* local clock precision */
412 extern double	sys_rootdelay;		/* roundtrip delay to primary source */
413 extern double	sys_rootdisp;		/* dispersion to primary source */
414 extern u_int32	sys_refid;		/* reference id */
415 extern l_fp	sys_reftime;		/* last update time */
416 extern struct peer *sys_peer;		/* current peer */
417 
418 /*
419  * Nonspecified system state variables.
420  */
421 extern int	sys_bclient;		/* we set our time to broadcasts */
422 extern double	sys_bdelay; 		/* broadcast client default delay */
423 extern int	sys_authenticate;	/* requre authentication for config */
424 extern l_fp	sys_authdelay;		/* authentication delay */
425 extern keyid_t	sys_private;		/* private value for session seed */
426 extern int	sys_manycastserver;	/* respond to manycast client pkts */
427 extern int	sys_minclock;		/* minimum survivors */
428 extern int	sys_minsane;		/* minimum candidates */
429 extern int	sys_floor;		/* cluster stratum floor */
430 extern int	sys_ceiling;		/* cluster stratum ceiling */
431 extern u_char	sys_ttl[MAX_TTL];	/* ttl mapping vector */
432 extern int	sys_ttlmax;		/* max ttl mapping vector index */
433 
434 /*
435  * Statistics counters
436  */
437 extern u_long	sys_stattime;		/* time since reset */
438 extern u_long	sys_received;		/* packets received */
439 extern u_long	sys_processed;		/* packets for this host */
440 extern u_long	sys_restricted;	 	/* restricted packets */
441 extern u_long	sys_newversion;		/* current version  */
442 extern u_long	sys_oldversion;		/* old version */
443 extern u_long	sys_restricted;		/* access denied */
444 extern u_long	sys_badlength;		/* bad length or format */
445 extern u_long	sys_badauth;		/* bad authentication */
446 extern u_long	sys_declined;		/* declined */
447 extern u_long	sys_limitrejected;	/* rate exceeded */
448 extern u_long	sys_kodsent;		/* KoD sent */
449 
450 /* ntp_refclock.c */
451 #ifdef REFCLOCK
452 #ifdef PPS
453 extern int	fdpps;			/* pps file descriptor */
454 #endif /* PPS */
455 #endif
456 
457 /* ntp_request.c */
458 extern keyid_t	info_auth_keyid;	/* keyid used to authenticate requests */
459 
460 /* ntp_restrict.c */
461 extern restrict_u *	restrictlist4;	/* IPv4 restriction list */
462 extern restrict_u *	restrictlist6;	/* IPv6 restriction list */
463 extern int	ntp_minpkt;
464 extern int	ntp_minpoll;
465 extern int	mon_age;		/* monitor preempt age */
466 
467 /* ntp_timer.c */
468 extern volatile int alarm_flag;		/* alarm flag */
469 extern volatile u_long alarm_overflow;
470 extern u_long	current_time;		/* current time (s) */
471 extern u_long	timer_timereset;
472 extern u_long	timer_overflows;
473 extern u_long	timer_xmtcalls;
474 
475 /* ntp_util.c */
476 extern int	stats_control;		/* write stats to fileset? */
477 extern int	stats_write_period;	/* # of seconds between writes. */
478 extern double	stats_write_tolerance;
479 
480 /* ntpd.c */
481 extern volatile int debug;		/* debugging flag */
482 extern int	nofork;			/* no-fork flag */
483 extern int 	initializing;		/* initializing flag */
484 #ifdef HAVE_DROPROOT
485 extern int droproot;			/* flag: try to drop root privileges after startup */
486 extern char *user;			/* user to switch to */
487 extern char *group;			/* group to switch to */
488 extern const char *chrootdir;		/* directory to chroot to */
489 #endif
490 
491 /* refclock_conf.c */
492 #ifdef REFCLOCK
493 /* refclock configuration table */
494 extern struct refclock * const refclock_conf[];
495 extern u_char	num_refclock_conf;
496 #endif
497 
498 /* ntp_signd.c */
499 #ifdef HAVE_NTP_SIGND
500 extern void
501 send_via_ntp_signd(
502 	struct recvbuf *rbufp,	/* receive packet pointer */
503 	int	xmode,
504 	keyid_t	xkeyid,
505 	int flags,
506 	struct pkt  *xpkt
507 	);
508 #endif
509