]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Fix compilation when dynamic blocks are disabled
authorRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 21 Jun 2024 10:06:04 +0000 (12:06 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 15 Jul 2024 09:47:59 +0000 (11:47 +0200)
21 files changed:
pdns/dnsdistdist/Makefile.am
pdns/dnsdistdist/dnsdist-actions.hh [new file with mode: 0644]
pdns/dnsdistdist/dnsdist-async.cc
pdns/dnsdistdist/dnsdist-async.hh
pdns/dnsdistdist/dnsdist-carbon.cc
pdns/dnsdistdist/dnsdist-configuration.hh
pdns/dnsdistdist/dnsdist-dnsquestion.cc
pdns/dnsdistdist/dnsdist-dynblocks.hh
pdns/dnsdistdist/dnsdist-dynbpf.cc
pdns/dnsdistdist/dnsdist-dynbpf.hh
pdns/dnsdistdist/dnsdist-frontend.cc
pdns/dnsdistdist/dnsdist-lbpolicies.hh
pdns/dnsdistdist/dnsdist-lua-bindings-packetcache.cc
pdns/dnsdistdist/dnsdist-lua-bindings.cc
pdns/dnsdistdist/dnsdist-lua-ffi.cc
pdns/dnsdistdist/dnsdist-lua.cc
pdns/dnsdistdist/dnsdist-lua.hh
pdns/dnsdistdist/dnsdist-web.cc
pdns/dnsdistdist/dnsdist.cc
pdns/dnsdistdist/dnsdist.hh
pdns/dnsdistdist/test-dnsdist-lua-ffi.cc

index 93db389654754f544ede94a4bd9067771c67e575..fc0a25ffd646eeca1cb941f4347c9fbd3d6e8c4f 100644 (file)
@@ -144,6 +144,7 @@ dnsdist_SOURCES = \
        dns.cc dns.hh \
        dns_random.hh \
        dnscrypt.cc dnscrypt.hh \
+       dnsdist-actions.hh \
        dnsdist-async.cc dnsdist-async.hh \
        dnsdist-backend.cc dnsdist-backend.hh \
        dnsdist-backoff.hh \
diff --git a/pdns/dnsdistdist/dnsdist-actions.hh b/pdns/dnsdistdist/dnsdist-actions.hh
new file mode 100644 (file)
index 0000000..5bb08a0
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ * This file is part of PowerDNS or dnsdist.
+ * Copyright -- PowerDNS.COM B.V. and its contributors
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * In addition, for the avoidance of any doubt, permission is granted to
+ * link this program with OpenSSL and to (re)distribute the binaries
+ * produced as the result of such linking.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+#pragma once
+
+/* so what could you do:
+   drop,
+   fake up nxdomain,
+   provide actual answer,
+   allow & and stop processing,
+   continue processing,
+   modify header:    (servfail|refused|notimp), set TC=1,
+   send to pool */
+
+struct DNSQuestion;
+struct DNSResponse;
+
+class DNSAction
+{
+public:
+  enum class Action : uint8_t
+  {
+    Drop,
+    Nxdomain,
+    Refused,
+    Spoof,
+    Allow,
+    HeaderModify,
+    Pool,
+    Delay,
+    Truncate,
+    ServFail,
+    None,
+    NoOp,
+    NoRecurse,
+    SpoofRaw,
+    SpoofPacket,
+    SetTag,
+  };
+  static std::string typeToString(const Action& action)
+  {
+    switch (action) {
+    case Action::Drop:
+      return "Drop";
+    case Action::Nxdomain:
+      return "Send NXDomain";
+    case Action::Refused:
+      return "Send Refused";
+    case Action::Spoof:
+      return "Spoof an answer";
+    case Action::SpoofPacket:
+      return "Spoof a raw answer from bytes";
+    case Action::SpoofRaw:
+      return "Spoof an answer from raw bytes";
+    case Action::Allow:
+      return "Allow";
+    case Action::HeaderModify:
+      return "Modify the header";
+    case Action::Pool:
+      return "Route to a pool";
+    case Action::Delay:
+      return "Delay";
+    case Action::Truncate:
+      return "Truncate over UDP";
+    case Action::ServFail:
+      return "Send ServFail";
+    case Action::SetTag:
+      return "Set Tag";
+    case Action::None:
+    case Action::NoOp:
+      return "Do nothing";
+    case Action::NoRecurse:
+      return "Set rd=0";
+    }
+
+    return "Unknown";
+  }
+
+  virtual Action operator()(DNSQuestion*, std::string* ruleresult) const = 0;
+  virtual ~DNSAction() = default;
+  virtual std::string toString() const = 0;
+  virtual std::map<std::string, double> getStats() const
+  {
+    return {{}};
+  }
+  virtual void reload()
+  {
+  }
+};
+
+class DNSResponseAction
+{
+public:
+  enum class Action : uint8_t
+  {
+    Allow,
+    Delay,
+    Drop,
+    HeaderModify,
+    ServFail,
+    Truncate,
+    None
+  };
+  virtual Action operator()(DNSResponse*, std::string* ruleresult) const = 0;
+  virtual ~DNSResponseAction() = default;
+  virtual std::string toString() const = 0;
+  virtual void reload()
+  {
+  }
+};
index b76622b84c97075d544f1e27e25e74650e44f385..84095c4a2e2b63000ad9011ce9880040864e36c1 100644 (file)
@@ -22,6 +22,7 @@
 #include "dnsdist-async.hh"
 #include "dnsdist-internal-queries.hh"
 #include "dolog.hh"
+#include "mplexer.hh"
 #include "threadname.hh"
 
 namespace dnsdist
index c0b8453ae6be550e37c11e73ff338521756d7c0e..7a337d25b54f51cf0676767ef2492222c147c674 100644 (file)
@@ -59,7 +59,7 @@ private:
     uint16_t d_queryID;
   };
 
