Lines Matching +full:down +full:- +full:counters
2 * ntp_peer.c - management of data maintained for peer associations
19 * ---------------------------------------
21 * packet->mode
22 * peer->mode | UNSPEC ACTIVE PASSIVE CLIENT SERVER BCAST
23 * ---------- | ---------------------------------------------
43 /* packet->mode */
67 * - peer_list is a single list with all peers, suitable for scanning
69 * - peer_adr_hash is an array of lists indexed by hashed peer address.
70 * - peer_aid_hash is an array of lists indexed by hashed associd.
104 * Miscellaneous statistic counters which may be queried.
106 u_long peer_timereset; /* time stat counters zeroed */
127 * init_peer - initialize peer data structures and counters
140 for (i = COUNTOF(init_peer_alloc) - 1; i >= 0; i--)
156 * getmorepeermem - add more peer structures to the free list
166 for (i = INC_PEER_ALLOC - 1; i >= 0; i--)
187 p = start_peer->p_link;
188 for (; p != NULL; p = p->p_link)
189 if (p->hostname != NULL
190 && (-1 == mode || p->hmode == mode)
192 || AF_UNSPEC == AF(&p->srcadr)
193 || hname_fam == AF(&p->srcadr))
194 && !strcasecmp(p->hostname, hostname))
215 ? sptoa(&start_peer->srcadr)
225 * MODE_BCLIENT after estimating the one-way delay. Duplicate
232 peer = start_peer->adr_link;
236 sptoa(&peer->srcadr), mode, peer->hmode,
237 (u_int)cast_flags, (u_int)peer->cast_flags));
239 if (SOCK_EQ(addr, &peer->srcadr)) {
243 if ((-1 == mode || peer->hmode == mode ||
244 ((MDF_BCLNT & peer->cast_flags) &&
246 ADDR_PORT_EQ(addr, &peer->srcadr)) {
251 peer = peer->adr_link;
259 * findexistingpeer - search by name+family or address.
281 * findpeer - find and return a peer match for a received datagram in
285 * the original code re-assigned the peer address to be the destination
288 * attacker directs a packet with forged destination address to us --
314 srcadr = &rbufp->recv_srcadr;
316 for (p = peer_hash[hash]; p != NULL; p = p->adr_link) {
320 if (p->hmode != MODE_BCLIENT && p->dstadr != rbufp->dstadr)
324 if ( ! ADDR_PORT_EQ(srcadr, &p->srcadr))
331 *action = MATCH_ASSOC(p->hmode, pkt_mode);
342 pkt = &rbufp->recv_pkt;
343 NTOHL_FP(&pkt->org, &pkt_org);
344 if (!L_ISEQU(&p->aorg, &pkt_org) &&
368 * findpeerbyassoc - find and return a peer using his association ID
380 for (p = assoc_hash[hash]; p != NULL; p = p->aid_link)
381 if (assoc == p->associd)
388 * clear_all - flush all time values for all associations
399 for (p = peer_list; p != NULL; p = p->p_link)
400 if (!(MDF_TXONLY_MASK & p->cast_flags))
408 * score_all() - determine if an association can be demobilized
426 for (speer = peer_list; speer != NULL; speer = speer->p_link)
427 if (speer->flags & FLAG_PREEMPT) {
443 * score() - calculate preemption score
457 if (!(peer->flash & TEST10))
459 if (!(peer->flash & TEST13))
461 if (!(peer->flash & TEST12))
463 if (!(peer->flash & TEST11))
465 if (peer->status >= CTL_PST_SEL_SELCAND)
467 if (peer->status != CTL_PST_SEL_EXCESS)
474 * free_peer - internal routine to free memory referred to by a struct
488 hash = NTP_HASH_ADDR(&p->srcadr);
489 peer_hash_count[hash]--;
496 stoa(&p->srcadr));
502 hash = p->associd & NTP_HASH_MASK;
503 assoc_hash_count[hash]--;
511 stoa(&p->srcadr));
519 stoa(&p->srcadr));
522 if (p->hostname != NULL)
523 free(p->hostname);
525 if (p->ident != NULL)
526 free(p->ident);
528 if (p->addrs != NULL)
529 free(p->addrs); /* from copy_addrinfo_list() */
539 * unpeer - remove peer structure from hash table and free structure
546 mprintf_event(PEVNT_DEMOBIL, peer, "assoc %u", peer->associd);
547 restrict_source(&peer->srcadr, TRUE, 0);
548 peer->flags |= FLAG_DISABLED;
551 peer_associations--;
552 if (FLAG_PREEMPT & peer->flags)
553 peer_preempt--;
556 * If this peer is actually a clock, shut it down first
558 if (FLAG_REFCLOCK & peer->flags)
567 * peer_config - configure a new association
647 if (p->dstadr == dstadr)
651 * Do not change the local address of a link-local
654 if ( p->dstadr != NULL && is_linklocal(&p->dstadr->sin)
660 * Do not set the local address for a link-local IPv6 peer
663 if ( dstadr != NULL && IS_IPV6(&p->srcadr)
664 && SCOPE(&dstadr->sin) != SCOPE(&p->srcadr)) {
669 * Don't accept updates to a separate multicast receive-only
672 if (dstadr != NULL && (FLAG_BC_VOL & p->flags) &&
673 (INT_MCASTIF & dstadr->flags) && MODE_CLIENT == p->hmode) {
678 if (p->dstadr != NULL) {
679 p->dstadr->peercnt--;
680 UNLINK_SLIST(unlinked, p->dstadr->peers, p, ilink,
683 if ( !IS_MCAST(&p->srcadr) && !(FLAG_DISABLED & p->flags)
685 msyslog(LOG_INFO, "%s local addr %s -> %s",
686 stoa(&p->srcadr), eptoa(p->dstadr),
690 p->dstadr = dstadr;
693 if (p->dstadr != NULL) {
694 LINK_SLIST(dstadr->peers, p, ilink);
695 dstadr->peercnt++;
700 * attempt to re-rebind interface if necessary
710 niface = select_peerinterface(p, &p->srcadr, NULL);
713 "peer_refresh_interface: %s->%s mode %d vers %d poll %d %d flags 0x%x 0x%x ttl %u key %08x: new interface: ",
714 p->dstadr == NULL ? "<null>" :
715 stoa(&p->dstadr->sin), stoa(&p->srcadr), p->hmode,
716 p->version, p->minpoll, p->maxpoll, p->flags, p->cast_flags,
717 p->ttl, p->keyid));
721 niface->fd, niface->bfd, niface->name,
722 niface->flags, niface->ifindex,
723 stoa(&niface->sin)));
724 if (niface->flags & INT_BROADCAST)
726 stoa(&niface->bcast)));
727 DPRINTF(4, (", mask=%s\n", stoa(&niface->mask)));
732 piface = p->dstadr;
734 if (p->dstadr != NULL) {
738 if (p->dstadr != piface && !(MDF_ACAST & p->cast_flags)
739 && MODE_BROADCAST != p->pmode)
745 if (MDF_BCAST & p->cast_flags)
746 enable_broadcast(p->dstadr, &p->srcadr);
752 if (MDF_MCAST & p->cast_flags)
753 enable_multicast_if(p->dstadr, &p->srcadr);
759 * refresh_all_peerinterfaces - see that all interface bindings are up
771 for (p = peer_list; p != NULL; p = p->p_link) {
778 if (p->dstadr != NULL && (p->reach & 0x3)) {
787 * newpeer - initialize a new peer association
838 * destination. If the given interface is "any", track down the
846 if ( peer->dstadr == dstadr
848 && (MDF_BCLNT & peer->cast_flags)))
852 peer->dstadr == findinterface(srcadr))
874 peer = peer->p_link) {
875 if ( SOCK_EQ(srcadr, &peer->srcadr)
877 && !SOCK_UNSPEC(&peer->srcadr)) {
878 /* leave peer non-NULL */
908 if (ippeerlimit > -1) {
910 DPRINTF(2, ("newpeer(%s) denied - ippeerlimit %d\n",
918 DPRINTF(1, ("newpeer(%s) - ippeerlimit %d ignored\n",
933 peer_free_count--;
946 peer->associd = current_association_ID;
948 peer->srcadr = *srcadr;
950 peer->hostname = estrdup(hostname);
952 peer->hmode = hmode;
953 peer->version = version;
954 peer->flags = flags;
955 peer->cast_flags = cast_flags;
962 peer->maxpoll = (0 == maxpoll)
965 peer->minpoll = (0 == minpoll)
973 peer->maxpoll = CLAMP(peer->maxpoll, NTP_MINPOLL, NTP_MAXPOLL);
974 peer->minpoll = CLAMP(peer->minpoll, NTP_MINPOLL, peer->maxpoll);
976 if (peer->dstadr != NULL) {
978 stoa(srcadr), peer->dstadr->fd,
979 stoa(&peer->dstadr->sin)));
987 if ((MDF_BCAST & cast_flags) && peer->dstadr != NULL) {
988 enable_broadcast(peer->dstadr, srcadr);
993 if ((MDF_MCAST & cast_flags) && peer->dstadr != NULL) {
994 enable_multicast_if(peer->dstadr, srcadr);
998 peer->flags |= FLAG_SKEY;
1000 peer->ttl = ttl;
1001 peer->keyid = key;
1003 peer->ident = estrdup(ident);
1005 peer->precision = sys_precision;
1006 peer->hpoll = peer->minpoll;
1024 peer->timereset = current_time;
1025 peer->timereachable = current_time;
1026 peer->timereceived = current_time;
1028 if (ISREFCLOCKADR(&peer->srcadr)) {
1046 stoa(&peer->srcadr));
1056 hash = NTP_HASH_ADDR(&peer->srcadr);
1059 hash = peer->associd & NTP_HASH_MASK;
1064 restrict_source(&peer->srcadr, FALSE, 0);
1065 mprintf_event(PEVNT_MOBIL, peer, "assoc %d", peer->associd);
1066 DPRINTF(1, ("newpeer: %s->%s mode %u vers %u poll %u %u flags 0x%x 0x%x ttl %u key %08x\n",
1067 latoa(peer->dstadr), stoa(&peer->srcadr), peer->hmode,
1068 peer->version, peer->minpoll, peer->maxpoll, peer->flags,
1069 peer->cast_flags, peer->ttl, peer->keyid));
1075 * peer_clr_stats - clear peer module statistics counters
1089 * peer_reset - reset statistics counters
1099 peer->timereset = current_time;
1100 peer->sent = 0;
1101 peer->received = 0;
1102 peer->processed = 0;
1103 peer->badauth = 0;
1104 peer->bogusorg = 0;
1105 peer->oldpkt = 0;
1106 peer->seldisptoolarge = 0;
1107 peer->selbroken = 0;
1112 * peer_all_reset - reset all peer statistics counters
1119 for (peer = peer_list; peer != NULL; peer = peer->p_link)
1125 * findmanycastpeer - find and return a manycastclient or pool
1138 * This routine is called upon arrival of a server-mode response
1147 pkt = &rbufp->recv_pkt;
1148 for (peer = peer_list; peer != NULL; peer = peer->p_link)
1149 if (MDF_SOLICIT_MASK & peer->cast_flags) {
1150 NTOHL_FP(&pkt->org, &p_org);
1151 if (L_ISEQU(&p_org, &peer->aorg)) {
1159 /* peer_cleanup - clean peer list prior to shutdown */
1166 nextpeer = peer->p_link;