1 /*        $NetBSD: ntpd.h,v 1.14 2024/10/01 20:59:51 christos Exp $   */
2 
3 /*
4  * ntpd.h - Prototypes and external variables for ntpd.
5  *
6  * Note the first half is primarily function prototypes, type
7  * declarations, and preprocessor macros, with variables declared
8  * primarily in the second half.
9  *
10  * Each half is further divided into sections for each source file.
11  */
12 
13 #include "ntp.h"
14 #include "ntp_stdlib.h"
15 #include "ntp_syslog.h"
16 #include "ntp_debug.h"
17 #include "ntp_syslog.h"
18 #include "ntp_select.h"
19 #include "ntp_malloc.h"
20 #include "ntp_refclock.h"
21 #include "ntp_intres.h"
22 #include "recvbuff.h"
23 
24 /*
25  * First half: ntpd types, functions, macros
26  * -----------------------------------------
27  */
28 
29 /*
30  * macro for debugging output - cut down on #ifdef pollution.
31  *
32  * DPRINTF() is for use by ntpd only, and compiles away to nothing
33  * without DEBUG (configure --disable-debugging).
34  *
35  * TRACE() is similar for libntp and utilities, which retain full
36  * debug capability even when compiled without DEBUG.
37  *
38  * The calling convention is not attractive:
39  *     DPRINTF(debuglevel, (fmt, ...));
40  *     DPRINTF(2, ("shows #ifdef DEBUG and if debug >= %d\n", 2));
41  */
42 #ifdef DEBUG
43 # define DPRINTF(lvl, arg)                                  \
44           do {                                                        \
45                     if (debug >= (lvl))                     \
46                               mprintf arg;                            \
47           } while (0)
48 #else
49 # define DPRINTF(lvl, arg)    do {} while (0)
50 #endif
51 
52 /* clear bitflag only on DEBUG builds */
53 #ifdef DEBUG
54 # define CLEAR_BIT_IF_DEBUG(bit, flags)                     \
55           do {                                                        \
56                     (flags) &= ~(bit);                      \
57           } while (FALSE)
58 #else
59 # define CLEAR_BIT_IF_DEBUG(bit, flags)                     \
60           do {} while (FALSE)
61 #endif
62 
63 
64 /* nt_clockstuff.c */
65 #ifdef SYS_WINNT
66 extern    void      win_time_stepped(void);
67 #endif
68 
69 /* ntp_config.c */
70 #define   TAI_1972  10        /* initial TAI offset (s) */
71 extern    char      *keysdir; /* crypto keys and leaptable directory */
72 extern    char *    saveconfigdir;      /* ntpq saveconfig output directory */
73 
74 extern    void      getconfig (int, char **);
75 extern    void      ctl_clr_stats       (void);
76 extern    int       ctlclrtrap          (sockaddr_u *, endpt *, int);
77 extern    u_short ctlpeerstatus         (struct peer *);
78 extern    int       ctlsettrap          (sockaddr_u *, endpt *, int, int);
79 extern    u_short ctlsysstatus          (void);
80 extern    void      init_control        (void);
81 extern    void      process_control (struct recvbuf *, int);
82 extern    void      report_event        (int, struct peer *, const char *);
83 extern    int       mprintf_event       (int evcode, struct peer *p,
84                                          const char *fmt, ...) NTP_PRINTF(3, 4);
85 
86 /* ntp_control.c */
87 /*
88  * Structure for translation tables between internal system
89  * variable indices and text format.
90  */
91 struct ctl_var {
92           u_short code;
93           u_short flags;
94           const char *text;
95 };
96 /*
97  * Flag values
98  */
99 #define   CAN_READ  0x01
100 #define   CAN_WRITE 0x02
101 
102 #define DEF                   0x20
103 #define   PADDING             0x40
104 #define   EOV                 0x80
105 
106 #define   RO        (CAN_READ)
107 #define   WO        (CAN_WRITE)
108 #define   RW        (CAN_READ|CAN_WRITE)
109 
110 extern    char *    add_var (struct ctl_var **, u_long, u_short);
111 extern    void      free_varlist (struct ctl_var *);
112 extern    void      set_var (struct ctl_var **, const char *, u_long, u_short);
113 extern    void      set_sys_var (const char *, u_long, u_short);
114 extern    const char *        get_ext_sys_var(const char *tag);
115 
116 /* ntp_io.c */
117 typedef struct interface_info {
118           endpt *   ep;
119           u_char    action;
120 } interface_info_t;
121 
122 typedef void        (*interface_receiver_t)       (void *, interface_info_t *);
123 
124 extern    void      interface_enumerate (interface_receiver_t, void *);
125 extern    endpt *   getinterface                  (sockaddr_u *, u_int32);
126 extern    endpt *   select_peerinterface          (struct peer *, sockaddr_u *,
127                                                    endpt *);
128 extern    endpt *   findinterface                 (sockaddr_u *);
129 extern    endpt *   findbcastinter                (sockaddr_u *);
130 extern    void      enable_broadcast    (endpt *, sockaddr_u *);
131 extern    void      enable_multicast_if (endpt *, sockaddr_u *);
132 extern    void      interface_update    (interface_receiver_t, void *);
133 #ifndef HAVE_IO_COMPLETION_PORT
134 extern    void      io_handler                    (void);
135 #else
136 extern    void WINAPI ip_interface_changed(ULONG_PTR ctx);
137 #endif
138 extern    void      init_io   (void);
139 extern    void      io_open_sockets     (void);
140 extern    void      io_clr_stats        (void);
141 extern    void      io_setbclient       (void);
142 extern    void      io_unsetbclient     (void);
143 extern    void      io_multicast_add(sockaddr_u *);
144 extern    void      io_multicast_del(sockaddr_u *);
145 extern    void      sendpkt             (sockaddr_u *dest, endpt * ep, int ttl,
146                                          struct pkt *pkt, int len);
147 extern    isc_boolean_t       is_linklocal(sockaddr_u *psau);
148 #ifdef DEBUG_TIMING
149 extern    void      collect_timing  (struct recvbuf *, const char *, int, l_fp *);
150 #endif
151 #ifdef HAVE_SIGNALED_IO
152 extern    void      wait_for_signal               (void);
153 extern    void      unblock_io_and_alarm          (void);
154 extern    void      block_io_and_alarm  (void);
155 # define  UNBLOCK_IO_AND_ALARM()        unblock_io_and_alarm()
156 # define  BLOCK_IO_AND_ALARM()          block_io_and_alarm()
157 #else
158 # define  UNBLOCK_IO_AND_ALARM()        do {} while (0)
159 # define  BLOCK_IO_AND_ALARM()          do {} while (0)
160 #endif
161 #define             eptoa(pif)          localaddrtoa(pif)
162 #define             latoa(pif)          eptoa(pif)
163 extern const char * localaddrtoa(endpt *);
164 #ifdef DEBUG
165 extern const char * iflags_str(u_int32 iflags);
166 #endif
167 
168 
169 /* ntp_loopfilter.c */
170 extern    void      init_loopfilter(void);
171 extern    int       local_clock(struct peer *, double);
172 extern    void      adj_host_clock(void);
173 extern    void      loop_config(int, double);
174 extern    void      select_loop(int);
175 extern    void      huffpuff(void);
176 extern    u_long    sys_clocktime;
177 extern    u_int     sys_tai;
178 extern    int       freq_cnt;
179 
180 /* ntp_monitor.c */
181 #define MON_HASH_SIZE                   ((size_t)1U << mon_hash_bits)
182 #define MON_HASH_MASK                   (MON_HASH_SIZE - 1)
183 #define   MON_HASH(addr)                (sock_hash(addr) & MON_HASH_MASK)
184 extern    void      init_mon  (void);
185 extern    void      mon_start (int);
186 extern    void      mon_stop  (int);
187 extern    u_short   ntp_monitor         (struct recvbuf *, u_short);
188 extern    void      mon_clearinterface(endpt *interface);
189 
190 /* ntp_peer.c */
191 extern    void      init_peer (void);
192 extern    struct peer *findexistingpeer(sockaddr_u *, const char *,
193                                               struct peer *, int, u_char, int *);
194 extern    struct peer *findpeer         (struct recvbuf *, int, int *);
195 extern    struct peer *findpeerbyassoc(associd_t);
196 extern  void        set_peerdstadr      (struct peer *, endpt *);
197 extern    struct peer *newpeer          (sockaddr_u *, const char *, endpt *,
198                                          int, u_char, u_char, u_char, u_char,
199                                          u_int, u_char, u_int32,
200                                          keyid_t, const char *);
201 extern    void      peer_all_reset      (void);
202 extern    void      peer_clr_stats      (void);
203 extern    struct peer *peer_config(sockaddr_u *, const char *, endpt *,
204                                          int, u_char, u_char, u_char, u_char,
205                                          u_int, u_int32,
206                                          keyid_t, const char *);
207 extern    void      peer_reset          (struct peer *);
208 extern    void      refresh_all_peerinterfaces(void);
209 extern    void      unpeer              (struct peer *);
210 extern    void      clear_all (void);
211 extern    int       score_all (struct peer *);
212 extern    struct peer *findmanycastpeer(struct recvbuf *);
213 extern    void      peer_cleanup        (void);
214 
215 /* ntp_crypto.c */
216 #ifdef AUTOKEY
217 extern    int       crypto_recv         (struct peer *, struct recvbuf *);
218 extern    int       crypto_xmit         (struct peer *, struct pkt *,
219                                             struct recvbuf *, int,
220                                             struct exten *, keyid_t);
221 extern    keyid_t   session_key         (sockaddr_u *, sockaddr_u *, keyid_t,
222                                             keyid_t, u_long);
223 extern    int       make_keylist        (struct peer *, endpt *);
224 extern    void      key_expire          (struct peer *);
225 extern    void      crypto_update       (void);
226 extern    void      crypto_update_taichange(void);
227 extern    void      crypto_config       (int, char *);
228 extern    void      crypto_setup        (void);
229 extern    u_int     crypto_ident        (struct peer *);
230 extern    struct exten *crypto_args (struct peer *, u_int, associd_t, char *);
231 extern    int       crypto_public       (struct peer *, u_char *, u_int);
232 extern    void      value_free          (struct value *);
233 extern    char      *iffpar_file;
234 extern    EVP_PKEY *iffpar_pkey;
235 extern    char      *gqpar_file;
236 extern    EVP_PKEY *gqpar_pkey;
237 extern    char      *mvpar_file;
238 extern    EVP_PKEY *mvpar_pkey;
239 extern struct value tai_leap;
240 #endif    /* AUTOKEY */
241 
242 /* ntp_proto.c */
243 extern    void      transmit  (struct peer *);
244 extern    void      receive   (struct recvbuf *);
245 extern    void      peer_clear          (struct peer *, const char *);
246 extern    void      process_packet      (struct peer *, struct pkt *, u_int);
247 extern    void      clock_select        (void);
248 extern    void      set_sys_leap        (u_char);
249 
250 extern    u_long    leapsec;  /* seconds to next leap (proximity class) */
251 extern  int         leapdif;  /* TAI difference step at next leap second */
252 extern    int       sys_orphan;
253 extern    double    sys_mindisp;
254 extern    double    sys_maxdist;
255 
256 extern    char      *sys_ident;         /* identity scheme */
257 extern    void      poll_update         (struct peer *, u_char, u_char);
258 
259 extern    void      clear               (struct peer *);
260 extern    void      clock_filter        (struct peer *, double, double, double);
261 extern    void      init_proto          (void);
262 extern    void      set_sys_tick_precision(double);
263 extern    void      proto_config        (int, u_long, double, sockaddr_u *);
264 extern    void      proto_clr_stats (void);
265 
266 /* ntp_refclock.c */
267 #ifdef    REFCLOCK
268 extern    int       refclock_newpeer (struct peer *);
269 extern    void      refclock_unpeer (struct peer *);
270 extern    void      refclock_receive (struct peer *);
271 extern    void      refclock_transmit (struct peer *);
272 extern    void      init_refclock       (void);
273 #endif    /* REFCLOCK */
274 
275 /* ntp_request.c */
276 extern    void      init_request        (void);
277 extern    void      process_private (struct recvbuf *, int);
278 extern    void      reset_auth_stats(void);
279 
280 /* ntp_restrict.c */
281 extern    void      init_restrict       (void);
282 extern    void      restrictions        (sockaddr_u *, r4addr *);
283 extern    int/*BOOL*/hack_restrict(restrict_op op, sockaddr_u *resaddr,
284                                          sockaddr_u *resmask, short ippeerlimit,
285                                          u_short mflags, u_short rflags,
286                                          u_int32 expire);
287 extern    void      restrict_source     (sockaddr_u *addr, int/*BOOL*/ remove,
288                                          u_int32 lifetime);
289 #ifdef DEBUG
290 extern    void      dump_restricts      (void);
291 extern    const char *resop_str         (restrict_op op);
292 extern    const char *rflags_str        (u_short rflags);
293 extern    const char *mflags_str        (u_short mflags);
294 #endif
295 
296 
297 /* ntp_timer.c */
298 extern    void      init_timer          (void);
299 extern    void      reinit_timer        (void);
300 extern    void      timer               (void);
301 extern    void      timer_clr_stats (void);
302 extern    int       endpt_scan_period;  /* -U option default 301s */
303 extern    u_long    endpt_scan_timer;   /* next scan current_time */
304 extern    u_long    orphwait;           /* orphan wait time */
305 #ifdef AUTOKEY
306 extern    char      *sys_hostname;      /* host name */
307 extern    char      *sys_groupname;     /* group name */
308 extern    char      *group_name;        /* group name */
309 extern    u_char    sys_revoke;         /* keys revoke timeout */
310 extern    u_char    sys_automax;        /* session key timeout */
311 #endif    /* AUTOKEY */
312 
313 /* ntp_util.c */
314 extern    void      init_util (void);
315 extern    void      write_stats         (void);
316 extern    void      stats_config        (int, const char *, int optflag);
317 extern    void      record_peer_stats (sockaddr_u *, int, double, double, double, double);
318 extern    void      record_proto_stats (char *);
319 extern    void      record_loop_stats (double, double, double, double, int);
320 extern    void      record_clock_stats (sockaddr_u *, const char *);
321 extern    int       mprintf_clock_stats(sockaddr_u *, const char *, ...)
322                                                   NTP_PRINTF(2, 3);
323 extern    void      record_raw_stats (sockaddr_u *srcadr, sockaddr_u *dstadr,
324                                           l_fp *t1, l_fp *t2, l_fp *t3, l_fp *t4,
325                                           int leap, int version, int mode,
326                                           int stratum, int ppoll, int precision,
327                                           double root_delay, double root_dispersion,
328                                           u_int32 refid, int len, u_char *extra);
329 extern    void      check_leap_file     (int is_daily_check, u_int32 ntptime, const time_t * systime);
330 extern    void      record_crypto_stats (sockaddr_u *, const char *);
331 #ifdef DEBUG
332 extern    void      record_timing_stats (const char *);
333 extern    void      append_flagstr(char *flagstr, size_t sz, const char *text);
334 #endif
335 extern    char *    fstostr(time_t);    /* NTP timescale seconds */
336 
337 /* ntpd.c */
338 extern    void      parse_cmdline_opts(int *, char ***);
339 
340 /* ntservice.c */
341 #ifndef SYS_WINNT
342 # define  ntservice_isup()    do {} while (FALSE)
343 #endif
344 
345 /*
346  * Signals we catch for debugging.
347  */
348 #define MOREDEBUGSIG          SIGUSR1
349 #define LESSDEBUGSIG          SIGUSR2
350 /*
351  * Signals which terminate us gracefully.
352  */
353 #ifndef SYS_WINNT
354 # define SIGDIE1    SIGHUP
355 # define SIGDIE2    SIGINT
356 # define SIGDIE3    SIGQUIT
357 # define SIGDIE4    SIGTERM
358 #endif /* SYS_WINNT */
359 
360 
361 /*
362  * Last half: ntpd variables
363  * -------------------------
364  */
365 
366 /* ntp_config.c */
367 extern char const * progname;
368 extern int saved_argc;
369 extern char **saved_argv;
370 extern char         *sys_phone[];                 /* ACTS phone numbers */
371 #if defined(HAVE_SCHED_SETSCHEDULER)
372 extern int          config_priority_override;
373 extern int          config_priority;
374 #endif
375 extern char *ntp_signd_socket;
376 extern struct config_tree_tag *cfg_tree_history;
377 
378 #ifdef BC_LIST_FRAMEWORK_NOT_YET_USED
379 /*
380  * backwards compatibility flags
381  */
382 typedef struct bc_entry_tag {
383           int       token;
384           int       enabled;
385 } bc_entry;
386 
387 extern bc_entry bc_list[];
388 #endif
389 
390 /* ntp_control.c */
391 extern int          num_ctl_traps;
392 extern keyid_t      ctl_auth_keyid;               /* keyid used for authenticating write requests */
393 
394 /*
395  * Statistic counters to keep track of requests and responses.
396  */
397 extern u_long       ctltimereset;                 /* time stats reset */
398 extern u_long       numctlreq;                    /* number of requests we've received */
399 extern u_long       numctlbadpkts;                /* number of bad control packets */
400 extern u_long       numctlresponses;    /* number of resp packets sent with data */
401 extern u_long       numctlfrags;                  /* number of fragments sent */
402 extern u_long       numctlerrors;                 /* number of error responses sent */
403 extern u_long       numctltooshort;               /* number of too short input packets */
404 extern u_long       numctlinputresp;    /* number of responses on input */
405 extern u_long       numctlinputfrag;    /* number of fragments on input */
406 extern u_long       numctlinputerr;               /* number of input pkts with err bit set */
407 extern u_long       numctlbadoffset;    /* number of input pkts with nonzero offset */
408 extern u_long       numctlbadversion;   /* number of input pkts with unknown version */
409 extern u_long       numctldatatooshort; /* data too short for count */
410 extern u_long       numctlbadop;                  /* bad op code found in packet */
411 extern u_long       numasyncmsgs;                 /* number of async messages we've sent */
412 
413 /*
414  * Other statistics of possible interest
415  */
416 extern volatile u_long packets_dropped; /* total number of packets dropped on reception */
417 extern volatile u_long packets_ignored; /* packets received on wild card interface */
418 extern volatile u_long packets_received;/* total number of packets received */
419 extern u_long       packets_sent;                 /* total number of packets sent */
420 extern u_long       packets_notsent;    /* total number of packets which couldn't be sent */
421 
422 extern volatile u_long handler_calls;   /* number of calls to interrupt handler */
423 extern volatile u_long handler_pkts;    /* number of pkts received by handler */
424 extern u_long       io_timereset;                 /* time counters were reset */
425 
426 /* ntp_io.c */
427 extern int          no_periodic_scan;   /* no periodic net addr scans */
428 extern int          scan_addrs_once;    /* no net addr rescans */
429 extern int          nonlocal_v4_addr_up;          /* should we try IPv4 pool? */
430 extern int          nonlocal_v6_addr_up;          /* should we try IPv6 pool? */
431 extern u_int        sys_ifnum;                    /* next .ifnum to assign */
432 extern endpt *      any_interface;                /* IPv4 wildcard */
433 extern endpt *      any6_interface;               /* IPv6 wildcard */
434 extern endpt *      loopback_interface; /* IPv4 loopback for refclocks */
435 extern endpt *      ep_list;            /* linked list */
436 
437 /* ntp_loopfilter.c */
438 extern double       drift_comp;                   /* clock frequency (s/s) */
439 extern double       clock_stability;    /* clock stability (s/s) */
440 extern double       clock_max_back;               /* max backward offset before step (s) */
441 extern double       clock_max_fwd;                /* max forward offset before step (s) */
442 extern double       clock_panic;                  /* max offset before panic (s) */
443 extern double       clock_phi;                    /* dispersion rate (s/s) */
444 extern double       clock_minstep;                /* step timeout (s) */
445 extern double       clock_codec;                  /* codec frequency */
446 #ifdef KERNEL_PLL
447 extern int          pll_status;                   /* status bits for kernel pll */
448 #endif /* KERNEL_PLL */
449 
450 /*
451  * Clock state machine control flags
452  */
453 extern int          ntp_enable;                   /* clock discipline enabled */
454 extern int          pll_control;                  /* kernel support available */
455 extern int          kern_enable;                  /* kernel support enabled */
456 extern int          hardpps_enable;               /* kernel PPS discipline enabled */
457 extern int          ext_enable;                   /* external clock enabled */
458 extern int          cal_enable;                   /* refclock calibrate enable */
459 extern int          allow_panic;                  /* allow panic correction (-g) */
460 extern int          enable_panic_check; /* Can we check allow_panic's state? */
461 extern int          force_step_once;    /* always step time once at startup (-G) */
462 extern int          mode_ntpdate;                 /* exit on first clock set (-q) */
463 extern int          peer_ntpdate;                 /* count of ntpdate peers */
464 
465 /*
466  * Clock state machine variables
467  */
468 extern u_char       sys_poll;           /* system poll interval (log2 s) */
469 extern int          state;                        /* clock discipline state */
470 extern int          tc_counter;                   /* poll-adjust counter */
471 extern u_long       last_time;                    /* time of last clock update (s) */
472 extern double       last_offset;                  /* last clock offset (s) */
473 extern u_char       allan_xpt;                    /* Allan intercept (log2 s) */
474 extern double       clock_jitter;                 /* clock jitter (s) */
475 extern double       sys_offset;                   /* system offset (s) */
476 extern double       sys_jitter;                   /* system jitter (s) */
477 
478 /* ntp_monitor.c */
479 extern u_char       mon_hash_bits;                /* log2 size of hash table */
480 extern mon_entry ** mon_hash;           /* MRU hash table */
481 extern mon_entry mon_mru_list;                    /* mru listhead */
482 extern u_int        mon_enabled;                  /* MON_OFF (0) or other MON_* */
483 extern u_int        mru_alloc;                    /* mru list + free list count */
484 extern u_int        mru_entries;                  /* mru list count */
485 extern u_int        mru_peakentries;    /* highest mru_entries */
486 extern u_int        mru_initalloc;                /* entries to preallocate */
487 extern u_int        mru_incalloc;                 /* allocation batch factor */
488 extern u_int        mru_mindepth;                 /* preempt above this */
489 extern int          mru_maxage;                   /* for entries older than */
490 extern u_int        mru_maxdepth;                 /* MRU size hard limit */
491 extern int          mon_age;            /* preemption limit */
492 
493 /* ntp_peer.c */
494 extern struct peer *peer_hash[NTP_HASH_SIZE];     /* peer hash table */
495 extern int          peer_hash_count[NTP_HASH_SIZE];         /* count of in each bucket */
496 extern struct peer *assoc_hash[NTP_HASH_SIZE];    /* association ID hash table */
497 extern int          assoc_hash_count[NTP_HASH_SIZE];/* count of in each bucket */
498 extern struct peer *peer_list;                    /* peer structures list */
499 extern int          peer_count;                   /* count in peer_list */
500 extern int          peer_free_count;    /* count in peer_free */
501 
502 /*
503  * Miscellaneous statistic counters which may be queried.
504  */
505 extern u_long       peer_timereset;               /* time stat counters were zeroed */
506 extern u_long       findpeer_calls;               /* number of calls to findpeer */
507 extern u_long       assocpeer_calls;    /* number of calls to findpeerbyassoc */
508 extern u_long       peer_allocations;   /* number of allocations from the free list */
509 extern u_long       peer_demobilizations;         /* number of structs freed to free list */
510 extern int          total_peer_structs; /* number of peer structs in circulation */
511 extern int          peer_associations;  /* mobilized associations */
512 extern int          peer_preempt;                 /* preemptable associations */
513 
514 /* ntp_proto.c */
515 /*
516  * System variables are declared here.  See Section 3.2 of the
517  * specification.
518  */
519 extern u_char       sys_leap;           /* system leap indicator */
520 extern u_char       sys_stratum;                  /* system stratum */
521 extern s_char       sys_precision;                /* local clock precision */
522 extern double       sys_rootdelay;                /* roundtrip delay to primary source */
523 extern double       sys_rootdisp;                 /* dispersion to primary source */
524 extern u_int32      sys_refid;                    /* reference id */
525 extern l_fp         sys_reftime;                  /* last update time */
526 extern struct peer *sys_peer;           /* current peer */
527 
528 /*
529  * Nonspecified system state variables.
530  */
531 extern int          sys_bclient;                  /* we set our time to broadcasts */
532 extern int          sys_mclient;                  /* we set our time to manycasts */
533 extern double       sys_bdelay;                   /* broadcast client default delay */
534 extern int          sys_authenticate;   /* requre authentication for config */
535 extern l_fp         sys_authdelay;                /* authentication delay */
536 extern u_char       sys_bcpollbstep;    /* broadcast poll backstep gate */
537 extern u_long       sys_epoch;                    /* last clock update time */
538 extern keyid_t      sys_private;                  /* private value for session seed */
539 extern int          sys_manycastserver; /* respond to manycast client pkts */
540 extern int          sys_maxclock;                 /* maximum survivors */
541 extern int          sys_minclock;                 /* minimum survivors */
542 extern int          sys_minsane;                  /* minimum candidates */
543 extern int          sys_floor;                    /* cluster stratum floor */
544 extern int          sys_ceiling;                  /* cluster stratum ceiling */
545 extern u_char       sys_ttl[MAX_TTL];   /* ttl mapping vector */
546 extern u_int        sys_ttlmax;                   /* max ttl mapping vector index */
547 
548 /*
549  * Statistics counters
550  */
551 extern u_long       sys_badauth;                  /* bad authentication */
552 extern u_long       sys_badlength;                /* bad length or format */
553 extern u_long       sys_declined;                 /* declined */
554 extern u_long       sys_kodsent;                  /* KoD sent */
555 extern u_long       sys_lamport;                  /* Lamport violation */
556 extern u_long       sys_limitrejected;  /* rate exceeded */
557 extern u_long       sys_newversion;               /* current version  */
558 extern u_long       sys_oldversion;               /* old version */
559 extern u_long       sys_processed;                /* packets for this host */
560 extern u_long       sys_received;                 /* packets received */
561 extern u_long       sys_restricted;               /* access denied */
562 extern u_long       sys_stattime;                 /* time since reset */
563 extern u_long       sys_tsrounding;               /* timestamp rounding errors */
564 
565 /* ntp_request.c */
566 extern keyid_t      info_auth_keyid;    /* keyid used to authenticate requests */
567 extern u_long       auth_timereset;
568 
569 /* ntp_restrict.c */
570 extern struct restrict_4 *    restrictlist4;      /* IPv4 restriction list */
571 extern struct restrict_6 *    restrictlist6;      /* IPv6 restriction list */
572 extern int                    ntp_minpkt;
573 extern u_char                 ntp_minpoll;
574 
575 /* ntp_scanner.c */
576 extern u_int32                conf_file_sum;      /* Simple sum of characters */
577 
578 /* ntp_signd.c */
579 #ifdef HAVE_NTP_SIGND
580 extern void send_via_ntp_signd(struct recvbuf *, int, keyid_t, int,
581                                      struct pkt *);
582 #endif
583 
584 /* ntp_timer.c */
585 extern volatile int alarm_flag;                   /* alarm flag */
586 extern volatile u_long alarm_overflow;
587 extern u_long       current_time;                 /* seconds since startup */
588 extern u_long       timer_timereset;
589 extern u_long       timer_overflows;
590 extern u_long       timer_xmtcalls;
591 extern int          leap_sec_in_progress;
592 #ifdef LEAP_SMEAR
593 extern struct leap_smear_info leap_smear;
594 extern int          leap_smear_intv;
595 #endif
596 #ifdef SYS_WINNT
597 HANDLE WaitableTimerHandle;
598 #endif
599 
600 /* ntp_util.c */
601 extern    char      statsdir[MAXFILENAME];
602 extern    int       stats_control;                /* write stats to fileset? */
603 extern    int       stats_write_period; /* # of seconds between writes. */
604 extern    double    stats_write_tolerance;
605 extern    double    wander_threshold;
606 
607 /* ntpd.c */
608 extern    int       nofork;             /* no-fork flag */
609 extern    int       initializing;       /* initializing flag */
610 #ifdef HAVE_DROPROOT
611 extern    int       droproot; /* flag: try to drop root privileges after startup */
612 extern    int       root_dropped;       /* root has been dropped */
613 extern char *user;            /* user to switch to */
614 extern char *group;           /* group to switch to */
615 extern const char *chrootdir; /* directory to chroot() to */
616 #endif
617 #ifdef HAVE_WORKING_FORK
618 extern    int       daemon_pipe[2];     /* startup monitoring */
619 #endif
620 
621 /* ntservice.c */
622 #ifdef SYS_WINNT
623 extern int accept_wildcard_if_for_winnt;
624 #endif
625 
626 /* refclock_conf.c */
627 #ifdef REFCLOCK
628 /* refclock configuration table */
629 extern struct refclock * const refclock_conf[];
630 extern u_char       num_refclock_conf;
631 #endif
632 
633