-  typedef multi_index_container<
+  using content_t = multi_index_container<
     Entry,
     indexed_by<
       ordered_unique<tag<IDTag>,
@@ -68,8 +68,7 @@ private:
                        member<Entry, uint16_t, &Entry::d_queryID>,
                        member<Entry, uint16_t, &Entry::d_asyncID>>>,
       ordered_non_unique<tag<TTDTag>,
-                         member<Entry, struct timeval, &Entry::d_ttd>>>>
-    content_t;
+                         member<Entry, struct timeval, &Entry::d_ttd>>>>;
 
   static void pickupExpired(content_t&, const struct timeval& now, std::list<std::pair<uint16_t, std::unique_ptr<CrossProtocolQuery>>>& expiredEvents);
   static struct timeval getNextTTD(const content_t&);
index 6fa97a5341efef7e9c8756059797da68639403f2..5df2049352d2bcf6acbf3960945ccf9b9b58f0b6 100644 (file)
@@ -24,6 +24,7 @@
 #endif
 
 #include "dnsdist-carbon.hh"
+#include "dnsdist-cache.hh"
 #include "dnsdist.hh"
 #include "dnsdist-backoff.hh"
 #include "dnsdist-configuration.hh"
index bca05ef2a0e37f7e77cbf7431a8020fc5c20c7ce..0c81741addcff40c0e662bd1ecfc145035bef8ed 100644 (file)
 
 #include "config.h"
 #include "credentials.hh"
+#include "dnsdist-actions.hh"
 #include "dnsdist-carbon.hh"
 #include "dnsdist-query-count.hh"
 #include "dnsdist-rule-chains.hh"
 #include "iputils.hh"
 
