summaryrefslogtreecommitdiff
path: root/src/or/connection_or.c
diff options
context:
space:
mode:
authorMike Perry <mikeperry-git@torproject.org>2015-11-14 13:08:24 -0800
committerNick Mathewson <nickm@torproject.org>2017-05-08 13:49:22 -0400
commit76c9330f9d41af48b64c0abe7a53749f1ee0d601 (patch)
tree4caef7fa2e5a80157ec9133a150f44f5cfb30434 /src/or/connection_or.c
parentd5a151a06788c28ac1c50398c6e571d484774f47 (diff)
downloadtor-76c9330f9d41af48b64c0abe7a53749f1ee0d601.tar.gz
tor-76c9330f9d41af48b64c0abe7a53749f1ee0d601.zip
Bug 17604: Converge on only one long-lived TLS conn between relays.
Accomplished via the following: 1. Use NETINFO cells to determine if both peers will agree on canonical status. Prefer connections where they agree to those where they do not. 2. Alter channel_is_better() to prefer older orconns in the case of multiple canonical connections, and use the orconn with more circuits on it in case of age ties. Also perform some hourly accounting on how many of these types of connections there are and log it at info or notice level.
Diffstat (limited to 'src/or/connection_or.c')
-rw-r--r--src/or/connection_or.c14
1 files changed, 5 insertions, 9 deletions
diff --git a/src/or/connection_or.c b/src/or/connection_or.c
index 5d32217c86..c77e364717 100644
--- a/src/or/connection_or.c
+++ b/src/or/connection_or.c
@@ -1040,10 +1040,8 @@ connection_or_group_set_badness_(smartlist_t *group, int force)
}
if (!best ||
- channel_is_better(now,
- TLS_CHAN_TO_BASE(or_conn->chan),
- TLS_CHAN_TO_BASE(best->chan),
- 0)) {
+ channel_is_better(TLS_CHAN_TO_BASE(or_conn->chan),
+ TLS_CHAN_TO_BASE(best->chan))) {
best = or_conn;
}
} SMARTLIST_FOREACH_END(or_conn);
@@ -1071,11 +1069,9 @@ connection_or_group_set_badness_(smartlist_t *group, int force)
or_conn->base_.state != OR_CONN_STATE_OPEN)
continue;
if (or_conn != best &&
- channel_is_better(now,
- TLS_CHAN_TO_BASE(best->chan),
- TLS_CHAN_TO_BASE(or_conn->chan), 1)) {
- /* This isn't the best conn, _and_ the best conn is better than it,
- even when we're being forgiving. */
+ channel_is_better(TLS_CHAN_TO_BASE(best->chan),
+ TLS_CHAN_TO_BASE(or_conn->chan))) {
+ /* This isn't the best conn, _and_ the best conn is better than it */
if (best->is_canonical) {
log_info(LD_OR,
"Marking OR conn to %s:%d as unsuitable for new circuits: "