mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-27 22:03:31 +01:00
Add an option to weight down authorities when choosing a fallback
This commit is contained in:
parent
06cd62266f
commit
a8d491a8fd
@ -322,6 +322,12 @@ GENERAL OPTIONS
|
|||||||
distinguishable from other users, because you won't believe the same
|
distinguishable from other users, because you won't believe the same
|
||||||
authorities they do.
|
authorities they do.
|
||||||
|
|
||||||
|
**DirAuthorityFallbackRate** __NUM__::
|
||||||
|
When configured to use both directory authorities and fallback
|
||||||
|
directories, the directory authorities also work as fallbacks. They are
|
||||||
|
chosen with their regular weights, multiplied by this number, which
|
||||||
|
should be 1.0 or less. (Default: 1.0)
|
||||||
|
|
||||||
**DynamicDHGroups** **0**|**1**::
|
**DynamicDHGroups** **0**|**1**::
|
||||||
If this option is set to 1, when running as a server, generate our
|
If this option is set to 1, when running as a server, generate our
|
||||||
own Diffie-Hellman group instead of using the one from Apache's mod_ssl.
|
own Diffie-Hellman group instead of using the one from Apache's mod_ssl.
|
||||||
|
@ -208,6 +208,7 @@ static config_var_t option_vars_[] = {
|
|||||||
OBSOLETE("DirRecordUsageSaveInterval"),
|
OBSOLETE("DirRecordUsageSaveInterval"),
|
||||||
V(DirReqStatistics, BOOL, "1"),
|
V(DirReqStatistics, BOOL, "1"),
|
||||||
VAR("DirAuthority", LINELIST, DirAuthorities, NULL),
|
VAR("DirAuthority", LINELIST, DirAuthorities, NULL),
|
||||||
|
V(DirAuthorityFallbackRate, DOUBLE, "1.0"),
|
||||||
V(DisableAllSwap, BOOL, "0"),
|
V(DisableAllSwap, BOOL, "0"),
|
||||||
V(DisableDebuggerAttachment, BOOL, "1"),
|
V(DisableDebuggerAttachment, BOOL, "1"),
|
||||||
V(DisableIOCP, BOOL, "1"),
|
V(DisableIOCP, BOOL, "1"),
|
||||||
|
@ -3431,6 +3431,10 @@ typedef struct {
|
|||||||
/** List of fallback directory servers */
|
/** List of fallback directory servers */
|
||||||
config_line_t *FallbackDir;
|
config_line_t *FallbackDir;
|
||||||
|
|
||||||
|
/** Weight to apply to all directory authority rates if considering them
|
||||||
|
* along with fallbackdirs */
|
||||||
|
double DirAuthorityFallbackRate;
|
||||||
|
|
||||||
/** If set, use these main (currently v3) directory authorities and
|
/** If set, use these main (currently v3) directory authorities and
|
||||||
* not the default ones. */
|
* not the default ones. */
|
||||||
config_line_t *AlternateDirAuthority;
|
config_line_t *AlternateDirAuthority;
|
||||||
|
@ -1252,7 +1252,7 @@ router_pick_directory_server_impl(dirinfo_type_t type, int flags)
|
|||||||
/** Pick a random element from a list of dir_server_t, weighting by their
|
/** Pick a random element from a list of dir_server_t, weighting by their
|
||||||
* <b>weight</b> field. */
|
* <b>weight</b> field. */
|
||||||
static const dir_server_t *
|
static const dir_server_t *
|
||||||
dirserver_choose_by_weight(const smartlist_t *servers)
|
dirserver_choose_by_weight(const smartlist_t *servers, double authority_weight)
|
||||||
{
|
{
|
||||||
int n = smartlist_len(servers);
|
int n = smartlist_len(servers);
|
||||||
int i;
|
int i;
|
||||||
@ -1263,6 +1263,8 @@ dirserver_choose_by_weight(const smartlist_t *servers)
|
|||||||
for (i = 0; i < n; ++i) {
|
for (i = 0; i < n; ++i) {
|
||||||
ds = smartlist_get(servers, i);
|
ds = smartlist_get(servers, i);
|
||||||
weights[i].dbl = ds->weight;
|
weights[i].dbl = ds->weight;
|
||||||
|
if (ds->is_authority)
|
||||||
|
weights[i].dbl *= authority_weight;
|
||||||
}
|
}
|
||||||
|
|
||||||
scale_array_elements_to_u64(weights, n, NULL);
|
scale_array_elements_to_u64(weights, n, NULL);
|
||||||
@ -1290,6 +1292,8 @@ router_pick_trusteddirserver_impl(const smartlist_t *sourcelist,
|
|||||||
const int prefer_tunnel = (flags & PDS_PREFER_TUNNELED_DIR_CONNS_);
|
const int prefer_tunnel = (flags & PDS_PREFER_TUNNELED_DIR_CONNS_);
|
||||||
const int no_serverdesc_fetching =(flags & PDS_NO_EXISTING_SERVERDESC_FETCH);
|
const int no_serverdesc_fetching =(flags & PDS_NO_EXISTING_SERVERDESC_FETCH);
|
||||||
const int no_microdesc_fetching =(flags & PDS_NO_EXISTING_MICRODESC_FETCH);
|
const int no_microdesc_fetching =(flags & PDS_NO_EXISTING_MICRODESC_FETCH);
|
||||||
|
const double auth_weight = (sourcelist == fallback_dir_servers) ?
|
||||||
|
options->DirAuthorityFallbackRate : 1.0;
|
||||||
smartlist_t *pick_from;
|
smartlist_t *pick_from;
|
||||||
int n_busy = 0;
|
int n_busy = 0;
|
||||||
int try_excluding = 1, n_excluded = 0;
|
int try_excluding = 1, n_excluded = 0;
|
||||||
@ -1368,7 +1372,8 @@ router_pick_trusteddirserver_impl(const smartlist_t *sourcelist,
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const dir_server_t *selection = dirserver_choose_by_weight(pick_from);
|
const dir_server_t *selection =
|
||||||
|
dirserver_choose_by_weight(pick_from, auth_weight);
|
||||||
|
|
||||||
if (selection)
|
if (selection)
|
||||||
result = &selection->fake_status;
|
result = &selection->fake_status;
|
||||||
|
Loading…
Reference in New Issue
Block a user