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
|
/*
* ntpdate.h - declarations for the ntpdate and ntptimeset programs
*/
#include "ntp_malloc.h"
extern void loadservers P((char *cfgpath));
/*
* The server structure is a much simplified version of the
* peer structure, for ntpdate's use. Since we always send
* in client mode and expect to receive in server mode, this
* leaves only a very limited number of things we need to
* remember about the server.
*/
struct server {
struct server *next_server; /* next server in build list */
struct sockaddr_storage srcadr; /* address of remote host */
u_char version; /* version to use */
u_char leap; /* leap indicator */
u_char stratum; /* stratum of remote server */
s_char precision; /* server's clock precision */
u_char trust; /* trustability of the filtered data */
u_fp rootdelay; /* distance from primary clock */
u_fp rootdispersion; /* peer clock dispersion */
u_int32 refid; /* peer reference ID */
l_fp reftime; /* time of peer's last update */
u_long event_time; /* time for next timeout */
u_long last_xmit; /* time of last transmit */
u_short xmtcnt; /* number of packets transmitted */
u_short rcvcnt; /* number of packets received */
u_char reach; /* reachability, NTP_WINDOW bits */
u_short filter_nextpt; /* index into filter shift register */
s_fp filter_delay[NTP_SHIFT]; /* delay part of shift register */
l_fp filter_offset[NTP_SHIFT]; /* offset part of shift register */
s_fp filter_soffset[NTP_SHIFT]; /* offset in s_fp format, for disp */
u_fp filter_error[NTP_SHIFT]; /* error part of shift register */
l_fp org; /* peer's originate time stamp */
l_fp xmt; /* transmit time stamp */
u_fp delay; /* filter estimated delay */
u_fp dispersion; /* filter estimated dispersion */
l_fp offset; /* filter estimated clock offset */
s_fp soffset; /* fp version of above */
};
/*
* ntpdate runs everything on a simple, short timeout. It sends a
* packet and sets the timeout (by default, to a small value suitable
* for a LAN). If it receives a response it sends another request.
* If it times out it shifts zeroes into the filter and sends another
* request.
*
* The timer routine is run often (once every 1/5 second currently)
* so that time outs are done with reasonable precision.
*/
#define TIMER_HZ (5) /* 5 per second */
/*
* ntpdate will make a long adjustment using adjtime() if the times
* are close, or step the time if the times are farther apart. The
* following defines what is "close".
*/
#define NTPDATE_THRESHOLD (FP_SECOND >> 1) /* 1/2 second */
#define NTP_MAXAGE 86400 /* one day in seconds */
/*
* When doing adjustments, ntpdate actually overadjusts (currently
* by 50%, though this may change). While this will make it take longer
* to reach a steady state condition, it will typically result in
* the clock keeping more accurate time, on average. The amount of
* overshoot is limited.
*/
#ifdef NOTNOW
#define ADJ_OVERSHOOT 1/2 /* this is hard coded */
#endif /* NOTNOW */
#define ADJ_MAXOVERSHOOT 0x10000000 /* 50 ms as a ts fraction */
/*
* Since ntpdate isn't aware of some of the things that normally get
* put in an NTP packet, we fix some values.
*/
#define NTPDATE_PRECISION (-6) /* use this precision */
#define NTPDATE_DISTANCE FP_SECOND /* distance is 1 sec */
#define NTPDATE_DISP FP_SECOND /* so is the dispersion */
#define NTPDATE_REFID (0) /* reference ID to use */
#define PEER_MAXDISP (64*FP_SECOND) /* maximum dispersion (fp 64) */
/*
* Some defaults
*/
#define DEFTIMEOUT 5 /* 5 timer increments */
#define DEFSAMPLES 4 /* get 4 samples per server */
#define DEFPRECISION (-5) /* the precision we claim */
#define DEFMAXPERIOD 60 /* maximum time to wait */
#define DEFMINSERVERS 3 /* minimum responding servers */
#define DEFMINVALID 1 /* mimimum servers with valid time */
/*
* Define the max number of sockets we can open
*/
#define MAX_AF 2
|