diff options
author | Sebastian Hahn <sebastian@torproject.org> | 2009-07-07 18:04:00 +0200 |
---|---|---|
committer | Roger Dingledine <arma@torproject.org> | 2009-07-27 23:53:06 -0400 |
commit | 3e454451045ae032f0e78e48f8f72c1592cc0658 (patch) | |
tree | 77389fabf0033bc96f7e7342977b0610f0e02471 /src | |
parent | a73acdd46f946a18f678167f2f8083cac18ebe01 (diff) | |
download | tor-3e454451045ae032f0e78e48f8f72c1592cc0658.tar.gz tor-3e454451045ae032f0e78e48f8f72c1592cc0658.zip |
Changing MaxAdvertisedBW may not need a republish
Relays no longer publish a new server descriptor if they change
their MaxAdvertisedBandwidth config option but it doesn't end up
changing their advertised bandwidth numbers. Bugfix on 0.2.0.28-rc;
fixes bug 1026. Patch from Sebastian.
Diffstat (limited to 'src')
-rw-r--r-- | src/or/config.c | 35 | ||||
-rw-r--r-- | src/or/or.h | 3 | ||||
-rw-r--r-- | src/or/router.c | 12 |
3 files changed, 33 insertions, 17 deletions
diff --git a/src/or/config.c b/src/or/config.c index b744f8faf4..3f45b1e5e2 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -1222,6 +1222,30 @@ options_need_geoip_info(or_options_t *options, const char **reason_out) return bridge_usage || routerset_usage; } +/** Return the bandwidthrate that we are going to report to the authorities + * based on the config options. */ +int +get_effective_bwrate(or_options_t *options) +{ + int bw = (int)options->BandwidthRate; + if (bw > options->MaxAdvertisedBandwidth) + bw = (int)options->MaxAdvertisedBandwidth; + if (options->RelayBandwidthRate > 0 && bw > options->RelayBandwidthRate) + bw = (int)options->RelayBandwidthRate; + return bw; +} + +/** Return the bandwidthburst that we are going to report to the authorities + * based on the config options. */ +int +get_effective_bwburst(or_options_t *options) +{ + int bw = (int)options->BandwidthBurst; + if (options->RelayBandwidthBurst > 0 && bw > options->RelayBandwidthBurst) + bw = (int)options->RelayBandwidthBurst; + return bw; +} + /** Fetch the active option list, and take actions based on it. All of the * things we do should survive being done repeatedly. If present, * <b>old_options</b> contains the previous value of the options. @@ -3744,9 +3768,7 @@ options_transition_affects_descriptor(or_options_t *old_options, or_options_t *new_options) { /* XXX We can be smarter here. If your DirPort isn't being - * published and you just turned it off, no need to republish. If - * you changed your bandwidthrate but maxadvertisedbandwidth still - * trumps, no need to republish. Etc. */ + * published and you just turned it off, no need to republish. Etc. */ if (!opt_streq(old_options->DataDirectory, new_options->DataDirectory) || !opt_streq(old_options->Nickname,new_options->Nickname) || !opt_streq(old_options->Address,new_options->Address) || @@ -3759,10 +3781,9 @@ options_transition_affects_descriptor(or_options_t *old_options, old_options->NoPublish != new_options->NoPublish || old_options->_PublishServerDescriptor != new_options->_PublishServerDescriptor || - old_options->BandwidthRate != new_options->BandwidthRate || - old_options->BandwidthBurst != new_options->BandwidthBurst || - old_options->MaxAdvertisedBandwidth != - new_options->MaxAdvertisedBandwidth || + get_effective_bwrate(old_options) != get_effective_bwrate(new_options) || + get_effective_bwburst(old_options) != + get_effective_bwburst(new_options) || !opt_streq(old_options->ContactInfo, new_options->ContactInfo) || !opt_streq(old_options->MyFamily, new_options->MyFamily) || !opt_streq(old_options->AccountingStart, new_options->AccountingStart) || diff --git a/src/or/or.h b/src/or/or.h index fba7af0da0..1dcff28d6d 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -2926,6 +2926,9 @@ int options_need_geoip_info(or_options_t *options, const char **reason_out); int getinfo_helper_config(control_connection_t *conn, const char *question, char **answer); +int get_effective_bwrate(or_options_t *options); +int get_effective_bwburst(or_options_t *options); + #ifdef CONFIG_PRIVATE /* Used only by config.c and test.c */ or_options_t *options_new(void); diff --git a/src/or/router.c b/src/or/router.c index 6f899854e3..859a1e805a 100644 --- a/src/or/router.c +++ b/src/or/router.c @@ -1300,18 +1300,10 @@ router_rebuild_descriptor(int force) 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; + ri->bandwidthrate = get_effective_bwrate(options); /* and compute ri->bandwidthburst similarly */ - ri->bandwidthburst = (int)options->BandwidthBurst; - if (options->RelayBandwidthBurst > 0 && - ri->bandwidthburst > options->RelayBandwidthBurst) - ri->bandwidthburst = (int)options->RelayBandwidthBurst; + ri->bandwidthburst = get_effective_bwburst(options); ri->bandwidthcapacity = hibernating ? 0 : rep_hist_bandwidth_assess(); |