]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Add direct Lua FFI interface for masking the remote addr
authorRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 3 Jan 2020 17:06:54 +0000 (18:06 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 11 Feb 2020 10:49:58 +0000 (11:49 +0100)
pdns/dnsdistdist/dnsdist-lua-ffi-interface.h
pdns/dnsdistdist/dnsdist-lua-ffi.cc
pdns/dnsdistdist/dnsdist-lua-ffi.hh
pdns/dnsdistdist/test-dnsdistlbpolicies_cc.cc

index 327da5b498af1dba31b7985d2dd36bf577f7a406..daf4a50ebdb6e8152dd87d95cbcdcc46ddd5a9f0 100644 (file)
@@ -42,6 +42,7 @@ typedef struct dnsdist_tag {
 void dnsdist_ffi_dnsquestion_get_localaddr(const dnsdist_ffi_dnsquestion_t* dq, const void** addr, size_t* addrSize) __attribute__ ((visibility ("default")));
 uint16_t dnsdist_ffi_dnsquestion_get_local_port(const dnsdist_ffi_dnsquestion_t* dq) __attribute__ ((visibility ("default")));
 void dnsdist_ffi_dnsquestion_get_remoteaddr(const dnsdist_ffi_dnsquestion_t* dq, const void** addr, size_t* addrSize) __attribute__ ((visibility ("default")));
+void dnsdist_ffi_dnsquestion_get_masked_remoteaddr(dnsdist_ffi_dnsquestion_t* dq, const void** addr, size_t* addrSize, uint8_t bits) __attribute__ ((visibility ("default")));
 uint16_t dnsdist_ffi_dnsquestion_get_remote_port(const dnsdist_ffi_dnsquestion_t* dq) __attribute__ ((visibility ("default")));
 void dnsdist_ffi_dnsquestion_get_qname_raw(const dnsdist_ffi_dnsquestion_t* dq, const char** qname, size_t* qnameSize) __attribute__ ((visibility ("default")));
 size_t dnsdist_ffi_dnsquestion_get_qname_hash(const dnsdist_ffi_dnsquestion_t* dq, size_t init);
index 548357785b58eac3e266628c67e8b0332237e98a..efb7695854ca75e20ccee41db68cc9160a6f0068 100644 (file)
@@ -55,6 +55,12 @@ void dnsdist_ffi_dnsquestion_get_remoteaddr(const dnsdist_ffi_dnsquestion_t* dq,
   dnsdist_ffi_comboaddress_to_raw(*dq->dq->remote, addr, addrSize);
 }
 
+void dnsdist_ffi_dnsquestion_get_masked_remoteaddr(dnsdist_ffi_dnsquestion_t* dq, const void** addr, size_t* addrSize, uint8_t bits)
+{
+  dq->maskedRemote = Netmask(*dq->dq->remote, bits).getMaskedNetwork();
+  dnsdist_ffi_comboaddress_to_raw(dq->maskedRemote, addr, addrSize);
+}
+
 uint16_t dnsdist_ffi_dnsquestion_get_local_port(const dnsdist_ffi_dnsquestion_t* dq)
 {
   return dq->dq->local->getPort();
index 118fd0ce8d33edfac5f4db8d928cb1d2bd6d1391..ca3e8d4edbd37e1e21f64feb3b301a855ff4aff7 100644 (file)
@@ -51,6 +51,7 @@ struct dnsdist_ffi_dnsquestion_t
   std::vector<dnsdist_tag_t> tagsVect;
   std::unordered_map<std::string, std::string> httpHeaders;
   std::string trailingData;
+  ComboAddress maskedRemote;
   boost::optional<std::string> result{boost::none};
   boost::optional<std::string> httpPath{boost::none};
   boost::optional<std::string> httpQueryString{boost::none};
index e04168b2e37bb8a2d774293908824cf2ecd4f557..4f858d76069b083f328eaa233631b3190767ac6a 100644 (file)
@@ -2,7 +2,6 @@
 #define BOOST_TEST_DYN_LINK
 #define BOOST_TEST_NO_MAIN
 
-#include <thread>
 #include <boost/test/unit_test.hpp>
 
 #include "dnsdist.hh"
@@ -505,6 +504,7 @@ BOOST_AUTO_TEST_CASE(test_lua) {
 }
 
 #ifdef LUAJIT_VERSION
+
 BOOST_AUTO_TEST_CASE(test_lua_ffi_rr) {
   std::vector<DNSName> names;
   names.reserve(1000);
@@ -726,6 +726,7 @@ BOOST_AUTO_TEST_CASE(test_lua_ffi_chashed) {
 
   g_verbose = existingVerboseValue;
 }
+
 #endif /* LUAJIT_VERSION */
 
 BOOST_AUTO_TEST_SUITE_END()