-/* so what could you do:
-   drop,
-   fake up nxdomain,
-   provide actual answer,
-   allow & and stop processing,
-   continue processing,
-   modify header:    (servfail|refused|notimp), set TC=1,
-   send to pool */
-
-struct DNSQuestion;
-struct DNSResponse;
-
-class DNSAction
-{
-public:
-  enum class Action : uint8_t
-  {
-    Drop,
-    Nxdomain,
-    Refused,
-    Spoof,
-    Allow,
-    HeaderModify,
-    Pool,
-    Delay,
-    Truncate,
-    ServFail,
-    None,
-    NoOp,
-    NoRecurse,
-    SpoofRaw,
-    SpoofPacket,
-    SetTag,
-  };
-  static std::string typeToString(const Action& action)
-  {
-    switch (action) {
-    case Action::Drop:
-      return "Drop";
-    case Action::Nxdomain:
-      return "Send NXDomain";
-    case Action::Refused:
-      return "Send Refused";
-    case Action::Spoof:
-      return "Spoof an answer";
-    case Action::SpoofPacket:
-      return "Spoof a raw answer from bytes";
-    case Action::SpoofRaw:
-      return "Spoof an answer from raw bytes";
-    case Action::Allow:
-      return "Allow";
-    case Action::HeaderModify:
-      return "Modify the header";
-    case Action::Pool:
-      return "Route to a pool";
-    case Action::Delay:
-      return "Delay";
-    case Action::Truncate:
-      return "Truncate over UDP";
-    case Action::ServFail:
-      return "Send ServFail";
-    case Action::SetTag:
-      return "Set Tag";
-    case Action::None:
-    case Action::NoOp:
-      return "Do nothing";
-    case Action::NoRecurse:
-      return "Set rd=0";
-    }
-
-    return "Unknown";
-  }
-
-  virtual Action operator()(DNSQuestion*, std::string* ruleresult) const = 0;
-  virtual ~DNSAction() = default;
-  virtual std::string toString() const = 0;
-  virtual std::map<std::string, double> getStats() const
-  {
-    return {{}};
-  }
-  virtual void reload()
-  {
-  }
-};
-
-class DNSResponseAction
-{
-public:
-  enum class Action : uint8_t
-  {
-    Allow,
-    Delay,
-    Drop,
-    HeaderModify,
-    ServFail,
-    Truncate,
-    None
-  };
-  virtual Action operator()(DNSResponse*, std::string* ruleresult) const = 0;
-  virtual ~DNSResponseAction() = default;
-  virtual std::string toString() const = 0;
-  virtual void reload()
-  {
-  }
-};
-
 class ServerPolicy;
 struct ServerPool;
 struct DownstreamState;
index 7090f56e11e2e46e0465f7cadd5d4edd1e8aea67..dde891b90079669cb56759e87d174d938f4be0f0 100644 (file)
@@ -20,6 +20,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 #include "dnsdist.hh"
+#include "dnsdist-configuration.hh"
 #include "dnsdist-dnsparser.hh"
 
 std::string DNSQuestion::getTrailingData() const
index 9a644b798352eb34e4f7933afa2aac6adbd1059c..f700e16416a18f9e60a1b66d00449e0bf25ba841 100644 (file)
@@ -68,6 +68,73 @@ struct dnsdist_ffi_stat_node_t
   SMTBlockParameters& d_blockParameters;
 };
 
+struct DynBlock
+{
+  DynBlock()
+  {
+    until.tv_sec = 0;
+    until.tv_nsec = 0;
+  }
+
+  DynBlock(const std::string& reason_, const struct timespec& until_, const DNSName& domain_, DNSAction::Action action_) :
+    reason(reason_), domain(domain_), until(until_), action(action_)
+  {
+  }
+
+  DynBlock(const DynBlock& rhs) :
+    reason(rhs.reason), domain(rhs.domain), until(rhs.until), tagSettings(rhs.tagSettings), action(rhs.action), warning(rhs.warning), bpf(rhs.bpf)
+  {
+    blocks.store(rhs.blocks);
+  }
+
+  DynBlock(DynBlock&& rhs) :
+    reason(std::move(rhs.reason)), domain(std::move(rhs.domain)), until(rhs.until), tagSettings(std::move(rhs.tagSettings)), action(rhs.action), warning(rhs.warning), bpf(rhs.bpf)
+  {
+    blocks.store(rhs.blocks);
+  }
+
+  DynBlock& operator=(const DynBlock& rhs)
+  {
+    reason = rhs.reason;
+    until = rhs.until;
+    domain = rhs.domain;
+    action = rhs.action;
+    blocks.store(rhs.blocks);
+    warning = rhs.warning;
+    bpf = rhs.bpf;
+    tagSettings = rhs.tagSettings;
+    return *this;
+  }
+
+  DynBlock& operator=(DynBlock&& rhs)
+  {
+    reason = std::move(rhs.reason);
+    until = rhs.until;
+    domain = std::move(rhs.domain);
+    action = rhs.action;
+    blocks.store(rhs.blocks);
+    warning = rhs.warning;
+    bpf = rhs.bpf;
+    tagSettings = std::move(rhs.tagSettings);
+    return *this;
+  }
+
+  struct TagSettings
+  {
+    std::string d_name;
+    std::string d_value;
+  };
+
+  string reason;
+  DNSName domain;
+  timespec until{};
+  std::shared_ptr<TagSettings> tagSettings{nullptr};
+  mutable std::atomic<uint32_t> blocks{0};
+  DNSAction::Action action{DNSAction::Action::None};
+  bool warning{false};
+  bool bpf{false};
+};
+
 using dnsdist_ffi_dynamic_block_inserted_hook = std::function<void(uint8_t type, const char* key, const char* reason, uint8_t action, uint64_t duration, bool warning)>;
 using ClientAddressDynamicRules = NetmaskTree<DynBlock, AddressAndPortRange>;
 using SuffixDynamicRules = SuffixMatchTree<DynBlock>;
