ntpd.h revision 132451
1277353Smarcel/*
2277353Smarcel * ntpd.h - Prototypes for ntpd.
3277353Smarcel */
4277353Smarcel
5277353Smarcel#include "ntp_syslog.h"
6277353Smarcel#include "ntp_fp.h"
7277353Smarcel#include "ntp.h"
8277353Smarcel#include "ntp_select.h"
9277353Smarcel#include "ntp_malloc.h"
10277353Smarcel#include "ntp_refclock.h"
11277353Smarcel#include "recvbuff.h"
12277353Smarcel
13277353Smarcel#ifdef SYS_WINNT
14277353Smarcel#define exit service_exit
15277353Smarcelextern	void	service_exit	(int);
16277353Smarcel/*	declare the service threads */
17277353Smarcelvoid	service_main	(DWORD, LPTSTR *);
18277353Smarcelvoid	service_ctrl	(DWORD);
19277353Smarcelvoid	worker_thread	(void *);
20277353Smarcel#define sleep(x) Sleep((DWORD) x * 1000 /* milliseconds */ );
21277353Smarcel#endif /* SYS_WINNT */
22277353Smarcel
23277353Smarcel/* ntp_config.c */
24277353Smarcelextern	void	getconfig	P((int, char **));
25277353Smarcel
26277353Smarcel/* ntp_config.c */
27277353Smarcelextern	void	ctl_clr_stats	P((void));
28277353Smarcelextern	int	ctlclrtrap	P((struct sockaddr_storage *, struct interface *, int));
29277353Smarcelextern	u_short ctlpeerstatus	P((struct peer *));
30extern	int	ctlsettrap	P((struct sockaddr_storage *, struct interface *, int, int));
31extern	u_short ctlsysstatus	P((void));
32extern	void	init_control	P((void));
33extern	void	process_control P((struct recvbuf *, int));
34extern	void	report_event	P((int, struct peer *));
35
36extern	double	fabs		P((double));
37extern	double	sqrt		P((double));
38
39/* ntp_control.c */
40/*
41 * Structure for translation tables between internal system
42 * variable indices and text format.
43 */
44struct ctl_var {
45	u_short code;
46	u_short flags;
47	char *text;
48};
49/*
50 * Flag values
51 */
52#define	CAN_READ	0x01
53#define	CAN_WRITE	0x02
54
55#define DEF		0x20
56#define	PADDING		0x40
57#define	EOV		0x80
58
59#define	RO	(CAN_READ)
60#define	WO	(CAN_WRITE)
61#define	RW	(CAN_READ|CAN_WRITE)
62
63extern  char *  add_var P((struct ctl_var **, u_long, u_short));
64extern  void    free_varlist P((struct ctl_var *));
65extern  void    set_var P((struct ctl_var **, const char *, u_long, u_short));
66extern  void    set_sys_var P((char *, u_long, u_short));
67
68/* ntp_intres.c */
69extern	void	ntp_res_name	P((struct sockaddr_storage, u_short));
70extern	void	ntp_res_recv	P((void));
71extern	void	ntp_intres	P((void));
72
73/* ntp_io.c */
74extern	struct interface *findinterface P((struct sockaddr_storage *));
75extern  struct interface *findbcastinter P((struct sockaddr_storage *));
76
77extern	void	init_io 	P((void));
78extern	void	input_handler	P((l_fp *));
79extern	void	io_clr_stats	P((void));
80extern	void	io_setbclient	P((void));
81extern	void	io_unsetbclient P((void));
82extern	void	io_multicast_add P((struct sockaddr_storage));
83extern	void	io_multicast_del P((struct sockaddr_storage));
84extern	void	kill_asyncio	 P((int));
85
86extern	void	sendpkt 	P((struct sockaddr_storage *, struct interface *, int, struct pkt *, int));
87#ifdef HAVE_SIGNALED_IO
88extern	void	wait_for_signal P((void));
89extern	void	unblock_io_and_alarm P((void));
90extern	void	block_io_and_alarm P((void));
91#endif
92
93/* ntp_leap.c */
94extern	void	init_leap	P((void));
95extern	void	leap_process	P((void));
96extern	int 	leap_setleap	P((int, int));
97/*
98 * there seems to be a bug in the IRIX 4 compiler which prevents
99 * u_char from beeing used in prototyped functions.
100 * This is also true AIX compiler.
101 * So give up and define it to be int. WLJ
102 */
103extern	int	leap_actual P((int));
104
105/* ntp_loopfilter.c */
106extern	void	init_loopfilter P((void));
107extern	int 	local_clock P((struct peer *, double, double));
108extern	void	adj_host_clock	P((void));
109extern	void	loop_config P((int, double));
110extern	void	huffpuff	P((void));
111
112/* ntp_monitor.c */
113extern	void	init_mon	P((void));
114extern	void	mon_start	P((int));
115extern	void	mon_stop	P((int));
116extern	void	ntp_monitor P((struct recvbuf *));
117
118/* ntp_peer.c */
119extern	void	init_peer	P((void));
120extern	struct peer *findexistingpeer P((struct sockaddr_storage *, struct peer *, int));
121extern	struct peer *findpeer	P((struct sockaddr_storage *, struct interface *, int, int, int *));
122extern	struct peer *findpeerbyassoc P((u_int));
123extern	struct peer *newpeer	P((struct sockaddr_storage *, struct interface *, int, int, int, int, u_int, u_char, int, keyid_t));
124extern	void	peer_all_reset	P((void));
125extern	void	peer_clr_stats	P((void));
126extern	struct peer *peer_config P((struct sockaddr_storage *, struct interface *, int, int, int, int, u_int, int, keyid_t, u_char *));
127extern	void	peer_reset	P((struct peer *));
128extern	int 	peer_unconfig	P((struct sockaddr_storage *, struct interface *, int));
129extern	void	unpeer		P((struct peer *));
130extern	void	clear_all	P((void));
131#ifdef OPENSSL
132extern	void	expire_all	P((void));
133#endif /* OPENSSL */
134extern	struct	peer *findmanycastpeer	P((struct recvbuf *));
135extern	void	resetmanycast	P((void));
136
137/* ntp_crypto.c */
138#ifdef OPENSSL
139extern	int	crypto_recv	P((struct peer *, struct recvbuf *));
140extern	int	crypto_xmit	P((struct pkt *, struct sockaddr_storage *, int, struct exten *, keyid_t));
141extern	keyid_t	session_key	P((struct sockaddr_storage *, struct sockaddr_storage *, keyid_t, keyid_t, u_long));
142extern	void	make_keylist	P((struct peer *, struct interface *));
143extern	void	key_expire	P((struct peer *));
144extern	void	crypto_update	P((void));
145extern	void	crypto_config	P((int, char *));
146extern	void	crypto_setup	P((void));
147extern	u_int	crypto_ident	P((struct peer *));
148extern	struct exten *crypto_args P((struct peer *, u_int, char *));
149extern	int	crypto_public	P((struct peer *, u_char *, u_int));
150extern	void	value_free	P((struct value *));
151#endif /* OPENSSL */
152
153/* ntp_proto.c */
154extern	void	transmit	P((struct peer *));
155extern	void	receive 	P((struct recvbuf *));
156extern	void	peer_clear	P((struct peer *, char *));
157extern	void 	process_packet	P((struct peer *, struct pkt *, l_fp *));
158extern	void	clock_select	P((void));
159extern	void	kod_proto	P((void));
160
161/*
162 * there seems to be a bug in the IRIX 4 compiler which prevents
163 * u_char from beeing used in prototyped functions.
164 * This is also true AIX compiler.
165 * So give up and define it to be int. WLJ
166 */
167extern	void	poll_update P((struct peer *, int));
168
169extern	void	clear		P((struct peer *));
170extern	void	clock_filter	P((struct peer *, double, double, double));
171extern	void	init_proto	P((void));
172extern	void	proto_config	P((int, u_long, double, struct sockaddr_storage*));
173extern	void	proto_clr_stats P((void));
174
175#ifdef	REFCLOCK
176/* ntp_refclock.c */
177extern	int	refclock_newpeer P((struct peer *));
178extern	void	refclock_unpeer P((struct peer *));
179extern	void	refclock_receive P((struct peer *));
180extern	void	refclock_transmit P((struct peer *));
181extern	void	init_refclock	P((void));
182#endif	/* REFCLOCK */
183
184/* ntp_request.c */
185extern	void	init_request	P((void));
186extern	void	process_private P((struct recvbuf *, int));
187
188/* ntp_restrict.c */
189extern	void	init_restrict	P((void));
190extern	int 	restrictions	P((struct sockaddr_storage *));
191extern	void	hack_restrict	P((int, struct sockaddr_storage *, struct sockaddr_storage *, int, int));
192
193/* ntp_timer.c */
194extern	void	init_timer	P((void));
195extern	void	reinit_timer	P((void));
196extern	void	timer		P((void));
197extern	void	timer_clr_stats P((void));
198#ifdef OPENSSL
199extern	char	*sys_hostname;
200extern	l_fp	sys_revoketime;
201#endif /* OPENSSL */
202
203/* ntp_util.c */
204extern	void	init_util	P((void));
205extern	void	hourly_stats	P((void));
206extern	void	stats_config	P((int, char *));
207extern	void	record_peer_stats P((struct sockaddr_storage *, int, double, double, double, double));
208extern	void	record_loop_stats P((double, double, double, double, int));
209extern	void	record_clock_stats P((struct sockaddr_storage *, const char *));
210extern	void	record_raw_stats P((struct sockaddr_storage *, struct sockaddr_storage *, l_fp *, l_fp *, l_fp *, l_fp *));
211extern	void	record_sys_stats P((void));
212extern	void	record_crypto_stats P((struct sockaddr_storage *, const char *));
213extern  int	sock_hash P((struct sockaddr_storage *));
214
215/*
216 * Variable declarations for ntpd.
217 */
218
219/* ntp_config.c */
220extern char const *	progname;
221extern char	sys_phone[][MAXDIAL];	/* ACTS phone numbers */
222extern char	pps_device[];		/* PPS device name */
223#if defined(HAVE_SCHED_SETSCHEDULER)
224extern int	config_priority_override;
225extern int	config_priority;
226#endif
227
228/* ntp_control.c */
229struct ctl_trap;
230extern struct ctl_trap ctl_trap[];
231extern int	num_ctl_traps;
232extern keyid_t	ctl_auth_keyid;		/* keyid used for authenticating write requests */
233
234/*
235 * Statistic counters to keep track of requests and responses.
236 */
237extern u_long	ctltimereset;		/* time stats reset */
238extern u_long	numctlreq;		/* number of requests we've received */
239extern u_long	numctlbadpkts;		/* number of bad control packets */
240extern u_long	numctlresponses; 	/* number of resp packets sent with data */
241extern u_long	numctlfrags; 		/* number of fragments sent */
242extern u_long	numctlerrors;		/* number of error responses sent */
243extern u_long	numctltooshort;		/* number of too short input packets */
244extern u_long	numctlinputresp; 	/* number of responses on input */
245extern u_long	numctlinputfrag; 	/* number of fragments on input */
246extern u_long	numctlinputerr;		/* number of input pkts with err bit set */
247extern u_long	numctlbadoffset; 	/* number of input pkts with nonzero offset */
248extern u_long	numctlbadversion;	/* number of input pkts with unknown version */
249extern u_long	numctldatatooshort;	/* data too short for count */
250extern u_long	numctlbadop; 		/* bad op code found in packet */
251extern u_long	numasyncmsgs;		/* number of async messages we've sent */
252
253/* ntp_intres.c */
254extern keyid_t	req_keyid;		/* request keyid */
255extern char *	req_file;		/* name of the file with configuration info */
256
257/*
258 * Other statistics of possible interest
259 */
260extern volatile u_long packets_dropped;	/* total number of packets dropped on reception */
261extern volatile u_long packets_ignored;	/* packets received on wild card interface */
262extern volatile u_long packets_received;/* total number of packets received */
263extern u_long	packets_sent;		/* total number of packets sent */
264extern u_long	packets_notsent; 	/* total number of packets which couldn't be sent */
265
266extern volatile u_long handler_calls;	/* number of calls to interrupt handler */
267extern volatile u_long handler_pkts;	/* number of pkts received by handler */
268extern u_long	io_timereset;		/* time counters were reset */
269
270/*
271 * Interface stuff
272 */
273extern struct interface *any_interface;	/* default ipv4 interface */
274extern struct interface *any6_interface;/* default ipv6 interface */
275extern struct interface *loopback_interface; /* loopback interface */
276
277/*
278 * File descriptor masks etc. for call to select
279 */
280extern fd_set	activefds;
281extern int	maxactivefd;
282
283/* ntp_loopfilter.c */
284extern double	drift_comp;		/* clock frequency (s/s) */
285extern double	clock_stability;	/* clock stability (s/s) */
286extern double	clock_max;		/* max offset before step (s) */
287extern double	clock_panic;		/* max offset before panic (s) */
288extern double	clock_phi;		/* dispersion rate (s/s) */
289extern double	clock_minstep;		/* step timeout (s) */
290extern u_long	pps_control;		/* last pps sample time */
291#ifdef KERNEL_PLL
292extern int	pll_status;		/* status bits for kernel pll */
293#endif /* KERNEL_PLL */
294
295/*
296 * Clock state machine control flags
297 */
298extern int	ntp_enable;		/* clock discipline enabled */
299extern int	pll_control;		/* kernel support available */
300extern int	kern_enable;		/* kernel support enabled */
301extern int	pps_enable;		/* kernel PPS discipline enabled */
302extern int	ext_enable;		/* external clock enabled */
303extern int	cal_enable;		/* refclock calibrate enable */
304extern int	allow_panic;		/* allow panic correction */
305extern int	mode_ntpdate;		/* exit on first clock set */
306extern int	peer_ntpdate;		/* count of ntpdate peers */
307extern int	forground_process;	/* run the process in the forground */
308
309/*
310 * Clock state machine variables
311 */
312extern u_char	sys_poll;		/* system poll interval (log2 s) */
313extern int	state;			/* clock discipline state */
314extern int	tc_counter;		/* poll-adjust counter */
315extern u_long	last_time;		/* time of last clock update (s) */
316extern double	last_offset;		/* last clock offset (s) */
317extern double	allan_xpt;		/* Allan intercept (s) */
318extern double	sys_error;		/* system RMS error (s) */
319extern double	sys_jitter;		/* system RMS jitter (s) */
320
321/* ntp_monitor.c */
322extern struct mon_data mon_mru_list;
323extern struct mon_data mon_fifo_list;
324extern int	mon_enabled;
325
326/* ntp_peer.c */
327extern struct peer *peer_hash[];	/* peer hash table */
328extern int	peer_hash_count[];	/* count of peers in each bucket */
329extern struct peer *assoc_hash[];	/* association ID hash table */
330extern int	assoc_hash_count[];
331extern int	peer_free_count;
332
333/*
334 * Miscellaneous statistic counters which may be queried.
335 */
336extern u_long	peer_timereset;		/* time stat counters were zeroed */
337extern u_long	findpeer_calls;		/* number of calls to findpeer */
338extern u_long	assocpeer_calls;	/* number of calls to findpeerbyassoc */
339extern u_long	peer_allocations;	/* number of allocations from the free list */
340extern u_long	peer_demobilizations;	/* number of structs freed to free list */
341extern int	total_peer_structs;	/* number of peer structs in circulation */
342extern int	peer_associations;	/* number of active associations */
343
344/* ntp_proto.c */
345/*
346 * System variables are declared here.	See Section 3.2 of the
347 * specification.
348 */
349extern u_char	sys_leap;		/* system leap indicator */
350extern u_char	sys_stratum;		/* stratum of system */
351extern s_char	sys_precision;		/* local clock precision */
352extern double	sys_rootdelay;		/* distance to current sync source */
353extern double	sys_rootdispersion;	/* dispersion of system clock */
354extern u_int32	sys_refid;		/* reference source for local clock */
355extern l_fp	sys_reftime;		/* time we were last updated */
356extern struct peer *sys_peer;		/* our current peer */
357extern struct peer *sys_prefer;		/* our cherished peer */
358extern u_long	sys_automax;		/* maximum session key lifetime */
359
360/*
361 * Nonspecified system state variables.
362 */
363extern int	sys_bclient;		/* we set our time to broadcasts */
364extern double	sys_bdelay; 		/* broadcast client default delay */
365extern int	sys_authenticate;	/* requre authentication for config */
366extern l_fp	sys_authdelay;		/* authentication delay */
367extern keyid_t	sys_private;		/* private value for session seed */
368extern int	sys_manycastserver;	/* respond to manycast client pkts */
369extern int	sys_minclock;		/* minimum survivors */
370extern int	sys_minsane;		/* minimum candidates */
371extern int	sys_floor;		/* cluster stratum floor */
372extern int	sys_ceiling;		/* cluster stratum ceiling */
373extern u_char	sys_ttl[];		/* ttl mapping vector */
374extern int	sys_ttlmax;		/* max ttl mapping vector index */
375
376/*
377 * Statistics counters
378 */
379extern u_long	sys_stattime;		/* time when we started recording */
380extern u_long	sys_restricted;	 	/* restricted packets */
381extern u_long	sys_oldversionpkt;	/* old version packets */
382extern u_long	sys_newversionpkt;	/* new version packets  */
383extern u_long	sys_unknownversion;	/* don't know version packets */
384extern u_long	sys_badlength;		/* bad length or format */
385extern u_long	sys_processed;		/* packets processed */
386extern u_long	sys_badauth;		/* bad authentication */
387extern u_long	sys_limitrejected;	/* rate limit exceeded */
388extern u_long	sys_received;		/* packets received */
389
390/* ntp_refclock.c */
391#ifdef REFCLOCK
392#if defined(PPS) || defined(HAVE_PPSAPI)
393extern int	fdpps;			/* pps file descriptor */
394#endif /* PPS */
395#endif
396
397/* ntp_request.c */
398extern keyid_t	info_auth_keyid;	/* keyid used to authenticate requests */
399
400/* ntp_restrict.c */
401extern struct restrictlist *restrictlist; /* the ipv4 restriction list */
402extern struct restrictlist6 *restrictlist6; /* the ipv6 restriction list */
403extern u_long	res_min_interval;
404extern u_long	res_avg_interval;
405extern u_long	mon_age;		/* monitor preempt age */
406
407/* ntp_timer.c */
408extern volatile int alarm_flag;		/* alarm flag */
409extern u_char	sys_revoke;		/* keys revoke timeout (log2 s) */
410extern volatile u_long alarm_overflow;
411extern u_long	current_time;		/* current time (s) */
412extern u_long	timer_timereset;
413extern u_long	timer_overflows;
414extern u_long	timer_xmtcalls;
415
416/* ntp_util.c */
417extern int	stats_control;		/* write stats to fileset? */
418
419/* ntpd.c */
420extern volatile int debug;		/* debugging flag */
421extern int	nofork;			/* no-fork flag */
422extern int 	initializing;		/* initializing flag */
423#ifdef HAVE_CLOCKCTL
424extern char *user;			/* user to switch to */
425extern char *group;			/* group to switch to */
426extern char *chrootdir;			/* directory to chroot to */
427#endif
428
429/* refclock_conf.c */
430#ifdef REFCLOCK
431extern struct refclock *refclock_conf[]; /* refclock configuration table */
432extern u_char	num_refclock_conf;
433#endif
434