GitLab is used only for code review, issue tracking and project management. Canonical locations for source code are still https://gitweb.torproject.org/ https://git.torproject.org/ and git-rw.torproject.org.

Commit 685c4866 authored by David Goulet's avatar David Goulet 😈
Browse files

relay: Look at the omit IPv6 flag when publishing



In two instances we must look at this flag:

1. When we build the descriptor so the IPv6 is NOT added to the descriptor in
   case we judge that we need to omit the address but still publish.

2. When we are deciding if the descriptor is publishable. This flags tells us
   that the IPv6 was not found reachable but we should still publish.

Fixes #40279
Signed-off-by: David Goulet's avatarDavid Goulet <dgoulet@torproject.org>
parent f420eacf
Pipeline #2583 passed with stage
in 27 minutes and 6 seconds
o Major bugfixes (IPv6, relay):
- Fix a bug that prevented a relay to publish its descriptor in the case of
an auto-discovered IPv6 that was found unreachable for which we always
publish if the IPv4 is correct. Fixes bug 40279; bugfix on 0.4.5.1-alpha.
......@@ -138,6 +138,18 @@ static authority_cert_t *legacy_key_certificate = NULL;
* used by tor-gencert to sign new signing keys and make new key
* certificates. */
/** Indicate if the IPv6 address should be omitted from the descriptor when
* publishing it. This can happen if the IPv4 is reachable but the
* auto-discovered IPv6 is not. We still publish the descriptor.
*
* Only relays should look at this and only for their descriptor.
*
* XXX: The real harder fix is to never put in the routerinfo_t a non
* reachable address and instead use the last resolved address cache to do
* reachability test or anything that has to do with what address tor thinks
* it has. */
static bool omit_ipv6_on_publish = false;
/** Return a readonly string with human readable description
* of <b>err</b>.
*/
......@@ -1396,7 +1408,11 @@ decide_if_publishable_server(void)
return 0;
}
}
if (!router_orport_seems_reachable(options, AF_INET6)) {
/* We could be flagged to omit the IPv6 and if so, don't check for
* reachability on the IPv6. This can happen if the address was
* auto-discovered but turns out to be non reachable. */
if (!omit_ipv6_on_publish &&
!router_orport_seems_reachable(options, AF_INET6)) {
// We have an ipv6 orport, and it doesn't seem reachable.
if (!publish_even_when_ipv6_orport_unreachable) {
return 0;
......@@ -2085,7 +2101,8 @@ router_build_fresh_unsigned_routerinfo,(routerinfo_t **ri_out))
ri->ipv4_dirport = routerconf_find_dir_port(options, 0);
/* Optionally check for an IPv6. We still publish without one. */
if (relay_find_addr_to_publish(options, AF_INET6, RELAY_FIND_ADDR_NO_FLAG,
if (!omit_ipv6_on_publish &&
relay_find_addr_to_publish(options, AF_INET6, RELAY_FIND_ADDR_NO_FLAG,
&ri->ipv6_addr)) {
ri->ipv6_orport = routerconf_find_or_port(options, AF_INET6);
router_check_descriptor_address_consistency(&ri->ipv6_addr);
......@@ -2459,18 +2476,6 @@ router_new_consensus_params(const networkstatus_t *ns)
publish_even_when_ipv6_orport_unreachable = ar || ar6;
}
/** Indicate if the IPv6 address should be omitted from the descriptor when
* publishing it. This can happen if the IPv4 is reachable but the
* auto-discovered IPv6 is not. We still publish the descriptor.
*
* Only relays should look at this and only for their descriptor.
*
* XXX: The real harder fix is to never put in the routerinfo_t a non
* reachable address and instead use the last resolved address cache to do
* reachability test or anything that has to do with what address tor thinks
* it has. */
static bool omit_ipv6_on_publish = false;
/** Mark our descriptor out of data iff the IPv6 omit status flag is flipped
* it changes from its previous value.
*
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment