ntpd.h revision 54359
1/*
2 * ntpd.h - Prototypes for ntpd.
3 */
4
5#include "ntp_syslog.h"
6#include "ntp_fp.h"
7#include "ntp.h"
8#include "ntp_select.h"
9#include "ntp_malloc.h"
10#include "ntp_refclock.h"
11#include "recvbuff.h"
12
13#define MAXINTERFACES	512
14
15#ifdef SYS_WINNT
16#define exit service_exit
17extern	void	service_exit	(int);
18/*	declare the service threads */
19void	service_main	(DWORD, LPTSTR *);
20void	service_ctrl	(DWORD);
21void	worker_thread	(void *);
22#define sleep(x) Sleep((DWORD) x * 1000 /* milliseconds */ );
23#else
24#define closesocket close
25#endif /* SYS_WINNT */
26
27/* ntp_config.c */
28extern	void	getstartup	P((int, char **));
29extern	void	getconfig	P((int, char **));
30
31/* ntp_config.c */
32extern	void	ctl_clr_stats	P((void));
33extern	int	ctlclrtrap	P((struct sockaddr_in *, struct interface *, int));
34extern	u_short ctlpeerstatus	P((struct peer *));
35extern	int	ctlsettrap	P((struct sockaddr_in *, struct interface *, int, int));
36extern	u_short ctlsysstatus	P((void));
37extern	void	init_control	P((void));
38extern	void	process_control P((struct recvbuf *, int));
39extern	void	report_event	P((int, struct peer *));
40
41extern	double	fabs		P((double));
42extern	double	sqrt		P((double));
43
44/* ntp_control.c */
45/*
46 * Structure for translation tables between internal system
47 * variable indices and text format.
48 */
49struct ctl_var {
50	u_short code;
51	u_short flags;
52	char *text;
53};
54/*
55 * Flag values
56 */
57#define	CAN_READ	0x01
58#define	CAN_WRITE	0x02
59
60#define DEF		0x20
61#define	PADDING		0x40
62#define	EOV		0x80
63
64#define	RO	(CAN_READ)
65#define	WO	(CAN_WRITE)
66#define	RW	(CAN_READ|CAN_WRITE)
67
68extern  char *  add_var P((struct ctl_var **, unsigned long, int));
69extern  void    free_varlist P((struct ctl_var *));
70extern  void    set_var P((struct ctl_var **, const char *, unsigned long, int));
71extern  void    set_sys_var P((char *, unsigned long, int));
72
73/* ntp_intres.c */
74extern	void	ntp_intres	P((void));
75
76/* ntp_io.c */
77extern	struct interface *findbcastinter P((struct sockaddr_in *));
78extern	struct interface *findinterface P((struct sockaddr_in *));
79
80extern	void	init_io 	P((void));
81extern	void	input_handler	P((l_fp *));
82extern	void	io_clr_stats	P((void));
83extern	void	io_setbclient	P((void));
84extern	void	io_unsetbclient P((void));
85extern	void	io_multicast_add P((u_int32));
86extern	void	io_multicast_del P((u_int32));
87extern	void	kill_asyncio	 P((void));
88
89extern	void	sendpkt 	P((struct sockaddr_in *, struct interface *, int, struct pkt *, int));
90#ifdef HAVE_SIGNALED_IO
91extern	void	wait_for_signal P((void));
92extern	void	unblock_io_and_alarm P((void));
93extern	void	block_io_and_alarm P((void));
94#endif
95
96/* ntp_leap.c */
97extern	void	init_leap	P((void));
98extern	void	leap_process	P((void));
99extern	int 	leap_setleap	P((int, int));
100/*
101 * there seems to be a bug in the IRIX 4 compiler which prevents
102 * u_char from beeing used in prototyped functions.
103 * This is also true AIX compiler.
104 * So give up and define it to be int. WLJ
105 */
106extern	int	leap_actual P((int));
107
108/* ntp_loopfilter.c */
109extern	void	init_loopfilter P((void));
110extern	int 	local_clock P((struct peer *, double, double));
111extern	void	adj_host_clock	P((void));
112extern	void	loop_config P((int, double));
113
114/* ntp_monitor.c */
115extern	void	init_mon	P((void));
116extern	void	mon_start	P((int));
117extern	void	mon_stop	P((int));
118extern	void	ntp_monitor P((struct recvbuf *));
119
120/* ntp_peer.c */
121extern	void	init_peer	P((void));
122extern	struct peer *findexistingpeer P((struct sockaddr_in *, struct peer *, int));
123extern	struct peer *findpeer	P((struct sockaddr_in *, struct interface *, int, int, int *));
124extern	struct peer *findpeerbyassoc P((int));
125extern	struct peer *newpeer	P((struct sockaddr_in *, struct interface *, int, int, int, int, int, u_long));
126extern	void	peer_all_reset	P((void));
127extern	void	peer_clr_stats	P((void));
128extern	struct peer *peer_config P((struct sockaddr_in *, struct interface *, int, int, int, int, int, int, u_long));
129extern	void	peer_reset	P((struct peer *));
130extern	int 	peer_unconfig	P((struct sockaddr_in *, struct interface *, int));
131extern	void	unpeer		P((struct peer *));
132extern	void	key_expire_all	P((void));
133extern	struct	peer *findmanycastpeer	P((l_fp *));
134extern	void	peer_config_manycast	P((struct peer *, struct peer *));
135
136/* ntp_proto.c */
137extern	void	transmit	P((struct peer *));
138extern	void	receive 	P((struct recvbuf *));
139extern	void	peer_clear	P((struct peer *));
140extern	int 	process_packet	P((struct peer *, struct pkt *, l_fp *));
141extern	void	clock_select	P((void));
142
143/*
144 * there seems to be a bug in the IRIX 4 compiler which prevents
145 * u_char from beeing used in prototyped functions.
146 * This is also true AIX compiler.
147 * So give up and define it to be int. WLJ
148 */
149extern	void	poll_update P((struct peer *, int));
150
151extern	void	clear		P((struct peer *));
152extern	void	clock_filter	P((struct peer *, double, double, double));
153extern	void	init_proto	P((void));
154extern	void	proto_config	P((int, u_long, double));
155extern	void	proto_clr_stats P((void));
156
157#ifdef	REFCLOCK
158/* ntp_refclock.c */
159extern	int	refclock_newpeer P((struct peer *));
160extern	void	refclock_unpeer P((struct peer *));
161extern	void	refclock_receive P((struct peer *));
162extern	void	refclock_transmit P((struct peer *));
163extern	void	init_refclock	P((void));
164#endif	/* REFCLOCK */
165
166/* ntp_request.c */
167extern	void	init_request	P((void));
168extern	void	process_private P((struct recvbuf *, int));
169
170/* ntp_restrict.c */
171extern	void	init_restrict	P((void));
172extern	int 	restrictions	P((struct sockaddr_in *));
173extern	void	hack_restrict	P((int, struct sockaddr_in *, struct sockaddr_in *, int, int));
174
175/* ntp_timer.c */
176extern	void	init_timer	P((void));
177extern	void	timer		P((void));
178extern	void	timer_clr_stats P((void));
179
180/* ntp_util.c */
181extern	void	init_util	P((void));
182extern	void	hourly_stats	P((void));
183extern	void	stats_config	P((int, char *));
184extern	void	record_peer_stats P((struct sockaddr_in *, int, double, double, double, double));
185extern	void	record_loop_stats P((void));
186extern	void	record_clock_stats P((struct sockaddr_in *, const char *));
187extern	void	record_raw_stats P((struct sockaddr_in *, struct sockaddr_in *, l_fp *, l_fp *, l_fp *, l_fp *));
188
189/*
190 * Variable declarations for ntpd.
191 */
192
193/* ntp_config.c */
194extern char const *	progname;
195extern char	sys_phone[][MAXDIAL];	/* ACTS phone numbers */
196extern char	pps_device[];		/* PPS device name */
197#if defined(HAVE_SCHED_SETSCHEDULER)
198extern int	config_priority_override;
199extern int	config_priority;
200#endif
201
202/* ntp_control.c */
203struct ctl_trap;
204extern struct ctl_trap ctl_trap[];
205extern int	num_ctl_traps;
206extern u_long	ctl_auth_keyid;		/* keyid used for authenticating write requests */
207
208/*
209 * Statistic counters to keep track of requests and responses.
210 */
211extern u_long	ctltimereset;		/* time stats reset */
212extern u_long	numctlreq;		/* number of requests we've received */
213extern u_long	numctlbadpkts;		/* number of bad control packets */
214extern u_long	numctlresponses; 	/* number of resp packets sent with data */
215extern u_long	numctlfrags; 		/* number of fragments sent */
216extern u_long	numctlerrors;		/* number of error responses sent */
217extern u_long	numctltooshort;		/* number of too short input packets */
218extern u_long	numctlinputresp; 	/* number of responses on input */
219extern u_long	numctlinputfrag; 	/* number of fragments on input */
220extern u_long	numctlinputerr;		/* number of input pkts with err bit set */
221extern u_long	numctlbadoffset; 	/* number of input pkts with nonzero offset */
222extern u_long	numctlbadversion;	/* number of input pkts with unknown version */
223extern u_long	numctldatatooshort;	/* data too short for count */
224extern u_long	numctlbadop; 		/* bad op code found in packet */
225extern u_long	numasyncmsgs;		/* number of async messages we've sent */
226
227/* ntp_intres.c */
228extern u_long	req_keyid;		/* request keyid */
229extern char *	req_file;		/* name of the file with configuration info */
230
231/*
232 * Other statistics of possible interest
233 */
234extern volatile u_long packets_dropped;	/* total number of packets dropped on reception */
235extern volatile u_long packets_ignored;	/* packets received on wild card interface */
236extern volatile u_long packets_received;/* total number of packets received */
237extern u_long	packets_sent;		/* total number of packets sent */
238extern u_long	packets_notsent; 	/* total number of packets which couldn't be sent */
239
240extern volatile u_long handler_calls;	/* number of calls to interrupt handler */
241extern volatile u_long handler_pkts;	/* number of pkts received by handler */
242extern u_long	io_timereset;		/* time counters were reset */
243
244/*
245 * Interface stuff
246 */
247extern struct interface *any_interface;	/* pointer to default interface */
248extern struct interface *loopback_interface;	/* point to loopback interface */
249
250/*
251 * File descriptor masks etc. for call to select
252 */
253extern fd_set	activefds;
254extern int	maxactivefd;
255
256/* ntp_loopfilter.c */
257extern double	drift_comp;		/* clock frequency (ppm) */
258extern double	clock_stability;	/* clock stability (ppm) */
259extern double	clock_max;		/* max offset allowed before step (s) */
260extern u_long	pps_control;		/* last pps sample time */
261
262/*
263 * Clock state machine control flags
264 */
265extern int	ntp_enable;		/* clock discipline enabled */
266extern int	pll_control;		/* kernel support available */
267extern int	kern_enable;		/* kernel support enabled */
268extern int	ext_enable;		/* external clock enabled */
269extern int	pps_update;		/* pps update valid */
270extern int	allow_set_backward;	/* step corrections allowed */
271extern int	correct_any;		/* corrections > 1000 s allowed */
272
273/*
274 * Clock state machine variables
275 */
276extern u_char	sys_poll;		/* log2 of system poll interval */
277extern int	state;			/* clock discipline state */
278extern int	tc_counter;		/* poll-adjust counter */
279extern u_long	last_time;		/* time of last clock update (s) */
280extern double	last_offset;		/* last clock offset (s) */
281extern double	allan_xpt;		/* Allan intercept (s) */
282extern double	sys_error;		/* system standard error (s) */
283
284/* ntp_monitor.c */
285extern struct mon_data mon_mru_list;
286extern struct mon_data mon_fifo_list;
287extern int	mon_enabled;
288
289/* ntp_peer.c */
290extern struct peer *peer_hash[];	/* peer hash table */
291extern int	peer_hash_count[];	/* count of peers in each bucket */
292extern struct peer *assoc_hash[];	/* association ID hash table */
293extern int	assoc_hash_count[];
294extern int	peer_free_count;
295
296/*
297 * Miscellaneous statistic counters which may be queried.
298 */
299extern u_long	peer_timereset;		/* time stat counters were zeroed */
300extern u_long	findpeer_calls;		/* number of calls to findpeer */
301extern u_long	assocpeer_calls;	/* number of calls to findpeerbyassoc */
302extern u_long	peer_allocations;	/* number of allocations from the free list */
303extern u_long	peer_demobilizations;	/* number of structs freed to free list */
304extern int	total_peer_structs;	/* number of peer structs in circulation */
305extern int	peer_associations;	/* number of active associations */
306
307/* ntp_proto.c */
308/*
309 * System variables are declared here.	See Section 3.2 of the
310 * specification.
311 */
312extern u_char	sys_leap;		/* system leap indicator */
313extern u_char	sys_stratum;		/* stratum of system */
314extern s_char	sys_precision;		/* local clock precision */
315extern double	sys_rootdelay;		/* distance to current sync source */
316extern double	sys_rootdispersion;	/* dispersion of system clock */
317extern u_int32	sys_refid;		/* reference source for local clock */
318extern l_fp	sys_reftime;		/* time we were last updated */
319extern struct peer *sys_peer;		/* our current peer */
320extern u_long	sys_automax;		/* maximum session key lifetime */
321
322/*
323 * Nonspecified system state variables.
324 */
325extern int	sys_bclient;		/* we set our time to broadcasts */
326extern double	sys_bdelay; 		/* broadcast client default delay */
327extern int	sys_authenticate;	/* requre authentication for config */
328extern l_fp	sys_authdelay;		/* authentication delay */
329extern u_long	sys_private;		/* private value for session seed */
330extern int	sys_manycastserver;	/* 1 => respond to manycast client pkts */
331
332/*
333 * Statistics counters
334 */
335extern u_long	sys_stattime;		/* time when we started recording */
336extern u_long	sys_badstratum; 	/* packets with invalid stratum */
337extern u_long	sys_oldversionpkt;	/* old version packets received */
338extern u_long	sys_newversionpkt;	/* new version packets received */
339extern u_long	sys_unknownversion;	/* don't know version packets */
340extern u_long	sys_badlength;		/* packets with bad length */
341extern u_long	sys_processed;		/* packets processed */
342extern u_long	sys_badauth;		/* packets dropped because of auth */
343extern u_long	sys_limitrejected;	/* pkts rejected due to client count per net */
344
345/* ntp_refclock.c */
346#ifdef REFCLOCK
347#if defined(PPS) || defined(HAVE_PPSAPI)
348extern int	fdpps;			/* pps file descriptor */
349#endif /* PPS */
350#endif
351
352/* ntp_request.c */
353extern u_long	info_auth_keyid;	/* keyid used to authenticate requests */
354
355/* ntp_restrict.c */
356extern struct restrictlist *restrictlist; /* the restriction list */
357extern u_long	client_limit;
358extern u_long	client_limit_period;
359
360/* ntp_timer.c */
361extern volatile int alarm_flag;		/* alarm flag */
362extern u_long	sys_revoke;		/* keys revoke timeout */
363extern volatile u_long alarm_overflow;
364extern u_long	current_time;		/* current time (s) */
365extern u_long	timer_timereset;
366extern u_long	timer_overflows;
367extern u_long	timer_xmtcalls;
368
369/* ntp_util.c */
370extern int	stats_control;		/* write stats to fileset? */
371
372/* ntpd.c */
373extern volatile int debug;		/* debugging flag */
374extern int	nofork;			/* no-fork flag */
375extern int 	initializing;		/* initializing flag */
376
377/* refclock_conf.c */
378#ifdef REFCLOCK
379extern struct refclock *refclock_conf[]; /* refclock configuration table */
380extern u_char	num_refclock_conf;
381#endif
382