index ab09f6dc0f46aa054b4797e556f71addb474cc45..2f76f9fcafdfd8ccbe48bda06665c5cf6f9a05a1 100644 (file)
@@ -21,6 +21,8 @@
  */
 #include "dnsdist-dynbpf.hh"
 
+std::vector<std::shared_ptr<DynBPFFilter>> g_dynBPFFilters;
+
 bool DynBPFFilter::block(const ComboAddress& addr, const struct timespec& until)
 {
   bool inserted = false;
index cfb5d6b3c2ada4ca57535bb9f1ed4982aa8249a0..c9eca259ed39d30ac25fefd3439cf71faaeafc0c 100644 (file)
@@ -75,3 +75,5 @@ private:
   };
   LockGuarded<Data> d_data;
 };
+
+extern std::vector<std::shared_ptr<DynBPFFilter>> g_dynBPFFilters;
index 20bef4e0047c342fd84a4f3eaddd16894bb9548f..8e75ee396f7f93f88e52759b0d96c012bd6b629f 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "dnsdist-frontend.hh"
 #include "dnsdist.hh"
+#include "dnsdist-configuration.hh"
 
 namespace dnsdist
 {
index c609536959a78b2d3b3443f07e17f3fb44712621..b92237861d4a91600982c6d75db4c2b2c241ff5d 100644 (file)
@@ -25,6 +25,7 @@ struct dnsdist_ffi_servers_list_t;
 struct dnsdist_ffi_server_t;
 struct dnsdist_ffi_dnsquestion_t;
 
+struct DNSQuestion;
 struct DownstreamState;
 
 struct PerThreadPoliciesState;
index f71bf37516de58b4bbd36e8be4a0e9a62ae3cb07..65470b2b870df40924927609a35972fdbd962522 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "config.h"
 #include "dnsdist.hh"
+#include "dnsdist-cache.hh"
 #include "dnsdist-lua.hh"
 
 #include <boost/lexical_cast.hpp>
index eaf7a2a1a39a419073f946e387c0077f69094958..9ea6627a42e37d4df181720cde5d331de5b81d46 100644 (file)
@@ -23,6 +23,8 @@
 #include "config.h"
 #include "dnsdist.hh"
 #include "dnsdist-async.hh"
+#include "dnsdist-dynblocks.hh"
+#include "dnsdist-dynbpf.hh"
 #include "dnsdist-frontend.hh"
 #include "dnsdist-lua.hh"
 #include "dnsdist-resolver.hh"
@@ -260,7 +262,9 @@ void setupLuaBindings(LuaContext& luaCtx, bool client, bool configCheck)
   luaCtx.registerFunction<bool (ComboAddress::*)() const>("isIPv6", [](const ComboAddress& addr) { return addr.sin4.sin_family == AF_INET6; });
   luaCtx.registerFunction<bool (ComboAddress::*)() const>("isMappedIPv4", [](const ComboAddress& addr) { return addr.isMappedIPv4(); });
   luaCtx.registerFunction<ComboAddress (ComboAddress::*)() const>("mapToIPv4", [](const ComboAddress& addr) { return addr.mapToIPv4(); });
-  luaCtx.registerFunction<bool (nmts_t::*)(const ComboAddress&)>("match", [](nmts_t& set, const ComboAddress& addr) { return set.match(addr); });
+#ifndef DISABLE_DYNBLOCKS
+  luaCtx.registerFunction<bool (ClientAddressDynamicRules::*)(const ComboAddress&) const>("match", [](const ClientAddressDynamicRules& set, const ComboAddress& addr) { return set.match(addr); });
+#endif /* DISABLE_DYNBLOCKS */
 #endif /* DISABLE_COMBO_ADDR_BINDINGS */
 
 #ifndef DISABLE_DNSNAME_BINDINGS
index 9d4f0e2953bc889a2ee4cc275b06f3798303046c..214b1564221e5e8dab7e3f66898d3d715ca8f3d0 100644 (file)
@@ -21,6 +21,7 @@
  */
 
 #include "dnsdist-async.hh"
+#include "dnsdist-cache.hh"
 #include "dnsdist-dnsparser.hh"
 #include "dnsdist-dynblocks.hh"
 #include "dnsdist-ecs.hh"
index 2330645d82795cab645eb7a832bf0b466b0765d0..3051da855194806596cad5ac58ae86410a86f0f9 100644 (file)
 
 #include "dnsdist.hh"
 #include "dnsdist-backend.hh"
+#include "dnsdist-cache.hh"
 #include "dnsdist-carbon.hh"
 #include "dnsdist-concurrent-connections.hh"
 #include "dnsdist-configuration.hh"
 #include "dnsdist-console.hh"
 #include "dnsdist-crypto.hh"
 #include "dnsdist-dynblocks.hh"
+#include "dnsdist-dynbpf.hh"
 #include "dnsdist-discovery.hh"
 #include "dnsdist-ecs.hh"
 #include "dnsdist-frontend.hh"
index 441939999e26e445dd1cd4739411373a2e35a7dc..e8123a387c5a14f30e6c85eb023c771986df79f2 100644 (file)
@@ -162,7 +162,6 @@ template <class T>
 using LuaTypeOrArrayOf = boost::variant<T, LuaArray<T>>;
 
 using luaruleparams_t = LuaAssociativeTable<std::string>;
-using nmts_t = NetmaskTree<DynBlock, AddressAndPortRange>;
 
 using luadnsrule_t = boost::variant<string, LuaArray<std::string>, std::shared_ptr<DNSRule>, DNSName, LuaArray<DNSName>>;
 std::shared_ptr<DNSRule> makeRule(const luadnsrule_t& var, const std::string& calledFrom);
index a9e4afc2efb46e829828b07c35cd62b4a538c74c..7790e755f0d34a709209c45160de430ff7fab734 100644 (file)
 #include "base64.hh"
 #include "connection-management.hh"
 #include "dnsdist.hh"
+#include "dnsdist-cache.hh"
 #include "dnsdist-configuration.hh"
 #include "dnsdist-dynblocks.hh"
+#include "dnsdist-dynbpf.hh"
 #include "dnsdist-frontend.hh"
 #include "dnsdist-healthchecks.hh"
 #include "dnsdist-metrics.hh"
index e91b5f9b0866833d13ea8f3f289794590e2d61d8..7b81baeee00e3910d9c935b183ee3e8328878513 100644 (file)
@@ -96,7 +96,6 @@ using std::thread;
 string g_outputBuffer;
 
 shared_ptr<BPFFilter> g_defaultBPFFilter{nullptr};
-std::vector<std::shared_ptr<DynBPFFilter>> g_dynBPFFilters;
 
 /* UDP: the grand design. Per socket we listen on for incoming queries there is one thread.
    Then we have a bunch of connected sockets for talking to downstream servers.
index 9a4fc0ca1a11dbb8332ca534dfe6da30ca3b89c6..5754af6a70a9f83e50f40c0d01c13af434ead776 100644 (file)
 #include <unistd.h>
 #include <unordered_map>
 
-#include <boost/variant.hpp>
-
+#include "bpf-filter.hh"
 #include "circular_buffer.hh"
-#include "dnscrypt.hh"
-#include "dnsdist-cache.hh"
-#include "dnsdist-dynbpf.hh"
 #include "dnsdist-idstate.hh"
 #include "dnsdist-lbpolicies.hh"
 #include "dnsdist-protocols.hh"
@@ -51,7 +47,6 @@
 #include "misc.hh"
 #include "mplexer.hh"
 #include "noinitvector.hh"
-#include "tcpiohandler.hh"
 #include "uuid-utils.hh"
 #include "proxy-protocol.hh"
 #include "stat_t.hh"
@@ -202,73 +197,6 @@ struct DNSResponse : DNSQuestion
   const std::shared_ptr<DownstreamState>& d_downstream;
 };
 
-struct DynBlock
-{
-  DynBlock()
-  {
-    until.tv_sec = 0;
-    until.tv_nsec = 0;
-  }
-
-  DynBlock(const std::string& reason_, const struct timespec& until_, const DNSName& domain_, DNSAction::Action action_) :
-    reason(reason_), domain(domain_), until(until_), action(action_)
-  {
-  }
-
-  DynBlock(const DynBlock& rhs) :
-    reason(rhs.reason), domain(rhs.domain), until(rhs.until), tagSettings(rhs.tagSettings), action(rhs.action), warning(rhs.warning), bpf(rhs.bpf)
-  {
-    blocks.store(rhs.blocks);
-  }
-
-  DynBlock(DynBlock&& rhs) :
-    reason(std::move(rhs.reason)), domain(std::move(rhs.domain)), until(rhs.until), tagSettings(std::move(rhs.tagSettings)), action(rhs.action), warning(rhs.warning), bpf(rhs.bpf)
-  {
-    blocks.store(rhs.blocks);
-  }
-
-  DynBlock& operator=(const DynBlock& rhs)
-  {
-    reason = rhs.reason;
-    until = rhs.until;
-    domain = rhs.domain;
-    action = rhs.action;
-    blocks.store(rhs.blocks);
-    warning = rhs.warning;
-    bpf = rhs.bpf;
-    tagSettings = rhs.tagSettings;
-    return *this;
-  }
-
-  DynBlock& operator=(DynBlock&& rhs)
-  {
-    reason = std::move(rhs.reason);
-    until = rhs.until;
-    domain = std::move(rhs.domain);
-    action = rhs.action;
-    blocks.store(rhs.blocks);
-    warning = rhs.warning;
-    bpf = rhs.bpf;
-    tagSettings = std::move(rhs.tagSettings);
-    return *this;
-  }
-
-  struct TagSettings
-  {
-    std::string d_name;
-    std::string d_value;
-  };
-
-  string reason;
-  DNSName domain;
-  timespec until{};
-  std::shared_ptr<TagSettings> tagSettings{nullptr};
-  mutable std::atomic<uint32_t> blocks{0};
-  DNSAction::Action action{DNSAction::Action::None};
-  bool warning{false};
-  bool bpf{false};
-};
-
 using pdns::stat_t;
 
 class BasicQPSLimiter
@@ -387,6 +315,8 @@ class XskPacket;
 class XskSocket;
 class XskWorker;
 
+class DNSCryptContext;
+
 struct ClientState
 {
   ClientState(const ComboAddress& local_, bool isTCP_, bool doReusePort, int fastOpenQueue, const std::string& itfName, const std::set<int>& cpus_, bool enableProxyProtocol) :
@@ -587,6 +517,7 @@ struct ClientState
 };
 
 struct CrossProtocolQuery;
+class FDMultiplexer;
 
 struct DownstreamState : public std::enable_shared_from_this<DownstreamState>
 {
@@ -962,6 +893,8 @@ void responderThread(std::shared_ptr<DownstreamState> dss);
 extern RecursiveLockGuarded<LuaContext> g_lua;
 extern std::string g_outputBuffer; // locking for this is ok, as locked by g_luamutex
 
+class DNSDistPacketCache;
+
 class DNSRule
 {
 public:
@@ -1017,7 +950,6 @@ enum ednsHeaderFlags
 };
 
 extern shared_ptr<BPFFilter> g_defaultBPFFilter;
-extern std::vector<std::shared_ptr<DynBPFFilter>> g_dynBPFFilters;
 
 void tcpAcceptorThread(const std::vector<ClientState*>& states);
 
@@ -1030,6 +962,8 @@ bool responseContentMatches(const PacketBuffer& response, const DNSName& qname,
 
 bool checkQueryHeaders(const struct dnsheader& dnsHeader, ClientState& clientState);
 
+class DNSCryptQuery;
+
 bool handleDNSCryptQuery(PacketBuffer& packet, DNSCryptQuery& query, bool tcp, time_t now, PacketBuffer& response);
 bool checkDNSCryptQuery(const ClientState& clientState, PacketBuffer& query, std::unique_ptr<DNSCryptQuery>& dnsCryptQuery, time_t now, bool tcp);
 
@@ -1041,6 +975,7 @@ enum class ProcessQueryResult : uint8_t
   Asynchronous
 };
 
+#include "dnsdist-actions.hh"
 #include "dnsdist-rule-chains.hh"
 
 ProcessQueryResult processQuery(DNSQuestion& dnsQuestion, std::shared_ptr<DownstreamState>& selectedBackend);
index c53009705126a2b319470982d034115b44557ddf..33e8140ee2f2199a7453bd18582973acbd5f0db9 100644 (file)
@@ -28,6 +28,8 @@
 #include <boost/test/unit_test.hpp>
 
 #include "dnsdist-lua-ffi.hh"
+#include "dnsdist-cache.hh"
+#include "dnsdist-configuration.hh"
 #include "dnsdist-rings.hh"
 #include "dnsdist-web.hh"
 #include "dnsparser.hh"