~ubuntu-branches/debian/squeeze/ntp/squeeze-201010051545

« back to all changes in this revision

Viewing changes to include/ntp.h

  • Committer: Bazaar Package Importer
  • Author(s): Matt Zimmerman
  • Date: 2004-10-11 16:10:27 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20041011161027-icyjbji8ujym633o
Tags: 1:4.2.0a-10ubuntu2
Use ntp.ubuntulinux.org instead of pool.ntp.org

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
2
 * ntp.h - NTP definitions for the masses
3
3
 */
4
 
 
5
4
#ifndef NTP_H
6
5
#define NTP_H
7
6
 
8
7
#include "ntp_types.h"
9
8
#include <math.h>
 
9
#ifdef OPENSSL
 
10
#include "ntp_crypto.h"
 
11
#endif /* OPENSSL */
10
12
 
11
13
/*
12
14
 * Calendar arithmetic - contributed by G. Healton
92
94
 */
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 */
 
98
 
 
99
/*
 
100
 * Poll interval parameters
 
101
 */
 
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) */
 
110
 
 
111
/*
 
112
 * Clock filter algorithm tuning parameters
 
113
 */
 
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) */
 
118
 
 
119
/*
 
120
 * Selection algorithm tuning parameters
 
121
 */
 
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 */
 
131
 
 
132
/*
 
133
 * Miscellaneous stuff
 
134
 */
 
135
#define NTP_MAXKEY      65535   /* max authentication key number */
 
136
 
 
137
/*
 
138
 * Limits of things
 
139
 */
 
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 */
113
144
 
114
145
/*
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 */
135
163
 
136
164
#define EVENT_TIMEOUT   0       /* one second, that is */
137
165
 
138
 
#ifdef AUTOKEY
139
 
/*
140
 
 * The following structures are used in the autokey protocol.
141
 
 *
142
 
 * The autokey structure holds the values used to authenticate key IDs.
143
 
 */
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 */
151
 
};
152
 
 
153
 
/*
154
 
 * The cookie structure holds the current private value used to
155
 
 * construct session keys.
156
 
 */
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 */
163
 
};
164
 
 
165
 
/*
166
 
 * The value structure holds variable length data such as public
167
 
 * key, agreement parameters, public valule and leapsecond table.
168
 
 */
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 */
177
 
};
178
 
#endif /* AUTOKEY */
179
 
 
180
166
/*
181
167
 * The interface structure is used to hold the addresses and socket
182
168
 * numbers of each of the interfaces we are using.
183
169
 */
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 */
196
186
};
197
187
 
198
188
/*
199
189
 * Flags for interfaces
200
190
 */
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 */
205
197
 
206
198
/*
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 */
223
215
 
224
216
/*
225
217
 * The peer structure. Holds state information relating to the guys
229
221
struct peer {
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 */
248
238
 
249
239
        /*
250
240
         * Variables used by reference clock support
251
241
         */
 
242
#ifdef REFCLOCK
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 */
256
248
 
257
249
        /*
258
250
         * Variables set by received packet
269
261
         * Variables used by authenticated client
270
262
         */
271
263
        keyid_t keyid;          /* current key ID */
272
 
#ifdef AUTOKEY
 
264
#ifdef OPENSSL
273
265
#define clear_to_zero assoc
274
266
        associd_t assoc;        /* peer association ID */
275
267
        u_int32 crypto;         /* peer status word */
276
 
#ifdef PUBKEY
277
 
        struct  value pubkey;   /* public key */
278
 
        struct  value certif;   /* certificate */
279
 
        u_char  *keystr;        /* host name */
280
 
#endif /* PUBKEY */
 
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 */
 
282
 
286
283
        /*
287
284
         * Variables used by authenticated server
288
285
         */
289
286
        keyid_t *keylist;       /* session key ID list */
290
287
        int     keynumber;      /* current key number */
291
 
        struct autokey sndauto; /* autokey */
292
 
#else /* AUTOKEY */
 
288
        struct value encrypt;   /* send encrypt values */
 
289
        struct value sndval;    /* send autokey values */
 
