]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Prevent duplicated responses for "too large" XSK responses
authorRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 15 May 2026 13:59:15 +0000 (15:59 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 15 May 2026 13:59:15 +0000 (15:59 +0200)
Signed-off-by: Remi Gacogne <remi.gacogne@powerdns.com>
pdns/dnsdistdist/dnsdist-xsk.cc

index d66b5dea221a3d07912027e470a14e95e99f6989..143f4575870e2ad339c817a22eb1cd48205e1fdc 100644 (file)
@@ -70,6 +70,8 @@ void XskResponderThread(std::shared_ptr<DownstreamState> dss, std::shared_ptr<Xs
           auto response = packet.clonePacketBuffer();
           if (response.size() > packet.getCapacity()) {
             /* fallback to sending the packet via normal socket */
+            VERBOSESLOG(infolog("XSK packet falling back because packet is too large"),
+                        logger->info(Logr::Info, "XSK packet falling back because packet is too large"));
             ids->xskPacketHeader.clear();
           }
           if (!processResponderPacket(dss, response, std::move(*ids))) {
@@ -79,10 +81,6 @@ void XskResponderThread(std::shared_ptr<DownstreamState> dss, std::shared_ptr<Xs
             return;
           }
           if (response.size() > packet.getCapacity()) {
-            /* fallback to sending the packet via normal socket */
-            sendUDPResponse(ids->cs->udpFD, response, ids->delayMsec, ids->hopLocal, ids->hopRemote);
-            VERBOSESLOG(infolog("XSK packet falling back because packet is too large"),
-                        logger->info(Logr::Info, "XSK packet falling back because packet is too large"));
             xskInfo->markAsFree(packet);
             return;
           }