diff --git a/src/usr.sbin/ntpd/client.c b/src/usr.sbin/ntpd/client.c index ac3bcea2..4a6bd9d6 100644 --- a/src/usr.sbin/ntpd/client.c +++ b/src/usr.sbin/ntpd/client.c @@ -1,4 +1,4 @@ -/* $OpenBSD: client.c,v 1.55 2005/01/28 12:37:20 dtucker Exp $ */ +/* $OpenBSD: client.c,v 1.56 2005/02/03 10:53:33 dtucker Exp $ */ /* * Copyright (c) 2003, 2004 Henning Brauer @@ -53,6 +53,7 @@ client_peer_init(struct ntp_peer *p) p->state = STATE_NONE; p->shift = 0; p->trustlevel = TRUSTLEVEL_PATHETIC; + p->lasterror = 0; return (client_addr_init(p)); } @@ -182,8 +183,7 @@ client_dispatch(struct ntp_peer *p, u_int8_t settime) if (errno == EHOSTUNREACH || errno == EHOSTDOWN || errno == ENETUNREACH || errno == ENETDOWN || errno == ECONNREFUSED) { - log_warn("recvfrom %s", - log_sockaddr((struct sockaddr *)&p->addr->ss)); + client_log_error(p, "recvfrom", errno); set_next(p, error_interval()); return (0); } else @@ -311,3 +311,17 @@ client_update(struct ntp_peer *p) return (0); } + +void +client_log_error(struct ntp_peer *peer, const char *operation, int error) +{ + const char *address; + + address = log_sockaddr((struct sockaddr *)&peer->addr->ss); + if (peer->lasterror == error) { + log_debug("%s %s", operation, address); + return; + } + peer->lasterror = error; + log_warn("%s %s", operation, address); +} diff --git a/src/usr.sbin/ntpd/ntpd.h b/src/usr.sbin/ntpd/ntpd.h index 0be48157..70ad6709 100644 --- a/src/usr.sbin/ntpd/ntpd.h +++ b/src/usr.sbin/ntpd/ntpd.h @@ -1,4 +1,4 @@ -/* $OpenBSD: ntpd.h,v 1.52 2005/02/02 18:57:09 henning Exp $ */ +/* $OpenBSD: ntpd.h,v 1.53 2005/02/03 10:53:33 dtucker Exp $ */ /* * Copyright (c) 2003, 2004 Henning Brauer @@ -113,6 +113,7 @@ struct ntp_peer { u_int32_t id; u_int8_t shift; u_int8_t trustlevel; + int lasterror; }; struct ntpd_conf { @@ -238,6 +239,7 @@ int client_addr_init(struct ntp_peer *); int client_nextaddr(struct ntp_peer *); int client_query(struct ntp_peer *); int client_dispatch(struct ntp_peer *, u_int8_t); +void client_log_error(struct ntp_peer *, const char *, int); void update_scale(double); time_t scale_interval(time_t); time_t error_interval(void);