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