summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2023-05-10hs: Priority queue for rendezvous requestsDavid Goulet
If PoW are enabled, use a priority queue by effort for the rendezvous requests hooked into the mainloop. Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-05-10hs: Move rendezvous circuit data structureDavid Goulet
When parsing an INTRODUCE2 cell, we extract data in order to launch the rendezvous circuit. This commit creates a data structure just for that data so it can be used by future commits for prop327 in order to copy that data over a priority queue instead of the whole intro data data structure which contains pointers that could dissapear. Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-05-10hs: Setup service side PoW defensesDavid Goulet
Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-05-10hs: Client now solve PoW if presentDavid Goulet
At this commit, the tor main loop solves it. We might consider moving this to the CPU pool at some point. Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-05-10hs: Descriptor support for PoWDavid Goulet
Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-05-10hs: Add solve and verify PoW functionsDavid Goulet
Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-05-10hs: Add data structure needed for PoWDavid Goulet
2023-05-10hs: PoW extension encodingDavid Goulet
Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-05-10trunnel: INTRODUCE1 PoW cell extensionDavid Goulet
Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-05-10ext: Add Equi-X libraryDavid Goulet
Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-05-04CID 1524707: Quiet coverity noiseMike Perry
2023-05-04CID 1524706: Remove dead assignmentMike Perry
2023-05-04Handle infinite loop with only one bridge (or snowflake).Mike Perry
2023-04-18Actually count exits with conflux support, rather than relays.Mike Perry
2023-04-06Fix cases where edge connections can stall.David Goulet
We discovered two cases where edge connections can stall during testing: 1. Due to final data sitting in the edge inbuf when it was resumed 2. Due to flag synchronization between the token bucket and XON/XOFF The first issue has always existed in C-Tor, but we were able to tickle it in scp testing. If the last data from the protocol is able to fit in the inbuf, but not large enough to send, if an XOFF or connection block comes in at exactly that point, when the edge connection resumes, there will be no data to read from the socket, but the inbuf can just sit there, never draining. We noticed the second issue along the way to finding the first. It seems wrong, but it didn't seem to affect anything in practice. These are extremely rare in normal operation, but with conflux, XON/XOFF activity is more common, so we hit these. Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-04-06Avoid closing dirty circs with active half-edgesMike Perry
In https://gitlab.torproject.org/tpo/core/tor/-/issues/40623, we changed the DESTROY propogation to ensure memory was freed quickly at relays. This was a good move, but it exacerbates the condition where a stream is closed on a circuit, and then it is immediately closed because it is dirty. This creates a race between the DESTROY and the last data sent on the stream. This race is visible in shadow, and does happen. This could be backported. A better solution to these kinds of problems is to create an ENDED cell, and not close any circuits until the ENDED comes back. But this will also require thinking, since this ENDED cell can also get lost, so some kind of timeout may be needed either way. The ENDED cell could just allow us to have much longer timeouts for this case.
2023-04-06Prop#329: Add conflux to buildDavid Goulet
Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-04-06Prop#329 Tests: Add tests for the conflux poolMike Perry
2023-04-06Prop#329 Pool: Handle pre-building and using conflux sets.David Goulet
Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-04-06Prop#329 Pool: Avoid sharing Guards and Middles between circuits.Mike Perry
Conflux must not use the same Guard for each leg; nor the same middle for each leg.
2023-04-06Prop#329 Pool: Handle linking, unlinking, and relaunching conflux circuit legs.David Goulet
Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-04-06Prop#329 streams: Handle stream usage with confluxMike Perry
This adds utility functions to help stream block decisions, as well as cpath layer_hint checks for stream cell acceptance, and syncing stream lists for conflux circuits. These functions are then called throughout the codebase to properly manage conflux streams.
2023-04-06Refactor stream blocking due to channel cell queuesMike Perry
Streams can get blocked on a circuit in two ways: 1. When the circuit package window is full 2. When the channel's cell queue is too high Conflux needs to decouple stream blocking from both of these conditions, because streams can continue on another circuit, even if the primary circuit is blocked for either of these cases. However, both conflux and congestion control need to know if the channel's cell queue hit the highwatermark and is still draining, because this condition is used by those components, independent of stream state. Therefore, this commit renames the 'streams_blocked_on_chan' variable to signify that it refers to the cell queue state, and also refactors the actual stream blocking bits out, so they can be handled separately if conflux is present.
2023-04-06Prop#329: Add purposes for conflux circuitsMike Perry
Because UNLINKED circuits must never be used for streams, but LINKED circuits can be, we want these separate.
2023-04-06Prop#329 sendme: Adjust sendme sending and tracking for confluxMike Perry
Because circuit-level sendmes are sent before relay data cells are processed, we can safely move this to before the conflux decision. In this way, regardless of conflux being negotiated, we still send sendmes as soon as data cells are recieved. This avoids introducing conflux queue delay into RTT measurement, which is important for measuring actual circuit capacity. The circuit-level tracking must happen inside the call to send a data cell, since that call now chooses a circuit to send on. Turns out, we were already doing this kind of here, but only for the digest. Now we do both things here.
2023-04-06Prop#329 OOM: Handle freeing conflux queues on OOMDavid Goulet
We use the oldest-circ-first method here, since that seems good for conflux: queues could briefly spike, but the bad case is if they are maliciously bloated to stick around for a long time. The tradeoff here is that it is possible to kill old circuits on a relay quickly, but that has always been the case with this algorithm choice. Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-04-06Prop#329 Algs: Conflux multiplexed cell sending decision algsMike Perry
2023-04-06Prop#329 Algs: Conflux multiplexed cell receive handlingMike Perry
2023-04-06Prop#329 Headers: Header files for confluxMike Perry
2023-04-06Prop#329 params: Consensus parameter and torrc handlingMike Perry
Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-04-06Prop#329 Tests: Add tests for conflux cells.David Goulet
Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-04-06Prop#329 Cells: Building and parsing parsing conflux commandsDavid Goulet
Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-04-06trunnel: Add Conflux related cell definitionDavid Goulet
Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-04-06protover: Support Relay=5 for Conflux (prop329)David Goulet
Closes #40721 Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-03-15Merge branch 'maint-0.4.7'David Goulet
2023-03-15gitignore: Add tags file from ctagsDavid Goulet
Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-03-13Merge branch 'tor-gitlab/mr/700'David Goulet
2023-03-13metrics: Add HS service side circuit build time metrics.Gabriela Moldovan
This adds 2 histogram metrics for hidden services: * `tor_hs_rend_circ_build_time` - the rendezvous circuit build time in milliseconds * `tor_hs_intro_circ_build_time` - the introduction circuit build time in milliseconds The text representation representation of the new metrics looks like this: ``` # HELP tor_hs_rend_circ_build_time The rendezvous circuit build time in milliseconds # TYPE tor_hs_rend_circ_build_time histogram tor_hs_rend_circ_build_time_bucket{onion="<elided>",le="1000.00"} 2 tor_hs_rend_circ_build_time_bucket{onion="<elided>",le="5000.00"} 10 tor_hs_rend_circ_build_time_bucket{onion="<elided>",le="10000.00"} 10 tor_hs_rend_circ_build_time_bucket{onion="<elided>",le="30000.00"} 10 tor_hs_rend_circ_build_time_bucket{onion="<elided>",le="60000.00"} 10 tor_hs_rend_circ_build_time_bucket{onion="<elided>",le="+Inf"} 10 tor_hs_rend_circ_build_time_sum{onion="<elided>"} 10824 tor_hs_rend_circ_build_time_count{onion="<elided>"} 10 # HELP tor_hs_intro_circ_build_time The introduction circuit build time in milliseconds # TYPE tor_hs_intro_circ_build_time histogram tor_hs_intro_circ_build_time_bucket{onion="<elided>",le="1000.00"} 0 tor_hs_intro_circ_build_time_bucket{onion="<elided>",le="5000.00"} 6 tor_hs_intro_circ_build_time_bucket{onion="<elided>",le="10000.00"} 6 tor_hs_intro_circ_build_time_bucket{onion="<elided>",le="30000.00"} 6 tor_hs_intro_circ_build_time_bucket{onion="<elided>",le="60000.00"} 6 tor_hs_intro_circ_build_time_bucket{onion="<elided>",le="+Inf"} 6 tor_hs_intro_circ_build_time_sum{onion="<elided>"} 9843 tor_hs_intro_circ_build_time_count{onion="<elided>"} 6 ``` Signed-off-by: Gabriela Moldovan <gabi@torproject.org>
2023-03-13metrics: Add support for histograms.Gabriela Moldovan
This will enable us to add e.g. circuit build metrics (#40717). Signed-off-by: Gabriela Moldovan <gabi@torproject.org>
2023-03-12Update 3 filesnonameformee
- /src/feature/dirauth/process_descs.c - /src/test/test_process_descs.c - /changes/ticket40760
2023-03-07Merge branch 'tor-gitlab/mr/697'David Goulet
2023-03-07metrics: Add a `reason` label to the HS error metrics.Gabriela Moldovan
This adds a `reason` label to the `hs_intro_rejected_intro_req_count` and `hs_rdv_error_count` metrics introduced in #40755. Metric look up and intialization is now more a bit more involved. This may be fine for now, but it will become unwieldy if/when we add more labels (and as such will need to be refactored). Also, in the future, we may want to introduce finer grained `reason` labels. For example, the `invalid_introduce2` label actually covers multiple types of errors that can happen during the processing of an INTRODUCE2 cell (such as cell parse errors, replays, decryption errors). Signed-off-by: Gabriela Moldovan <gabi@torproject.org>
2023-03-07Merge branch 'tor-gitlab/mr/696'David Goulet
2023-03-07Merge branch 'maint-0.4.7'David Goulet
2023-02-16scripts: Bye bye 0.4.5, you have reached end of lifeDavid Goulet
Signed-off-by: David Goulet <dgoulet@torproject.org>
2023-02-16metrics: Add metrics for rendezvous and introduction request failures.Gabriela Moldovan
This introduces a couple of new service side metrics: * `hs_intro_rejected_intro_req_count`, which counts the number of introduction requests rejected by the hidden service * `hs_rdv_error_count`, which counts the number of rendezvous errors as seen by the hidden service (this number includes the number of circuit establishment failures, failed retries, end-to-end circuit setup failures) Closes #40755. This partially addresses #40717. Signed-off-by: Gabriela Moldovan <gabi@torproject.org>
2023-02-16Reworded OpenSSL bug 7712 detection warning to avoid OpenSSL 1.1.1b ↵Richard Pospesel
detection false positive.
2023-02-13vote AuthDirMaxServersPerAddr in consensus paramsRoger Dingledine
Directory authorities now include their AuthDirMaxServersPerAddr config option in the consensus parameter section of their vote. Now external tools can better predict how they will behave. In particular, the value should make its way to the https://consensus-health.torproject.org/#consensusparams page. Once enough dir auths vote this param, they should also compute a consensus value for it in the consensus document. Nothing uses this consensus value yet, but we could imagine having dir auths consult it in the future. Implements ticket 40753.
2023-02-13Merge branch 'maint-0.4.7'David Goulet
2023-02-10metrics: Decrement hs_intro_established_count on intro circuit close.Gabriela Moldovan
Closes #40751. Signed-off-by: Gabriela Moldovan <gabi@torproject.org>