Enthusiastic logging when interface goes away
Eric Luehrsen
ericluehrsen at gmail.com
Fri Oct 5 03:32:47 UTC 2018
Reduce log noise when an interface goes missing during
reconfiguration. It is a crude patch requiring quality control
but it demonstrates the concept.
Index: services/listen_dnsport.c
===================================================================
--- a/services/listen_dnsport.c
+++ b/services/listen_dnsport.c
@@ -600,6 +600,7 @@ int
create_tcp_accept_sock(struct addrinfo *addr, int v6only, int* noproto,
int* reuseport, int transparent, int mss, int freebind, int use_systemd)
{
+ static time_t bindlogtime = 0;
int s;
#if defined(SO_REUSEADDR) || defined(SO_REUSEPORT) ||
defined(IPV6_V6ONLY) || defined(IP_TRANSPARENT) || defined(IP_BINDANY)
|| defined(IP_FREEBIND) || defined(SO_BINDANY)
int on = 1;
@@ -762,10 +763,11 @@ create_tcp_accept_sock(struct addrinfo *addr, int
v6only, int* noproto,
/* detect freebsd jail with no ipv6 permission */
if(addr->ai_family==AF_INET6 && errno==EINVAL)
*noproto = 1;
- else {
+ else if (difftime(time(NULL), bindlogtime) > 300.0F) {
+ bindlogtime = time(NULL);
log_err_addr("can't bind socket", strerror(errno),
(struct sockaddr_storage*)addr->ai_addr,
addr->ai_addrlen);
}
close(s);
#else
Index: util/netevent.c
===================================================================
--- a/util/netevent.c
+++ b/util/netevent.c
@@ -331,8 +331,9 @@ int tcp_connect_errno_needs_log(struct sockaddr*
addr, socklen_t addrlen)
/* send a UDP reply */
int
comm_point_send_udp_msg(struct comm_point *c, sldns_buffer* packet,
- struct sockaddr* addr, socklen_t addrlen)
+ struct sockaddr* addr, socklen_t addrlen)
{
+ static time_t sendlogtime = 0;
ssize_t sent;
log_assert(c->fd != -1);
#ifdef UNBOUND_DEBUG
@@ -371,17 +372,20 @@ comm_point_send_udp_msg(struct comm_point *c,
sldns_buffer* packet,
if(sent == -1) {
if(!udp_send_errno_needs_log(addr, addrlen))
return 0;
+ if (difftime(time(NULL), sendlogtime) > 300.0F) {
+ sendlogtime = time(NULL);
#ifndef USE_WINSOCK
- verbose(VERB_OPS, "sendto failed: %s", strerror(errno));
+ verbose(VERB_OPS, "sendto failed: %s", strerror(errno));
#else
- verbose(VERB_OPS, "sendto failed: %s",
- wsa_strerror(WSAGetLastError()));
+ verbose(VERB_OPS, "sendto failed: %s",
+ wsa_strerror(WSAGetLastError()));
#endif
- log_addr(VERB_OPS, "remote address is",
- (struct sockaddr_storage*)addr, addrlen);
+ log_addr(VERB_OPS, "remote address is",
+ (struct sockaddr_storage*)addr, addrlen);
+ }
return 0;
} else if((size_t)sent != sldns_buffer_remaining(packet)) {
- log_err("sent %d in place of %d bytes",
+ log_err("sent %d in place of %d bytes",
(int)sent, (int)sldns_buffer_remaining(packet));
return 0;
}
More information about the Unbound-users
mailing list