| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Apparently clippy nightly is better (or worse?) about detecting
complex functions than before, so I'm suppressing these warnings
where they occur.
I have mixed feelings about these warnings: On the plus side,
they really do help to detect functions that are twistier than they
need to be. On the minus side, they get confused by tracing macros,
and the "allows" do pile up. But on the plus side, those "allows"
do provide a way to find functions that need to be refactored,
and they are never uglier than the functions they decorate.
|
| |
|
|
| |
(text from Gabi)
|
| | |
|
| |
|
|
| |
On !3007, @gabi-250 says that it was a mistake to have it be Naive.
|
| |
|
| |
Co-authored-by: gabi-250 <[email protected]>
|
| |
|
|
| |
Closes #1911.
|
| | |
|
| |
|
|
|
|
| |
This is the preferred type for choosing a relay,
since unlike a RelayExclusion, it lets us add multiple restrictions,
and a relay usage.
|
| |
|
|
|
|
| |
We'll need this in order to build paths that are specifically
for client rend circuits. I thought of using a boolean here,
but that had potential to get ugly in the future.
|
| |
|
|
|
|
| |
We're going to be looking at this a little more closely
in order to decide whether the last hop of a stem can be used
as a rendezvous point.
|
| |
|
|
|
| |
There are two other functions called "compatible_with_target"
that check a different property, so this one was confusing.
|
| |
|
|
|
|
| |
"Useless as xyz" implies that the relay wouldn't work at all as a
middle relay, but that's not true: it _would_ work somewhat, but be
can't use it for some other reason.
|
| |
|
|
| |
Prompted by https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/2996#note_3199590
|
| |
|
|
|
|
|
|
|
|
| |
The `ClientCirc` accessors will only return an error if the underlying
circuit is closed, so it doesn't make sense to map these errors to
`Bug`.
Prompted by https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/2996#note_3199072
and
https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/2996#note_3199073
|
| |
|
|
|
|
|
|
| |
This is messy, because `ClientCirc::{path_ref, n_hops, ..}` become
fallible (we can't unwrap the result, because when a circuit is closed,
its state gets removed from the `TunnelSharedState`, but its
`ClientCirc` handle continues to exist, so any attempt to retrieve the
state will result in an `Err`).
|
| |
|
|
|
| |
Now that our MSRV is 1.83, clippy is happy to make more
recommendations for us.
|
| |\
| |
| |
| |
| |
| |
| | |
tor-proto: New extend() and create_firsthop() to pick between ntor and ntor3
Closes #1970
See merge request tpo/core/arti!2967
|
| | | |
|
| | |
| |
| |
| |
| | |
We don't want to be thinking about ntor vs ntor3
in circmgr.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| | |
In the future, when we add more circuit handshakes (PQ anyone?)
we'll want to have the logic for choosing which to use be unified.
Almost nobody calling tor-proto should need to care which circuit
handshake is going to be used.
Closes #1970.
|
| |/
|
|
|
|
|
|
|
|
|
|
| |
Back in 4c1eb94173521bc5104449327650e20ffe32afa7, for sensible
reasons, we made `tor_circmgr::path` a crate-private module. But
when we did that, we lost the ability for callers to construct
circuits with custom paths.
This will make it possible for callers to build custom circuits
again, without committing to a very-long-term API for that.
Closes #1981.
|
| |
|
|
|
| |
This means that even with the "flowctl-cc" feature enabled, we shouldn't
try to negotiate congestion control.
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
| |
Circuit handshake negotiation for congestion control has been added in
previous commit so stop pinning the algorithm.
This commit marks the start of congestion control usage by arti client.
Closes #1817
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Congestion control can change the circuit parameters if the relay we are
negotiating with doesn't support FlowCtrl=2.
This commit adds a function in the circuit builder that will apply any
changes to the circuit parameters of the hop based on the hop protocol
values. For now, only congestion control applies.
Part of #1817
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
| |
This avoids cloning the object and instead allows us to have a
CircParameters per hop on the circuit path. This will come handy with
congestion control where each hop might have different congestion
control parameters.
Part of #1817
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
CircParameters is built before path selection and thus once we start
building the hops, we can't access the consensus values that were used
to build it in the first place.
For congestion control, we require a fallback algorithm in case the hop
doesn't support FlowCtrl=2.
This commit adds a "fallback_alg" to the CC parameters which will be
used for this exact case.
Part of #1817
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
|
| |
- [`once_cell::sync::OnceCell`] should be replaced by [`std::sync::OnceLock`]
once the blocking methods are stabilized and within our MSRV.
|
| | |
|
| |
|
|
| |
ntor v3 is now always enabled.
|
| | |
|
| |
|
|
|
|
|
| |
This commit adds an explicit type annotation to the learning_timeouts()
function, as leaving it out yielded an error while trying to compile
tor-circmgr in a project that had this crate deep down in its supply
chain.
|
| | |
|
| |\
| |
| |
| |
| |
| |
| | |
protover: Add support for subprotocol version mnemonics.
Closes #1891
See merge request tpo/core/arti!2854
|
| | | |
|
| |\ \
| | |
| | |
| | |
| | |
| | |
| | | |
Impose a maximum on our fallback estimated timeout
Closes #1693
See merge request tpo/core/arti!2842
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
The fallback timeout is the one that we use when we have
insufficient data. We reset our observations, and maybe rebuild
our circuits, when we find that too many circuits have failed
recently. When we do so, we double our fallback timeout.
Previously we had no limit, which could lead to overflow (#1693).
In this commit we impose a maximum of 2 hours,
which is ridiculously high.
(C tor uses a maximum of INT32_MAX seconds, which is even more
ridiculously high.)
Closes #1693.
|
| | | |
| | |
| | |
| | | |
- Several methods have been moved out of SliceRandom.
|
| | |/
|/|
| |
| | |
- `rand::thread_rng()` has been deprecated and renamed to `rand::rng()`
|
| |/
|
|
|
|
|
| |
MockSleepProvider and MockSleepRuntime have been declared deprecated
by the docs for some time. We're about to mark them `#[deprecated]`.
This commit has been split out for clarity of review.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
When we're trying to exclude relays by family,
we need to know which lists to look at.
This information ultimately comes from the network parameters.
We could avoid this change if we just told clients
"look at all family information all the time",
but that's not what the proposal says.
This is a breaking change.
|
| |
|
|
|
|
|
|
|
|
| |
Without circuit negotiation and flow control (XON/XOFF), the Vegas
algorithm can not be used.
Temporarily, this commit pins the algorithm to fixed window until we
have the above.
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
| |
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
|
|
| |
Both in tor-proto and tor-circmgr.
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
|
|
| |
Instead, return an error and make all call site handle it.
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Congestion control parameters have specific values depending on the
circuit type. Instead of using a CircuitType, which is removed in this
commit, specialize the function in this case onion and exit.
This allows us to get rid of CircuitType and solely use TargetCircUsage
instead.
At this commit, we use .expect() on the Builder. Future commit will
remove this to return a Result in case of failure. Worth noting that we
don't expect one.
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
|
|
|
| |
Important to enforce that every field is explicitely set so we avoid
forgetting fields.
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
| |
Signed-off-by: David Goulet <[email protected]>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
The congestion control parameters are created from the consensus
parameters (netparams) and then put into the CircParameters object that
is then passed down the tor-proto crate.
Because different parameters are selected depending on the circuit type
(onion vs exit vs sbws), a CircuitType enum is introduced for the sole
purpose of being used to select the right parameters.
Related #534
Signed-off-by: David Goulet <[email protected]>
|