mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 05:03:43 +01:00
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.
This commit is contained in:
parent
a73acdd46f
commit
3e45445104
@ -10,6 +10,10 @@ Changes in version 0.2.1.19 - 2009-07-??
|
||||
and confuse fewer users.
|
||||
|
||||
o Minor bugfixes:
|
||||
- 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.
|
||||
- Avoid leaking memory every time we get a create cell but we have
|
||||
so many already queued that we refuse it. Bugfix on 0.2.0.19-alpha;
|
||||
fixes bug 1034. Reported by BarkerJr.
|
||||
|
@ -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) ||
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user