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