summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Goulet <dgoulet@torproject.org>2022-11-09 10:29:47 -0500
committerDavid Goulet <dgoulet@torproject.org>2022-11-09 11:57:32 -0500
commit9c8c7804d535b4248e7e029c969d9a77a54947f6 (patch)
tree62f33ac473197710cb363cd4442eaabd11f488fb
parent93523ed0d69112758ec593fbf78ac122b7e196d9 (diff)
downloadtor-9c8c7804d535b4248e7e029c969d9a77a54947f6.tar.gz
tor-9c8c7804d535b4248e7e029c969d9a77a54947f6.zip
relay: Add the onion_queue_wait_cutoff consensus param
Transform the hardcoded value ONIONQUEUE_WAIT_CUTOFF into a consensus parameter so we can control it network wide. Closes #40704 Signed-off-by: David Goulet <dgoulet@torproject.org>
-rw-r--r--changes/ticket407044
-rw-r--r--src/feature/relay/onion_queue.c19
2 files changed, 19 insertions, 4 deletions
diff --git a/changes/ticket40704 b/changes/ticket40704
new file mode 100644
index 0000000000..b65e88ea09
--- /dev/null
+++ b/changes/ticket40704
@@ -0,0 +1,4 @@
+ o Minor feature (relay):
+ - Two new consensus parameters are added to control the wait time in queue
+ of the onionskins. One of them is the torrc MaxOnionQueueDelay options
+ which supersedes the consensus parameter. Closes ticket 40704.
diff --git a/src/feature/relay/onion_queue.c b/src/feature/relay/onion_queue.c
index 3c18713a22..5897ee8a48 100644
--- a/src/feature/relay/onion_queue.c
+++ b/src/feature/relay/onion_queue.c
@@ -48,9 +48,6 @@ typedef struct onion_queue_t {
time_t when_added;
} onion_queue_t;
-/** 5 seconds on the onion queue til we just send back a destroy */
-#define ONIONQUEUE_WAIT_CUTOFF 5
-
TOR_TAILQ_HEAD(onion_queue_head_t, onion_queue_t);
typedef struct onion_queue_head_t onion_queue_head_t;
@@ -71,6 +68,20 @@ static int ol_entries[MAX_QUEUE_IDX+1];
static int num_ntors_per_tap(void);
static void onion_queue_entry_remove(onion_queue_t *victim);
+/** Return the onion queue wait cutoff value from the consensus parameter. */
+static time_t
+get_onionqueue_wait_cutoff(void)
+{
+/* In seconds. */
+#define ONION_QUEUE_WAIT_CUTOFF_DEFAULT 5
+#define ONION_QUEUE_WAIT_CUTOFF_MIN 0
+#define ONION_QUEUE_WAIT_CUTOFF_MAX INT32_MAX
+ return networkstatus_get_param(NULL, "onion_queue_wait_cutoff",
+ ONION_QUEUE_WAIT_CUTOFF_DEFAULT,
+ ONION_QUEUE_WAIT_CUTOFF_MIN,
+ ONION_QUEUE_WAIT_CUTOFF_MAX);
+}
+
/** Return the max onion queue delay value either from the torrc options (if
* the user explicitly set it) else from the consensus parameter. */
static uint64_t
@@ -242,7 +253,7 @@ onion_pending_add(or_circuit_t *circ, create_cell_t *onionskin)
/* cull elderly requests. */
while (1) {
onion_queue_t *head = TOR_TAILQ_FIRST(&ol_list[queue_idx]);
- if (now - head->when_added < (time_t)ONIONQUEUE_WAIT_CUTOFF)
+ if (now - head->when_added < get_onionqueue_wait_cutoff())
break;
circ = head->circ;