ntpd.h revision 310419
1283625Sdim/* 2283625Sdim * ntpd.h - Prototypes and external variables for ntpd. 3353358Sdim * 4353358Sdim * Note the first half is primarily function prototypes, type 5353358Sdim * declarations, and preprocessor macros, with variables declared 6283625Sdim * primarily in the second half. 7283625Sdim * 8283625Sdim * Each half is further divided into sections for each source file. 9283625Sdim */ 10283625Sdim 11283625Sdim#include "ntp.h" 12283625Sdim#include "ntp_stdlib.h" 13283625Sdim#include "ntp_syslog.h" 14283625Sdim#include "ntp_debug.h" 15283625Sdim#include "ntp_syslog.h" 16309124Sdim#include "ntp_select.h" 17283625Sdim#include "ntp_malloc.h" 18283625Sdim#include "ntp_refclock.h" 19283625Sdim#include "ntp_intres.h" 20283625Sdim#include "recvbuff.h" 21283625Sdim 22283625Sdim/* 23283625Sdim * First half: ntpd types, functions, macros 24283625Sdim * ----------------------------------------- 25283625Sdim */ 26309124Sdim 27309124Sdim/* 28283625Sdim * macro for debugging output - cut down on #ifdef pollution. 29283625Sdim * 30283625Sdim * DPRINTF() is for use by ntpd only, and compiles away to nothing 31283625Sdim * without DEBUG (configure --disable-debugging). 32283625Sdim * 33283625Sdim * TRACE() is similar for libntp and utilities, which retain full 34283625Sdim * debug capability even when compiled without DEBUG. 35341825Sdim * 36341825Sdim * The calling convention is not attractive: 37341825Sdim * DPRINTF(debuglevel, (fmt, ...)); 38341825Sdim * DPRINTF(2, ("shows #ifdef DEBUG and if debug >= %d\n", 2)); 39321369Sdim */ 40309124Sdim#ifdef DEBUG 41309124Sdim# define DPRINTF(lvl, arg) \ 42327952Sdim do { \ 43309124Sdim if (debug >= (lvl)) \ 44283625Sdim mprintf arg; \ 45309124Sdim } while (0) 46309124Sdim#else 47309124Sdim# define DPRINTF(lvl, arg) do {} while (0) 48309124Sdim#endif 49309124Sdim 50309124Sdim 51309124Sdim/* nt_clockstuff.c */ 52309124Sdim#ifdef SYS_WINNT 53309124Sdimextern void win_time_stepped(void); 54327952Sdim#endif 55285181Sdim 56283625Sdim/* ntp_config.c */ 57283625Sdim#define TAI_1972 10 /* initial TAI offset (s) */ 58283625Sdimextern char *keysdir; /* crypto keys and leaptable directory */ 59283625Sdimextern char * saveconfigdir; /* ntpq saveconfig output directory */ 60283625Sdim 61283625Sdimextern void getconfig (int, char **); 62283625Sdimextern void ctl_clr_stats (void); 63341825Sdimextern int ctlclrtrap (sockaddr_u *, struct interface *, int); 64341825Sdimextern u_short ctlpeerstatus (struct peer *); 65283625Sdimextern int ctlsettrap (sockaddr_u *, struct interface *, int, int); 66283625Sdimextern u_short ctlsysstatus (void); 67283625Sdimextern void init_control (void); 68283625Sdimextern void process_control (struct recvbuf *, int); 69283625Sdimextern void report_event (int, struct peer *, const char *); 70283625Sdimextern int mprintf_event (int, struct peer *, const char *, ...) 71283625Sdim NTP_PRINTF(3, 4); 72283625Sdim 73292735Sdim/* ntp_control.c */ 74283625Sdim/* 75283625Sdim * Structure for translation tables between internal system 76283625Sdim * variable indices and text format. 77283625Sdim */ 78283625Sdimstruct ctl_var { 79283625Sdim u_short code; 80283625Sdim u_short flags; 81283625Sdim const char *text; 82341825Sdim}; 83341825Sdim/* 84341825Sdim * Flag values 85283625Sdim */ 86341825Sdim#define CAN_READ 0x01 87341825Sdim#define CAN_WRITE 0x02 88341825Sdim 89341825Sdim#define DEF 0x20 90341825Sdim#define PADDING 0x40 91341825Sdim#define EOV 0x80 92341825Sdim 93341825Sdim#define RO (CAN_READ) 94341825Sdim#define WO (CAN_WRITE) 95341825Sdim#define RW (CAN_READ|CAN_WRITE) 96341825Sdim 97341825Sdimextern char * add_var (struct ctl_var **, u_long, u_short); 98341825Sdimextern void free_varlist (struct ctl_var *); 99341825Sdimextern void set_var (struct ctl_var **, const char *, u_long, u_short); 100283625Sdimextern void set_sys_var (const char *, u_long, u_short); 101341825Sdimextern const char * get_ext_sys_var(const char *tag); 102341825Sdim 103341825Sdim/* ntp_io.c */ 104341825Sdimtypedef struct interface_info { 105283625Sdim endpt * ep; 106341825Sdim u_char action; 107341825Sdim} interface_info_t; 108353358Sdim 109353358Sdimtypedef void (*interface_receiver_t) (void *, interface_info_t *); 110341825Sdim 111283625Sdimextern void interface_enumerate (interface_receiver_t, void *); 112283625Sdimextern endpt * getinterface (sockaddr_u *, u_int32); 113283625Sdimextern endpt * select_peerinterface (struct peer *, sockaddr_u *, 114283625Sdim endpt *); 115283625Sdimextern endpt * findinterface (sockaddr_u *); 116283625Sdimextern endpt * findbcastinter (sockaddr_u *); 117283625Sdimextern void enable_broadcast (endpt *, sockaddr_u *); 118283625Sdimextern void enable_multicast_if (endpt *, sockaddr_u *); 119283625Sdimextern void interface_update (interface_receiver_t, void *); 120283625Sdim#ifndef HAVE_IO_COMPLETION_PORT 121283625Sdimextern void io_handler (void); 122283625Sdim#endif 123283625Sdimextern void init_io (void); 124283625Sdimextern void io_open_sockets (void); 125283625Sdimextern void io_clr_stats (void); 126283625Sdimextern void io_setbclient (void); 127283625Sdimextern void io_unsetbclient (void); 128283625Sdimextern void io_multicast_add(sockaddr_u *); 129283625Sdimextern void io_multicast_del(sockaddr_u *); 130283625Sdimextern void sendpkt (sockaddr_u *, struct interface *, int, struct pkt *, int); 131283625Sdim#ifdef DEBUG 132283625Sdimextern void collect_timing (struct recvbuf *, const char *, int, l_fp *); 133283625Sdim#endif 134283625Sdim#ifdef HAVE_SIGNALED_IO 135360784Sdimextern void wait_for_signal (void); 136360784Sdimextern void unblock_io_and_alarm (void); 137360784Sdimextern void block_io_and_alarm (void); 138283625Sdim# define UNBLOCK_IO_AND_ALARM() unblock_io_and_alarm() 139341825Sdim# define BLOCK_IO_AND_ALARM() block_io_and_alarm() 140341825Sdim#else 141341825Sdim# define UNBLOCK_IO_AND_ALARM() do {} while (0) 142341825Sdim# define BLOCK_IO_AND_ALARM() do {} while (0) 143341825Sdim#endif 144341825Sdim#define latoa(pif) localaddrtoa(pif) 145341825Sdimextern const char * localaddrtoa(endpt *); 146341825Sdim 147341825Sdim/* ntp_loopfilter.c */ 148341825Sdimextern void init_loopfilter(void); 149341825Sdimextern int local_clock(struct peer *, double); 150341825Sdimextern void adj_host_clock(void); 151341825Sdimextern void loop_config(int, double); 152341825Sdimextern void select_loop(int); 153341825Sdimextern void huffpuff(void); 154341825Sdimextern u_long sys_clocktime; 155341825Sdimextern u_int sys_tai; 156341825Sdimextern int freq_cnt; 157341825Sdim 158327952Sdim/* ntp_monitor.c */ 159341825Sdim#define MON_HASH_SIZE ((size_t)1U << mon_hash_bits) 160341825Sdim#define MON_HASH_MASK (MON_HASH_SIZE - 1) 161341825Sdim#define MON_HASH(addr) (sock_hash(addr) & MON_HASH_MASK) 162341825Sdimextern void init_mon (void); 163341825Sdimextern void mon_start (int); 164327952Sdimextern void mon_stop (int); 165341825Sdimextern u_short ntp_monitor (struct recvbuf *, u_short); 166353358Sdimextern void mon_clearinterface(endpt *interface); 167327952Sdim 168283625Sdim/* ntp_peer.c */ 169283625Sdimextern void init_peer (void); 170321369Sdimextern struct peer *findexistingpeer(sockaddr_u *, const char *, 171321369Sdim struct peer *, int, u_char); 172321369Sdimextern struct peer *findpeer (struct recvbuf *, int, int *); 173321369Sdimextern struct peer *findpeerbyassoc(associd_t); 174327952Sdimextern void set_peerdstadr (struct peer *, endpt *); 175327952Sdimextern struct peer *newpeer (sockaddr_u *, const char *, 176327952Sdim endpt *, u_char, u_char, 177327952Sdim u_char, u_char, u_int, u_char, u_int32, 178327952Sdim keyid_t, const char *); 179327952Sdimextern void peer_all_reset (void); 180327952Sdimextern void peer_clr_stats (void); 181327952Sdimextern struct peer *peer_config(sockaddr_u *, const char *, 182327952Sdim endpt *, u_char, u_char, 183327952Sdim u_char, u_char, u_int, u_int32, 184327952Sdim keyid_t, const char *); 185327952Sdimextern void peer_reset (struct peer *); 186327952Sdimextern void refresh_all_peerinterfaces(void); 187327952Sdimextern void unpeer (struct peer *); 188327952Sdimextern void clear_all (void); 189327952Sdimextern int score_all (struct peer *); 190283625Sdimextern struct peer *findmanycastpeer(struct recvbuf *); 191283625Sdimextern void peer_cleanup (void); 192283625Sdim 193283625Sdim/* ntp_crypto.c */ 194283625Sdim#ifdef AUTOKEY 195283625Sdimextern int crypto_recv (struct peer *, struct recvbuf *); 196283625Sdimextern int crypto_xmit (struct peer *, struct pkt *, 197283625Sdim struct recvbuf *, int, 198283625Sdim struct exten *, keyid_t); 199283625Sdimextern keyid_t session_key (sockaddr_u *, sockaddr_u *, keyid_t, 200283625Sdim keyid_t, u_long); 201283625Sdimextern int make_keylist (struct peer *, struct interface *); 202283625Sdimextern void key_expire (struct peer *); 203283625Sdimextern void crypto_update (void); 204283625Sdimextern void crypto_update_taichange(void); 205283625Sdimextern void crypto_config (int, char *); 206283625Sdimextern void crypto_setup (void); 207283625Sdimextern u_int crypto_ident (struct peer *); 208309124Sdimextern struct exten *crypto_args (struct peer *, u_int, associd_t, char *); 209309124Sdimextern int crypto_public (struct peer *, u_char *, u_int); 210283625Sdimextern void value_free (struct value *); 211283625Sdimextern char *iffpar_file; 212327952Sdimextern EVP_PKEY *iffpar_pkey; 213283625Sdimextern char *gqpar_file; 214283625Sdimextern EVP_PKEY *gqpar_pkey; 215283625Sdimextern char *mvpar_file; 216283625Sdimextern EVP_PKEY *mvpar_pkey; 217283625Sdimextern struct value tai_leap; 218283625Sdim#endif /* AUTOKEY */ 219283625Sdim 220283625Sdim/* ntp_proto.c */ 221283625Sdimextern void transmit (struct peer *); 222283625Sdimextern void receive (struct recvbuf *); 223283625Sdimextern void peer_clear (struct peer *, const char *); 224341825Sdimextern void process_packet (struct peer *, struct pkt *, u_int); 225283625Sdimextern void clock_select (void); 226283625Sdimextern void set_sys_leap (u_char); 227283625Sdim 228283625Sdimextern u_long leapsec; /* seconds to next leap (proximity class) */ 229283625Sdimextern int leapdif; /* TAI difference step at next leap second*/ 230341825Sdimextern int sys_orphan; 231341825Sdimextern double sys_mindisp; 232283625Sdimextern double sys_maxdist; 233283625Sdim 234309124Sdimextern char *sys_ident; /* identity scheme */ 235283625Sdimextern void poll_update (struct peer *, u_char); 236283625Sdim 237341825Sdimextern void clear (struct peer *); 238283625Sdimextern void clock_filter (struct peer *, double, double, double); 239360784Sdimextern void init_proto (void); 240360784Sdimextern void set_sys_tick_precision(double); 241283625Sdimextern void proto_config (int, u_long, double, sockaddr_u *); 242283625Sdimextern void proto_clr_stats (void); 243283625Sdim 244341825Sdim/* ntp_refclock.c */ 245341825Sdim#ifdef REFCLOCK 246283625Sdimextern int refclock_newpeer (struct peer *); 247283625Sdimextern void refclock_unpeer (struct peer *); 248283625Sdimextern void refclock_receive (struct peer *); 249283625Sdimextern void refclock_transmit (struct peer *); 250283625Sdimextern void init_refclock (void); 251283625Sdim#endif /* REFCLOCK */ 252283625Sdim 253283625Sdim/* ntp_request.c */ 254283625Sdimextern void init_request (void); 255283625Sdimextern void process_private (struct recvbuf *, int); 256283625Sdimextern void reset_auth_stats(void); 257341825Sdim 258341825Sdim/* ntp_restrict.c */ 259283625Sdimextern void init_restrict (void); 260283625Sdimextern u_short restrictions (sockaddr_u *); 261309124Sdimextern void hack_restrict (int, sockaddr_u *, sockaddr_u *, 262309124Sdim u_short, u_short, u_long); 263283625Sdimextern void restrict_source (sockaddr_u *, int, u_long); 264283625Sdim 265283625Sdim/* ntp_timer.c */ 266327952Sdimextern void init_timer (void); 267309124Sdimextern void reinit_timer (void); 268283625Sdimextern void timer (void); 269283625Sdimextern void timer_clr_stats (void); 270283625Sdimextern void timer_interfacetimeout (u_long); 271283625Sdimextern volatile int interface_interval; 272283625Sdimextern u_long orphwait; /* orphan wait time */ 273309124Sdim#ifdef AUTOKEY 274309124Sdimextern char *sys_hostname; /* host name */ 275283625Sdimextern char *sys_groupname; /* group name */ 276283625Sdimextern char *group_name; /* group name */ 277283625Sdimextern u_long sys_revoke; /* keys revoke timeout */ 278283625Sdimextern u_long sys_automax; /* session key timeout */ 279283625Sdim#endif /* AUTOKEY */ 280283625Sdim 281283625Sdim/* ntp_util.c */ 282283625Sdimextern void init_util (void); 283283625Sdimextern void write_stats (void); 284283625Sdimextern void stats_config (int, const char *); 285283625Sdimextern void record_peer_stats (sockaddr_u *, int, double, double, double, double); 286283625Sdimextern void record_proto_stats (char *); 287283625Sdimextern void record_loop_stats (double, double, double, double, int); 288283625Sdimextern void record_clock_stats (sockaddr_u *, const char *); 289283625Sdimextern int mprintf_clock_stats(sockaddr_u *, const char *, ...) 290283625Sdim NTP_PRINTF(2, 3); 291283625Sdimextern 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); 292283625Sdimextern void check_leap_file (int is_daily_check, u_int32 ntptime, const time_t * systime); 293283625Sdimextern void record_crypto_stats (sockaddr_u *, const char *); 294283625Sdim#ifdef DEBUG 295283625Sdimextern void record_timing_stats (const char *); 296283625Sdim#endif 297283625Sdimextern char * fstostr(time_t); /* NTP timescale seconds */ 298283625Sdim 299283625Sdim/* ntpd.c */ 300283625Sdimextern void parse_cmdline_opts(int *, char ***); 301283625Sdim/* 302283625Sdim * Signals we catch for debugging. 303341825Sdim */ 304283625Sdim#define MOREDEBUGSIG SIGUSR1 305283625Sdim#define LESSDEBUGSIG SIGUSR2 306283625Sdim/* 307309124Sdim * Signals which terminate us gracefully. 308309124Sdim */ 309283625Sdim#ifndef SYS_WINNT 310283625Sdim# define SIGDIE1 SIGHUP 311283625Sdim# define SIGDIE2 SIGINT 312283625Sdim# define SIGDIE3 SIGQUIT 313283625Sdim# define SIGDIE4 SIGTERM 314283625Sdim#endif /* SYS_WINNT */ 315309124Sdim 316283625Sdim 317283625Sdim/* 318286684Sdim * Last half: ntpd variables 319321369Sdim * ------------------------- 320283625Sdim */ 321309124Sdim 322283625Sdim/* ntp_config.c */ 323283625Sdimextern char const * progname; 324309124Sdimextern char *sys_phone[]; /* ACTS phone numbers */ 325309124Sdim#if defined(HAVE_SCHED_SETSCHEDULER) 326309124Sdimextern int config_priority_override; 327283625Sdimextern int config_priority; 328283625Sdim#endif 329283625Sdimextern char *ntp_signd_socket; 330283625Sdimextern struct config_tree_tag *cfg_tree_history; 331283625Sdim 332283625Sdim#ifdef BC_LIST_FRAMEWORK_NOT_YET_USED 333283625Sdim/* 334283625Sdim * backwards compatibility flags 335283625Sdim */ 336283625Sdimtypedef struct bc_entry_tag { 337283625Sdim int token; 338283625Sdim int enabled; 339283625Sdim} bc_entry; 340283625Sdim 341283625Sdimextern bc_entry bc_list[]; 342283625Sdim#endif 343283625Sdim 344283625Sdim/* ntp_control.c */ 345283625Sdimextern int num_ctl_traps; 346283625Sdimextern keyid_t ctl_auth_keyid; /* keyid used for authenticating write requests */ 347283625Sdim 348283625Sdim/* 349283625Sdim * Statistic counters to keep track of requests and responses. 350283625Sdim */ 351283625Sdimextern u_long ctltimereset; /* time stats reset */ 352283625Sdimextern u_long numctlreq; /* number of requests we've received */ 353283625Sdimextern u_long numctlbadpkts; /* number of bad control packets */ 354283625Sdimextern u_long numctlresponses; /* number of resp packets sent with data */ 355283625Sdimextern u_long numctlfrags; /* number of fragments sent */ 356283625Sdimextern u_long numctlerrors; /* number of error responses sent */ 357283625Sdimextern u_long numctltooshort; /* number of too short input packets */ 358283625Sdimextern u_long numctlinputresp; /* number of responses on input */ 359283625Sdimextern u_long numctlinputfrag; /* number of fragments on input */ 360283625Sdimextern u_long numctlinputerr; /* number of input pkts with err bit set */ 361283625Sdimextern u_long numctlbadoffset; /* number of input pkts with nonzero offset */ 362283625Sdimextern u_long numctlbadversion; /* number of input pkts with unknown version */ 363283625Sdimextern u_long numctldatatooshort; /* data too short for count */ 364283625Sdimextern u_long numctlbadop; /* bad op code found in packet */ 365283625Sdimextern u_long numasyncmsgs; /* number of async messages we've sent */ 366283625Sdim 367321369Sdim/* 368286684Sdim * Other statistics of possible interest 369283625Sdim */ 370321369Sdimextern volatile u_long packets_dropped; /* total number of packets dropped on reception */ 371286684Sdimextern volatile u_long packets_ignored; /* packets received on wild card interface */ 372321369Sdimextern volatile u_long packets_received;/* total number of packets received */ 373321369Sdimextern u_long packets_sent; /* total number of packets sent */ 374321369Sdimextern u_long packets_notsent; /* total number of packets which couldn't be sent */ 375321369Sdim 376283625Sdimextern volatile u_long handler_calls; /* number of calls to interrupt handler */ 377283625Sdimextern volatile u_long handler_pkts; /* number of pkts received by handler */ 378283625Sdimextern u_long io_timereset; /* time counters were reset */ 379283625Sdim 380283625Sdim/* ntp_io.c */ 381283625Sdimextern int disable_dynamic_updates; 382283625Sdimextern u_int sys_ifnum; /* next .ifnum to assign */ 383283625Sdimextern endpt * any_interface; /* IPv4 wildcard */ 384283625Sdimextern endpt * any6_interface; /* IPv6 wildcard */ 385283625Sdimextern endpt * loopback_interface; /* IPv4 loopback for refclocks */ 386283625Sdimextern endpt * ep_list; /* linked list */ 387283625Sdim 388283625Sdim/* ntp_loopfilter.c */ 389283625Sdimextern double drift_comp; /* clock frequency (s/s) */ 390283625Sdimextern double clock_stability; /* clock stability (s/s) */ 391283625Sdimextern double clock_max_back; /* max backward offset before step (s) */ 392283625Sdimextern double clock_max_fwd; /* max forward offset before step (s) */ 393283625Sdimextern double clock_panic; /* max offset before panic (s) */ 394283625Sdimextern double clock_phi; /* dispersion rate (s/s) */ 395283625Sdimextern double clock_minstep; /* step timeout (s) */ 396286684Sdimextern double clock_codec; /* codec frequency */ 397286684Sdim#ifdef KERNEL_PLL 398283625Sdimextern int pll_status; /* status bits for kernel pll */ 399283625Sdim#endif /* KERNEL_PLL */ 400283625Sdim 401283625Sdim/* 402283625Sdim * Clock state machine control flags 403283625Sdim */ 404283625Sdimextern int ntp_enable; /* clock discipline enabled */ 405283625Sdimextern int pll_control; /* kernel support available */ 406283625Sdimextern int kern_enable; /* kernel support enabled */ 407283625Sdimextern int hardpps_enable; /* kernel PPS discipline enabled */ 408283625Sdimextern int ext_enable; /* external clock enabled */ 409283625Sdimextern int cal_enable; /* refclock calibrate enable */ 410283625Sdimextern int allow_panic; /* allow panic correction (-g) */ 411309124Sdimextern int enable_panic_check; /* Can we check allow_panic's state? */ 412309124Sdimextern int force_step_once; /* always step time once at startup (-G) */ 413283625Sdimextern int mode_ntpdate; /* exit on first clock set (-q) */ 414283625Sdimextern int peer_ntpdate; /* count of ntpdate peers */ 415283625Sdim 416283625Sdim/* 417283625Sdim * Clock state machine variables 418283625Sdim */ 419283625Sdimextern u_char sys_poll; /* system poll interval (log2 s) */ 420283625Sdimextern int state; /* clock discipline state */ 421327952Sdimextern int tc_counter; /* poll-adjust counter */ 422309124Sdimextern u_long last_time; /* time of last clock update (s) */ 423309124Sdimextern double last_offset; /* last clock offset (s) */ 424283625Sdimextern u_char allan_xpt; /* Allan intercept (log2 s) */ 425283625Sdimextern double clock_jitter; /* clock jitter (s) */ 426283625Sdimextern double sys_offset; /* system offset (s) */ 427341825Sdimextern double sys_jitter; /* system jitter (s) */ 428283625Sdim 429283625Sdim/* ntp_monitor.c */ 430283625Sdimextern u_char mon_hash_bits; /* log2 size of hash table */ 431283625Sdimextern mon_entry ** mon_hash; /* MRU hash table */ 432283625Sdimextern mon_entry mon_mru_list; /* mru listhead */ 433283625Sdimextern u_int mon_enabled; /* MON_OFF (0) or other MON_* */ 434283625Sdimextern u_int mru_alloc; /* mru list + free list count */ 435283625Sdimextern u_int mru_entries; /* mru list count */ 436283625Sdimextern u_int mru_peakentries; /* highest mru_entries */ 437283625Sdimextern u_int mru_initalloc; /* entries to preallocate */ 438283625Sdimextern u_int mru_incalloc; /* allocation batch factor */ 439283625Sdimextern u_int mru_mindepth; /* preempt above this */ 440283625Sdimextern int mru_maxage; /* for entries older than */ 441283625Sdimextern u_int mru_maxdepth; /* MRU size hard limit */ 442283625Sdimextern int mon_age; /* preemption limit */ 443283625Sdim 444283625Sdim/* ntp_peer.c */ 445283625Sdimextern struct peer *peer_hash[NTP_HASH_SIZE]; /* peer hash table */ 446283625Sdimextern int peer_hash_count[NTP_HASH_SIZE]; /* count of in each bucket */ 447283625Sdimextern struct peer *assoc_hash[NTP_HASH_SIZE]; /* association ID hash table */ 448283625Sdimextern int assoc_hash_count[NTP_HASH_SIZE];/* count of in each bucket */ 449283625Sdimextern struct peer *peer_list; /* peer structures list */ 450283625Sdimextern int peer_count; /* count in peer_list */ 451283625Sdimextern int peer_free_count; /* count in peer_free */ 452283625Sdim 453283625Sdim/* 454283625Sdim * Miscellaneous statistic counters which may be queried. 455283625Sdim */ 456309124Sdimextern u_long peer_timereset; /* time stat counters were zeroed */ 457309124Sdimextern u_long findpeer_calls; /* number of calls to findpeer */ 458283625Sdimextern u_long assocpeer_calls; /* number of calls to findpeerbyassoc */ 459283625Sdimextern u_long peer_allocations; /* number of allocations from the free list */ 460283625Sdimextern u_long peer_demobilizations; /* number of structs freed to free list */ 461283625Sdimextern int total_peer_structs; /* number of peer structs in circulation */ 462283625Sdimextern int peer_associations; /* mobilized associations */ 463283625Sdimextern int peer_preempt; /* preemptable associations */ 464283625Sdim 465309124Sdim/* ntp_proto.c */ 466309124Sdim/* 467309124Sdim * System variables are declared here. See Section 3.2 of the 468309124Sdim * specification. 469283625Sdim */ 470283625Sdimextern u_char sys_leap; /* system leap indicator */ 471341825Sdimextern u_char sys_stratum; /* system stratum */ 472283625Sdimextern s_char sys_precision; /* local clock precision */ 473283625Sdimextern double sys_rootdelay; /* roundtrip delay to primary source */ 474283625Sdimextern double sys_rootdisp; /* dispersion to primary source */ 475283625Sdimextern u_int32 sys_refid; /* reference id */ 476283625Sdimextern l_fp sys_reftime; /* last update time */ 477283625Sdimextern struct peer *sys_peer; /* current peer */ 478283625Sdim 479283625Sdim/* 480283625Sdim * Nonspecified system state variables. 481283625Sdim */ 482283625Sdimextern int sys_bclient; /* we set our time to broadcasts */ 483283625Sdimextern double sys_bdelay; /* broadcast client default delay */ 484283625Sdimextern int sys_authenticate; /* requre authentication for config */ 485283625Sdimextern l_fp sys_authdelay; /* authentication delay */ 486283625Sdimextern u_char sys_bcpollbstep; /* broadcast poll backstep gate */ 487283625Sdimextern u_long sys_epoch; /* last clock update time */ 488283625Sdimextern keyid_t sys_private; /* private value for session seed */ 489283625Sdimextern int sys_manycastserver; /* respond to manycast client pkts */ 490283625Sdimextern int sys_minclock; /* minimum survivors */ 491283625Sdimextern int sys_minsane; /* minimum candidates */ 492283625Sdimextern int sys_floor; /* cluster stratum floor */ 493283625Sdimextern int sys_ceiling; /* cluster stratum ceiling */ 494283625Sdimextern u_char sys_ttl[MAX_TTL]; /* ttl mapping vector */ 495283625Sdimextern int sys_ttlmax; /* max ttl mapping vector index */ 496283625Sdim 497283625Sdim/* 498283625Sdim * Statistics counters 499283625Sdim */ 500283625Sdimextern u_long sys_stattime; /* time since reset */ 501283625Sdimextern u_long sys_received; /* packets received */ 502283625Sdimextern u_long sys_processed; /* packets for this host */ 503283625Sdimextern u_long sys_restricted; /* restricted packets */ 504283625Sdimextern u_long sys_newversion; /* current version */ 505283625Sdimextern u_long sys_oldversion; /* old version */ 506327952Sdimextern u_long sys_restricted; /* access denied */ 507327952Sdimextern u_long sys_badlength; /* bad length or format */ 508283625Sdimextern u_long sys_badauth; /* bad authentication */ 509283625Sdimextern u_long sys_declined; /* declined */ 510353358Sdimextern u_long sys_limitrejected; /* rate exceeded */ 511283625Sdimextern u_long sys_kodsent; /* KoD sent */ 512283625Sdim 513283625Sdim/* ntp_request.c */ 514283625Sdimextern keyid_t info_auth_keyid; /* keyid used to authenticate requests */ 515283625Sdimextern u_long auth_timereset; 516283625Sdim 517283625Sdim/* ntp_restrict.c */ 518283625Sdimextern restrict_u * restrictlist4; /* IPv4 restriction list */ 519283625Sdimextern restrict_u * restrictlist6; /* IPv6 restriction list */ 520283625Sdimextern int ntp_minpkt; 521327952Sdimextern u_char ntp_minpoll; 522327952Sdim 523283625Sdim/* ntp_scanner.c */ 524341825Sdimextern u_int32 conf_file_sum; /* Simple sum of characters */ 525283625Sdim 526283625Sdim/* ntp_signd.c */ 527283625Sdim#ifdef HAVE_NTP_SIGND 528283625Sdimextern void send_via_ntp_signd(struct recvbuf *, int, keyid_t, int, 529283625Sdim struct pkt *); 530283625Sdim#endif 531283625Sdim 532283625Sdim/* ntp_timer.c */ 533283625Sdimextern volatile int alarm_flag; /* alarm flag */ 534283625Sdimextern volatile u_long alarm_overflow; 535283625Sdimextern u_long current_time; /* seconds since startup */ 536283625Sdimextern u_long timer_timereset; 537283625Sdimextern u_long timer_overflows; 538283625Sdimextern u_long timer_xmtcalls; 539283625Sdimextern int leap_sec_in_progress; 540283625Sdim#ifdef LEAP_SMEAR 541283625Sdimextern struct leap_smear_info leap_smear; 542283625Sdimextern int leap_smear_intv; 543283625Sdim#endif 544283625Sdim#ifdef SYS_WINNT 545341825SdimHANDLE WaitableTimerHandle; 546341825Sdim#endif 547283625Sdim 548283625Sdim/* ntp_util.c */ 549283625Sdimextern char statsdir[MAXFILENAME]; 550283625Sdimextern int stats_control; /* write stats to fileset? */ 551283625Sdimextern int stats_write_period; /* # of seconds between writes. */ 552283625Sdimextern double stats_write_tolerance; 553321369Sdimextern double wander_threshold; 554321369Sdim 555321369Sdim/* ntpd.c */ 556283625Sdimextern int nofork; /* no-fork flag */ 557321369Sdimextern int initializing; /* initializing flag */ 558283625Sdim#ifdef HAVE_DROPROOT 559283625Sdimextern int droproot; /* flag: try to drop root privileges after startup */ 560283625Sdimextern int root_dropped; /* root has been dropped */ 561283625Sdimextern char *user; /* user to switch to */ 562283625Sdimextern char *group; /* group to switch to */ 563341825Sdimextern const char *chrootdir; /* directory to chroot() to */ 564341825Sdim#endif 565341825Sdim#ifdef HAVE_WORKING_FORK 566341825Sdimextern int waitsync_fd_to_close; /* -w/--wait-sync */ 567341825Sdim#endif 568341825Sdim 569341825Sdim/* ntservice.c */ 570341825Sdim#ifdef SYS_WINNT 571341825Sdimextern int accept_wildcard_if_for_winnt; 572341825Sdim#endif 573360784Sdim 574360784Sdim/* refclock_conf.c */ 575360784Sdim#ifdef REFCLOCK 576341825Sdim/* refclock configuration table */ 577341825Sdimextern struct refclock * const refclock_conf[]; 578341825Sdimextern u_char num_refclock_conf; 579341825Sdim#endif 580341825Sdim 581341825Sdim