154359Sroberto/* 2285612Sdelphij * ntpd.h - Prototypes and external variables for ntpd. 3285612Sdelphij * 4285612Sdelphij * Note the first half is primarily function prototypes, type 5285612Sdelphij * declarations, and preprocessor macros, with variables declared 6285612Sdelphij * primarily in the second half. 7285612Sdelphij * 8285612Sdelphij * Each half is further divided into sections for each source file. 954359Sroberto */ 1054359Sroberto 11285612Sdelphij#include "ntp.h" 12285612Sdelphij#include "ntp_stdlib.h" 1354359Sroberto#include "ntp_syslog.h" 14182007Sroberto#include "ntp_debug.h" 15285612Sdelphij#include "ntp_syslog.h" 1654359Sroberto#include "ntp_select.h" 1754359Sroberto#include "ntp_malloc.h" 1854359Sroberto#include "ntp_refclock.h" 19285612Sdelphij#include "ntp_intres.h" 2054359Sroberto#include "recvbuff.h" 2154359Sroberto 22285612Sdelphij/* 23285612Sdelphij * First half: ntpd types, functions, macros 24285612Sdelphij * ----------------------------------------- 25285612Sdelphij */ 2654359Sroberto 27285612Sdelphij/* 28285612Sdelphij * macro for debugging output - cut down on #ifdef pollution. 29285612Sdelphij * 30285612Sdelphij * DPRINTF() is for use by ntpd only, and compiles away to nothing 31285612Sdelphij * without DEBUG (configure --disable-debugging). 32285612Sdelphij * 33285612Sdelphij * TRACE() is similar for libntp and utilities, which retain full 34285612Sdelphij * debug capability even when compiled without DEBUG. 35285612Sdelphij * 36285612Sdelphij * The calling convention is not attractive: 37285612Sdelphij * DPRINTF(debuglevel, (fmt, ...)); 38285612Sdelphij * DPRINTF(2, ("shows #ifdef DEBUG and if debug >= %d\n", 2)); 39285612Sdelphij */ 40285612Sdelphij#ifdef DEBUG 41285612Sdelphij# define DPRINTF(lvl, arg) \ 42285612Sdelphij do { \ 43285612Sdelphij if (debug >= (lvl)) \ 44285612Sdelphij mprintf arg; \ 45285612Sdelphij } while (0) 46285612Sdelphij#else 47285612Sdelphij# define DPRINTF(lvl, arg) do {} while (0) 48285612Sdelphij#endif 4954359Sroberto 50285612Sdelphij 51285612Sdelphij/* nt_clockstuff.c */ 52285612Sdelphij#ifdef SYS_WINNT 53285612Sdelphijextern void win_time_stepped(void); 54285612Sdelphij#endif 55285612Sdelphij 5654359Sroberto/* ntp_config.c */ 57285612Sdelphij#define TAI_1972 10 /* initial TAI offset (s) */ 58285612Sdelphijextern char *keysdir; /* crypto keys and leaptable directory */ 59285612Sdelphijextern char * saveconfigdir; /* ntpq saveconfig output directory */ 6054359Sroberto 61285612Sdelphijextern void getconfig (int, char **); 62285612Sdelphijextern void ctl_clr_stats (void); 63285612Sdelphijextern int ctlclrtrap (sockaddr_u *, struct interface *, int); 64285612Sdelphijextern u_short ctlpeerstatus (struct peer *); 65285612Sdelphijextern int ctlsettrap (sockaddr_u *, struct interface *, int, int); 66285612Sdelphijextern u_short ctlsysstatus (void); 67285612Sdelphijextern void init_control (void); 68285612Sdelphijextern void process_control (struct recvbuf *, int); 69285612Sdelphijextern void report_event (int, struct peer *, const char *); 70285612Sdelphijextern int mprintf_event (int, struct peer *, const char *, ...) 71285612Sdelphij NTP_PRINTF(3, 4); 7254359Sroberto 7354359Sroberto/* ntp_control.c */ 7454359Sroberto/* 7554359Sroberto * Structure for translation tables between internal system 7654359Sroberto * variable indices and text format. 7754359Sroberto */ 7854359Srobertostruct ctl_var { 7954359Sroberto u_short code; 8054359Sroberto u_short flags; 81285612Sdelphij const char *text; 8254359Sroberto}; 8354359Sroberto/* 8454359Sroberto * Flag values 8554359Sroberto */ 8654359Sroberto#define CAN_READ 0x01 8754359Sroberto#define CAN_WRITE 0x02 8854359Sroberto 8954359Sroberto#define DEF 0x20 9054359Sroberto#define PADDING 0x40 9154359Sroberto#define EOV 0x80 9254359Sroberto 9354359Sroberto#define RO (CAN_READ) 9454359Sroberto#define WO (CAN_WRITE) 9554359Sroberto#define RW (CAN_READ|CAN_WRITE) 9654359Sroberto 97285612Sdelphijextern char * add_var (struct ctl_var **, u_long, u_short); 98285612Sdelphijextern void free_varlist (struct ctl_var *); 99285612Sdelphijextern void set_var (struct ctl_var **, const char *, u_long, u_short); 100285612Sdelphijextern void set_sys_var (const char *, u_long, u_short); 101285612Sdelphijextern const char * get_ext_sys_var(const char *tag); 10254359Sroberto 10354359Sroberto/* ntp_io.c */ 104182007Srobertotypedef struct interface_info { 105285612Sdelphij endpt * ep; 106285612Sdelphij u_char action; 107182007Sroberto} interface_info_t; 108182007Sroberto 109285612Sdelphijtypedef void (*interface_receiver_t) (void *, interface_info_t *); 110182007Sroberto 111285612Sdelphijextern void interface_enumerate (interface_receiver_t, void *); 112285612Sdelphijextern endpt * getinterface (sockaddr_u *, u_int32); 113285612Sdelphijextern endpt * select_peerinterface (struct peer *, sockaddr_u *, 114285612Sdelphij endpt *); 115285612Sdelphijextern endpt * findinterface (sockaddr_u *); 116285612Sdelphijextern endpt * findbcastinter (sockaddr_u *); 117285612Sdelphijextern void enable_broadcast (endpt *, sockaddr_u *); 118285612Sdelphijextern void enable_multicast_if (endpt *, sockaddr_u *); 119285612Sdelphijextern void interface_update (interface_receiver_t, void *); 120285612Sdelphij#ifndef HAVE_IO_COMPLETION_PORT 121285612Sdelphijextern void io_handler (void); 122285612Sdelphij#endif 123285612Sdelphijextern void init_io (void); 124285612Sdelphijextern void io_open_sockets (void); 125285612Sdelphijextern void io_clr_stats (void); 126285612Sdelphijextern void io_setbclient (void); 127285612Sdelphijextern void io_unsetbclient (void); 128285612Sdelphijextern void io_multicast_add(sockaddr_u *); 129285612Sdelphijextern void io_multicast_del(sockaddr_u *); 130285612Sdelphijextern void sendpkt (sockaddr_u *, struct interface *, int, struct pkt *, int); 131182007Sroberto#ifdef DEBUG 132285612Sdelphijextern void collect_timing (struct recvbuf *, const char *, int, l_fp *); 133182007Sroberto#endif 13454359Sroberto#ifdef HAVE_SIGNALED_IO 135285612Sdelphijextern void wait_for_signal (void); 136285612Sdelphijextern void unblock_io_and_alarm (void); 137285612Sdelphijextern void block_io_and_alarm (void); 138285612Sdelphij# define UNBLOCK_IO_AND_ALARM() unblock_io_and_alarm() 139285612Sdelphij# define BLOCK_IO_AND_ALARM() block_io_and_alarm() 140182007Sroberto#else 141285612Sdelphij# define UNBLOCK_IO_AND_ALARM() do {} while (0) 142285612Sdelphij# define BLOCK_IO_AND_ALARM() do {} while (0) 14354359Sroberto#endif 144285612Sdelphij#define latoa(pif) localaddrtoa(pif) 145285612Sdelphijextern const char * localaddrtoa(endpt *); 14654359Sroberto 14754359Sroberto/* ntp_loopfilter.c */ 148285612Sdelphijextern void init_loopfilter(void); 149285612Sdelphijextern int local_clock(struct peer *, double); 150285612Sdelphijextern void adj_host_clock(void); 151285612Sdelphijextern void loop_config(int, double); 152285612Sdelphijextern void select_loop(int); 153285612Sdelphijextern void huffpuff(void); 154182007Srobertoextern u_long sys_clocktime; 155285612Sdelphijextern u_int sys_tai; 156285612Sdelphijextern int freq_cnt; 15754359Sroberto 15854359Sroberto/* ntp_monitor.c */ 159293650Sglebius#define MON_HASH_SIZE ((size_t)1U << mon_hash_bits) 160285612Sdelphij#define MON_HASH_MASK (MON_HASH_SIZE - 1) 161285612Sdelphij#define MON_HASH(addr) (sock_hash(addr) & MON_HASH_MASK) 162285612Sdelphijextern void init_mon (void); 163285612Sdelphijextern void mon_start (int); 164285612Sdelphijextern void mon_stop (int); 165285612Sdelphijextern u_short ntp_monitor (struct recvbuf *, u_short); 166285612Sdelphijextern void mon_clearinterface(endpt *interface); 16754359Sroberto 16854359Sroberto/* ntp_peer.c */ 169285612Sdelphijextern void init_peer (void); 170285612Sdelphijextern struct peer *findexistingpeer(sockaddr_u *, const char *, 171330141Sdelphij struct peer *, int, u_char, int *); 172285612Sdelphijextern struct peer *findpeer (struct recvbuf *, int, int *); 173285612Sdelphijextern struct peer *findpeerbyassoc(associd_t); 174285612Sdelphijextern void set_peerdstadr (struct peer *, endpt *); 175330141Sdelphijextern struct peer *newpeer (sockaddr_u *, const char *, endpt *, 176330141Sdelphij int, u_char, u_char, u_char, u_char, 177330141Sdelphij u_int, u_char, u_int32, 178285612Sdelphij keyid_t, const char *); 179285612Sdelphijextern void peer_all_reset (void); 180285612Sdelphijextern void peer_clr_stats (void); 181330141Sdelphijextern struct peer *peer_config(sockaddr_u *, const char *, endpt *, 182330141Sdelphij int, u_char, u_char, u_char, u_char, 183330141Sdelphij u_int, u_int32, 184285612Sdelphij keyid_t, const char *); 185285612Sdelphijextern void peer_reset (struct peer *); 186285612Sdelphijextern void refresh_all_peerinterfaces(void); 187285612Sdelphijextern void unpeer (struct peer *); 188285612Sdelphijextern void clear_all (void); 189285612Sdelphijextern int score_all (struct peer *); 190285612Sdelphijextern struct peer *findmanycastpeer(struct recvbuf *); 191285612Sdelphijextern void peer_cleanup (void); 192182007Sroberto 193132451Sroberto/* ntp_crypto.c */ 194285612Sdelphij#ifdef AUTOKEY 195285612Sdelphijextern int crypto_recv (struct peer *, struct recvbuf *); 196285612Sdelphijextern int crypto_xmit (struct peer *, struct pkt *, 197285612Sdelphij struct recvbuf *, int, 198285612Sdelphij struct exten *, keyid_t); 199285612Sdelphijextern keyid_t session_key (sockaddr_u *, sockaddr_u *, keyid_t, 200285612Sdelphij keyid_t, u_long); 201285612Sdelphijextern int make_keylist (struct peer *, struct interface *); 202285612Sdelphijextern void key_expire (struct peer *); 203285612Sdelphijextern void crypto_update (void); 204285612Sdelphijextern void crypto_update_taichange(void); 205285612Sdelphijextern void crypto_config (int, char *); 206285612Sdelphijextern void crypto_setup (void); 207285612Sdelphijextern u_int crypto_ident (struct peer *); 208285612Sdelphijextern struct exten *crypto_args (struct peer *, u_int, associd_t, char *); 209285612Sdelphijextern int crypto_public (struct peer *, u_char *, u_int); 210285612Sdelphijextern void value_free (struct value *); 211182007Srobertoextern char *iffpar_file; 212182007Srobertoextern EVP_PKEY *iffpar_pkey; 213182007Srobertoextern char *gqpar_file; 214182007Srobertoextern EVP_PKEY *gqpar_pkey; 215182007Srobertoextern char *mvpar_file; 216182007Srobertoextern EVP_PKEY *mvpar_pkey; 217182007Srobertoextern struct value tai_leap; 218285612Sdelphij#endif /* AUTOKEY */ 219132451Sroberto 22054359Sroberto/* ntp_proto.c */ 221285612Sdelphijextern void transmit (struct peer *); 222285612Sdelphijextern void receive (struct recvbuf *); 223285612Sdelphijextern void peer_clear (struct peer *, const char *); 224285612Sdelphijextern void process_packet (struct peer *, struct pkt *, u_int); 225285612Sdelphijextern void clock_select (void); 226285612Sdelphijextern void set_sys_leap (u_char); 22754359Sroberto 228285612Sdelphijextern u_long leapsec; /* seconds to next leap (proximity class) */ 229285612Sdelphijextern int leapdif; /* TAI difference step at next leap second*/ 230285612Sdelphijextern int sys_orphan; 231285612Sdelphijextern double sys_mindisp; 232285612Sdelphijextern double sys_maxdist; 23354359Sroberto 234285612Sdelphijextern char *sys_ident; /* identity scheme */ 235285612Sdelphijextern void poll_update (struct peer *, u_char); 23654359Sroberto 237285612Sdelphijextern void clear (struct peer *); 238285612Sdelphijextern void clock_filter (struct peer *, double, double, double); 239285612Sdelphijextern void init_proto (void); 240285612Sdelphijextern void set_sys_tick_precision(double); 241285612Sdelphijextern void proto_config (int, u_long, double, sockaddr_u *); 242285612Sdelphijextern void proto_clr_stats (void); 243285612Sdelphij 244285612Sdelphij/* ntp_refclock.c */ 24554359Sroberto#ifdef REFCLOCK 246285612Sdelphijextern int refclock_newpeer (struct peer *); 247285612Sdelphijextern void refclock_unpeer (struct peer *); 248285612Sdelphijextern void refclock_receive (struct peer *); 249285612Sdelphijextern void refclock_transmit (struct peer *); 250285612Sdelphijextern void init_refclock (void); 25154359Sroberto#endif /* REFCLOCK */ 25254359Sroberto 25354359Sroberto/* ntp_request.c */ 254285612Sdelphijextern void init_request (void); 255285612Sdelphijextern void process_private (struct recvbuf *, int); 256285612Sdelphijextern void reset_auth_stats(void); 25754359Sroberto 25854359Sroberto/* ntp_restrict.c */ 259285612Sdelphijextern void init_restrict (void); 260330141Sdelphijextern void restrictions (sockaddr_u *, r4addr *); 261330141Sdelphijextern void hack_restrict (restrict_op, sockaddr_u *, sockaddr_u *, 262330141Sdelphij short, u_short, u_short, u_long); 263285612Sdelphijextern void restrict_source (sockaddr_u *, int, u_long); 264330141Sdelphijextern void dump_restricts (void); 26554359Sroberto 26654359Sroberto/* ntp_timer.c */ 267285612Sdelphijextern void init_timer (void); 268285612Sdelphijextern void reinit_timer (void); 269285612Sdelphijextern void timer (void); 270285612Sdelphijextern void timer_clr_stats (void); 271285612Sdelphijextern void timer_interfacetimeout (u_long); 272285612Sdelphijextern volatile int interface_interval; 273285612Sdelphijextern u_long orphwait; /* orphan wait time */ 274285612Sdelphij#ifdef AUTOKEY 275285612Sdelphijextern char *sys_hostname; /* host name */ 276285612Sdelphijextern char *sys_groupname; /* group name */ 277285612Sdelphijextern char *group_name; /* group name */ 278285612Sdelphijextern u_long sys_revoke; /* keys revoke timeout */ 279285612Sdelphijextern u_long sys_automax; /* session key timeout */ 280285612Sdelphij#endif /* AUTOKEY */ 281182007Sroberto 28254359Sroberto/* ntp_util.c */ 283285612Sdelphijextern void init_util (void); 284285612Sdelphijextern void write_stats (void); 285285612Sdelphijextern void stats_config (int, const char *); 286285612Sdelphijextern void record_peer_stats (sockaddr_u *, int, double, double, double, double); 287285612Sdelphijextern void record_proto_stats (char *); 288285612Sdelphijextern void record_loop_stats (double, double, double, double, int); 289285612Sdelphijextern void record_clock_stats (sockaddr_u *, const char *); 290285612Sdelphijextern int mprintf_clock_stats(sockaddr_u *, const char *, ...) 291285612Sdelphij NTP_PRINTF(2, 3); 292330141Sdelphijextern void record_raw_stats (sockaddr_u *srcadr, sockaddr_u *dstadr, l_fp *t1, l_fp *t2, l_fp *t3, l_fp *t4, int leap, int version, int mode, int stratum, int ppoll, int precision, double root_delay, double root_dispersion, u_int32 refid, int len, u_char *extra); 293285612Sdelphijextern void check_leap_file (int is_daily_check, u_int32 ntptime, const time_t * systime); 294285612Sdelphijextern void record_crypto_stats (sockaddr_u *, const char *); 295182007Sroberto#ifdef DEBUG 296285612Sdelphijextern void record_timing_stats (const char *); 297182007Sroberto#endif 298285612Sdelphijextern char * fstostr(time_t); /* NTP timescale seconds */ 29954359Sroberto 300285612Sdelphij/* ntpd.c */ 301285612Sdelphijextern void parse_cmdline_opts(int *, char ***); 30254359Sroberto/* 303285612Sdelphij * Signals we catch for debugging. 30454359Sroberto */ 305285612Sdelphij#define MOREDEBUGSIG SIGUSR1 306285612Sdelphij#define LESSDEBUGSIG SIGUSR2 307285612Sdelphij/* 308285612Sdelphij * Signals which terminate us gracefully. 309285612Sdelphij */ 310285612Sdelphij#ifndef SYS_WINNT 311285612Sdelphij# define SIGDIE1 SIGHUP 312285612Sdelphij# define SIGDIE2 SIGINT 313285612Sdelphij# define SIGDIE3 SIGQUIT 314285612Sdelphij# define SIGDIE4 SIGTERM 315285612Sdelphij#endif /* SYS_WINNT */ 31654359Sroberto 317285612Sdelphij 318285612Sdelphij/* 319285612Sdelphij * Last half: ntpd variables 320285612Sdelphij * ------------------------- 321285612Sdelphij */ 322285612Sdelphij 32354359Sroberto/* ntp_config.c */ 32454359Srobertoextern char const * progname; 325316069Sdelphijextern int saved_argc; 326316069Sdelphijextern char **saved_argv; 327182007Srobertoextern char *sys_phone[]; /* ACTS phone numbers */ 32854359Sroberto#if defined(HAVE_SCHED_SETSCHEDULER) 32954359Srobertoextern int config_priority_override; 33054359Srobertoextern int config_priority; 33154359Sroberto#endif 332285612Sdelphijextern char *ntp_signd_socket; 333285612Sdelphijextern struct config_tree_tag *cfg_tree_history; 33454359Sroberto 335285612Sdelphij#ifdef BC_LIST_FRAMEWORK_NOT_YET_USED 336285612Sdelphij/* 337285612Sdelphij * backwards compatibility flags 338285612Sdelphij */ 339285612Sdelphijtypedef struct bc_entry_tag { 340285612Sdelphij int token; 341285612Sdelphij int enabled; 342285612Sdelphij} bc_entry; 343285612Sdelphij 344285612Sdelphijextern bc_entry bc_list[]; 345285612Sdelphij#endif 346285612Sdelphij 34754359Sroberto/* ntp_control.c */ 34854359Srobertoextern int num_ctl_traps; 34982498Srobertoextern keyid_t ctl_auth_keyid; /* keyid used for authenticating write requests */ 35054359Sroberto 35154359Sroberto/* 35254359Sroberto * Statistic counters to keep track of requests and responses. 35354359Sroberto */ 35454359Srobertoextern u_long ctltimereset; /* time stats reset */ 35554359Srobertoextern u_long numctlreq; /* number of requests we've received */ 35654359Srobertoextern u_long numctlbadpkts; /* number of bad control packets */ 35754359Srobertoextern u_long numctlresponses; /* number of resp packets sent with data */ 35854359Srobertoextern u_long numctlfrags; /* number of fragments sent */ 35954359Srobertoextern u_long numctlerrors; /* number of error responses sent */ 36054359Srobertoextern u_long numctltooshort; /* number of too short input packets */ 36154359Srobertoextern u_long numctlinputresp; /* number of responses on input */ 36254359Srobertoextern u_long numctlinputfrag; /* number of fragments on input */ 36354359Srobertoextern u_long numctlinputerr; /* number of input pkts with err bit set */ 36454359Srobertoextern u_long numctlbadoffset; /* number of input pkts with nonzero offset */ 36554359Srobertoextern u_long numctlbadversion; /* number of input pkts with unknown version */ 36654359Srobertoextern u_long numctldatatooshort; /* data too short for count */ 36754359Srobertoextern u_long numctlbadop; /* bad op code found in packet */ 36854359Srobertoextern u_long numasyncmsgs; /* number of async messages we've sent */ 36954359Sroberto 37054359Sroberto/* 37154359Sroberto * Other statistics of possible interest 37254359Sroberto */ 37354359Srobertoextern volatile u_long packets_dropped; /* total number of packets dropped on reception */ 37454359Srobertoextern volatile u_long packets_ignored; /* packets received on wild card interface */ 37554359Srobertoextern volatile u_long packets_received;/* total number of packets received */ 37654359Srobertoextern u_long packets_sent; /* total number of packets sent */ 37754359Srobertoextern u_long packets_notsent; /* total number of packets which couldn't be sent */ 37854359Sroberto 37954359Srobertoextern volatile u_long handler_calls; /* number of calls to interrupt handler */ 38054359Srobertoextern volatile u_long handler_pkts; /* number of pkts received by handler */ 38154359Srobertoextern u_long io_timereset; /* time counters were reset */ 38254359Sroberto 383285612Sdelphij/* ntp_io.c */ 384285612Sdelphijextern int disable_dynamic_updates; 385285612Sdelphijextern u_int sys_ifnum; /* next .ifnum to assign */ 386285612Sdelphijextern endpt * any_interface; /* IPv4 wildcard */ 387285612Sdelphijextern endpt * any6_interface; /* IPv6 wildcard */ 388285612Sdelphijextern endpt * loopback_interface; /* IPv4 loopback for refclocks */ 389285612Sdelphijextern endpt * ep_list; /* linked list */ 39054359Sroberto 39154359Sroberto/* ntp_loopfilter.c */ 39282498Srobertoextern double drift_comp; /* clock frequency (s/s) */ 39382498Srobertoextern double clock_stability; /* clock stability (s/s) */ 394285612Sdelphijextern double clock_max_back; /* max backward offset before step (s) */ 395285612Sdelphijextern double clock_max_fwd; /* max forward offset before step (s) */ 39682498Srobertoextern double clock_panic; /* max offset before panic (s) */ 39782498Srobertoextern double clock_phi; /* dispersion rate (s/s) */ 39882498Srobertoextern double clock_minstep; /* step timeout (s) */ 399285612Sdelphijextern double clock_codec; /* codec frequency */ 40082498Sroberto#ifdef KERNEL_PLL 40182498Srobertoextern int pll_status; /* status bits for kernel pll */ 40282498Sroberto#endif /* KERNEL_PLL */ 40354359Sroberto 40454359Sroberto/* 40554359Sroberto * Clock state machine control flags 40654359Sroberto */ 40754359Srobertoextern int ntp_enable; /* clock discipline enabled */ 40854359Srobertoextern int pll_control; /* kernel support available */ 40954359Srobertoextern int kern_enable; /* kernel support enabled */ 410285612Sdelphijextern int hardpps_enable; /* kernel PPS discipline enabled */ 41154359Srobertoextern int ext_enable; /* external clock enabled */ 41282498Srobertoextern int cal_enable; /* refclock calibrate enable */ 413285612Sdelphijextern int allow_panic; /* allow panic correction (-g) */ 414293650Sglebiusextern int enable_panic_check; /* Can we check allow_panic's state? */ 415285612Sdelphijextern int force_step_once; /* always step time once at startup (-G) */ 416285612Sdelphijextern int mode_ntpdate; /* exit on first clock set (-q) */ 41782498Srobertoextern int peer_ntpdate; /* count of ntpdate peers */ 41854359Sroberto 41954359Sroberto/* 42054359Sroberto * Clock state machine variables 42154359Sroberto */ 42282498Srobertoextern u_char sys_poll; /* system poll interval (log2 s) */ 42354359Srobertoextern int state; /* clock discipline state */ 42454359Srobertoextern int tc_counter; /* poll-adjust counter */ 42554359Srobertoextern u_long last_time; /* time of last clock update (s) */ 42654359Srobertoextern double last_offset; /* last clock offset (s) */ 427285612Sdelphijextern u_char allan_xpt; /* Allan intercept (log2 s) */ 428182007Srobertoextern double clock_jitter; /* clock jitter (s) */ 429285612Sdelphijextern double sys_offset; /* system offset (s) */ 430182007Srobertoextern double sys_jitter; /* system jitter (s) */ 43154359Sroberto 43254359Sroberto/* ntp_monitor.c */ 433285612Sdelphijextern u_char mon_hash_bits; /* log2 size of hash table */ 434285612Sdelphijextern mon_entry ** mon_hash; /* MRU hash table */ 435285612Sdelphijextern mon_entry mon_mru_list; /* mru listhead */ 436285612Sdelphijextern u_int mon_enabled; /* MON_OFF (0) or other MON_* */ 437285612Sdelphijextern u_int mru_alloc; /* mru list + free list count */ 438285612Sdelphijextern u_int mru_entries; /* mru list count */ 439285612Sdelphijextern u_int mru_peakentries; /* highest mru_entries */ 440285612Sdelphijextern u_int mru_initalloc; /* entries to preallocate */ 441285612Sdelphijextern u_int mru_incalloc; /* allocation batch factor */ 442285612Sdelphijextern u_int mru_mindepth; /* preempt above this */ 443285612Sdelphijextern int mru_maxage; /* for entries older than */ 444285612Sdelphijextern u_int mru_maxdepth; /* MRU size hard limit */ 445285612Sdelphijextern int mon_age; /* preemption limit */ 44654359Sroberto 44754359Sroberto/* ntp_peer.c */ 448285612Sdelphijextern struct peer *peer_hash[NTP_HASH_SIZE]; /* peer hash table */ 449285612Sdelphijextern int peer_hash_count[NTP_HASH_SIZE]; /* count of in each bucket */ 450285612Sdelphijextern struct peer *assoc_hash[NTP_HASH_SIZE]; /* association ID hash table */ 451285612Sdelphijextern int assoc_hash_count[NTP_HASH_SIZE];/* count of in each bucket */ 452285612Sdelphijextern struct peer *peer_list; /* peer structures list */ 453285612Sdelphijextern int peer_count; /* count in peer_list */ 454285612Sdelphijextern int peer_free_count; /* count in peer_free */ 45554359Sroberto 45654359Sroberto/* 45754359Sroberto * Miscellaneous statistic counters which may be queried. 45854359Sroberto */ 45954359Srobertoextern u_long peer_timereset; /* time stat counters were zeroed */ 46054359Srobertoextern u_long findpeer_calls; /* number of calls to findpeer */ 46154359Srobertoextern u_long assocpeer_calls; /* number of calls to findpeerbyassoc */ 46254359Srobertoextern u_long peer_allocations; /* number of allocations from the free list */ 46354359Srobertoextern u_long peer_demobilizations; /* number of structs freed to free list */ 46454359Srobertoextern int total_peer_structs; /* number of peer structs in circulation */ 465182007Srobertoextern int peer_associations; /* mobilized associations */ 466182007Srobertoextern int peer_preempt; /* preemptable associations */ 467285612Sdelphij 46854359Sroberto/* ntp_proto.c */ 46954359Sroberto/* 47054359Sroberto * System variables are declared here. See Section 3.2 of the 47154359Sroberto * specification. 47254359Sroberto */ 47354359Srobertoextern u_char sys_leap; /* system leap indicator */ 474285612Sdelphijextern u_char sys_stratum; /* system stratum */ 47554359Srobertoextern s_char sys_precision; /* local clock precision */ 476285612Sdelphijextern double sys_rootdelay; /* roundtrip delay to primary source */ 477285612Sdelphijextern double sys_rootdisp; /* dispersion to primary source */ 478285612Sdelphijextern u_int32 sys_refid; /* reference id */ 479285612Sdelphijextern l_fp sys_reftime; /* last update time */ 480285612Sdelphijextern struct peer *sys_peer; /* current peer */ 48154359Sroberto 48254359Sroberto/* 48354359Sroberto * Nonspecified system state variables. 48454359Sroberto */ 48554359Srobertoextern int sys_bclient; /* we set our time to broadcasts */ 48654359Srobertoextern double sys_bdelay; /* broadcast client default delay */ 48754359Srobertoextern int sys_authenticate; /* requre authentication for config */ 48854359Srobertoextern l_fp sys_authdelay; /* authentication delay */ 489309008Sdelphijextern u_char sys_bcpollbstep; /* broadcast poll backstep gate */ 490285612Sdelphijextern u_long sys_epoch; /* last clock update time */ 49182498Srobertoextern keyid_t sys_private; /* private value for session seed */ 492132451Srobertoextern int sys_manycastserver; /* respond to manycast client pkts */ 493316069Sdelphijextern int sys_maxclock; /* maximum survivors */ 494132451Srobertoextern int sys_minclock; /* minimum survivors */ 495132451Srobertoextern int sys_minsane; /* minimum candidates */ 496132451Srobertoextern int sys_floor; /* cluster stratum floor */ 497132451Srobertoextern int sys_ceiling; /* cluster stratum ceiling */ 498285612Sdelphijextern u_char sys_ttl[MAX_TTL]; /* ttl mapping vector */ 499316069Sdelphijextern u_int sys_ttlmax; /* max ttl mapping vector index */ 50054359Sroberto 50154359Sroberto/* 50254359Sroberto * Statistics counters 50354359Sroberto */ 504330141Sdelphijextern u_long sys_badauth; /* bad authentication */ 505330141Sdelphijextern u_long sys_badlength; /* bad length or format */ 506330141Sdelphijextern u_long sys_declined; /* declined */ 507330141Sdelphijextern u_long sys_kodsent; /* KoD sent */ 508330141Sdelphijextern u_long sys_lamport; /* Lamport violation */ 509330141Sdelphijextern u_long sys_limitrejected; /* rate exceeded */ 510285612Sdelphijextern u_long sys_newversion; /* current version */ 511285612Sdelphijextern u_long sys_oldversion; /* old version */ 512330141Sdelphijextern u_long sys_processed; /* packets for this host */ 513330141Sdelphijextern u_long sys_received; /* packets received */ 514285612Sdelphijextern u_long sys_restricted; /* access denied */ 515330141Sdelphijextern u_long sys_stattime; /* time since reset */ 516330141Sdelphijextern u_long sys_tsrounding; /* timestamp rounding errors */ 51754359Sroberto 51854359Sroberto/* ntp_request.c */ 51982498Srobertoextern keyid_t info_auth_keyid; /* keyid used to authenticate requests */ 520285612Sdelphijextern u_long auth_timereset; 52154359Sroberto 52254359Sroberto/* ntp_restrict.c */ 523285612Sdelphijextern restrict_u * restrictlist4; /* IPv4 restriction list */ 524285612Sdelphijextern restrict_u * restrictlist6; /* IPv6 restriction list */ 525285612Sdelphijextern int ntp_minpkt; 526285612Sdelphijextern u_char ntp_minpoll; 52754359Sroberto 528285612Sdelphij/* ntp_scanner.c */ 529285612Sdelphijextern u_int32 conf_file_sum; /* Simple sum of characters */ 530285612Sdelphij 531285612Sdelphij/* ntp_signd.c */ 532285612Sdelphij#ifdef HAVE_NTP_SIGND 533285612Sdelphijextern void send_via_ntp_signd(struct recvbuf *, int, keyid_t, int, 534285612Sdelphij struct pkt *); 535285612Sdelphij#endif 536285612Sdelphij 53754359Sroberto/* ntp_timer.c */ 53854359Srobertoextern volatile int alarm_flag; /* alarm flag */ 53954359Srobertoextern volatile u_long alarm_overflow; 540285612Sdelphijextern u_long current_time; /* seconds since startup */ 54154359Srobertoextern u_long timer_timereset; 54254359Srobertoextern u_long timer_overflows; 54354359Srobertoextern u_long timer_xmtcalls; 544285612Sdelphijextern int leap_sec_in_progress; 545285612Sdelphij#ifdef LEAP_SMEAR 546285612Sdelphijextern struct leap_smear_info leap_smear; 547285612Sdelphijextern int leap_smear_intv; 548285612Sdelphij#endif 549285612Sdelphij#ifdef SYS_WINNT 550285612SdelphijHANDLE WaitableTimerHandle; 551285612Sdelphij#endif 55254359Sroberto 55354359Sroberto/* ntp_util.c */ 554285612Sdelphijextern char statsdir[MAXFILENAME]; 555285612Sdelphijextern int stats_control; /* write stats to fileset? */ 556285612Sdelphijextern int stats_write_period; /* # of seconds between writes. */ 557285612Sdelphijextern double stats_write_tolerance; 558285612Sdelphijextern double wander_threshold; 55954359Sroberto 56054359Sroberto/* ntpd.c */ 561285612Sdelphijextern int nofork; /* no-fork flag */ 562285612Sdelphijextern int initializing; /* initializing flag */ 563182007Sroberto#ifdef HAVE_DROPROOT 564285612Sdelphijextern int droproot; /* flag: try to drop root privileges after startup */ 565285612Sdelphijextern int root_dropped; /* root has been dropped */ 566285612Sdelphijextern char *user; /* user to switch to */ 567285612Sdelphijextern char *group; /* group to switch to */ 568285612Sdelphijextern const char *chrootdir; /* directory to chroot() to */ 569132451Sroberto#endif 570285612Sdelphij#ifdef HAVE_WORKING_FORK 571285612Sdelphijextern int waitsync_fd_to_close; /* -w/--wait-sync */ 572285612Sdelphij#endif 57354359Sroberto 574285612Sdelphij/* ntservice.c */ 575285612Sdelphij#ifdef SYS_WINNT 576285612Sdelphijextern int accept_wildcard_if_for_winnt; 577285612Sdelphij#endif 578285612Sdelphij 57954359Sroberto/* refclock_conf.c */ 58054359Sroberto#ifdef REFCLOCK 581285612Sdelphij/* refclock configuration table */ 582285612Sdelphijextern struct refclock * const refclock_conf[]; 58354359Srobertoextern u_char num_refclock_conf; 58454359Sroberto#endif 585285612Sdelphij 586