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