+2001-03-01 Harlan Stenn <stenn@whimsy.udel.edu>
+
+ * ntpd/ntp_proto.c (transmit): hpoll cleanup. Call clock_select()
+ after calling poll_update, not before.
+ (receive): Call poll_update after crypto_recv if FLAG_SKEY.
+ (process_packet): Set peer->ppoll Later.
+ (poll_update): peer->hpoll sanity checking. Set peer->outdate,
+ not ->nextate, when burst > 0. MDF_ACAST cleanup.
+ (clock_select): Fix hpoll typo in call to poll_update().
+ * ntpd/ntp_crypto.c (crypto_xmit): tstamp's value is a function of
+ PUBKEY.
+ * include/ntp.h (clear_to_zero): #define value is a function of
+ AUTOKEY.
+ From: Dave Mills.
+
2001-02-28 Harlan Stenn <stenn@whimsy.udel.edu>
* ntpd/ntp_proto.c (transmit): Documentation/code update.
/*
* Variables used by authenticated client
*/
-#define clear_to_zero assoc
#ifdef AUTOKEY
+#define clear_to_zero assoc
associd_t assoc; /* peer association ID */
u_int32 crypto; /* peer status word */
#ifdef PUBKEY
struct value pubkey; /* public key */
u_char *keystr; /* public key file name */
#endif /* PUBKEY */
+#else /* AUTOKEY */
+#define clear_to_zero keyid
#endif /* AUTOKEY */
keyid_t keyid; /* current key ID */
keyid_t pkeyid; /* previous key ID */
else
hpoll++;
} else {
- hpoll = peer->maxpoll;
+ hpoll = sys_poll;
}
#endif /* AUTOKEY */
} else {
key_expire(peer);
#endif /* AUTOKEY */
}
- clock_select();
poll_update(peer, hpoll);
+ clock_select();
return;
}
if (peer->flags & FLAG_SKEY) {
peer->flash |= TEST10;
crypto_recv(peer, rbufp);
+ poll_update(peer, peer->hpoll);
if (hismode == MODE_SERVER) {
if (skeyid == peer->keyid)
peer->flash &= ~TEST10;
* Test for old, duplicate or unsynch packets (tests 1-3).
*/
peer->rec = *recv_ts;
- peer->ppoll = pkt->ppoll;
pmode = PKT_MODE(pkt->li_vn_mode);
pleap = PKT_LEAP(pkt->li_vn_mode);
pstratum = PKT_TO_STRATUM(pkt->stratum);
peer->leap = pleap;
peer->pmode = pmode;
peer->stratum = pstratum;
+ peer->ppoll = pkt->ppoll;
peer->precision = pkt->precision;
peer->rootdelay = p_del;
peer->rootdispersion = p_disp;
#ifdef AUTOKEY
oldpoll = peer->kpoll;
#endif /* AUTOKEY */
- if (hpoll > peer->maxpoll)
- peer->hpoll = peer->maxpoll;
- else if (hpoll < peer->minpoll)
- peer->hpoll = peer->minpoll;
+ if (peer->flags & FLAG_SYSPEER)
+ peer->hpoll = sys_poll;
else
peer->hpoll = hpoll;
+ if (peer->hpoll > peer->maxpoll)
+ peer->hpoll = peer->maxpoll;
+ else if (peer->hpoll < peer->minpoll)
+ peer->hpoll = peer->minpoll;
/*
* bit of adventure here. If during a burst and not timeout,
* randomize over the poll interval -1 to +2 seconds.
*/
if (peer->burst > 0) {
- if (peer->nextdate != current_time)
+ if (peer->outdate != current_time)
return;
if (peer->flags & FLAG_REFCLOCK)
peer->nextdate++;
peer->nextdate += RANDPOLL(BURST_INTERVAL2);
else
peer->nextdate += RANDPOLL(BURST_INTERVAL1);
+#if 0 /* xxxxx */
+ } else if (peer->crypto && (!(peer->flags & FLAG_AUTOKEY) ||
+ peer->cmmd)) {
+ peer->burst = 1;
+ peer->nextdate += RANDPOLL(BURST_INTERVAL2);
+#endif /* PUBKEY */
+ } else if (peer->cast_flags & MDF_ACAST) {
+ peer->kpoll = peer->hpoll + 3;
+ peer->nextdate = peer->outdate + RANDPOLL(peer->kpoll);
} else {
peer->kpoll = max(min(peer->ppoll, peer->hpoll),
peer->minpoll);
peer = peer_list[i];
peer->status = CTL_PST_SEL_SYNCCAND;
peer->flags |= FLAG_SYSPEER;
- poll_update(peer, sys_poll);
+ poll_update(peer, peer->hpoll);
if (peer->stratum == peer_list[0]->stratum) {
leap_consensus |= peer->leap;
if (peer->refclktype == REFCLK_ATOM_PPS &&