From 9c5ba489d32f8a95c784e00308955d550740c94a Mon Sep 17 00:00:00 2001 From: Linus Nordberg Date: Wed, 19 Sep 2012 17:12:22 +0200 Subject: Set (and reset) node_t.ipv6_preferred for bridges based on Bridge lines. We used to set it only when ClientPreferIPv6ORPort was set which seems wrong. Fixes one part of #6757. --- src/or/circuitbuild.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) (limited to 'src/or') diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index 09eef64eff..a92e56bf67 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -5654,15 +5654,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 */ -- cgit v1.2.3-54-g00ecf From ce553d49821cf96666afe2380b2409329c71cd8b Mon Sep 17 00:00:00 2001 From: Linus Nordberg Date: Wed, 19 Sep 2012 17:15:40 +0200 Subject: Have node_get_pref_orport() return an IPv6 OR port when UseBridges is set. We used to never return an IPv6 address unless ClientUseIPv6 was set. We should allow clients running with bridges use IPv6 OR ports even without setting ClientUseIPv6. Configuring an IPv6 address in a Bridge line should imply that. Fixes th second part of #6757. --- changes/6757 | 5 +++++ src/or/nodelist.c | 19 ++++++++++++------- 2 files changed, 17 insertions(+), 7 deletions(-) create mode 100644 changes/6757 (limited to 'src/or') diff --git a/changes/6757 b/changes/6757 new file mode 100644 index 0000000000..6b17f951d1 --- /dev/null +++ b/changes/6757 @@ -0,0 +1,5 @@ + o Minor bugfixes (client): + - Make clients running with IPv6 bridges connect over IPv6 again, + even without setting new config options ClientUseIPv6 and + ClientPreferIPv6ORPort. + Fixes bug 6757; bugfix on 0.2.4.1-alpha. diff --git a/src/or/nodelist.c b/src/or/nodelist.c index c357bc0474..421db8edc0 100644 --- a/src/or/nodelist.c +++ b/src/or/nodelist.c @@ -873,18 +873,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 -- cgit v1.2.3-54-g00ecf