From df9cb7f3261bd3c340c0526ee6ca82abd0e2759d Mon Sep 17 00:00:00 2001 From: Charles-Henri Bruyand Date: Tue, 26 Sep 2023 11:21:49 +0200 Subject: [PATCH] doq: add valid/error responses counter and two doq protocol related error counters --- pdns/dnsdist-lua.cc | 6 +++--- pdns/dnsdistdist/doq.cc | 5 ++++- pdns/dnsdistdist/doq.hh | 6 ++++++ 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/pdns/dnsdist-lua.cc b/pdns/dnsdist-lua.cc index 0edf61947b..22debccbae 100644 --- a/pdns/dnsdist-lua.cc +++ b/pdns/dnsdist-lua.cc @@ -2561,11 +2561,11 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck) setLuaNoSideEffect(); try { ostringstream ret; - boost::format fmt("%-3d %-20.20s"); - ret << (fmt % "#" % "Address") << endl; + boost::format fmt("%-3d %-20.20s %-15d %-15d %-15d %-15d"); + ret << (fmt % "#" % "Address" % "Bad Version" % "Invalid Token" % "Errors" % "Valid") << endl; size_t counter = 0; for (const auto& ctx : g_doqlocals) { - ret << (fmt % counter % ctx->d_local.toStringWithPort()) << endl; + ret << (fmt % counter % ctx->d_local.toStringWithPort() % ctx->d_doqUnsupportedVersionErrors % ctx->d_doqInvalidTokensReceived % ctx->d_errorResponses % ctx->d_validResponses) << endl; counter++; } g_outputBuffer = ret.str(); diff --git a/pdns/dnsdistdist/doq.cc b/pdns/dnsdistdist/doq.cc index 06a432a9da..8786c55d0f 100644 --- a/pdns/dnsdistdist/doq.cc +++ b/pdns/dnsdistdist/doq.cc @@ -276,10 +276,11 @@ enum class DOQ_Error_Codes : uint64_t static void handleResponse(DOQFrontend& df, Connection& conn, const uint64_t streamID, const PacketBuffer& response) { if (response.size() == 0) { + ++df.d_errorResponses; quiche_conn_stream_shutdown(conn.d_conn.get(), streamID, QUICHE_SHUTDOWN_WRITE, static_cast(DOQ_Error_Codes::DOQ_UNSPECIFIED_ERROR)); return; } - + ++df.d_validResponses; uint16_t responseSize = static_cast(response.size()); const std::array sizeBytes = {static_cast(responseSize / 256), static_cast(responseSize % 256)}; size_t pos = 0; @@ -826,6 +827,7 @@ void doqThread(ClientState* clientState) DEBUGLOG("Connection not found"); if (!quiche_version_is_supported(version)) { DEBUGLOG("Unsupported version"); + ++frontend->d_doqUnsupportedVersionErrors; handleVersionNegociation(sock, clientConnID, serverConnID, client); continue; } @@ -840,6 +842,7 @@ void doqThread(ClientState* clientState) PacketBuffer tokenBuf(token.begin(), token.begin() + token_len); auto originalDestinationID = validateToken(tokenBuf, serverConnID, client); if (!originalDestinationID) { + ++frontend->d_doqInvalidTokensReceived; DEBUGLOG("Discarding invalid token"); continue; } diff --git a/pdns/dnsdistdist/doq.hh b/pdns/dnsdistdist/doq.hh index 70c69d324f..064838a7bc 100644 --- a/pdns/dnsdistdist/doq.hh +++ b/pdns/dnsdistdist/doq.hh @@ -62,6 +62,12 @@ struct DOQFrontend uint64_t d_idleTimeout{5}; uint64_t d_maxInFlight{65535}; std::string d_ccAlgo{"reno"}; + + pdns::stat_t d_doqUnsupportedVersionErrors{0}; // Unsupported protocol version errors + pdns::stat_t d_doqInvalidTokensReceived{0}; // Discarded received tokens + pdns::stat_t d_validResponses{0}; // Valid responses sent + pdns::stat_t d_errorResponses{0}; // Empty responses (no backend, drops, invalid queries, etc.) + static std::map s_available_cc_algorithms; }; -- 2.47.2