]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/ntp/ntpdate/ntpdate.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.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     P((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         struct sockaddr_storage 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 rootdispersion;            /* 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  * Some defaults
93  */
94 #define DEFTIMEOUT      5               /* 5 timer increments */
95 #define DEFSAMPLES      4               /* get 4 samples per server */
96 #define DEFPRECISION    (-5)            /* the precision we claim */
97 #define DEFMAXPERIOD    60              /* maximum time to wait */
98 #define DEFMINSERVERS   3               /* minimum responding servers */
99 #define DEFMINVALID     1               /* mimimum servers with valid time */
100
101 /*
102  * Define the max number of sockets we can open
103  */
104 #define MAX_AF 2