Commit Graph

27593 Commits

Author SHA1 Message Date
Dimitris Apostolou 2905e7667e Fix typos 2022-02-25 11:41:34 +02:00
David Goulet 45416356ed Merge branch 'tor-gitlab/mr/488' 2022-02-23 15:21:40 -05:00
David Goulet d09e58d9bf cc: Fix memleak when building extension response
Fixes #40575

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-02-23 14:40:04 -05:00
David Goulet 69f1a7aa59 Merge branch 'tor-gitlab/mr/536' 2022-02-23 13:19:10 -05:00
Roger Dingledine 72729210bf fix a typo in a comment 2022-02-23 10:03:24 -05:00
Mike Perry 2d0377be75 Reject intro2 cells that request unadvertized congestion control. 2022-02-23 00:42:31 +00:00
Mike Perry 77bf932c83 Properly initialize the cc_enabled field in hs intro data. 2022-02-23 00:23:23 +00:00
Mike Perry 01bda6c23f Add test for sendme_inc validation. 2022-02-22 19:28:36 +00:00
Mike Perry 8f4bd8730c Add test for sendme_cell_is_next with sendme_inc of 31 2022-02-22 19:28:36 +00:00
Mike Perry 5c88bea84c Add test for circuit_sendme_cell_is_next() when sendme_inc is 100.
This ensures compatibility with old tor.
2022-02-22 19:28:36 +00:00
Mike Perry a956b20c1d Add a delta parameter to Vegas.
This allows us to cap the queue use during steady state. In shadow, this
reduced instances of long circuit queues at relays.
2022-02-22 19:28:35 +00:00
Mike Perry 3a3f111b23 Exit slow start at the gamma threshold
This improves performance and fairness.
2022-02-22 19:28:35 +00:00
Mike Perry 1960bf09f3 Increment by at least 2 sendme_incs in slow start 2022-02-22 19:28:35 +00:00
Mike Perry d62f9c9d00 Only apply more frequent cwnd updates after slow start. 2022-02-22 19:28:35 +00:00
Mike Perry 43f6f3fd3a Make N_EWMA a percentage of CWND update rate, capped by a max value.
This proved better in Shadow sims than just a multiple of CWND.
2022-02-22 19:28:35 +00:00
Mike Perry 3079e2cacc Relocate two parameters from circuit scope to global scope.
Changes in these will not affect in-progress transfers.
2022-02-22 19:28:35 +00:00
Mike Perry 4f3a0e39cf Guard against 0 time delta in BDP calc.
This can only happen in Shadow, but it will cause issues there.
2022-02-22 19:28:35 +00:00
Mike Perry 8052d0c2c0 Increase RTT ratio used to detect monotime jumps/stalls.
In Shadow, we saw RTT jumps as high as 1000 naturally.

So let's set this to 5000, to give us some breathing room.
2022-02-22 19:28:35 +00:00
Mike Perry 338d00ba92 Fix NULL pointer deref in logs 2022-02-22 19:28:35 +00:00
Mike Perry 86f81abe30 Properly compute the number or recv cells from deliver_window
Without this conversion, there is an implict 1000-recv_cells, which causes
the mod to fail if it is not a factor of 1000.
2022-02-22 19:28:35 +00:00
Mike Perry b2553bfba2 Use path type hint for Vegas queue parameters.
These parameters will vary depending on path length, especially for onions.
2022-02-22 19:28:35 +00:00
Mike Perry 0a6cde8756 Set new defaults for congestion control parameters.
Defaults determined from Shadow experimentation.

More parameter functionality changes to follow.
2022-02-22 19:28:35 +00:00
David Goulet d4cf3fadec cc: Change edge_get_ccontrol() to look at both cpath and on_circuit
Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-02-22 19:28:35 +00:00
David Goulet 27d948dab8 hs: Fix tests for congestion control 2022-02-22 19:28:35 +00:00
David Goulet 6f45ad3771 hs: Setup congestion control on service rends using intro data
Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-02-22 19:28:35 +00:00
David Goulet 729dd14fde hs: Decode and cache the INTRODUCE cell congestion control extension
Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-02-22 19:28:35 +00:00
David Goulet 38e9d9b465 hs: Build INTRODUCE extension in the encrypted section
Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-02-22 19:28:35 +00:00
David Goulet c79df44d22 hs: Setup congestion control on client rends
Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-02-22 19:28:35 +00:00
David Goulet 0eaf0e8a31 hs: Republish onion descriptor on sendme_inc change
Republishing is necessary to ensure that clients connect using the correct
sendme_inc upon any change. Additionally, introduction points must be
re-chosen, so that cached descriptors with old values are not usable.

