[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] r7068: automatically avoid picking more than one node from the same (tor/trunk/src/or)
- To: or-cvs@xxxxxxxxxxxxx
- Subject: [or-cvs] r7068: automatically avoid picking more than one node from the same (tor/trunk/src/or)
- From: arma@xxxxxxxx
- Date: Tue, 15 Aug 2006 23:44:14 -0400 (EDT)
- Delivered-to: archiver@seul.org
- Delivered-to: or-cvs-outgoing@seul.org
- Delivered-to: or-cvs@seul.org
- Delivery-date: Tue, 15 Aug 2006 23:44:21 -0400
- Reply-to: or-talk@xxxxxxxxxxxxx
- Sender: owner-or-cvs@xxxxxxxxxxxxx
Author: arma
Date: 2006-08-15 23:44:13 -0400 (Tue, 15 Aug 2006)
New Revision: 7068
Modified:
tor/trunk/src/or/routerlist.c
Log:
automatically avoid picking more than one node from the same
/16 network when constructing a circuit.
Modified: tor/trunk/src/or/routerlist.c
===================================================================
--- tor/trunk/src/or/routerlist.c 2006-08-16 02:18:55 UTC (rev 7067)
+++ tor/trunk/src/or/routerlist.c 2006-08-16 03:44:13 UTC (rev 7068)
@@ -596,6 +596,21 @@
mark_all_trusteddirservers_up();
}
+/** Look through the routerlist and identify routers that
+ * advertise the same /16 network address as <b>router</b>.
+ * Add each of them to <b>sl</b>.
+ */
+static void
+routerlist_add_network_family(smartlist_t *sl, routerinfo_t *router)
+{
+ SMARTLIST_FOREACH(routerlist->routers, routerinfo_t *, r,
+ {
+ if (router != r &&
+ (router->addr & 0xffff0000) == (r->addr & 0xffff0000))
+ smartlist_add(sl, r);
+ });
+}
+
/** Add all the family of <b>router</b> to the smartlist <b>sl</b>.
* This is used to make sure we don't pick siblings in a single path.
*/
@@ -605,6 +620,10 @@
routerinfo_t *r;
config_line_t *cl;
+ /* 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 (!router->declared_family)
return;