]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/blob - contrib/ntp/ntpd/ntp_proto.c
MFC r338126: MFV r338092: ntp 4.2.8p12.
[FreeBSD/stable/10.git] / contrib / ntp / ntpd / ntp_proto.c
1 /*
2  * ntp_proto.c - NTP version 4 protocol machinery
3  *
4  * ATTENTION: Get approval from Harlan on all changes to this file!
5  *          (Harlan will be discussing these changes with Dave Mills.)
6  *
7  */
8 #ifdef HAVE_CONFIG_H
9 #include <config.h>
10 #endif
11
12 #include "ntpd.h"
13 #include "ntp_stdlib.h"
14 #include "ntp_unixtime.h"
15 #include "ntp_control.h"
16 #include "ntp_string.h"
17 #include "ntp_leapsec.h"
18 #include "refidsmear.h"
19 #include "lib_strbuf.h"
20
21 #include <stdio.h>
22 #ifdef HAVE_LIBSCF_H
23 #include <libscf.h>
24 #endif
25 #ifdef HAVE_UNISTD_H
26 #include <unistd.h>
27 #endif
28
29 /* [Bug 3031] define automatic broadcastdelay cutoff preset */
30 #ifndef BDELAY_DEFAULT
31 # define BDELAY_DEFAULT (-0.050)
32 #endif
33
34 /*
35  * This macro defines the authentication state. If x is 1 authentication
36  * is required; otherwise it is optional.
37  */
38 #define AUTH(x, y)      ((x) ? (y) == AUTH_OK \
39                              : (y) == AUTH_OK || (y) == AUTH_NONE)
40
41 typedef enum
42 auth_state {
43         AUTH_UNKNOWN = -1,      /* Unknown */
44         AUTH_NONE,              /* authentication not required */
45         AUTH_OK,                /* authentication OK */
46         AUTH_ERROR,             /* authentication error */
47         AUTH_CRYPTO             /* crypto_NAK */
48 } auth_code;
49
50 /*
51  * Set up Kiss Code values
52  */
53
54 typedef enum
55 kiss_codes {
56         NOKISS,                         /* No Kiss Code */
57         RATEKISS,                       /* Rate limit Kiss Code */
58         DENYKISS,                       /* Deny Kiss */
59         RSTRKISS,                       /* Restricted Kiss */
60         XKISS                           /* Experimental Kiss */
61 } kiss_code;
62
63 typedef enum
64 nak_error_codes {
65         NONAK,                          /* No NAK seen */
66         INVALIDNAK,                     /* NAK cannot be used */
67         VALIDNAK                        /* NAK is valid */
68 } nak_code;
69
70 /*
71  * traffic shaping parameters
72  */
73 #define NTP_IBURST      6       /* packets in iburst */
74 #define RESP_DELAY      1       /* refclock burst delay (s) */
75
76 /*
77  * pool soliciting restriction duration (s)
78  */
79 #define POOL_SOLICIT_WINDOW     8
80
81 /*
82  * peer_select groups statistics for a peer used by clock_select() and
83  * clock_cluster().
84  */
85 typedef struct peer_select_tag {
86         struct peer *   peer;
87         double          synch;  /* sync distance */
88         double          error;  /* jitter */
89         double          seljit; /* selection jitter */
90 } peer_select;
91
92 /*
93  * System variables are declared here. Unless specified otherwise, all
94  * times are in seconds.
95  */
96 u_char  sys_leap;               /* system leap indicator, use set_sys_leap() to change this */
97 u_char  xmt_leap;               /* leap indicator sent in client requests, set up by set_sys_leap() */
98 u_char  sys_stratum;            /* system stratum */
99 s_char  sys_precision;          /* local clock precision (log2 s) */
100 double  sys_rootdelay;          /* roundtrip delay to primary source */
101 double  sys_rootdisp;           /* dispersion to primary source */
102 u_int32 sys_refid;              /* reference id (network byte order) */
103 l_fp    sys_reftime;            /* last update time */
104 struct  peer *sys_peer;         /* current peer */
105
106 #ifdef LEAP_SMEAR
107 struct leap_smear_info leap_smear;
108 #endif
109 int leap_sec_in_progress;
110
111 /*
112  * Rate controls. Leaky buckets are used to throttle the packet
113  * transmission rates in order to protect busy servers such as at NIST
114  * and USNO. There is a counter for each association and another for KoD
115  * packets. The association counter decrements each second, but not
116  * below zero. Each time a packet is sent the counter is incremented by
117  * a configurable value representing the average interval between
118  * packets. A packet is delayed as long as the counter is greater than
119  * zero. Note this does not affect the time value computations.
120  */
121 /*
122  * Nonspecified system state variables
123  */
124 int     sys_bclient;            /* broadcast client enable */
125 double  sys_bdelay;             /* broadcast client default delay */
126 int     sys_authenticate;       /* requre authentication for config */
127 l_fp    sys_authdelay;          /* authentication delay */
128 double  sys_offset;     /* current local clock offset */
129 double  sys_mindisp = MINDISPERSE; /* minimum distance (s) */
130 double  sys_maxdist = MAXDISTANCE; /* selection threshold */
131 double  sys_jitter;             /* system jitter */
132 u_long  sys_epoch;              /* last clock update time */
133 static  double sys_clockhop;    /* clockhop threshold */
134 static int leap_vote_ins;       /* leap consensus for insert */
135 static int leap_vote_del;       /* leap consensus for delete */
136 keyid_t sys_private;            /* private value for session seed */
137 int     sys_manycastserver;     /* respond to manycast client pkts */
138 int     ntp_mode7;              /* respond to ntpdc (mode7) */
139 int     peer_ntpdate;           /* active peers in ntpdate mode */
140 int     sys_survivors;          /* truest of the truechimers */
141 char    *sys_ident = NULL;      /* identity scheme */
142
143 /*
144  * TOS and multicast mapping stuff
145  */
146 int     sys_floor = 0;          /* cluster stratum floor */
147 u_char  sys_bcpollbstep = 0;    /* Broadcast Poll backstep gate */
148 int     sys_ceiling = STRATUM_UNSPEC - 1; /* cluster stratum ceiling */
149 int     sys_minsane = 1;        /* minimum candidates */
150 int     sys_minclock = NTP_MINCLOCK; /* minimum candidates */
151 int     sys_maxclock = NTP_MAXCLOCK; /* maximum candidates */
152 int     sys_cohort = 0;         /* cohort switch */
153 int     sys_orphan = STRATUM_UNSPEC + 1; /* orphan stratum */
154 int     sys_orphwait = NTP_ORPHWAIT; /* orphan wait */
155 int     sys_beacon = BEACON;    /* manycast beacon interval */
156 u_int   sys_ttlmax;             /* max ttl mapping vector index */
157 u_char  sys_ttl[MAX_TTL];       /* ttl mapping vector */
158
159 /*
160  * Statistics counters - first the good, then the bad
161  */
162 u_long  sys_stattime;           /* elapsed time */
163 u_long  sys_received;           /* packets received */
164 u_long  sys_processed;          /* packets for this host */
165 u_long  sys_newversion;         /* current version */
166 u_long  sys_oldversion;         /* old version */
167 u_long  sys_restricted;         /* access denied */
168 u_long  sys_badlength;          /* bad length or format */
169 u_long  sys_badauth;            /* bad authentication */
170 u_long  sys_declined;           /* declined */
171 u_long  sys_limitrejected;      /* rate exceeded */
172 u_long  sys_kodsent;            /* KoD sent */
173
174 /*
175  * Mechanism knobs: how soon do we peer_clear() or unpeer()?
176  *
177  * The default way is "on-receipt".  If this was a packet from a
178  * well-behaved source, on-receipt will offer the fastest recovery.
179  * If this was from a DoS attack, the default way makes it easier
180  * for a bad-guy to DoS us.  So look and see what bites you harder
181  * and choose according to your environment.
182  */
183 int peer_clear_digest_early     = 1;    /* bad digest (TEST5) and Autokey */
184 int unpeer_crypto_early         = 1;    /* bad crypto (TEST9) */
185 int unpeer_crypto_nak_early     = 1;    /* crypto_NAK (TEST5) */
186 int unpeer_digest_early         = 1;    /* bad digest (TEST5) */
187
188 int dynamic_interleave = DYNAMIC_INTERLEAVE;    /* Bug 2978 mitigation */
189
190 int kiss_code_check(u_char hisleap, u_char hisstratum, u_char hismode, u_int32 refid);
191 nak_code        valid_NAK       (struct peer *peer, struct recvbuf *rbufp, u_char hismode);
192 static  double  root_distance   (struct peer *);
193 static  void    clock_combine   (peer_select *, int, int);
194 static  void    peer_xmit       (struct peer *);
195 static  void    fast_xmit       (struct recvbuf *, int, keyid_t, int);
196 static  void    pool_xmit       (struct peer *);
197 static  void    clock_update    (struct peer *);
198 static  void    measure_precision(void);
199 static  double  measure_tick_fuzz(void);
200 static  int     local_refid     (struct peer *);
201 static  int     peer_unfit      (struct peer *);
202 #ifdef AUTOKEY
203 static  int     group_test      (char *, char *);
204 #endif /* AUTOKEY */
205 #ifdef WORKER
206 void    pool_name_resolved      (int, int, void *, const char *,
207                                  const char *, const struct addrinfo *,
208                                  const struct addrinfo *);
209 #endif /* WORKER */
210
211 const char *    amtoa           (int am);
212
213
214 void
215 set_sys_leap(
216         u_char new_sys_leap
217         )
218 {
219         sys_leap = new_sys_leap;
220         xmt_leap = sys_leap;
221
222         /*
223          * Under certain conditions we send faked leap bits to clients, so
224          * eventually change xmt_leap below, but never change LEAP_NOTINSYNC.
225          */
226         if (xmt_leap != LEAP_NOTINSYNC) {
227                 if (leap_sec_in_progress) {
228                         /* always send "not sync" */
229                         xmt_leap = LEAP_NOTINSYNC;
230                 }
231 #ifdef LEAP_SMEAR
232                 else {
233                         /*
234                          * If leap smear is enabled in general we must
235                          * never send a leap second warning to clients,
236                          * so make sure we only send "in sync".
237                          */
238                         if (leap_smear.enabled)
239                                 xmt_leap = LEAP_NOWARNING;
240                 }
241 #endif  /* LEAP_SMEAR */
242         }
243 }
244
245
246 /*
247  * Kiss Code check
248  */
249 int
250 kiss_code_check(
251         u_char hisleap,
252         u_char hisstratum,
253         u_char hismode,
254         u_int32 refid
255         )
256 {
257
258         if (   hismode == MODE_SERVER
259             && hisleap == LEAP_NOTINSYNC
260             && hisstratum == STRATUM_UNSPEC) {
261                 if(memcmp(&refid,"RATE", 4) == 0) {
262                         return (RATEKISS);
263                 } else if(memcmp(&refid,"DENY", 4) == 0) {
264                         return (DENYKISS);
265                 } else if(memcmp(&refid,"RSTR", 4) == 0) {
266                         return (RSTRKISS);
267                 } else if(memcmp(&refid,"X", 1) == 0) {
268                         return (XKISS);
269                 }
270         }
271         return (NOKISS);
272 }
273
274
275 /*
276  * Check that NAK is valid
277  */
278 nak_code
279 valid_NAK(
280           struct peer *peer,
281           struct recvbuf *rbufp,
282           u_char hismode
283           )
284 {
285         int             base_packet_length = MIN_V4_PKT_LEN;
286         int             remainder_size;
287         struct pkt *    rpkt;
288         int             keyid;
289         l_fp            p_org;  /* origin timestamp */
290         const l_fp *    myorg;  /* selected peer origin */
291
292         /*
293          * Check to see if there is something beyond the basic packet
294          */
295         if (rbufp->recv_length == base_packet_length) {
296                 return NONAK;
297         }
298
299         remainder_size = rbufp->recv_length - base_packet_length;
300         /*
301          * Is this a potential NAK?
302          */
303         if (remainder_size != 4) {
304                 return NONAK;
305         }
306
307         /*
308          * Only server responses can contain NAK's
309          */
310
311         if (hismode != MODE_SERVER &&
312             hismode != MODE_ACTIVE &&
313             hismode != MODE_PASSIVE
314             ) {
315                 return INVALIDNAK;
316         }
317
318         /*
319          * Make sure that the extra field in the packet is all zeros
320          */
321         rpkt = &rbufp->recv_pkt;
322         keyid = ntohl(((u_int32 *)rpkt)[base_packet_length / 4]);
323         if (keyid != 0) {
324                 return INVALIDNAK;
325         }
326
327         /*
328          * During the first few packets of the autokey dance there will
329          * not (yet) be a keyid, but in this case FLAG_SKEY is set.
330          * So the NAK is invalid if either there's no peer, or
331          * if the keyid is 0 and FLAG_SKEY is not set.
332          */
333         if (!peer || (!peer->keyid && !(peer->flags & FLAG_SKEY))) {
334                 return INVALIDNAK;
335         }
336
337         /*
338          * The ORIGIN must match, or this cannot be a valid NAK, either.
339          */
340         NTOHL_FP(&rpkt->org, &p_org);
341         if (peer->flip > 0)
342                 myorg = &peer->borg;
343         else
344                 myorg = &peer->aorg;
345
346         if (L_ISZERO(&p_org) ||
347             L_ISZERO( myorg) ||
348             !L_ISEQU(&p_org, myorg)) {
349                 return INVALIDNAK;
350         }
351
352         /* If we ever passed all that checks, we should be safe. Well,
353          * as safe as we can ever be with an unauthenticated crypto-nak.
354          */
355         return VALIDNAK;
356 }
357
358
359 /*
360  * transmit - transmit procedure called by poll timeout
361  */
362 void
363 transmit(
364         struct peer *peer       /* peer structure pointer */
365         )
366 {
367         u_char  hpoll;
368
369         /*
370          * The polling state machine. There are two kinds of machines,
371          * those that never expect a reply (broadcast and manycast
372          * server modes) and those that do (all other modes). The dance
373          * is intricate...
374          */
375         hpoll = peer->hpoll;
376
377         /*
378          * If we haven't received anything (even if unsync) since last
379          * send, reset ppoll.
380          */
381         if (peer->outdate > peer->timelastrec && !peer->reach)
382                 peer->ppoll = peer->maxpoll;
383
384         /*
385          * In broadcast mode the poll interval is never changed from
386          * minpoll.
387          */
388         if (peer->cast_flags & (MDF_BCAST | MDF_MCAST)) {
389                 peer->outdate = current_time;
390                 if (sys_leap != LEAP_NOTINSYNC)
391                         peer_xmit(peer);
392                 poll_update(peer, hpoll);
393                 return;
394         }
395
396         /*
397          * In manycast mode we start with unity ttl. The ttl is
398          * increased by one for each poll until either sys_maxclock
399          * servers have been found or the maximum ttl is reached. When
400          * sys_maxclock servers are found we stop polling until one or
401          * more servers have timed out or until less than sys_minclock
402          * associations turn up. In this case additional better servers
403          * are dragged in and preempt the existing ones.  Once every
404          * sys_beacon seconds we are to transmit unconditionally, but
405          * this code is not quite right -- peer->unreach counts polls
406          * and is being compared with sys_beacon, so the beacons happen
407          * every sys_beacon polls.
408          */
409         if (peer->cast_flags & MDF_ACAST) {
410                 peer->outdate = current_time;
411                 if (peer->unreach > sys_beacon) {
412                         peer->unreach = 0;
413                         peer->ttl = 0;
414                         peer_xmit(peer);
415                 } else if (   sys_survivors < sys_minclock
416                            || peer_associations < sys_maxclock) {
417                         if (peer->ttl < sys_ttlmax)
418                                 peer->ttl++;
419                         peer_xmit(peer);
420                 }
421                 peer->unreach++;
422                 poll_update(peer, hpoll);
423                 return;
424         }
425
426         /*
427          * Pool associations transmit unicast solicitations when there
428          * are less than a hard limit of 2 * sys_maxclock associations,
429          * and either less than sys_minclock survivors or less than
430          * sys_maxclock associations.  The hard limit prevents unbounded
431          * growth in associations if the system clock or network quality
432          * result in survivor count dipping below sys_minclock often.
433          * This was observed testing with pool, where sys_maxclock == 12
434          * resulted in 60 associations without the hard limit.  A
435          * similar hard limit on manycastclient ephemeral associations
436          * may be appropriate.
437          */
438         if (peer->cast_flags & MDF_POOL) {
439                 peer->outdate = current_time;
440                 if (   (peer_associations <= 2 * sys_maxclock)
441                     && (   peer_associations < sys_maxclock
442                         || sys_survivors < sys_minclock))
443                         pool_xmit(peer);
444                 poll_update(peer, hpoll);
445                 return;
446         }
447
448         /*
449          * In unicast modes the dance is much more intricate. It is
450          * designed to back off whenever possible to minimize network
451          * traffic.
452          */
453         if (peer->burst == 0) {
454                 u_char oreach;
455
456                 /*
457                  * Update the reachability status. If not heard for
458                  * three consecutive polls, stuff infinity in the clock
459                  * filter.
460                  */
461                 oreach = peer->reach;
462                 peer->outdate = current_time;
463                 peer->unreach++;
464                 peer->reach <<= 1;
465                 if (!peer->reach) {
466
467                         /*
468                          * Here the peer is unreachable. If it was
469                          * previously reachable raise a trap. Send a
470                          * burst if enabled.
471                          */
472                         clock_filter(peer, 0., 0., MAXDISPERSE);
473                         if (oreach) {
474                                 peer_unfit(peer);
475                                 report_event(PEVNT_UNREACH, peer, NULL);
476                         }
477                         if (   (peer->flags & FLAG_IBURST)
478                             && peer->retry == 0)
479                                 peer->retry = NTP_RETRY;
480                 } else {
481
482                         /*
483                          * Here the peer is reachable. Send a burst if
484                          * enabled and the peer is fit.  Reset unreach
485                          * for persistent and ephemeral associations.
486                          * Unreach is also reset for survivors in
487                          * clock_select().
488                          */
489                         hpoll = sys_poll;
490                         if (!(peer->flags & FLAG_PREEMPT))
491                                 peer->unreach = 0;
492                         if (   (peer->flags & FLAG_BURST)
493                             && peer->retry == 0
494                             && !peer_unfit(peer))
495                                 peer->retry = NTP_RETRY;
496                 }
497
498                 /*
499                  * Watch for timeout.  If ephemeral, toss the rascal;
500                  * otherwise, bump the poll interval. Note the
501                  * poll_update() routine will clamp it to maxpoll.
502                  * If preemptible and we have more peers than maxclock,
503                  * and this peer has the minimum score of preemptibles,
504                  * demobilize.
505                  */
506                 if (peer->unreach >= NTP_UNREACH) {
507                         hpoll++;
508                         /* ephemeral: no FLAG_CONFIG nor FLAG_PREEMPT */
509                         if (!(peer->flags & (FLAG_CONFIG | FLAG_PREEMPT))) {
510                                 report_event(PEVNT_RESTART, peer, "timeout");
511                                 peer_clear(peer, "TIME");
512                                 unpeer(peer);
513                                 return;
514                         }
515                         if (   (peer->flags & FLAG_PREEMPT)
516                             && (peer_associations > sys_maxclock)
517                             && score_all(peer)) {
518                                 report_event(PEVNT_RESTART, peer, "timeout");
519                                 peer_clear(peer, "TIME");
520                                 unpeer(peer);
521                                 return;
522                         }
523                 }
524         } else {
525                 peer->burst--;
526                 if (peer->burst == 0) {
527
528                         /*
529                          * If ntpdate mode and the clock has not been
530                          * set and all peers have completed the burst,
531                          * we declare a successful failure.
532                          */
533                         if (mode_ntpdate) {
534                                 peer_ntpdate--;
535                                 if (peer_ntpdate == 0) {
536                                         msyslog(LOG_NOTICE,
537                                             "ntpd: no servers found");
538                                         if (!msyslog_term)
539                                                 printf(
540                                                     "ntpd: no servers found\n");
541                                         exit (0);
542                                 }
543                         }
544                 }
545         }
546         if (peer->retry > 0)
547                 peer->retry--;
548
549         /*
550          * Do not transmit if in broadcast client mode.
551          */
552         if (peer->hmode != MODE_BCLIENT)
553                 peer_xmit(peer);
554         poll_update(peer, hpoll);
555
556         return;
557 }
558
559
560 const char *
561 amtoa(
562         int am
563         )
564 {
565         char *bp;
566
567         switch(am) {
568             case AM_ERR:        return "AM_ERR";
569             case AM_NOMATCH:    return "AM_NOMATCH";
570             case AM_PROCPKT:    return "AM_PROCPKT";
571             case AM_BCST:       return "AM_BCST";
572             case AM_FXMIT:      return "AM_FXMIT";
573             case AM_MANYCAST:   return "AM_MANYCAST";
574             case AM_NEWPASS:    return "AM_NEWPASS";
575             case AM_NEWBCL:     return "AM_NEWBCL";
576             case AM_POSSBCL:    return "AM_POSSBCL";
577             default:
578                 LIB_GETBUF(bp);
579                 snprintf(bp, LIB_BUFLENGTH, "AM_#%d", am);
580                 return bp;
581         }
582 }
583
584
585 /*
586  * receive - receive procedure called for each packet received
587  */
588 void
589 receive(
590         struct recvbuf *rbufp
591         )
592 {
593         register struct peer *peer;     /* peer structure pointer */
594         register struct pkt *pkt;       /* receive packet pointer */
595         u_char  hisversion;             /* packet version */
596         u_char  hisleap;                /* packet leap indicator */
597         u_char  hismode;                /* packet mode */
598         u_char  hisstratum;             /* packet stratum */
599         r4addr  r4a;                    /* address restrictions */
600         u_short restrict_mask;          /* restrict bits */
601         const char *hm_str;             /* hismode string */
602         const char *am_str;             /* association match string */
603         int     kissCode = NOKISS;      /* Kiss Code */
604         int     has_mac;                /* length of MAC field */
605         int     authlen;                /* offset of MAC field */
606         auth_code is_authentic = AUTH_UNKNOWN;  /* Was AUTH_NONE */
607         nak_code crypto_nak_test;       /* result of crypto-NAK check */
608         int     retcode = AM_NOMATCH;   /* match code */
609         keyid_t skeyid = 0;             /* key IDs */
610         u_int32 opcode = 0;             /* extension field opcode */
611         sockaddr_u *dstadr_sin;         /* active runway */
612         struct peer *peer2;             /* aux peer structure pointer */
613         endpt   *match_ep;              /* newpeer() local address */
614         l_fp    p_org;                  /* origin timestamp */
615         l_fp    p_rec;                  /* receive timestamp */
616         l_fp    p_xmt;                  /* transmit timestamp */
617 #ifdef AUTOKEY
618         char    hostname[NTP_MAXSTRLEN + 1];
619         char    *groupname = NULL;
620         struct autokey *ap;             /* autokey structure pointer */
621         int     rval;                   /* cookie snatcher */
622         keyid_t pkeyid = 0, tkeyid = 0; /* key IDs */
623 #endif  /* AUTOKEY */
624 #ifdef HAVE_NTP_SIGND
625         static unsigned char zero_key[16];
626 #endif /* HAVE_NTP_SIGND */
627
628         /*
629          * Note that there are many places we do not call record_raw_stats().
630          *
631          * We only want to call it *after* we've sent a response, or perhaps
632          * when we've decided to drop a packet.
633          */
634
635         /*
636          * Monitor the packet and get restrictions. Note that the packet
637          * length for control and private mode packets must be checked
638          * by the service routines. Some restrictions have to be handled
639          * later in order to generate a kiss-o'-death packet.
640          */
641         /*
642          * Bogus port check is before anything, since it probably
643          * reveals a clogging attack.
644          */
645         sys_received++;
646         if (0 == SRCPORT(&rbufp->recv_srcadr)) {
647                 sys_badlength++;
648                 return;                         /* bogus port */
649         }
650         restrictions(&rbufp->recv_srcadr, &r4a);
651         restrict_mask = r4a.rflags;
652
653         pkt = &rbufp->recv_pkt;
654         hisversion = PKT_VERSION(pkt->li_vn_mode);
655         hisleap = PKT_LEAP(pkt->li_vn_mode);
656         hismode = (int)PKT_MODE(pkt->li_vn_mode);
657         hisstratum = PKT_TO_STRATUM(pkt->stratum);
658         DPRINTF(1, ("receive: at %ld %s<-%s ippeerlimit %d mode %d iflags %s restrict %s org %#010x.%08x xmt %#010x.%08x\n",
659                     current_time, stoa(&rbufp->dstadr->sin),
660                     stoa(&rbufp->recv_srcadr), r4a.ippeerlimit, hismode,
661                     build_iflags(rbufp->dstadr->flags),
662                     build_rflags(restrict_mask),
663                     ntohl(pkt->org.l_ui), ntohl(pkt->org.l_uf),
664                     ntohl(pkt->xmt.l_ui), ntohl(pkt->xmt.l_uf)));
665
666         /* See basic mode and broadcast checks, below */
667         INSIST(0 != hisstratum);
668
669         if (restrict_mask & RES_IGNORE) {
670                 DPRINTF(2, ("receive: drop: RES_IGNORE\n"));
671                 sys_restricted++;
672                 return;                         /* ignore everything */
673         }
674         if (hismode == MODE_PRIVATE) {
675                 if (!ntp_mode7 || (restrict_mask & RES_NOQUERY)) {
676                         DPRINTF(2, ("receive: drop: RES_NOQUERY\n"));
677                         sys_restricted++;
678                         return;                 /* no query private */
679                 }
680                 process_private(rbufp, ((restrict_mask &
681                     RES_NOMODIFY) == 0));
682                 return;
683         }
684         if (hismode == MODE_CONTROL) {
685                 if (restrict_mask & RES_NOQUERY) {
686                         DPRINTF(2, ("receive: drop: RES_NOQUERY\n"));
687                         sys_restricted++;
688                         return;                 /* no query control */
689                 }
690                 process_control(rbufp, restrict_mask);
691                 return;
692         }
693         if (restrict_mask & RES_DONTSERVE) {
694                 DPRINTF(2, ("receive: drop: RES_DONTSERVE\n"));
695                 sys_restricted++;
696                 return;                         /* no time serve */
697         }
698
699         /*
700          * This is for testing. If restricted drop ten percent of
701          * surviving packets.
702          */
703         if (restrict_mask & RES_FLAKE) {
704                 if ((double)ntp_random() / 0x7fffffff < .1) {
705                         DPRINTF(2, ("receive: drop: RES_FLAKE\n"));
706                         sys_restricted++;
707                         return;                 /* no flakeway */
708                 }
709         }
710
711         /*
712         ** Format Layer Checks
713         **
714         ** Validate the packet format.  The packet size, packet header,
715         ** and any extension field lengths are checked.  We identify
716         ** the beginning of the MAC, to identify the upper limit of
717         ** of the hash computation.
718         **
719         ** In case of a format layer check violation, the packet is
720         ** discarded with no further processing.
721         */
722
723         /*
724          * Version check must be after the query packets, since they
725          * intentionally use an early version.
726          */
727         if (hisversion == NTP_VERSION) {
728                 sys_newversion++;               /* new version */
729         } else if (   !(restrict_mask & RES_VERSION)
730                    && hisversion >= NTP_OLDVERSION) {
731                 sys_oldversion++;               /* previous version */
732         } else {
733                 DPRINTF(2, ("receive: drop: RES_VERSION\n"));
734                 sys_badlength++;
735                 return;                         /* old version */
736         }
737
738         /*
739          * Figure out his mode and validate the packet. This has some
740          * legacy raunch that probably should be removed. In very early
741          * NTP versions mode 0 was equivalent to what later versions
742          * would interpret as client mode.
743          */
744         if (hismode == MODE_UNSPEC) {
745                 if (hisversion == NTP_OLDVERSION) {
746                         hismode = MODE_CLIENT;
747                 } else {
748                         DPRINTF(2, ("receive: drop: MODE_UNSPEC\n"));
749                         sys_badlength++;
750                         return;                 /* invalid mode */
751                 }
752         }
753
754         /*
755          * Parse the extension field if present. We figure out whether
756          * an extension field is present by measuring the MAC size. If
757          * the number of words following the packet header is 0, no MAC
758          * is present and the packet is not authenticated. If 1, the
759          * packet is a crypto-NAK; if 3, the packet is authenticated
760          * with DES; if 5, the packet is authenticated with MD5; if 6,
761          * the packet is authenticated with SHA. If 2 or * 4, the packet
762          * is a runt and discarded forthwith. If greater than 6, an
763          * extension field is present, so we subtract the length of the
764          * field and go around again.
765          *
766          * Note the above description is lame.  We should/could also check
767          * the two bytes that make up the EF type and subtype, and then
768          * check the two bytes that tell us the EF length.  A legacy MAC
769          * has a 4 byte keyID, and for conforming symmetric keys its value
770          * must be <= 64k, meaning the top two bytes will always be zero.
771          * Since the EF Type of 0 is reserved/unused, there's no way a
772          * conforming legacy MAC could ever be misinterpreted as an EF.
773          *
774          * There is more, but this isn't the place to document it.
775          */
776
777         authlen = LEN_PKT_NOMAC;
778         has_mac = rbufp->recv_length - authlen;
779         while (has_mac > 0) {
780                 u_int32 len;
781 #ifdef AUTOKEY
782                 u_int32 hostlen;
783                 struct exten *ep;
784 #endif /*AUTOKEY */
785
786                 if (has_mac % 4 != 0 || has_mac < (int)MIN_MAC_LEN) {
787                         DPRINTF(2, ("receive: drop: bad post-packet length\n"));
788                         sys_badlength++;
789                         return;                 /* bad length */
790                 }
791                 /*
792                  * This next test is clearly wrong - it needlessly
793                  * prohibits short EFs (which don't yet exist)
794                  */
795                 if (has_mac <= (int)MAX_MAC_LEN) {
796                         skeyid = ntohl(((u_int32 *)pkt)[authlen / 4]);
797                         break;
798
799                 } else {
800                         opcode = ntohl(((u_int32 *)pkt)[authlen / 4]);
801                         len = opcode & 0xffff;
802                         if (   len % 4 != 0
803                             || len < 4
804                             || (int)len + authlen > rbufp->recv_length) {
805                                 DPRINTF(2, ("receive: drop: bad EF length\n"));
806                                 sys_badlength++;
807                                 return;         /* bad length */
808                         }
809 #ifdef AUTOKEY
810                         /*
811                          * Extract calling group name for later.  If
812                          * sys_groupname is non-NULL, there must be
813                          * a group name provided to elicit a response.
814                          */
815                         if (   (opcode & 0x3fff0000) == CRYPTO_ASSOC
816                             && sys_groupname != NULL) {
817                                 ep = (struct exten *)&((u_int32 *)pkt)[authlen / 4];
818                                 hostlen = ntohl(ep->vallen);
819                                 if (   hostlen >= sizeof(hostname)
820                                     || hostlen > len -
821                                                 offsetof(struct exten, pkt)) {
822                                         DPRINTF(2, ("receive: drop: bad autokey hostname length\n"));
823                                         sys_badlength++;
824                                         return;         /* bad length */
825                                 }
826                                 memcpy(hostname, &ep->pkt, hostlen);
827                                 hostname[hostlen] = '\0';
828                                 groupname = strchr(hostname, '@');
829                                 if (groupname == NULL) {
830                                         DPRINTF(2, ("receive: drop: empty autokey groupname\n"));
831                                         sys_declined++;
832                                         return;
833                                 }
834                                 groupname++;
835                         }
836 #endif /* AUTOKEY */
837                         authlen += len;
838                         has_mac -= len;
839                 }
840         }
841
842         /*
843          * If has_mac is < 0 we had a malformed packet.
844          */
845         if (has_mac < 0) {
846                 DPRINTF(2, ("receive: drop: post-packet under-read\n"));
847                 sys_badlength++;
848                 return;         /* bad length */
849         }
850
851         /*
852         ** Packet Data Verification Layer
853         **
854         ** This layer verifies the packet data content.  If
855         ** authentication is required, a MAC must be present.
856         ** If a MAC is present, it must validate.
857         ** Crypto-NAK?  Look - a shiny thing!
858         **
859         ** If authentication fails, we're done.
860         */
861
862         /*
863          * If authentication is explicitly required, a MAC must be present.
864          */
865         if (restrict_mask & RES_DONTTRUST && has_mac == 0) {
866                 DPRINTF(2, ("receive: drop: RES_DONTTRUST\n"));
867                 sys_restricted++;
868                 return;                         /* access denied */
869         }
870
871         /*
872          * Update the MRU list and finger the cloggers. It can be a
873          * little expensive, so turn it off for production use.
874          * RES_LIMITED and RES_KOD will be cleared in the returned
875          * restrict_mask unless one or both actions are warranted.
876          */
877         restrict_mask = ntp_monitor(rbufp, restrict_mask);
878         if (restrict_mask & RES_LIMITED) {
879                 sys_limitrejected++;
880                 if (   !(restrict_mask & RES_KOD)
881                     || MODE_BROADCAST == hismode
882                     || MODE_SERVER == hismode) {
883                         if (MODE_SERVER == hismode) {
884                                 DPRINTF(1, ("Possibly self-induced rate limiting of MODE_SERVER from %s\n",
885                                         stoa(&rbufp->recv_srcadr)));
886                         } else {
887                                 DPRINTF(2, ("receive: drop: RES_KOD\n"));
888                         }
889                         return;                 /* rate exceeded */
890                 }
891                 if (hismode == MODE_CLIENT)
892                         fast_xmit(rbufp, MODE_SERVER, skeyid,
893                             restrict_mask);
894                 else
895                         fast_xmit(rbufp, MODE_ACTIVE, skeyid,
896                             restrict_mask);
897                 return;                         /* rate exceeded */
898         }
899         restrict_mask &= ~RES_KOD;
900
901         /*
902          * We have tossed out as many buggy packets as possible early in
903          * the game to reduce the exposure to a clogging attack. Now we
904          * have to burn some cycles to find the association and
905          * authenticate the packet if required. Note that we burn only
906          * digest cycles, again to reduce exposure. There may be no
907          * matching association and that's okay.
908          *
909          * More on the autokey mambo. Normally the local interface is
910          * found when the association was mobilized with respect to a
911          * designated remote address. We assume packets arriving from
912          * the remote address arrive via this interface and the local
913          * address used to construct the autokey is the unicast address
914          * of the interface. However, if the sender is a broadcaster,
915          * the interface broadcast address is used instead.
916          * Notwithstanding this technobabble, if the sender is a
917          * multicaster, the broadcast address is null, so we use the
918          * unicast address anyway. Don't ask.
919          */
920
921         peer = findpeer(rbufp,  hismode, &retcode);
922         dstadr_sin = &rbufp->dstadr->sin;
923         NTOHL_FP(&pkt->org, &p_org);
924         NTOHL_FP(&pkt->rec, &p_rec);
925         NTOHL_FP(&pkt->xmt, &p_xmt);
926         hm_str = modetoa(hismode);
927         am_str = amtoa(retcode);
928
929         /*
930          * Authentication is conditioned by three switches:
931          *
932          * NOPEER  (RES_NOPEER) do not mobilize an association unless
933          *         authenticated
934          * NOTRUST (RES_DONTTRUST) do not allow access unless
935          *         authenticated (implies NOPEER)
936          * enable  (sys_authenticate) master NOPEER switch, by default
937          *         on
938          *
939          * The NOPEER and NOTRUST can be specified on a per-client basis
940          * using the restrict command. The enable switch if on implies
941          * NOPEER for all clients. There are four outcomes:
942          *
943          * NONE    The packet has no MAC.
944          * OK      the packet has a MAC and authentication succeeds
945          * ERROR   the packet has a MAC and authentication fails
946          * CRYPTO  crypto-NAK. The MAC has four octets only.
947          *
948          * Note: The AUTH(x, y) macro is used to filter outcomes. If x
949          * is zero, acceptable outcomes of y are NONE and OK. If x is
950          * one, the only acceptable outcome of y is OK.
951          */
952         crypto_nak_test = valid_NAK(peer, rbufp, hismode);
953
954         /*
955          * Drop any invalid crypto-NAKs
956          */
957         if (crypto_nak_test == INVALIDNAK) {
958                 report_event(PEVNT_AUTH, peer, "Invalid_NAK");
959                 if (0 != peer) {
960                         peer->badNAK++;
961                 }
962                 msyslog(LOG_ERR, "Invalid-NAK error at %ld %s<-%s",
963                         current_time, stoa(dstadr_sin), stoa(&rbufp->recv_srcadr));
964                 return;
965         }
966
967         if (has_mac == 0) {
968                 restrict_mask &= ~RES_MSSNTP;
969                 is_authentic = AUTH_NONE; /* not required */
970                 DPRINTF(1, ("receive: at %ld %s<-%s mode %d/%s:%s len %d org %#010x.%08x xmt %#010x.%08x NOMAC\n",
971                             current_time, stoa(dstadr_sin),
972                             stoa(&rbufp->recv_srcadr), hismode, hm_str, am_str,
973                             authlen,
974                             ntohl(pkt->org.l_ui), ntohl(pkt->org.l_uf),
975                             ntohl(pkt->xmt.l_ui), ntohl(pkt->xmt.l_uf)));
976         } else if (crypto_nak_test == VALIDNAK) {
977                 restrict_mask &= ~RES_MSSNTP;
978                 is_authentic = AUTH_CRYPTO; /* crypto-NAK */
979                 DPRINTF(1, ("receive: at %ld %s<-%s mode %d/%s:%s keyid %08x len %d auth %d org %#010x.%08x xmt %#010x.%08x CRYPTONAK\n",
980                             current_time, stoa(dstadr_sin),
981                             stoa(&rbufp->recv_srcadr), hismode, hm_str, am_str,
982                             skeyid, authlen + has_mac, is_authentic,
983                             ntohl(pkt->org.l_ui), ntohl(pkt->org.l_uf),
984                             ntohl(pkt->xmt.l_ui), ntohl(pkt->xmt.l_uf)));
985
986 #ifdef HAVE_NTP_SIGND
987                 /*
988                  * If the signature is 20 bytes long, the last 16 of
989                  * which are zero, then this is a Microsoft client
990                  * wanting AD-style authentication of the server's
991                  * reply.
992                  *
993                  * This is described in Microsoft's WSPP docs, in MS-SNTP:
994                  * http://msdn.microsoft.com/en-us/library/cc212930.aspx
995                  */
996         } else if (   has_mac == MAX_MD5_LEN
997                    && (restrict_mask & RES_MSSNTP)
998                    && (retcode == AM_FXMIT || retcode == AM_NEWPASS)
999                    && (memcmp(zero_key, (char *)pkt + authlen + 4,
1000                               MAX_MD5_LEN - 4) == 0)) {
1001                 is_authentic = AUTH_NONE;
1002                 DPRINTF(1, ("receive: at %ld %s<-%s mode %d/%s:%s len %d org %#010x.%08x xmt %#010x.%08x SIGND\n",
1003                             current_time, stoa(dstadr_sin),
1004                             stoa(&rbufp->recv_srcadr), hismode, hm_str, am_str,
1005                             authlen,
1006                             ntohl(pkt->org.l_ui), ntohl(pkt->org.l_uf),
1007                             ntohl(pkt->xmt.l_ui), ntohl(pkt->xmt.l_uf)));
1008 #endif /* HAVE_NTP_SIGND */
1009
1010         } else {
1011                 /*
1012                  * has_mac is not 0
1013                  * Not a VALID_NAK
1014                  * Not an MS-SNTP SIGND packet
1015                  *
1016                  * So there is a MAC here.
1017                  */
1018
1019                 restrict_mask &= ~RES_MSSNTP;
1020 #ifdef AUTOKEY
1021                 /*
1022                  * For autokey modes, generate the session key
1023                  * and install in the key cache. Use the socket
1024                  * broadcast or unicast address as appropriate.
1025                  */
1026                 if (crypto_flags && skeyid > NTP_MAXKEY) {
1027
1028                         /*
1029                          * More on the autokey dance (AKD). A cookie is
1030                          * constructed from public and private values.
1031                          * For broadcast packets, the cookie is public
1032                          * (zero). For packets that match no
1033                          * association, the cookie is hashed from the
1034                          * addresses and private value. For server
1035                          * packets, the cookie was previously obtained
1036                          * from the server. For symmetric modes, the
1037                          * cookie was previously constructed using an
1038                          * agreement protocol; however, should PKI be
1039                          * unavailable, we construct a fake agreement as
1040                          * the EXOR of the peer and host cookies.
1041                          *
1042                          * hismode      ephemeral       persistent
1043                          * =======================================
1044                          * active       0               cookie#
1045                          * passive      0%              cookie#
1046                          * client       sys cookie      0%
1047                          * server       0%              sys cookie
1048                          * broadcast    0               0
1049                          *
1050                          * # if unsync, 0
1051                          * % can't happen
1052                          */
1053                         if (has_mac < (int)MAX_MD5_LEN) {
1054                                 DPRINTF(2, ("receive: drop: MD5 digest too short\n"));
1055                                 sys_badauth++;
1056                                 return;
1057                         }
1058                         if (hismode == MODE_BROADCAST) {
1059
1060                                 /*
1061                                  * For broadcaster, use the interface
1062                                  * broadcast address when available;
1063                                  * otherwise, use the unicast address
1064                                  * found when the association was
1065                                  * mobilized. However, if this is from
1066                                  * the wildcard interface, game over.
1067                                  */
1068                                 if (   crypto_flags
1069                                     && rbufp->dstadr ==
1070                                        ANY_INTERFACE_CHOOSE(&rbufp->recv_srcadr)) {
1071                                         DPRINTF(2, ("receive: drop: BCAST from wildcard\n"));
1072                                         sys_restricted++;
1073                                         return;         /* no wildcard */
1074                                 }
1075                                 pkeyid = 0;
1076                                 if (!SOCK_UNSPEC(&rbufp->dstadr->bcast))
1077                                         dstadr_sin =
1078                                             &rbufp->dstadr->bcast;
1079                         } else if (peer == NULL) {
1080                                 pkeyid = session_key(
1081                                     &rbufp->recv_srcadr, dstadr_sin, 0,
1082                                     sys_private, 0);
1083                         } else {
1084                                 pkeyid = peer->pcookie;
1085                         }
1086
1087                         /*
1088                          * The session key includes both the public
1089                          * values and cookie. In case of an extension
1090                          * field, the cookie used for authentication
1091                          * purposes is zero. Note the hash is saved for
1092                          * use later in the autokey mambo.
1093                          */
1094                         if (authlen > (int)LEN_PKT_NOMAC && pkeyid != 0) {
1095                                 session_key(&rbufp->recv_srcadr,
1096                                     dstadr_sin, skeyid, 0, 2);
1097                                 tkeyid = session_key(
1098                                     &rbufp->recv_srcadr, dstadr_sin,
1099                                     skeyid, pkeyid, 0);
1100                         } else {
1101                                 tkeyid = session_key(
1102                                     &rbufp->recv_srcadr, dstadr_sin,
1103                                     skeyid, pkeyid, 2);
1104                         }
1105
1106                 }
1107 #endif  /* AUTOKEY */
1108
1109                 /*
1110                  * Compute the cryptosum. Note a clogging attack may
1111                  * succeed in bloating the key cache. If an autokey,
1112                  * purge it immediately, since we won't be needing it
1113                  * again. If the packet is authentic, it can mobilize an
1114                  * association. Note that there is no key zero.
1115                  */
1116                 if (!authdecrypt(skeyid, (u_int32 *)pkt, authlen,
1117                     has_mac))
1118                         is_authentic = AUTH_ERROR;
1119                 else
1120                         is_authentic = AUTH_OK;
1121 #ifdef AUTOKEY
1122                 if (crypto_flags && skeyid > NTP_MAXKEY)
1123                         authtrust(skeyid, 0);
1124 #endif  /* AUTOKEY */
1125                 DPRINTF(1, ("receive: at %ld %s<-%s mode %d/%s:%s keyid %08x len %d auth %d org %#010x.%08x xmt %#010x.%08x MAC\n",
1126                             current_time, stoa(dstadr_sin),
1127                             stoa(&rbufp->recv_srcadr), hismode, hm_str, am_str,
1128                             skeyid, authlen + has_mac, is_authentic,
1129                             ntohl(pkt->org.l_ui), ntohl(pkt->org.l_uf),
1130                             ntohl(pkt->xmt.l_ui), ntohl(pkt->xmt.l_uf)));
1131         }
1132
1133
1134         /*
1135          * Bug 3454:
1136          *
1137          * Now come at this from a different perspective:
1138          * - If we expect a MAC and it's not there, we drop it.
1139          * - If we expect one keyID and get another, we drop it.
1140          * - If we have a MAC ahd it hasn't been validated yet, try.
1141          * - if the provided MAC doesn't validate, we drop it.
1142          *
1143          * There might be more to this.
1144          */
1145         if (0 != peer && 0 != peer->keyid) {
1146                 /* Should we msyslog() any of these? */
1147
1148                 /*
1149                  * This should catch:
1150                  * - no keyID where one is expected,
1151                  * - different keyID than what we expect.
1152                  */
1153                 if (peer->keyid != skeyid) {
1154                         DPRINTF(2, ("receive: drop: Wanted keyID %d, got %d from %s\n",
1155                                     peer->keyid, skeyid,
1156                                     stoa(&rbufp->recv_srcadr)));
1157                         sys_restricted++;
1158                         return;                 /* drop: access denied */
1159                 }
1160
1161                 /*
1162                  * if has_mac != 0 ...
1163                  * - If it has not yet been validated, do so.
1164                  *   (under what circumstances might that happen?)
1165                  * - if missing or bad MAC, log and drop.
1166                  */
1167                 if (0 != has_mac) {
1168                         if (is_authentic == AUTH_UNKNOWN) {
1169                                 /* How can this happen? */
1170                                 DPRINTF(2, ("receive: 3454 check: AUTH_UNKNOWN from %s\n",
1171                                     stoa(&rbufp->recv_srcadr)));
1172                                 if (!authdecrypt(skeyid, (u_int32 *)pkt, authlen,
1173                                     has_mac)) {
1174                                         /* MAC invalid or not found */
1175                                         is_authentic = AUTH_ERROR;
1176                                 } else {
1177                                         is_authentic = AUTH_OK;
1178                                 }
1179                         }
1180                         if (is_authentic != AUTH_OK) {
1181                                 DPRINTF(2, ("receive: drop: missing or bad MAC from %s\n",
1182                                             stoa(&rbufp->recv_srcadr)));
1183                                 sys_restricted++;
1184                                 return;         /* drop: access denied */
1185                         }
1186                 }
1187         }
1188         /**/
1189
1190         /*
1191         ** On-Wire Protocol Layer
1192         **
1193         ** Verify protocol operations consistent with the on-wire protocol.
1194         ** The protocol discards bogus and duplicate packets as well as
1195         ** minimizes disruptions doe to protocol restarts and dropped
1196         ** packets.  The operations are controlled by two timestamps:
1197         ** the transmit timestamp saved in the client state variables,
1198         ** and the origin timestamp in the server packet header.  The
1199         ** comparison of these two timestamps is called the loopback test.
1200         ** The transmit timestamp functions as a nonce to verify that the
1201         ** response corresponds to the original request.  The transmit
1202         ** timestamp also serves to discard replays of the most recent
1203         ** packet.  Upon failure of either test, the packet is discarded
1204         ** with no further action.
1205         */
1206
1207         /*
1208          * The association matching rules are implemented by a set of
1209          * routines and an association table. A packet matching an
1210          * association is processed by the peer process for that
1211          * association. If there are no errors, an ephemeral association
1212          * is mobilized: a broadcast packet mobilizes a broadcast client
1213          * aassociation; a manycast server packet mobilizes a manycast
1214          * client association; a symmetric active packet mobilizes a
1215          * symmetric passive association.
1216          */
1217         DPRINTF(1, ("receive: MATCH_ASSOC dispatch: mode %d/%s:%s \n",
1218                 hismode, hm_str, am_str));
1219         switch (retcode) {
1220
1221         /*
1222          * This is a client mode packet not matching any association. If
1223          * an ordinary client, simply toss a server mode packet back
1224          * over the fence. If a manycast client, we have to work a
1225          * little harder.
1226          *
1227          * There are cases here where we do not call record_raw_stats().
1228          */
1229         case AM_FXMIT:
1230
1231                 /*
1232                  * If authentication OK, send a server reply; otherwise,
1233                  * send a crypto-NAK.
1234                  */
1235                 if (!(rbufp->dstadr->flags & INT_MCASTOPEN)) {
1236                         /* HMS: would be nice to log FAST_XMIT|BADAUTH|RESTRICTED */
1237                         record_raw_stats(&rbufp->recv_srcadr,
1238                             &rbufp->dstadr->sin,
1239                             &p_org, &p_rec, &p_xmt, &rbufp->recv_time,
1240                             PKT_LEAP(pkt->li_vn_mode),
1241                             PKT_VERSION(pkt->li_vn_mode),
1242                             PKT_MODE(pkt->li_vn_mode),
1243                             PKT_TO_STRATUM(pkt->stratum),
1244                             pkt->ppoll,
1245                             pkt->precision,
1246                             FPTOD(NTOHS_FP(pkt->rootdelay)),
1247                             FPTOD(NTOHS_FP(pkt->rootdisp)),
1248                             pkt->refid,
1249                             rbufp->recv_length - MIN_V4_PKT_LEN, (u_char *)&pkt->exten);
1250
1251                         if (AUTH(restrict_mask & RES_DONTTRUST,
1252                            is_authentic)) {
1253                                 fast_xmit(rbufp, MODE_SERVER, skeyid,
1254                                     restrict_mask);
1255                         } else if (is_authentic == AUTH_ERROR) {
1256                                 fast_xmit(rbufp, MODE_SERVER, 0,
1257                                     restrict_mask);
1258                                 sys_badauth++;
1259                         } else {
1260                                 DPRINTF(2, ("receive: AM_FXMIT drop: !mcast restricted\n"));
1261                                 sys_restricted++;
1262                         }
1263
1264                         return;                 /* hooray */
1265                 }
1266
1267                 /*
1268                  * This must be manycast. Do not respond if not
1269                  * configured as a manycast server.
1270                  */
1271                 if (!sys_manycastserver) {
1272                         DPRINTF(2, ("receive: AM_FXMIT drop: Not manycastserver\n"));
1273                         sys_restricted++;
1274                         return;                 /* not enabled */
1275                 }
1276
1277 #ifdef AUTOKEY
1278                 /*
1279                  * Do not respond if not the same group.
1280                  */
1281                 if (group_test(groupname, NULL)) {
1282                         DPRINTF(2, ("receive: AM_FXMIT drop: empty groupname\n"));
1283                         sys_declined++;
1284                         return;
1285                 }
1286 #endif /* AUTOKEY */
1287
1288                 /*
1289                  * Do not respond if we are not synchronized or our
1290                  * stratum is greater than the manycaster or the
1291                  * manycaster has already synchronized to us.
1292                  */
1293                 if (   sys_leap == LEAP_NOTINSYNC
1294                     || sys_stratum >= hisstratum
1295                     || (!sys_cohort && sys_stratum == hisstratum + 1)
1296                     || rbufp->dstadr->addr_refid == pkt->refid) {
1297                         DPRINTF(2, ("receive: AM_FXMIT drop: LEAP_NOTINSYNC || stratum || loop\n"));
1298                         sys_declined++;
1299                         return;                 /* no help */
1300                 }
1301
1302                 /*
1303                  * Respond only if authentication succeeds. Don't do a
1304                  * crypto-NAK, as that would not be useful.
1305                  */
1306                 if (AUTH(restrict_mask & RES_DONTTRUST, is_authentic)) {
1307                         record_raw_stats(&rbufp->recv_srcadr,
1308                             &rbufp->dstadr->sin,
1309                             &p_org, &p_rec, &p_xmt, &rbufp->recv_time,
1310                             PKT_LEAP(pkt->li_vn_mode),
1311                             PKT_VERSION(pkt->li_vn_mode),
1312                             PKT_MODE(pkt->li_vn_mode),
1313                             PKT_TO_STRATUM(pkt->stratum),
1314                             pkt->ppoll,
1315                             pkt->precision,
1316                             FPTOD(NTOHS_FP(pkt->rootdelay)),
1317                             FPTOD(NTOHS_FP(pkt->rootdisp)),
1318                             pkt->refid,
1319                             rbufp->recv_length - MIN_V4_PKT_LEN, (u_char *)&pkt->exten);
1320
1321                         fast_xmit(rbufp, MODE_SERVER, skeyid,
1322                             restrict_mask);
1323                 }
1324                 return;                         /* hooray */
1325
1326         /*
1327          * This is a server mode packet returned in response to a client
1328          * mode packet sent to a multicast group address (for
1329          * manycastclient) or to a unicast address (for pool). The
1330          * origin timestamp is a good nonce to reliably associate the
1331          * reply with what was sent. If there is no match, that's
1332          * curious and could be an intruder attempting to clog, so we
1333          * just ignore it.
1334          *
1335          * If the packet is authentic and the manycastclient or pool
1336          * association is found, we mobilize a client association and
1337          * copy pertinent variables from the manycastclient or pool
1338          * association to the new client association. If not, just
1339          * ignore the packet.
1340          *
1341          * There is an implosion hazard at the manycast client, since
1342          * the manycast servers send the server packet immediately. If
1343          * the guy is already here, don't fire up a duplicate.
1344          *
1345          * There are cases here where we do not call record_raw_stats().
1346          */
1347         case AM_MANYCAST:
1348
1349 #ifdef AUTOKEY
1350                 /*
1351                  * Do not respond if not the same group.
1352                  */
1353                 if (group_test(groupname, NULL)) {
1354                         DPRINTF(2, ("receive: AM_MANYCAST drop: empty groupname\n"));
1355                         sys_declined++;
1356                         return;
1357                 }
1358 #endif /* AUTOKEY */
1359                 if ((peer2 = findmanycastpeer(rbufp)) == NULL) {
1360                         DPRINTF(2, ("receive: AM_MANYCAST drop: No manycast peer\n"));
1361                         sys_restricted++;
1362                         return;                 /* not enabled */
1363                 }
1364                 if (!AUTH(  (!(peer2->cast_flags & MDF_POOL)
1365                              && sys_authenticate)
1366                           || (restrict_mask & (RES_NOPEER |
1367                               RES_DONTTRUST)), is_authentic)
1368                     /* MC: RES_NOEPEER? */
1369                    ) {
1370                         DPRINTF(2, ("receive: AM_MANYCAST drop: bad auth || (NOPEER|DONTTRUST)\n"));
1371                         sys_restricted++;
1372                         return;                 /* access denied */
1373                 }
1374
1375                 /*
1376                  * Do not respond if unsynchronized or stratum is below
1377                  * the floor or at or above the ceiling.
1378                  */
1379                 if (   hisleap == LEAP_NOTINSYNC
1380                     || hisstratum < sys_floor
1381                     || hisstratum >= sys_ceiling) {
1382                         DPRINTF(2, ("receive: AM_MANYCAST drop: unsync/stratum\n"));
1383                         sys_declined++;
1384                         return;                 /* no help */
1385                 }
1386                 peer = newpeer(&rbufp->recv_srcadr, NULL, rbufp->dstadr,
1387                                r4a.ippeerlimit, MODE_CLIENT, hisversion,
1388                                peer2->minpoll, peer2->maxpoll,
1389                                FLAG_PREEMPT | (FLAG_IBURST & peer2->flags),
1390                                MDF_UCAST | MDF_UCLNT, 0, skeyid, sys_ident);
1391                 if (NULL == peer) {
1392                         DPRINTF(2, ("receive: AM_MANYCAST drop: duplicate\n"));
1393                         sys_declined++;
1394                         return;                 /* ignore duplicate */
1395                 }
1396
1397                 /*
1398                  * After each ephemeral pool association is spun,
1399                  * accelerate the next poll for the pool solicitor so
1400                  * the pool will fill promptly.
1401                  */
1402                 if (peer2->cast_flags & MDF_POOL)
1403                         peer2->nextdate = current_time + 1;
1404
1405                 /*
1406                  * Further processing of the solicitation response would
1407                  * simply detect its origin timestamp as bogus for the
1408                  * brand-new association (it matches the prototype
1409                  * association) and tinker with peer->nextdate delaying
1410                  * first sync.
1411                  */
1412                 return;         /* solicitation response handled */
1413
1414         /*
1415          * This is the first packet received from a broadcast server. If
1416          * the packet is authentic and we are enabled as broadcast
1417          * client, mobilize a broadcast client association. We don't
1418          * kiss any frogs here.
1419          *
1420          * There are cases here where we do not call record_raw_stats().
1421          */
1422         case AM_NEWBCL:
1423
1424 #ifdef AUTOKEY
1425                 /*
1426                  * Do not respond if not the same group.
1427                  */
1428                 if (group_test(groupname, sys_ident)) {
1429                         DPRINTF(2, ("receive: AM_NEWBCL drop: groupname mismatch\n"));
1430                         sys_declined++;
1431                         return;
1432                 }
1433 #endif /* AUTOKEY */
1434                 if (sys_bclient == 0) {
1435                         DPRINTF(2, ("receive: AM_NEWBCL drop: not a bclient\n"));
1436                         sys_restricted++;
1437                         return;                 /* not enabled */
1438                 }
1439                 if (!AUTH(sys_authenticate | (restrict_mask &
1440                           (RES_NOPEER | RES_DONTTRUST)), is_authentic)
1441                     /* NEWBCL: RES_NOEPEER? */
1442                    ) {
1443                         DPRINTF(2, ("receive: AM_NEWBCL drop: AUTH failed\n"));
1444                         sys_restricted++;
1445                         return;                 /* access denied */
1446                 }
1447
1448                 /*
1449                  * Do not respond if unsynchronized or stratum is below
1450                  * the floor or at or above the ceiling.
1451                  */
1452                 if (   hisleap == LEAP_NOTINSYNC
1453                     || hisstratum < sys_floor
1454                     || hisstratum >= sys_ceiling) {
1455                         DPRINTF(2, ("receive: AM_NEWBCL drop: Unsync or bad stratum\n"));
1456                         sys_declined++;
1457                         return;                 /* no help */
1458                 }
1459
1460 #ifdef AUTOKEY
1461                 /*
1462                  * Do not respond if Autokey and the opcode is not a
1463                  * CRYPTO_ASSOC response with association ID.
1464                  */
1465                 if (   crypto_flags && skeyid > NTP_MAXKEY
1466                     && (opcode & 0xffff0000) != (CRYPTO_ASSOC | CRYPTO_RESP)) {
1467                         DPRINTF(2, ("receive: AM_NEWBCL drop: Autokey but not CRYPTO_ASSOC\n"));
1468                         sys_declined++;
1469                         return;                 /* protocol error */
1470                 }
1471 #endif  /* AUTOKEY */
1472
1473                 /*
1474                  * Broadcasts received via a multicast address may
1475                  * arrive after a unicast volley has begun
1476                  * with the same remote address.  newpeer() will not
1477                  * find duplicate associations on other local endpoints
1478                  * if a non-NULL endpoint is supplied.  multicastclient
1479                  * ephemeral associations are unique across all local
1480                  * endpoints.
1481                  */
1482                 if (!(INT_MCASTOPEN & rbufp->dstadr->flags))
1483                         match_ep = rbufp->dstadr;
1484                 else
1485                         match_ep = NULL;
1486
1487                 /*
1488                  * Determine whether to execute the initial volley.
1489                  */
1490                 if (sys_bdelay > 0.0) {
1491 #ifdef AUTOKEY
1492                         /*
1493                          * If a two-way exchange is not possible,
1494                          * neither is Autokey.
1495                          */
1496                         if (crypto_flags && skeyid > NTP_MAXKEY) {
1497                                 sys_restricted++;
1498                                 DPRINTF(2, ("receive: AM_NEWBCL drop: Autokey but not 2-way\n"));
1499                                 return;         /* no autokey */
1500                         }
1501 #endif  /* AUTOKEY */
1502
1503                         /*
1504                          * Do not execute the volley. Start out in
1505                          * broadcast client mode.
1506                          */
1507                         peer = newpeer(&rbufp->recv_srcadr, NULL, match_ep,
1508                             r4a.ippeerlimit, MODE_BCLIENT, hisversion,
1509                             pkt->ppoll, pkt->ppoll,
1510                             FLAG_PREEMPT, MDF_BCLNT, 0, skeyid, sys_ident);
1511                         if (NULL == peer) {
1512                                 DPRINTF(2, ("receive: AM_NEWBCL drop: duplicate\n"));
1513                                 sys_restricted++;
1514                                 return;         /* ignore duplicate */
1515
1516                         } else {
1517                                 peer->delay = sys_bdelay;
1518                                 peer->bxmt = p_xmt;
1519                         }
1520                         break;
1521                 }
1522
1523                 /*
1524                  * Execute the initial volley in order to calibrate the
1525                  * propagation delay and run the Autokey protocol.
1526                  *
1527                  * Note that the minpoll is taken from the broadcast
1528                  * packet, normally 6 (64 s) and that the poll interval
1529                  * is fixed at this value.
1530                  */
1531                 peer = newpeer(&rbufp->recv_srcadr, NULL, match_ep,
1532                                r4a.ippeerlimit, MODE_CLIENT, hisversion,
1533                                pkt->ppoll, pkt->ppoll,
1534                                FLAG_BC_VOL | FLAG_IBURST | FLAG_PREEMPT, MDF_BCLNT,
1535                                0, skeyid, sys_ident);
1536                 if (NULL == peer) {
1537                         DPRINTF(2, ("receive: AM_NEWBCL drop: empty newpeer() failed\n"));
1538                         sys_restricted++;
1539                         return;                 /* ignore duplicate */
1540                 }
1541                 peer->bxmt = p_xmt;
1542 #ifdef AUTOKEY
1543                 if (skeyid > NTP_MAXKEY)
1544                         crypto_recv(peer, rbufp);
1545 #endif  /* AUTOKEY */
1546
1547                 return;                         /* hooray */
1548
1549         /*
1550          * This is the first packet received from a potential ephemeral
1551          * symmetric active peer.  First, deal with broken Windows clients.
1552          * Then, if NOEPEER is enabled, drop it.  If the packet meets our
1553          * authenticty requirements and is the first he sent, mobilize
1554          * a passive association.
1555          * Otherwise, kiss the frog.
1556          *
1557          * There are cases here where we do not call record_raw_stats().
1558          */
1559         case AM_NEWPASS:
1560
1561                 DEBUG_REQUIRE(MODE_ACTIVE == hismode);
1562
1563 #ifdef AUTOKEY
1564                 /*
1565                  * Do not respond if not the same group.
1566                  */
1567                 if (group_test(groupname, sys_ident)) {
1568                         DPRINTF(2, ("receive: AM_NEWPASS drop: Autokey group mismatch\n"));
1569                         sys_declined++;
1570                         return;
1571                 }
1572 #endif /* AUTOKEY */
1573                 if (!AUTH(sys_authenticate | (restrict_mask &
1574                           (RES_NOPEER | RES_DONTTRUST)), is_authentic)
1575                    ) {
1576                         /*
1577                          * If authenticated but cannot mobilize an
1578                          * association, send a symmetric passive
1579                          * response without mobilizing an association.
1580                          * This is for drat broken Windows clients. See
1581                          * Microsoft KB 875424 for preferred workaround.
1582                          */
1583                         if (AUTH(restrict_mask & RES_DONTTRUST,
1584                                  is_authentic)) {
1585                                 fast_xmit(rbufp, MODE_PASSIVE, skeyid,
1586                                     restrict_mask);
1587                                 return;                 /* hooray */
1588                         }
1589                         /* HMS: Why is this next set of lines a feature? */
1590                         if (is_authentic == AUTH_ERROR) {
1591                                 fast_xmit(rbufp, MODE_PASSIVE, 0,
1592                                     restrict_mask);
1593                                 sys_restricted++;
1594                                 return;
1595                         }
1596
1597                         if (restrict_mask & RES_NOEPEER) {
1598                                 DPRINTF(2, ("receive: AM_NEWPASS drop: NOEPEER\n"));
1599                                 sys_declined++;
1600                                 return;
1601                         }
1602
1603                         /* [Bug 2941]
1604                          * If we got here, the packet isn't part of an
1605                          * existing association, either isn't correctly
1606                          * authenticated or it is but we are refusing
1607                          * ephemeral peer requests, and it didn't meet
1608                          * either of the previous two special cases so we
1609                          * should just drop it on the floor.  For example,
1610                          * crypto-NAKs (is_authentic == AUTH_CRYPTO)
1611                          * will make it this far.  This is just
1612                          * debug-printed and not logged to avoid log
1613                          * flooding.
1614                          */
1615                         DPRINTF(2, ("receive: at %ld refusing to mobilize passive association"
1616                                     " with unknown peer %s mode %d/%s:%s keyid %08x len %d auth %d\n",
1617                                     current_time, stoa(&rbufp->recv_srcadr),
1618                                     hismode, hm_str, am_str, skeyid,
1619                                     (authlen + has_mac), is_authentic));
1620                         sys_declined++;
1621                         return;
1622                 }
1623
1624                 if (restrict_mask & RES_NOEPEER) {
1625                         DPRINTF(2, ("receive: AM_NEWPASS drop: NOEPEER\n"));
1626                         sys_declined++;
1627                         return;
1628                 }
1629
1630                 /*
1631                  * Do not respond if synchronized and if stratum is
1632                  * below the floor or at or above the ceiling. Note,
1633                  * this allows an unsynchronized peer to synchronize to
1634                  * us. It would be very strange if he did and then was
1635                  * nipped, but that could only happen if we were
1636                  * operating at the top end of the range.  It also means
1637                  * we will spin an ephemeral association in response to
1638                  * MODE_ACTIVE KoDs, which will time out eventually.
1639                  */
1640                 if (   hisleap != LEAP_NOTINSYNC
1641                     && (hisstratum < sys_floor || hisstratum >= sys_ceiling)) {
1642                         DPRINTF(2, ("receive: AM_NEWPASS drop: Autokey group mismatch\n"));
1643                         sys_declined++;
1644                         return;                 /* no help */
1645                 }
1646
1647                 /*
1648                  * The message is correctly authenticated and allowed.
1649                  * Mobilize a symmetric passive association, if we won't
1650                  * exceed the ippeerlimit.
1651                  */
1652                 if ((peer = newpeer(&rbufp->recv_srcadr, NULL, rbufp->dstadr,
1653                                     r4a.ippeerlimit, MODE_PASSIVE, hisversion,
1654                                     pkt->ppoll, NTP_MAXDPOLL, 0, MDF_UCAST, 0,
1655                                     skeyid, sys_ident)) == NULL) {
1656                         DPRINTF(2, ("receive: AM_NEWPASS drop: newpeer() failed\n"));
1657                         sys_declined++;
1658                         return;                 /* ignore duplicate */
1659                 }
1660                 break;
1661
1662
1663         /*
1664          * Process regular packet. Nothing special.
1665          *
1666          * There are cases here where we do not call record_raw_stats().
1667          */
1668         case AM_PROCPKT:
1669
1670 #ifdef AUTOKEY
1671                 /*
1672                  * Do not respond if not the same group.
1673                  */
1674                 if (group_test(groupname, peer->ident)) {
1675                         DPRINTF(2, ("receive: AM_PROCPKT drop: Autokey group mismatch\n"));
1676                         sys_declined++;
1677                         return;
1678                 }
1679 #endif /* AUTOKEY */
1680
1681                 if (MODE_BROADCAST == hismode) {
1682                         int     bail = 0;
1683                         l_fp    tdiff;
1684                         u_long  deadband;
1685
1686                         DPRINTF(2, ("receive: PROCPKT/BROADCAST: prev pkt %ld seconds ago, ppoll: %d, %d secs\n",
1687                                     (current_time - peer->timelastrec),
1688                                     peer->ppoll, (1 << peer->ppoll)
1689                                     ));
1690                         /* Things we can check:
1691                          *
1692                          * Did the poll interval change?
1693                          * Is the poll interval in the packet in-range?
1694                          * Did this packet arrive too soon?
1695                          * Is the timestamp in this packet monotonic
1696                          *  with respect to the previous packet?
1697                          */
1698
1699                         /* This is noteworthy, not error-worthy */
1700                         if (pkt->ppoll != peer->ppoll) {
1701                                 msyslog(LOG_INFO, "receive: broadcast poll from %s changed from %u to %u",
1702                                         stoa(&rbufp->recv_srcadr),
1703                                         peer->ppoll, pkt->ppoll);
1704                         }
1705
1706                         /* This is error-worthy */
1707                         if (   pkt->ppoll < peer->minpoll
1708                             || pkt->ppoll > peer->maxpoll) {
1709                                 msyslog(LOG_INFO, "receive: broadcast poll of %u from %s is out-of-range (%d to %d)!",
1710                                         pkt->ppoll, stoa(&rbufp->recv_srcadr),
1711                                         peer->minpoll, peer->maxpoll);
1712                                 ++bail;
1713                         }
1714
1715                         /* too early? worth an error, too!
1716                          *
1717                          * [Bug 3113] Ensure that at least one poll
1718                          * interval has elapsed since the last **clean**
1719                          * packet was received.  We limit the check to
1720                          * **clean** packets to prevent replayed packets
1721                          * and incorrectly authenticated packets, which
1722                          * we'll discard, from being used to create a
1723                          * denial of service condition.
1724                          */
1725                         deadband = (1u << pkt->ppoll);
1726                         if (FLAG_BC_VOL & peer->flags)
1727                                 deadband -= 3;  /* allow greater fuzz after volley */
1728                         if ((current_time - peer->timereceived) < deadband) {
1729                                 msyslog(LOG_INFO, "receive: broadcast packet from %s arrived after %lu, not %lu seconds!",
1730                                         stoa(&rbufp->recv_srcadr),
1731                                         (current_time - peer->timereceived),
1732                                         deadband);
1733                                 ++bail;
1734                         }
1735
1736                         /* Alert if time from the server is non-monotonic.
1737                          *
1738                          * [Bug 3114] is about Broadcast mode replay DoS.
1739                          *
1740                          * Broadcast mode *assumes* a trusted network.
1741                          * Even so, it's nice to be robust in the face
1742                          * of attacks.
1743                          *
1744                          * If we get an authenticated broadcast packet
1745                          * with an "earlier" timestamp, it means one of
1746                          * two things:
1747                          *
1748                          * - the broadcast server had a backward step.
1749                          *
1750                          * - somebody is trying a replay attack.
1751                          *
1752                          * deadband: By default, we assume the broadcast
1753                          * network is trustable, so we take our accepted
1754                          * broadcast packets as we receive them.  But
1755                          * some folks might want to take additional poll
1756                          * delays before believing a backward step.
1757                          */
1758                         if (sys_bcpollbstep) {
1759                                 /* pkt->ppoll or peer->ppoll ? */
1760                                 deadband = (1u << pkt->ppoll)
1761                                            * sys_bcpollbstep + 2;
1762                         } else {
1763                                 deadband = 0;
1764                         }
1765
1766                         if (L_ISZERO(&peer->bxmt)) {
1767                                 tdiff.l_ui = tdiff.l_uf = 0;
1768                         } else {
1769                                 tdiff = p_xmt;
1770                                 L_SUB(&tdiff, &peer->bxmt);
1771                         }
1772                         if (   tdiff.l_i < 0
1773                             && (current_time - peer->timereceived) < deadband)
1774                         {
1775                                 msyslog(LOG_INFO, "receive: broadcast packet from %s contains non-monotonic timestamp: %#010x.%08x -> %#010x.%08x",
1776                                         stoa(&rbufp->recv_srcadr),
1777                                         peer->bxmt.l_ui, peer->bxmt.l_uf,
1778                                         p_xmt.l_ui, p_xmt.l_uf
1779                                         );
1780                                 ++bail;
1781                         }
1782
1783                         if (bail) {
1784                                 DPRINTF(2, ("receive: AM_PROCPKT drop: bail\n"));
1785                                 peer->timelastrec = current_time;
1786                                 sys_declined++;
1787                                 return;
1788                         }
1789                 }
1790
1791                 break;
1792
1793         /*
1794          * A passive packet matches a passive association. This is
1795          * usually the result of reconfiguring a client on the fly. As
1796          * this association might be legitimate and this packet an
1797          * attempt to deny service, just ignore it.
1798          */
1799         case AM_ERR:
1800                 DPRINTF(2, ("receive: AM_ERR drop.\n"));
1801                 sys_declined++;
1802                 return;
1803
1804         /*
1805          * For everything else there is the bit bucket.
1806          */
1807         default:
1808                 DPRINTF(2, ("receive: default drop.\n"));
1809                 sys_declined++;
1810                 return;
1811         }
1812
1813 #ifdef AUTOKEY
1814         /*
1815          * If the association is configured for Autokey, the packet must
1816          * have a public key ID; if not, the packet must have a
1817          * symmetric key ID.
1818          */
1819         if (   is_authentic != AUTH_CRYPTO
1820             && (   ((peer->flags & FLAG_SKEY) && skeyid <= NTP_MAXKEY)
1821                 || (!(peer->flags & FLAG_SKEY) && skeyid > NTP_MAXKEY))) {
1822                 DPRINTF(2, ("receive: drop: Autokey but wrong/bad auth\n"));
1823                 sys_badauth++;
1824                 return;
1825         }
1826 #endif  /* AUTOKEY */
1827
1828         peer->received++;
1829         peer->flash &= ~PKT_TEST_MASK;
1830         if (peer->flags & FLAG_XBOGUS) {
1831                 peer->flags &= ~FLAG_XBOGUS;
1832                 peer->flash |= TEST3;
1833         }
1834
1835         /*
1836          * Next comes a rigorous schedule of timestamp checking. If the
1837          * transmit timestamp is zero, the server has not initialized in
1838          * interleaved modes or is horribly broken.
1839          *
1840          * A KoD packet we pay attention to cannot have a 0 transmit
1841          * timestamp.
1842          */
1843
1844         kissCode = kiss_code_check(hisleap, hisstratum, hismode, pkt->refid);
1845
1846         if (L_ISZERO(&p_xmt)) {
1847                 peer->flash |= TEST3;                   /* unsynch */
1848                 if (kissCode != NOKISS) {               /* KoD packet */
1849                         peer->bogusorg++;               /* for TEST2 or TEST3 */
1850                         msyslog(LOG_INFO,
1851                                 "receive: Unexpected zero transmit timestamp in KoD from %s",
1852                                 ntoa(&peer->srcadr));
1853                         return;
1854                 }
1855
1856         /*
1857          * If the transmit timestamp duplicates our previous one, the
1858          * packet is a replay. This prevents the bad guys from replaying
1859          * the most recent packet, authenticated or not.
1860          */
1861         } else if (L_ISEQU(&peer->xmt, &p_xmt)) {
1862                 DPRINTF(2, ("receive: drop: Duplicate xmit\n"));
1863                 peer->flash |= TEST1;                   /* duplicate */
1864                 peer->oldpkt++;
1865                 return;
1866
1867         /*
1868          * If this is a broadcast mode packet, make sure hisstratum
1869          * is appropriate.  Don't do anything else here - we wait to
1870          * see if this is an interleave broadcast packet until after
1871          * we've validated the MAC that SHOULD be provided.
1872          *
1873          * hisstratum cannot be 0 - see assertion above.
1874          * If hisstratum is 15, then we'll advertise as UNSPEC but
1875          * at least we'll be able to sync with the broadcast server.
1876          */
1877         } else if (hismode == MODE_BROADCAST) {
1878                 /* 0 is unexpected too, and impossible */
1879                 if (STRATUM_UNSPEC <= hisstratum) {
1880                         /* Is this a ++sys_declined or ??? */
1881                         msyslog(LOG_INFO,
1882                                 "receive: Unexpected stratum (%d) in broadcast from %s",
1883                                 hisstratum, ntoa(&peer->srcadr));
1884                         return;
1885                 }
1886
1887         /*
1888          * Basic KoD validation checking:
1889          *
1890          * KoD packets are a mixed-blessing.  Forged KoD packets
1891          * are DoS attacks.  There are rare situations where we might
1892          * get a valid KoD response, though.  Since KoD packets are
1893          * a special case that complicate the checks we do next, we
1894          * handle the basic KoD checks here.
1895          *
1896          * Note that we expect the incoming KoD packet to have its
1897          * (nonzero) org, rec, and xmt timestamps set to the xmt timestamp
1898          * that we have previously sent out.  Watch interleave mode.
1899          */
1900         } else if (kissCode != NOKISS) {
1901                 DEBUG_INSIST(!L_ISZERO(&p_xmt));
1902                 if (   L_ISZERO(&p_org)         /* We checked p_xmt above */
1903                     || L_ISZERO(&p_rec)) {
1904                         peer->bogusorg++;
1905                         msyslog(LOG_INFO,
1906                                 "receive: KoD packet from %s has a zero org or rec timestamp.  Ignoring.",
1907                                 ntoa(&peer->srcadr));
1908                         return;
1909                 }
1910
1911                 if (   !L_ISEQU(&p_xmt, &p_org)
1912                     || !L_ISEQU(&p_xmt, &p_rec)) {
1913                         peer->bogusorg++;
1914                         msyslog(LOG_INFO,
1915                                 "receive: KoD packet from %s has inconsistent xmt/org/rec timestamps.  Ignoring.",
1916                                 ntoa(&peer->srcadr));
1917                         return;
1918                 }
1919
1920                 /* Be conservative */
1921                 if (peer->flip == 0 && !L_ISEQU(&p_org, &peer->aorg)) {
1922                         peer->bogusorg++;
1923                         msyslog(LOG_INFO,
1924                                 "receive: flip 0 KoD origin timestamp %#010x.%08x from %s does not match %#010x.%08x - ignoring.",
1925                                 p_org.l_ui, p_org.l_uf,
1926                                 ntoa(&peer->srcadr),
1927                                 peer->aorg.l_ui, peer->aorg.l_uf);
1928                         return;
1929                 } else if (peer->flip == 1 && !L_ISEQU(&p_org, &peer->borg)) {
1930                         peer->bogusorg++;
1931                         msyslog(LOG_INFO,
1932                                 "receive: flip 1 KoD origin timestamp %#010x.%08x from %s does not match interleave %#010x.%08x - ignoring.",
1933                                 p_org.l_ui, p_org.l_uf,
1934                                 ntoa(&peer->srcadr),
1935                                 peer->borg.l_ui, peer->borg.l_uf);
1936                         return;
1937                 }
1938
1939         /*
1940          * Basic mode checks:
1941          *
1942          * If there is no origin timestamp, it's either an initial packet
1943          * or we've already received a response to our query.  Of course,
1944          * should 'aorg' be all-zero because this really was the original
1945          * transmit timestamp, we'll ignore this reply.  There is a window
1946          * of one nanosecond once every 136 years' time where this is
1947          * possible.  We currently ignore this situation, as a completely
1948          * zero timestamp is (quietly?) disallowed.
1949          *
1950          * Otherwise, check for bogus packet in basic mode.
1951          * If it is bogus, switch to interleaved mode and resynchronize,
1952          * but only after confirming the packet is not bogus in
1953          * symmetric interleaved mode.
1954          *
1955          * This could also mean somebody is forging packets claiming to
1956          * be from us, attempting to cause our server to KoD us.
1957          *
1958          * We have earlier asserted that hisstratum cannot be 0.
1959          * If hisstratum is STRATUM_UNSPEC, it means he's not sync'd.
1960          */
1961         } else if (peer->flip == 0) {
1962                 if (0) {
1963                 } else if (L_ISZERO(&p_org)) {
1964                         const char *action;
1965
1966 #ifdef BUG3361
1967                         msyslog(LOG_INFO,
1968                                 "receive: BUG 3361: Clearing peer->aorg ");
1969                         L_CLR(&peer->aorg);
1970 #endif
1971                         /**/
1972                         switch (hismode) {
1973                         /* We allow 0org for: */
1974                             case UCHAR_MAX:
1975                                 action = "Allow";
1976                                 break;
1977                         /* We disallow 0org for: */
1978                             case MODE_UNSPEC:
1979                             case MODE_ACTIVE:
1980                             case MODE_PASSIVE:
1981                             case MODE_CLIENT:
1982                             case MODE_SERVER:
1983                             case MODE_BROADCAST:
1984                                 action = "Drop";
1985                                 peer->bogusorg++;
1986                                 peer->flash |= TEST2;   /* bogus */
1987                                 break;
1988                             default:
1989                                 action = "";    /* for cranky compilers / MSVC */
1990                                 INSIST(!"receive(): impossible hismode");
1991                                 break;
1992                         }
1993                         /**/
1994                         msyslog(LOG_INFO,
1995                                 "receive: %s 0 origin timestamp from %s@%s xmt %#010x.%08x",
1996                                 action, hm_str, ntoa(&peer->srcadr),
1997                                 ntohl(pkt->xmt.l_ui), ntohl(pkt->xmt.l_uf));
1998                 } else if (!L_ISEQU(&p_org, &peer->aorg)) {
1999                         /* are there cases here where we should bail? */
2000                         /* Should we set TEST2 if we decide to try xleave? */
2001                         peer->bogusorg++;
2002                         peer->flash |= TEST2;   /* bogus */
2003                         msyslog(LOG_INFO,
2004                                 "receive: Unexpected origin timestamp %#010x.%08x does not match aorg %#010x.%08x from %s@%s xmt %#010x.%08x",
2005                                 ntohl(pkt->org.l_ui), ntohl(pkt->org.l_uf),
2006                                 peer->aorg.l_ui, peer->aorg.l_uf,
2007                                 hm_str, ntoa(&peer->srcadr),
2008                                 ntohl(pkt->xmt.l_ui), ntohl(pkt->xmt.l_uf));
2009                         if (  !L_ISZERO(&peer->dst)
2010                             && L_ISEQU(&p_org, &peer->dst)) {
2011                                 /* Might be the start of an interleave */
2012                                 if (dynamic_interleave) {
2013                                         peer->flip = 1;
2014                                         report_event(PEVNT_XLEAVE, peer, NULL);
2015                                 } else {
2016                                         msyslog(LOG_INFO,
2017                                                 "receive: Dynamic interleave from %s@%s denied",
2018                                                 hm_str, ntoa(&peer->srcadr));
2019                                 }
2020                         }
2021                 } else {
2022                         L_CLR(&peer->aorg);
2023                 }
2024
2025         /*
2026          * Check for valid nonzero timestamp fields.
2027          */
2028         } else if (   L_ISZERO(&p_org)
2029                    || L_ISZERO(&p_rec)
2030                    || L_ISZERO(&peer->dst)) {
2031                 peer->flash |= TEST3;           /* unsynch */
2032
2033         /*
2034          * Check for bogus packet in interleaved symmetric mode. This
2035          * can happen if a packet is lost, duplicated or crossed. If
2036          * found, flip and resynchronize.
2037          */
2038         } else if (   !L_ISZERO(&peer->dst)
2039                    && !L_ISEQU(&p_org, &peer->dst)) {
2040                 DPRINTF(2, ("receive: drop: Bogus packet in interleaved symmetric mode\n"));
2041                 peer->bogusorg++;
2042                 peer->flags |= FLAG_XBOGUS;
2043                 peer->flash |= TEST2;           /* bogus */
2044 #ifdef BUG3453
2045                 return; /* Bogus packet, we are done */
2046 #endif
2047         }
2048
2049         /**/
2050
2051         /*
2052          * If this is a crypto_NAK, the server cannot authenticate a
2053          * client packet. The server might have just changed keys. Clear
2054          * the association and restart the protocol.
2055          */
2056         if (crypto_nak_test == VALIDNAK) {
2057                 report_event(PEVNT_AUTH, peer, "crypto_NAK");
2058                 peer->flash |= TEST5;           /* bad auth */
2059                 peer->badauth++;
2060                 if (peer->flags & FLAG_PREEMPT) {
2061                         if (unpeer_crypto_nak_early) {
2062                                 unpeer(peer);
2063                         }
2064                         DPRINTF(2, ("receive: drop: PREEMPT crypto_NAK\n"));
2065                         return;
2066                 }
2067 #ifdef AUTOKEY
2068                 if (peer->crypto) {
2069                         peer_clear(peer, "AUTH");
2070                 }
2071 #endif  /* AUTOKEY */
2072                 DPRINTF(2, ("receive: drop: crypto_NAK\n"));
2073                 return;
2074
2075         /*
2076          * If the digest fails or it's missing for authenticated
2077          * associations, the client cannot authenticate a server
2078          * reply to a client packet previously sent. The loopback check
2079          * is designed to avoid a bait-and-switch attack, which was
2080          * possible in past versions. If symmetric modes, return a
2081          * crypto-NAK. The peer should restart the protocol.
2082          */
2083         } else if (!AUTH(peer->keyid || has_mac ||
2084                          (restrict_mask & RES_DONTTRUST), is_authentic)) {
2085
2086                 if (peer->flash & PKT_TEST_MASK) {
2087                         msyslog(LOG_INFO,
2088                                 "receive: Bad auth in packet with bad timestamps from %s denied - spoof?",
2089                                 ntoa(&peer->srcadr));
2090                         return;
2091                 }
2092
2093                 report_event(PEVNT_AUTH, peer, "digest");
2094                 peer->flash |= TEST5;           /* bad auth */
2095                 peer->badauth++;
2096                 if (   has_mac
2097                     && (   hismode == MODE_ACTIVE
2098                         || hismode == MODE_PASSIVE))
2099                         fast_xmit(rbufp, MODE_ACTIVE, 0, restrict_mask);
2100                 if (peer->flags & FLAG_PREEMPT) {
2101                         if (unpeer_digest_early) {
2102                                 unpeer(peer);
2103                         }
2104                 }
2105 #ifdef AUTOKEY
2106                 else if (peer_clear_digest_early && peer->crypto) {
2107                         peer_clear(peer, "AUTH");
2108                 }
2109 #endif  /* AUTOKEY */
2110                 DPRINTF(2, ("receive: drop: Bad or missing AUTH\n"));
2111                 return;
2112         }
2113
2114         /*
2115          * For broadcast packets:
2116          *
2117          * HMS: This next line never made much sense to me, even
2118          * when it was up higher:
2119          *   If an initial volley, bail out now and let the
2120          *   client do its stuff.
2121          *
2122          * If the packet has not failed authentication, then
2123          * - if the origin timestamp is nonzero this is an
2124          *   interleaved broadcast, so restart the protocol.
2125          * - else, this is not an interleaved broadcast packet.
2126          */
2127         if (hismode == MODE_BROADCAST) {
2128                 if (   is_authentic == AUTH_OK
2129                     || is_authentic == AUTH_NONE) {
2130                         if (!L_ISZERO(&p_org)) {
2131                                 if (!(peer->flags & FLAG_XB)) {
2132                                         msyslog(LOG_INFO,
2133                                                 "receive: Broadcast server at %s is in interleave mode",
2134                                                 ntoa(&peer->srcadr));
2135                                         peer->flags |= FLAG_XB;
2136                                         peer->aorg = p_xmt;
2137                                         peer->borg = rbufp->recv_time;
2138                                         report_event(PEVNT_XLEAVE, peer, NULL);
2139                                         return;
2140                                 }
2141                         } else if (peer->flags & FLAG_XB) {
2142                                 msyslog(LOG_INFO,
2143                                         "receive: Broadcast server at %s is no longer in interleave mode",
2144                                         ntoa(&peer->srcadr));
2145                                 peer->flags &= ~FLAG_XB;
2146                         }
2147                 } else {
2148                         msyslog(LOG_INFO,
2149                                 "receive: Bad broadcast auth (%d) from %s",
2150                                 is_authentic, ntoa(&peer->srcadr));
2151                 }
2152
2153                 /*
2154                  * Now that we know the packet is correctly authenticated,
2155                  * update peer->bxmt.
2156                  */
2157                 peer->bxmt = p_xmt;
2158         }
2159
2160
2161         /*
2162         ** Update the state variables.
2163         */
2164         if (peer->flip == 0) {
2165                 if (hismode != MODE_BROADCAST)
2166                         peer->rec = p_xmt;
2167                 peer->dst = rbufp->recv_time;
2168         }
2169         peer->xmt = p_xmt;
2170
2171         /*
2172          * Set the peer ppoll to the maximum of the packet ppoll and the
2173          * peer minpoll. If a kiss-o'-death, set the peer minpoll to
2174          * this maximum and advance the headway to give the sender some
2175          * headroom. Very intricate.
2176          */
2177
2178         /*
2179          * Check for any kiss codes. Note this is only used when a server
2180          * responds to a packet request.
2181          */
2182
2183         /*
2184          * Check to see if this is a RATE Kiss Code
2185          * Currently this kiss code will accept whatever poll
2186          * rate that the server sends
2187          */
2188         peer->ppoll = max(peer->minpoll, pkt->ppoll);
2189         if (kissCode == RATEKISS) {
2190                 peer->selbroken++;      /* Increment the KoD count */
2191                 report_event(PEVNT_RATE, peer, NULL);
2192                 if (pkt->ppoll > peer->minpoll)
2193                         peer->minpoll = peer->ppoll;
2194                 peer->burst = peer->retry = 0;
2195                 peer->throttle = (NTP_SHIFT + 1) * (1 << peer->minpoll);
2196                 poll_update(peer, pkt->ppoll);
2197                 return;                         /* kiss-o'-death */
2198         }
2199         if (kissCode != NOKISS) {
2200                 peer->selbroken++;      /* Increment the KoD count */
2201                 return;         /* Drop any other kiss code packets */
2202         }
2203
2204
2205         /*
2206          * XXX
2207          */
2208
2209
2210         /*
2211          * If:
2212          *      - this is a *cast (uni-, broad-, or m-) server packet
2213          *      - and it's symmetric-key authenticated
2214          * then see if the sender's IP is trusted for this keyid.
2215          * If it is, great - nothing special to do here.
2216          * Otherwise, we should report and bail.
2217          *
2218          * Autokey-authenticated packets are accepted.
2219          */
2220
2221         switch (hismode) {
2222             case MODE_SERVER:           /* server mode */
2223             case MODE_BROADCAST:        /* broadcast mode */
2224             case MODE_ACTIVE:           /* symmetric active mode */
2225             case MODE_PASSIVE:          /* symmetric passive mode */
2226                 if (   is_authentic == AUTH_OK
2227                     && skeyid
2228                     && skeyid <= NTP_MAXKEY
2229                     && !authistrustedip(skeyid, &peer->srcadr)) {
2230                         report_event(PEVNT_AUTH, peer, "authIP");
2231                         peer->badauth++;
2232                         return;
2233                 }
2234                 break;
2235
2236             case MODE_CLIENT:           /* client mode */
2237 #if 0           /* At this point, MODE_CONTROL is overloaded by MODE_BCLIENT */
2238             case MODE_CONTROL:          /* control mode */
2239 #endif
2240             case MODE_PRIVATE:          /* private mode */
2241             case MODE_BCLIENT:          /* broadcast client mode */
2242                 break;
2243
2244             case MODE_UNSPEC:           /* unspecified (old version) */
2245             default:
2246                 msyslog(LOG_INFO,
2247                         "receive: Unexpected mode (%d) in packet from %s",
2248                         hismode, ntoa(&peer->srcadr));
2249                 break;
2250         }
2251
2252
2253         /*
2254          * That was hard and I am sweaty, but the packet is squeaky
2255          * clean. Get on with real work.
2256          */
2257         peer->timereceived = current_time;
2258         peer->timelastrec = current_time;
2259         if (is_authentic == AUTH_OK)
2260                 peer->flags |= FLAG_AUTHENTIC;
2261         else
2262                 peer->flags &= ~FLAG_AUTHENTIC;
2263
2264 #ifdef AUTOKEY
2265         /*
2266          * More autokey dance. The rules of the cha-cha are as follows:
2267          *
2268          * 1. If there is no key or the key is not auto, do nothing.
2269          *
2270          * 2. If this packet is in response to the one just previously
2271          *    sent or from a broadcast server, do the extension fields.
2272          *    Otherwise, assume bogosity and bail out.
2273          *
2274          * 3. If an extension field contains a verified signature, it is
2275          *    self-authenticated and we sit the dance.
2276          *
2277          * 4. If this is a server reply, check only to see that the
2278          *    transmitted key ID matches the received key ID.
2279          *
2280          * 5. Check to see that one or more hashes of the current key ID
2281          *    matches the previous key ID or ultimate original key ID
2282          *    obtained from the broadcaster or symmetric peer. If no
2283          *    match, sit the dance and call for new autokey values.
2284          *
2285          * In case of crypto error, fire the orchestra, stop dancing and
2286          * restart the protocol.
2287          */
2288         if (peer->flags & FLAG_SKEY) {
2289                 /*
2290                  * Decrement remaining autokey hashes. This isn't
2291                  * perfect if a packet is lost, but results in no harm.
2292                  */
2293                 ap = (struct autokey *)peer->recval.ptr;
2294                 if (ap != NULL) {
2295                         if (ap->seq > 0)
2296                                 ap->seq--;
2297                 }
2298                 peer->flash |= TEST8;
2299                 rval = crypto_recv(peer, rbufp);
2300                 if (rval == XEVNT_OK) {
2301                         peer->unreach = 0;
2302                 } else {
2303                         if (rval == XEVNT_ERR) {
2304                                 report_event(PEVNT_RESTART, peer,
2305                                     "crypto error");
2306                                 peer_clear(peer, "CRYP");
2307                                 peer->flash |= TEST9;   /* bad crypt */
2308                                 if (peer->flags & FLAG_PREEMPT) {
2309                                         if (unpeer_crypto_early) {
2310                                                 unpeer(peer);
2311                                         }
2312                                 }
2313                         }
2314                         return;
2315                 }
2316
2317                 /*
2318                  * If server mode, verify the receive key ID matches
2319                  * the transmit key ID.
2320                  */
2321                 if (hismode == MODE_SERVER) {
2322                         if (skeyid == peer->keyid)
2323                                 peer->flash &= ~TEST8;
2324
2325                 /*
2326                  * If an extension field is present, verify only that it
2327                  * has been correctly signed. We don't need a sequence
2328                  * check here, but the sequence continues.
2329                  */
2330                 } else if (!(peer->flash & TEST8)) {
2331                         peer->pkeyid = skeyid;
2332
2333                 /*
2334                  * Now the fun part. Here, skeyid is the current ID in
2335                  * the packet, pkeyid is the ID in the last packet and
2336                  * tkeyid is the hash of skeyid. If the autokey values
2337                  * have not been received, this is an automatic error.
2338                  * If so, check that the tkeyid matches pkeyid. If not,
2339                  * hash tkeyid and try again. If the number of hashes
2340                  * exceeds the number remaining in the sequence, declare
2341                  * a successful failure and refresh the autokey values.
2342                  */
2343                 } else if (ap != NULL) {
2344                         int i;
2345
2346                         for (i = 0; ; i++) {
2347                                 if (   tkeyid == peer->pkeyid
2348                                     || tkeyid == ap->key) {
2349                                         peer->flash &= ~TEST8;
2350                                         peer->pkeyid = skeyid;
2351                                         ap->seq -= i;
2352                                         break;
2353                                 }
2354                                 if (i > ap->seq) {
2355                                         peer->crypto &=
2356                                             ~CRYPTO_FLAG_AUTO;
2357                                         break;
2358                                 }
2359                                 tkeyid = session_key(
2360                                     &rbufp->recv_srcadr, dstadr_sin,
2361                                     tkeyid, pkeyid, 0);
2362                         }
2363                         if (peer->flash & TEST8)
2364                                 report_event(PEVNT_AUTH, peer, "keylist");
2365                 }
2366                 if (!(peer->crypto & CRYPTO_FLAG_PROV)) /* test 9 */
2367                         peer->flash |= TEST8;   /* bad autokey */
2368
2369                 /*
2370                  * The maximum lifetime of the protocol is about one
2371                  * week before restarting the Autokey protocol to
2372                  * refresh certificates and leapseconds values.
2373                  */
2374                 if (current_time > peer->refresh) {
2375                         report_event(PEVNT_RESTART, peer,
2376                             "crypto refresh");
2377                         peer_clear(peer, "TIME");
2378                         return;
2379                 }
2380         }
2381 #endif  /* AUTOKEY */
2382
2383         /*
2384          * The dance is complete and the flash bits have been lit. Toss
2385          * the packet over the fence for processing, which may light up
2386          * more flashers.
2387          */
2388         process_packet(peer, pkt, rbufp->recv_length);
2389
2390         /*
2391          * In interleaved mode update the state variables. Also adjust the
2392          * transmit phase to avoid crossover.
2393          */
2394         if (peer->flip != 0) {
2395                 peer->rec = p_rec;
2396                 peer->dst = rbufp->recv_time;
2397                 if (peer->nextdate - current_time < (1U << min(peer->ppoll,
2398                     peer->hpoll)) / 2)
2399                         peer->nextdate++;
2400                 else
2401                         peer->nextdate--;
2402         }
2403 }
2404
2405
2406 /*
2407  * process_packet - Packet Procedure, a la Section 3.4.4 of RFC-1305
2408  *      Or almost, at least.  If we're in here we have a reasonable
2409  *      expectation that we will be having a long term
2410  *      relationship with this host.
2411  */
2412 void
2413 process_packet(
2414         register struct peer *peer,
2415         register struct pkt *pkt,
2416         u_int   len
2417         )
2418 {
2419         double  t34, t21;
2420         double  p_offset, p_del, p_disp;
2421         l_fp    p_rec, p_xmt, p_org, p_reftime, ci;
2422         u_char  pmode, pleap, pversion, pstratum;
2423         char    statstr[NTP_MAXSTRLEN];
2424 #ifdef ASSYM
2425         int     itemp;
2426         double  etemp, ftemp, td;
2427 #endif /* ASSYM */
2428
2429 #if 0
2430         sys_processed++;
2431         peer->processed++;
2432 #endif
2433         p_del = FPTOD(NTOHS_FP(pkt->rootdelay));
2434         p_offset = 0;
2435         p_disp = FPTOD(NTOHS_FP(pkt->rootdisp));
2436         NTOHL_FP(&pkt->reftime, &p_reftime);
2437         NTOHL_FP(&pkt->org, &p_org);
2438         NTOHL_FP(&pkt->rec, &p_rec);
2439         NTOHL_FP(&pkt->xmt, &p_xmt);
2440         pmode = PKT_MODE(pkt->li_vn_mode);
2441         pleap = PKT_LEAP(pkt->li_vn_mode);
2442         pversion = PKT_VERSION(pkt->li_vn_mode);
2443         pstratum = PKT_TO_STRATUM(pkt->stratum);
2444
2445         /**/
2446
2447         /**/
2448
2449         /*
2450          * Verify the server is synchronized; that is, the leap bits,
2451          * stratum and root distance are valid.
2452          */
2453         if (   pleap == LEAP_NOTINSYNC          /* test 6 */
2454             || pstratum < sys_floor || pstratum >= sys_ceiling)
2455                 peer->flash |= TEST6;           /* bad synch or strat */
2456         if (p_del / 2 + p_disp >= MAXDISPERSE)  /* test 7 */
2457                 peer->flash |= TEST7;           /* bad header */
2458
2459         /*
2460          * If any tests fail at this point, the packet is discarded.
2461          * Note that some flashers may have already been set in the
2462          * receive() routine.
2463          */
2464         if (peer->flash & PKT_TEST_MASK) {
2465                 peer->seldisptoolarge++;
2466                 DPRINTF(1, ("packet: flash header %04x\n",
2467                             peer->flash));
2468                 poll_update(peer, peer->hpoll); /* ppoll updated? */
2469                 return;
2470         }
2471
2472         /**/
2473
2474 #if 1
2475         sys_processed++;
2476         peer->processed++;
2477 #endif
2478
2479         /*
2480          * Capture the header values in the client/peer association..
2481          */
2482         record_raw_stats(&peer->srcadr,
2483             peer->dstadr ? &peer->dstadr->sin : NULL,
2484             &p_org, &p_rec, &p_xmt, &peer->dst,
2485             pleap, pversion, pmode, pstratum, pkt->ppoll, pkt->precision,
2486             p_del, p_disp, pkt->refid,
2487             len - MIN_V4_PKT_LEN, (u_char *)&pkt->exten);
2488         peer->leap = pleap;
2489         peer->stratum = min(pstratum, STRATUM_UNSPEC);
2490         peer->pmode = pmode;
2491         peer->precision = pkt->precision;
2492         peer->rootdelay = p_del;
2493         peer->rootdisp = p_disp;
2494         peer->refid = pkt->refid;               /* network byte order */
2495         peer->reftime = p_reftime;
2496
2497         /*
2498          * First, if either burst mode is armed, enable the burst.
2499          * Compute the headway for the next packet and delay if
2500          * necessary to avoid exceeding the threshold.
2501          */
2502         if (peer->retry > 0) {
2503                 peer->retry = 0;
2504                 if (peer->reach)
2505                         peer->burst = min(1 << (peer->hpoll -
2506                             peer->minpoll), NTP_SHIFT) - 1;
2507                 else
2508                         peer->burst = NTP_IBURST - 1;
2509                 if (peer->burst > 0)
2510                         peer->nextdate = current_time;
2511         }
2512         poll_update(peer, peer->hpoll);
2513
2514         /**/
2515
2516         /*
2517          * If the peer was previously unreachable, raise a trap. In any
2518          * case, mark it reachable.
2519          */
2520         if (!peer->reach) {
2521                 report_event(PEVNT_REACH, peer, NULL);
2522                 peer->timereachable = current_time;
2523         }
2524         peer->reach |= 1;
2525
2526         /*
2527          * For a client/server association, calculate the clock offset,
2528          * roundtrip delay and dispersion. The equations are reordered
2529          * from the spec for more efficient use of temporaries. For a
2530          * broadcast association, offset the last measurement by the
2531          * computed delay during the client/server volley. Note the
2532          * computation of dispersion includes the system precision plus
2533          * that due to the frequency error since the origin time.
2534          *
2535          * It is very important to respect the hazards of overflow. The
2536          * only permitted operation on raw timestamps is subtraction,
2537          * where the result is a signed quantity spanning from 68 years
2538          * in the past to 68 years in the future. To avoid loss of
2539          * precision, these calculations are done using 64-bit integer
2540          * arithmetic. However, the offset and delay calculations are
2541          * sums and differences of these first-order differences, which
2542          * if done using 64-bit integer arithmetic, would be valid over
2543          * only half that span. Since the typical first-order
2544          * differences are usually very small, they are converted to 64-
2545          * bit doubles and all remaining calculations done in floating-
2546          * double arithmetic. This preserves the accuracy while
2547          * retaining the 68-year span.
2548          *
2549          * There are three interleaving schemes, basic, interleaved
2550          * symmetric and interleaved broadcast. The timestamps are
2551          * idioscyncratically different. See the onwire briefing/white
2552          * paper at www.eecis.udel.edu/~mills for details.
2553          *
2554          * Interleaved symmetric mode
2555          * t1 = peer->aorg/borg, t2 = peer->rec, t3 = p_xmt,
2556          * t4 = peer->dst
2557          */
2558         if (peer->flip != 0) {
2559                 ci = p_xmt;                             /* t3 - t4 */
2560                 L_SUB(&ci, &peer->dst);
2561                 LFPTOD(&ci, t34);
2562                 ci = p_rec;                             /* t2 - t1 */
2563                 if (peer->flip > 0)
2564                         L_SUB(&ci, &peer->borg);
2565                 else
2566                         L_SUB(&ci, &peer->aorg);
2567                 LFPTOD(&ci, t21);
2568                 p_del = t21 - t34;
2569                 p_offset = (t21 + t34) / 2.;
2570                 if (p_del < 0 || p_del > 1.) {
2571                         snprintf(statstr, sizeof(statstr),
2572                             "t21 %.6f t34 %.6f", t21, t34);
2573                         report_event(PEVNT_XERR, peer, statstr);
2574                         return;
2575                 }
2576
2577         /*
2578          * Broadcast modes
2579          */
2580         } else if (peer->pmode == MODE_BROADCAST) {
2581
2582                 /*
2583                  * Interleaved broadcast mode. Use interleaved timestamps.
2584                  * t1 = peer->borg, t2 = p_org, t3 = p_org, t4 = aorg
2585                  */
2586                 if (peer->flags & FLAG_XB) {
2587                         ci = p_org;                     /* delay */
2588                         L_SUB(&ci, &peer->aorg);
2589                         LFPTOD(&ci, t34);
2590                         ci = p_org;                     /* t2 - t1 */
2591                         L_SUB(&ci, &peer->borg);
2592                         LFPTOD(&ci, t21);
2593                         peer->aorg = p_xmt;
2594                         peer->borg = peer->dst;
2595                         if (t34 < 0 || t34 > 1.) {
2596                                 /* drop all if in the initial volley */
2597                                 if (FLAG_BC_VOL & peer->flags)
2598                                         goto bcc_init_volley_fail;
2599                                 snprintf(statstr, sizeof(statstr),
2600                                     "offset %.6f delay %.6f", t21, t34);
2601                                 report_event(PEVNT_XERR, peer, statstr);
2602                                 return;
2603                         }
2604                         p_offset = t21;
2605                         peer->xleave = t34;
2606
2607                 /*
2608                  * Basic broadcast - use direct timestamps.
2609                  * t3 = p_xmt, t4 = peer->dst
2610                  */
2611                 } else {
2612                         ci = p_xmt;             /* t3 - t4 */
2613                         L_SUB(&ci, &peer->dst);
2614                         LFPTOD(&ci, t34);
2615                         p_offset = t34;
2616                 }
2617
2618                 /*
2619                  * When calibration is complete and the clock is
2620                  * synchronized, the bias is calculated as the difference
2621                  * between the unicast timestamp and the broadcast
2622                  * timestamp. This works for both basic and interleaved
2623                  * modes.
2624                  * [Bug 3031] Don't keep this peer when the delay
2625                  * calculation gives reason to suspect clock steps.
2626                  * This is assumed for delays > 50ms.
2627                  */
2628                 if (FLAG_BC_VOL & peer->flags) {
2629                         peer->flags &= ~FLAG_BC_VOL;
2630                         peer->delay = fabs(peer->offset - p_offset) * 2;
2631                         DPRINTF(2, ("broadcast volley: initial delay=%.6f\n",
2632                                 peer->delay));
2633                         if (peer->delay > fabs(sys_bdelay)) {
2634                 bcc_init_volley_fail:
2635                                 DPRINTF(2, ("%s", "broadcast volley: initial delay exceeds limit\n"));
2636                                 unpeer(peer);
2637                                 return;
2638                         }
2639                 }
2640                 peer->nextdate = current_time + (1u << peer->ppoll) - 2u;
2641                 p_del = peer->delay;
2642                 p_offset += p_del / 2;
2643
2644
2645         /*
2646          * Basic mode, otherwise known as the old fashioned way.
2647          *
2648          * t1 = p_org, t2 = p_rec, t3 = p_xmt, t4 = peer->dst
2649          */
2650         } else {
2651                 ci = p_xmt;                             /* t3 - t4 */
2652                 L_SUB(&ci, &peer->dst);
2653                 LFPTOD(&ci, t34);
2654                 ci = p_rec;                             /* t2 - t1 */
2655                 L_SUB(&ci, &p_org);
2656                 LFPTOD(&ci, t21);
2657                 p_del = fabs(t21 - t34);
2658                 p_offset = (t21 + t34) / 2.;
2659         }
2660         p_del = max(p_del, LOGTOD(sys_precision));
2661         p_disp = LOGTOD(sys_precision) + LOGTOD(peer->precision) +
2662             clock_phi * p_del;
2663
2664 #if ASSYM
2665         /*
2666          * This code calculates the outbound and inbound data rates by
2667          * measuring the differences between timestamps at different
2668          * packet lengths. This is helpful in cases of large asymmetric
2669          * delays commonly experienced on deep space communication
2670          * links.
2671          */
2672         if (peer->t21_last > 0 && peer->t34_bytes > 0) {
2673                 itemp = peer->t21_bytes - peer->t21_last;
2674                 if (itemp > 25) {
2675                         etemp = t21 - peer->t21;
2676                         if (fabs(etemp) > 1e-6) {
2677                                 ftemp = itemp / etemp;
2678                                 if (ftemp > 1000.)
2679                                         peer->r21 = ftemp;
2680                         }
2681                 }
2682                 itemp = len - peer->t34_bytes;
2683                 if (itemp > 25) {
2684                         etemp = -t34 - peer->t34;
2685                         if (fabs(etemp) > 1e-6) {
2686                                 ftemp = itemp / etemp;
2687                                 if (ftemp > 1000.)
2688                                         peer->r34 = ftemp;
2689                         }
2690                 }
2691         }
2692
2693         /*
2694          * The following section compensates for different data rates on
2695          * the outbound (d21) and inbound (t34) directions. To do this,
2696          * it finds t such that r21 * t - r34 * (d - t) = 0, where d is
2697          * the roundtrip delay. Then it calculates the correction as a
2698          * fraction of d.
2699          */
2700         peer->t21 = t21;
2701         peer->t21_last = peer->t21_bytes;
2702         peer->t34 = -t34;
2703         peer->t34_bytes = len;
2704         DPRINTF(2, ("packet: t21 %.9lf %d t34 %.9lf %d\n", peer->t21,
2705                     peer->t21_bytes, peer->t34, peer->t34_bytes));
2706         if (peer->r21 > 0 && peer->r34 > 0 && p_del > 0) {
2707                 if (peer->pmode != MODE_BROADCAST)
2708                         td = (peer->r34 / (peer->r21 + peer->r34) -
2709                             .5) * p_del;
2710                 else
2711                         td = 0;
2712
2713                 /*
2714                  * Unfortunately, in many cases the errors are
2715                  * unacceptable, so for the present the rates are not
2716                  * used. In future, we might find conditions where the
2717                  * calculations are useful, so this should be considered
2718                  * a work in progress.
2719                  */
2720                 t21 -= td;
2721                 t34 -= td;
2722                 DPRINTF(2, ("packet: del %.6lf r21 %.1lf r34 %.1lf %.6lf\n",
2723                             p_del, peer->r21 / 1e3, peer->r34 / 1e3,
2724                             td));
2725         }
2726 #endif /* ASSYM */
2727
2728         /*
2729          * That was awesome. Now hand off to the clock filter.
2730          */
2731         clock_filter(peer, p_offset + peer->bias, p_del, p_disp);
2732
2733         /*
2734          * If we are in broadcast calibrate mode, return to broadcast
2735          * client mode when the client is fit and the autokey dance is
2736          * complete.
2737          */
2738         if (   (FLAG_BC_VOL & peer->flags)
2739             && MODE_CLIENT == peer->hmode
2740             && !(TEST11 & peer_unfit(peer))) {  /* distance exceeded */
2741 #ifdef AUTOKEY
2742                 if (peer->flags & FLAG_SKEY) {
2743                         if (!(~peer->crypto & CRYPTO_FLAG_ALL))
2744                                 peer->hmode = MODE_BCLIENT;
2745                 } else {
2746                         peer->hmode = MODE_BCLIENT;
2747                 }
2748 #else   /* !AUTOKEY follows */
2749                 peer->hmode = MODE_BCLIENT;
2750 #endif  /* !AUTOKEY */
2751         }
2752 }
2753
2754
2755 /*
2756  * clock_update - Called at system process update intervals.
2757  */
2758 static void
2759 clock_update(
2760         struct peer *peer       /* peer structure pointer */
2761         )
2762 {
2763         double  dtemp;
2764         l_fp    now;
2765 #ifdef HAVE_LIBSCF_H
2766         char    *fmri;
2767 #endif /* HAVE_LIBSCF_H */
2768
2769         /*
2770          * Update the system state variables. We do this very carefully,
2771          * as the poll interval might need to be clamped differently.
2772          */
2773         sys_peer = peer;
2774         sys_epoch = peer->epoch;
2775         if (sys_poll < peer->minpoll)
2776                 sys_poll = peer->minpoll;
2777         if (sys_poll > peer->maxpoll)
2778                 sys_poll = peer->maxpoll;
2779         poll_update(peer, sys_poll);
2780         sys_stratum = min(peer->stratum + 1, STRATUM_UNSPEC);
2781         if (   peer->stratum == STRATUM_REFCLOCK
2782             || peer->stratum == STRATUM_UNSPEC)
2783                 sys_refid = peer->refid;
2784         else
2785                 sys_refid = addr2refid(&peer->srcadr);
2786         /*
2787          * Root Dispersion (E) is defined (in RFC 5905) as:
2788          *
2789          * E = p.epsilon_r + p.epsilon + p.psi + PHI*(s.t - p.t) + |THETA|
2790          *
2791          * where:
2792          *  p.epsilon_r is the PollProc's root dispersion
2793          *  p.epsilon   is the PollProc's dispersion
2794          *  p.psi       is the PollProc's jitter
2795          *  THETA       is the combined offset
2796          *
2797          * NB: Think Hard about where these numbers come from and
2798          * what they mean.  When did peer->update happen?  Has anything
2799          * interesting happened since then?  What values are the most
2800          * defensible?  Why?
2801          *
2802          * DLM thinks this equation is probably the best of all worse choices.
2803          */
2804         dtemp   = peer->rootdisp
2805                 + peer->disp
2806                 + sys_jitter
2807                 + clock_phi * (current_time - peer->update)
2808                 + fabs(sys_offset);
2809
2810         if (dtemp > sys_mindisp)
2811                 sys_rootdisp = dtemp;
2812         else
2813                 sys_rootdisp = sys_mindisp;
2814         sys_rootdelay = peer->delay + peer->rootdelay;
2815         sys_reftime = peer->dst;
2816
2817         DPRINTF(1, ("clock_update: at %lu sample %lu associd %d\n",
2818                     current_time, peer->epoch, peer->associd));
2819
2820         /*
2821          * Comes now the moment of truth. Crank the clock discipline and
2822          * see what comes out.
2823          */
2824         switch (local_clock(peer, sys_offset)) {
2825
2826         /*
2827          * Clock exceeds panic threshold. Life as we know it ends.
2828          */
2829         case -1:
2830 #ifdef HAVE_LIBSCF_H
2831                 /*
2832                  * For Solaris enter the maintenance mode.
2833                  */
2834                 if ((fmri = getenv("SMF_FMRI")) != NULL) {
2835                         if (smf_maintain_instance(fmri, 0) < 0) {
2836                                 printf("smf_maintain_instance: %s\n",
2837                                     scf_strerror(scf_error()));
2838                                 exit(1);
2839                         }
2840                         /*
2841                          * Sleep until SMF kills us.
2842                          */
2843                         for (;;)
2844                                 pause();
2845                 }
2846 #endif /* HAVE_LIBSCF_H */
2847                 exit (-1);
2848                 /* not reached */
2849
2850         /*
2851          * Clock was stepped. Flush all time values of all peers.
2852          */
2853         case 2:
2854                 clear_all();
2855                 set_sys_leap(LEAP_NOTINSYNC);
2856                 sys_stratum = STRATUM_UNSPEC;
2857                 memcpy(&sys_refid, "STEP", 4);
2858                 sys_rootdelay = 0;
2859                 sys_rootdisp = 0;
2860                 L_CLR(&sys_reftime);
2861                 sys_jitter = LOGTOD(sys_precision);
2862                 leapsec_reset_frame();
2863                 break;
2864
2865         /*
2866          * Clock was slewed. Handle the leapsecond stuff.
2867          */
2868         case 1:
2869
2870                 /*
2871                  * If this is the first time the clock is set, reset the
2872                  * leap bits. If crypto, the timer will goose the setup
2873                  * process.
2874                  */
2875                 if (sys_leap == LEAP_NOTINSYNC) {
2876                         set_sys_leap(LEAP_NOWARNING);
2877 #ifdef AUTOKEY
2878                         if (crypto_flags)
2879                                 crypto_update();
2880 #endif  /* AUTOKEY */
2881                         /*
2882                          * If our parent process is waiting for the
2883                          * first clock sync, send them home satisfied.
2884                          */
2885 #ifdef HAVE_WORKING_FORK
2886                         if (waitsync_fd_to_close != -1) {
2887                                 close(waitsync_fd_to_close);
2888                                 waitsync_fd_to_close = -1;
2889                                 DPRINTF(1, ("notified parent --wait-sync is done\n"));
2890                         }
2891 #endif /* HAVE_WORKING_FORK */
2892
2893                 }
2894
2895                 /*
2896                  * If there is no leap second pending and the number of
2897                  * survivor leap bits is greater than half the number of
2898                  * survivors, try to schedule a leap for the end of the
2899                  * current month. (This only works if no leap second for
2900                  * that range is in the table, so doing this more than
2901                  * once is mostly harmless.)
2902                  */
2903                 if (leapsec == LSPROX_NOWARN) {
2904                         if (   leap_vote_ins > leap_vote_del
2905                             && leap_vote_ins > sys_survivors / 2) {
2906                                 get_systime(&now);
2907                                 leapsec_add_dyn(TRUE, now.l_ui, NULL);
2908                         }
2909                         if (   leap_vote_del > leap_vote_ins
2910                             && leap_vote_del > sys_survivors / 2) {
2911                                 get_systime(&now);
2912                                 leapsec_add_dyn(FALSE, now.l_ui, NULL);
2913                         }
2914                 }
2915                 break;
2916
2917         /*
2918          * Popcorn spike or step threshold exceeded. Pretend it never
2919          * happened.
2920          */
2921         default:
2922                 break;
2923         }
2924 }
2925
2926
2927 /*
2928  * poll_update - update peer poll interval
2929  */
2930 void
2931 poll_update(
2932         struct peer *peer,      /* peer structure pointer */
2933         u_char  mpoll
2934         )
2935 {
2936         u_long  next, utemp;
2937         u_char  hpoll;
2938
2939         /*
2940          * This routine figures out when the next poll should be sent.
2941          * That turns out to be wickedly complicated. One problem is
2942          * that sometimes the time for the next poll is in the past when
2943          * the poll interval is reduced. We watch out for races here
2944          * between the receive process and the poll process.
2945          *
2946          * Clamp the poll interval between minpoll and maxpoll.
2947          */
2948         hpoll = max(min(peer->maxpoll, mpoll), peer->minpoll);
2949
2950 #ifdef AUTOKEY
2951         /*
2952          * If during the crypto protocol the poll interval has changed,
2953          * the lifetimes in the key list are probably bogus. Purge the
2954          * the key list and regenerate it later.
2955          */
2956         if ((peer->flags & FLAG_SKEY) && hpoll != peer->hpoll)
2957                 key_expire(peer);
2958 #endif  /* AUTOKEY */
2959         peer->hpoll = hpoll;
2960
2961         /*
2962          * There are three variables important for poll scheduling, the
2963          * current time (current_time), next scheduled time (nextdate)
2964          * and the earliest time (utemp). The earliest time is 2 s
2965          * seconds, but could be more due to rate management. When
2966          * sending in a burst, use the earliest time. When not in a
2967          * burst but with a reply pending, send at the earliest time
2968          * unless the next scheduled time has not advanced. This can
2969          * only happen if multiple replies are pending in the same
2970          * response interval. Otherwise, send at the later of the next
2971          * scheduled time and the earliest time.
2972          *
2973          * Now we figure out if there is an override. If a burst is in
2974          * progress and we get called from the receive process, just
2975          * slink away. If called from the poll process, delay 1 s for a
2976          * reference clock, otherwise 2 s.
2977          */
2978         utemp = current_time + max(peer->throttle - (NTP_SHIFT - 1) *
2979             (1 << peer->minpoll), ntp_minpkt);
2980         if (peer->burst > 0) {
2981                 if (peer->nextdate > current_time)
2982                         return;
2983 #ifdef REFCLOCK
2984                 else if (peer->flags & FLAG_REFCLOCK)
2985                         peer->nextdate = current_time + RESP_DELAY;
2986 #endif /* REFCLOCK */
2987                 else
2988                         peer->nextdate = utemp;
2989
2990 #ifdef AUTOKEY
2991         /*
2992          * If a burst is not in progress and a crypto response message
2993          * is pending, delay 2 s, but only if this is a new interval.
2994          */
2995         } else if (peer->cmmd != NULL) {
2996                 if (peer->nextdate > current_time) {
2997                         if (peer->nextdate + ntp_minpkt != utemp)
2998                                 peer->nextdate = utemp;
2999                 } else {
3000                         peer->nextdate = utemp;
3001                 }
3002 #endif  /* AUTOKEY */
3003
3004         /*
3005          * The ordinary case. If a retry, use minpoll; if unreachable,
3006          * use host poll; otherwise, use the minimum of host and peer
3007          * polls; In other words, oversampling is okay but
3008          * understampling is evil. Use the maximum of this value and the
3009          * headway. If the average headway is greater than the headway
3010          * threshold, increase the headway by the minimum interval.
3011          */
3012         } else {
3013                 if (peer->retry > 0)
3014                         hpoll = peer->minpoll;
3015                 else
3016                         hpoll = min(peer->ppoll, peer->hpoll);
3017 #ifdef REFCLOCK
3018                 if (peer->flags & FLAG_REFCLOCK)
3019                         next = 1 << hpoll;
3020                 else
3021 #endif /* REFCLOCK */
3022                         next = ((0x1000UL | (ntp_random() & 0x0ff)) <<
3023                             hpoll) >> 12;
3024                 next += peer->outdate;
3025                 if (next > utemp)
3026                         peer->nextdate = next;
3027                 else
3028                         peer->nextdate = utemp;
3029                 if (peer->throttle > (1 << peer->minpoll))
3030                         peer->nextdate += ntp_minpkt;
3031         }
3032         DPRINTF(2, ("poll_update: at %lu %s poll %d burst %d retry %d head %d early %lu next %lu\n",
3033                     current_time, ntoa(&peer->srcadr), peer->hpoll,
3034                     peer->burst, peer->retry, peer->throttle,
3035                     utemp - current_time, peer->nextdate -
3036                     current_time));
3037 }
3038
3039
3040 /*
3041  * peer_clear - clear peer filter registers.  See Section 3.4.8 of the
3042  * spec.
3043  */
3044 void
3045 peer_clear(
3046         struct peer *peer,              /* peer structure */
3047         const char *ident               /* tally lights */
3048         )
3049 {
3050         u_char  u;
3051         l_fp    bxmt = peer->bxmt;      /* bcast clients retain this! */
3052
3053 #ifdef AUTOKEY
3054         /*
3055          * If cryptographic credentials have been acquired, toss them to
3056          * Valhalla. Note that autokeys are ephemeral, in that they are
3057          * tossed immediately upon use. Therefore, the keylist can be
3058          * purged anytime without needing to preserve random keys. Note
3059          * that, if the peer is purged, the cryptographic variables are
3060          * purged, too. This makes it much harder to sneak in some
3061          * unauthenticated data in the clock filter.
3062          */
3063         key_expire(peer);
3064         if (peer->iffval != NULL)
3065                 BN_free(peer->iffval);
3066         value_free(&peer->cookval);
3067         value_free(&peer->recval);
3068         value_free(&peer->encrypt);
3069         value_free(&peer->sndval);
3070         if (peer->cmmd != NULL)
3071                 free(peer->cmmd);
3072         if (peer->subject != NULL)
3073                 free(peer->subject);
3074         if (peer->issuer != NULL)
3075                 free(peer->issuer);
3076 #endif /* AUTOKEY */
3077
3078         /*
3079          * Clear all values, including the optional crypto values above.
3080          */
3081         memset(CLEAR_TO_ZERO(peer), 0, LEN_CLEAR_TO_ZERO(peer));
3082         peer->ppoll = peer->maxpoll;
3083         peer->hpoll = peer->minpoll;
3084         peer->disp = MAXDISPERSE;
3085         peer->flash = peer_unfit(peer);
3086         peer->jitter = LOGTOD(sys_precision);
3087
3088         /* Don't throw away our broadcast replay protection */
3089         if (peer->hmode == MODE_BCLIENT)
3090                 peer->bxmt = bxmt;
3091
3092         /*
3093          * If interleave mode, initialize the alternate origin switch.
3094          */
3095         if (peer->flags & FLAG_XLEAVE)
3096                 peer->flip = 1;
3097         for (u = 0; u < NTP_SHIFT; u++) {
3098                 peer->filter_order[u] = u;
3099                 peer->filter_disp[u] = MAXDISPERSE;
3100         }
3101 #ifdef REFCLOCK
3102         if (!(peer->flags & FLAG_REFCLOCK)) {
3103 #endif
3104                 peer->leap = LEAP_NOTINSYNC;
3105                 peer->stratum = STRATUM_UNSPEC;
3106                 memcpy(&peer->refid, ident, 4);
3107 #ifdef REFCLOCK
3108         } else {
3109                 /* Clear refclock sample filter */
3110                 peer->procptr->codeproc = 0;
3111                 peer->procptr->coderecv = 0;
3112         }
3113 #endif
3114
3115         /*
3116          * During initialization use the association count to spread out
3117          * the polls at one-second intervals. Passive associations'
3118          * first poll is delayed by the "discard minimum" to avoid rate
3119          * limiting. Other post-startup new or cleared associations
3120          * randomize the first poll over the minimum poll interval to
3121          * avoid implosion.
3122          */
3123         peer->nextdate = peer->update = peer->outdate = current_time;
3124         if (initializing) {
3125                 peer->nextdate += peer_associations;
3126         } else if (MODE_PASSIVE == peer->hmode) {
3127                 peer->nextdate += ntp_minpkt;
3128         } else {
3129                 peer->nextdate += ntp_random() % peer->minpoll;
3130         }
3131 #ifdef AUTOKEY
3132         peer->refresh = current_time + (1 << NTP_REFRESH);
3133 #endif  /* AUTOKEY */
3134         DPRINTF(1, ("peer_clear: at %ld next %ld associd %d refid %s\n",
3135                     current_time, peer->nextdate, peer->associd,
3136                     ident));
3137 }
3138
3139
3140 /*
3141  * clock_filter - add incoming clock sample to filter register and run
3142  *                the filter procedure to find the best sample.
3143  */
3144 void
3145 clock_filter(
3146         struct peer *peer,              /* peer structure pointer */
3147         double  sample_offset,          /* clock offset */
3148         double  sample_delay,           /* roundtrip delay */
3149         double  sample_disp             /* dispersion */
3150         )
3151 {
3152         double  dst[NTP_SHIFT];         /* distance vector */
3153         int     ord[NTP_SHIFT];         /* index vector */
3154         int     i, j, k, m;
3155         double  dtemp, etemp;
3156         char    tbuf[80];
3157
3158         /*
3159          * A sample consists of the offset, delay, dispersion and epoch
3160          * of arrival. The offset and delay are determined by the on-
3161          * wire protocol. The dispersion grows from the last outbound
3162          * packet to the arrival of this one increased by the sum of the
3163          * peer precision and the system precision as required by the
3164          * error budget. First, shift the new arrival into the shift
3165          * register discarding the oldest one.
3166          */
3167         j = peer->filter_nextpt;
3168         peer->filter_offset[j] = sample_offset;
3169         peer->filter_delay[j] = sample_delay;
3170         peer->filter_disp[j] = sample_disp;
3171         peer->filter_epoch[j] = current_time;
3172         j = (j + 1) % NTP_SHIFT;
3173         peer->filter_nextpt = j;
3174
3175         /*
3176          * Update dispersions since the last update and at the same
3177          * time initialize the distance and index lists. Since samples
3178          * become increasingly uncorrelated beyond the Allan intercept,
3179          * only under exceptional cases will an older sample be used.
3180          * Therefore, the distance list uses a compound metric. If the
3181          * dispersion is greater than the maximum dispersion, clamp the
3182          * distance at that value. If the time since the last update is
3183          * less than the Allan intercept use the delay; otherwise, use
3184          * the sum of the delay and dispersion.
3185          */
3186         dtemp = clock_phi * (current_time - peer->update);
3187         peer->update = current_time;
3188         for (i = NTP_SHIFT - 1; i >= 0; i--) {
3189                 if (i != 0)
3190                         peer->filter_disp[j] += dtemp;
3191                 if (peer->filter_disp[j] >= MAXDISPERSE) {
3192                         peer->filter_disp[j] = MAXDISPERSE;
3193                         dst[i] = MAXDISPERSE;
3194                 } else if (peer->update - peer->filter_epoch[j] >
3195                     (u_long)ULOGTOD(allan_xpt)) {
3196                         dst[i] = peer->filter_delay[j] +
3197                             peer->filter_disp[j];
3198                 } else {
3199                         dst[i] = peer->filter_delay[j];
3200                 }
3201                 ord[i] = j;
3202                 j = (j + 1) % NTP_SHIFT;
3203         }
3204
3205         /*
3206          * If the clock has stabilized, sort the samples by distance.
3207          */
3208         if (freq_cnt == 0) {
3209                 for (i = 1; i < NTP_SHIFT; i++) {
3210                         for (j = 0; j < i; j++) {
3211                                 if (dst[j] > dst[i]) {
3212                                         k = ord[j];
3213                                         ord[j] = ord[i];
3214                                         ord[i] = k;
3215                                         etemp = dst[j];
3216                                         dst[j] = dst[i];
3217                                         dst[i] = etemp;
3218                                 }
3219                         }
3220                 }
3221         }
3222
3223         /*
3224          * Copy the index list to the association structure so ntpq
3225          * can see it later. Prune the distance list to leave only
3226          * samples less than the maximum dispersion, which disfavors
3227          * uncorrelated samples older than the Allan intercept. To
3228          * further improve the jitter estimate, of the remainder leave
3229          * only samples less than the maximum distance, but keep at
3230          * least two samples for jitter calculation.
3231          */
3232         m = 0;
3233         for (i = 0; i < NTP_SHIFT; i++) {
3234                 peer->filter_order[i] = (u_char) ord[i];
3235                 if (   dst[i] >= MAXDISPERSE
3236                     || (m >= 2 && dst[i] >= sys_maxdist))
3237                         continue;
3238                 m++;
3239         }
3240
3241         /*
3242          * Compute the dispersion and jitter. The dispersion is weighted
3243          * exponentially by NTP_FWEIGHT (0.5) so it is normalized close
3244          * to 1.0. The jitter is the RMS differences relative to the
3245          * lowest delay sample.
3246          */
3247         peer->disp = peer->jitter = 0;
3248         k = ord[0];
3249         for (i = NTP_SHIFT - 1; i >= 0; i--) {
3250                 j = ord[i];
3251                 peer->disp = NTP_FWEIGHT * (peer->disp +
3252                     peer->filter_disp[j]);
3253                 if (i < m)
3254                         peer->jitter += DIFF(peer->filter_offset[j],
3255                             peer->filter_offset[k]);
3256         }
3257
3258         /*
3259          * If no acceptable samples remain in the shift register,
3260          * quietly tiptoe home leaving only the dispersion. Otherwise,
3261          * save the offset, delay and jitter. Note the jitter must not
3262          * be less than the precision.
3263          */
3264         if (m == 0) {
3265                 clock_select();
3266                 return;
3267         }
3268         etemp = fabs(peer->offset - peer->filter_offset[k]);
3269         peer->offset = peer->filter_offset[k];
3270         peer->delay = peer->filter_delay[k];
3271         if (m > 1)
3272                 peer->jitter /= m - 1;
3273         peer->jitter = max(SQRT(peer->jitter), LOGTOD(sys_precision));
3274
3275         /*
3276          * If the the new sample and the current sample are both valid
3277          * and the difference between their offsets exceeds CLOCK_SGATE
3278          * (3) times the jitter and the interval between them is less
3279          * than twice the host poll interval, consider the new sample
3280          * a popcorn spike and ignore it.
3281          */
3282         if (   peer->disp < sys_maxdist
3283             && peer->filter_disp[k] < sys_maxdist
3284             && etemp > CLOCK_SGATE * peer->jitter
3285             && peer->filter_epoch[k] - peer->epoch
3286                < 2. * ULOGTOD(peer->hpoll)) {
3287                 snprintf(tbuf, sizeof(tbuf), "%.6f s", etemp);
3288                 report_event(PEVNT_POPCORN, peer, tbuf);
3289                 return;
3290         }
3291
3292         /*
3293          * A new minimum sample is useful only if it is later than the
3294          * last one used. In this design the maximum lifetime of any
3295          * sample is not greater than eight times the poll interval, so
3296          * the maximum interval between minimum samples is eight
3297          * packets.
3298          */
3299         if (peer->filter_epoch[k] <= peer->epoch) {
3300         DPRINTF(2, ("clock_filter: old sample %lu\n", current_time -
3301                     peer->filter_epoch[k]));
3302                 return;
3303         }
3304         peer->epoch = peer->filter_epoch[k];
3305
3306         /*
3307          * The mitigated sample statistics are saved for later
3308          * processing. If not synchronized or not in a burst, tickle the
3309          * clock select algorithm.
3310          */
3311         record_peer_stats(&peer->srcadr, ctlpeerstatus(peer),
3312             peer->offset, peer->delay, peer->disp, peer->jitter);
3313         DPRINTF(1, ("clock_filter: n %d off %.6f del %.6f dsp %.6f jit %.6f\n",
3314                     m, peer->offset, peer->delay, peer->disp,
3315                     peer->jitter));
3316         if (peer->burst == 0 || sys_leap == LEAP_NOTINSYNC)
3317                 clock_select();
3318 }
3319
3320
3321 /*
3322  * clock_select - find the pick-of-the-litter clock
3323  *
3324  * LOCKCLOCK: (1) If the local clock is the prefer peer, it will always
3325  * be enabled, even if declared falseticker, (2) only the prefer peer
3326  * can be selected as the system peer, (3) if the external source is
3327  * down, the system leap bits are set to 11 and the stratum set to
3328  * infinity.
3329  */
3330 void
3331 clock_select(void)
3332 {
3333         struct peer *peer;
3334         int     i, j, k, n;
3335         int     nlist, nl2;
3336         int     allow;
3337         int     speer;
3338         double  d, e, f, g;
3339         double  high, low;
3340         double  speermet;
3341         double  orphmet = 2.0 * U_INT32_MAX; /* 2x is greater than */
3342         struct endpoint endp;
3343         struct peer *osys_peer;
3344         struct peer *sys_prefer = NULL; /* prefer peer */
3345         struct peer *typesystem = NULL;
3346         struct peer *typeorphan = NULL;
3347 #ifdef REFCLOCK
3348         struct peer *typeacts = NULL;
3349         struct peer *typelocal = NULL;
3350         struct peer *typepps = NULL;
3351 #endif /* REFCLOCK */
3352         static struct endpoint *endpoint = NULL;
3353         static int *indx = NULL;
3354         static peer_select *peers = NULL;
3355         static u_int endpoint_size = 0;
3356         static u_int peers_size = 0;
3357         static u_int indx_size = 0;
3358         size_t octets;
3359
3360         /*
3361          * Initialize and create endpoint, index and peer lists big
3362          * enough to handle all associations.
3363          */
3364         osys_peer = sys_peer;
3365         sys_survivors = 0;
3366 #ifdef LOCKCLOCK
3367         set_sys_leap(LEAP_NOTINSYNC);
3368         sys_stratum = STRATUM_UNSPEC;
3369         memcpy(&sys_refid, "DOWN", 4);
3370 #endif /* LOCKCLOCK */
3371
3372         /*
3373          * Allocate dynamic space depending on the number of
3374          * associations.
3375          */
3376         nlist = 1;
3377         for (peer = peer_list; peer != NULL; peer = peer->p_link)
3378                 nlist++;
3379         endpoint_size = ALIGNED_SIZE(nlist * 2 * sizeof(*endpoint));
3380         peers_size = ALIGNED_SIZE(nlist * sizeof(*peers));
3381         indx_size = ALIGNED_SIZE(nlist * 2 * sizeof(*indx));
3382         octets = endpoint_size + peers_size + indx_size;
3383         endpoint = erealloc(endpoint, octets);
3384         peers = INC_ALIGNED_PTR(endpoint, endpoint_size);
3385         indx = INC_ALIGNED_PTR(peers, peers_size);
3386
3387         /*
3388          * Initially, we populate the island with all the rifraff peers
3389          * that happen to be lying around. Those with seriously
3390          * defective clocks are immediately booted off the island. Then,
3391          * the falsetickers are culled and put to sea. The truechimers
3392          * remaining are subject to repeated rounds where the most
3393          * unpopular at each round is kicked off. When the population
3394          * has dwindled to sys_minclock, the survivors split a million
3395          * bucks and collectively crank the chimes.
3396          */
3397         nlist = nl2 = 0;        /* none yet */
3398         for (peer = peer_list; peer != NULL; peer = peer->p_link) {
3399                 peer->new_status = CTL_PST_SEL_REJECT;
3400
3401                 /*
3402                  * Leave the island immediately if the peer is
3403                  * unfit to synchronize.
3404                  */
3405                 if (peer_unfit(peer)) {
3406                         continue;
3407                 }
3408
3409                 /*
3410                  * If this peer is an orphan parent, elect the
3411                  * one with the lowest metric defined as the
3412                  * IPv4 address or the first 64 bits of the
3413                  * hashed IPv6 address.  To ensure convergence
3414                  * on the same selected orphan, consider as
3415                  * well that this system may have the lowest
3416                  * metric and be the orphan parent.  If this
3417                  * system wins, sys_peer will be NULL to trigger
3418                  * orphan mode in timer().
3419                  */
3420                 if (peer->stratum == sys_orphan) {
3421                         u_int32 localmet;
3422                         u_int32 peermet;
3423
3424                         if (peer->dstadr != NULL)
3425                                 localmet = ntohl(peer->dstadr->addr_refid);
3426                         else
3427                                 localmet = U_INT32_MAX;
3428                         peermet = ntohl(addr2refid(&peer->srcadr));
3429                         if (peermet < localmet && peermet < orphmet) {
3430                                 typeorphan = peer;
3431                                 orphmet = peermet;
3432                         }
3433                         continue;
3434                 }
3435
3436                 /*
3437                  * If this peer could have the orphan parent
3438                  * as a synchronization ancestor, exclude it
3439                  * from selection to avoid forming a
3440                  * synchronization loop within the orphan mesh,
3441                  * triggering stratum climb to infinity
3442                  * instability.  Peers at stratum higher than
3443                  * the orphan stratum could have the orphan
3444                  * parent in ancestry so are excluded.
3445                  * See http://bugs.ntp.org/2050
3446                  */
3447                 if (peer->stratum > sys_orphan) {
3448                         continue;
3449                 }
3450 #ifdef REFCLOCK
3451                 /*
3452                  * The following are special cases. We deal
3453                  * with them later.
3454                  */
3455                 if (!(peer->flags & FLAG_PREFER)) {
3456                         switch (peer->refclktype) {
3457                         case REFCLK_LOCALCLOCK:
3458                                 if (   current_time > orphwait
3459                                     && typelocal == NULL)
3460                                         typelocal = peer;
3461                                 continue;
3462
3463                         case REFCLK_ACTS:
3464                                 if (   current_time > orphwait
3465                                     && typeacts == NULL)
3466                                         typeacts = peer;
3467                                 continue;
3468                         }
3469                 }
3470 #endif /* REFCLOCK */
3471
3472                 /*
3473                  * If we get this far, the peer can stay on the
3474                  * island, but does not yet have the immunity
3475                  * idol.
3476                  */
3477                 peer->new_status = CTL_PST_SEL_SANE;
3478                 f = root_distance(peer);
3479                 peers[nlist].peer = peer;
3480                 peers[nlist].error = peer->jitter;
3481                 peers[nlist].synch = f;
3482                 nlist++;
3483
3484                 /*
3485                  * Insert each interval endpoint on the unsorted
3486                  * endpoint[] list.
3487                  */
3488                 e = peer->offset;
3489                 endpoint[nl2].type = -1;        /* lower end */
3490                 endpoint[nl2].val = e - f;
3491                 nl2++;
3492                 endpoint[nl2].type = 1;         /* upper end */
3493                 endpoint[nl2].val = e + f;
3494                 nl2++;
3495         }
3496         /*
3497          * Construct sorted indx[] of endpoint[] indexes ordered by
3498          * offset.
3499          */
3500         for (i = 0; i < nl2; i++)
3501                 indx[i] = i;
3502         for (i = 0; i < nl2; i++) {
3503                 endp = endpoint[indx[i]];
3504                 e = endp.val;
3505                 k = i;
3506                 for (j = i + 1; j < nl2; j++) {
3507                         endp = endpoint[indx[j]];
3508                         if (endp.val < e) {
3509                                 e = endp.val;
3510                                 k = j;
3511                         }
3512                 }
3513                 if (k != i) {
3514                         j = indx[k];
3515                         indx[k] = indx[i];
3516                         indx[i] = j;
3517                 }
3518         }
3519         for (i = 0; i < nl2; i++)
3520                 DPRINTF(3, ("select: endpoint %2d %.6f\n",
3521                         endpoint[indx[i]].type, endpoint[indx[i]].val));
3522
3523         /*
3524          * This is the actual algorithm that cleaves the truechimers
3525          * from the falsetickers. The original algorithm was described
3526          * in Keith Marzullo's dissertation, but has been modified for
3527          * better accuracy.
3528          *
3529          * Briefly put, we first assume there are no falsetickers, then
3530          * scan the candidate list first from the low end upwards and
3531          * then from the high end downwards. The scans stop when the
3532          * number of intersections equals the number of candidates less
3533          * the number of falsetickers. If this doesn't happen for a
3534          * given number of falsetickers, we bump the number of
3535          * falsetickers and try again. If the number of falsetickers
3536          * becomes equal to or greater than half the number of
3537          * candidates, the Albanians have won the Byzantine wars and
3538          * correct synchronization is not possible.
3539          *
3540          * Here, nlist is the number of candidates and allow is the
3541          * number of falsetickers. Upon exit, the truechimers are the
3542          * survivors with offsets not less than low and not greater than
3543          * high. There may be none of them.
3544          */
3545         low = 1e9;
3546         high = -1e9;
3547         for (allow = 0; 2 * allow < nlist; allow++) {
3548
3549                 /*
3550                  * Bound the interval (low, high) as the smallest
3551                  * interval containing points from the most sources.
3552                  */
3553                 n = 0;
3554                 for (i = 0; i < nl2; i++) {
3555                         low = endpoint[indx[i]].val;
3556                         n -= endpoint[indx[i]].type;
3557                         if (n >= nlist - allow)
3558                                 break;
3559                 }
3560                 n = 0;
3561                 for (j = nl2 - 1; j >= 0; j--) {
3562                         high = endpoint[indx[j]].val;
3563                         n += endpoint[indx[j]].type;
3564                         if (n >= nlist - allow)
3565                                 break;
3566                 }
3567
3568                 /*
3569                  * If an interval containing truechimers is found, stop.
3570                  * If not, increase the number of falsetickers and go
3571                  * around again.
3572                  */
3573                 if (high > low)
3574                         break;
3575         }
3576
3577         /*
3578          * Clustering algorithm. Whittle candidate list of falsetickers,
3579          * who leave the island immediately. The TRUE peer is always a
3580          * truechimer. We must leave at least one peer to collect the
3581          * million bucks.
3582          *
3583          * We assert the correct time is contained in the interval, but
3584          * the best offset estimate for the interval might not be
3585          * contained in the interval. For this purpose, a truechimer is
3586          * defined as the midpoint of an interval that overlaps the
3587          * intersection interval.
3588          */
3589         j = 0;
3590         for (i = 0; i < nlist; i++) {
3591                 double  h;
3592
3593                 peer = peers[i].peer;
3594                 h = peers[i].synch;
3595                 if ((   high <= low
3596                      || peer->offset + h < low
3597                      || peer->offset - h > high
3598                     ) && !(peer->flags & FLAG_TRUE))
3599                         continue;
3600
3601 #ifdef REFCLOCK
3602                 /*
3603                  * Eligible PPS peers must survive the intersection
3604                  * algorithm. Use the first one found, but don't
3605                  * include any of them in the cluster population.
3606                  */
3607                 if (peer->flags & FLAG_PPS) {
3608                         if (typepps == NULL)
3609                                 typepps = peer;
3610                         if (!(peer->flags & FLAG_TSTAMP_PPS))
3611                                 continue;
3612                 }
3613 #endif /* REFCLOCK */
3614
3615                 if (j != i)
3616                         peers[j] = peers[i];
3617                 j++;
3618         }
3619         nlist = j;
3620
3621         /*
3622          * If no survivors remain at this point, check if the modem
3623          * driver, local driver or orphan parent in that order. If so,
3624          * nominate the first one found as the only survivor.
3625          * Otherwise, give up and leave the island to the rats.
3626          */
3627         if (nlist == 0) {
3628                 peers[0].error = 0;
3629                 peers[0].synch = sys_mindisp;
3630 #ifdef REFCLOCK
3631                 if (typeacts != NULL) {
3632                         peers[0].peer = typeacts;
3633                         nlist = 1;
3634                 } else if (typelocal != NULL) {
3635                         peers[0].peer = typelocal;
3636                         nlist = 1;
3637                 } else
3638 #endif /* REFCLOCK */
3639                 if (typeorphan != NULL) {
3640                         peers[0].peer = typeorphan;
3641                         nlist = 1;
3642                 }
3643         }
3644
3645         /*
3646          * Mark the candidates at this point as truechimers.
3647          */
3648         for (i = 0; i < nlist; i++) {
3649                 peers[i].peer->new_status = CTL_PST_SEL_SELCAND;
3650                 DPRINTF(2, ("select: survivor %s %f\n",
3651                         stoa(&peers[i].peer->srcadr), peers[i].synch));
3652         }
3653
3654         /*
3655          * Now, vote outliers off the island by select jitter weighted
3656          * by root distance. Continue voting as long as there are more
3657          * than sys_minclock survivors and the select jitter of the peer
3658          * with the worst metric is greater than the minimum peer
3659          * jitter. Stop if we are about to discard a TRUE or PREFER
3660          * peer, who of course have the immunity idol.
3661          */
3662         while (1) {
3663                 d = 1e9;
3664                 e = -1e9;
3665                 g = 0;
3666                 k = 0;
3667                 for (i = 0; i < nlist; i++) {
3668                         if (peers[i].error < d)
3669                                 d = peers[i].error;
3670                         peers[i].seljit = 0;
3671                         if (nlist > 1) {
3672                                 f = 0;
3673                                 for (j = 0; j < nlist; j++)
3674                                         f += DIFF(peers[j].peer->offset,
3675                                             peers[i].peer->offset);
3676                                 peers[i].seljit = SQRT(f / (nlist - 1));
3677                         }
3678                         if (peers[i].seljit * peers[i].synch > e) {
3679                                 g = peers[i].seljit;
3680                                 e = peers[i].seljit * peers[i].synch;
3681                                 k = i;
3682                         }
3683                 }
3684                 g = max(g, LOGTOD(sys_precision));
3685                 if (   nlist <= max(1, sys_minclock)
3686                     || g <= d
3687                     || ((FLAG_TRUE | FLAG_PREFER) & peers[k].peer->flags))
3688                         break;
3689
3690                 DPRINTF(3, ("select: drop %s seljit %.6f jit %.6f\n",
3691                         ntoa(&peers[k].peer->srcadr), g, d));
3692                 if (nlist > sys_maxclock)
3693                         peers[k].peer->new_status = CTL_PST_SEL_EXCESS;
3694                 for (j = k + 1; j < nlist; j++)
3695                         peers[j - 1] = peers[j];
3696                 nlist--;
3697         }
3698
3699         /*
3700          * What remains is a list usually not greater than sys_minclock
3701          * peers. Note that unsynchronized peers cannot survive this
3702          * far.  Count and mark these survivors.
3703          *
3704          * While at it, count the number of leap warning bits found.
3705          * This will be used later to vote the system leap warning bit.
3706          * If a leap warning bit is found on a reference clock, the vote
3707          * is always won.
3708          *
3709          * Choose the system peer using a hybrid metric composed of the
3710          * selection jitter scaled by the root distance augmented by
3711          * stratum scaled by sys_mindisp (.001 by default). The goal of
3712          * the small stratum factor is to avoid clockhop between a
3713          * reference clock and a network peer which has a refclock and
3714          * is using an older ntpd, which does not floor sys_rootdisp at
3715          * sys_mindisp.
3716          *
3717          * In contrast, ntpd 4.2.6 and earlier used stratum primarily
3718          * in selecting the system peer, using a weight of 1 second of
3719          * additional root distance per stratum.  This heavy bias is no
3720          * longer appropriate, as the scaled root distance provides a
3721          * more rational metric carrying the cumulative error budget.
3722          */
3723         e = 1e9;
3724         speer = 0;
3725         leap_vote_ins = 0;
3726         leap_vote_del = 0;
3727         for (i = 0; i < nlist; i++) {
3728                 peer = peers[i].peer;
3729                 peer->unreach = 0;
3730                 peer->new_status = CTL_PST_SEL_SYNCCAND;
3731                 sys_survivors++;
3732                 if (peer->leap == LEAP_ADDSECOND) {
3733                         if (peer->flags & FLAG_REFCLOCK)
3734                                 leap_vote_ins = nlist;
3735                         else if (leap_vote_ins < nlist)
3736                                 leap_vote_ins++;
3737                 }
3738                 if (peer->leap == LEAP_DELSECOND) {
3739                         if (peer->flags & FLAG_REFCLOCK)
3740                                 leap_vote_del = nlist;
3741                         else if (leap_vote_del < nlist)
3742                                 leap_vote_del++;
3743                 }
3744                 if (peer->flags & FLAG_PREFER)
3745                         sys_prefer = peer;
3746                 speermet = peers[i].seljit * peers[i].synch +
3747                     peer->stratum * sys_mindisp;
3748                 if (speermet < e) {
3749                         e = speermet;
3750                         speer = i;
3751                 }
3752         }
3753
3754         /*
3755          * Unless there are at least sys_misane survivors, leave the
3756          * building dark. Otherwise, do a clockhop dance. Ordinarily,
3757          * use the selected survivor speer. However, if the current
3758          * system peer is not speer, stay with the current system peer
3759          * as long as it doesn't get too old or too ugly.
3760          */
3761         if (nlist > 0 && nlist >= sys_minsane) {
3762                 double  x;
3763
3764                 typesystem = peers[speer].peer;
3765                 if (osys_peer == NULL || osys_peer == typesystem) {
3766                         sys_clockhop = 0;
3767                 } else if ((x = fabs(typesystem->offset -
3768                     osys_peer->offset)) < sys_mindisp) {
3769                         if (sys_clockhop == 0)
3770                                 sys_clockhop = sys_mindisp;
3771                         else
3772                                 sys_clockhop *= .5;
3773                         DPRINTF(1, ("select: clockhop %d %.6f %.6f\n",
3774                                 j, x, sys_clockhop));
3775                         if (fabs(x) < sys_clockhop)
3776                                 typesystem = osys_peer;
3777                         else
3778                                 sys_clockhop = 0;
3779                 } else {
3780                         sys_clockhop = 0;
3781                 }
3782         }
3783
3784         /*
3785          * Mitigation rules of the game. We have the pick of the
3786          * litter in typesystem if any survivors are left. If
3787          * there is a prefer peer, use its offset and jitter.
3788          * Otherwise, use the combined offset and jitter of all kitters.
3789          */
3790         if (typesystem != NULL) {
3791                 if (sys_prefer == NULL) {
3792                         typesystem->new_status = CTL_PST_SEL_SYSPEER;
3793                         clock_combine(peers, sys_survivors, speer);
3794                 } else {
3795                         typesystem = sys_prefer;
3796                         sys_clockhop = 0;
3797                         typesystem->new_status = CTL_PST_SEL_SYSPEER;
3798                         sys_offset = typesystem->offset;
3799                         sys_jitter = typesystem->jitter;
3800                 }
3801                 DPRINTF(1, ("select: combine offset %.9f jitter %.9f\n",
3802                         sys_offset, sys_jitter));
3803         }
3804 #ifdef REFCLOCK
3805         /*
3806          * If a PPS driver is lit and the combined offset is less than
3807          * 0.4 s, select the driver as the PPS peer and use its offset
3808          * and jitter. However, if this is the atom driver, use it only
3809          * if there is a prefer peer or there are no survivors and none
3810          * are required.
3811          */
3812         if (   typepps != NULL
3813             && fabs(sys_offset) < 0.4
3814             && (   typepps->refclktype != REFCLK_ATOM_PPS
3815                 || (   typepps->refclktype == REFCLK_ATOM_PPS
3816                     && (   sys_prefer != NULL
3817                         || (typesystem == NULL && sys_minsane == 0))))) {
3818                 typesystem = typepps;
3819                 sys_clockhop = 0;
3820                 typesystem->new_status = CTL_PST_SEL_PPS;
3821                 sys_offset = typesystem->offset;
3822                 sys_jitter = typesystem->jitter;
3823                 DPRINTF(1, ("select: pps offset %.9f jitter %.9f\n",
3824                         sys_offset, sys_jitter));
3825         }
3826 #endif /* REFCLOCK */
3827
3828         /*
3829          * If there are no survivors at this point, there is no
3830          * system peer. If so and this is an old update, keep the
3831          * current statistics, but do not update the clock.
3832          */
3833         if (typesystem == NULL) {
3834                 if (osys_peer != NULL) {
3835                         if (sys_orphwait > 0)
3836                                 orphwait = current_time + sys_orphwait;
3837                         report_event(EVNT_NOPEER, NULL, NULL);
3838                 }
3839                 sys_peer = NULL;
3840                 for (peer = peer_list; peer != NULL; peer = peer->p_link)
3841                         peer->status = peer->new_status;
3842                 return;
3843         }
3844
3845         /*
3846          * Do not use old data, as this may mess up the clock discipline
3847          * stability.
3848          */
3849         if (typesystem->epoch <= sys_epoch)
3850                 return;
3851
3852         /*
3853          * We have found the alpha male. Wind the clock.
3854          */
3855         if (osys_peer != typesystem)
3856                 report_event(PEVNT_NEWPEER, typesystem, NULL);
3857         for (peer = peer_list; peer != NULL; peer = peer->p_link)
3858                 peer->status = peer->new_status;
3859         clock_update(typesystem);
3860 }
3861
3862
3863 static void
3864 clock_combine(
3865         peer_select *   peers,  /* survivor list */
3866         int             npeers, /* number of survivors */
3867         int             syspeer /* index of sys.peer */
3868         )
3869 {
3870         int     i;
3871         double  x, y, z, w;
3872
3873         y = z = w = 0;
3874         for (i = 0; i < npeers; i++) {
3875                 x = 1. / peers[i].synch;
3876                 y += x;
3877                 z += x * peers[i].peer->offset;
3878                 w += x * DIFF(peers[i].peer->offset,
3879                     peers[syspeer].peer->offset);
3880         }
3881         sys_offset = z / y;
3882         sys_jitter = SQRT(w / y + SQUARE(peers[syspeer].seljit));
3883 }
3884
3885
3886 /*
3887  * root_distance - compute synchronization distance from peer to root
3888  */
3889 static double
3890 root_distance(
3891         struct peer *peer       /* peer structure pointer */
3892         )
3893 {
3894         double  dtemp;
3895
3896         /*
3897          * Root Distance (LAMBDA) is defined as:
3898          * (delta + DELTA)/2 + epsilon + EPSILON + D
3899          *
3900          * where:
3901          *  delta   is the round-trip delay
3902          *  DELTA   is the root delay
3903          *  epsilon is the peer dispersion
3904          *          + (15 usec each second)
3905          *  EPSILON is the root dispersion
3906          *  D       is sys_jitter
3907          *
3908          * NB: Think hard about why we are using these values, and what
3909          * the alternatives are, and the various pros/cons.
3910          *
3911          * DLM thinks these are probably the best choices from any of the
3912          * other worse choices.
3913          */
3914         dtemp = (peer->delay + peer->rootdelay) / 2
3915                 + peer->disp
3916                   + clock_phi * (current_time - peer->update)
3917                 + peer->rootdisp
3918                 + peer->jitter;
3919         /*
3920          * Careful squeak here. The value returned must be greater than
3921          * the minimum root dispersion in order to avoid clockhop with
3922          * highly precise reference clocks. Note that the root distance
3923          * cannot exceed the sys_maxdist, as this is the cutoff by the
3924          * selection algorithm.
3925          */
3926         if (dtemp < sys_mindisp)
3927                 dtemp = sys_mindisp;
3928         return (dtemp);
3929 }
3930
3931
3932 /*
3933  * peer_xmit - send packet for persistent association.
3934  */
3935 static void
3936 peer_xmit(
3937         struct peer *peer       /* peer structure pointer */
3938         )
3939 {
3940         struct pkt xpkt;        /* transmit packet */
3941         size_t  sendlen, authlen;
3942         keyid_t xkeyid = 0;     /* transmit key ID */
3943         l_fp    xmt_tx, xmt_ty;
3944
3945         if (!peer->dstadr)      /* drop peers without interface */
3946                 return;
3947
3948         xpkt.li_vn_mode = PKT_LI_VN_MODE(sys_leap, peer->version,
3949             peer->hmode);
3950         xpkt.stratum = STRATUM_TO_PKT(sys_stratum);
3951         xpkt.ppoll = peer->hpoll;
3952         xpkt.precision = sys_precision;
3953         xpkt.refid = sys_refid;
3954         xpkt.rootdelay = HTONS_FP(DTOFP(sys_rootdelay));
3955         xpkt.rootdisp =  HTONS_FP(DTOUFP(sys_rootdisp));
3956         HTONL_FP(&sys_reftime, &xpkt.reftime);
3957         HTONL_FP(&peer->rec, &xpkt.org);
3958         HTONL_FP(&peer->dst, &xpkt.rec);
3959
3960         /*
3961          * If the received packet contains a MAC, the transmitted packet
3962          * is authenticated and contains a MAC. If not, the transmitted
3963          * packet is not authenticated.
3964          *
3965          * It is most important when autokey is in use that the local
3966          * interface IP address be known before the first packet is
3967          * sent. Otherwise, it is not possible to compute a correct MAC
3968          * the recipient will accept. Thus, the I/O semantics have to do
3969          * a little more work. In particular, the wildcard interface
3970          * might not be usable.
3971          */
3972         sendlen = LEN_PKT_NOMAC;
3973         if (
3974 #ifdef AUTOKEY
3975             !(peer->flags & FLAG_SKEY) &&
3976 #endif  /* !AUTOKEY */
3977             peer->keyid == 0) {
3978
3979                 /*
3980                  * Transmit a-priori timestamps
3981                  */
3982                 get_systime(&xmt_tx);
3983                 if (peer->flip == 0) {  /* basic mode */
3984                         peer->aorg = xmt_tx;
3985                         HTONL_FP(&xmt_tx, &xpkt.xmt);
3986                 } else {                /* interleaved modes */
3987                         if (peer->hmode == MODE_BROADCAST) { /* bcst */
3988                                 HTONL_FP(&xmt_tx, &xpkt.xmt);
3989                                 if (peer->flip > 0)
3990                                         HTONL_FP(&peer->borg,
3991                                             &xpkt.org);
3992                                 else
3993                                         HTONL_FP(&peer->aorg,
3994                                             &xpkt.org);
3995                         } else {        /* symmetric */
3996                                 if (peer->flip > 0)
3997                                         HTONL_FP(&peer->borg,
3998                                             &xpkt.xmt);
3999                                 else
4000                                         HTONL_FP(&peer->aorg,
4001                                             &xpkt.xmt);
4002                         }
4003                 }
4004                 peer->t21_bytes = sendlen;
4005                 sendpkt(&peer->srcadr, peer->dstadr,
4006                         sys_ttl[(peer->ttl >= sys_ttlmax) ? sys_ttlmax : peer->ttl],
4007                         &xpkt, sendlen);
4008                 peer->sent++;
4009                 peer->throttle += (1 << peer->minpoll) - 2;
4010
4011                 /*
4012                  * Capture a-posteriori timestamps
4013                  */
4014                 get_systime(&xmt_ty);
4015                 if (peer->flip != 0) {          /* interleaved modes */
4016                         if (peer->flip > 0)
4017                                 peer->aorg = xmt_ty;
4018                         else
4019                                 peer->borg = xmt_ty;
4020                         peer->flip = -peer->flip;
4021                 }
4022                 L_SUB(&xmt_ty, &xmt_tx);
4023                 LFPTOD(&xmt_ty, peer->xleave);
4024                 DPRINTF(1, ("peer_xmit: at %ld %s->%s mode %d len %zu xmt %#010x.%08x\n",
4025                             current_time,
4026                             peer->dstadr ? stoa(&peer->dstadr->sin) : "-",
4027                             stoa(&peer->srcadr), peer->hmode, sendlen,
4028                             xmt_tx.l_ui, xmt_tx.l_uf));
4029                 return;
4030         }
4031
4032         /*
4033          * Authentication is enabled, so the transmitted packet must be
4034          * authenticated. If autokey is enabled, fuss with the various
4035          * modes; otherwise, symmetric key cryptography is used.
4036          */
4037 #ifdef AUTOKEY
4038         if (peer->flags & FLAG_SKEY) {
4039                 struct exten *exten;    /* extension field */
4040
4041                 /*
4042                  * The Public Key Dance (PKD): Cryptographic credentials
4043                  * are contained in extension fields, each including a
4044                  * 4-octet length/code word followed by a 4-octet
4045                  * association ID and optional additional data. Optional
4046                  * data includes a 4-octet data length field followed by
4047                  * the data itself. Request messages are sent from a
4048                  * configured association; response messages can be sent
4049                  * from a configured association or can take the fast
4050                  * path without ever matching an association. Response
4051                  * messages have the same code as the request, but have
4052                  * a response bit and possibly an error bit set. In this
4053                  * implementation, a message may contain no more than
4054                  * one command and one or more responses.
4055                  *
4056                  * Cryptographic session keys include both a public and
4057                  * a private componet. Request and response messages
4058                  * using extension fields are always sent with the
4059                  * private component set to zero. Packets without
4060                  * extension fields indlude the private component when
4061                  * the session key is generated.
4062                  */
4063                 while (1) {
4064
4065                         /*
4066                          * Allocate and initialize a keylist if not
4067                          * already done. Then, use the list in inverse
4068                          * order, discarding keys once used. Keep the
4069                          * latest key around until the next one, so
4070                          * clients can use client/server packets to
4071                          * compute propagation delay.
4072                          *
4073                          * Note that once a key is used from the list,
4074                          * it is retained in the key cache until the
4075                          * next key is used. This is to allow a client
4076                          * to retrieve the encrypted session key
4077                          * identifier to verify authenticity.
4078                          *
4079                          * If for some reason a key is no longer in the
4080                          * key cache, a birthday has happened or the key
4081                          * has expired, so the pseudo-random sequence is
4082                          * broken. In that case, purge the keylist and
4083                          * regenerate it.
4084                          */
4085                         if (peer->keynumber == 0)
4086                                 make_keylist(peer, peer->dstadr);
4087                         else
4088                                 peer->keynumber--;
4089                         xkeyid = peer->keylist[peer->keynumber];
4090                         if (authistrusted(xkeyid))
4091                                 break;
4092                         else
4093                                 key_expire(peer);
4094                 }
4095                 peer->keyid = xkeyid;
4096                 exten = NULL;
4097                 switch (peer->hmode) {
4098
4099                 /*
4100                  * In broadcast server mode the autokey values are
4101                  * required by the broadcast clients. Push them when a
4102                  * new keylist is generated; otherwise, push the
4103                  * association message so the client can request them at
4104                  * other times.
4105                  */
4106                 case MODE_BROADCAST:
4107                         if (peer->flags & FLAG_ASSOC)
4108                                 exten = crypto_args(peer, CRYPTO_AUTO |
4109                                     CRYPTO_RESP, peer->associd, NULL);
4110                         else
4111                                 exten = crypto_args(peer, CRYPTO_ASSOC |
4112                                     CRYPTO_RESP, peer->associd, NULL);
4113                         break;
4114
4115                 /*
4116                  * In symmetric modes the parameter, certificate,
4117                  * identity, cookie and autokey exchanges are
4118                  * required. The leapsecond exchange is optional. But, a
4119                  * peer will not believe the other peer until the other
4120                  * peer has synchronized, so the certificate exchange
4121                  * might loop until then. If a peer finds a broken
4122                  * autokey sequence, it uses the autokey exchange to
4123                  * retrieve the autokey values. In any case, if a new
4124                  * keylist is generated, the autokey values are pushed.
4125                  */
4126                 case MODE_ACTIVE:
4127                 case MODE_PASSIVE:
4128
4129                         /*
4130                          * Parameter, certificate and identity.
4131                          */
4132                         if (!peer->crypto)
4133                                 exten = crypto_args(peer, CRYPTO_ASSOC,
4134                                     peer->associd, hostval.ptr);
4135                         else if (!(peer->crypto & CRYPTO_FLAG_CERT))
4136                                 exten = crypto_args(peer, CRYPTO_CERT,
4137                                     peer->associd, peer->issuer);
4138                         else if (!(peer->crypto & CRYPTO_FLAG_VRFY))
4139                                 exten = crypto_args(peer,
4140                                     crypto_ident(peer), peer->associd,
4141                                     NULL);
4142
4143                         /*
4144                          * Cookie and autokey. We request the cookie
4145                          * only when the this peer and the other peer
4146                          * are synchronized. But, this peer needs the
4147                          * autokey values when the cookie is zero. Any
4148                          * time we regenerate the key list, we offer the
4149                          * autokey values without being asked. If for
4150                          * some reason either peer finds a broken
4151                          * autokey sequence, the autokey exchange is
4152                          * used to retrieve the autokey values.
4153                          */
4154                         else if (   sys_leap != LEAP_NOTINSYNC
4155                                  && peer->leap != LEAP_NOTINSYNC
4156                                  && !(peer->crypto & CRYPTO_FLAG_COOK))
4157                                 exten = crypto_args(peer, CRYPTO_COOK,
4158                                     peer->associd, NULL);
4159                         else if (!(peer->crypto & CRYPTO_FLAG_AUTO))
4160                                 exten = crypto_args(peer, CRYPTO_AUTO,
4161                                     peer->associd, NULL);
4162                         else if (   peer->flags & FLAG_ASSOC
4163                                  && peer->crypto & CRYPTO_FLAG_SIGN)
4164                                 exten = crypto_args(peer, CRYPTO_AUTO |
4165                                     CRYPTO_RESP, peer->assoc, NULL);
4166
4167                         /*
4168                          * Wait for clock sync, then sign the
4169                          * certificate and retrieve the leapsecond
4170                          * values.
4171                          */
4172                         else if (sys_leap == LEAP_NOTINSYNC)
4173                                 break;
4174
4175                         else if (!(peer->crypto & CRYPTO_FLAG_SIGN))
4176                                 exten = crypto_args(peer, CRYPTO_SIGN,
4177                                     peer->associd, hostval.ptr);
4178                         else if (!(peer->crypto & CRYPTO_FLAG_LEAP))
4179                                 exten = crypto_args(peer, CRYPTO_LEAP,
4180                                     peer->associd, NULL);
4181                         break;
4182
4183                 /*
4184                  * In client mode the parameter, certificate, identity,
4185                  * cookie and sign exchanges are required. The
4186                  * leapsecond exchange is optional. If broadcast client
4187                  * mode the same exchanges are required, except that the
4188                  * autokey exchange is substitutes for the cookie
4189                  * exchange, since the cookie is always zero. If the
4190                  * broadcast client finds a broken autokey sequence, it
4191                  * uses the autokey exchange to retrieve the autokey
4192                  * values.
4193                  */
4194                 case MODE_CLIENT:
4195
4196                         /*
4197                          * Parameter, certificate and identity.
4198                          */
4199                         if (!peer->crypto)
4200                                 exten = crypto_args(peer, CRYPTO_ASSOC,
4201                                     peer->associd, hostval.ptr);
4202                         else if (!(peer->crypto & CRYPTO_FLAG_CERT))
4203                                 exten = crypto_args(peer, CRYPTO_CERT,
4204                                     peer->associd, peer->issuer);
4205                         else if (!(peer->crypto & CRYPTO_FLAG_VRFY))
4206                                 exten = crypto_args(peer,
4207                                     crypto_ident(peer), peer->associd,
4208                                     NULL);
4209
4210                         /*
4211                          * Cookie and autokey. These are requests, but
4212                          * we use the peer association ID with autokey
4213                          * rather than our own.
4214                          */
4215                         else if (!(peer->crypto & CRYPTO_FLAG_COOK))
4216                                 exten = crypto_args(peer, CRYPTO_COOK,
4217                                     peer->associd, NULL);
4218                         else if (!(peer->crypto & CRYPTO_FLAG_AUTO))
4219                                 exten = crypto_args(peer, CRYPTO_AUTO,
4220                                     peer->assoc, NULL);
4221
4222                         /*
4223                          * Wait for clock sync, then sign the
4224                          * certificate and retrieve the leapsecond
4225                          * values.
4226                          */
4227                         else if (sys_leap == LEAP_NOTINSYNC)
4228                                 break;
4229
4230                         else if (!(peer->crypto & CRYPTO_FLAG_SIGN))
4231                                 exten = crypto_args(peer, CRYPTO_SIGN,
4232                                     peer->associd, hostval.ptr);
4233                         else if (!(peer->crypto & CRYPTO_FLAG_LEAP))
4234                                 exten = crypto_args(peer, CRYPTO_LEAP,
4235                                     peer->associd, NULL);
4236                         break;
4237                 }
4238
4239                 /*
4240                  * Add a queued extension field if present. This is
4241                  * always a request message, so the reply ID is already
4242                  * in the message. If an error occurs, the error bit is
4243                  * lit in the response.
4244                  */
4245                 if (peer->cmmd != NULL) {
4246                         u_int32 temp32;
4247
4248                         temp32 = CRYPTO_RESP;
4249                         peer->cmmd->opcode |= htonl(temp32);
4250                         sendlen += crypto_xmit(peer, &xpkt, NULL,
4251                             sendlen, peer->cmmd, 0);
4252                         free(peer->cmmd);
4253                         peer->cmmd = NULL;
4254                 }
4255
4256                 /*
4257                  * Add an extension field created above. All but the
4258                  * autokey response message are request messages.
4259                  */
4260                 if (exten != NULL) {
4261                         if (exten->opcode != 0)
4262                                 sendlen += crypto_xmit(peer, &xpkt,
4263                                     NULL, sendlen, exten, 0);
4264                         free(exten);
4265                 }
4266
4267                 /*
4268                  * Calculate the next session key. Since extension
4269                  * fields are present, the cookie value is zero.
4270                  */
4271                 if (sendlen > (int)LEN_PKT_NOMAC) {
4272                         session_key(&peer->dstadr->sin, &peer->srcadr,
4273                             xkeyid, 0, 2);
4274                 }
4275         }
4276 #endif  /* AUTOKEY */
4277
4278         /*
4279          * Transmit a-priori timestamps
4280          */
4281         get_systime(&xmt_tx);
4282         if (peer->flip == 0) {          /* basic mode */
4283                 peer->aorg = xmt_tx;
4284                 HTONL_FP(&xmt_tx, &xpkt.xmt);
4285         } else {                        /* interleaved modes */
4286                 if (peer->hmode == MODE_BROADCAST) { /* bcst */
4287                         HTONL_FP(&xmt_tx, &xpkt.xmt);
4288                         if (peer->flip > 0)
4289                                 HTONL_FP(&peer->borg, &xpkt.org);
4290                         else
4291                                 HTONL_FP(&peer->aorg, &xpkt.org);
4292                 } else {                /* symmetric */
4293                         if (peer->flip > 0)
4294                                 HTONL_FP(&peer->borg, &xpkt.xmt);
4295                         else
4296                                 HTONL_FP(&peer->aorg, &xpkt.xmt);
4297                 }
4298         }
4299         xkeyid = peer->keyid;
4300         authlen = authencrypt(xkeyid, (u_int32 *)&xpkt, sendlen);
4301         if (authlen == 0) {
4302                 report_event(PEVNT_AUTH, peer, "no key");
4303                 peer->flash |= TEST5;           /* auth error */
4304                 peer->badauth++;
4305                 return;
4306         }
4307         sendlen += authlen;
4308 #ifdef AUTOKEY
4309         if (xkeyid > NTP_MAXKEY)
4310                 authtrust(xkeyid, 0);
4311 #endif  /* AUTOKEY */
4312         if (sendlen > sizeof(xpkt)) {
4313                 msyslog(LOG_ERR, "peer_xmit: buffer overflow %zu", sendlen);
4314                 exit (-1);
4315         }
4316         peer->t21_bytes = sendlen;
4317         sendpkt(&peer->srcadr, peer->dstadr,
4318                 sys_ttl[(peer->ttl >= sys_ttlmax) ? sys_ttlmax : peer->ttl],
4319                 &xpkt, sendlen);
4320         peer->sent++;
4321         peer->throttle += (1 << peer->minpoll) - 2;
4322
4323         /*
4324          * Capture a-posteriori timestamps
4325          */
4326         get_systime(&xmt_ty);
4327         if (peer->flip != 0) {                  /* interleaved modes */
4328                 if (peer->flip > 0)
4329                         peer->aorg = xmt_ty;
4330                 else
4331                         peer->borg = xmt_ty;
4332                 peer->flip = -peer->flip;
4333         }
4334         L_SUB(&xmt_ty, &xmt_tx);
4335         LFPTOD(&xmt_ty, peer->xleave);
4336 #ifdef AUTOKEY
4337         DPRINTF(1, ("peer_xmit: at %ld %s->%s mode %d keyid %08x len %zu index %d\n",
4338                     current_time, latoa(peer->dstadr),
4339                     ntoa(&peer->srcadr), peer->hmode, xkeyid, sendlen,
4340                     peer->keynumber));
4341 #else   /* !AUTOKEY follows */
4342         DPRINTF(1, ("peer_xmit: at %ld %s->%s mode %d keyid %08x len %zu\n",
4343                     current_time, peer->dstadr ?
4344                     ntoa(&peer->dstadr->sin) : "-",
4345                     ntoa(&peer->srcadr), peer->hmode, xkeyid, sendlen));
4346 #endif  /* !AUTOKEY */
4347
4348         return;
4349 }
4350
4351
4352 #ifdef LEAP_SMEAR
4353
4354 static void
4355 leap_smear_add_offs(
4356         l_fp *t,
4357         l_fp *t_recv
4358         )
4359 {
4360
4361         L_ADD(t, &leap_smear.offset);
4362
4363         /*
4364         ** XXX: Should the smear be added to the root dispersion?
4365         */
4366
4367         return;
4368 }
4369
4370 #endif /* LEAP_SMEAR */
4371
4372
4373 /*
4374  * fast_xmit - Send packet for nonpersistent association. Note that
4375  * neither the source or destination can be a broadcast address.
4376  */
4377 static void
4378 fast_xmit(
4379         struct recvbuf *rbufp,  /* receive packet pointer */
4380         int     xmode,          /* receive mode */
4381         keyid_t xkeyid,         /* transmit key ID */
4382         int     flags           /* restrict mask */
4383         )
4384 {
4385         struct pkt xpkt;        /* transmit packet structure */
4386         struct pkt *rpkt;       /* receive packet structure */
4387         l_fp    xmt_tx, xmt_ty;
4388         size_t  sendlen;
4389 #ifdef AUTOKEY
4390         u_int32 temp32;
4391 #endif
4392
4393         /*
4394          * Initialize transmit packet header fields from the receive
4395          * buffer provided. We leave the fields intact as received, but
4396          * set the peer poll at the maximum of the receive peer poll and
4397          * the system minimum poll (ntp_minpoll). This is for KoD rate
4398          * control and not strictly specification compliant, but doesn't
4399          * break anything.
4400          *
4401          * If the gazinta was from a multicast address, the gazoutta
4402          * must go out another way.
4403          */
4404         rpkt = &rbufp->recv_pkt;
4405         if (rbufp->dstadr->flags & INT_MCASTOPEN)
4406                 rbufp->dstadr = findinterface(&rbufp->recv_srcadr);
4407
4408         /*
4409          * If this is a kiss-o'-death (KoD) packet, show leap
4410          * unsynchronized, stratum zero, reference ID the four-character
4411          * kiss code and system root delay. Note we don't reveal the
4412          * local time, so these packets can't be used for
4413          * synchronization.
4414          */
4415         if (flags & RES_KOD) {
4416                 sys_kodsent++;
4417                 xpkt.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOTINSYNC,
4418                     PKT_VERSION(rpkt->li_vn_mode), xmode);
4419                 xpkt.stratum = STRATUM_PKT_UNSPEC;
4420                 xpkt.ppoll = max(rpkt->ppoll, ntp_minpoll);
4421                 xpkt.precision = rpkt->precision;
4422                 memcpy(&xpkt.refid, "RATE", 4);
4423                 xpkt.rootdelay = rpkt->rootdelay;
4424                 xpkt.rootdisp = rpkt->rootdisp;
4425                 xpkt.reftime = rpkt->reftime;
4426                 xpkt.org = rpkt->xmt;
4427                 xpkt.rec = rpkt->xmt;
4428                 xpkt.xmt = rpkt->xmt;
4429
4430         /*
4431          * This is a normal packet. Use the system variables.
4432          */
4433         } else {
4434 #ifdef LEAP_SMEAR
4435                 /*
4436                  * Make copies of the variables which can be affected by smearing.
4437                  */
4438                 l_fp this_ref_time;
4439                 l_fp this_recv_time;
4440 #endif
4441
4442                 /*
4443                  * If we are inside the leap smear interval we add the current smear offset to
4444                  * the packet receive time, to the packet transmit time, and eventually to the
4445                  * reftime to make sure the reftime isn't later than the transmit/receive times.
4446                  */
4447                 xpkt.li_vn_mode = PKT_LI_VN_MODE(xmt_leap,
4448                     PKT_VERSION(rpkt->li_vn_mode), xmode);
4449
4450                 xpkt.stratum = STRATUM_TO_PKT(sys_stratum);
4451                 xpkt.ppoll = max(rpkt->ppoll, ntp_minpoll);
4452                 xpkt.precision = sys_precision;
4453                 xpkt.refid = sys_refid;
4454                 xpkt.rootdelay = HTONS_FP(DTOFP(sys_rootdelay));
4455                 xpkt.rootdisp = HTONS_FP(DTOUFP(sys_rootdisp));
4456
4457 #ifdef LEAP_SMEAR
4458                 this_ref_time = sys_reftime;
4459                 if (leap_smear.in_progress) {
4460                         leap_smear_add_offs(&this_ref_time, NULL);
4461                         xpkt.refid = convertLFPToRefID(leap_smear.offset);
4462                         DPRINTF(2, ("fast_xmit: leap_smear.in_progress: refid %8x, smear %s\n",
4463                                 ntohl(xpkt.refid),
4464                                 lfptoa(&leap_smear.offset, 8)
4465                                 ));
4466                 }
4467                 HTONL_FP(&this_ref_time, &xpkt.reftime);
4468 #else
4469                 HTONL_FP(&sys_reftime, &xpkt.reftime);
4470 #endif
4471
4472                 xpkt.org = rpkt->xmt;
4473
4474 #ifdef LEAP_SMEAR
4475                 this_recv_time = rbufp->recv_time;
4476                 if (leap_smear.in_progress)
4477                         leap_smear_add_offs(&this_recv_time, NULL);
4478                 HTONL_FP(&this_recv_time, &xpkt.rec);
4479 #else
4480                 HTONL_FP(&rbufp->recv_time, &xpkt.rec);
4481 #endif
4482
4483                 get_systime(&xmt_tx);
4484 #ifdef LEAP_SMEAR
4485                 if (leap_smear.in_progress)
4486                         leap_smear_add_offs(&xmt_tx, &this_recv_time);
4487 #endif
4488                 HTONL_FP(&xmt_tx, &xpkt.xmt);
4489         }
4490
4491 #ifdef HAVE_NTP_SIGND
4492         if (flags & RES_MSSNTP) {
4493                 send_via_ntp_signd(rbufp, xmode, xkeyid, flags, &xpkt);
4494                 return;
4495         }
4496 #endif /* HAVE_NTP_SIGND */
4497
4498         /*
4499          * If the received packet contains a MAC, the transmitted packet
4500          * is authenticated and contains a MAC. If not, the transmitted
4501          * packet is not authenticated.
4502          */
4503         sendlen = LEN_PKT_NOMAC;
4504         if (rbufp->recv_length == sendlen) {
4505                 sendpkt(&rbufp->recv_srcadr, rbufp->dstadr, 0, &xpkt,
4506                     sendlen);
4507                 DPRINTF(1, ("fast_xmit: at %ld %s->%s mode %d len %lu\n",
4508                             current_time, stoa(&rbufp->dstadr->sin),
4509                             stoa(&rbufp->recv_srcadr), xmode,
4510                             (u_long)sendlen));
4511                 return;
4512         }
4513
4514         /*
4515          * The received packet contains a MAC, so the transmitted packet
4516          * must be authenticated. For symmetric key cryptography, use
4517          * the predefined and trusted symmetric keys to generate the
4518          * cryptosum. For autokey cryptography, use the server private
4519          * value to generate the cookie, which is unique for every
4520          * source-destination-key ID combination.
4521          */
4522 #ifdef AUTOKEY
4523         if (xkeyid > NTP_MAXKEY) {
4524                 keyid_t cookie;
4525
4526                 /*
4527                  * The only way to get here is a reply to a legitimate
4528                  * client request message, so the mode must be
4529                  * MODE_SERVER. If an extension field is present, there
4530                  * can be only one and that must be a command. Do what
4531                  * needs, but with private value of zero so the poor
4532                  * jerk can decode it. If no extension field is present,
4533                  * use the cookie to generate the session key.
4534                  */
4535                 cookie = session_key(&rbufp->recv_srcadr,
4536                     &rbufp->dstadr->sin, 0, sys_private, 0);
4537                 if ((size_t)rbufp->recv_length > sendlen + MAX_MAC_LEN) {
4538                         session_key(&rbufp->dstadr->sin,
4539                             &rbufp->recv_srcadr, xkeyid, 0, 2);
4540                         temp32 = CRYPTO_RESP;
4541                         rpkt->exten[0] |= htonl(temp32);
4542                         sendlen += crypto_xmit(NULL, &xpkt, rbufp,
4543                             sendlen, (struct exten *)rpkt->exten,
4544                             cookie);
4545                 } else {
4546                         session_key(&rbufp->dstadr->sin,
4547                             &rbufp->recv_srcadr, xkeyid, cookie, 2);
4548                 }
4549         }
4550 #endif  /* AUTOKEY */
4551         get_systime(&xmt_tx);
4552         sendlen += authencrypt(xkeyid, (u_int32 *)&xpkt, sendlen);
4553 #ifdef AUTOKEY
4554         if (xkeyid > NTP_MAXKEY)
4555                 authtrust(xkeyid, 0);
4556 #endif  /* AUTOKEY */
4557         sendpkt(&rbufp->recv_srcadr, rbufp->dstadr, 0, &xpkt, sendlen);
4558         get_systime(&xmt_ty);
4559         L_SUB(&xmt_ty, &xmt_tx);
4560         sys_authdelay = xmt_ty;
4561         DPRINTF(1, ("fast_xmit: at %ld %s->%s mode %d keyid %08x len %lu\n",
4562                     current_time, ntoa(&rbufp->dstadr->sin),
4563                     ntoa(&rbufp->recv_srcadr), xmode, xkeyid,
4564                     (u_long)sendlen));
4565 }
4566
4567
4568 /*
4569  * pool_xmit - resolve hostname or send unicast solicitation for pool.
4570  */
4571 static void
4572 pool_xmit(
4573         struct peer *pool       /* pool solicitor association */
4574         )
4575 {
4576 #ifdef WORKER
4577         struct pkt              xpkt;   /* transmit packet structure */
4578         struct addrinfo         hints;
4579         int                     rc;
4580         struct interface *      lcladr;
4581         sockaddr_u *            rmtadr;
4582         r4addr                  r4a;
4583         int                     restrict_mask;
4584         struct peer *           p;
4585         l_fp                    xmt_tx;
4586
4587         if (NULL == pool->ai) {
4588                 if (pool->addrs != NULL) {
4589                         /* free() is used with copy_addrinfo_list() */
4590                         free(pool->addrs);
4591                         pool->addrs = NULL;
4592                 }
4593                 ZERO(hints);
4594                 hints.ai_family = AF(&pool->srcadr);
4595                 hints.ai_socktype = SOCK_DGRAM;
4596                 hints.ai_protocol = IPPROTO_UDP;
4597                 /* ignore getaddrinfo_sometime() errors, we will retry */
4598                 rc = getaddrinfo_sometime(
4599                         pool->hostname,
4600                         "ntp",
4601                         &hints,
4602                         0,                      /* no retry */
4603                         &pool_name_resolved,
4604                         (void *)(intptr_t)pool->associd);
4605                 if (!rc)
4606                         DPRINTF(1, ("pool DNS lookup %s started\n",
4607                                 pool->hostname));
4608                 else
4609                         msyslog(LOG_ERR,
4610                                 "unable to start pool DNS %s: %m",
4611                                 pool->hostname);
4612                 return;
4613         }
4614
4615         do {
4616                 /* copy_addrinfo_list ai_addr points to a sockaddr_u */
4617                 rmtadr = (sockaddr_u *)(void *)pool->ai->ai_addr;
4618                 pool->ai = pool->ai->ai_next;
4619                 p = findexistingpeer(rmtadr, NULL, NULL, MODE_CLIENT, 0, NULL);
4620         } while (p != NULL && pool->ai != NULL);
4621         if (p != NULL)
4622                 return; /* out of addresses, re-query DNS next poll */
4623         restrictions(rmtadr, &r4a);
4624         restrict_mask = r4a.rflags;
4625         if (RES_FLAGS & restrict_mask)
4626                 restrict_source(rmtadr, 0,
4627                                 current_time + POOL_SOLICIT_WINDOW + 1);
4628         lcladr = findinterface(rmtadr);
4629         memset(&xpkt, 0, sizeof(xpkt));
4630         xpkt.li_vn_mode = PKT_LI_VN_MODE(sys_leap, pool->version,
4631                                          MODE_CLIENT);
4632         xpkt.stratum = STRATUM_TO_PKT(sys_stratum);
4633         xpkt.ppoll = pool->hpoll;
4634         xpkt.precision = sys_precision;
4635         xpkt.refid = sys_refid;
4636         xpkt.rootdelay = HTONS_FP(DTOFP(sys_rootdelay));
4637         xpkt.rootdisp = HTONS_FP(DTOUFP(sys_rootdisp));
4638         HTONL_FP(&sys_reftime, &xpkt.reftime);
4639         get_systime(&xmt_tx);
4640         pool->aorg = xmt_tx;
4641         HTONL_FP(&xmt_tx, &xpkt.xmt);
4642         sendpkt(rmtadr, lcladr,
4643                 sys_ttl[(pool->ttl >= sys_ttlmax) ? sys_ttlmax : pool->ttl],
4644                 &xpkt, LEN_PKT_NOMAC);
4645         pool->sent++;
4646         pool->throttle += (1 << pool->minpoll) - 2;
4647         DPRINTF(1, ("pool_xmit: at %ld %s->%s pool\n",
4648                     current_time, latoa(lcladr), stoa(rmtadr)));
4649         msyslog(LOG_INFO, "Soliciting pool server %s", stoa(rmtadr));
4650 #endif  /* WORKER */
4651 }
4652
4653
4654 #ifdef AUTOKEY
4655         /*
4656          * group_test - test if this is the same group
4657          *
4658          * host         assoc           return          action
4659          * none         none            0               mobilize *
4660          * none         group           0               mobilize *
4661          * group        none            0               mobilize *
4662          * group        group           1               mobilize
4663          * group        different       1               ignore
4664          * * ignore if notrust
4665          */
4666 int
4667 group_test(
4668         char    *grp,
4669         char    *ident
4670         )
4671 {
4672         if (grp == NULL)
4673                 return (0);
4674
4675         if (strcmp(grp, sys_groupname) == 0)
4676                 return (0);
4677
4678         if (ident == NULL)
4679                 return (1);
4680
4681         if (strcmp(grp, ident) == 0)
4682                 return (0);
4683
4684         return (1);
4685 }
4686 #endif /* AUTOKEY */
4687
4688
4689 #ifdef WORKER
4690 void
4691 pool_name_resolved(
4692         int                     rescode,
4693         int                     gai_errno,
4694         void *                  context,
4695         const char *            name,
4696         const char *            service,
4697         const struct addrinfo * hints,
4698         const struct addrinfo * res
4699         )
4700 {
4701         struct peer *   pool;   /* pool solicitor association */
4702         associd_t       assoc;
4703
4704         if (rescode) {
4705                 msyslog(LOG_ERR,
4706                         "error resolving pool %s: %s (%d)",
4707                         name, gai_strerror(rescode), rescode);
4708                 return;
4709         }
4710
4711         assoc = (associd_t)(intptr_t)context;
4712         pool = findpeerbyassoc(assoc);
4713         if (NULL == pool) {
4714                 msyslog(LOG_ERR,
4715                         "Could not find assoc %u for pool DNS %s",
4716                         assoc, name);
4717                 return;
4718         }
4719         DPRINTF(1, ("pool DNS %s completed\n", name));
4720         pool->addrs = copy_addrinfo_list(res);
4721         pool->ai = pool->addrs;
4722         pool_xmit(pool);
4723
4724 }
4725 #endif  /* WORKER */
4726
4727
4728 #ifdef AUTOKEY
4729 /*
4730  * key_expire - purge the key list
4731  */
4732 void
4733 key_expire(
4734         struct peer *peer       /* peer structure pointer */
4735         )
4736 {
4737         int i;
4738
4739         if (peer->keylist != NULL) {
4740                 for (i = 0; i <= peer->keynumber; i++)
4741                         authtrust(peer->keylist[i], 0);
4742                 free(peer->keylist);
4743                 peer->keylist = NULL;
4744         }
4745         value_free(&peer->sndval);
4746         peer->keynumber = 0;
4747         peer->flags &= ~FLAG_ASSOC;
4748         DPRINTF(1, ("key_expire: at %lu associd %d\n", current_time,
4749                     peer->associd));
4750 }
4751 #endif  /* AUTOKEY */
4752
4753
4754 /*
4755  * local_refid(peer) - check peer refid to avoid selecting peers
4756  *                     currently synced to this ntpd.
4757  */
4758 static int
4759 local_refid(
4760         struct peer *   p
4761         )
4762 {
4763         endpt * unicast_ep;
4764
4765         if (p->dstadr != NULL && !(INT_MCASTIF & p->dstadr->flags))
4766                 unicast_ep = p->dstadr;
4767         else
4768                 unicast_ep = findinterface(&p->srcadr);
4769
4770         if (unicast_ep != NULL && p->refid == unicast_ep->addr_refid)
4771                 return TRUE;
4772         else
4773                 return FALSE;
4774 }
4775
4776
4777 /*
4778  * Determine if the peer is unfit for synchronization
4779  *
4780  * A peer is unfit for synchronization if
4781  * > TEST10 bad leap or stratum below floor or at or above ceiling
4782  * > TEST11 root distance exceeded for remote peer
4783  * > TEST12 a direct or indirect synchronization loop would form
4784  * > TEST13 unreachable or noselect
4785  */
4786 int                             /* FALSE if fit, TRUE if unfit */
4787 peer_unfit(
4788         struct peer *peer       /* peer structure pointer */
4789         )
4790 {
4791         int     rval = 0;
4792
4793         /*
4794          * A stratum error occurs if (1) the server has never been
4795          * synchronized, (2) the server stratum is below the floor or
4796          * greater than or equal to the ceiling.
4797          */
4798         if (   peer->leap == LEAP_NOTINSYNC
4799             || peer->stratum < sys_floor
4800             || peer->stratum >= sys_ceiling) {
4801                 rval |= TEST10;         /* bad synch or stratum */
4802         }
4803
4804         /*
4805          * A distance error for a remote peer occurs if the root
4806          * distance is greater than or equal to the distance threshold
4807          * plus the increment due to one host poll interval.
4808          */
4809         if (   !(peer->flags & FLAG_REFCLOCK)
4810             && root_distance(peer) >= sys_maxdist
4811                                       + clock_phi * ULOGTOD(peer->hpoll)) {
4812                 rval |= TEST11;         /* distance exceeded */
4813         }
4814
4815         /*
4816          * A loop error occurs if the remote peer is synchronized to the
4817          * local peer or if the remote peer is synchronized to the same
4818          * server as the local peer but only if the remote peer is
4819          * neither a reference clock nor an orphan.
4820          */
4821         if (peer->stratum > 1 && local_refid(peer)) {
4822                 rval |= TEST12;         /* synchronization loop */
4823         }
4824
4825         /*
4826          * An unreachable error occurs if the server is unreachable or
4827          * the noselect bit is set.
4828          */
4829         if (!peer->reach || (peer->flags & FLAG_NOSELECT)) {
4830                 rval |= TEST13;         /* unreachable */
4831         }
4832
4833         peer->flash &= ~PEER_TEST_MASK;
4834         peer->flash |= rval;
4835         return (rval);
4836 }
4837
4838
4839 /*
4840  * Find the precision of this particular machine
4841  */
4842 #define MINSTEP         20e-9   /* minimum clock increment (s) */
4843 #define MAXSTEP         1       /* maximum clock increment (s) */
4844 #define MINCHANGES      12      /* minimum number of step samples */
4845 #define MAXLOOPS        ((int)(1. / MINSTEP))   /* avoid infinite loop */
4846
4847 /*
4848  * This routine measures the system precision defined as the minimum of
4849  * a sequence of differences between successive readings of the system
4850  * clock. However, if a difference is less than MINSTEP, the clock has
4851  * been read more than once during a clock tick and the difference is
4852  * ignored. We set MINSTEP greater than zero in case something happens
4853  * like a cache miss, and to tolerate underlying system clocks which
4854  * ensure each reading is strictly greater than prior readings while
4855  * using an underlying stepping (not interpolated) clock.
4856  *
4857  * sys_tick and sys_precision represent the time to read the clock for
4858  * systems with high-precision clocks, and the tick interval or step
4859  * size for lower-precision stepping clocks.
4860  *
4861  * This routine also measures the time to read the clock on stepping
4862  * system clocks by counting the number of readings between changes of
4863  * the underlying clock.  With either type of clock, the minimum time
4864  * to read the clock is saved as sys_fuzz, and used to ensure the
4865  * get_systime() readings always increase and are fuzzed below sys_fuzz.
4866  */
4867 void
4868 measure_precision(void)
4869 {
4870         /*
4871          * With sys_fuzz set to zero, get_systime() fuzzing of low bits
4872          * is effectively disabled.  trunc_os_clock is FALSE to disable
4873          * get_ostime() simulation of a low-precision system clock.
4874          */
4875         set_sys_fuzz(0.);
4876         trunc_os_clock = FALSE;
4877         measured_tick = measure_tick_fuzz();
4878         set_sys_tick_precision(measured_tick);
4879         msyslog(LOG_INFO, "proto: precision = %.3f usec (%d)",
4880                 sys_tick * 1e6, sys_precision);
4881         if (sys_fuzz < sys_tick) {
4882                 msyslog(LOG_NOTICE, "proto: fuzz beneath %.3f usec",
4883                         sys_fuzz * 1e6);
4884         }
4885 }
4886
4887
4888 /*
4889  * measure_tick_fuzz()
4890  *
4891  * measures the minimum time to read the clock (stored in sys_fuzz)
4892  * and returns the tick, the larger of the minimum increment observed
4893  * between successive clock readings and the time to read the clock.
4894  */
4895 double
4896 measure_tick_fuzz(void)
4897 {
4898         l_fp    minstep;        /* MINSTEP as l_fp */
4899         l_fp    val;            /* current seconds fraction */
4900         l_fp    last;           /* last seconds fraction */
4901         l_fp    ldiff;          /* val - last */
4902         double  tick;           /* computed tick value */
4903         double  diff;
4904         long    repeats;
4905         long    max_repeats;
4906         int     changes;
4907         int     i;              /* log2 precision */
4908
4909         tick = MAXSTEP;
4910         max_repeats = 0;
4911         repeats = 0;
4912         changes = 0;
4913         DTOLFP(MINSTEP, &minstep);
4914         get_systime(&last);
4915         for (i = 0; i < MAXLOOPS && changes < MINCHANGES; i++) {
4916                 get_systime(&val);
4917                 ldiff = val;
4918                 L_SUB(&ldiff, &last);
4919                 last = val;
4920                 if (L_ISGT(&ldiff, &minstep)) {
4921                         max_repeats = max(repeats, max_repeats);
4922                         repeats = 0;
4923                         changes++;
4924                         LFPTOD(&ldiff, diff);
4925                         tick = min(diff, tick);
4926                 } else {
4927                         repeats++;
4928                 }
4929         }
4930         if (changes < MINCHANGES) {
4931                 msyslog(LOG_ERR, "Fatal error: precision could not be measured (MINSTEP too large?)");
4932                 exit(1);
4933         }
4934
4935         if (0 == max_repeats) {
4936                 set_sys_fuzz(tick);
4937         } else {
4938                 set_sys_fuzz(tick / max_repeats);
4939         }
4940
4941         return tick;
4942 }
4943
4944
4945 void
4946 set_sys_tick_precision(
4947         double tick
4948         )
4949 {
4950         int i;
4951
4952         if (tick > 1.) {
4953                 msyslog(LOG_ERR,
4954                         "unsupported tick %.3f > 1s ignored", tick);
4955                 return;
4956         }
4957         if (tick < measured_tick) {
4958                 msyslog(LOG_ERR,
4959                         "proto: tick %.3f less than measured tick %.3f, ignored",
4960                         tick, measured_tick);
4961                 return;
4962         } else if (tick > measured_tick) {
4963                 trunc_os_clock = TRUE;
4964                 msyslog(LOG_NOTICE,
4965                         "proto: truncating system clock to multiples of %.9f",
4966                         tick);
4967         }
4968         sys_tick = tick;
4969
4970         /*
4971          * Find the nearest power of two.
4972          */
4973         for (i = 0; tick <= 1; i--)
4974                 tick *= 2;
4975         if (tick - 1 > 1 - tick / 2)
4976                 i++;
4977
4978         sys_precision = (s_char)i;
4979 }
4980
4981
4982 /*
4983  * init_proto - initialize the protocol module's data
4984  */
4985 void
4986 init_proto(void)
4987 {
4988         l_fp    dummy;
4989         int     i;
4990
4991         /*
4992          * Fill in the sys_* stuff.  Default is don't listen to
4993          * broadcasting, require authentication.
4994          */
4995         set_sys_leap(LEAP_NOTINSYNC);
4996         sys_stratum = STRATUM_UNSPEC;
4997         memcpy(&sys_refid, "INIT", 4);
4998         sys_peer = NULL;
4999         sys_rootdelay = 0;
5000         sys_rootdisp = 0;
5001         L_CLR(&sys_reftime);
5002         sys_jitter = 0;
5003         measure_precision();
5004         get_systime(&dummy);
5005         sys_survivors = 0;
5006         sys_manycastserver = 0;
5007         sys_bclient = 0;
5008         sys_bdelay = BDELAY_DEFAULT;    /*[Bug 3031] delay cutoff */
5009         sys_authenticate = 1;
5010         sys_stattime = current_time;
5011         orphwait = current_time + sys_orphwait;
5012         proto_clr_stats();
5013         for (i = 0; i < MAX_TTL; ++i)
5014                 sys_ttl[i] = (u_char)((i * 256) / MAX_TTL);
5015         sys_ttlmax = (MAX_TTL - 1);
5016         hardpps_enable = 0;
5017         stats_control = 1;
5018 }
5019
5020
5021 /*
5022  * proto_config - configure the protocol module
5023  */
5024 void
5025 proto_config(
5026         int     item,
5027         u_long  value,
5028         double  dvalue,
5029         sockaddr_u *svalue
5030         )
5031 {
5032         /*
5033          * Figure out what he wants to change, then do it
5034          */
5035         DPRINTF(2, ("proto_config: code %d value %lu dvalue %lf\n",
5036                     item, value, dvalue));
5037
5038         switch (item) {
5039
5040         /*
5041          * enable and disable commands - arguments are Boolean.
5042          */
5043         case PROTO_AUTHENTICATE: /* authentication (auth) */
5044                 sys_authenticate = value;
5045                 break;
5046
5047         case PROTO_BROADCLIENT: /* broadcast client (bclient) */
5048                 sys_bclient = (int)value;
5049                 if (sys_bclient == 0)
5050                         io_unsetbclient();
5051                 else
5052                         io_setbclient();
5053                 break;
5054
5055 #ifdef REFCLOCK
5056         case PROTO_CAL:         /* refclock calibrate (calibrate) */
5057                 cal_enable = value;
5058                 break;
5059 #endif /* REFCLOCK */
5060
5061         case PROTO_KERNEL:      /* kernel discipline (kernel) */
5062                 select_loop(value);
5063                 break;
5064
5065         case PROTO_MONITOR:     /* monitoring (monitor) */
5066                 if (value)
5067                         mon_start(MON_ON);
5068                 else {
5069                         mon_stop(MON_ON);
5070                         if (mon_enabled)
5071                                 msyslog(LOG_WARNING,
5072                                         "restrict: 'monitor' cannot be disabled while 'limited' is enabled");
5073                 }
5074                 break;
5075
5076         case PROTO_NTP:         /* NTP discipline (ntp) */
5077                 ntp_enable = value;
5078                 break;
5079
5080         case PROTO_MODE7:       /* mode7 management (ntpdc) */
5081                 ntp_mode7 = value;
5082                 break;
5083
5084         case PROTO_PPS:         /* PPS discipline (pps) */
5085                 hardpps_enable = value;
5086                 break;
5087
5088         case PROTO_FILEGEN:     /* statistics (stats) */
5089                 stats_control = value;
5090                 break;
5091
5092         /*
5093          * tos command - arguments are double, sometimes cast to int
5094          */
5095
5096         case PROTO_BCPOLLBSTEP: /* Broadcast Poll Backstep gate (bcpollbstep) */
5097                 sys_bcpollbstep = (u_char)dvalue;
5098                 break;
5099
5100         case PROTO_BEACON:      /* manycast beacon (beacon) */
5101                 sys_beacon = (int)dvalue;
5102                 break;
5103
5104         case PROTO_BROADDELAY:  /* default broadcast delay (bdelay) */
5105                 sys_bdelay = (dvalue ? dvalue : BDELAY_DEFAULT);
5106                 break;
5107
5108         case PROTO_CEILING:     /* stratum ceiling (ceiling) */
5109                 sys_ceiling = (int)dvalue;
5110                 break;
5111
5112         case PROTO_COHORT:      /* cohort switch (cohort) */
5113                 sys_cohort = (int)dvalue;
5114                 break;
5115
5116         case PROTO_FLOOR:       /* stratum floor (floor) */
5117                 sys_floor = (int)dvalue;
5118                 break;
5119
5120         case PROTO_MAXCLOCK:    /* maximum candidates (maxclock) */
5121                 sys_maxclock = (int)dvalue;
5122                 break;
5123
5124         case PROTO_MAXDIST:     /* select threshold (maxdist) */
5125                 sys_maxdist = dvalue;
5126                 break;
5127
5128         case PROTO_CALLDELAY:   /* modem call delay (mdelay) */
5129                 break;          /* NOT USED */
5130
5131         case PROTO_MINCLOCK:    /* minimum candidates (minclock) */
5132                 sys_minclock = (int)dvalue;
5133                 break;
5134
5135         case PROTO_MINDISP:     /* minimum distance (mindist) */
5136                 sys_mindisp = dvalue;
5137                 break;
5138
5139         case PROTO_MINSANE:     /* minimum survivors (minsane) */
5140                 sys_minsane = (int)dvalue;
5141                 break;
5142
5143         case PROTO_ORPHAN:      /* orphan stratum (orphan) */
5144                 sys_orphan = (int)dvalue;
5145                 break;
5146
5147         case PROTO_ORPHWAIT:    /* orphan wait (orphwait) */
5148                 orphwait -= sys_orphwait;
5149                 sys_orphwait = (int)dvalue;
5150                 orphwait += sys_orphwait;
5151                 break;
5152
5153         /*
5154          * Miscellaneous commands
5155          */
5156         case PROTO_MULTICAST_ADD: /* add group address */
5157                 if (svalue != NULL)
5158                         io_multicast_add(svalue);
5159                 sys_bclient = 1;
5160                 break;
5161
5162         case PROTO_MULTICAST_DEL: /* delete group address */
5163                 if (svalue != NULL)
5164                         io_multicast_del(svalue);
5165                 break;
5166
5167         /*
5168          * Peer_clear Early policy choices
5169          */
5170
5171         case PROTO_PCEDIGEST:   /* Digest */
5172                 peer_clear_digest_early = value;
5173                 break;
5174
5175         /*
5176          * Unpeer Early policy choices
5177          */
5178
5179         case PROTO_UECRYPTO:    /* Crypto */
5180                 unpeer_crypto_early = value;
5181                 break;
5182
5183         case PROTO_UECRYPTONAK: /* Crypto_NAK */
5184                 unpeer_crypto_nak_early = value;
5185                 break;
5186
5187         case PROTO_UEDIGEST:    /* Digest */
5188                 unpeer_digest_early = value;
5189                 break;
5190
5191         default:
5192                 msyslog(LOG_NOTICE,
5193                     "proto: unsupported option %d", item);
5194         }
5195 }
5196
5197
5198 /*
5199  * proto_clr_stats - clear protocol stat counters
5200  */
5201 void
5202 proto_clr_stats(void)
5203 {
5204         sys_stattime = current_time;
5205         sys_received = 0;
5206         sys_processed = 0;
5207         sys_newversion = 0;
5208         sys_oldversion = 0;
5209         sys_declined = 0;
5210         sys_restricted = 0;
5211         sys_badlength = 0;
5212         sys_badauth = 0;
5213         sys_limitrejected = 0;
5214         sys_kodsent = 0;
5215         sys_lamport = 0;
5216         sys_tsrounding = 0;
5217 }