]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
relay: Add the onion_queue_wait_cutoff consensus param
authorDavid Goulet <dgoulet@torproject.org>
Wed, 9 Nov 2022 15:29:47 +0000 (10:29 -0500)
committerDavid Goulet <dgoulet@torproject.org>
Wed, 9 Nov 2022 16:57:32 +0000 (11:57 -0500)
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>
changes/ticket40704 [new file with mode: 0644]
src/feature/relay/onion_queue.c

diff --git a/changes/ticket40704 b/changes/ticket40704
new file mode 100644 (file)
index 0000000..b65e88e
--- /dev/null
@@ -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.
index 3c18713a2276fe876f8abcb4424c4d9abace5f22..5897ee8a4854e83559155603e0ca000d9288517c 100644 (file)
@@ -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;