From: Remi Gacogne Date: Thu, 28 Jul 2016 13:07:58 +0000 (+0200) Subject: dnsdist: Add a `setCD` parameter to set cd=1 on health check queries X-Git-Tag: rec-4.0.2~29^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=21830638e5cf121ffed95f34f2fe447a2d9da0ad;p=thirdparty%2Fpdns.git dnsdist: Add a `setCD` parameter to set cd=1 on health check queries --- diff --git a/pdns/README-dnsdist.md b/pdns/README-dnsdist.md index 70173b9752..c2a1f5e6a0 100644 --- a/pdns/README-dnsdist.md +++ b/pdns/README-dnsdist.md @@ -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 diff --git a/pdns/dnsdist-lua.cc b/pdns/dnsdist-lua.cc index ebd4a1fbe0..962ce7a681 100644 --- a/pdns/dnsdist-lua.cc +++ b/pdns/dnsdist-lua.cc @@ -356,6 +356,10 @@ vector> setupLua(bool client, const std::string& confi ret->checkType=boost::get(vars["checkType"]); } + if(vars.count("setCD")) { + ret->setCD=boost::get(vars["setCD"]); + } + if(vars.count("mustResolve")) { ret->mustResolve=boost::get(vars["mustResolve"]); } diff --git a/pdns/dnsdist.cc b/pdns/dnsdist.cc index 6645955fde..13fc6e8869 100644 --- a/pdns/dnsdist.cc +++ b/pdns/dnsdist.cc @@ -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(); diff --git a/pdns/dnsdist.hh b/pdns/dnsdist.hh index 4ed5a12599..2388d2e92d 100644 --- a/pdns/dnsdist.hh +++ b/pdns/dnsdist.hh @@ -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)