290
#else /* OPENSSL */
293
291
#define clear_to_zero status
294
 
#endif /* AUTOKEY */
 
292
#endif /* OPENSSL */
295
293
 
296
294
        /*
297
295
         * Ephemeral state variables
298
296
         */
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 */
316
312
        double  jitter;         /* peer jitter (squares) */
317
313
        double  disp;           /* peer dispersion */
318
314
        double  estbdelay;      /* clock offset to broadcast server */
 
315
        double  hyst;           /* anti-clockhop hysteresis */
319
316
 
320
317
        /*
321
318
         * Variables set by received packet
328
325
         */
329
326
        u_long  update;         /* receive epoch */
330
327
#define end_clear_to_zero update
 
328
        u_int   unreach;        /* unreachable count */
331
329
        u_long  outdate;        /* send time last packet */
332
330
        u_long  nextdate;       /* send time next packet */
333
 
        u_long  nextaction;     /* peer local activity timeout (refclocks mainly) */
334
 
        void (*action) P((struct peer *)); /* action timeout function */
 
331
        u_long  nextaction;     /* peer local activity timeout (refclocks mainly) */
 
332
        void (*action) P((struct peer *)); /* action timeout function */
335
333
        /*
336
334
         * Statistic counters
337
335
         */
347
345
        u_long  oldpkt;         /* packets duplicate packet */
348
346
        u_long  seldisptoolarge; /* packets dispersion to large*/
349
347
        u_long  selbroken;      /* not used */
 
348
        u_long  rank;   /* number of times selected or in cluster */
350
349
};
351
350
 
352
351
/*
360
359
/*
361
360
 * Values for peer.mode
362
361
 */
363
 
#define MODE_UNSPEC     0       /* unspecified (probably old NTP version) */
 
362
#define MODE_UNSPEC     0       /* unspecified (old version) */
364
363
#define MODE_ACTIVE     1       /* symmetric active */
365
364
#define MODE_PASSIVE    2       /* symmetric passive */
366
365
#define MODE_CLIENT     3       /* client mode */
373
372
/*
374
373
 * Values for peer.stratum, sys_stratum
375
374
 */
376
 
#define STRATUM_REFCLOCK ((u_char)0) /* stratum claimed by primary clock */
 
375
#define STRATUM_REFCLOCK ((u_char)0) /* default stratum */
377
376
/* A stratum of 0 in the packet is mapped to 16 internally */
378
377
#define STRATUM_PKT_UNSPEC ((u_char)0) /* unspecified in packet */
379
378
#define STRATUM_UNSPEC  ((u_char)16) /* unspecified */
392
391
#define FLAG_BURST      0x0100  /* burst mode */
393
392
#define FLAG_IBURST     0x0200  /* initial burst mode */
394
393
#define FLAG_NOSELECT   0x0400  /* this is a "noselect" peer */
395
 
#define FLAG_AUTOKEY    0x0800  /* autokey confirmed */
396
 
#define FLAG_ASSOC      0x1000  /* autokey reqeust */
397
 
#define FLAG_PROVEN     0x2000  /* proventic confirmed */
 
394
#define FLAG_ASSOC      0x0800  /* autokey request */
398
395
 
399
396
/*
400
397
 * Definitions for the clear() routine.  We use memset() to clear
405
402
#define END_CLEAR_TO_ZERO(p)    ((char *)&((p)->end_clear_to_zero))
406
403
#define LEN_CLEAR_TO_ZERO       (END_CLEAR_TO_ZERO((struct peer *)0) \
407
404
                                    - CLEAR_TO_ZERO((struct peer *)0))
408
 
#define CRYPTO_TO_ZERO(p)        ((char *)&((p)->clear_to_zero))
409
 
#define END_CRYPTO_TO_ZERO(p)    ((char *)&((p)->end_clear_to_zero))
410
 
#define LEN_CRYPTO_TO_ZERO       (END_CRYPTO_TO_ZERO((struct peer *)0) \
 
405
#define CRYPTO_TO_ZERO(p)       ((char *)&((p)->clear_to_zero))
 
406
#define END_CRYPTO_TO_ZERO(p)   ((char *)&((p)->end_clear_to_zero))
 
407
#define LEN_CRYPTO_TO_ZERO      (END_CRYPTO_TO_ZERO((struct peer *)0) \
411
408
                                    - CRYPTO_TO_ZERO((struct peer *)0))
412
409
 
413
410
/*
424
421
#define REFCLK_WWV_PST          3       /* PST/Traconex 1020 WWV/H */
425
422
#define REFCLK_SPECTRACOM       4       /* Spectracom (generic) Receivers */
426
423
#define REFCLK_TRUETIME         5       /* TrueTime (generic) Receivers */
427
 
