]> granicus.if.org Git - pdns/commitdiff
dnsdist: Apply SO_BINDTODEVICE to health check sockets too
authorRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 3 Oct 2019 12:27:42 +0000 (14:27 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 3 Oct 2019 12:27:42 +0000 (14:27 +0200)
pdns/dnsdist.cc

index c55002476ca29d39f76d18c011443a8ac35216a7..fd553dfc72cb09ddd5bb43a01a02d275f638a609 100644 (file)
@@ -1856,6 +1856,14 @@ try
   if (!IsAnyAddress(ds->sourceAddr)) {
     sock.setReuseAddr();
     sock.bind(ds->sourceAddr);
+    if (!ds->sourceItfName.empty()) {
+#ifdef SO_BINDTODEVICE
+      int res = setsockopt(sock.getHandle(), SOL_SOCKET, SO_BINDTODEVICE, ds->sourceItfName.c_str(), ds->sourceItfName.length());
+      if (res != 0 && g_verboseHealthChecks) {
+        infolog("Error settting SO_BINDTODEVICE on the health check socket for backend '%s': %s", ds->getNameWithAddr(), stringerror());
+      }
+#endif
+    }
   }
   sock.connect(ds->remote);
   ssize_t sent = udpClientSendRequestToBackend(ds, sock.getHandle(), reinterpret_cast<char*>(&packet[0]), packet.size(), true);