Browse Source

Add configure option AuthDirHasIPv6Connectivity.

Implements enhancement 5974.
Linus Nordberg 12 years ago
parent
commit
044da1bf0f
5 changed files with 18 additions and 3 deletions
  1. 4 0
      changes/bug5974
  2. 8 0
      doc/tor.1.txt
  3. 1 0
      src/or/config.c
  4. 4 3
      src/or/dirserv.c
  5. 1 0
      src/or/or.h

+ 4 - 0
changes/bug5974

@@ -0,0 +1,4 @@
+  o Minor features:
+
+    - Add new configure option AuthDirHasIPv6Connectivity.  Implements
+      feature #5974.

+ 8 - 0
doc/tor.1.txt

@@ -1728,6 +1728,14 @@ DIRECTORY AUTHORITY SERVER OPTIONS
     votes on whether to accept relays as hidden service directories.
     votes on whether to accept relays as hidden service directories.
     (Default: 1)
     (Default: 1)
 
 
+**AuthDirHasIPv6Connectivity** **0**|**1**|**auto**::
+
+    Authoritative directories only. When set to 0, OR ports with an
+    IPv6 address are being accepted without reachability testing.
+    When set to 1, IPv6 OR ports are being tested just like IPv4 OR
+    ports.  When set to auto, Tor tries to find out if the authority
+    relay has IPv6 connectivity or not. (Default: auto)
+
 HIDDEN SERVICE OPTIONS
 HIDDEN SERVICE OPTIONS
 ----------------------
 ----------------------
 
 

+ 1 - 0
src/or/config.c

@@ -201,6 +201,7 @@ static config_var_t _option_vars[] = {
   V(AuthDirListBadExits,         BOOL,     "0"),
   V(AuthDirListBadExits,         BOOL,     "0"),
   V(AuthDirMaxServersPerAddr,    UINT,     "2"),
   V(AuthDirMaxServersPerAddr,    UINT,     "2"),
   V(AuthDirMaxServersPerAuthAddr,UINT,     "5"),
   V(AuthDirMaxServersPerAuthAddr,UINT,     "5"),
+  V(AuthDirHasIPv6Connectivity,  AUTOBOOL, "auto"),
   VAR("AuthoritativeDirectory",  BOOL, AuthoritativeDir,    "0"),
   VAR("AuthoritativeDirectory",  BOOL, AuthoritativeDir,    "0"),
   V(AutomapHostsOnResolve,       BOOL,     "0"),
   V(AutomapHostsOnResolve,       BOOL,     "0"),
   V(AutomapHostsSuffixes,        CSV,      ".onion,.exit"),
   V(AutomapHostsSuffixes,        CSV,      ".onion,.exit"),

+ 4 - 3
src/or/dirserv.c

@@ -2470,11 +2470,12 @@ set_routerstatus_from_routerinfo(routerstatus_t *rs,
   rs->dir_port = ri->dir_port;
   rs->dir_port = ri->dir_port;
   if (authdir_mode_bridge(options) &&
   if (authdir_mode_bridge(options) &&
       !tor_addr_is_null(&ri->ipv6_addr) &&
       !tor_addr_is_null(&ri->ipv6_addr) &&
-      node->last_reachable6 >= now - REACHABLE_TIMEOUT) {
+      (options->AuthDirHasIPv6Connectivity == 0 ||
+       node->last_reachable6 >= now - REACHABLE_TIMEOUT)) {
     /* We're a bridge authority (we're not ready for IPv6 relays in
     /* We're a bridge authority (we're not ready for IPv6 relays in
        the consensus quite yet).  There's an IPv6 OR port and it's
        the consensus quite yet).  There's an IPv6 OR port and it's
-       reachable so copy it to the routerstatus.  FIXME: If we're not
-       on IPv6, copy it regardless of reachability.  */
+       reachable (or we know that we're not on IPv6) so copy it to the
+       routerstatus.  */
     tor_addr_copy(&rs->ipv6_addr, &ri->ipv6_addr);
     tor_addr_copy(&rs->ipv6_addr, &ri->ipv6_addr);
     rs->ipv6_orport = ri->ipv6_orport;
     rs->ipv6_orport = ri->ipv6_orport;
   }
   }

+ 1 - 0
src/or/or.h

@@ -3273,6 +3273,7 @@ typedef struct {
   int AuthDirMaxServersPerAuthAddr; /**< Do not permit more than this
   int AuthDirMaxServersPerAuthAddr; /**< Do not permit more than this
                                      * number of servers per IP address shared
                                      * number of servers per IP address shared
                                      * with an authority. */
                                      * with an authority. */
+  int AuthDirHasIPv6Connectivity; /**< Autoboolean: are we on IPv6?  */
 
 
   /** If non-zero, always vote the Fast flag for any relay advertising
   /** If non-zero, always vote the Fast flag for any relay advertising
    * this amount of capacity or more. */
    * this amount of capacity or more. */