[tor-commits] [tor/master] prop224: Make the number of extra intro point a consensus param

nickm at torproject.org nickm at torproject.org
Wed Aug 9 00:36:37 UTC 2017


commit 848e701f55039b43e90cb1dae226db567876f2d3
Author: David Goulet <dgoulet at torproject.org>
Date:   Tue May 9 16:15:12 2017 -0400

    prop224: Make the number of extra intro point a consensus param
    
    Signed-off-by: David Goulet <dgoulet at torproject.org>
---
 src/or/hs_service.c | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/src/or/hs_service.c b/src/or/hs_service.c
index 55c9b689f..16ffc94b5 100644
--- a/src/or/hs_service.c
+++ b/src/or/hs_service.c
@@ -251,6 +251,17 @@ get_intro_point_max_lifetime(void)
                                  0, INT32_MAX);
 }
 
+/* Return the number of extra introduction point defined by a consensus
+ * parameter or the default value. */
+static int32_t
+get_intro_point_num_extra(void)
+{
+  /* The [0, 128] range bounds the number of extra introduction point allowed.
+   * Above 128 intro points, it's getting a bit crazy. */
+  return networkstatus_get_param(NULL, "hs_intro_num_extra",
+                                 NUM_INTRO_POINTS_EXTRA, 0, 128);
+}
+
 /* Helper: Function that needs to return 1 for the HT for each loop which
  * frees every service in an hash map. */
 static int
@@ -1406,18 +1417,18 @@ pick_needed_intro_points(hs_service_t *service,
     /* Let's not make tor freak out here and just skip this. */
     goto done;
   }
+
   /* We want to end up with config.num_intro_points intro points, but if we
    * have no intro points at all (chances are they all cycled or we are
-   * starting up), we launch NUM_INTRO_POINTS_EXTRA extra circuits and use the
-   * first config.num_intro_points that complete. See proposal #155, section 4
-   * for the rationale of this which is purely for performance.
+   * starting up), we launch get_intro_point_num_extra() extra circuits and
+   * use the first config.num_intro_points that complete. See proposal #155,
+   * section 4 for the rationale of this which is purely for performance.
    *
    * The ones after the first config.num_intro_points will be converted to
    * 'General' internal circuits and then we'll drop them from the list of
    * intro points. */
   if (digest256map_size(desc->intro_points.map) == 0) {
-    /* XXX: Should a consensus param control that value? */
-    num_needed_ip += NUM_INTRO_POINTS_EXTRA;
+    num_needed_ip += get_intro_point_num_extra();
   }
 
   /* Build an exclude list of nodes of our intro point(s). The expiring intro
@@ -1780,7 +1791,7 @@ get_max_intro_circ_per_period(const hs_service_t *service)
    * extra value so we can launch multiple circuits at once and pick the
    * quickest ones. For instance, we want 3 intros, we add 2 extra so we'll
    * pick 5 intros and launch 5 circuits. */
-  count += (num_wanted_ip + NUM_INTRO_POINTS_EXTRA);
+  count += (num_wanted_ip + get_intro_point_num_extra());
 
   /* Then we add the number of retries that is possible to do for each intro
    * point. If we want 3 intros, we'll allow 3 times the number of possible





More information about the tor-commits mailing list