diff options
Diffstat (limited to 'src/or')
-rw-r--r-- | src/or/circuitbuild.c | 12 | ||||
-rw-r--r-- | src/or/nodelist.c | 19 |
2 files changed, 15 insertions, 16 deletions
diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index 230dd8105e..56c2c22d01 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -5663,15 +5663,9 @@ rewrite_node_address_for_bridge(const bridge_info_t *bridge, node_t *node) } } - /* Mark bridge as preferably connected to over IPv6 if its IPv6 - address is in a Bridge line and ClientPreferIPv6ORPort is - set. Unless both is true, a potential IPv6 OR port of this - bridge won't get selected. - - XXX ipv6_preferred is never reset (#6757) */ - if (get_options()->ClientPreferIPv6ORPort == 1 && - tor_addr_family(&bridge->addr) == AF_INET6) - node->ipv6_preferred = 1; + /* Mark which address to use based on which bridge_t we got. */ + node->ipv6_preferred = (tor_addr_family(&bridge->addr) == AF_INET6 && + !tor_addr_is_null(&node->ri->ipv6_addr)); /* XXXipv6 we lack support for falling back to another address for the same relay, warn the user */ diff --git a/src/or/nodelist.c b/src/or/nodelist.c index 642816cca3..29b6047ac8 100644 --- a/src/or/nodelist.c +++ b/src/or/nodelist.c @@ -872,18 +872,23 @@ node_get_prim_orport(const node_t *node, tor_addr_port_t *ap_out) void node_get_pref_orport(const node_t *node, tor_addr_port_t *ap_out) { + const or_options_t *options = get_options(); tor_assert(ap_out); /* Cheap implementation of config option ClientUseIPv6 -- simply - don't prefer IPv6 when ClientUseIPv6 is not set. (See #4455 for - more on this subject.) Note that this filter is too strict since - we're hindering not only clients! Erring on the safe side - shouldn't be a problem though. XXX move this check to where - outgoing connections are made? -LN */ - if (get_options()->ClientUseIPv6 == 1 && node_ipv6_preferred(node)) + don't prefer IPv6 when ClientUseIPv6 is not set and we're not a + client running with bridges. See #4455 for more on this subject. + + Note that this filter is too strict since we're hindering not + only clients! Erring on the safe side shouldn't be a problem + though. XXX move this check to where outgoing connections are + made? -LN */ + if ((options->ClientUseIPv6 || options->UseBridges) && + node_ipv6_preferred(node)) { node_get_pref_ipv6_orport(node, ap_out); - else + } else { node_get_prim_orport(node, ap_out); + } } /** Copy the preferred IPv6 OR port (IP address and TCP port) for |