]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Work around Quiche not dealing well with removed congestion algorithms
authorRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 2 Feb 2026 14:16:20 +0000 (15:16 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 2 Feb 2026 14:32:08 +0000 (15:32 +0100)
See https://github.com/cloudflare/quiche/issues/2342

Signed-off-by: Remi Gacogne <remi.gacogne@powerdns.com>
pdns/dnsdistdist/dnsdist-configuration-yaml.cc
pdns/dnsdistdist/dnsdist-lua.cc
pdns/dnsdistdist/doq-common.cc
pdns/dnsdistdist/doq-common.hh

index a4b44e0d43946ce9e296ec9e81b185b288d0c068..dbbc93e08ef1c6dffab99bb2ab55fa723b0848d3 100644 (file)
@@ -338,9 +338,7 @@ static bool handleTLSConfiguration(const Context& context, const dnsdist::rust::
     frontend->d_quicheParams.d_maxInFlight = bind.doq.max_concurrent_queries_per_connection;
     frontend->d_quicheParams.d_idleTimeout = bind.quic.idle_timeout;
     frontend->d_quicheParams.d_keyLogFile = std::string(bind.tls.key_log_file);
-    if (dnsdist::doq::s_available_cc_algorithms.count(std::string(bind.quic.congestion_control_algorithm)) > 0) {
-      frontend->d_quicheParams.d_ccAlgo = std::string(bind.quic.congestion_control_algorithm);
-    }
+    frontend->d_quicheParams.d_ccAlgo = std::string(bind.quic.congestion_control_algorithm);
     frontend->d_internalPipeBufferSize = bind.quic.internal_pipe_buffer_size;
     state.doqFrontend = std::move(frontend);
   }
@@ -352,9 +350,7 @@ static bool handleTLSConfiguration(const Context& context, const dnsdist::rust::
     frontend->d_quicheParams.d_tlsConfig = std::move(tlsConfig);
     frontend->d_quicheParams.d_idleTimeout = bind.quic.idle_timeout;
     frontend->d_quicheParams.d_keyLogFile = std::string(bind.tls.key_log_file);
-    if (dnsdist::doq::s_available_cc_algorithms.count(std::string(bind.quic.congestion_control_algorithm)) > 0) {
-      frontend->d_quicheParams.d_ccAlgo = std::string(bind.quic.congestion_control_algorithm);
-    }
+    frontend->d_quicheParams.d_ccAlgo = std::string(bind.quic.congestion_control_algorithm);
     frontend->d_internalPipeBufferSize = bind.quic.internal_pipe_buffer_size;
     state.doh3Frontend = std::move(frontend);
   }
index 2903a95c6566d5d3b94581f63557206353ab64ac..f5a34c54b83a5dda3adb6ecc7164903588d6e741 100644 (file)
@@ -2432,13 +2432,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
       {
         std::string valueStr;
         if (getOptionalValue<std::string>(vars, "congestionControlAlgo", valueStr) > 0) {
-          if (dnsdist::doq::s_available_cc_algorithms.count(valueStr) > 0) {
-            frontend->d_quicheParams.d_ccAlgo = std::move(valueStr);
-          }
-          else {
-            SLOG(warnlog("Ignoring unknown value '%s' for 'congestionControlAlgo' on 'addDOH3Local'", valueStr),
-                 getLogger("addDOH3Local")->info(Logr::Warning, "Ignoring unknown value for 'congestionControlAlgo'", "frontend.address", Logging::Loggable(addr), "value", Logging::Loggable(valueStr)));
-          }
+          frontend->d_quicheParams.d_ccAlgo = std::move(valueStr);
         }
       }
       parseTLSConfig(frontend->d_quicheParams.d_tlsConfig, "addDOH3Local", vars);
@@ -2512,13 +2506,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck)
       {
         std::string valueStr;
         if (getOptionalValue<std::string>(vars, "congestionControlAlgo", valueStr) > 0) {
-          if (dnsdist::doq::s_available_cc_algorithms.count(valueStr) > 0) {
-            frontend->d_quicheParams.d_ccAlgo = std::move(valueStr);
-          }
-          else {
-            SLOG(warnlog("Ignoring unknown value '%s' for 'congestionControlAlgo' on 'addDOQLocal'", valueStr),
-                 getLogger("addDOQLocal")->info(Logr::Warning, "Ignoring unknown value for 'congestionControlAlgo'", "frontend.address", Logging::Loggable(addr), "value", Logging::Loggable(valueStr)));
-          }
+          frontend->d_quicheParams.d_ccAlgo = std::move(valueStr);
         }
       }
       parseTLSConfig(frontend->d_quicheParams.d_tlsConfig, "addDOQLocal", vars);
index 8236a14a0b379a338c605c0354ebd27ba16d1e8a..f3c58bc55da7a04c8d3ecd24364654caed429705 100644 (file)
@@ -284,10 +284,7 @@ void configureQuiche(QuicheConfig& config, const QuicheParams& params, bool isHT
     quiche_config_log_keys(config.get());
   }
 
-  auto algo = dnsdist::doq::s_available_cc_algorithms.find(params.d_ccAlgo);
-  if (algo != dnsdist::doq::s_available_cc_algorithms.end()) {
-    quiche_config_set_cc_algorithm(config.get(), static_cast<enum quiche_cc_algorithm>(algo->second));
-  }
+  quiche_config_set_cc_algorithm_name(config.get(), params.d_ccAlgo.c_str());
 
   {
     PacketBuffer resetToken;
index 96f99dbfc9a023b9dd465a00138ff7963fae4a01..0ba4c28e3231316be8d2698ff071e2c0e566e2ee 100644 (file)
 
 namespace dnsdist::doq
 {
-
-static const std::map<const std::string, int> s_available_cc_algorithms = {
-  {"reno", QUICHE_CC_RENO},
-  {"cubic", QUICHE_CC_CUBIC},
-  {"bbr", QUICHE_CC_BBR},
-};
-
 using QuicheConnection = std::unique_ptr<quiche_conn, decltype(&quiche_conn_free)>;
 using QuicheHTTP3Connection = std::unique_ptr<quiche_h3_conn, decltype(&quiche_h3_conn_free)>;
 using QuicheConfig = std::shared_ptr<quiche_config>;