diff options
Diffstat (limited to 'src/or')
-rw-r--r-- | src/or/channeltls.c | 3 | ||||
-rw-r--r-- | src/or/connection_or.c | 1 | ||||
-rw-r--r-- | src/or/rephist.c | 44 | ||||
-rw-r--r-- | src/or/rephist.h | 4 | ||||
-rw-r--r-- | src/or/status.c | 4 |
5 files changed, 55 insertions, 1 deletions
diff --git a/src/or/channeltls.c b/src/or/channeltls.c index e194c1c4df..1cf697ccc5 100644 --- a/src/or/channeltls.c +++ b/src/or/channeltls.c @@ -23,6 +23,7 @@ #include "connection_or.h" #include "control.h" #include "relay.h" +#include "rephist.h" #include "router.h" #include "routerlist.h" #include "scheduler.h" @@ -1463,6 +1464,8 @@ channel_tls_process_versions_cell(var_cell_t *cell, channel_tls_t *chan) return; } + rep_hist_note_negotiated_link_proto(highest_supported_version, started_here); + chan->conn->link_proto = highest_supported_version; chan->conn->handshake_state->received_versions = 1; diff --git a/src/or/connection_or.c b/src/or/connection_or.c index 85462d899d..e0dff1c915 100644 --- a/src/or/connection_or.c +++ b/src/or/connection_or.c @@ -1819,6 +1819,7 @@ connection_tls_finish_handshake(or_connection_t *conn) conn->base_.port, digest_rcvd, 0); } tor_tls_block_renegotiation(conn->tls); + rep_hist_note_negotiated_link_proto(1, started_here); return connection_or_set_state_open(conn); } else { connection_or_change_state(conn, OR_CONN_STATE_OR_HANDSHAKING_V2); diff --git a/src/or/rephist.c b/src/or/rephist.c index 34908828a5..fe0997c891 100644 --- a/src/or/rephist.c +++ b/src/or/rephist.c @@ -3121,6 +3121,50 @@ rep_hist_hs_stats_write(time_t now) return start_of_hs_stats_interval + WRITE_STATS_INTERVAL; } +#define MAX_LINK_PROTO_TO_LOG 4 +static uint64_t link_proto_count[MAX_LINK_PROTO_TO_LOG+1][2]; + +/** Note that we negotiated link protocol version <b>link_proto</b>, on + * a connection that started here iff <b>started_here</b> is true. + */ +void +rep_hist_note_negotiated_link_proto(unsigned link_proto, int started_here) +{ + started_here = !!started_here; /* force to 0 or 1 */ + if (link_proto > MAX_LINK_PROTO_TO_LOG) { + log_warn(LD_BUG, "Can't log link protocol %u", link_proto); + return; + } + + link_proto_count[link_proto][started_here]++; +} + +/** Log a heartbeat message explaining how many connections of each link + * protocol version we have used. + */ +void +rep_hist_log_link_protocol_counts(void) +{ + log_notice(LD_HEARTBEAT, + "Since startup, we have initiated " + U64_FORMAT" v1 connections, " + U64_FORMAT" v2 connections, " + U64_FORMAT" v3 connections, and " + U64_FORMAT" v4 connections; and received " + U64_FORMAT" v1 connections, " + U64_FORMAT" v2 connections, " + U64_FORMAT" v3 connections, and " + U64_FORMAT" v4 connections.", + U64_PRINTF_ARG(link_proto_count[1][1]), + U64_PRINTF_ARG(link_proto_count[2][1]), + U64_PRINTF_ARG(link_proto_count[3][1]), + U64_PRINTF_ARG(link_proto_count[4][1]), + U64_PRINTF_ARG(link_proto_count[1][0]), + U64_PRINTF_ARG(link_proto_count[2][0]), + U64_PRINTF_ARG(link_proto_count[3][0]), + U64_PRINTF_ARG(link_proto_count[4][0])); +} + /** Free all storage held by the OR/link history caches, by the * bandwidth history arrays, by the port history, or by statistics . */ void diff --git a/src/or/rephist.h b/src/or/rephist.h index 42710c4ed6..f94b4e8ff1 100644 --- a/src/or/rephist.h +++ b/src/or/rephist.h @@ -108,5 +108,9 @@ void rep_hist_stored_maybe_new_hs(const crypto_pk_t *pubkey); void rep_hist_free_all(void); +void rep_hist_note_negotiated_link_proto(unsigned link_proto, + int started_here); +void rep_hist_log_link_protocol_counts(void); + #endif diff --git a/src/or/status.c b/src/or/status.c index 2acdd28249..8f7be0aa3c 100644 --- a/src/or/status.c +++ b/src/or/status.c @@ -136,8 +136,10 @@ log_heartbeat(time_t now) "Average packaged cell fullness: %2.3f%%. " "TLS write overhead: %.f%%", fullness_pct, overhead_pct); - if (public_server_mode(options)) + if (public_server_mode(options)) { rep_hist_log_circuit_handshake_stats(now); + rep_hist_log_link_protocol_counts(); + } circuit_log_ancient_one_hop_circuits(1800); |