summaryrefslogtreecommitdiff
path: root/src/or
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2004-08-15 08:15:12 +0000
committerRoger Dingledine <arma@torproject.org>2004-08-15 08:15:12 +0000
commitcd3da3fc12602eb4b4c60ce18f88b1dbb3586d14 (patch)
tree32a4a65dd7942aa71d995901af92faf39024dece /src/or
parent10c73764f8c5099e2d85c544a356824d1084b424 (diff)
downloadtor-cd3da3fc12602eb4b4c60ce18f88b1dbb3586d14.tar.gz
tor-cd3da3fc12602eb4b4c60ce18f88b1dbb3586d14.zip
o clients choose nodes proportional to advertised bandwidth
o and/or while avoiding unreliable nodes, depending on goals o 'fascistfirewall' option to pick dirservers on port 80 and ORs on port 443. o if a begin failed due to exit policy, but we believe the IP should have been allowed, switch that router to exitpolicy reject *:* until we get our next directory. svn:r2231
Diffstat (limited to 'src/or')
-rw-r--r--src/or/circuitbuild.c127
-rw-r--r--src/or/config.c3
-rw-r--r--src/or/main.c2
-rw-r--r--src/or/or.h15
-rw-r--r--src/or/relay.c19
-rw-r--r--src/or/rendservice.c2
-rw-r--r--src/or/router.c16
-rw-r--r--src/or/routerlist.c87
-rw-r--r--src/or/routerparse.c3
-rw-r--r--src/or/test.c6
10 files changed, 198 insertions, 82 deletions
diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c
index 7f06e25787..66210fe898 100644
--- a/src/or/circuitbuild.c
+++ b/src/or/circuitbuild.c
@@ -482,12 +482,6 @@ int circuit_extend(cell_t *cell, circuit_t *circ) {
id_digest = router->identity_digest;
} else { /* new format */
router = router_get_by_digest(id_digest);
-#if 0
- if(router) { /* addr/port might be different */
- circ->n_addr = router->addr;
- circ->n_port = router->or_port;
- }
-#endif
}
tor_assert(id_digest);
@@ -947,11 +941,12 @@ static routerinfo_t *choose_good_exit_server_general(routerlist_t *dir)
static routerinfo_t *choose_good_exit_server(uint8_t purpose, routerlist_t *dir)
{
routerinfo_t *r;
+ /* XXX one day, consider picking chosen_exit knowing what's in EntryNodes */
switch(purpose) {
case CIRCUIT_PURPOSE_C_GENERAL:
return choose_good_exit_server_general(dir);
case CIRCUIT_PURPOSE_C_ESTABLISH_REND:
- r = router_choose_random_node(options.RendNodes, options.RendExcludeNodes, NULL);
+ r = router_choose_random_node(options.RendNodes, options.RendExcludeNodes, NULL, 0, 1);
return r;
default:
log_fn(LOG_WARN,"unhandled purpose %d", purpose);
@@ -1049,6 +1044,7 @@ static int count_acceptable_routers(smartlist_t *routers) {
return num;
}
+#if 0
/** Go through smartlist <b>sl</b> of routers, and remove all elements that
* have the same onion key as twin.
*/
@@ -1066,6 +1062,7 @@ static void remove_twins_from_smartlist(smartlist_t *sl, routerinfo_t *twin) {
}
}
}
+#endif
/** Add <b>new_hop</b> to the end of the doubly-linked-list <b>head_ptr</b>.
*
@@ -1084,6 +1081,61 @@ void onion_append_to_cpath(crypt_path_t **head_ptr, crypt_path_t *new_hop)
}
}
+static routerinfo_t *choose_good_middle_server(cpath_build_state_t *state,
+ crypt_path_t *head,
+ int cur_len)
+{
+ int i;
+ routerinfo_t *r, *choice;
+ crypt_path_t *cpath;
+ smartlist_t *excluded = smartlist_create();
+
+ log_fn(LOG_DEBUG, "Contemplating intermediate hop: random choice.");
+ excluded = smartlist_create();
+ if((r = router_get_by_digest(state->chosen_exit_digest)))
+ smartlist_add(excluded, r);
+ if((r = router_get_my_routerinfo()))
+ smartlist_add(excluded, r);
+ for (i = 0, cpath = head; i < cur_len; ++i, cpath=cpath->next) {
+ r = router_get_by_digest(cpath->identity_digest);
+ tor_assert(r);
+ smartlist_add(excluded, r);
+ }
+ choice = router_choose_random_node("", options.ExcludeNodes, excluded, 0, 1);
+ smartlist_free(excluded);
+ return choice;
+}
+
+static routerinfo_t *choose_good_entry_server(cpath_build_state_t *state)
+{
+ routerinfo_t *r, *choice;
+ smartlist_t *excluded = smartlist_create();
+
+ if((r = router_get_by_digest(state->chosen_exit_digest)))
+ smartlist_add(excluded, r);
+ if((r = router_get_my_routerinfo()))
+ smartlist_add(excluded, r);
+ if(options.FascistFirewall) {
+ /* exclude all ORs that listen on the wrong port */
+ routerlist_t *rl;
+ int i;
+
+ router_get_routerlist(&rl);
+ if(!rl)
+ return NULL;
+
+ for(i=0; i < smartlist_len(rl->routers); i++) {
+ r = smartlist_get(rl->routers, i);
+ if(r->or_port != REQUIRED_FIREWALL_ORPORT)
+ smartlist_add(excluded, r);
+ }
+ }
+ choice = router_choose_random_node(options.EntryNodes,
+ options.ExcludeNodes, excluded, 0, 1);
+ smartlist_free(excluded);
+ return choice;
+}
+
/** Choose a suitable next hop in the cpath <b>head_ptr</b>,
* based on <b>state</b>. Add the hop info to head_ptr, and return a
* pointer to the chosen router in <b>router_out</b>.
@@ -1094,10 +1146,8 @@ onion_extend_cpath(crypt_path_t **head_ptr, cpath_build_state_t
{
int cur_len;
crypt_path_t *cpath, *hop;
- routerinfo_t *r;
routerinfo_t *choice;
- int i;
- smartlist_t *sl, *excludednodes;
+ smartlist_t *excludednodes;
tor_assert(head_ptr);
tor_assert(router_out);
@@ -1122,58 +1172,17 @@ onion_extend_cpath(crypt_path_t **head_ptr, cpath_build_state_t
add_nickname_list_to_smartlist(excludednodes,options.ExcludeNodes);
if(cur_len == state->desired_path_len - 1) { /* Picking last node */
- log_fn(LOG_DEBUG, "Contemplating last hop: choice already made: %s",
- state->chosen_exit_name);
choice = router_get_by_digest(state->chosen_exit_digest);
- smartlist_free(excludednodes);
- if(!choice) {
- log_fn(LOG_WARN,"Our chosen exit %s is no longer in the directory? Discarding this circuit.",
- state->chosen_exit_name);
- return -1;
- }
} else if(cur_len == 0) { /* picking first node */
- /* try the nodes in EntryNodes first */
- sl = smartlist_create();
- add_nickname_list_to_smartlist(sl,options.EntryNodes);
- /* XXX one day, consider picking chosen_exit knowing what's in EntryNodes */
- remove_twins_from_smartlist(sl,router_get_by_digest(state->chosen_exit_digest));
- remove_twins_from_smartlist(sl,router_get_my_routerinfo());
- smartlist_subtract(sl,excludednodes);
- choice = smartlist_choose(sl);
- smartlist_free(sl);
- if(!choice) {
- sl = smartlist_create();
- router_add_running_routers_to_smartlist(sl);
- remove_twins_from_smartlist(sl,router_get_by_digest(state->chosen_exit_digest));
- remove_twins_from_smartlist(sl,router_get_my_routerinfo());
- smartlist_subtract(sl,excludednodes);
- choice = smartlist_choose(sl);
- smartlist_free(sl);
- }
- smartlist_free(excludednodes);
- if(!choice) {
- log_fn(LOG_WARN,"No acceptable routers while picking entry node. Discarding this circuit.");
- return -1;
- }
+ choice = choose_good_entry_server(state);
} else {
- log_fn(LOG_DEBUG, "Contemplating intermediate hop: random choice.");
- sl = smartlist_create();
- router_add_running_routers_to_smartlist(sl);
- remove_twins_from_smartlist(sl,router_get_by_digest(state->chosen_exit_digest));
- remove_twins_from_smartlist(sl,router_get_my_routerinfo());
- for (i = 0, cpath = *head_ptr; i < cur_len; ++i, cpath=cpath->next) {
- r = router_get_by_digest(cpath->identity_digest);
- tor_assert(r);
- remove_twins_from_smartlist(sl,r);
- }
- smartlist_subtract(sl,excludednodes);
- choice = smartlist_choose(sl);
- smartlist_free(sl);
- smartlist_free(excludednodes);
- if(!choice) {
- log_fn(LOG_WARN,"No acceptable routers while picking intermediate node. Discarding this circuit.");
- return -1;
- }
+ choice = choose_good_middle_server(state, *head_ptr, cur_len);
+ }
+
+ smartlist_free(excludednodes);
+ if(!choice) {
+ log_fn(LOG_WARN,"Failed to find node for hop %d of our path. Discarding this circuit.", cur_len);
+ return -1;
}
log_fn(LOG_DEBUG,"Chose router %s for hop %d (exit is %s)",
diff --git a/src/or/config.c b/src/or/config.c
index 4706f7c5ae..ed9f0db39e 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -207,6 +207,8 @@ static int config_assign(or_options_t *options, struct config_line_t *list) {
config_compare(list, "ExitPolicy", CONFIG_TYPE_LINELIST, &options->ExitPolicy) ||
config_compare(list, "ExcludeNodes", CONFIG_TYPE_STRING, &options->ExcludeNodes) ||
+ config_compare(list, "FascistFirewall",CONFIG_TYPE_BOOL, &options->FascistFirewall) ||
+
config_compare(list, "Group", CONFIG_TYPE_STRING, &options->Group) ||
config_compare(list, "IgnoreVersion", CONFIG_TYPE_BOOL, &options->IgnoreVersion) ||
@@ -885,6 +887,7 @@ int config_init_logs(or_options_t *options)
return 0;
}
+/** XXX008 DOCDOC */
void
config_parse_exit_policy(struct config_line_t *cfg,
struct exit_policy_t **dest)
diff --git a/src/or/main.c b/src/or/main.c
index 37e71a1f91..74b79c6346 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -419,7 +419,7 @@ static int decide_if_publishable_server(time_t now) {
int bw;
bw = rep_hist_bandwidth_assess();
- router_set_advertised_bandwidth(bw);
+ router_set_bandwidth_capacity(bw);
if(options.ClientOnly)
return 0;
diff --git a/src/or/or.h b/src/or/or.h
index 5bafef20b5..4a05a04747 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -409,6 +409,10 @@
#define CELL_RELAY 3
#define CELL_DESTROY 4
+/* people behind fascist firewalls use only these ports */
+#define REQUIRED_FIREWALL_DIRPORT 80
+#define REQUIRED_FIREWALL_ORPORT 443
+
/* legal characters in a nickname */
#define LEGAL_NICKNAME_CHARACTERS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
@@ -581,9 +585,10 @@ typedef struct {
* bucket per second? */
uint32_t bandwidthburst; /**< How large is this OR's token bucket? */
/** How many bytes/s is this router known to handle? */
- uint32_t advertisedbandwidth;
+ uint32_t bandwidthcapacity;
struct exit_policy_t *exit_policy; /**< What streams will this OR permit
* to exit? */
+ int uptime; /**< How many seconds the router claims to have been up */
/* local info */
int is_running; /**< As far as we know, is this OR currently running? */
time_t status_set_at; /**< When did we last update is_running? */
@@ -852,6 +857,7 @@ typedef struct {
int IgnoreVersion; /**< If true, run no matter what versions of Tor the
* directory recommends. */
int RunAsDaemon; /**< If true, run in the background. (Unix only) */
+ int FascistFirewall; /**< Whether to prefer ORs reachable on 80/443. */
int DirFetchPostPeriod; /**< How often do we fetch new directories
* and post server descriptros to the directory
* server? */
@@ -1351,8 +1357,8 @@ void dup_onion_keys(crypto_pk_env_t **key, crypto_pk_env_t **last);
int init_keys(void);
crypto_pk_env_t *init_key_from_file(const char *fname);
void rotate_onion_key(void);
-void router_set_advertised_bandwidth(int bw);
-int router_get_advertised_bandwidth(void);
+void router_set_bandwidth_capacity(int bw);
+int router_get_bandwidth_capacity(void);
void router_retry_connections(void);
int router_is_clique_mode(routerinfo_t *router);
@@ -1374,7 +1380,8 @@ void add_nickname_list_to_smartlist(struct smartlist_t *sl, const char *list);
void router_add_running_routers_to_smartlist(struct smartlist_t *sl);
int router_nickname_matches(routerinfo_t *router, const char *nickname);
routerinfo_t *router_choose_random_node(char *preferred, char *excluded,
- struct smartlist_t *excludedsmartlist);
+ struct smartlist_t *excludedsmartlist,
+ int preferuptime, int preferbandwidth);
routerinfo_t *router_get_by_addr_port(uint32_t addr, uint16_t port);
routerinfo_t *router_get_by_nickname(const char *nickname);
routerinfo_t *router_get_by_hexdigest(const char *hexdigest);
diff --git a/src/or/relay.c b/src/or/relay.c
index b74a3401b6..bbe57f1a28 100644
--- a/src/or/relay.c
+++ b/src/or/relay.c
@@ -492,15 +492,34 @@ connection_edge_process_relay_cell_not_open(
connection_t *conn, crypt_path_t *layer_hint) {
uint32_t addr;
int reason;
+ routerinfo_t *exitrouter;
if(rh->command == RELAY_COMMAND_END) {
reason = *(cell->payload+RELAY_HEADER_SIZE);
/* We have to check this here, since we aren't connected yet. */
if (rh->length >= 5 && reason == END_STREAM_REASON_EXITPOLICY) {
+ if(conn->type != CONN_TYPE_AP) {
+ log_fn(LOG_WARN,"Got an end because of exitpolicy, but we're not an AP. Closing.");
+ return -1;
+ }
log_fn(LOG_INFO,"Address %s refused due to exit policy. Retrying.",
conn->socks_request->address);
addr = ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE+1));
client_dns_set_entry(conn->socks_request->address, addr);
+
+ /* check if he *ought* to have allowed it */
+ exitrouter = router_get_by_digest(circ->build_state->chosen_exit_digest);
+ if(!exitrouter) {
+ log_fn(LOG_INFO,"Skipping broken circ (exit router vanished)");
+ return 0; /* this circuit is screwed and doesn't know it yet */
+ }
+ if(connection_ap_can_use_exit(conn, exitrouter)) {
+ log_fn(LOG_WARN,"Exitrouter %s seems to be more restrictive than its exit policy. Not using this router as exit for now,", exitrouter->nickname);
+ exit_policy_free(exitrouter->exit_policy);
+ exitrouter->exit_policy =
+ router_parse_exit_policy_from_string("reject *:*");
+ }
+
conn->state = AP_CONN_STATE_CIRCUIT_WAIT;
circuit_detach_stream(circ,conn);
if(connection_ap_handshake_attach_circuit(conn) >= 0)
diff --git a/src/or/rendservice.c b/src/or/rendservice.c
index 836f119e22..ddc2bd88a3 100644
--- a/src/or/rendservice.c
+++ b/src/or/rendservice.c
@@ -822,7 +822,7 @@ void rend_services_introduce(void) {
for (j=prev_intro_nodes; j < NUM_INTRO_POINTS; ++j) {
router = router_choose_random_node(service->intro_prefer_nodes,
service->intro_exclude_nodes,
- exclude_routers);
+ exclude_routers, 1, 0);
if (!router) {
log_fn(LOG_WARN, "Could only establish %d introduction points for %s",
smartlist_len(service->intro_nodes), service->service_id);
diff --git a/src/or/router.c b/src/or/router.c
index 99c406f98b..972b8f8f19 100644
--- a/src/or/router.c
+++ b/src/or/router.c
@@ -132,16 +132,16 @@ void rotate_onion_key(void)
}
/** The latest calculated bandwidth usage for our node. */
-static int advertised_bw = 0;
+static int bw_capacity = 0;
/** Tuck <b>bw</b> away so we can produce it when somebody
- * calls router_get_advertised_bandwidth() below.
+ * calls router_get_bandwidth_capacity() below.
*/
-void router_set_advertised_bandwidth(int bw) {
- advertised_bw = bw;
+void router_set_bandwidth_capacity(int bw) {
+ bw_capacity = bw;
}
/** Return the value we tucked away above, or zero by default. */
-int router_get_advertised_bandwidth(void) {
- return advertised_bw;
+int router_get_bandwidth_capacity(void) {
+ return bw_capacity;
}
/* Read an RSA secret key key from a file that was once named fname_old,
@@ -535,7 +535,7 @@ int router_rebuild_descriptor(void) {
ri->platform = tor_strdup(platform);
ri->bandwidthrate = options.BandwidthRate;
ri->bandwidthburst = options.BandwidthBurst;
- ri->advertisedbandwidth = router_get_advertised_bandwidth();
+ ri->bandwidthcapacity = router_get_bandwidth_capacity();
ri->exit_policy = NULL; /* zero it out first */
router_add_exit_policy_from_config(ri);
ri->is_trusted_dir = authdir_mode();
@@ -652,7 +652,7 @@ int router_dump_router_to_string(char *s, int maxlen, routerinfo_t *router,
stats_n_seconds_uptime,
(int) router->bandwidthrate,
(int) router->bandwidthburst,
- (int) router->advertisedbandwidth,
+ (int) router->bandwidthcapacity,
onion_pkey, identity_pkey,
bandwidth_usage);
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index befb4061a4..a1de86c43d 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -59,7 +59,8 @@ routerinfo_t *router_pick_directory_server(int requireauth, int requireothers) {
if(choice)
return choice;
- log_fn(LOG_WARN,"No dirservers known. Reloading and trying again.");
+ log_fn(LOG_WARN,"Still no dirservers %s. Reloading and trying again.",
+ options.FascistFirewall ? "reachable" : "known");
has_fetched_directory=0; /* reset it */
routerlist_clear_trusted_directories();
if(options.RouterFile) {
@@ -97,6 +98,9 @@ router_pick_directory_server_impl(int requireauth, int requireothers)
continue;
if(requireothers && router_is_me(router))
continue;
+ if(options.FascistFirewall &&
+ router->dir_port != REQUIRED_FIREWALL_DIRPORT)
+ continue;
smartlist_add(sl, router);
}
@@ -206,13 +210,78 @@ void router_add_running_routers_to_smartlist(smartlist_t *sl) {
}
}
+/** How many seconds a router must be up before we'll use it for
+ * reliability-critical node positions.
+ */
+#define ROUTER_REQUIRED_MIN_UPTIME 0
+ /* XXX008 change this once we parse router->uptime */
+
+static void
+routerlist_sl_remove_unreliable_routers(smartlist_t *sl)
+{
+ int i;
+ routerinfo_t *router;
+
+ for (i = 0; i < smartlist_len(sl); ++i) {
+ router = smartlist_get(sl, i);
+ if(router->uptime < ROUTER_REQUIRED_MIN_UPTIME) {
+ log(LOG_DEBUG, "Router %s has insufficient uptime; deleting.",
+ router->nickname);
+ smartlist_del(sl, i--);
+ }
+ }
+}
+
+static routerinfo_t *
+routerlist_sl_choose_by_bandwidth(smartlist_t *sl)
+{
+ int i;
+ routerinfo_t *router;
+ smartlist_t *bandwidths;
+ uint32_t this_bw, tmp, total_bw=0, rand_bw;
+ uint32_t *p;
+
+ bandwidths = smartlist_create();
+ for (i = 0; i < smartlist_len(sl); ++i) {
+ router = smartlist_get(sl, i);
+ /* give capacity a default, until 0.0.7 is obsolete */
+ tmp = (router->bandwidthcapacity == 0) ? 200000 : router->bandwidthcapacity;
+ this_bw = (tmp < router->bandwidthrate) ? tmp : router->bandwidthrate;
+ p = tor_malloc(sizeof(uint32_t));
+ *p = this_bw;
+ smartlist_add(bandwidths, p);
+ total_bw += this_bw;
+// log_fn(LOG_INFO,"Recording bw %d for node %s.", this_bw, router->nickname);
+ }
+ if(!total_bw)
+ return NULL;
+ rand_bw = crypto_pseudo_rand_int(total_bw);
+// log_fn(LOG_INFO,"Total bw %d. Randomly chose %d.", total_bw, rand_bw);
+ tmp = 0;
+ for(i=0; ; i++) {
+ tor_assert(i < smartlist_len(sl));
+ p = smartlist_get(bandwidths, i);
+ tmp += *p;
+ router = smartlist_get(sl, i);
+// log_fn(LOG_INFO,"Considering %s. tmp = %d.", router->nickname, tmp);
+ if(tmp >= rand_bw)
+ break;
+ }
+ SMARTLIST_FOREACH(bandwidths, uint32_t*, p, tor_free(p));
+ smartlist_free(bandwidths);
+ router = smartlist_get(sl, i);
+ log_fn(LOG_INFO,"Picked %s.", router->nickname);
+ return router;
+}
+
/** Return a random running router from the routerlist. If any node
* named in <b>preferred</b> is available, pick one of those. Never pick a
* node named in <b>excluded</b>, or whose routerinfo is in
* <b>excludedsmartlist</b>, even if they are the only nodes available.
*/
routerinfo_t *router_choose_random_node(char *preferred, char *excluded,
- smartlist_t *excludedsmartlist)
+ smartlist_t *excludedsmartlist,
+ int preferuptime, int preferbandwidth)
{
smartlist_t *sl, *excludednodes;
routerinfo_t *choice;
@@ -220,13 +289,18 @@ routerinfo_t *router_choose_random_node(char *preferred, char *excluded,
excludednodes = smartlist_create();
add_nickname_list_to_smartlist(excludednodes,excluded);
- /* try the nodes in RendNodes first */
+ /* try the preferred nodes first */
sl = smartlist_create();
add_nickname_list_to_smartlist(sl,preferred);
smartlist_subtract(sl,excludednodes);
if(excludedsmartlist)
smartlist_subtract(sl,excludedsmartlist);
- choice = smartlist_choose(sl);
+ if(preferuptime)
+ routerlist_sl_remove_unreliable_routers(sl);
+ if(preferbandwidth)
+ choice = routerlist_sl_choose_by_bandwidth(sl);
+ else
+ choice = smartlist_choose(sl);
smartlist_free(sl);
if(!choice) {
sl = smartlist_create();
@@ -234,7 +308,10 @@ routerinfo_t *router_choose_random_node(char *preferred, char *excluded,
smartlist_subtract(sl,excludednodes);
if(excludedsmartlist)
smartlist_subtract(sl,excludedsmartlist);
- choice = smartlist_choose(sl);
+ if(preferuptime)
+ routerlist_sl_remove_unreliable_routers(sl);
+ if(preferbandwidth)
+ choice = routerlist_sl_choose_by_bandwidth(sl);
smartlist_free(sl);
}
smartlist_free(excludednodes);
diff --git a/src/or/routerparse.c b/src/or/routerparse.c
index 646ded6c0c..0fd041060c 100644
--- a/src/or/routerparse.c
+++ b/src/or/routerparse.c
@@ -741,7 +741,7 @@ routerinfo_t *router_parse_entry_from_string(const char *s,
router->bandwidthrate = atoi(tok->args[0]);
router->bandwidthburst = atoi(tok->args[1]);
if(tok->n_args > 2)
- router->advertisedbandwidth = atoi(tok->args[2]);
+ router->bandwidthcapacity = atoi(tok->args[2]);
bw_set = 1;
}
@@ -903,6 +903,7 @@ static int router_add_exit_policy(routerinfo_t *router,directory_token_t *tok)
/** Given a K_ACCEPT or K_REJECT token and a router, create a new exit_policy_t
* corresponding to the token, and add it to <b>router</b> */
+/* XXX008 NICK DOCDOC: there is no <b>router</b> */
static struct exit_policy_t *
router_parse_exit_policy(directory_token_t *tok) {
diff --git a/src/or/test.c b/src/or/test.c
index 68d8e8dc30..fa84b7ca83 100644
--- a/src/or/test.c
+++ b/src/or/test.c
@@ -737,7 +737,7 @@ test_dir_format()
r1.identity_pkey = pk2;
r1.bandwidthrate = 1000;
r1.bandwidthburst = 5000;
- r1.advertisedbandwidth = 10000;
+ r1.bandwidthcapacity = 10000;
r1.exit_policy = NULL;
r1.nickname = "Magri";
r1.platform = tor_strdup(platform);
@@ -762,7 +762,7 @@ test_dir_format()
r2.dir_port = 0;
r2.onion_pkey = pk2;
r2.identity_pkey = pk1;
- r2.bandwidthrate = r2.bandwidthburst = r2.advertisedbandwidth = 3000;
+ r2.bandwidthrate = r2.bandwidthburst = r2.bandwidthcapacity = 3000;
r2.exit_policy = &ex1;
r2.nickname = "Fred";
@@ -815,7 +815,7 @@ test_dir_format()
test_eq(rp1->dir_port, r1.dir_port);
test_eq(rp1->bandwidthrate, r1.bandwidthrate);
test_eq(rp1->bandwidthburst, r1.bandwidthburst);
- test_eq(rp1->advertisedbandwidth, r1.advertisedbandwidth);
+ test_eq(rp1->bandwidthcapacity, r1.bandwidthcapacity);
test_assert(crypto_pk_cmp_keys(rp1->onion_pkey, pk1) == 0);
test_assert(crypto_pk_cmp_keys(rp1->identity_pkey, pk2) == 0);
test_assert(rp1->exit_policy == NULL);