#define REFCLK_IRIG_AUDIO       6       /* IRIG-B/W audio decoder */
 
424
#define REFCLK_IRIG_AUDIO       6       /* IRIG-B/W audio decoder */
428
425
#define REFCLK_CHU_AUDIO        7       /* CHU audio demodulator/decoder */
429
426
#define REFCLK_PARSE            8       /* generic driver (usually DCF77,GPS,MSF) */
430
427
#define REFCLK_GPS_MX4200       9       /* Magnavox MX4200 GPS */
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 */
 
463
 
 
464
 /*
 
465
 * Macro for sockaddr_storage structures operations
 
466
 */
 
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 : \
 
477
        0)
 
478
 
 
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)))
 
483
 
 
484
#define SOCKLEN(sock) \
 
485
        (((struct sockaddr_storage *)sock)->ss_family == AF_INET ? \
 
486
        (sizeof(struct sockaddr_in)) : (sizeof(struct sockaddr_in6)))
 
487
 
 
488
#define ANYSOCK(sock) \
 
489
        memset(((struct sockaddr_storage *)sock), 0, \
 
490
            sizeof(struct sockaddr_storage))
 
491
 
 
492
#define ANY_INTERFACE_CHOOSE(sock) \
 
493
        (((struct sockaddr_storage *)sock)->ss_family == AF_INET ? \
 
494
        any_interface : any6_interface)
461
495
 
462
496
/*
463
497
 * We tell reference clocks from real peers by giving the reference
487
521
/*
488
522
 * Utilities for manipulating addresses and port numbers
489
523
 */
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 */
494
528
 
 
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)
 
533
 
 
534
#define SET_HOSTMASK(addr, family)      \
 
535
        do { \
 
536
                memset((char *)(addr), 0, sizeof(struct sockaddr_storage)); \
 
537
                (addr)->ss_family = (family); \
 
538
                if ((family) == AF_INET) \
 
539
                        GET_INADDR(*(addr)) = 0xffffffff; \
 
540
                else \
 
541
                        memset(&GET_INADDR6(*(addr)), 0xff, \
 
542
                            sizeof(struct in6_addr)); \
 
543
        } while(0)
 
544
 
495
545
/*
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.
528
578
         * octets. But, to handle humungus certificates, the bank must
529
579
         * be broke.
530
580
         */
531
 
#ifdef AUTOKEY
532
 
#ifdef PUBKEY
533
 
        u_int32 exten[5000 / 4]; /* max extension field */
534
 
#else
535
 
        u_int32 exten[672 / 4]; /* max extension field */
536
 
#endif /* PUBKEY */
537
 
#else /* AUTOKEY */
 
581
#ifdef OPENSSL
 
582
        u_int32 exten[NTP_MAXEXTEN / 4]; /* max extension field */
 
583
#else /* OPENSSL */
538
584
        u_int32 exten[1];       /* misused */
539
 
#endif /* AUTOKEY */
 
585
#endif /* OPENSSL */
540
586
        u_char  mac[MAX_MAC_LEN]; /* mac */
541
587
};
542
588
 
567
613
/*
568
614
 * Event codes. Used for reporting errors/events to the control module
569
615
 */
570
 
#define PEER_EVENT      0x80    /* this is a peer event */
 
616
#define PEER_EVENT      0x080   /* this is a peer event */
 
617
#define CRPT_EVENT      0x100   /* this is a crypto event */
571
618
 
572
619
/*
573
620
 * System event codes
612
659
 * To speed lookups, peers are hashed by the low order bits of the
613
660
 * remote IP address. These definitions relate to that.
614
661
 */
