]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Ensure CIRC_BW event is emitted immediately upon slow start exit.
authorMike Perry <mikeperry-git@torproject.org>
Thu, 3 Mar 2022 20:41:27 +0000 (20:41 +0000)
committerMike Perry <mikeperry-git@torproject.org>
Thu, 3 Mar 2022 20:55:46 +0000 (20:55 +0000)
This ensures sbws gets this information quickly, so it can begin measurement.

src/core/or/congestion_control_nola.c
src/core/or/congestion_control_vegas.c
src/core/or/congestion_control_westwood.c

index 52d41157a2cdb81c5cf668c4cc654d65a18a732a..0c64793d9154b230b51aa4a1303250ea5baf2159 100644 (file)
@@ -22,6 +22,7 @@
 #include "core/or/origin_circuit_st.h"
 #include "core/or/channel.h"
 #include "feature/nodelist/networkstatus.h"
+#include "feature/control/control_events.h"
 
 #define NOLA_BDP_OVERSHOOT    100
 
@@ -70,8 +71,19 @@ congestion_control_nola_process_sendme(congestion_control_t *cc,
   /* If we get a congestion event, the only thing NOLA
    * does is note this as if we exited slow-start
    * (which for NOLA just means we finished our ICW). */
-  if (cc->next_cc_event == 0)
-    cc->in_slow_start = 0;
+  if (cc->next_cc_event == 0) {
+    if (cc->in_slow_start) {
+      cc->in_slow_start = 0;
+
+      /* We need to report that slow start has exited ASAP,
+       * for sbws bandwidth measurement. */
+      if (CIRCUIT_IS_ORIGIN(circ)) {
+        /* We must discard const here because the event modifies fields :/ */
+        control_event_circ_bandwidth_used_for_circ(
+                TO_ORIGIN_CIRCUIT((circuit_t*)circ));
+      }
+    }
+  }
 
   /* If we did not successfully update BDP, we must return. Otherwise,
    * NOLA can drift downwards */
index 5c627873753e8579abb0e73606ee1b23b5b83adb..5451d7849c4b70af7b95a45f23a65ad5a420ca13 100644 (file)
@@ -22,6 +22,7 @@
 #include "core/or/origin_circuit_st.h"
 #include "core/or/channel.h"
 #include "feature/nodelist/networkstatus.h"
+#include "feature/control/control_events.h"
 
 #define OUTBUF_CELLS (2*TLS_RECORD_MAX_CELLS)
 
@@ -236,6 +237,14 @@ congestion_control_vegas_process_sendme(congestion_control_t *cc,
         cc->cwnd = vegas_bdp_mix(cc) + cc->vegas_params.gamma;
         cc->in_slow_start = 0;
         log_info(LD_CIRC, "CC: TOR_VEGAS exiting slow start");
+
+        /* We need to report that slow start has exited ASAP,
+         * for sbws bandwidth measurement. */
+        if (CIRCUIT_IS_ORIGIN(circ)) {
+          /* We must discard const here because the event modifies fields :/ */
+          control_event_circ_bandwidth_used_for_circ(
+                  TO_ORIGIN_CIRCUIT((circuit_t*)circ));
+        }
       }
     } else {
       if (queue_use > cc->vegas_params.delta) {
index 357cdeb3b9b53085f87810124108e7d0cbc6c877..2e4575554af5cea12c929954531286a7773d42b6 100644 (file)
@@ -22,6 +22,7 @@
 #include "core/or/origin_circuit_st.h"
 #include "core/or/channel.h"
 #include "feature/nodelist/networkstatus.h"
+#include "feature/control/control_events.h"
 
 #define USEC_ONE_MS (1000)
 
@@ -179,6 +180,14 @@ congestion_control_westwood_process_sendme(congestion_control_t *cc,
 
       log_info(LD_CIRC, "CC: TOR_WESTWOOD congestion. New max RTT: %"PRIu64,
                  cc->max_rtt_usec/1000);
+
+      /* We need to report that slow start has exited ASAP,
+       * for sbws bandwidth measurement. */
+      if (CIRCUIT_IS_ORIGIN(circ)) {
+        /* We must discard const here because the event modifies fields :/ */
+        control_event_circ_bandwidth_used_for_circ(
+                TO_ORIGIN_CIRCUIT((circuit_t*)circ));
+      }
     }
 
     /* cwnd can never fall below 1 increment */