mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 04:13:28 +01:00
Remove MIN_METHOD_FOR_CORRECT_BWWEIGHTSCALE
This also lets us discard extract_param_buggy, which we've been wanting to do.
This commit is contained in:
parent
940a4c7eaa
commit
a62ea32246
@ -1780,15 +1780,10 @@ networkstatus_compute_consensus(smartlist_t *votes,
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
if (consensus_method < MIN_METHOD_FOR_CORRECT_BWWEIGHTSCALE) {
|
max_unmeasured_bw_kb = dirvote_get_intermediate_param_value(
|
||||||
max_unmeasured_bw_kb = (int32_t) extract_param_buggy(
|
param_list, "maxunmeasurdbw", DEFAULT_MAX_UNMEASURED_BW_KB);
|
||||||
params, "maxunmeasuredbw", DEFAULT_MAX_UNMEASURED_BW_KB);
|
if (max_unmeasured_bw_kb < 1)
|
||||||
} else {
|
max_unmeasured_bw_kb = 1;
|
||||||
max_unmeasured_bw_kb = dirvote_get_intermediate_param_value(
|
|
||||||
param_list, "maxunmeasurdbw", DEFAULT_MAX_UNMEASURED_BW_KB);
|
|
||||||
if (max_unmeasured_bw_kb < 1)
|
|
||||||
max_unmeasured_bw_kb = 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add the actual router entries. */
|
/* Add the actual router entries. */
|
||||||
@ -2371,15 +2366,10 @@ networkstatus_compute_consensus(smartlist_t *votes,
|
|||||||
|
|
||||||
{
|
{
|
||||||
int64_t weight_scale;
|
int64_t weight_scale;
|
||||||
if (consensus_method < MIN_METHOD_FOR_CORRECT_BWWEIGHTSCALE) {
|
weight_scale = dirvote_get_intermediate_param_value(
|
||||||
weight_scale = extract_param_buggy(params, "bwweightscale",
|
param_list, "bwweightscale", BW_WEIGHT_SCALE);
|
||||||
BW_WEIGHT_SCALE);
|
if (weight_scale < 1)
|
||||||
} else {
|
weight_scale = 1;
|
||||||
weight_scale = dirvote_get_intermediate_param_value(
|
|
||||||
param_list, "bwweightscale", BW_WEIGHT_SCALE);
|
|
||||||
if (weight_scale < 1)
|
|
||||||
weight_scale = 1;
|
|
||||||
}
|
|
||||||
added_weights = networkstatus_compute_bw_weights_v10(chunks, G, M, E, D,
|
added_weights = networkstatus_compute_bw_weights_v10(chunks, G, M, E, D,
|
||||||
T, weight_scale);
|
T, weight_scale);
|
||||||
}
|
}
|
||||||
@ -2481,53 +2471,6 @@ networkstatus_compute_consensus(smartlist_t *votes,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Extract the value of a parameter from a string encoding a list of
|
|
||||||
* parameters, badly.
|
|
||||||
*
|
|
||||||
* This is a deliberately buggy implementation, for backward compatibility
|
|
||||||
* with versions of Tor affected by #19011. Once all authorities have
|
|
||||||
* upgraded to consensus method 31 or later, then we can throw away this
|
|
||||||
* function. */
|
|
||||||
STATIC int64_t
|
|
||||||
extract_param_buggy(const char *params,
|
|
||||||
const char *param_name,
|
|
||||||
int64_t default_value)
|
|
||||||
{
|
|
||||||
int64_t value = default_value;
|
|
||||||
const char *param_str = NULL;
|
|
||||||
|
|
||||||
if (params) {
|
|
||||||
char *prefix1 = NULL, *prefix2=NULL;
|
|
||||||
tor_asprintf(&prefix1, "%s=", param_name);
|
|
||||||
tor_asprintf(&prefix2, " %s=", param_name);
|
|
||||||
if (strcmpstart(params, prefix1) == 0)
|
|
||||||
param_str = params;
|
|
||||||
else
|
|
||||||
param_str = strstr(params, prefix2);
|
|
||||||
tor_free(prefix1);
|
|
||||||
tor_free(prefix2);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (param_str) {
|
|
||||||
int ok=0;
|
|
||||||
char *eq = strchr(param_str, '=');
|
|
||||||
if (eq) {
|
|
||||||
value = tor_parse_long(eq+1, 10, 1, INT32_MAX, &ok, NULL);
|
|
||||||
if (!ok) {
|
|
||||||
log_warn(LD_DIR, "Bad element '%s' in %s",
|
|
||||||
escaped(param_str), param_name);
|
|
||||||
value = default_value;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
log_warn(LD_DIR, "Bad element '%s' in %s",
|
|
||||||
escaped(param_str), param_name);
|
|
||||||
value = default_value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Given a list of networkstatus_t for each vote, return a newly allocated
|
/** Given a list of networkstatus_t for each vote, return a newly allocated
|
||||||
* string containing the "package" lines for the vote. */
|
* string containing the "package" lines for the vote. */
|
||||||
STATIC char *
|
STATIC char *
|
||||||
|
@ -55,11 +55,6 @@
|
|||||||
/** The highest consensus method that we currently support. */
|
/** The highest consensus method that we currently support. */
|
||||||
#define MAX_SUPPORTED_CONSENSUS_METHOD 34
|
#define MAX_SUPPORTED_CONSENSUS_METHOD 34
|
||||||
|
|
||||||
/** Lowest consensus method for which we use the correct algorithm for
|
|
||||||
* extracting the bwweightscale= and maxunmeasuredbw= parameters. See #19011.
|
|
||||||
*/
|
|
||||||
#define MIN_METHOD_FOR_CORRECT_BWWEIGHTSCALE 31
|
|
||||||
|
|
||||||
/** Lowest consensus method for which we handle the MiddleOnly flag specially.
|
/** Lowest consensus method for which we handle the MiddleOnly flag specially.
|
||||||
*/
|
*/
|
||||||
#define MIN_METHOD_FOR_MIDDLEONLY 32
|
#define MIN_METHOD_FOR_MIDDLEONLY 32
|
||||||
@ -270,9 +265,6 @@ STATIC
|
|||||||
char *networkstatus_get_detached_signatures(smartlist_t *consensuses);
|
char *networkstatus_get_detached_signatures(smartlist_t *consensuses);
|
||||||
STATIC microdesc_t *dirvote_create_microdescriptor(const routerinfo_t *ri,
|
STATIC microdesc_t *dirvote_create_microdescriptor(const routerinfo_t *ri,
|
||||||
int consensus_method);
|
int consensus_method);
|
||||||
STATIC int64_t extract_param_buggy(const char *params,
|
|
||||||
const char *param_name,
|
|
||||||
int64_t default_value);
|
|
||||||
|
|
||||||
#endif /* defined(DIRVOTE_PRIVATE) */
|
#endif /* defined(DIRVOTE_PRIVATE) */
|
||||||
|
|
||||||
|
@ -656,30 +656,6 @@ done:
|
|||||||
ROUTER_FREE(pppp);
|
ROUTER_FREE(pppp);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
test_dirvote_parse_param_buggy(void *arg)
|
|
||||||
{
|
|
||||||
(void)arg;
|
|
||||||
|
|
||||||
/* Tests for behavior with bug emulation to migrate away from bug 19011. */
|
|
||||||
tt_i64_op(extract_param_buggy("blah blah", "bwweightscale", 10000),
|
|
||||||
OP_EQ, 10000);
|
|
||||||
tt_i64_op(extract_param_buggy("bwweightscale=7", "bwweightscale", 10000),
|
|
||||||
OP_EQ, 7);
|
|
||||||
tt_i64_op(extract_param_buggy("bwweightscale=7 foo=9",
|
|
||||||
"bwweightscale", 10000),
|
|
||||||
OP_EQ, 10000);
|
|
||||||
tt_i64_op(extract_param_buggy("foo=7 bwweightscale=777 bar=9",
|
|
||||||
"bwweightscale", 10000),
|
|
||||||
OP_EQ, 10000);
|
|
||||||
tt_i64_op(extract_param_buggy("foo=7 bwweightscale=1234",
|
|
||||||
"bwweightscale", 10000),
|
|
||||||
OP_EQ, 1234);
|
|
||||||
|
|
||||||
done:
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define NODE(name, flags) \
|
#define NODE(name, flags) \
|
||||||
{ \
|
{ \
|
||||||
#name, test_dirvote_##name, (flags), NULL, NULL \
|
#name, test_dirvote_##name, (flags), NULL, NULL \
|
||||||
@ -692,5 +668,4 @@ struct testcase_t dirvote_tests[] = {
|
|||||||
NODE(get_sybil_by_ip_version_ipv4, TT_FORK),
|
NODE(get_sybil_by_ip_version_ipv4, TT_FORK),
|
||||||
NODE(get_sybil_by_ip_version_ipv6, TT_FORK),
|
NODE(get_sybil_by_ip_version_ipv6, TT_FORK),
|
||||||
NODE(get_all_possible_sybil, TT_FORK),
|
NODE(get_all_possible_sybil, TT_FORK),
|
||||||
NODE(parse_param_buggy, 0),
|
|
||||||
END_OF_TESTCASES};
|
END_OF_TESTCASES};
|
||||||
|
Loading…
Reference in New Issue
Block a user