[tor-commits] [tor/master] nodelist: Move the v3 onion service rendezvous check

nickm at torproject.org nickm at torproject.org
Tue Jun 9 19:45:23 UTC 2020


commit 280195f41471862964f5c47446e5ccd01afdd96b
Author: teor <teor at riseup.net>
Date:   Mon May 11 17:21:47 2020 +1000

    nodelist: Move the v3 onion service rendezvous check
    
    And delete a loop that is now empty. This change should improve tor's
    performance, because we no longer iterate through the nodelist twice for
    every node in every circuit path.
    
    Part of 34200.
---
 src/core/or/circuitbuild.c         |  1 +
 src/feature/nodelist/node_select.c | 13 ++-----------
 src/feature/nodelist/routerlist.c  |  6 ++++++
 src/feature/nodelist/routerlist.h  |  1 +
 4 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/src/core/or/circuitbuild.c b/src/core/or/circuitbuild.c
index 4dc3067a7..d7b07c490 100644
--- a/src/core/or/circuitbuild.c
+++ b/src/core/or/circuitbuild.c
@@ -1802,6 +1802,7 @@ pick_restricted_middle_node(router_crn_flags_t flags,
                                     (flags & CRN_NEED_DESC) != 0,
                                     (flags & CRN_PREF_ADDR) != 0,
                                     (flags & CRN_DIRECT_CONN) != 0,
+                                    (flags & CRN_RENDEZVOUS_V3) != 0,
                                     (flags & CRN_INITIATE_IPV6_EXTEND) != 0);
 
   /* Filter all_live_nodes to only add live *and* whitelisted middles
diff --git a/src/feature/nodelist/node_select.c b/src/feature/nodelist/node_select.c
index ce07c450e..7015063d0 100644
--- a/src/feature/nodelist/node_select.c
+++ b/src/feature/nodelist/node_select.c
@@ -973,7 +973,6 @@ router_choose_random_node(smartlist_t *excludedsmartlist,
   const int rendezvous_v3 = (flags & CRN_RENDEZVOUS_V3) != 0;
   const bool initiate_ipv6_extend = (flags & CRN_INITIATE_IPV6_EXTEND) != 0;
 
-  const smartlist_t *node_list = nodelist_get_list();
   smartlist_t *sl=smartlist_new(),
     *excludednodes=smartlist_new();
   const node_t *choice = NULL;
@@ -984,15 +983,6 @@ router_choose_random_node(smartlist_t *excludedsmartlist,
   rule = weight_for_exit ? WEIGHT_FOR_EXIT :
     (need_guard ? WEIGHT_FOR_GUARD : WEIGHT_FOR_MID);
 
-  SMARTLIST_FOREACH_BEGIN(node_list, const node_t *, node) {
-    if (rendezvous_v3 &&
-               !node_supports_v3_rendezvous_point(node)) {
-      /* Exclude relays that can not become a rendezvous for a hidden service
-       * version 3. */
-      smartlist_add(excludednodes, (node_t*)node);
-    }
-  } SMARTLIST_FOREACH_END(node);
-
   /* If the node_t is not found we won't be to exclude ourself but we
    * won't be able to pick ourself in router_choose_random_node() so
    * this is fine to at least try with our routerinfo_t object. */
@@ -1001,7 +991,8 @@ router_choose_random_node(smartlist_t *excludedsmartlist,
 
   router_add_running_nodes_to_smartlist(sl, need_uptime, need_capacity,
                                         need_guard, need_desc, pref_addr,
-                                        direct_conn, initiate_ipv6_extend);
+                                        direct_conn, rendezvous_v3,
+                                        initiate_ipv6_extend);
   log_debug(LD_CIRC,
            "We found %d running nodes.",
             smartlist_len(sl));
diff --git a/src/feature/nodelist/routerlist.c b/src/feature/nodelist/routerlist.c
index c18051d41..d4dfffa1a 100644
--- a/src/feature/nodelist/routerlist.c
+++ b/src/feature/nodelist/routerlist.c
@@ -520,6 +520,7 @@ router_add_running_nodes_to_smartlist(smartlist_t *sl, int need_uptime,
                                       int need_capacity, int need_guard,
                                       int need_desc, int pref_addr,
                                       int direct_conn,
+                                      bool rendezvous_v3,
                                       bool initiate_ipv6_extend)
 {
   const int check_reach = !router_or_conn_should_skip_reachable_address_check(
@@ -546,6 +547,11 @@ router_add_running_nodes_to_smartlist(smartlist_t *sl, int need_uptime,
      * 0.3.1.0-alpha. */
     if (node_allows_single_hop_exits(node))
       continue;
+    /* Exclude relays that can not become a rendezvous for a hidden service
+     * version 3. */
+    if (rendezvous_v3 &&
+        !node_supports_v3_rendezvous_point(node))
+      continue;
     /* Choose a node with an OR address that matches the firewall rules */
     if (direct_conn && check_reach &&
         !fascist_firewall_allows_node(node,
diff --git a/src/feature/nodelist/routerlist.h b/src/feature/nodelist/routerlist.h
index 1297bb4b6..d6d606428 100644
--- a/src/feature/nodelist/routerlist.h
+++ b/src/feature/nodelist/routerlist.h
@@ -62,6 +62,7 @@ void router_add_running_nodes_to_smartlist(smartlist_t *sl, int need_uptime,
                                            int need_capacity, int need_guard,
                                            int need_desc, int pref_addr,
                                            int direct_conn,
+                                           bool rendezvous_v3,
                                            bool initiate_ipv6_extend);
 
 const routerinfo_t *routerlist_find_my_routerinfo(void);





More information about the tor-commits mailing list