]> granicus.if.org Git - pdns/commitdiff
dnsdist: Add a class option to health checks
authorRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 6 Nov 2017 17:10:57 +0000 (18:10 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 6 Nov 2017 17:10:57 +0000 (18:10 +0100)
pdns/dnsdist-lua.cc
pdns/dnsdist.cc
pdns/dnsdist.hh
pdns/dnsdistdist/docs/guides/downstreams.rst
pdns/dnsdistdist/docs/reference/config.rst

index 9ddb588e62b38585c3a364b07cfa48936702979a..07dde791c3ce07f08695fe232016583f6b6e7353 100644 (file)
@@ -465,6 +465,10 @@ vector<std::function<void(void)>> setupLua(bool client, const std::string& confi
                          ret->checkType=boost::get<string>(vars["checkType"]);
                        }
 
+                       if(vars.count("checkClass")) {
+                         ret->checkClass=std::stoi(boost::get<string>(vars["checkClass"]));
+                       }
+
                        if(vars.count("setCD")) {
                          ret->setCD=boost::get<bool>(vars["setCD"]);
                        }
index 4e646dca2fcd662733347e5fc9caf19f3c888f0a..a1ba410945c34683d8f0cea33b864dd8c75492e8 100644 (file)
@@ -1545,7 +1545,7 @@ static bool upCheck(DownstreamState& ds)
 try
 {
   vector<uint8_t> packet;
-  DNSPacketWriter dpw(packet, ds.checkName, ds.checkType.getCode());
+  DNSPacketWriter dpw(packet, ds.checkName, ds.checkType.getCode(), ds.checkClass);
   dnsheader * requestHeader = dpw.getHeader();
   requestHeader->rd=true;
   if (ds.setCD) {
index c9ff9bb5a6fd54801eea0a4e7a03151e1af018d9..1d51beaf3720acac6ed4026c7c64917a72cf7257 100644 (file)
@@ -599,6 +599,7 @@ struct DownstreamState
   ComboAddress sourceAddr;
   DNSName checkName{"a.root-servers.net."};
   QType checkType{QType::A};
+  uint16_t checkClass{QClass::IN};
   std::atomic<uint64_t> idOffset{0};
   std::atomic<uint64_t> sendErrors{0};
   std::atomic<uint64_t> outstanding{0};
index 699fea2680e5ba6d94800e928110b606288759c7..3e73b162c91951c146ebb70e2adb959c8dc4ad3a 100644 (file)
@@ -26,7 +26,7 @@ Healthcheck
 dnsdist uses a health check, sent once every second, to determine the availability of a backend server.
 
 By default, an A query for "a.root-servers.net." is sent.
-A different query type and target can be specified by passing, respectively, the ``checkType`` and ``checkName`` parameters to :func:`newServer`.
+A different query type, class and target can be specified by passing, respectively, the ``checkType``, ``checkClass`` and ``checkName`` parameters to :func:`newServer`.
 
 The default behavior is to consider any valid response with an RCODE different from ServFail as valid.
 If the ``mustResolve`` parameter of :func:`newServer` is set to ``true``, a response will only be considered valid if its RCODE differs from NXDomain, ServFail and Refused.
@@ -35,7 +35,7 @@ The number of health check failures before a server is considered down is config
 The CD flag can be set on the query by setting ``setCD`` to true.
 e.g.::
 
-  newServer({address="192.0.2.1", checkType="AAAA", checkName="a.root-servers.net.", mustResolve=true})
+  newServer({address="192.0.2.1", checkType="AAAA", checkType=DNSClass.CHAOS, checkName="a.root-servers.net.", mustResolve=true})
 
 Source address selection
 ------------------------
index 80cd1bf4b8073b50dac694f3fc260627298dc0e9..a9a5ef3e30f0a4004a381dca26684dfe020462f3 100644 (file)
@@ -226,6 +226,7 @@ Servers
       tcpFastOpen=BOOL,      -- Whether to enable TCP Fast Open
       ipBindAddrNoPort=BOOL, -- Whether to enable IP_BIND_ADDRESS_NO_PORT if available, default: true
       name=STRING,           -- The name associated to this backend, for display purpose
+      checkClass=NUM,        -- Use NUM as QCLASS in the health-check query, default: DNSClass.IN
       checkName=STRING,      -- Use STRING as QNAME in the health-check query, default: "a.root-servers.net."
       checkType=STRING,      -- Use STRING as QTYPE in the health-check query, default: "A"
       setCD=BOOL,            -- Set the CD (Checking Disabled) flag in the health-check query, default: false