]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Fix #358: Squelch udp connect 'no route to host' errors on low
authorW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Tue, 1 Dec 2020 08:09:13 +0000 (09:09 +0100)
committerW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Tue, 1 Dec 2020 08:09:13 +0000 (09:09 +0100)
  verbosity.

doc/Changelog
services/outside_network.c

index 1622dd2b5e27ee9db541b891134634cd2ccaf959..30b8d34a1f32624865e714465177a55009f1130f 100644 (file)
@@ -1,3 +1,7 @@
+1 December 2020: Wouter
+       - Fix #358: Squelch udp connect 'no route to host' errors on low
+         verbosity.
+
 30 November 2020: Wouter
        - Fix assertion failure on double callback when iterator loses
          interest in query at head of line that then has the tcp stream
index 11951adea7bc48566b976426051a5c79607063ad..0886907f7c886ac2151491adea493101b88ab606 100644 (file)
@@ -1745,6 +1745,33 @@ select_id(struct outside_network* outnet, struct pending* pend,
        return 1;
 }
 
+/** return true is UDP connect error needs to be logged */
+static int udp_connect_needs_log(int err)
+{
+       switch(err) {
+       case ECONNREFUSED:
+#  ifdef ENETUNREACH
+       case ENETUNREACH:
+#  endif
+#  ifdef EHOSTDOWN
+       case EHOSTDOWN:
+#  endif
+#  ifdef EHOSTUNREACH
+       case EHOSTUNREACH:
+#  endif
+#  ifdef ENETDOWN
+       case ENETDOWN:
+#  endif
+               if(verbosity >= VERB_ALGO)
+                       return 1;
+               return 0;
+       default:
+               break;
+       }
+       return 1;
+}
+
+
 /** Select random interface and port */
 static int
 select_ifport(struct outside_network* outnet, struct pending* pend,
@@ -1804,9 +1831,11 @@ select_ifport(struct outside_network* outnet, struct pending* pend,
                                /* connect() to the destination */
                                if(connect(fd, (struct sockaddr*)&pend->addr,
                                        pend->addrlen) < 0) {
-                                       log_err_addr("udp connect failed",
-                                               strerror(errno), &pend->addr,
-                                               pend->addrlen);
+                                       if(udp_connect_needs_log(errno)) {
+                                               log_err_addr("udp connect failed",
+                                                       strerror(errno), &pend->addr,
+                                                       pend->addrlen);
+                                       }
                                        sock_close(fd);
                                        return 0;
                                }