#include "syncres.hh"
#include "namespaces.hh"
#include "rec_channel.hh"
+#include "ednssubnet.hh"
#include <unordered_set>
#if !defined(HAVE_LUA)
return boost::optional<string>();
}
+boost::optional<Netmask> RecursorLua4::DNSQuestion::getEDNSSubnet()
+{
+
+ if(ednsOptions) {
+ for(const auto& o : *ednsOptions) {
+ if(o.first==8) {
+ EDNSSubnetOpts eso;
+ if(getEDNSSubnetOptsFromString(o.second, &eso))
+ return eso.source;
+ else
+ break;
+ }
+ }
+ }
+ return boost::optional<Netmask>();
+}
+
vector<pair<int, DNSRecord> > RecursorLua4::DNSQuestion::getRecords()
{
return ComboAddress::addressOnlyEqual()(lhs, rhs);
});
+
+ d_lw->registerFunction<ComboAddress(Netmask::*)()>("getNetwork", [](const Netmask& nm) { return nm.getNetwork(); } ); // const reference makes this necessary
+ d_lw->registerFunction("toString", &Netmask::toString);
+
d_lw->writeFunction("newNMG", []() { return NetmaskGroup(); });
d_lw->registerFunction<void(NetmaskGroup::*)(const std::string&mask)>("addMask", [](NetmaskGroup&nmg, const std::string& mask)
{
d_lw->registerMember("udpCallback", &DNSQuestion::udpCallback);
d_lw->registerFunction("getEDNSOptions", &DNSQuestion::getEDNSOptions);
d_lw->registerFunction("getEDNSOption", &DNSQuestion::getEDNSOption);
+ d_lw->registerFunction("getEDNSSubnet", &DNSQuestion::getEDNSSubnet);
d_lw->registerMember("name", &DNSRecord::d_name);
d_lw->registerMember("type", &DNSRecord::d_type);
d_lw->registerMember("ttl", &DNSRecord::d_ttl);
vector<pair<int,DNSRecord> > getRecords();
vector<pair<uint16_t, string> > getEDNSOptions();
boost::optional<string> getEDNSOption(uint16_t code);
+ boost::optional<Netmask> getEDNSSubnet();
void setRecords(const vector<pair<int,DNSRecord> >& records);
bool variable{false};
function preresolve(dq)
print("Got question for "..dq.qname:toString().." from "..dq.remoteaddr:toString().." to "..dq.localaddr:toString())
+ local ednssubnet=dq:getEDNSSubnet()
+ if(ednssubnet) then
+ print("Packet EDNS subnet source: "..ednssubnet:toString()..", "..ednssubnet:getNetwork():toString())
+ end
+
+
local a=dq:getEDNSOption(3)
if(a) then
print("There is an EDNS option 3 present: "..a)