Lines Matching refs:peer

98 	struct peer *	peer;  member
122 struct peer *sys_peer; /* current peer */
210 nak_code valid_NAK (struct peer *peer, struct recvbuf *rbufp, u_char hismode);
211 static double root_distance (struct peer *);
213 static void peer_xmit (struct peer *);
215 static void pool_xmit (struct peer *);
216 static void clock_update (struct peer *);
219 static int local_refid (struct peer *);
220 static int peer_unfit (struct peer *);
299 struct peer *peer, in valid_NAK() argument
352 if (!peer || (!peer->keyid && !(peer->flags & FLAG_SKEY))) { in valid_NAK()
360 if (FLAG_LOOPNONCE & peer->flags) { in valid_NAK()
361 myorg = &peer->nonce; in valid_NAK()
363 if (peer->flip > 0) { in valid_NAK()
364 myorg = &peer->borg; in valid_NAK()
366 myorg = &peer->aorg; in valid_NAK()
390 struct peer *peer /* peer structure pointer */ in transmit() argument
401 hpoll = peer->hpoll; in transmit()
407 if (peer->outdate > peer->timelastrec && !peer->reach) in transmit()
408 peer->ppoll = peer->maxpoll; in transmit()
414 if (peer->cast_flags & (MDF_BCAST | MDF_MCAST)) { in transmit()
415 peer->outdate = current_time; in transmit()
416 poll_update(peer, hpoll, 0); in transmit()
418 peer_xmit(peer); in transmit()
435 if (peer->cast_flags & MDF_ACAST) { in transmit()
436 peer->outdate = current_time; in transmit()
437 poll_update(peer, hpoll, 0); in transmit()
438 if (peer->unreach > sys_beacon) { in transmit()
439 peer->unreach = 0; in transmit()
440 peer->ttl = 0; in transmit()
441 peer_xmit(peer); in transmit()
444 if (peer->ttl < sys_ttlmax) in transmit()
445 peer->ttl++; in transmit()
446 peer_xmit(peer); in transmit()
448 peer->unreach++; in transmit()
464 if (peer->cast_flags & MDF_POOL) { in transmit()
465 peer->outdate = current_time; in transmit()
466 poll_update(peer, hpoll, 0); in transmit()
470 pool_xmit(peer); in transmit()
475 if (MDF_PCLNT & peer->cast_flags) { in transmit()
476 if ( (IS_IPV6(&peer->srcadr) && !nonlocal_v6_addr_up) in transmit()
477 || (IS_IPV4(&peer->srcadr) && !nonlocal_v4_addr_up)) { in transmit()
478 unpeer(peer); in transmit()
488 if (peer->burst == 0) { in transmit()
496 oreach = peer->reach; in transmit()
497 peer->outdate = current_time; in transmit()
498 peer->unreach++; in transmit()
499 peer->reach <<= 1; in transmit()
500 if (!peer->reach) { in transmit()
507 clock_filter(peer, 0., 0., MAXDISPERSE); in transmit()
509 peer_unfit(peer); in transmit()
510 report_event(PEVNT_UNREACH, peer, NULL); in transmit()
512 if ( (peer->flags & FLAG_IBURST) in transmit()
513 && peer->retry == 0) in transmit()
514 peer->retry = NTP_RETRY; in transmit()
525 if (!(peer->flags & FLAG_PREEMPT)) in transmit()
526 peer->unreach = 0; in transmit()
527 if ( (peer->flags & FLAG_BURST) in transmit()
528 && peer->retry == 0 in transmit()
529 && !peer_unfit(peer)) in transmit()
530 peer->retry = NTP_RETRY; in transmit()
541 if (peer->unreach >= NTP_UNREACH) { in transmit()
544 if (!(peer->flags & (FLAG_CONFIG | FLAG_PREEMPT))) { in transmit()
545 report_event(PEVNT_RESTART, peer, "timeout"); in transmit()
546 peer_clear(peer, "TIME"); in transmit()
547 unpeer(peer); in transmit()
550 if ( (peer->flags & FLAG_PREEMPT) in transmit()
552 && score_all(peer)) { in transmit()
553 report_event(PEVNT_RESTART, peer, "timeout"); in transmit()
554 peer_clear(peer, "TIME"); in transmit()
555 unpeer(peer); in transmit()
560 peer->burst--; in transmit()
561 if (peer->burst == 0) { in transmit()
581 if (peer->retry > 0) in transmit()
582 peer->retry--; in transmit()
587 poll_update(peer, hpoll, (peer->hmode == MODE_CLIENT)); in transmit()
588 if (peer->hmode != MODE_BCLIENT) in transmit()
589 peer_xmit(peer); in transmit()
630 register struct peer *peer; /* peer structure pointer */ in receive() local
649 struct peer *peer2; /* aux peer structure pointer */ in receive()
1001 peer = findpeer(rbufp, hismode, &retcode); in receive()
1034 crypto_nak_test = valid_NAK(peer, rbufp, hismode); in receive()
1040 report_event(PEVNT_AUTH, peer, "Invalid_NAK"); in receive()
1041 if (0 != peer) { in receive()
1042 peer->badNAK++; in receive()
1161 } else if (peer == NULL) { in receive()
1166 pkeyid = peer->pcookie; in receive()
1227 if (0 != peer && 0 != peer->keyid) { in receive()
1235 if (peer->keyid != skeyid) { in receive()
1237 peer->keyid, skeyid, in receive()
1498 peer = newpeer(&rbufp->recv_srcadr, NULL, rbufp->dstadr, in receive()
1503 if (NULL == peer) { in receive()
1619 peer = newpeer(&rbufp->recv_srcadr, NULL, match_ep, in receive()
1623 if (NULL == peer) { in receive()
1629 peer->delay = sys_bdelay; in receive()
1630 peer->bxmt = p_xmt; in receive()
1643 peer = newpeer(&rbufp->recv_srcadr, NULL, match_ep, in receive()
1648 if (NULL == peer) { in receive()
1653 peer->bxmt = p_xmt; in receive()
1656 crypto_recv(peer, rbufp); in receive()
1765 if ((peer = newpeer(&rbufp->recv_srcadr, NULL, rbufp->dstadr, in receive()
1787 if (group_test(groupname, peer->ident)) { in receive()
1800 (current_time - peer->timelastrec), in receive()
1801 peer->ppoll, (1 << peer->ppoll) in receive()
1813 if (pkt->ppoll != peer->ppoll) { in receive()
1816 peer->ppoll, pkt->ppoll); in receive()
1820 if ( pkt->ppoll < peer->minpoll in receive()
1821 || pkt->ppoll > peer->maxpoll) { in receive()
1824 peer->minpoll, peer->maxpoll); in receive()
1839 if (FLAG_BC_VOL & peer->flags) in receive()
1841 if ((current_time - peer->timereceived) < deadband) { in receive()
1844 (current_time - peer->timereceived), in receive()
1879 if (L_ISZERO(&peer->bxmt)) { in receive()
1883 L_SUB(&tdiff, &peer->bxmt); in receive()
1886 && (current_time - peer->timereceived) < deadband) in receive()
1890 peer->bxmt.l_ui, peer->bxmt.l_uf, in receive()
1898 peer->timelastrec = current_time; in receive()
1933 && ( ((peer->flags & FLAG_SKEY) && skeyid <= NTP_MAXKEY) in receive()
1934 || (!(peer->flags & FLAG_SKEY) && skeyid > NTP_MAXKEY))) { in receive()
1941 peer->received++; in receive()
1942 peer->flash &= ~PKT_TEST_MASK; in receive()
1943 if (peer->flags & FLAG_XBOGUS) { in receive()
1944 peer->flags &= ~FLAG_XBOGUS; in receive()
1945 peer->flash |= TEST3; in receive()
1960 peer->flash |= TEST3; /* unsynch */ in receive()
1962 peer->bogusorg++; /* for TEST2 or TEST3 */ in receive()
1965 ntoa(&peer->srcadr)); in receive()
1974 } else if ( ((FLAG_LOOPNONCE & peer->flags) && L_ISEQU(&peer->nonce, &p_xmt)) in receive()
1975 || (!(FLAG_LOOPNONCE & peer->flags) && L_ISEQU(&peer->xmt, &p_xmt)) in receive()
1978 peer->flash |= TEST1; /* duplicate */ in receive()
1979 peer->oldpkt++; in receive()
1998 hisstratum, ntoa(&peer->srcadr)); in receive()
2019 peer->bogusorg++; in receive()
2022 ntoa(&peer->srcadr)); in receive()
2028 peer->bogusorg++; in receive()
2031 ntoa(&peer->srcadr)); in receive()
2036 if (peer->flip == 0 && !L_ISEQU(&p_org, &peer->aorg)) { in receive()
2037 peer->bogusorg++; in receive()
2041 ntoa(&peer->srcadr), in receive()
2042 peer->aorg.l_ui, peer->aorg.l_uf); in receive()
2044 } else if (peer->flip == 1 && !L_ISEQU(&p_org, &peer->borg)) { in receive()
2045 peer->bogusorg++; in receive()
2049 ntoa(&peer->srcadr), in receive()
2050 peer->borg.l_ui, peer->borg.l_uf); in receive()
2079 DEBUG_INSIST(0 == (FLAG_LOOPNONCE & peer->flags)); in receive()
2083 ntoa(&peer->srcadr), 1u << pkt->ppoll); in receive()
2087 ntoa(&peer->srcadr)); in receive()
2089 } else if (peer->flip == 0) { in receive()
2097 L_CLR(&peer->aorg); in receive()
2114 peer->bogusorg++; in receive()
2115 peer->flash |= TEST2; /* bogus */ in receive()
2125 action, hm_str, ntoa(&peer->srcadr), in receive()
2127 } else if ( L_ISZERO(&peer->aorg) && MODE_CLIENT != hismode in receive()
2128 && !memcmp("STEP", &peer->refid, 4)) { in receive()
2130 } else if (!L_ISEQU(&p_org, &peer->aorg)) { in receive()
2133 peer->bogusorg++; in receive()
2134 peer->flash |= TEST2; /* bogus */ in receive()
2138 peer->aorg.l_ui, peer->aorg.l_uf, in receive()
2139 hm_str, ntoa(&peer->srcadr)); in receive()
2140 if ( !L_ISZERO(&peer->dst) in receive()
2141 && L_ISEQU(&p_org, &peer->dst)) { in receive()
2144 peer->flip = 1; in receive()
2145 report_event(PEVNT_XLEAVE, peer, NULL); in receive()
2149 hm_str, ntoa(&peer->srcadr)); in receive()
2153 L_CLR(&peer->aorg); in receive()
2162 || L_ISZERO(&peer->dst)) { in receive()
2163 peer->flash |= TEST3; /* unsynch */ in receive()
2170 } else if ( !L_ISZERO(&peer->dst) in receive()
2171 && !L_ISEQU(&p_org, &peer->dst)) { in receive()
2173 peer->bogusorg++; in receive()
2174 peer->flags |= FLAG_XBOGUS; in receive()
2175 peer->flash |= TEST2; /* bogus */ in receive()
2189 report_event(PEVNT_AUTH, peer, "crypto_NAK"); in receive()
2190 peer->flash |= TEST5; /* bad auth */ in receive()
2191 peer->badauth++; in receive()
2192 if (peer->flags & FLAG_PREEMPT) { in receive()
2194 unpeer(peer); in receive()
2200 if (peer->crypto) { in receive()
2201 peer_clear(peer, "AUTH"); in receive()
2215 } else if (!AUTH(peer->keyid || has_mac || in receive()
2218 if (peer->flash & PKT_TEST_MASK) { in receive()
2221 ntoa(&peer->srcadr)); in receive()
2225 report_event(PEVNT_AUTH, peer, "digest"); in receive()
2226 peer->flash |= TEST5; /* bad auth */ in receive()
2227 peer->badauth++; in receive()
2232 if (peer->flags & FLAG_PREEMPT) { in receive()
2234 unpeer(peer); in receive()
2238 else if (peer_clear_digest_early && peer->crypto) { in receive()
2239 peer_clear(peer, "AUTH"); in receive()
2263 if (!(peer->flags & FLAG_XB)) { in receive()
2266 ntoa(&peer->srcadr)); in receive()
2267 peer->flags |= FLAG_XB; in receive()
2268 peer->aorg = p_xmt; in receive()
2269 peer->borg = rbufp->recv_time; in receive()
2270 report_event(PEVNT_XLEAVE, peer, NULL); in receive()
2273 } else if (peer->flags & FLAG_XB) { in receive()
2276 ntoa(&peer->srcadr)); in receive()
2277 peer->flags &= ~FLAG_XB; in receive()
2282 is_authentic, ntoa(&peer->srcadr)); in receive()
2289 peer->bxmt = p_xmt; in receive()
2296 if (peer->flip == 0) { in receive()
2298 peer->rec = p_xmt; in receive()
2299 peer->dst = rbufp->recv_time; in receive()
2301 peer->xmt = p_xmt; in receive()
2328 peer->ppoll = max(peer->minpoll, pkt->ppoll); in receive()
2330 peer->selbroken++; /* Increment the KoD count */ in receive()
2331 report_event(PEVNT_RATE, peer, NULL); in receive()
2332 if (pkt->ppoll > peer->minpoll) in receive()
2333 peer->minpoll = peer->ppoll; in receive()
2334 peer->burst = peer->retry = 0; in receive()
2335 peer->throttle = (NTP_SHIFT + 1) * (1 << peer->minpoll); in receive()
2336 poll_update(peer, pkt->ppoll, 0); in receive()
2340 peer->selbroken++; /* Increment the KoD count */ in receive()
2369 && !authistrustedip(skeyid, &peer->srcadr)) { in receive()
2370 report_event(PEVNT_AUTH, peer, "authIP"); in receive()
2371 peer->badauth++; in receive()
2388 hismode, ntoa(&peer->srcadr)); in receive()
2397 peer->timereceived = current_time; in receive()
2398 peer->timelastrec = current_time; in receive()
2400 peer->flags |= FLAG_AUTHENTIC; in receive()
2402 peer->flags &= ~FLAG_AUTHENTIC; in receive()
2428 if (peer->flags & FLAG_SKEY) { in receive()
2433 ap = (struct autokey *)peer->recval.ptr; in receive()
2438 peer->flash |= TEST8; in receive()
2439 rval = crypto_recv(peer, rbufp); in receive()
2441 peer->unreach = 0; in receive()
2444 report_event(PEVNT_RESTART, peer, in receive()
2446 peer_clear(peer, "CRYP"); in receive()
2447 peer->flash |= TEST9; /* bad crypt */ in receive()
2448 if (peer->flags & FLAG_PREEMPT) { in receive()
2450 unpeer(peer); in receive()
2462 if (skeyid == peer->keyid) in receive()
2463 peer->flash &= ~TEST8; in receive()
2470 } else if (!(peer->flash & TEST8)) { in receive()
2471 peer->pkeyid = skeyid; in receive()
2487 if ( tkeyid == peer->pkeyid in receive()
2489 peer->flash &= ~TEST8; in receive()
2490 peer->pkeyid = skeyid; in receive()
2495 peer->crypto &= in receive()
2503 if (peer->flash & TEST8) in receive()
2504 report_event(PEVNT_AUTH, peer, "keylist"); in receive()
2506 if (!(peer->crypto & CRYPTO_FLAG_PROV)) /* test 9 */ in receive()
2507 peer->flash |= TEST8; /* bad autokey */ in receive()
2514 if (current_time > peer->refresh) { in receive()
2515 report_event(PEVNT_RESTART, peer, in receive()
2517 peer_clear(peer, "TIME"); in receive()
2528 process_packet(peer, pkt, rbufp->recv_length); in receive()
2530 if ((~TEST3 & peer->flash) & PKT_TEST_MASK) { in receive()
2538 poll_update(peer, peer->hpoll, (peer->hmode == MODE_CLIENT)); in receive()
2544 if (peer->flip != 0) { in receive()
2545 peer->rec = p_rec; in receive()
2546 peer->dst = rbufp->recv_time; in receive()
2547 if (peer->nextdate - current_time < (1U << min(peer->ppoll, in receive()
2548 peer->hpoll)) / 2) in receive()
2549 peer->nextdate++; in receive()
2551 peer->nextdate--; in receive()
2564 register struct peer *peer, in process_packet() argument
2596 peer->flash |= TEST6; /* bad synch or strat */ in process_packet()
2598 peer->flash |= TEST7; /* bad header */ in process_packet()
2605 if (peer->flash & PKT_TEST_MASK) { in process_packet()
2606 peer->seldisptoolarge++; in process_packet()
2608 peer->flash)); in process_packet()
2617 peer->processed++; in process_packet()
2622 record_raw_stats(&peer->srcadr, in process_packet()
2623 peer->dstadr ? &peer->dstadr->sin : NULL, in process_packet()
2624 &p_org, &p_rec, &p_xmt, &peer->dst, in process_packet()
2628 peer->leap = pleap; in process_packet()
2629 peer->stratum = min(pstratum, STRATUM_UNSPEC); in process_packet()
2630 peer->pmode = pmode; in process_packet()
2631 peer->precision = pkt->precision; in process_packet()
2632 peer->rootdelay = p_del; in process_packet()
2633 peer->rootdisp = p_disp; in process_packet()
2634 peer->refid = pkt->refid; /* network byte order */ in process_packet()
2635 peer->reftime = p_reftime; in process_packet()
2642 if (peer->retry > 0) { in process_packet()
2643 peer->retry = 0; in process_packet()
2644 if (peer->reach) in process_packet()
2645 peer->burst = min(1 << (peer->hpoll - in process_packet()
2646 peer->minpoll), NTP_SHIFT) - 1; in process_packet()
2648 peer->burst = NTP_IBURST - 1; in process_packet()
2649 if (peer->burst > 0) in process_packet()
2650 peer->nextdate = current_time; in process_packet()
2657 if (!peer->reach) { in process_packet()
2658 report_event(PEVNT_REACH, peer, NULL); in process_packet()
2659 peer->timereachable = current_time; in process_packet()
2661 peer->reach |= 1; in process_packet()
2695 if (peer->flip != 0) { in process_packet()
2697 L_SUB(&ci, &peer->dst); in process_packet()
2700 if (peer->flip > 0) in process_packet()
2701 L_SUB(&ci, &peer->borg); in process_packet()
2703 L_SUB(&ci, &peer->aorg); in process_packet()
2708 mprintf_event(PEVNT_XERR, peer, in process_packet()
2716 } else if (peer->pmode == MODE_BROADCAST) { in process_packet()
2722 if (peer->flags & FLAG_XB) { in process_packet()
2724 L_SUB(&ci, &peer->aorg); in process_packet()
2727 L_SUB(&ci, &peer->borg); in process_packet()
2729 peer->aorg = p_xmt; in process_packet()
2730 peer->borg = peer->dst; in process_packet()
2733 if (FLAG_BC_VOL & peer->flags) in process_packet()
2735 mprintf_event(PEVNT_XERR, peer, in process_packet()
2741 peer->xleave = t34; in process_packet()
2749 L_SUB(&ci, &peer->dst); in process_packet()
2764 if (FLAG_BC_VOL & peer->flags) { in process_packet()
2765 peer->flags &= ~FLAG_BC_VOL; in process_packet()
2766 peer->delay = fabs(peer->offset - p_offset) * 2; in process_packet()
2768 peer->delay)); in process_packet()
2769 if (peer->delay > fabs(sys_bdelay)) { in process_packet()
2772 unpeer(peer); in process_packet()
2776 peer->nextdate = current_time + (1u << peer->ppoll) - 2u; in process_packet()
2777 p_del = peer->delay; in process_packet()
2788 L_SUB(&ci, &peer->dst); in process_packet()
2797 p_disp = LOGTOD(sys_precision) + LOGTOD(peer->precision) + in process_packet()
2808 if (peer->t21_last > 0 && peer->t34_bytes > 0) { in process_packet()
2809 itemp = peer->t21_bytes - peer->t21_last; in process_packet()
2811 etemp = t21 - peer->t21; in process_packet()
2815 peer->r21 = ftemp; in process_packet()
2818 itemp = len - peer->t34_bytes; in process_packet()
2820 etemp = -t34 - peer->t34; in process_packet()
2824 peer->r34 = ftemp; in process_packet()
2836 peer->t21 = t21; in process_packet()
2837 peer->t21_last = peer->t21_bytes; in process_packet()
2838 peer->t34 = -t34; in process_packet()
2839 peer->t34_bytes = len; in process_packet()
2840 DPRINTF(2, ("packet: t21 %.9lf %d t34 %.9lf %d\n", peer->t21, in process_packet()
2841 peer->t21_bytes, peer->t34, peer->t34_bytes)); in process_packet()
2842 if (peer->r21 > 0 && peer->r34 > 0 && p_del > 0) { in process_packet()
2843 if (peer->pmode != MODE_BROADCAST) in process_packet()
2844 td = (peer->r34 / (peer->r21 + peer->r34) - in process_packet()
2859 p_del, peer->r21 / 1e3, peer->r34 / 1e3, in process_packet()
2867 clock_filter(peer, p_offset + peer->bias, p_del, p_disp); in process_packet()
2874 if ( (FLAG_BC_VOL & peer->flags) in process_packet()
2875 && MODE_CLIENT == peer->hmode in process_packet()
2876 && !(TEST11 & peer_unfit(peer))) { /* distance exceeded */ in process_packet()
2878 if (peer->flags & FLAG_SKEY) { in process_packet()
2879 if (!(~peer->crypto & CRYPTO_FLAG_ALL)) in process_packet()
2880 peer->hmode = MODE_BCLIENT; in process_packet()
2882 peer->hmode = MODE_BCLIENT; in process_packet()
2885 peer->hmode = MODE_BCLIENT; in process_packet()
2896 struct peer *peer /* peer structure pointer */ in clock_update() argument
2909 sys_peer = peer; in clock_update()
2910 sys_epoch = peer->epoch; in clock_update()
2911 if (sys_poll < peer->minpoll) in clock_update()
2912 sys_poll = peer->minpoll; in clock_update()
2913 if (sys_poll > peer->maxpoll) in clock_update()
2914 sys_poll = peer->maxpoll; in clock_update()
2915 poll_update(peer, sys_poll, 0); in clock_update()
2916 sys_stratum = min(peer->stratum + 1, STRATUM_UNSPEC); in clock_update()
2917 if ( peer->stratum == STRATUM_REFCLOCK in clock_update()
2918 || peer->stratum == STRATUM_UNSPEC) in clock_update()
2919 sys_refid = peer->refid; in clock_update()
2921 sys_refid = addr2refid(&peer->srcadr); in clock_update()
2940 dtemp = peer->rootdisp in clock_update()
2941 + peer->disp in clock_update()
2943 + clock_phi * (current_time - peer->update) in clock_update()
2953 sys_rootdelay = peer->delay + peer->rootdelay; in clock_update()
2961 sys_reftime = peer->dst; in clock_update()
2964 current_time, peer->epoch, peer->associd)); in clock_update()
2970 switch (local_clock(peer, sys_offset)) { in clock_update()
3076 struct peer *peer, /* peer structure pointer */ in poll_update() argument
3093 hpoll = max(min(peer->maxpoll, mpoll), peer->minpoll); in poll_update()
3101 if ((peer->flags & FLAG_SKEY) && hpoll != peer->hpoll) in poll_update()
3102 key_expire(peer); in poll_update()
3104 peer->hpoll = hpoll; in poll_update()
3123 utemp = current_time + max(peer->throttle - (NTP_SHIFT - 1) * in poll_update()
3124 (1 << peer->minpoll), ntp_minpkt); in poll_update()
3130 limit += peer->outdate; in poll_update()
3134 if (peer->burst > 0) { in poll_update()
3135 if (peer->nextdate > current_time) in poll_update()
3138 else if (peer->flags & FLAG_REFCLOCK) in poll_update()
3139 peer->nextdate = current_time + RESP_DELAY; in poll_update()
3142 peer->nextdate = utemp; in poll_update()
3149 } else if (peer->cmmd != NULL) { in poll_update()
3150 if (peer->nextdate > current_time) { in poll_update()
3151 if (peer->nextdate + ntp_minpkt != utemp) in poll_update()
3152 peer->nextdate = utemp; in poll_update()
3154 peer->nextdate = utemp; in poll_update()
3167 if (peer->retry > 0) in poll_update()
3168 hpoll = peer->minpoll; in poll_update()
3170 hpoll = min(peer->ppoll, peer->hpoll); in poll_update()
3172 if (peer->flags & FLAG_REFCLOCK) in poll_update()
3178 next += peer->outdate; in poll_update()
3203 peer->nextdate = next; in poll_update()
3205 peer->nextdate = utemp; in poll_update()
3206 if (peer->throttle > (1 << peer->minpoll)) in poll_update()
3207 peer->nextdate += ntp_minpkt; in poll_update()
3211 if (peer->nextdate > limit) { in poll_update()
3213 limit, peer->nextdate)); in poll_update()
3214 peer->nextdate = limit; in poll_update()
3217 current_time, ntoa(&peer->srcadr), peer->hpoll, in poll_update()
3218 peer->burst, peer->retry, peer->throttle, in poll_update()
3219 utemp - current_time, peer->nextdate - in poll_update()
3230 struct peer *peer, /* peer structure */ in peer_clear() argument
3236 l_fp bxmt = peer->bxmt; /* bcast clients retain this! */ in peer_clear()
3248 key_expire(peer); in peer_clear()
3249 if (peer->iffval != NULL) in peer_clear()
3250 BN_free(peer->iffval); in peer_clear()
3251 value_free(&peer->cookval); in peer_clear()
3252 value_free(&peer->recval); in peer_clear()
3253 value_free(&peer->encrypt); in peer_clear()
3254 value_free(&peer->sndval); in peer_clear()
3255 if (peer->cmmd != NULL) in peer_clear()
3256 free(peer->cmmd); in peer_clear()
3257 if (peer->subject != NULL) in peer_clear()
3258 free(peer->subject); in peer_clear()
3259 if (peer->issuer != NULL) in peer_clear()
3260 free(peer->issuer); in peer_clear()
3266 memset(CLEAR_TO_ZERO(peer), 0, LEN_CLEAR_TO_ZERO(peer)); in peer_clear()
3267 peer->ppoll = peer->maxpoll; in peer_clear()
3268 peer->hpoll = peer->minpoll; in peer_clear()
3269 peer->disp = MAXDISPERSE; in peer_clear()
3270 peer->flash = peer_unfit(peer); in peer_clear()
3271 peer->jitter = LOGTOD(sys_precision); in peer_clear()
3274 if (peer->hmode == MODE_BCLIENT) in peer_clear()
3275 peer->bxmt = bxmt; in peer_clear()
3280 if (peer->flags & FLAG_XLEAVE) in peer_clear()
3281 peer->flip = 1; in peer_clear()
3283 peer->filter_order[u] = u; in peer_clear()
3284 peer->filter_disp[u] = MAXDISPERSE; in peer_clear()
3287 if (!(peer->flags & FLAG_REFCLOCK)) { in peer_clear()
3289 peer->leap = LEAP_NOTINSYNC; in peer_clear()
3290 peer->stratum = STRATUM_UNSPEC; in peer_clear()
3291 memcpy(&peer->refid, ident, 4); in peer_clear()
3295 peer->procptr->codeproc = 0; in peer_clear()
3296 peer->procptr->coderecv = 0; in peer_clear()
3308 peer->nextdate = peer->update = peer->outdate = current_time; in peer_clear()
3310 peer->nextdate += peer_associations; in peer_clear()
3311 } else if (!(FLAG_CONFIG & peer->flags)) { in peer_clear()
3312 peer->nextdate += ntp_minpkt + 1; in peer_clear()
3314 if (peer->nextdate < earliest) { in peer_clear()
3315 peer->nextdate = earliest; in peer_clear()
3317 earliest = peer->nextdate + 1; in peer_clear()
3319 peer->nextdate += ntp_random() % (1 << peer->minpoll); in peer_clear()
3322 peer->refresh = current_time + (1 << NTP_REFRESH); in peer_clear()
3325 current_time, peer->nextdate, peer->associd, in peer_clear()
3336 struct peer *peer, /* peer structure pointer */ in clock_filter() argument
3357 j = peer->filter_nextpt; in clock_filter()
3358 peer->filter_offset[j] = sample_offset; in clock_filter()
3359 peer->filter_delay[j] = sample_delay; in clock_filter()
3360 peer->filter_disp[j] = sample_disp; in clock_filter()
3361 peer->filter_epoch[j] = current_time; in clock_filter()
3363 peer->filter_nextpt = (u_char)j; in clock_filter()
3376 dtemp = clock_phi * (current_time - peer->update); in clock_filter()
3377 peer->update = current_time; in clock_filter()
3380 peer->filter_disp[j] += dtemp; in clock_filter()
3381 if (peer->filter_disp[j] >= MAXDISPERSE) { in clock_filter()
3382 peer->filter_disp[j] = MAXDISPERSE; in clock_filter()
3384 } else if (peer->update - peer->filter_epoch[j] > in clock_filter()
3386 dst[i] = peer->filter_delay[j] + in clock_filter()
3387 peer->filter_disp[j]; in clock_filter()
3389 dst[i] = peer->filter_delay[j]; in clock_filter()
3424 peer->filter_order[i] = ord[i]; in clock_filter()
3437 peer->disp = peer->jitter = 0; in clock_filter()
3441 peer->disp = NTP_FWEIGHT * ( peer->disp in clock_filter()
3442 + peer->filter_disp[j]); in clock_filter()
3444 peer->jitter += DIFF(peer->filter_offset[j], in clock_filter()
3445 peer->filter_offset[k]); in clock_filter()
3459 etemp = fabs(peer->offset - peer->filter_offset[k]); in clock_filter()
3460 peer->offset = peer->filter_offset[k]; in clock_filter()
3461 peer->delay = peer->filter_delay[k]; in clock_filter()
3463 peer->jitter /= m - 1; in clock_filter()
3465 peer->jitter = max(SQRT(peer->jitter), LOGTOD(sys_precision)); in clock_filter()
3474 if ( peer->disp < sys_maxdist in clock_filter()
3475 && peer->filter_disp[k] < sys_maxdist in clock_filter()
3476 && etemp > CLOCK_SGATE * peer->jitter in clock_filter()
3477 && peer->filter_epoch[k] - peer->epoch in clock_filter()
3478 < 2. * ULOGTOD(peer->hpoll)) { in clock_filter()
3479 mprintf_event(PEVNT_POPCORN, peer, "%.9f s", etemp); in clock_filter()
3490 if (peer->filter_epoch[k] <= peer->epoch) { in clock_filter()
3492 current_time - peer->filter_epoch[k])); in clock_filter()
3495 peer->epoch = peer->filter_epoch[k]; in clock_filter()
3502 record_peer_stats(&peer->srcadr, ctlpeerstatus(peer), peer->offset, in clock_filter()
3503 peer->delay, peer->disp, peer->jitter); in clock_filter()
3505 (u_short)m, peer->offset, peer->delay, peer->disp, in clock_filter()
3506 peer->jitter)); in clock_filter()
3507 if (0 == peer->burst || LEAP_NOTINSYNC == sys_leap) { in clock_filter()
3525 struct peer *peer; in clock_select() local
3536 struct peer *osys_peer; in clock_select()
3537 struct peer *sys_prefer = NULL; /* prefer peer */ in clock_select()
3538 struct peer *typesystem = NULL; in clock_select()
3539 struct peer *typelastresort = NULL; in clock_select()
3540 struct peer *typeorphan = NULL; in clock_select()
3542 struct peer *typeacts = NULL; in clock_select()
3543 struct peer *typelocal = NULL; in clock_select()
3544 struct peer *typepps = NULL; in clock_select()
3571 for (peer = peer_list; peer != NULL; peer = peer->p_link) in clock_select()
3592 for (peer = peer_list; peer != NULL; peer = peer->p_link) { in clock_select()
3593 peer->new_status = CTL_PST_SEL_REJECT; in clock_select()
3599 if (peer_unfit(peer)) { in clock_select()
3612 d = root_distance(peer); in clock_select()
3613 if (!L_ISZERO(&peer->reftime) && d < lastresort_dist) { in clock_select()
3614 typelastresort = peer; in clock_select()
3630 if (peer->stratum == sys_orphan) { in clock_select()
3634 if (peer->dstadr != NULL) in clock_select()
3635 localmet = ntohl(peer->dstadr->addr_refid); in clock_select()
3638 peermet = ntohl(addr2refid(&peer->srcadr)); in clock_select()
3640 typeorphan = peer; in clock_select()
3657 if (peer->stratum > sys_orphan) { in clock_select()
3665 if (!(peer->flags & FLAG_PREFER)) { in clock_select()
3666 switch (peer->refclktype) { in clock_select()
3670 typelocal = peer; in clock_select()
3676 typeacts = peer; in clock_select()
3687 peer->new_status = CTL_PST_SEL_SANE; in clock_select()
3688 f = root_distance(peer); in clock_select()
3689 peers[nlist].peer = peer; in clock_select()
3690 peers[nlist].error = peer->jitter; in clock_select()
3698 e = peer->offset; in clock_select()
3803 peer = peers[i].peer; in clock_select()
3806 || peer->offset + h < low in clock_select()
3807 || peer->offset - h > high in clock_select()
3808 ) && !(peer->flags & FLAG_TRUE)) in clock_select()
3817 if (peer->flags & FLAG_PPS) { in clock_select()
3819 typepps = peer; in clock_select()
3820 if (!(peer->flags & FLAG_TSTAMP_PPS)) in clock_select()
3842 peers[0].peer = typeacts; in clock_select()
3845 peers[0].peer = typelocal; in clock_select()
3850 peers[0].peer = typeorphan; in clock_select()
3853 peers[0].peer = typelastresort; in clock_select()
3862 peers[i].peer->new_status = CTL_PST_SEL_SELCAND; in clock_select()
3864 stoa(&peers[i].peer->srcadr), peers[i].synch)); in clock_select()
3887 f += DIFF(peers[j].peer->offset, in clock_select()
3888 peers[i].peer->offset); in clock_select()
3900 || ((FLAG_TRUE | FLAG_PREFER) & peers[k].peer->flags)) in clock_select()
3904 ntoa(&peers[k].peer->srcadr), g, d)); in clock_select()
3906 peers[k].peer->new_status = CTL_PST_SEL_EXCESS; in clock_select()
3941 peer = peers[i].peer; in clock_select()
3942 peer->unreach = 0; in clock_select()
3943 peer->new_status = CTL_PST_SEL_SYNCCAND; in clock_select()
3945 if (peer->leap == LEAP_ADDSECOND) { in clock_select()
3946 if (peer->flags & FLAG_REFCLOCK) in clock_select()
3951 if (peer->leap == LEAP_DELSECOND) { in clock_select()
3952 if (peer->flags & FLAG_REFCLOCK) in clock_select()
3957 if (peer->flags & FLAG_PREFER) in clock_select()
3958 sys_prefer = peer; in clock_select()
3960 peer->stratum * sys_mindisp; in clock_select()
3977 typesystem = peers[speer].peer; in clock_select()
4052 for (peer = peer_list; peer != NULL; peer = peer->p_link) in clock_select()
4053 peer->status = peer->new_status; in clock_select()
4069 for (peer = peer_list; peer != NULL; peer = peer->p_link) in clock_select()
4070 peer->status = peer->new_status; in clock_select()
4089 z += x * peers[i].peer->offset; in clock_combine()
4090 w += x * DIFF(peers[i].peer->offset, in clock_combine()
4091 peers[syspeer].peer->offset); in clock_combine()
4103 struct peer *peer /* peer structure pointer */ in root_distance() argument
4126 dtemp = (peer->delay + peer->rootdelay) / 2 in root_distance()
4127 + peer->disp in root_distance()
4128 + clock_phi * (current_time - peer->update) in root_distance()
4129 + peer->rootdisp in root_distance()
4130 + peer->jitter; in root_distance()
4149 struct peer *peer /* peer structure pointer */ in peer_xmit() argument
4157 if (!peer->dstadr) { /* can't send */ in peer_xmit()
4160 xpkt.li_vn_mode = PKT_LI_VN_MODE(sys_leap, peer->version, in peer_xmit()
4161 peer->hmode); in peer_xmit()
4163 xpkt.ppoll = peer->hpoll; in peer_xmit()
4170 HTONL_FP(&peer->rec, &xpkt.org); in peer_xmit()
4171 HTONL_FP(&peer->dst, &xpkt.rec); in peer_xmit()
4188 !(peer->flags & FLAG_SKEY) && in peer_xmit()
4190 peer->keyid == 0) { in peer_xmit()
4196 if (peer->flip == 0) { /* basic mode */ in peer_xmit()
4197 peer->aorg = xmt_tx; in peer_xmit()
4200 if (peer->hmode == MODE_BROADCAST) { /* bcst */ in peer_xmit()
4202 if (peer->flip > 0) in peer_xmit()
4203 HTONL_FP(&peer->borg, in peer_xmit()
4206 HTONL_FP(&peer->aorg, in peer_xmit()
4209 if (peer->flip > 0) in peer_xmit()
4210 HTONL_FP(&peer->borg, in peer_xmit()
4213 HTONL_FP(&peer->aorg, in peer_xmit()
4217 peer->t21_bytes = sendlen; in peer_xmit()
4218 sendpkt(&peer->srcadr, peer->dstadr, in peer_xmit()
4219 sys_ttl[(peer->ttl >= sys_ttlmax) ? sys_ttlmax : peer->ttl], in peer_xmit()
4221 peer->sent++; in peer_xmit()
4222 peer->throttle += (1 << peer->minpoll) - 2; in peer_xmit()
4228 if (peer->flip != 0) { /* interleaved modes */ in peer_xmit()
4229 if (peer->flip > 0) in peer_xmit()
4230 peer->aorg = xmt_ty; in peer_xmit()
4232 peer->borg = xmt_ty; in peer_xmit()
4233 peer->flip = -peer->flip; in peer_xmit()
4236 LFPTOD(&xmt_ty, peer->xleave); in peer_xmit()
4238 current_time, latoa(peer->dstadr), in peer_xmit()
4239 stoa(&peer->srcadr), peer->hmode, sendlen, in peer_xmit()
4250 if (peer->flags & FLAG_SKEY) { in peer_xmit()
4297 if (peer->keynumber == 0) in peer_xmit()
4298 make_keylist(peer, peer->dstadr); in peer_xmit()
4300 peer->keynumber--; in peer_xmit()
4301 xkeyid = peer->keylist[peer->keynumber]; in peer_xmit()
4305 key_expire(peer); in peer_xmit()
4307 peer->keyid = xkeyid; in peer_xmit()
4309 switch (peer->hmode) { in peer_xmit()
4319 if (peer->flags & FLAG_ASSOC) in peer_xmit()
4320 exten = crypto_args(peer, CRYPTO_AUTO | in peer_xmit()
4321 CRYPTO_RESP, peer->associd, NULL); in peer_xmit()
4323 exten = crypto_args(peer, CRYPTO_ASSOC | in peer_xmit()
4324 CRYPTO_RESP, peer->associd, NULL); in peer_xmit()
4344 if (!peer->crypto) in peer_xmit()
4345 exten = crypto_args(peer, CRYPTO_ASSOC, in peer_xmit()
4346 peer->associd, hostval.ptr); in peer_xmit()
4347 else if (!(peer->crypto & CRYPTO_FLAG_CERT)) in peer_xmit()
4348 exten = crypto_args(peer, CRYPTO_CERT, in peer_xmit()
4349 peer->associd, peer->issuer); in peer_xmit()
4350 else if (!(peer->crypto & CRYPTO_FLAG_VRFY)) in peer_xmit()
4351 exten = crypto_args(peer, in peer_xmit()
4352 crypto_ident(peer), peer->associd, in peer_xmit()
4367 && peer->leap != LEAP_NOTINSYNC in peer_xmit()
4368 && !(peer->crypto & CRYPTO_FLAG_COOK)) in peer_xmit()
4369 exten = crypto_args(peer, CRYPTO_COOK, in peer_xmit()
4370 peer->associd, NULL); in peer_xmit()
4371 else if (!(peer->crypto & CRYPTO_FLAG_AUTO)) in peer_xmit()
4372 exten = crypto_args(peer, CRYPTO_AUTO, in peer_xmit()
4373 peer->associd, NULL); in peer_xmit()
4374 else if ( peer->flags & FLAG_ASSOC in peer_xmit()
4375 && peer->crypto & CRYPTO_FLAG_SIGN) in peer_xmit()
4376 exten = crypto_args(peer, CRYPTO_AUTO | in peer_xmit()
4377 CRYPTO_RESP, peer->assoc, NULL); in peer_xmit()
4387 else if (!(peer->crypto & CRYPTO_FLAG_SIGN)) in peer_xmit()
4388 exten = crypto_args(peer, CRYPTO_SIGN, in peer_xmit()
4389 peer->associd, hostval.ptr); in peer_xmit()
4390 else if (!(peer->crypto & CRYPTO_FLAG_LEAP)) in peer_xmit()
4391 exten = crypto_args(peer, CRYPTO_LEAP, in peer_xmit()
4392 peer->associd, NULL); in peer_xmit()
4411 if (!peer->crypto) in peer_xmit()
4412 exten = crypto_args(peer, CRYPTO_ASSOC, in peer_xmit()
4413 peer->associd, hostval.ptr); in peer_xmit()
4414 else if (!(peer->crypto & CRYPTO_FLAG_CERT)) in peer_xmit()
4415 exten = crypto_args(peer, CRYPTO_CERT, in peer_xmit()
4416 peer->associd, peer->issuer); in peer_xmit()
4417 else if (!(peer->crypto & CRYPTO_FLAG_VRFY)) in peer_xmit()
4418 exten = crypto_args(peer, in peer_xmit()
4419 crypto_ident(peer), peer->associd, in peer_xmit()
4427 else if (!(peer->crypto & CRYPTO_FLAG_COOK)) in peer_xmit()
4428 exten = crypto_args(peer, CRYPTO_COOK, in peer_xmit()
4429 peer->associd, NULL); in peer_xmit()
4430 else if (!(peer->crypto & CRYPTO_FLAG_AUTO)) in peer_xmit()
4431 exten = crypto_args(peer, CRYPTO_AUTO, in peer_xmit()
4432 peer->assoc, NULL); in peer_xmit()
4442 else if (!(peer->crypto & CRYPTO_FLAG_SIGN)) in peer_xmit()
4443 exten = crypto_args(peer, CRYPTO_SIGN, in peer_xmit()
4444 peer->associd, hostval.ptr); in peer_xmit()
4445 else if (!(peer->crypto & CRYPTO_FLAG_LEAP)) in peer_xmit()
4446 exten = crypto_args(peer, CRYPTO_LEAP, in peer_xmit()
4447 peer->associd, NULL); in peer_xmit()
4457 if (peer->cmmd != NULL) { in peer_xmit()
4461 peer->cmmd->opcode |= htonl(temp32); in peer_xmit()
4462 sendlen += crypto_xmit(peer, &xpkt, NULL, in peer_xmit()
4463 sendlen, peer->cmmd, 0); in peer_xmit()
4464 free(peer->cmmd); in peer_xmit()
4465 peer->cmmd = NULL; in peer_xmit()
4474 sendlen += crypto_xmit(peer, &xpkt, in peer_xmit()
4484 session_key(&peer->dstadr->sin, &peer->srcadr, in peer_xmit()
4494 if (peer->flip == 0) { /* basic mode */ in peer_xmit()
4495 peer->aorg = xmt_tx; in peer_xmit()
4498 if (peer->hmode == MODE_BROADCAST) { /* bcst */ in peer_xmit()
4500 if (peer->flip > 0) in peer_xmit()
4501 HTONL_FP(&peer->borg, &xpkt.org); in peer_xmit()
4503 HTONL_FP(&peer->aorg, &xpkt.org); in peer_xmit()
4505 if (peer->flip > 0) in peer_xmit()
4506 HTONL_FP(&peer->borg, &xpkt.xmt); in peer_xmit()
4508 HTONL_FP(&peer->aorg, &xpkt.xmt); in peer_xmit()
4511 xkeyid = peer->keyid; in peer_xmit()
4514 report_event(PEVNT_AUTH, peer, "no key"); in peer_xmit()
4515 peer->flash |= TEST5; /* auth error */ in peer_xmit()
4516 peer->badauth++; in peer_xmit()
4528 peer->t21_bytes = sendlen; in peer_xmit()
4529 sendpkt(&peer->srcadr, peer->dstadr, in peer_xmit()
4530 sys_ttl[(peer->ttl >= sys_ttlmax) ? sys_ttlmax : peer->ttl], in peer_xmit()
4532 peer->sent++; in peer_xmit()
4533 peer->throttle += (1 << peer->minpoll) - 2; in peer_xmit()
4539 if (peer->flip != 0) { /* interleaved modes */ in peer_xmit()
4540 if (peer->flip > 0) in peer_xmit()
4541 peer->aorg = xmt_ty; in peer_xmit()
4543 peer->borg = xmt_ty; in peer_xmit()
4544 peer->flip = -peer->flip; in peer_xmit()
4547 LFPTOD(&xmt_ty, peer->xleave); in peer_xmit()
4550 current_time, latoa(peer->dstadr), stoa(&peer->srcadr), in peer_xmit()
4551 peer->hmode, xkeyid, sendlen, peer->keynumber)); in peer_xmit()
4554 current_time, peer->dstadr ? in peer_xmit()
4555 ntoa(&peer->dstadr->sin) : "-", in peer_xmit()
4556 ntoa(&peer->srcadr), peer->hmode, xkeyid, sendlen)); in peer_xmit()
4858 struct peer *pool /* pool solicitor association */ in pool_xmit()
4868 struct peer * p; in pool_xmit()
5015 struct peer * pool; /* pool solicitor association */ in pool_name_resolved()
5048 struct peer *peer /* peer structure pointer */ in key_expire() argument
5053 if (peer->keylist != NULL) { in key_expire()
5054 for (i = 0; i <= peer->keynumber; i++) in key_expire()
5055 authtrust(peer->keylist[i], 0); in key_expire()
5056 free(peer->keylist); in key_expire()
5057 peer->keylist = NULL; in key_expire()
5059 value_free(&peer->sndval); in key_expire()
5060 peer->keynumber = 0; in key_expire()
5061 peer->flags &= ~FLAG_ASSOC; in key_expire()
5063 peer->associd)); in key_expire()
5084 struct peer * p in local_refid()
5119 struct peer *peer /* peer structure pointer */ in peer_unfit() argument
5129 if ( peer->leap == LEAP_NOTINSYNC in peer_unfit()
5130 || peer->stratum < sys_floor in peer_unfit()
5131 || peer->stratum >= sys_ceiling) { in peer_unfit()
5140 if ( !(peer->flags & FLAG_REFCLOCK) in peer_unfit()
5141 && root_distance(peer) >= sys_maxdist in peer_unfit()
5142 + clock_phi * ULOGTOD(peer->hpoll)) { in peer_unfit()
5152 if (peer->stratum > 1 && local_refid(peer)) { in peer_unfit()
5160 if (!peer->reach || (peer->flags & FLAG_NOSELECT)) { in peer_unfit()
5164 peer->flash &= ~PEER_TEST_MASK; in peer_unfit()
5165 peer->flash |= rval; in peer_unfit()