]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Do not waste CPU cycles handling EDNS twice on self-generated answers 15602/head
authorRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 6 Jun 2025 13:14:13 +0000 (15:14 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 6 Jun 2025 14:05:20 +0000 (16:05 +0200)
Signed-off-by: Remi Gacogne <remi.gacogne@powerdns.com>
pdns/dnsdistdist/dnsdist-self-answers.cc
pdns/dnsdistdist/dnsdist.cc
pdns/dnsdistdist/dnsdist.hh

index 4e0b66084e52c3f82e835e3e33be497b09cec30c..be608fbd6e7405f17444eeb68ea2e41900705eaa 100644 (file)
@@ -94,6 +94,7 @@ bool generateAnswerFromCNAME(DNSQuestion& dnsQuestion, const DNSName& cname, con
     addEDNS(dnsQuestion.getMutableData(), dnsQuestion.getMaximumSize(), dnssecOK, dnsdist::configuration::getCurrentRuntimeConfiguration().d_payloadSizeSelfGenAnswers, 0);
   }
 
+  dnsQuestion.d_selfGeneratedHandledEDNS = true;
   return true;
 }
 
@@ -164,6 +165,7 @@ bool generateAnswerFromIPAddresses(DNSQuestion& dnsQuestion, const std::vector<C
     addEDNS(dnsQuestion.getMutableData(), dnsQuestion.getMaximumSize(), dnssecOK, dnsdist::configuration::getCurrentRuntimeConfiguration().d_payloadSizeSelfGenAnswers, 0);
   }
 
+  dnsQuestion.d_selfGeneratedHandledEDNS = true;
   return true;
 }
 
@@ -226,6 +228,7 @@ bool generateAnswerFromRDataEntries(DNSQuestion& dnsQuestion, const std::vector<
     addEDNS(dnsQuestion.getMutableData(), dnsQuestion.getMaximumSize(), dnssecOK, dnsdist::configuration::getCurrentRuntimeConfiguration().d_payloadSizeSelfGenAnswers, 0);
   }
 
+  dnsQuestion.d_selfGeneratedHandledEDNS = true;
   return true;
 }
 
@@ -233,7 +236,7 @@ bool generateAnswerFromRawPacket(DNSQuestion& dnsQuestion, const PacketBuffer& p
 {
   auto questionId = dnsQuestion.getHeader()->id;
   dnsQuestion.getMutableData() = packet;
-  dnsQuestion.d_selfGeneratedFromPacket = true;
+  dnsQuestion.d_selfGeneratedHandledEDNS = true;
   dnsdist::PacketMangling::editDNSHeaderFromPacket(dnsQuestion.getMutableData(), [questionId](dnsheader& header) {
     header.id = questionId;
     return true;
index b96617e0a570cced41ec7e8928e09d8ff63c7e54..ff05ffdc2151af96eb8aa1695da4c8a882e1aba3 100644 (file)
@@ -326,7 +326,7 @@ static bool fixUpQueryTurnedResponse(DNSQuestion& dnsQuestion, const uint16_t or
     return true;
   });
 
-  if (dnsQuestion.d_selfGeneratedFromPacket) {
+  if (dnsQuestion.d_selfGeneratedHandledEDNS) {
     return true;
   }
   return addEDNSToQueryTurnedResponse(dnsQuestion);
index 06b32ade6fec14f4cdd8efcd6e44ceefadba622f..2d10591eab6989cdae12b6f819f53c45981d1028 100644 (file)
@@ -184,7 +184,7 @@ public:
   bool ecsOverride;
   bool useECS{true};
   bool asynchronous{false};
-  bool d_selfGeneratedFromPacket{false};
+  bool d_selfGeneratedHandledEDNS{false};
 };
 
 struct DownstreamState;