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>
This commit is contained in:
David Goulet 2022-11-09 10:29:47 -05:00
parent 93523ed0d6
commit 9c8c7804d5
2 changed files with 19 additions and 4 deletions

4
changes/ticket40704 Normal file
View File

@ -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.

View 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;