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