]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Fall-back to non-XSK for too large responses
authorRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 3 Mar 2023 13:04:16 +0000 (14:04 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 23 Jan 2024 11:54:16 +0000 (12:54 +0100)
pdns/dnsdist.cc

index 304cd0f99b695e42d07450ed4e072cf35f584fd7..82ea4fc8494f028abb69fbdad9ab5a9c81086c22 100644 (file)
@@ -880,10 +880,20 @@ void responderThread(std::shared_ptr<DownstreamState> dss)
               return;
             }
             auto response = packet->clonePacketBuffer();
+            if (response.size() > packet->capacity()) {
+              /* fallback to sending the packet via normal socket */
+              ids->xskPacketHeader.reset();
+            }
             if (!processResponderPacket(dss, response, *localRespRuleActions, *localCacheInsertedRespRuleActions, std::move(*ids))) {
               xskInfo->sq.push(packet);
               return;
             }
+            if (response.size() > packet->capacity()) {
+              /* fallback to sending the packet via normal socket */
+              sendUDPResponse(ids->cs->udpFD, response, ids->delayMsec, ids->hopLocal, ids->hopRemote);
+              xskInfo->sq.push(packet);
+              return;
+            }
             packet->setHeader(*ids->xskPacketHeader);
             packet->setPayload(response);
             if (ids->delayMsec > 0) {