615
 
#define HASH_SIZE       32
616
 
#define HASH_MASK       (HASH_SIZE-1)
617
 
#define HASH_ADDR(src)  ((SRCADR((src))^(SRCADR((src))>>8)) & HASH_MASK)
 
662
#define NTP_HASH_SIZE   128
 
663
#define NTP_HASH_MASK   (NTP_HASH_SIZE-1)
 
664
#define NTP_HASH_ADDR(src)      sock_hash(src)
618
665
 
619
666
/*
620
667
 * How we randomize polls.  The poll interval is a power of two.
661
708
#define PROTO_FILEGEN           11
662
709
#define PROTO_PPS               12
663
710
#define PROTO_CAL               13
 
711
#define PROTO_MINCLOCK          14
 
712
#define PROTO_MINSANE           15
 
713
#define PROTO_FLOOR             16
 
714
#define PROTO_CEILING           17
 
715
#define PROTO_COHORT            18
 
716
#define PROTO_CALLDELAY         19
 
717
#define PROTO_ADJ               20
664
718
 
665
719
/*
666
720
 * Configuration items for the loop filter
674
728
#define LOOP_MINPOLL            7       /* set min poll interval (log2 s) */
675
729
#define LOOP_ALLAN              8       /* set minimum Allan intercept */
676
730
#define LOOP_HUFFPUFF           9       /* set huff-n'-puff filter length */
 
731
#define LOOP_FREQ               10      /* set initial frequency */
677
732
 
678
733
/*
679
734
 * Configuration items for the stats printer
682
737
#define STATS_STATSDIR          2       /* directory prefix for stats files */
683
738
#define STATS_PID_FILE          3       /* configure ntpd PID file */
684
739
 
685
 
#define MJD_1970                40587   /* MJD for 1 Jan 1970 */
 
740
#define MJD_1900                15020   /* MJD for 1 Jan 1900 */
686
741
 
687
742
/*
688
743
 * Default parameters.  We use these in the absence of something better.
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 */
720
773
#define MDF_LCAST       0x08            /* localcast */
721
774
#define MDF_ACAST       0x10            /* manycast */
722
775
#define MDF_BCLNT       0x20            /* broadcast client */
 
776
#define MDF_ACLNT       0x40            /* manycast client */
723
777
 
724
778
/*
725
779
 * Values used with mon_enabled to indicate reason for enabling monitoring
732
786
 */
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 */
740
 
};
 
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 */
 
794
};
 
795
 
 
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 */
 
803
};
 
804
 
741
805
 
742
806
/*
743
807
 * Access flags
744
808
 */
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 */
756
 
 
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 */
 
815
 
 
816
#define RES_FLAGS               (RES_IGNORE | RES_DONTSERVE |\
 
817
                                    RES_DONTTRUST | RES_VERSION |\
 
818
                                    RES_NOPEER | RES_LIMITED)
 
819
 
 
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 */
 
824
 
 
825
#define RES_DEMOBILIZE          0x400   /* send kiss of death packet */
 
826
#define RES_TIMEOUT             0x800   /* timeout this entry */
 
827
 
 
828
#define RES_ALLFLAGS            (RES_FLAGS | RES_NOQUERY |\
 
829
                                    RES_NOMODIFY | RES_NOTRAP |\
 
830
                                    RES_LPTRAP | RES_DEMOBILIZE |\
 
831
                                    RES_TIMEOUT)
761
832
 
762
833
/*
763
834
 * Match flags
772
843
#define RESTRICT_UNFLAG         2       /* remove flags from restrict entry */
773
844
#define RESTRICT_REMOVE         3       /* remove a restrict entry */
774
845
 
775
 
 
776
 
/*
777
 
 * Experimental alternate selection algorithm identifiers
778
 
 */
779
 
#define SELECT_1        1
780
 
#define SELECT_2        2
781
 
#define SELECT_3        3
782
 
#define SELECT_4        4
783
 
#define SELECT_5        5
784
 
 
785
846
/*
786
847
 * Endpoint structure for the select algorithm
787
848
 */