Commit 7cb050bd authored by Mike Perry's avatar Mike Perry
Browse files

Ensure CIRC_BW event is emitted immediately upon slow start exit.

This ensures sbws gets this information quickly, so it can begin measurement.
parent 646a1d5f
Loading
Loading
Loading
Loading
+14 −2
Original line number Diff line number Diff line
@@ -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,9 +71,20 @@ 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)
  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 */
  if (!congestion_control_update_circuit_estimates(cc, circ, layer_hint)) {
+9 −0
Original line number Diff line number Diff line
@@ -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) {
+9 −0
Original line number Diff line number Diff line
@@ -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 */