aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/or/dirserv.c5
-rw-r--r--src/or/rephist.c15
-rw-r--r--src/or/rephist.h2
3 files changed, 22 insertions, 0 deletions
diff --git a/src/or/dirserv.c b/src/or/dirserv.c
index 0c3e72f3a3..b59478e17d 100644
--- a/src/or/dirserv.c
+++ b/src/or/dirserv.c
@@ -2776,6 +2776,11 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
routers_sort_by_identity(routers);
omit_as_sybil = get_possible_sybil_list(routers);
+ DIGESTMAP_FOREACH(omit_as_sybil, sybil_id, void *, ignore) {
+ (void) ignore;
+ rep_hist_make_router_pessimal(sybil_id, now);
+ } DIGESTMAP_FOREACH_END;
+
dirserv_compute_performance_thresholds(rl, omit_as_sybil);
routerstatuses = smartlist_new();
diff --git a/src/or/rephist.c b/src/or/rephist.c
index 925ca88153..34caa4b518 100644
--- a/src/or/rephist.c
+++ b/src/or/rephist.c
@@ -422,6 +422,21 @@ rep_hist_note_router_unreachable(const char *id, time_t when)
}
}
+/** Mark a router with ID <b>id</b> as non-Running, and retroactively declare
+ * that it has never been running: give it no stability and no WFU. */
+void
+rep_hist_make_router_pessimal(const char *id, time_t when)
+{
+ or_history_t *hist = get_or_history(id);
+ tor_assert(hist);
+
+ rep_hist_note_router_unreachable(id, when);
+ mark_or_down(hist, when, 1);
+
+ hist->weighted_run_length = 0;
+ hist->weighted_uptime = 0;
+}
+
/** Helper: Discount all old MTBF data, if it is time to do so. Return
* the time at which we should next discount MTBF data. */
time_t
diff --git a/src/or/rephist.h b/src/or/rephist.h
index 5568330dd7..811cd8d450 100644
--- a/src/or/rephist.h
+++ b/src/or/rephist.h
@@ -24,6 +24,8 @@ void rep_hist_dump_stats(time_t now, int severity);
void rep_hist_note_bytes_read(size_t num_bytes, time_t when);
void rep_hist_note_bytes_written(size_t num_bytes, time_t when);
+void rep_hist_make_router_pessimal(const char *id, time_t when);
+
void rep_hist_note_dir_bytes_read(size_t num_bytes, time_t when);
void rep_hist_note_dir_bytes_written(size_t num_bytes, time_t when);