From: Remi Gacogne Date: Fri, 3 Mar 2023 13:04:16 +0000 (+0100) Subject: dnsdist: Fall-back to non-XSK for too large responses X-Git-Tag: dnsdist-1.9.0-rc1^2~41 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=953dc1ee667d747add03a7eb038c9805b18a9478;p=thirdparty%2Fpdns.git dnsdist: Fall-back to non-XSK for too large responses --- diff --git a/pdns/dnsdist.cc b/pdns/dnsdist.cc index 304cd0f99b..82ea4fc849 100644 --- a/pdns/dnsdist.cc +++ b/pdns/dnsdist.cc @@ -880,10 +880,20 @@ void responderThread(std::shared_ptr 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) {