1c0b746e5SOllivier Robert /* 2c0b746e5SOllivier Robert * ntpdate.h - declarations for the ntpdate and ntptimeset programs 3c0b746e5SOllivier Robert */ 4c0b746e5SOllivier Robert 5c0b746e5SOllivier Robert #include "ntp_malloc.h" 6c0b746e5SOllivier Robert 7*2b15cb3dSCy Schubert extern void loadservers (char *cfgpath); 8224ba2bdSOllivier Robert 9c0b746e5SOllivier Robert /* 10c0b746e5SOllivier Robert * The server structure is a much simplified version of the 11c0b746e5SOllivier Robert * peer structure, for ntpdate's use. Since we always send 12c0b746e5SOllivier Robert * in client mode and expect to receive in server mode, this 13c0b746e5SOllivier Robert * leaves only a very limited number of things we need to 14c0b746e5SOllivier Robert * remember about the server. 15c0b746e5SOllivier Robert */ 16c0b746e5SOllivier Robert struct server { 17c0b746e5SOllivier Robert struct server *next_server; /* next server in build list */ 18*2b15cb3dSCy Schubert sockaddr_u srcadr; /* address of remote host */ 19c0b746e5SOllivier Robert u_char version; /* version to use */ 20c0b746e5SOllivier Robert u_char leap; /* leap indicator */ 21c0b746e5SOllivier Robert u_char stratum; /* stratum of remote server */ 22c0b746e5SOllivier Robert s_char precision; /* server's clock precision */ 23c0b746e5SOllivier Robert u_char trust; /* trustability of the filtered data */ 24c0b746e5SOllivier Robert u_fp rootdelay; /* distance from primary clock */ 25*2b15cb3dSCy Schubert u_fp rootdisp; /* peer clock dispersion */ 26c0b746e5SOllivier Robert u_int32 refid; /* peer reference ID */ 27c0b746e5SOllivier Robert l_fp reftime; /* time of peer's last update */ 28c0b746e5SOllivier Robert u_long event_time; /* time for next timeout */ 29c0b746e5SOllivier Robert u_long last_xmit; /* time of last transmit */ 30c0b746e5SOllivier Robert u_short xmtcnt; /* number of packets transmitted */ 31c0b746e5SOllivier Robert u_short rcvcnt; /* number of packets received */ 32c0b746e5SOllivier Robert u_char reach; /* reachability, NTP_WINDOW bits */ 33c0b746e5SOllivier Robert u_short filter_nextpt; /* index into filter shift register */ 34c0b746e5SOllivier Robert s_fp filter_delay[NTP_SHIFT]; /* delay part of shift register */ 35c0b746e5SOllivier Robert l_fp filter_offset[NTP_SHIFT]; /* offset part of shift register */ 36c0b746e5SOllivier Robert s_fp filter_soffset[NTP_SHIFT]; /* offset in s_fp format, for disp */ 37c0b746e5SOllivier Robert u_fp filter_error[NTP_SHIFT]; /* error part of shift register */ 38c0b746e5SOllivier Robert l_fp org; /* peer's originate time stamp */ 39c0b746e5SOllivier Robert l_fp xmt; /* transmit time stamp */ 40c0b746e5SOllivier Robert u_fp delay; /* filter estimated delay */ 41c0b746e5SOllivier Robert u_fp dispersion; /* filter estimated dispersion */ 42c0b746e5SOllivier Robert l_fp offset; /* filter estimated clock offset */ 43c0b746e5SOllivier Robert s_fp soffset; /* fp version of above */ 44c0b746e5SOllivier Robert }; 45c0b746e5SOllivier Robert 46c0b746e5SOllivier Robert 47c0b746e5SOllivier Robert /* 48c0b746e5SOllivier Robert * ntpdate runs everything on a simple, short timeout. It sends a 49c0b746e5SOllivier Robert * packet and sets the timeout (by default, to a small value suitable 50c0b746e5SOllivier Robert * for a LAN). If it receives a response it sends another request. 51c0b746e5SOllivier Robert * If it times out it shifts zeroes into the filter and sends another 52c0b746e5SOllivier Robert * request. 53c0b746e5SOllivier Robert * 54c0b746e5SOllivier Robert * The timer routine is run often (once every 1/5 second currently) 55c0b746e5SOllivier Robert * so that time outs are done with reasonable precision. 56c0b746e5SOllivier Robert */ 57c0b746e5SOllivier Robert #define TIMER_HZ (5) /* 5 per second */ 58c0b746e5SOllivier Robert 59c0b746e5SOllivier Robert /* 60c0b746e5SOllivier Robert * ntpdate will make a long adjustment using adjtime() if the times 61c0b746e5SOllivier Robert * are close, or step the time if the times are farther apart. The 62c0b746e5SOllivier Robert * following defines what is "close". 63c0b746e5SOllivier Robert */ 64c0b746e5SOllivier Robert #define NTPDATE_THRESHOLD (FP_SECOND >> 1) /* 1/2 second */ 65c0b746e5SOllivier Robert 66224ba2bdSOllivier Robert #define NTP_MAXAGE 86400 /* one day in seconds */ 67224ba2bdSOllivier Robert 68c0b746e5SOllivier Robert /* 69c0b746e5SOllivier Robert * When doing adjustments, ntpdate actually overadjusts (currently 70c0b746e5SOllivier Robert * by 50%, though this may change). While this will make it take longer 71c0b746e5SOllivier Robert * to reach a steady state condition, it will typically result in 72c0b746e5SOllivier Robert * the clock keeping more accurate time, on average. The amount of 73c0b746e5SOllivier Robert * overshoot is limited. 74c0b746e5SOllivier Robert */ 75c0b746e5SOllivier Robert #ifdef NOTNOW 76c0b746e5SOllivier Robert #define ADJ_OVERSHOOT 1/2 /* this is hard coded */ 77c0b746e5SOllivier Robert #endif /* NOTNOW */ 78c0b746e5SOllivier Robert #define ADJ_MAXOVERSHOOT 0x10000000 /* 50 ms as a ts fraction */ 79c0b746e5SOllivier Robert 80c0b746e5SOllivier Robert /* 81c0b746e5SOllivier Robert * Since ntpdate isn't aware of some of the things that normally get 82c0b746e5SOllivier Robert * put in an NTP packet, we fix some values. 83c0b746e5SOllivier Robert */ 84c0b746e5SOllivier Robert #define NTPDATE_PRECISION (-6) /* use this precision */ 85c0b746e5SOllivier Robert #define NTPDATE_DISTANCE FP_SECOND /* distance is 1 sec */ 86c0b746e5SOllivier Robert #define NTPDATE_DISP FP_SECOND /* so is the dispersion */ 87c0b746e5SOllivier Robert #define NTPDATE_REFID (0) /* reference ID to use */ 88c0b746e5SOllivier Robert #define PEER_MAXDISP (64*FP_SECOND) /* maximum dispersion (fp 64) */ 89c0b746e5SOllivier Robert 90c0b746e5SOllivier Robert 91c0b746e5SOllivier Robert /* 92*2b15cb3dSCy Schubert * No less than 2s between requests to a server to stay within ntpd's 93*2b15cb3dSCy Schubert * default "discard minimum 1" (and 1s enforcement slop). That is 94*2b15cb3dSCy Schubert * enforced only if the nondefault limited restriction is in place, such 95*2b15cb3dSCy Schubert * as with "restrict ... limited" and "restrict ... kod limited". 96c0b746e5SOllivier Robert */ 97*2b15cb3dSCy Schubert #define MINTIMEOUT (1 * TIMER_HZ) /* 1s min. between packets */ 98*2b15cb3dSCy Schubert #define DEFTIMEOUT (2 * TIMER_HZ) /* 2s by default */ 99c0b746e5SOllivier Robert #define DEFSAMPLES 4 /* get 4 samples per server */ 100c0b746e5SOllivier Robert #define DEFPRECISION (-5) /* the precision we claim */ 101c0b746e5SOllivier Robert #define DEFMAXPERIOD 60 /* maximum time to wait */ 102c0b746e5SOllivier Robert #define DEFMINSERVERS 3 /* minimum responding servers */ 103c0b746e5SOllivier Robert #define DEFMINVALID 1 /* mimimum servers with valid time */ 1049c2daa00SOllivier Robert 1059c2daa00SOllivier Robert /* 1069c2daa00SOllivier Robert * Define the max number of sockets we can open 1079c2daa00SOllivier Robert */ 1089c2daa00SOllivier Robert #define MAX_AF 2 109