aboutsummaryrefslogtreecommitdiff
path: root/src/feature
diff options
context:
space:
mode:
authorDavid Goulet <dgoulet@torproject.org>2023-09-25 12:42:12 +0000
committerDavid Goulet <dgoulet@torproject.org>2023-09-25 12:42:12 +0000
commitdec9a6946ff2780bfe212c0f5f74b97ea7c3927f (patch)
tree7ac0cbde449a34c69250498f7d06a96b37eafd58 /src/feature
parent0f84a5a6269d967dc8f140808c95e780e1782709 (diff)
parentb855a786b6e7825600e2cc01a9e2c02f4f9b925f (diff)
downloadtor-dec9a6946ff2780bfe212c0f5f74b97ea7c3927f.tar.gz
tor-dec9a6946ff2780bfe212c0f5f74b97ea7c3927f.zip
Merge branch 'ahf/40638' into 'main'
Handle ntor and ntor_v3 individually in rephist and for MetricsPort. Closes #40638 See merge request tpo/core/tor!767
Diffstat (limited to 'src/feature')
-rw-r--r--src/feature/stats/rephist.c23
-rw-r--r--src/feature/stats/rephist.h4
2 files changed, 13 insertions, 14 deletions
diff --git a/src/feature/stats/rephist.c b/src/feature/stats/rephist.c
index 8f4f33151a..20610b6011 100644
--- a/src/feature/stats/rephist.c
+++ b/src/feature/stats/rephist.c
@@ -2290,19 +2290,14 @@ typedef struct {
/** Keep track of the onionskin requests for an assessment period. */
static overload_onionskin_assessment_t overload_onionskin_assessment;
-/**
- * We combine ntorv3 and ntor into the same stat, so we must
- * use this function to convert the cell type to a stat index.
+/** This function ensures that we clamp the maximum value of the given input
+ * <b>type</b> to NTOR in case the input is out of range.
*/
static inline uint16_t
onionskin_type_to_stat(uint16_t type)
{
- if (type == ONION_HANDSHAKE_TYPE_NTOR_V3) {
- return ONION_HANDSHAKE_TYPE_NTOR;
- }
-
if (BUG(type > MAX_ONION_STAT_TYPE)) {
- return MAX_ONION_STAT_TYPE; // use ntor if out of range
+ return MAX_ONION_STAT_TYPE; // use ntor_v3 if out of range
}
return type;
@@ -2371,7 +2366,8 @@ rep_hist_note_circuit_handshake_requested(uint16_t type)
onion_handshakes_requested[stat]++;
/* Only relays get to record requested onionskins. */
- if (stat == ONION_HANDSHAKE_TYPE_NTOR) {
+ if (stat == ONION_HANDSHAKE_TYPE_NTOR ||
+ stat == ONION_HANDSHAKE_TYPE_NTOR_V3) {
/* Assess if we've reached the overload general signal. */
overload_general_onionskin_assessment();
@@ -2398,7 +2394,8 @@ rep_hist_note_circuit_handshake_dropped(uint16_t type)
stats_n_onionskin_dropped[stat]++;
/* Only relays get to record requested onionskins. */
- if (stat == ONION_HANDSHAKE_TYPE_NTOR) {
+ if (stat == ONION_HANDSHAKE_TYPE_NTOR ||
+ stat == ONION_HANDSHAKE_TYPE_NTOR_V3) {
/* Note the dropped ntor in the overload assessment object. */
overload_onionskin_assessment.n_ntor_dropped++;
}
@@ -2438,11 +2435,13 @@ rep_hist_log_circuit_handshake_stats(time_t now)
{
(void)now;
log_notice(LD_HEARTBEAT, "Circuit handshake stats since last time: "
- "%d/%d TAP, %d/%d NTor.",
+ "%d/%d TAP, %d/%d NTor, %d/%d NTor (v3).",
onion_handshakes_assigned[ONION_HANDSHAKE_TYPE_TAP],
onion_handshakes_requested[ONION_HANDSHAKE_TYPE_TAP],
onion_handshakes_assigned[ONION_HANDSHAKE_TYPE_NTOR],
- onion_handshakes_requested[ONION_HANDSHAKE_TYPE_NTOR]);
+ onion_handshakes_requested[ONION_HANDSHAKE_TYPE_NTOR],
+ onion_handshakes_assigned[ONION_HANDSHAKE_TYPE_NTOR_V3],
+ onion_handshakes_requested[ONION_HANDSHAKE_TYPE_NTOR_V3]);
memset(onion_handshakes_assigned, 0, sizeof(onion_handshakes_assigned));
memset(onion_handshakes_requested, 0, sizeof(onion_handshakes_requested));
}
diff --git a/src/feature/stats/rephist.h b/src/feature/stats/rephist.h
index fbfab4c451..a51d81beb9 100644
--- a/src/feature/stats/rephist.h
+++ b/src/feature/stats/rephist.h
@@ -102,8 +102,8 @@ void rep_hist_note_dns_error(int type, uint8_t error);
void rep_hist_consensus_has_changed(const networkstatus_t *ns);
/** We combine ntor and ntorv3 stats, so we have 3 stat types:
- * tap, fast, and ntor. The max type is ntor (2) */
-#define MAX_ONION_STAT_TYPE ONION_HANDSHAKE_TYPE_NTOR
+ * tap, fast, and ntor. The max type is ntor_v3 (3) */
+#define MAX_ONION_STAT_TYPE MAX_ONION_HANDSHAKE_TYPE
extern uint64_t rephist_total_alloc;
extern uint32_t rephist_total_num;