diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/or/config.c | 1 | ||||
-rw-r--r-- | src/or/or.h | 2 | ||||
-rw-r--r-- | src/or/routerlist.c | 4 |
3 files changed, 6 insertions, 1 deletions
diff --git a/src/or/config.c b/src/or/config.c index 50d986c355..5872ded220 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -152,6 +152,7 @@ static config_var_t _option_vars[] = { VAR("DirPort", UINT, DirPort, "0"), OBSOLETE("DirPostPeriod"), VAR("DirServer", LINELIST, DirServers, NULL), + VAR("EnforceDistinctSubnets", BOOL, EnforceDistinctSubnets,"1"), VAR("EntryNodes", STRING, EntryNodes, NULL), VAR("ExcludeNodes", STRING, ExcludeNodes, NULL), VAR("ExitNodes", STRING, ExitNodes, NULL), diff --git a/src/or/or.h b/src/or/or.h index bb7d0b6685..4db05824f4 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -1581,6 +1581,8 @@ typedef struct { char *ServerDNSResolvConfFile; /**< If provided, we configure our internal * resolver from the file here rather than from * /etc/resolv.conf (Unix) or the registry (Windows). */ + int EnforceDistinctSubnets; /** If true, don't allow multiple routers in the + * same network zone in the same circuit. */ } or_options_t; /** Persistent state for an onion router, as saved to disk. */ diff --git a/src/or/routerlist.c b/src/or/routerlist.c index 7f0dc577d6..ecef569180 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -629,10 +629,12 @@ routerlist_add_family(smartlist_t *sl, routerinfo_t *router) { routerinfo_t *r; config_line_t *cl; + or_options_t *options = get_options(); /* First, add any routers with similar network addresses. * XXX It's possible this will be really expensive; we'll see. */ - routerlist_add_network_family(sl, router); + if (options->EnforceDistinctSubnets) + routerlist_add_network_family(sl, router); if (!router->declared_family) return; |