]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
PredictedCircsRelevanceTime: limit how long we predict a port will be used
authorunixninja92 <charlesvt@gmail.com>
Sat, 14 Sep 2013 19:40:19 +0000 (21:40 +0200)
committerNick Mathewson <nickm@torproject.org>
Wed, 5 Mar 2014 19:29:54 +0000 (14:29 -0500)
By default, after you've made a connection to port XYZ, we assume
you might still want to have an exit ready to connect to XYZ for one
hour. This patch lets you lower that interval.

Implements ticket 91

changes/ticket9176 [new file with mode: 0644]
src/or/config.c
src/or/or.h
src/or/rephist.c

diff --git a/changes/ticket9176 b/changes/ticket9176
new file mode 100644 (file)
index 0000000..bee3d2f
--- /dev/null
@@ -0,0 +1,4 @@
+  o Minor features:
+
+    - Made PREDICTED_CIRCS_RELEVANCE_TIME configurable from config
+      file. Implements ticket #9176. Patch by unixninja92.
index 5ce7bad493880891aa78f34ac00ad178e79efeb4..460bf3ec41acd6a4df03784c52d825d34f74eaca 100644 (file)
@@ -314,6 +314,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),
index bd038f783caa5bf7ed0b46b611f6cef25f2972b2..5ca63e605b7e0e497bae9c6e52dca1c74558e1b8 100644 (file)
@@ -3673,6 +3673,9 @@ 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 seen a request for
+                                    * a given port, do we want to continue
+                                    * to make connections to the same 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
index 13404badf4a93ce194e1f99e2c1b63ee87b38b59..309e5975518d6cb10a7e08a1e321125980f5763e 100644 (file)
@@ -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. */