diff options
author | David Goulet <dgoulet@torproject.org> | 2022-10-13 10:32:16 -0400 |
---|---|---|
committer | David Goulet <dgoulet@torproject.org> | 2022-10-26 15:16:48 -0400 |
commit | 98b98fd3ce767d9fd303908337fdae0a4d558d67 (patch) | |
tree | 882c6794371809dfe798fb15c96b9e1ea8c57717 | |
parent | 609a82a595db45603edc1d007a6657fe4c1b4f5f (diff) | |
download | tor-98b98fd3ce767d9fd303908337fdae0a4d558d67.tar.gz tor-98b98fd3ce767d9fd303908337fdae0a4d558d67.zip |
rephist: Track number of streams seen per type
Related to #40194
Signed-off-by: David Goulet <dgoulet@torproject.org>
-rw-r--r-- | src/core/or/connection_edge.c | 10 | ||||
-rw-r--r-- | src/feature/stats/rephist.c | 44 | ||||
-rw-r--r-- | src/feature/stats/rephist.h | 3 |
3 files changed, 57 insertions, 0 deletions
diff --git a/src/core/or/connection_edge.c b/src/core/or/connection_edge.c index 7ba7ecc4c5..2a79d0cf58 100644 --- a/src/core/or/connection_edge.c +++ b/src/core/or/connection_edge.c @@ -4119,6 +4119,9 @@ connection_exit_begin_resolve(cell_t *cell, or_circuit_t *circ) if (rh.length > RELAY_PAYLOAD_SIZE) return -1; + /* Note the RESOLVE stream as seen. */ + rep_hist_note_stream(RELAY_COMMAND_RESOLVE); + /* This 'dummy_conn' only exists to remember the stream ID * associated with the resolve request; and to make the * implementation of dns.c more uniform. (We really only need to @@ -4241,6 +4244,10 @@ connection_exit_connect(edge_connection_t *edge_conn) return; } + /* Note the BEGIN stream as seen. We do this after the Exit policy check in + * order to only account for valid streams. */ + rep_hist_note_stream(RELAY_COMMAND_BEGIN); + #ifdef HAVE_SYS_UN_H if (conn->socket_family != AF_UNIX) { #else @@ -4336,6 +4343,9 @@ connection_exit_connect_dir(edge_connection_t *exitconn) log_info(LD_EXIT, "Opening local connection for anonymized directory exit"); + /* Note the BEGIN_DIR stream as seen. */ + rep_hist_note_stream(RELAY_COMMAND_BEGIN_DIR); + exitconn->base_.state = EXIT_CONN_STATE_OPEN; dirconn = dir_connection_new(tor_addr_family(&exitconn->base_.addr)); diff --git a/src/feature/stats/rephist.c b/src/feature/stats/rephist.c index f12b1e8a70..962450e72b 100644 --- a/src/feature/stats/rephist.c +++ b/src/feature/stats/rephist.c @@ -1639,6 +1639,50 @@ rep_hist_note_exit_stream_opened(uint16_t port) log_debug(LD_HIST, "Opened exit stream to port %d", port); } +/*** Streams statistics ***/ + +/** Number of BEGIN streams seen. */ +static uint64_t streams_begin_seen; +/** Number of BEGIN_DIR streams seen. */ +static uint64_t streams_begindir_seen; +/** Number of RESOLVE streams seen. */ +static uint64_t streams_resolve_seen; + +/** Note a stream as seen for the given relay command. */ +void +rep_hist_note_stream(unsigned int cmd) +{ + switch (cmd) { + case RELAY_COMMAND_BEGIN: + streams_begin_seen++; + break; + case RELAY_COMMAND_BEGIN_DIR: + streams_begindir_seen++; + break; + case RELAY_COMMAND_RESOLVE: + streams_resolve_seen++; + break; + default: + break; + } +} + +/** Return number of stream seen for the given command. */ +uint64_t +rep_hist_get_stream_seen(unsigned int cmd) +{ + switch (cmd) { + case RELAY_COMMAND_BEGIN: + return streams_begin_seen; + case RELAY_COMMAND_BEGIN_DIR: + return streams_begindir_seen; + case RELAY_COMMAND_RESOLVE: + return streams_resolve_seen; + default: + return 0; + } +} + /******* Connections statistics *******/ #define CONN_DIRECTION_INITIATED 0 diff --git a/src/feature/stats/rephist.h b/src/feature/stats/rephist.h index 2a83dd185e..c1352ae7f8 100644 --- a/src/feature/stats/rephist.h +++ b/src/feature/stats/rephist.h @@ -48,6 +48,9 @@ uint64_t rep_hist_get_conn_created(bool initiated, unsigned int type); uint64_t rep_hist_get_conn_opened(bool initiated, unsigned int type); uint64_t rep_hist_get_conn_rejected(unsigned int type); +void rep_hist_note_stream(unsigned int cmd); +uint64_t rep_hist_get_stream_seen(unsigned int cmd); + void rep_hist_buffer_stats_init(time_t now); void rep_hist_buffer_stats_add_circ(circuit_t *circ, time_t end_of_interval); |