We do not expect to change sendme_inc, unless cell size or TLS record size
changes, so this should be rare.

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-02-22 19:28:34 +00:00
David Goulet 89f5eeefb8 hs: Decode flow-control line
This puts the flow control version (unparsed) in the descriptor. The
client doesn't use it yet.

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-02-22 19:28:34 +00:00
David Goulet 95639f35ae hs: Encode flow control value in the descriptor
This simply adds the "flow-control" line, as detailed in prop324, to the
descriptor. No decoding is done at this commit.

Part of #40506
2022-02-22 19:28:34 +00:00
David Goulet 02f4e7b42e cc: Export sendme_inc validation into public function
This is needed for client validation of server descriptor value,
before launching a rend/intro.
2022-02-22 19:28:34 +00:00
David Goulet bbf160d311 cc: Use trunnel extension for ntorv3 circ parameters
Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-02-22 19:28:34 +00:00
David Goulet b5439d6bd0 trunnel: Make hs/cell_common.trunnel generic
Move it to extension.trunnel instead so that extension ABI construction
can be used in other parts of tor than just HS cells.

Specifically, we'll use it in the ntorv3 data payload and make a
congestion control parameter extension using that binary structure.

Only rename. No code behavior changes.

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-02-22 19:28:34 +00:00
David Goulet dd938e58d3 protover: Add function to get the value of a single type
We can now query the protover subsystem to get the current value we
support for a specific protover type.

This will be useful for prop324 onion service part which puts in the
FlowCtrl value in the service descriptor.

No behavior change.

Signed-off-by: David Goulet <dgoulet@torproject.org>
2022-02-22 19:28:34 +00:00
Mike Perry 6b2086773c Add test for congestion control negotiation logic. 2022-02-22 19:28:34 +00:00
Mike Perry f3283266c2 Add test for TAP vs ntor2+ntor3 onion queue ordering 2022-02-22 19:28:34 +00:00
Mike Perry b2789ae72a Add hidden torrc option to always try CC negotiation.
This is for public network testing and for sbws. Should not otherwise be used,
hence it is an undocumented __option.

The option deliberately does not allow force-disabling congestion control, as
this is bad for queueing and fairness.
2022-02-22 19:28:34 +00:00
Mike Perry a0eeadfba2 Handle other places that use onion handshake type values
We want ntor and ntorv3 to use the same queues and stats.
2022-02-22 19:28:34 +00:00
Mike Perry 812590f8aa Extend info argument updates for non-ntorv3 cases 2022-02-22 19:28:34 +00:00
Mike Perry a07e008616 Congestion control usage of negotiated params 2022-02-22 19:28:34 +00:00
Mike Perry 1b1c261080 Protover flag handling for congestion control negotiation 2022-02-22 19:28:34 +00:00
Mike Perry 76bdadce12 Hook up client usage of congestion control negotiation 2022-02-22 19:28:34 +00:00
Mike Perry b6d5fbba7d Implement congestion control parameter negotiation 2022-02-22 19:28:34 +00:00
Mike Perry 095224cdfa Add circuit param payload definitions to trunnel 2022-02-22 19:28:33 +00:00
Nick Mathewson 93318ba5e2 Convert TODO into TODO-324 for better visibility. 2022-02-22 19:28:33 +00:00
Nick Mathewson 662b9c1c0d Add stub argument for constructing congestion_control_t 2022-02-22 19:28:33 +00:00
Nick Mathewson a511718a30 Negotiated circuit parameters must pass from worker. 2022-02-22 19:28:33 +00:00
Nick Mathewson baaabb503c Use protover to signal support for ntor3 + congestion control. 2022-02-22 19:28:33 +00:00
Nick Mathewson bd2e9a4409 Implement core of ntor3 negotiation.
There are a lot of TODOs about what to send, whom to send it to, and
etc.
2022-02-22 19:28:33 +00:00