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