Commit b1d93df0 authored by Roger Dingledine's avatar Roger Dingledine
Browse files

if you're using relaybandwidthrate and relaybandwidthburst, make

sure that's reflected in your router descriptor.


svn:r10114
parent dc795203
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -6,10 +6,14 @@ Changes in version 0.2.0.1-alpha - 2007-??-??
      queue for each circuit.  This lets us use less slack memory, and
      will eventually let us be smarter about prioritizing different kinds
      of traffic.
    - Allocate cells in memory pools better speed and memory efficiency,
      especially on platforms where malloc() is inefficient.
    - Use memory pools to allocate cells with better speed and memory
      efficiency, especially on platforms where malloc() is inefficient.
    - Stop reading on edge connections when their corresponding circuit
      buffers are full; start again as the circuits empty out.
    - New config options RelayBandwidthRate and RelayBandwidthBurst:
      a separate set of token buckets for relayed traffic. Right now
      relayed traffic is defined as answers to directory requests, and
      OR connections that don't have any local circuits on them.
    - Make PreferTunneledDirConns and TunnelDirConns work even when
      we have no cached directory info. This means Tor clients can now
      do all of their connections protected by TLS.
+32 −12
Original line number Diff line number Diff line
@@ -2275,6 +2275,24 @@ validate_ports_csv(smartlist_t *sl, const char *name, char **msg)
  return 0;
}

/** If <b>value</b> exceeds ROUTER_MAX_DECLARED_BANDWIDTH, write
 * a complaint into *<b>msg</b> using string <b>desc</b>, and return -1.
 * Else return 0.
 */
static int
ensure_bandwidth_cap(uint64_t value, const char *desc, char **msg)
{
  int r;
  char buf[1024];
  if (value > ROUTER_MAX_DECLARED_BANDWIDTH) {
    r = tor_snprintf(buf, sizeof(buf), "%s must be at most %d",
                     desc, ROUTER_MAX_DECLARED_BANDWIDTH);
    *msg = tor_strdup(r >= 0 ? buf : "internal error");
    return -1;
  }
  return 0;
}

/** Lowest allowable value for RendPostPeriod; if this is too low, hidden
 * services can overload the directory system. */
#define MIN_REND_POST_PERIOD (10*60)
@@ -2644,20 +2662,22 @@ options_validate(or_options_t *old_options, or_options_t *options,
  if (options->KeepalivePeriod < 1)
    REJECT("KeepalivePeriod option must be positive.");

  if (options->BandwidthRate > ROUTER_MAX_DECLARED_BANDWIDTH) {
    r = tor_snprintf(buf, sizeof(buf),
                     "BandwidthRate must be at most %d",
                     ROUTER_MAX_DECLARED_BANDWIDTH);
    *msg = tor_strdup(r >= 0 ? buf : "internal error");
  if (ensure_bandwidth_cap(options->BandwidthRate,
                           "BandwidthRate", msg) < 0)
    return -1;
  }
  if (options->BandwidthBurst > ROUTER_MAX_DECLARED_BANDWIDTH) {
    r = tor_snprintf(buf, sizeof(buf),
                     "BandwidthBurst must be at most %d",
                     ROUTER_MAX_DECLARED_BANDWIDTH);
    *msg = tor_strdup(r >= 0 ? buf : "internal error");
  if (ensure_bandwidth_cap(options->BandwidthBurst,
                           "BandwidthBurst", msg) < 0)
    return -1;
  }
  if (ensure_bandwidth_cap(options->MaxAdvertisedBandwidth,
                           "MaxAdvertisedBandwidth", msg) < 0)
    return -1;
  if (ensure_bandwidth_cap(options->RelayBandwidthRate,
                           "RelayBandwidthRate", msg) < 0)
    return -1;
  if (ensure_bandwidth_cap(options->RelayBandwidthBurst,
                           "RelayBandwidthBurst", msg) < 0)
    return -1;

  if (server_mode(options)) {
    if (options->BandwidthRate < ROUTER_REQUIRED_MIN_BANDWIDTH*2) {
      r = tor_snprintf(buf, sizeof(buf),
+13 −8
Original line number Diff line number Diff line
@@ -944,17 +944,22 @@ router_rebuild_descriptor(int force)
  }
  get_platform_str(platform, sizeof(platform));
  ri->platform = tor_strdup(platform);

  /* compute ri->bandwidthrate as the min of various options */
  ri->bandwidthrate = (int)options->BandwidthRate;
  if (ri->bandwidthrate > options->MaxAdvertisedBandwidth)
    ri->bandwidthrate = (int)options->MaxAdvertisedBandwidth;
  if (options->RelayBandwidthRate > 0 &&
      ri->bandwidthrate > options->RelayBandwidthRate)
    ri->bandwidthrate = (int)options->RelayBandwidthRate;

  /* and compute ri->bandwidthburst similarly */
  ri->bandwidthburst = (int)options->BandwidthBurst;
  ri->bandwidthcapacity = hibernating ? 0 : rep_hist_bandwidth_assess();
  if (options->RelayBandwidthBurst > 0 &&
      ri->bandwidthburst > options->RelayBandwidthBurst)
    ri->bandwidthburst = (int)options->RelayBandwidthBurst;

  if (options->BandwidthRate > options->MaxAdvertisedBandwidth) {
    if (options->MaxAdvertisedBandwidth > ROUTER_MAX_DECLARED_BANDWIDTH) {
      ri->bandwidthrate = ROUTER_MAX_DECLARED_BANDWIDTH;
    } else {
      ri->bandwidthrate = (int)options->MaxAdvertisedBandwidth;
    }
  }
  ri->bandwidthcapacity = hibernating ? 0 : rep_hist_bandwidth_assess();

  policies_parse_exit_policy(options->ExitPolicy, &ri->exit_policy,
                             options->ExitPolicyRejectPrivate);