From: Charles-Henri Bruyand Date: Tue, 26 Sep 2023 08:38:43 +0000 (+0200) Subject: doq: rename variable, and update non compliant queries stats X-Git-Tag: rec-5.0.0-alpha2~6^2~25 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ec9548d75f733a5763c6af2c380e98cf669644df;p=thirdparty%2Fpdns.git doq: rename variable, and update non compliant queries stats --- diff --git a/pdns/dnsdistdist/doq.cc b/pdns/dnsdistdist/doq.cc index 8e6c3d60ef..f58c6de940 100644 --- a/pdns/dnsdistdist/doq.cc +++ b/pdns/dnsdistdist/doq.cc @@ -87,7 +87,7 @@ struct DOQServerConfig LocalHolders holders; QuicheConfig config; - ClientState* cs{nullptr}; + ClientState* clientState{nullptr}; std::shared_ptr df{nullptr}; pdns::channel::Sender d_responseSender; pdns::channel::Receiver d_responseReceiver; @@ -602,11 +602,11 @@ static void processDOQQuery(DOQUnitUniquePtr&& unit) remote = du->ids.origRemote; DOQServerConfig* dsc = du->dsc; auto& holders = dsc->holders; - ClientState& cs = *dsc->cs; + ClientState& clientState = *dsc->clientState; if (du->query.size() < sizeof(dnsheader)) { ++dnsdist::metrics::g_stats.nonCompliantQueries; - ++cs.nonCompliantQueries; + ++clientState.nonCompliantQueries; struct dnsheader* dh = reinterpret_cast(du->query.data()); dh->rcode = RCode::ServFail; dh->qr = true; @@ -616,7 +616,7 @@ static void processDOQQuery(DOQUnitUniquePtr&& unit) return; } - ++cs.queries; + ++clientState.queries; ++dnsdist::metrics::g_stats.queries; du->ids.queryRealTime.start(); @@ -624,7 +624,7 @@ static void processDOQQuery(DOQUnitUniquePtr&& unit) /* don't keep that pointer around, it will be invalidated if the buffer is ever resized */ struct dnsheader* dh = reinterpret_cast(du->query.data()); - if (!checkQueryHeaders(dh, cs)) { + if (!checkQueryHeaders(dh, clientState)) { dh->rcode = RCode::ServFail; dh->qr = true; du->response = std::move(du->query); @@ -650,7 +650,7 @@ static void processDOQQuery(DOQUnitUniquePtr&& unit) DNSQuestion dq(du->ids, du->query); const uint16_t* flags = getFlagsFromDNSHeader(dq.getHeader()); ids.origFlags = *flags; - du->ids.cs = &cs; + du->ids.cs = &clientState; auto result = processQuery(dq, holders, downstream); if (result == ProcessQueryResult::Drop) { @@ -770,17 +770,17 @@ static void flushResponses(pdns::channel::Receiver& receiver) } // this is the entrypoint from dnsdist.cc -void doqThread(ClientState* cs) +void doqThread(ClientState* clientState) { try { - std::shared_ptr& frontend = cs->doqFrontend; + std::shared_ptr& frontend = clientState->doqFrontend; - frontend->d_server_config->cs = cs; - frontend->d_server_config->df = cs->doqFrontend; + frontend->d_server_config->clientState = clientState; + frontend->d_server_config->df = clientState->doqFrontend; setThreadName("dnsdist/doq"); - Socket sock(cs->udpFD); + Socket sock(clientState->udpFD); PacketBuffer buffer(std::numeric_limits::max()); auto mplexer = std::unique_ptr(FDMultiplexer::getMultiplexerSilent()); @@ -844,7 +844,7 @@ void doqThread(ClientState* cs) } DEBUGLOG("Creating a new connection"); - conn = createConnection(*frontend->d_server_config, serverConnID, *originalDestinationID, tokenBuf, cs->local, client); + conn = createConnection(*frontend->d_server_config, serverConnID, *originalDestinationID, tokenBuf, clientState->local, client); if (!conn) { continue; } @@ -853,8 +853,8 @@ void doqThread(ClientState* cs) (struct sockaddr*)&client, client.getSocklen(), - (struct sockaddr*)&cs->local, - cs->local.getSocklen(), + (struct sockaddr*)&clientState->local, + clientState->local.getSocklen(), }; auto done = quiche_conn_recv(conn->get().d_conn.get(), reinterpret_cast(bufferStr.data()), bufferStr.size(), &recv_info); @@ -876,17 +876,21 @@ void doqThread(ClientState* cs) &fin); streamBuffer.resize(existingLength + received); if (fin) { - if (streamBuffer.size() < (sizeof(dnsheader) + sizeof(uint16_t))) { + if (streamBuffer.size() < (sizeof(uint16_t) + sizeof(dnsheader))) { + ++dnsdist::metrics::g_stats.nonCompliantQueries; + ++clientState->nonCompliantQueries; quiche_conn_stream_shutdown(conn->get().d_conn.get(), streamID, QUICHE_SHUTDOWN_WRITE, static_cast(DOQ_Error_Codes::DOQ_PROTOCOL_ERROR)); break; } uint16_t payloadLength = streamBuffer.at(0) * 256 + streamBuffer.at(1); streamBuffer.erase(streamBuffer.begin(), streamBuffer.begin() + 2); if (payloadLength != streamBuffer.size()) { + ++dnsdist::metrics::g_stats.nonCompliantQueries; + ++clientState->nonCompliantQueries; quiche_conn_stream_shutdown(conn->get().d_conn.get(), streamID, QUICHE_SHUTDOWN_WRITE, static_cast(DOQ_Error_Codes::DOQ_PROTOCOL_ERROR)); break; } - doq_dispatch_query(*(frontend->d_server_config), std::move(streamBuffer), cs->local, client, serverConnID, streamID); + doq_dispatch_query(*(frontend->d_server_config), std::move(streamBuffer), clientState->local, client, serverConnID, streamID); conn->get().d_streamBuffers.erase(streamID); } }