if you're using relaybandwidthrate and relaybandwidthburst, make

sure that's reflected in your router descriptor.


svn:r10114
This commit is contained in:
Roger Dingledine 2007-05-04 09:20:13 +00:00
parent dc795203aa
commit b1d93df038
3 changed files with 53 additions and 24 deletions

View File

@ -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 queue for each circuit. This lets us use less slack memory, and
will eventually let us be smarter about prioritizing different kinds will eventually let us be smarter about prioritizing different kinds
of traffic. of traffic.
- Allocate cells in memory pools better speed and memory efficiency, - Use memory pools to allocate cells with better speed and memory
especially on platforms where malloc() is inefficient. efficiency, especially on platforms where malloc() is inefficient.
- Stop reading on edge connections when their corresponding circuit - Stop reading on edge connections when their corresponding circuit
buffers are full; start again as the circuits empty out. 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 - Make PreferTunneledDirConns and TunnelDirConns work even when
we have no cached directory info. This means Tor clients can now we have no cached directory info. This means Tor clients can now
do all of their connections protected by TLS. do all of their connections protected by TLS.

View File

@ -2275,6 +2275,24 @@ validate_ports_csv(smartlist_t *sl, const char *name, char **msg)
return 0; 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 /** Lowest allowable value for RendPostPeriod; if this is too low, hidden
* services can overload the directory system. */ * services can overload the directory system. */
#define MIN_REND_POST_PERIOD (10*60) #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) if (options->KeepalivePeriod < 1)
REJECT("KeepalivePeriod option must be positive."); REJECT("KeepalivePeriod option must be positive.");
if (options->BandwidthRate > ROUTER_MAX_DECLARED_BANDWIDTH) { if (ensure_bandwidth_cap(options->BandwidthRate,
r = tor_snprintf(buf, sizeof(buf), "BandwidthRate", msg) < 0)
"BandwidthRate must be at most %d",
ROUTER_MAX_DECLARED_BANDWIDTH);
*msg = tor_strdup(r >= 0 ? buf : "internal error");
return -1; return -1;
} if (ensure_bandwidth_cap(options->BandwidthBurst,
if (options->BandwidthBurst > ROUTER_MAX_DECLARED_BANDWIDTH) { "BandwidthBurst", msg) < 0)
r = tor_snprintf(buf, sizeof(buf),
"BandwidthBurst must be at most %d",
ROUTER_MAX_DECLARED_BANDWIDTH);
*msg = tor_strdup(r >= 0 ? buf : "internal error");
return -1; 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 (server_mode(options)) {
if (options->BandwidthRate < ROUTER_REQUIRED_MIN_BANDWIDTH*2) { if (options->BandwidthRate < ROUTER_REQUIRED_MIN_BANDWIDTH*2) {
r = tor_snprintf(buf, sizeof(buf), r = tor_snprintf(buf, sizeof(buf),

View File

@ -944,17 +944,22 @@ router_rebuild_descriptor(int force)
} }
get_platform_str(platform, sizeof(platform)); get_platform_str(platform, sizeof(platform));
ri->platform = tor_strdup(platform); ri->platform = tor_strdup(platform);
ri->bandwidthrate = (int)options->BandwidthRate;
ri->bandwidthburst = (int)options->BandwidthBurst;
ri->bandwidthcapacity = hibernating ? 0 : rep_hist_bandwidth_assess();
if (options->BandwidthRate > options->MaxAdvertisedBandwidth) { /* compute ri->bandwidthrate as the min of various options */
if (options->MaxAdvertisedBandwidth > ROUTER_MAX_DECLARED_BANDWIDTH) { ri->bandwidthrate = (int)options->BandwidthRate;
ri->bandwidthrate = ROUTER_MAX_DECLARED_BANDWIDTH; if (ri->bandwidthrate > options->MaxAdvertisedBandwidth)
} else {
ri->bandwidthrate = (int)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;
if (options->RelayBandwidthBurst > 0 &&
ri->bandwidthburst > options->RelayBandwidthBurst)
ri->bandwidthburst = (int)options->RelayBandwidthBurst;
ri->bandwidthcapacity = hibernating ? 0 : rep_hist_bandwidth_assess();
policies_parse_exit_policy(options->ExitPolicy, &ri->exit_policy, policies_parse_exit_policy(options->ExitPolicy, &ri->exit_policy,
options->ExitPolicyRejectPrivate); options->ExitPolicyRejectPrivate);