From: Nick Mathewson Date: Tue, 22 Mar 2005 19:01:46 +0000 (+0000) Subject: Implement an option to cap bandwidth-to-advertise. Arma: can you improve the manpage... X-Git-Tag: tor-0.1.0.1-rc~84 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ec81f870181940909507fd5356fa5ecc11c7440e;p=thirdparty%2Ftor.git Implement an option to cap bandwidth-to-advertise. Arma: can you improve the manpage entry by explaining why you would want to do this? svn:r3813 --- diff --git a/doc/TODO b/doc/TODO index 4b41c69f73..0f19b860c6 100644 --- a/doc/TODO +++ b/doc/TODO @@ -25,7 +25,7 @@ R o pick the whole path when you start the circuit. they're rejected. - controller should have an event to learn about new addressmappings? - how do ulimits work on win32, anyway? - - have a separate config option which caps bandwidth-to-advertise. + o have a separate config option which caps bandwidth-to-advertise. For 0.1.0.x: diff --git a/doc/tor.1.in b/doc/tor.1.in index 24760f9e07..311a7f0e36 100644 --- a/doc/tor.1.in +++ b/doc/tor.1.in @@ -48,6 +48,10 @@ the specified number of bytes per second. (Default: 780 KB) \fBBandwidthBurst \fR\fIN\fR \fBbytes\fR|\fBKB\fR|\fBMB\fR|\fBGB\fR|\fBTB\fP Limit the maximum token bucket size (also known as the burst) to the given number of bytes. (Default: 48 MB) .TP +\fBMaxAdvertisedBandwidth \fR\fIN\fR \fBbytes\fR|\fBKB\fR|\fBMB\fR|\fBGB\fR|\fBTB\fP +If set, we will not advertise more than this amount of bandwidth, no +matter how much we think we actually have. +.TP \fBDataDirectory \fR\fIDIR\fP Store working data in DIR (Default: @LOCALSTATEDIR@/lib/tor) .TP diff --git a/src/or/config.c b/src/or/config.c index 09e6183e40..3b283b7d6d 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -99,6 +99,7 @@ static config_var_t config_vars[] = { VAR("AuthoritativeDirectory",BOOL, AuthoritativeDir, "0"), VAR("BandwidthRate", MEMUNIT, BandwidthRate, "1 MB"), VAR("BandwidthBurst", MEMUNIT, BandwidthBurst, "5 MB"), + VAR("MaxAdvertisedBandwidth",MEMUNIT,MaxAdvertisedBandwidth,"128 TB"), VAR("ClientOnly", BOOL, ClientOnly, "0"), VAR("ContactInfo", STRING, ContactInfo, NULL), VAR("ControlPort", UINT, ControlPort, "0"), diff --git a/src/or/or.h b/src/or/or.h index 603aeb31a1..19efee2760 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -1019,6 +1019,8 @@ typedef struct { * use in a second? */ uint64_t BandwidthBurst; /**< How much bandwidth, at maximum, are we willing to * use in a second? */ + uint64_t MaxAdvertisedBandwidth; /**< How much bandwidth are we willing to + * tell people we have? */ int NumCpus; /**< How many CPUs should we try to use? */ int RunTesting; /**< If true, create testing circuits to measure how well the * other ORs are running. */ diff --git a/src/or/router.c b/src/or/router.c index 6ebce129b1..4f786a2aad 100644 --- a/src/or/router.c +++ b/src/or/router.c @@ -684,6 +684,12 @@ int router_rebuild_descriptor(int force) { ri->bandwidthrate = (int)options->BandwidthRate; ri->bandwidthburst = (int)options->BandwidthBurst; ri->bandwidthcapacity = hibernating ? 0 : rep_hist_bandwidth_assess(); + + if (options->BandwidthRate > options->MaxAdvertisedBandwidth) + ri->bandwidthrate = (int)options->MaxAdvertisedBandwidth; + if (ri->bandwidthcapacity > options->MaxAdvertisedBandwidth) + ri->bandwidthcapacity = (int)options->MaxAdvertisedBandwidth; + router_add_exit_policy_from_config(ri); if (desc_routerinfo) /* inherit values */ ri->is_verified = desc_routerinfo->is_verified;