From: Otto Moerbeek Date: Fri, 17 Jan 2025 08:23:49 +0000 (+0100) Subject: Add a method to get the scoped subnet (aka Netmask) as suggested by @rgacogne X-Git-Tag: dnsdist-2.0.0-alpha1~162^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F15040%2Fhead;p=thirdparty%2Fpdns.git Add a method to get the scoped subnet (aka Netmask) as suggested by @rgacogne --- diff --git a/pdns/dnsproxy.cc b/pdns/dnsproxy.cc index ec3827037b..2f497f4571 100644 --- a/pdns/dnsproxy.cc +++ b/pdns/dnsproxy.cc @@ -289,7 +289,7 @@ void DNSProxy::mainloop() // update the EDNS options with info from the resolver - issue #5469 // note that this relies on the ECS string encoder to use the source network, and only take the prefix length from scope iter->second.complete->d_eso.setScopePrefixLength(packet.d_eso.getScopePrefixLength()); - DLOG(g_log << "from dnsproxy::mainLoop: updated EDNS options from resolver EDNS source: " << iter->second.complete->d_eso.getSource().toString() << " EDNS scope: " << Netmask(iter->second.complete->d_eso.getSource().getNetwork(), iter->second.complete->d_eso.getScopePrefixLength()).toString() << endl); + DLOG(g_log << "from dnsproxy::mainLoop: updated EDNS options from resolver EDNS source: " << iter->second.complete->d_eso.getSource().toString() << " EDNS scope: " << iter->second.complete->d_eso.getScope().toString() << endl); if (mdp.d_header.rcode == RCode::NoError) { for (const auto& answer : mdp.d_answers) { diff --git a/pdns/ednssubnet.hh b/pdns/ednssubnet.hh index cc671d0346..70a8f395c1 100644 --- a/pdns/ednssubnet.hh +++ b/pdns/ednssubnet.hh @@ -50,6 +50,10 @@ public: { return scopeBits; } + [[nodiscard]] Netmask getScope() const + { + return {source.getNetwork(), scopeBits}; + } [[nodiscard]] std::string makeOptString() const; static bool getFromString(const std::string& options, EDNSSubnetOpts* eso); static bool getFromString(const char* options, unsigned int len, EDNSSubnetOpts* eso); diff --git a/pdns/sdig.cc b/pdns/sdig.cc index 0a7dec1eeb..9f3a3fc6a1 100644 --- a/pdns/sdig.cc +++ b/pdns/sdig.cc @@ -171,7 +171,7 @@ static void printReply(const string& reply, bool showflags, bool hidesoadetails, EDNSSubnetOpts reso; if (EDNSSubnetOpts::getFromString(iter->second, &reso)) { cerr << "EDNS Subnet response: " << reso.getSource().toString() - << ", scope: " << Netmask(reso.getSource().getNetwork(), reso.getScopePrefixLength()).toString() + << ", scope: " << reso.getScope().toString() << ", family = " << std::to_string(reso.getFamily()) << endl; }