extern void init_mon P((void));
extern void mon_start P((int));
extern void mon_stop P((int));
-extern void ntp_monitor P((struct recvbuf *));
+extern int ntp_monitor P((struct recvbuf *));
extern void ntp_monclearinterface P((struct interface *interface));
/* ntp_peer.c */
/* ntp_restrict.c */
extern void init_restrict P((void));
-extern int restrictions P((struct sockaddr_storage *));
+extern int restrictions P((struct sockaddr_storage *, int));
extern void hack_restrict P((int, struct sockaddr_storage *, struct sockaddr_storage *, int, int));
/* ntp_timer.c */
/*
* ntp_monitor - record stats about this packet
+ *
+ * Returns 1 if the packet is at the head of the list, 0 otherwise.
*/
-void
+int
ntp_monitor(
struct recvbuf *rbufp
)
register int mode;
if (mon_enabled == MON_OFF)
- return;
+ return 0;
pkt = &rbufp->recv_pkt;
memset(&addr, 0, sizeof(addr));
md->mru_prev = &mon_mru_list;
mon_mru_list.mru_next->mru_prev = md;
mon_mru_list.mru_next = md;
- return;
+ return 1;
}
md = md->hash_next;
}
/* We get 31 bits from ntp_random() */
if (((u_long)ntp_random()) / FRAC >
(double)(current_time - md->lasttime) / mon_age)
- return;
+ return 0;
md->mru_prev->mru_next = &mon_mru_list;
mon_mru_list.mru_prev = md->mru_prev;
md->mru_prev = &mon_mru_list;
mon_mru_list.mru_next->mru_prev = md;
mon_mru_list.mru_next = md;
+ return 1;
}
int rval; /* cookie snatcher */
#endif /* OPENSSL */
int retcode = AM_NOMATCH;
+ int at_listhead;
/*
* Monitor the packet and get restrictions. Note that the packet
sys_badlength++;
return; /* bogus port */
}
- ntp_monitor(rbufp);
- restrict_mask = restrictions(&rbufp->recv_srcadr);
+ at_listhead = ntp_monitor(rbufp);
+ restrict_mask = restrictions(&rbufp->recv_srcadr, at_listhead);
#ifdef DEBUG
if (debug > 1)
printf("receive: at %ld %s<-%s flags %x restrict %03x\n",
*/
int
restrictions(
- struct sockaddr_storage *srcadr
+ struct sockaddr_storage *srcadr,
+ int at_listhead
)
{
struct restrictlist *rl;
* packet is greater than res_min_interval and the average is
* greater thatn res_avg_interval.
*/
- if (mon_enabled == MON_OFF) {
+ if (!at_listhead || mon_enabled == MON_OFF) {
flags &= ~RES_LIMITED;
} else {
struct mon_data *md;