]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
Merge Dave's changes into ipV6.
authorHarlan Stenn <stenn@ntp.org>
Sat, 13 Jul 2002 01:37:25 +0000 (21:37 -0400)
committerHarlan Stenn <stenn@ntp.org>
Sat, 13 Jul 2002 01:37:25 +0000 (21:37 -0400)
bk: 3d2f8455IYPT4jyI4qbwurzYb6dUMw

1  2 
include/ntp.h
ntpd/ntp_crypto.c
ntpd/ntp_peer.c
ntpd/ntp_proto.c

diff --cc include/ntp.h
Simple merge
Simple merge
diff --cc ntpd/ntp_peer.c
Simple merge
index d32520dc76c6bea946617d51d10900233e2bc907,a98573552ee20c8c2da5ea4134f6956a2b3f7d82..9c5cd726553a6ee0b3898fc39014e3343ae84c2e
@@@ -169,90 -180,101 +181,101 @@@ transmit
                                return;
                        }
                }
-               oreach = peer->reach;
-               peer->reach <<= 1;
-               peer->hyst *= HYST_TC;
-               if (peer->reach == 0) {
+               if (peer->burst == 0) {
+                       u_char oreach;
  
-                       /*
-                        * If this association has become unreachable,
-                        * clear it and raise a trap.
-                        */
-                       if (oreach != 0) {
-                               report_event(EVNT_UNREACH, peer);
-                               peer->timereachable = current_time;
-                               if (peer->flags & FLAG_CONFIG) {
-                                       peer_clear(peer, "IDLE");
-                               } else {
-                                       unpeer(peer);
-                                       return;
+                       oreach = peer->reach;
+                       peer->reach <<= 1;
+                       peer->hyst *= HYST_TC;
+                       if (peer->reach == 0) {
+                               /*
+                                * If this association has become
+                                * unreachable, clear it and raise a
+                                * trap.
+                                */
+                               if (oreach != 0) {
+                                       report_event(EVNT_UNREACH,
+                                           peer);
+                                       peer->timereachable =
+                                           current_time;
+                                       if (peer->flags & FLAG_CONFIG) {
+                                               peer_clear(peer,
+                                                   "INIT");
+                                       } else {
+                                               unpeer(peer);
+                                               return;
+                                       }
+                               }
+                               if (peer->flags & FLAG_IBURST)
+                                       peer->burst = NTP_BURST;
+                       } else {
 -
+                               /*
+                                * Here the peer is reachable. If it has
+                                * not been heard for three consecutive
+                                * polls, stuff the clock filter. Next,
+                                * determine the poll interval. If the
+                                * peer is a synchronization candidate,
+                                * use the system poll interval. If we
+                                * cannot synchronize to the peer
+                                * increase it by one. 
+                                */
+                               if (!(peer->reach & 0x07)) {
+                                       clock_filter(peer, 0., 0.,
+                                           MAXDISPERSE);
+                                       clock_select();
+                               }
 -                              if ((peer->stratum > 1 && peer->refid ==
 -                                  peer->dstadr->sin.sin_addr.s_addr)
 -                                  || peer->stratum == STRATUM_UNSPEC)
++                              if ((peer->stratum > 1 &&
++                                  peer->dstadr->sin.ss_family == AF_INET ?
++                                  peer->refid == GET_INADDR(peer->dstadr->sin) :
++                                  peer->refid == host_refid) ||
++                                  peer->stratum == STRATUM_UNSPEC)
+                                       hpoll++;
+                               else
+                                       hpoll = sys_poll;
+                               if (peer->flags & FLAG_BURST)
+                                       peer->burst = NTP_BURST;
                                }
-                       }
-                       if (peer->flags & FLAG_IBURST)
-                               peer->burst = NTP_BURST;
                } else {
-                       /*
-                        * Here the peer is reachable. If it has not
-                        * been heard for three consecutive polls, stuff
-                        * the clock filter. Next, determine the poll
-                        * interval. If the peer is a synchronization
-                        * candidate, use the system poll interval. If
-                        * we cannot synchronize to the peer increase it
-                        * by one. 
-                        */
-                       if (!(peer->reach & 0x07)) {
-                               clock_filter(peer, 0., 0., MAXDISPERSE);
-                               clock_select();
-                       }
-                       if ((peer->stratum > 1 &&
-                           peer->dstadr->sin.ss_family == AF_INET ?
-                           peer->refid == GET_INADDR(peer->dstadr->sin) :
-                           peer->refid == host_refid) ||
-                           peer->stratum == STRATUM_UNSPEC)
-                               hpoll++;
-                       else
-                               hpoll = sys_poll;
-                       if (peer->flags & FLAG_BURST)
-                               peer->burst = NTP_BURST;
-               }
-       } else {
-               peer->burst--;
-               if (peer->burst == 0) {
-                       /*
-                        * If a broadcast client at this point, the
-                        * burst has concluded, so we switch to client
-                        * mode and purge the keylist, since no further
-                        * transmissions will be made.
-                        */
-                       if (peer->cast_flags & MDF_BCLNT) {
-                               peer->hmode = MODE_BCLIENT;
+                       peer->burst--;
+                       if (peer->burst == 0) {
 -
+                               /*
+                                * If a broadcast client at this point,
+                                * the burst has concluded, so we switch
+                                * to client mode and purge the keylist,
+                                * since no further transmissions will
+                                * be made.
+                                */
+                               if (peer->cast_flags & MDF_BCLNT) {
+                                       peer->hmode = MODE_BCLIENT;
  #ifdef OPENSSL
-                               key_expire(peer);
+                                       key_expire(peer);
  #endif /* OPENSSL */
-                       }
-                       poll_update(peer, hpoll);
-                       clock_select();
+                               }
+                               poll_update(peer, hpoll);
+                               clock_select();
  
-                       /*
-                        * If ntpdate mode and the clock has not been
-                        * set and all peers have completed the burst,
-                        * we declare a successful failure.
-                        */
-                       if (mode_ntpdate) {
-                               peer_ntpdate--;
-                               if (peer_ntpdate > 0)
-                                       return;
-                               NLOG(NLOG_SYNCEVENT | NLOG_SYSEVENT)
-                                   msyslog(LOG_NOTICE,
-                                   "no reply; clock not set");
-                               printf(
-                                   "ntpd: no reply; clock not set\n");
-                               exit(0);
+                               /*
+                                * If ntpdate mode and the clock has not
+                                * been set and all peers have completed
+                                * the burst, we declare a successful
+                                * failure.
+                                */
+                               if (mode_ntpdate) {
+                                       peer_ntpdate--;
+                                       if (peer_ntpdate > 0)
+                                               return;
+                                       NLOG(NLOG_SYNCEVENT |
+                                           NLOG_SYSEVENT)
+                                           msyslog(LOG_NOTICE,
+                                           "no reply; clock not set");
+                                       printf(
+                                           "ntpd: no reply; clock not set\n");
+                                       exit(0);
+                               }
+                               return;
                        }
-                       return;
                }
        }
        peer->outdate = current_time;
@@@ -725,16 -745,11 +746,19 @@@ receive
                if (crypto_flags) {
                        if ((rval = crypto_recv(peer, rbufp)) !=
                            XEVNT_OK) {
+                               struct sockaddr_in mskadr_sin;
                                unpeer(peer);
 -                              mskadr_sin.sin_addr.s_addr = 0xffffffff;
+                               sys_restricted++;
 +                              memset((char *)&mskadr_sin, 0,
 +                                  sizeof(struct sockaddr_storage));
 +                              mskadr_sin.ss_family =
 +                                  rbufp->recv_srcadr.ss_family;
 +                              if (mskadr_sin.ss_family == AF_INET)
 +                                      GET_INADDR(mskadr_sin) = 0xffffffff;
 +                              else
 +                                      memset(&GET_INADDR6(mskadr_sin), 0xff,
 +                                          sizeof(struct in6_addr));
                                hack_restrict(RESTRICT_FLAGS,
                                    &rbufp->recv_srcadr, &mskadr_sin,
                                    0, RES_DONTTRUST | RES_TIMEOUT);
@@@ -1347,13 -1307,10 +1316,11 @@@ clock_update(void
         */
        default:
                sys_stratum = sys_peer->stratum + 1;
-               if (sys_stratum == 1)
+               if (sys_stratum == 1 || sys_stratum == STRATUM_UNSPEC)
                        sys_refid = sys_peer->refid;
-               else if (sys_stratum == STRATUM_UNSPEC)
-                       memcpy(&sys_refid, "UNSP", 4);
                else
 -                      sys_refid = sys_peer->srcadr.sin_addr.s_addr;
 +                      sys_refid = sys_peer->srcadr.ss_family == AF_INET ?
 +                          GET_INADDR(sys_peer->srcadr) : host_refid;
                sys_reftime = sys_peer->rec;
                sys_rootdelay = sys_peer->rootdelay + sys_peer->delay;
                sys_leap = leap_consensus;