mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2025-02-24 06:48:05 +01:00
Merge branch 'ticket9176_squashed'
Conflicts: doc/tor.1.txt
This commit is contained in:
commit
103cebd924
5 changed files with 39 additions and 8 deletions
4
changes/ticket9176
Normal file
4
changes/ticket9176
Normal file
|
@ -0,0 +1,4 @@
|
|||
o Minor features:
|
||||
|
||||
- Made PREDICTED_CIRCS_RELEVANCE_TIME configurable from config
|
||||
file. Implements ticket #9176. Patch by unixninja92.
|
|
@ -544,6 +544,12 @@ GENERAL OPTIONS
|
|||
following the Tor specification. Otherwise, they are logged with severity
|
||||
\'info'. (Default: 0)
|
||||
|
||||
[[PredictedCircsRelevanceTime]] **PredictedCircsRelevanceTime** __NUM__::
|
||||
Set how long, after the client has mad an anonymized connection to a
|
||||
given port, we will try to make sure that we build circuits to
|
||||
exits that support that port. The maximum value for this option is 1
|
||||
hour. (Default: 1 hour)
|
||||
|
||||
[[RunAsDaemon]] **RunAsDaemon** **0**|**1**::
|
||||
If 1, Tor forks and daemonizes to the background. This option has no effect
|
||||
on Windows; instead you should use the --service command-line option.
|
||||
|
|
|
@ -318,6 +318,7 @@ static config_var_t option_vars_[] = {
|
|||
V(NATDListenAddress, LINELIST, NULL),
|
||||
VPORT(NATDPort, LINELIST, NULL),
|
||||
V(Nickname, STRING, NULL),
|
||||
V(PredictedCircsRelevanceTime, INTERVAL, "1 hour"),
|
||||
V(WarnUnsafeSocks, BOOL, "1"),
|
||||
OBSOLETE("NoPublish"),
|
||||
VAR("NodeFamily", LINELIST, NodeFamilies, NULL),
|
||||
|
@ -2381,6 +2382,11 @@ compute_publishserverdescriptor(or_options_t *options)
|
|||
* services can overload the directory system. */
|
||||
#define MIN_REND_POST_PERIOD (10*60)
|
||||
|
||||
/** Higest allowable value for PredictedCircsRelevanceTime; if this is
|
||||
* too high, our selection of exits will decrease for an extended
|
||||
* period of time to an uncomfortable level .*/
|
||||
#define MAX_PREDICTED_CIRCS_RELEVANCE (60*60)
|
||||
|
||||
/** Highest allowable value for RendPostPeriod. */
|
||||
#define MAX_DIR_PERIOD (MIN_ONION_KEY_LIFETIME/2)
|
||||
|
||||
|
@ -2841,6 +2847,13 @@ options_validate(or_options_t *old_options, or_options_t *options,
|
|||
options->RendPostPeriod = MAX_DIR_PERIOD;
|
||||
}
|
||||
|
||||
if (options->PredictedCircsRelevanceTime >
|
||||
MAX_PREDICTED_CIRCS_RELEVANCE) {
|
||||
log_warn(LD_CONFIG, "PredictedCircsRelevanceTime is too large; "
|
||||
"clipping to %ds.", MAX_PREDICTED_CIRCS_RELEVANCE);
|
||||
options->PredictedCircsRelevanceTime = MAX_PREDICTED_CIRCS_RELEVANCE;
|
||||
}
|
||||
|
||||
if (options->Tor2webMode && options->LearnCircuitBuildTimeout) {
|
||||
/* LearnCircuitBuildTimeout and Tor2webMode are incompatible in
|
||||
* two ways:
|
||||
|
|
|
@ -3638,6 +3638,10 @@ typedef struct {
|
|||
* a new one? */
|
||||
int MaxCircuitDirtiness; /**< Never use circs that were first used more than
|
||||
this interval ago. */
|
||||
int PredictedCircsRelevanceTime; /** How long after we've requested a
|
||||
* connection for a given port, do we want
|
||||
* to continue to pick exits that support
|
||||
* that port? */
|
||||
uint64_t BandwidthRate; /**< How much bandwidth, on average, are we willing
|
||||
* to use in a second? */
|
||||
uint64_t BandwidthBurst; /**< How much bandwidth, at maximum, are we willing
|
||||
|
|
|
@ -1862,22 +1862,20 @@ rep_hist_note_used_port(time_t now, uint16_t port)
|
|||
add_predicted_port(now, port);
|
||||
}
|
||||
|
||||
/** For this long after we've seen a request for a given port, assume that
|
||||
* we'll want to make connections to the same port in the future. */
|
||||
#define PREDICTED_CIRCS_RELEVANCE_TIME (60*60)
|
||||
|
||||
/** Return a newly allocated pointer to a list of uint16_t * for ports that
|
||||
* are likely to be asked for in the near future.
|
||||
*/
|
||||
smartlist_t *
|
||||
rep_hist_get_predicted_ports(time_t now)
|
||||
{
|
||||
int predicted_circs_relevance_time;
|
||||
smartlist_t *out = smartlist_new();
|
||||
tor_assert(predicted_ports_list);
|
||||
predicted_circs_relevance_time = get_options()->PredictedCircsRelevanceTime;
|
||||
|
||||
/* clean out obsolete entries */
|
||||
SMARTLIST_FOREACH_BEGIN(predicted_ports_list, predicted_port_t *, pp) {
|
||||
if (pp->time + PREDICTED_CIRCS_RELEVANCE_TIME < now) {
|
||||
if (pp->time + predicted_circs_relevance_time < now) {
|
||||
log_debug(LD_CIRC, "Expiring predicted port %d", pp->port);
|
||||
|
||||
rephist_total_alloc -= sizeof(predicted_port_t);
|
||||
|
@ -1944,14 +1942,17 @@ int
|
|||
rep_hist_get_predicted_internal(time_t now, int *need_uptime,
|
||||
int *need_capacity)
|
||||
{
|
||||
int predicted_circs_relevance_time;
|
||||
predicted_circs_relevance_time = get_options()->PredictedCircsRelevanceTime;
|
||||
|
||||
if (!predicted_internal_time) { /* initialize it */
|
||||
predicted_internal_time = now;
|
||||
predicted_internal_uptime_time = now;
|
||||
predicted_internal_capacity_time = now;
|
||||
}
|
||||
if (predicted_internal_time + PREDICTED_CIRCS_RELEVANCE_TIME < now)
|
||||
if (predicted_internal_time + predicted_circs_relevance_time < now)
|
||||
return 0; /* too long ago */
|
||||
if (predicted_internal_uptime_time + PREDICTED_CIRCS_RELEVANCE_TIME >= now)
|
||||
if (predicted_internal_uptime_time + predicted_circs_relevance_time >= now)
|
||||
*need_uptime = 1;
|
||||
// Always predict that we need capacity.
|
||||
*need_capacity = 1;
|
||||
|
@ -1963,8 +1964,11 @@ rep_hist_get_predicted_internal(time_t now, int *need_uptime,
|
|||
int
|
||||
any_predicted_circuits(time_t now)
|
||||
{
|
||||
int predicted_circs_relevance_time;
|
||||
predicted_circs_relevance_time = get_options()->PredictedCircsRelevanceTime;
|
||||
|
||||
return smartlist_len(predicted_ports_list) ||
|
||||
predicted_internal_time + PREDICTED_CIRCS_RELEVANCE_TIME >= now;
|
||||
predicted_internal_time + predicted_circs_relevance_time >= now;
|
||||
}
|
||||
|
||||
/** Return 1 if we have no need for circuits currently, else return 0. */
|
||||
|
|
Loading…
Add table
Reference in a new issue