]> granicus.if.org Git - pdns/commitdiff
dnsdist: Add a `setCD` parameter to set cd=1 on health check queries
authorRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 28 Jul 2016 13:07:58 +0000 (15:07 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 28 Jul 2016 13:07:58 +0000 (15:07 +0200)
pdns/README-dnsdist.md
pdns/dnsdist-lua.cc
pdns/dnsdist.cc
pdns/dnsdist.hh

index 70173b9752f133012f87e459deac34d6a393a09a..c2a1f5e6a0aa5b28b1b4c92b86ff0d562d6fbdf9 100644 (file)
@@ -147,6 +147,7 @@ of `newServer` is set to true, a response will only be considered valid if
 its RCODE differs from NXDomain, ServFail and Refused.
 The number of health check failures before a server is considered down is
 configurable via the`maxCheckFailures` parameter, defaulting to 1.
+The `CD` flag can be set on the query by setting `setCD` to true.
 
 ```
 newServer({address="192.0.2.1", checkType="AAAA", checkName="a.root-servers.net.", mustResolve=true})
@@ -1190,7 +1191,7 @@ Here are all functions:
     * `setVerboseHealthChecks(bool)`: set whether health check errors will be logged
  * Server related:
     * `newServer("ip:port")`: instantiate a new downstream server with default settings
-    * `newServer({address="ip:port", qps=1000, order=1, weight=10, pool="abuse", retries=5, tcpSendTimeout=30, tcpRecvTimeout=30, checkName="a.root-servers.net.", checkType="A", maxCheckFailures=1, mustResolve=false, useClientSubnet=true, source="address|interface name|address@interface"})`:
+    * `newServer({address="ip:port", qps=1000, order=1, weight=10, pool="abuse", retries=5, tcpSendTimeout=30, tcpRecvTimeout=30, checkName="a.root-servers.net.", checkType="A", setCD=false, maxCheckFailures=1, mustResolve=false, useClientSubnet=true, source="address|interface name|address@interface"})`:
 instantiate a server with additional parameters
     * `showServers()`: output all servers
     * `getServer(n)`: returns server with index n 
index ebd4a1fbe07b4ac56f1e45d746a3da620f2fe5ac..962ce7a6813fb05a34e9316581c231165785043c 100644 (file)
@@ -356,6 +356,10 @@ vector<std::function<void(void)>> setupLua(bool client, const std::string& confi
                          ret->checkType=boost::get<string>(vars["checkType"]);
                        }
 
+                       if(vars.count("setCD")) {
+                         ret->setCD=boost::get<bool>(vars["setCD"]);
+                       }
+
                        if(vars.count("mustResolve")) {
                          ret->mustResolve=boost::get<bool>(vars["mustResolve"]);
                        }
index 6645955fded338b7e033a4738de4e97cfdc52470..13fc6e8869cc5f3bec73ead0762b2cbaf0b88977 100644 (file)
@@ -1121,6 +1121,9 @@ try
   DNSPacketWriter dpw(packet, ds.checkName, ds.checkType.getCode());
   dnsheader * requestHeader = dpw.getHeader();
   requestHeader->rd=true;
+  if (ds.setCD) {
+    requestHeader->cd = true;
+  }
 
   Socket sock(ds.remote.sin4.sin_family, SOCK_DGRAM);
   sock.setNonBlocking();
index 4ed5a1259986eba1cac43861099495cd9bb692c0..2388d2e92d7fe667dd962b2899b1199bca951aae 100644 (file)
@@ -355,6 +355,7 @@ struct DownstreamState
   bool mustResolve{false};
   bool upStatus{false};
   bool useECS{false};
+  bool setCD{false};
   bool isUp() const
   {
     if(availability == Availability::Down)