93
95
#define NTP_VERSION ((u_char)4) /* current version number */
94
96
#define NTP_OLDVERSION ((u_char)1) /* oldest credible version */
95
#define NTP_PORT 123 /* included for sake of non-unix machines */
96
#define NTP_UNREACH 16 /* poll interval backoff count */
97
#define NTP_MINDPOLL 6 /* log2 default min poll interval (64 s) */
98
#define NTP_MAXDPOLL 10 /* log2 default max poll interval (~17 m) */
97
#define NTP_PORT 123 /* included for non-unix machines */
100
* Poll interval parameters
102
#define NTP_UNREACH 12 /* poll unreach threshold */
99
103
#define NTP_MINPOLL 4 /* log2 min poll interval (16 s) */
100
#define NTP_MAXPOLL 17 /* log2 max poll interval (~4.5 h) */
101
#define NTP_MINCLOCK 3 /* minimum survivors */
102
#define NTP_MAXCLOCK 10 /* maximum candidates */
103
#define NTP_SHIFT 8 /* 8 suitable for crystal time base */
104
#define NTP_MAXKEY 65535 /* maximum authentication key number */
105
#define NTP_MAXSESSION 100 /* maximum session key list entries */
106
#define NTP_AUTOMAX 13 /* log2 default max session key lifetime */
107
#define KEY_REVOKE 16 /* log2 default key revoke timeout */
104
#define NTP_MINDPOLL 6 /* log2 default min poll (64 s) */
105
#define NTP_MAXDPOLL 10 /* log2 default max poll (~17 m) */
106
#define NTP_MAXPOLL 17 /* log2 max poll interval (~36 h) */
107
#define NTP_BURST 8 /* packets in burst */
108
#define BURST_DELAY 2 /* interburst delay (s) */
109
#define RESP_DELAY 1 /* crypto response delay (s) */
112
* Clock filter algorithm tuning parameters
114
#define MINDISPERSE .01 /* min dispersion */
115
#define MAXDISPERSE 16. /* max dispersion */
116
#define NTP_SHIFT 8 /* clock filter stages */
108
117
#define NTP_FWEIGHT .5 /* clock filter weight */
109
#define CLOCK_SGATE 4. /* popcorn spike gate */
110
#define BURST_INTERVAL1 4 /* first interburst interval (log2) */
111
#define BURST_INTERVAL2 1 /* succeeding interburst intervals (log2) */
120
* Selection algorithm tuning parameters
122
#define NTP_MINCLOCK 3 /* min cluster survivors */
123
#define NTP_MAXCLOCK 50 /* max selection candidates */
124
#define MAXDISTANCE 1. /* max root distance */
125
#define CLOCK_SGATE 3. /* popcorn spike gate */
112
126
#define HUFFPUFF 900 /* huff-n'-puff sample interval (s) */
127
#define HYST .5 /* anti-clockhop hysteresis */
128
#define HYST_TC .875 /* anti-clockhop hysteresis decay */
129
#define MAX_TTL 8 /* max ttl mapping vector size */
130
#define NTP_MAXEXTEN 1024 /* max extension field size */
133
* Miscellaneous stuff
135
#define NTP_MAXKEY 65535 /* max authentication key number */
140
#define MAXFILENAME 128 /* max length of file name */
141
#define MAXHOSTNAME 512 /* max length of host/node name */
142
#define NTP_MAXSTRLEN 256 /* max string length */
143
#define MAXINTERFACES 512 /* max number of interfaces */
115
146
* Operations for jitter calculations (these use doubles).
129
160
1L << (int)(a)) /* log2 to double */
130
161
#define UNIVAR(x) (SQUARE(.28867513 * LOGTOD(x))) /* std uniform distr */
131
162
#define ULOGTOD(a) (1L << (int)(a)) /* ulog2 to double */
132
#define MAXDISPERSE 16. /* max dispersion (square) */
133
#define MINDISPERSE .01 /* min dispersion */
134
#define MAXDISTANCE 1. /* max root distance */
136
164
#define EVENT_TIMEOUT 0 /* one second, that is */
140
* The following structures are used in the autokey protocol.
142
* The autokey structure holds the values used to authenticate key IDs.
144
struct autokey { /* network byte order */
145
tstamp_t tstamp; /* timestamp */
146
keyid_t key; /* key ID */
147
int32 seq; /* key number */
148
u_int32 siglen; /* signature length */
149
u_int32 pkt[1]; /* start of signature field */
150
u_char *sig; /* signature */
154
* The cookie structure holds the current private value used to
155
* construct session keys.
157
struct cookie { /* network byte order */
158
tstamp_t tstamp; /* timestamp */
159
keyid_t key; /* key ID */
160
u_int32 siglen; /* signature length */
161
u_int32 pkt[1]; /* start of signature field */
162
u_char *sig; /* signature */
166
* The value structure holds variable length data such as public
167
* key, agreement parameters, public valule and leapsecond table.
169
struct value { /* network byte order */
170
tstamp_t tstamp; /* timestamp */
171
tstamp_t fstamp; /* filestamp */
172
u_int32 vallen; /* value length */
173
u_int32 pkt[1]; /* start of value field */
174
u_char *ptr; /* data pointer */
175
u_int32 siglen; /* signature length */
176
u_char *sig; /* signature */
181
167
* The interface structure is used to hold the addresses and socket
182
168
* numbers of each of the interfaces we are using.
184
170
struct interface {
185
int fd; /* socket this is opened on */
186
int bfd; /* socket for receiving broadcasts */
187
struct sockaddr_in sin; /* interface address */
188
struct sockaddr_in bcast; /* broadcast address */
189
struct sockaddr_in mask; /* interface mask */
190
char name[8]; /* name of interface */
171
SOCKET fd; /* socket this is opened on */
172
SOCKET bfd; /* socket for receiving broadcasts */
173
struct sockaddr_storage sin; /* interface address */
174
struct sockaddr_storage bcast; /* broadcast address */
175
struct sockaddr_storage mask; /* interface mask */
176
char name[32]; /* name of interface */
191
177
int flags; /* interface flags */
192
178
int last_ttl; /* last TTL specified */
179
u_int addr_refid; /* IPv4 addr or IPv6 hash */
180
int num_mcast; /* No. of IP addresses in multicast socket */
193
181
volatile long received; /* number of incoming packets */
194
182
long sent; /* number of outgoing packets */
195
183
long notsent; /* number of send failures */
184
u_int ifindex; /* Interface index */
185
u_int scopeid; /* Scope used for Multicasting */
199
189
* Flags for interfaces
201
#define INT_BROADCAST 1 /* can broadcast out this interface */
202
#define INT_BCASTOPEN 2 /* broadcast socket is open */
203
#define INT_LOOPBACK 4 /* the loopback interface */
204
#define INT_MULTICAST 8 /* multicasting enabled */
191
#define INT_UP 1 /* Interface is up */
192
#define INT_PPP 2 /* Point-to-point interface */
193
#define INT_LOOPBACK 4 /* the loopback interface */
194
#define INT_BROADCAST 8 /* can broadcast out this interface */
195
#define INT_MULTICAST 16 /* multicasting enabled */
196
#define INT_BCASTOPEN 32 /* broadcast socket is open */
207
199
* Define flasher bits (tests 1 through 11 in packet procedure)
213
205
#define TEST2 0x0002 /* bogus packet received */
214
206
#define TEST3 0x0004 /* protocol unsynchronized */
215
207
#define TEST4 0x0008 /* access denied */
216
#define TEST5 0x0010 /* authentication failed */
208
#define TEST5 0x0010 /* MAC error */
217
209
#define TEST6 0x0020 /* peer clock unsynchronized */
218
210
#define TEST7 0x0040 /* peer stratum out of bounds */
219
211
#define TEST8 0x0080 /* root delay/dispersion bounds check */
220
212
#define TEST9 0x0100 /* peer delay/dispersion bounds check */
221
#define TEST10 0x0200 /* autokey failed */
222
#define TEST11 0x0400 /* proventic not confirmed */
213
#define TEST10 0x0200 /* autokey error */
214
#define TEST11 0x0400 /* protocol error */
225
217
* The peer structure. Holds state information relating to the guys
230
222
struct peer *next; /* pointer to next association */
231
223
struct peer *ass_next; /* link pointer in associd hash */
232
struct sockaddr_in srcadr; /* address of remote host */
224
struct sockaddr_storage srcadr; /* address of remote host */
233
225
struct interface *dstadr; /* pointer to address on local host */
234
226
associd_t associd; /* association ID */
235
227
u_char version; /* version number */
236
228
u_char hmode; /* local association mode */
237
229
u_char hpoll; /* local poll interval */
238
u_char kpoll; /* last poll interval */
239
230
u_char minpoll; /* min poll interval */
240
231
u_char maxpoll; /* max poll interval */
241
u_char burst; /* packets remaining in burst */
242
232
u_int flags; /* association flags */
243
233
u_char cast_flags; /* additional flags */
244
234
u_int flash; /* protocol error test tally bits */
245
235
u_char last_event; /* last peer error code */
246
236
u_char num_events; /* number of error events */
247
u_char ttlmax; /* max ttl/refclock mode */
237
u_char ttl; /* ttl/refclock mode */
250
240
* Variables used by reference clock support
252
243
struct refclockproc *procptr; /* refclock structure pointer */
253
244
u_char refclktype; /* reference clock type */
254
245
u_char refclkunit; /* reference clock unit number */
255
246
u_char sstclktype; /* clock type for system status word */
247
#endif /* REFCLOCK */
258
250
* Variables set by received packet
269
261
* Variables used by authenticated client
271
263
keyid_t keyid; /* current key ID */
273
265
#define clear_to_zero assoc
274
266
associd_t assoc; /* peer association ID */
275
267
u_int32 crypto; /* peer status word */
277
struct value pubkey; /* public key */
278
struct value certif; /* certificate */
279
u_char *keystr; /* host name */
268
EVP_PKEY *pkey; /* public key */
269
const EVP_MD *digest; /* message digest algorithm */
270
char *subject; /* certificate subject name */
271
char *issuer; /* certificate issuer name */
281
272
keyid_t pkeyid; /* previous key ID */
282
keyid_t hcookie; /* host cookie */
283
struct cookie pcookie; /* peer cookie */
284
struct autokey recauto; /* autokey */
285
u_int32 cmmd; /* peer command */
273
keyid_t pcookie; /* peer cookie */
274
EVP_PKEY *ident_pkey; /* identity key */
275
tstamp_t fstamp; /* identity filestamp */
276
BIGNUM *iffval; /* IFF/GQ challenge */
277
BIGNUM *grpkey; /* GQ group key */
278
struct value cookval; /* cookie values */
279
struct value recval; /* receive autokey values */
280
struct value tai_leap; /* leapseconds values */
281
struct exten *cmmd; /* extension pointer */
287
284
* Variables used by authenticated server
289
286
keyid_t *keylist; /* session key ID list */
290
287
int keynumber; /* current key number */
291
struct autokey sndauto; /* autokey */
288
struct value encrypt; /* send encrypt values */
289
struct value sndval; /* send autokey values */
293
291
#define clear_to_zero status
297
295
* Ephemeral state variables
299
297
u_char status; /* peer status */
300
u_char pollsw; /* what it says */
301
u_char ttl; /* ttl for manycast mode */
302
298
u_char reach; /* reachability register */
303
u_char unreach; /* unreachable count */
304
299
u_long epoch; /* reference epoch */
300
u_int burst; /* packets remaining in burst */
305
301
u_short filter_nextpt; /* index into filter shift register */
306
302
double filter_delay[NTP_SHIFT]; /* delay shift register */
307
303
double filter_offset[NTP_SHIFT]; /* offset shift register */
444
441
#define REFCLK_PTB_ACTS 23 /* PTB Auto Computer Time Service */
445
442
#define REFCLK_USNO 24 /* Naval Observatory dialup */
446
443
#define REFCLK_GPS_HP 26 /* HP 58503A Time/Frequency Receiver */
447
#define REFCLK_ARCRON_MSF 27 /* ARCRON MSF radio clock. */
444
#define REFCLK_ARCRON_MSF 27 /* ARCRON MSF radio clock. */
448
445
#define REFCLK_SHM 28 /* clock attached thru shared memory */
449
446
#define REFCLK_PALISADE 29 /* Trimble Navigation Palisade GPS */
450
447
#define REFCLK_ONCORE 30 /* Motorola UT Oncore GPS */
451
448
#define REFCLK_GPS_JUPITER 31 /* Rockwell Jupiter GPS receiver */
452
#define REFCLK_CHRONOLOG 32 /* Chrono-log K WWVB receiver */
453
#define REFCLK_DUMBCLOCK 33 /* Dumb localtime clock */
454
#define REFCLK_ULINK 34 /* Ultralink M320 WWVB receiver */
449
#define REFCLK_CHRONOLOG 32 /* Chrono-log K WWVB receiver */
450
#define REFCLK_DUMBCLOCK 33 /* Dumb localtime clock */
451
#define REFCLK_ULINK 34 /* Ultralink M320 WWVB receiver */
455
452
#define REFCLK_PCF 35 /* Conrad parallel port radio clock */
456
453
#define REFCLK_WWV_AUDIO 36 /* WWV/H audio demodulator/decoder */
457
454
#define REFCLK_FG 37 /* Forum Graphic GPS */
458
#define REFCLK_HOPF_SERIAL 38 /* hopf DCF77/GPS serial line receiver */
455
#define REFCLK_HOPF_SERIAL 38 /* hopf DCF77/GPS serial receiver */
459
456
#define REFCLK_HOPF_PCI 39 /* hopf DCF77/GPS PCI receiver */
460
#define REFCLK_MAX 39 /* Grow as needed... */
457
#define REFCLK_JJY 40 /* JJY receiver */
458
#define REFCLK_TT560 41 /* TrueTime 560 IRIG-B decoder */
459
#define REFCLK_ZYFER 42 /* Zyfer GPStarplus receiver */
460
#define REFCLK_RIPENCC 43 /* RIPE NCC Trimble driver */
461
#define REFCLK_NEOCLOCK4X 44 /* NeoClock4X DCF77 or TDF receiver */
462
#define REFCLK_MAX 44 /* NeoClock4X DCF77 or TDF receiver */
465
* Macro for sockaddr_storage structures operations
467
#define SOCKCMP(sock1, sock2) \
468
(((struct sockaddr_storage *)sock1)->ss_family \
469
== ((struct sockaddr_storage *)sock2)->ss_family ? \
470
((struct sockaddr_storage *)sock1)->ss_family == AF_INET ? \
471
memcmp(&((struct sockaddr_in *)sock1)->sin_addr, \
472
&((struct sockaddr_in *)sock2)->sin_addr, \
473
sizeof(struct in_addr)) == 0 : \
474
memcmp(&((struct sockaddr_in6 *)sock1)->sin6_addr, \
475
&((struct sockaddr_in6 *)sock2)->sin6_addr, \
476
sizeof(struct in6_addr)) == 0 : \
479
#define SOCKNUL(sock1) \
480
(((struct sockaddr_storage *)sock1)->ss_family == AF_INET ? \
481
(((struct sockaddr_in *)sock1)->sin_addr.s_addr == 0) : \
482
(IN6_IS_ADDR_UNSPECIFIED(&((struct sockaddr_in6 *)sock1)->sin6_addr)))
484
#define SOCKLEN(sock) \
485
(((struct sockaddr_storage *)sock)->ss_family == AF_INET ? \
486
(sizeof(struct sockaddr_in)) : (sizeof(struct sockaddr_in6)))
488
#define ANYSOCK(sock) \
489
memset(((struct sockaddr_storage *)sock), 0, \
490
sizeof(struct sockaddr_storage))
492
#define ANY_INTERFACE_CHOOSE(sock) \
493
(((struct sockaddr_storage *)sock)->ss_family == AF_INET ? \
494
any_interface : any6_interface)
463
497
* We tell reference clocks from real peers by giving the reference
488
522
* Utilities for manipulating addresses and port numbers
490
#define NSRCADR(src) ((src)->sin_addr.s_addr) /* address in net byte order */
491
#define NSRCPORT(src) ((src)->sin_port) /* port in net byte order */
524
#define NSRCADR(src) (((struct sockaddr_in *)src)->sin_addr.s_addr) /* address in net byte order */
525
#define NSRCPORT(src) (((struct sockaddr_in *)src)->sin_port) /* port in net byte order */
492
526
#define SRCADR(src) (ntohl(NSRCADR((src)))) /* address in host byte order */
493
527
#define SRCPORT(src) (ntohs(NSRCPORT((src)))) /* host port */
529
#define CAST_V4(src) ((struct sockaddr_in *)&(src))
530
#define CAST_V6(src) ((struct sockaddr_in6 *)&(src))
531
#define GET_INADDR(src) (CAST_V4(src)->sin_addr.s_addr)
532
#define GET_INADDR6(src) (CAST_V6(src)->sin6_addr)
534
#define SET_HOSTMASK(addr, family) \
536
memset((char *)(addr), 0, sizeof(struct sockaddr_storage)); \
537
(addr)->ss_family = (family); \
538
if ((family) == AF_INET) \
539
GET_INADDR(*(addr)) = 0xffffffff; \
541
memset(&GET_INADDR6(*(addr)), 0xff, \
542
sizeof(struct in6_addr)); \
496
546
* NTP packet format. The mac field is optional. It isn't really
497
547
* an l_fp either, but for now declaring it that way is convenient.
697
752
struct mon_data *hash_next; /* next structure in hash list */
698
753
struct mon_data *mru_next; /* next structure in MRU list */
699
754
struct mon_data *mru_prev; /* previous structure in MRU list */
700
struct mon_data *fifo_next; /* next structure in FIFO list */
701
struct mon_data *fifo_prev; /* previous structure in FIFO list */
702
u_long lastdrop; /* last time dropped due to RES_LIMIT*/
703
u_long lasttime; /* last time data updated */
704
u_long firsttime; /* time structure initialized */
705
u_long count; /* count we have seen */
706
u_int32 rmtadr; /* address of remote host */
755
u_long drop_count; /* dropped due RESLIMIT*/
756
double avg_interval; /* average interpacket interval */
757
u_long lasttime; /* interval since last packet */
758
u_long count; /* total packet count */
759
struct sockaddr_storage rmtadr; /* address of remote host */
707
760
struct interface *interface; /* interface on which this arrived */
708
761
u_short rmtport; /* remote port last came from */
709
762
u_char mode; /* mode of incoming packet */
733
787
struct restrictlist {
734
788
struct restrictlist *next; /* link to next entry */
735
u_int32 addr; /* host address (host byte order) */
736
u_int32 mask; /* mask for address (host byte order) */
737
u_long count; /* number of packets matched */
738
u_short flags; /* accesslist flags */
739
u_short mflags; /* match flags */
789
u_int32 addr; /* Ipv4 host address (host byte order) */
790
u_int32 mask; /* Ipv4 mask for address (host byte order) */
791
u_long count; /* number of packets matched */
792
u_short flags; /* accesslist flags */
793
u_short mflags; /* match flags */
796
struct restrictlist6 {
797
struct restrictlist6 *next; /* link to next entry */
798
struct in6_addr addr6; /* Ipv6 host address */
799
struct in6_addr mask6; /* Ipv6 mask address */
800
u_long count; /* number of packets matched */
801
u_short flags; /* accesslist flags */
802
u_short mflags; /* match flags */
745
#define RES_IGNORE 0x001 /* ignore if matched */
746
#define RES_DONTSERVE 0x002 /* don't give him any time */
747
#define RES_DONTTRUST 0x004 /* don't trust if matched */
748
#define RES_NOQUERY 0x008 /* don't allow queries if matched */
749
#define RES_NOMODIFY 0x010 /* don't allow him to modify server */
750
#define RES_NOPEER 0x020 /* don't allocate memory resources */
751
#define RES_NOTRAP 0x040 /* don't allow him to set traps */
752
#define RES_LPTRAP 0x080 /* traps set by him are low priority */
753
#define RES_LIMITED 0x100 /* limit per net number of clients */
754
#define RES_VERSION 0x200 /* serve only current version */
755
#define RES_DEMOBILIZE 0x400 /* demobilize association */
757
#define RES_ALLFLAGS \
758
(RES_IGNORE | RES_DONTSERVE | RES_DONTTRUST | RES_NOQUERY | \
759
RES_NOMODIFY | RES_NOPEER | RES_NOTRAP | RES_LPTRAP | \
760
RES_LIMITED | RES_VERSION | RES_DEMOBILIZE)
809
#define RES_IGNORE 0x001 /* ignore packet */
810
#define RES_DONTSERVE 0x002 /* access denied */
811
#define RES_DONTTRUST 0x004 /* authentication required */
812
#define RES_VERSION 0x008 /* version mismatch */
813
#define RES_NOPEER 0x010 /* new association denied */
814
#define RES_LIMITED 0x020 /* packet rate exceeded */
816
#define RES_FLAGS (RES_IGNORE | RES_DONTSERVE |\
817
RES_DONTTRUST | RES_VERSION |\
818
RES_NOPEER | RES_LIMITED)
820
#define RES_NOQUERY 0x040 /* mode 6/7 packet denied */
821
#define RES_NOMODIFY 0x080 /* mode 6/7 modify denied */
822
#define RES_NOTRAP 0x100 /* mode 6/7 set trap denied */
823
#define RES_LPTRAP 0x200 /* mode 6/7 low priority trap */
825
#define RES_DEMOBILIZE 0x400 /* send kiss of death packet */
826
#define RES_TIMEOUT 0x800 /* timeout this entry */
828
#define RES_ALLFLAGS (RES_FLAGS | RES_NOQUERY |\
829
RES_NOMODIFY | RES_NOTRAP |\
830
RES_LPTRAP | RES_DEMOBILIZE |\