]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Add a new consensus method that removes IPv6 address lines from microdescs
authorteor <teor2345@gmail.com>
Sun, 15 Oct 2017 16:31:39 +0000 (12:31 -0400)
committerteor <teor2345@gmail.com>
Sun, 15 Oct 2017 16:31:39 +0000 (12:31 -0400)
Implements #23828.

src/or/dirvote.c
src/or/dirvote.h

index 12aa2363c501249086bf7a2f801cf7be02ea0e94..0cbf8c48b4db2062b5aac3d1ee17d034754048c3 100644 (file)
@@ -3831,7 +3831,10 @@ dirvote_create_microdescriptor(const routerinfo_t *ri, int consensus_method)
     smartlist_add_asprintf(chunks, "ntor-onion-key %s", kbuf);
   }
 
+  /* We originally put a lines in the micrdescriptors, but then we worked out
+   * that we needed them in the microdesc consensus. See #20916. */
   if (consensus_method >= MIN_METHOD_FOR_A_LINES &&
+      consensus_method < MIN_METHOD_FOR_NO_A_LINES_IN_MICRODESC &&
       !tor_addr_is_null(&ri->ipv6_addr) && ri->ipv6_orport)
     smartlist_add_asprintf(chunks, "a %s\n",
                            fmt_addrport(&ri->ipv6_addr, ri->ipv6_orport));
@@ -3940,7 +3943,9 @@ static const struct consensus_method_range_t {
   {MIN_METHOD_FOR_P6_LINES, MIN_METHOD_FOR_NTOR_KEY - 1},
   {MIN_METHOD_FOR_NTOR_KEY, MIN_METHOD_FOR_ID_HASH_IN_MD - 1},
   {MIN_METHOD_FOR_ID_HASH_IN_MD, MIN_METHOD_FOR_ED25519_ID_IN_MD - 1},
-  {MIN_METHOD_FOR_ED25519_ID_IN_MD, MAX_SUPPORTED_CONSENSUS_METHOD},
+  {MIN_METHOD_FOR_ED25519_ID_IN_MD,
+    MIN_METHOD_FOR_NO_A_LINES_IN_MICRODESC - 1},
+  {MIN_METHOD_FOR_NO_A_LINES_IN_MICRODESC, MAX_SUPPORTED_CONSENSUS_METHOD},
   {-1, -1}
 };
 
index b3838eee943e7dde5b1708fd4abf839082f07ac0..5a4cef7b9106802662f5ad7c9e054afdf1fffc11 100644 (file)
@@ -59,7 +59,7 @@
 #define MIN_SUPPORTED_CONSENSUS_METHOD 13
 
 /** The highest consensus method that we currently support. */
-#define MAX_SUPPORTED_CONSENSUS_METHOD 27
+#define MAX_SUPPORTED_CONSENSUS_METHOD 28
 
 /** Lowest consensus method where microdesc consensuses omit any entry
  * with no microdesc. */
  * addresses. See #23826 and #20916. */
 #define MIN_METHOD_FOR_A_LINES_IN_MICRODESC_CONSENSUS 27
 
+/** Lowest consensus method where microdescriptors do not contain relay IPv6
+ * addresses. See #23828 and #20916. */
+#define MIN_METHOD_FOR_NO_A_LINES_IN_MICRODESC 28
+
 /** Default bandwidth to clip unmeasured bandwidths to using method >=
  * MIN_METHOD_TO_CLIP_UNMEASURED_BW.  (This is not a consensus method; do not
  * get confused with the above macros.) */