Commit Graph

3774 Commits

Author SHA1 Message Date
Ian Jackson ff228e5d9c channel padding: chanmgr: Clarify a comment
As per
  https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/586#note_2813574
2022-06-21 19:19:28 +01:00
Ian Jackson 65e6683b0b tor-proto: Have Channel::reconfigure throw ChannelClosed
Addresses
  https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/586#note_2813567
2022-06-21 19:19:28 +01:00
Ian Jackson 13ca24ba3a tor-proto: err: Provide ChannelClosed as a separate unit error 2022-06-21 19:19:28 +01:00
Ian Jackson 19c52ff8e4 channel padding: Use IntegerMilliseconds in netdir 2022-06-21 19:19:28 +01:00
Ian Jackson db71018021 tor-netdir: Make CHANNEL_PADDING_TIMEOUT_UPPER_BOUND pub
We need this because it is a type parameter for the types of nf_ito_*.
2022-06-21 19:19:28 +01:00
Ian Jackson 9779e5a2e2 channel padding: Use IntegerMilliseconds in padding::Parameters 2022-06-21 19:19:28 +01:00
Ian Jackson b1b840c7c6 tor-units: IntegerTimeUnit: Provide try_map
This lets a caller map the inner value, eg to convert the type.
I don't provide `map` as well as `try_map` now, since I don't need it;
we could add it later if it is desirable (although try_map can always
be used instead).

I was hoping to provide a `TryFrom` instead, but that necesasrily
overlaps with the std conversion impl from IntegerMilliseconds<T> to
IntegerMilliseconds<U> where T == U.
2022-06-21 19:19:22 +01:00
Ian Jackson 0ea34e3280 tor-units: IntegerTimeUnit: Relax condition on T
It is semantically quite meaningful for these to contain something
that isn't `TryInto<u64>`.  (Of course the `Duration` conversion won't
work without that.)

Indeed, this condition was only applied to two out of the three types.

Prompted by being near this code, but not actually necessary for
anything I'm doing here.
2022-06-21 19:19:22 +01:00
Ian Jackson ec756c79e7 tor-units: IntegerTimeUnit: Provide as_time_unit deconstructor
We're going to need this to use this in the padding timer parameters.
2022-06-21 19:19:22 +01:00
Ian Jackson db4e5aba97 channel padding parameters update: Drop a redundant clone 2022-06-21 19:19:22 +01:00
Ian Jackson a5aaa56c3c channel padding: Change timeout to match C Tor
Pending an official value from the spec.
2022-06-21 19:19:22 +01:00
Ian Jackson 2d97ab3677 Fix docs for `CtrlMsg::ConfigUpdate`
Prompted by
  https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/586#note_2813565
2022-06-21 19:19:22 +01:00
eta 54c7070b30 Fix typos 2022-06-21 19:19:22 +01:00
Ian Jackson d2b783641d channel padding: Test timeout updates 2022-06-21 19:19:22 +01:00
Ian Jackson e0040701d0 tor-chanmgr tests: Add config_update tracking to FakeChannel 2022-06-21 19:19:22 +01:00
Ian Jackson 6e07401e6b channel padding: Honour NetDir for timeouts
But padding is still not enabled by default.
2022-06-21 19:19:22 +01:00
Ian Jackson e53555f418 channel padding: Add the parameters from the spec to NetDir 2022-06-21 19:19:22 +01:00
Ian Jackson 7f3f426738 channel padding: Plumb settings from chanmgr 2022-06-21 19:19:22 +01:00
Ian Jackson b5218a0c0e channel padding: Introduce ChannelsConfig and reconfigure facility
Nothing geenrates config updates yet.
2022-06-21 19:19:22 +01:00
Ian Jackson 33ef338fe2 chanmgr: inner (map): Reorganise to prepare for having more state
The main copy of the (global) configuration for the client's channels
is going to have to live here, inside this mutex.  So this really
needs to become a struct with names fields.
2022-06-21 19:19:22 +01:00
Ian Jackson 09b40d7d81 channel padding timer: Support reconfiguration
Nothing calls this yet.
2022-06-21 19:19:22 +01:00
Ian Jackson e5f3215b95 channel padding timer: Allow creation without providing parameters yet
It turns out that we are going to want this.
2022-06-21 19:19:22 +01:00
Ian Jackson f9414a29b2 channel padding: Test creation in disabled state
We're about to split the main new() function off so write a separate
test for new_disabled().
2022-06-21 19:19:22 +01:00
Ian Jackson 7135b7c4c7 channel padding: Make Parameters a pub struct with builder
chanmgr is going to want to make one of these from a NetDir.
2022-06-21 19:19:22 +01:00
Ian Jackson db4ea619f5 tor-chanmgr: tests: Have unwrap_open return a (mut) reference
This avoids confusing bugs where you try to modify the result and
nothing happens!
2022-06-21 19:19:22 +01:00
Nick Mathewson d95f597323 Run cargo update in preparation for release on Friday 2022-06-21 08:54:12 -04:00
eta 073b64b155 Merge branch 'main' into 'main'
Updated the warning message providing additional information about the type of the proxy port.

See merge request tpo/core/arti!596
2022-06-21 12:47:46 +00:00
0x4ndy 3175d96236 Updated the warning message providing additional information about the type of the proxy port. 2022-06-21 12:47:46 +00:00
Ian Jackson a3d8a425c4 Merge branch 'ring_out_the_old' into 'main'
Enforce no-ring-in-arti/full (and make it true)

See merge request tpo/core/arti!592
2022-06-17 13:42:38 +00:00
Nick Mathewson 9ae57e8bc4 Merge branch 'reachable_addrs_v2' into 'main'
Implement support for reachable_addrs

Closes #491 and #93

See merge request tpo/core/arti!583
2022-06-17 13:16:16 +00:00
Nick Mathewson f4c9b9cc1e Rename guardset-selection function.
Also, improve its documentation.
2022-06-17 08:47:57 -04:00
Nick Mathewson 03568cd4a5 Rename pick_guard, pick_guard_ext.
Now the primary exposed function is `pick_guard` again.

This commit is just function renaming.
2022-06-17 08:47:57 -04:00
Nick Mathewson 1be44891c9 Refactor and document issues with modify_hop.
At the site of modify_hop, we now have a comment explaining the
internal-error issue.

To make the internal error less likely, we lower the modify_hop call
in lib.rs into GuardSet, where it can make sure it's looking at the
same filter as was used to select the guard.

The function name "pick_guard_ext" is not permanent; I'm going to
rename it in the next commit.
2022-06-17 08:47:57 -04:00
Nick Mathewson 96dfa97473 API-fix for extend_sample_as_needed.
Previously, the API said "you need to call this in a loop till it
returns false".  We did that in one place, but not another.

With the introduction of filters, forgetting to loop here becomes a
bug: so instead, change the behavior of extend_sample_as_needed so
it handles looping itself.
2022-06-17 08:47:57 -04:00
Nick Mathewson a92dfa0b2a Remove some outdated comments.
These all say, in one form or another, "there is no guard filtering;
there is only one selection".  That's now false.
2022-06-17 08:47:57 -04:00
Nick Mathewson 89f9e1decb Tweak parameters in guardmgr tests to improve testnet behavior.
The fake network we construct for these tests is small in ways that
can sometimes cause weird behavior with guard filters.  We fix this
by adjusting the parameters of the guard selection algorithm
accordingly in the tests.

With these new parameters, #491 no longer occurs.

This commit also adds comments to explain why the parameters are set
as they are.

Closes #491.
2022-06-17 08:47:57 -04:00
Nick Mathewson 34e8e208cc CircMgr: Enable reachable_addrs filter. 2022-06-17 08:47:57 -04:00
Nick Mathewson 1c5f540dc8 Add a configuration option for reachable_addrs
(This doesn't do anything yet.)
2022-06-17 08:47:57 -04:00
Nick Mathewson fb672dc688 NetDoc: Make AddrPortPattern implement serde traits
I'm using serde_with here to just re-use the Display and FromStr
implementations, since those are what has proven easier to type in
the past.
2022-06-17 08:47:57 -04:00
Nick Mathewson 48a86506be GuardMgr: Support for multiple guard sets
guard-spec.txt specifies that we have multiple separate samples of
guards that we can use depending on whether the filter is
restrictive or not.  Here we implement the rules for switching
between samples.
2022-06-17 08:47:57 -04:00
Nick Mathewson e098a5a303 Move set_filter into GuardMgrInner.
Convert its argument type to Option<&NetDir> to better match the
rest of the API.
2022-06-17 08:47:57 -04:00
Nick Mathewson a720f4f667 GuardMgr: Function to tell how permissive a filter is.
When we're filtering guards, we have to check whether the filter is
"restrictive": if it forbids most of the guards (by bandwidth), we
keep its guards separated from the main set.  If it is
super-restrictive, we also warn.

This functionality is specified in guard-spec.txt.
2022-06-17 08:47:57 -04:00
Nick Mathewson 19fa946fc7 Make AddrPortPattern and friends implement Eq and PartialEq 2022-06-17 08:46:16 -04:00
Nick Mathewson e3c2a86195 GuardMgr: Also apply filters to fallback directories. 2022-06-17 08:46:16 -04:00
Nick Mathewson a189aaf1fb GuardMgr: remove disallowed addresses from returned FirstHops.
Since a guard can have a bunch of addresses, and the guard is
permitted if any one of those addresses is permitted, then we might
decide to use a guard with some non-permitted addresses.  Thus, we
need to filter those addresses before returning the view of the
guard as a FirstHop.
2022-06-17 08:46:16 -04:00
Nick Mathewson 23218fe037 GuardMgr: Remove old testing filter variant.
We don't need to restrict based on bits in the key id any longer,
since we have a real filter.
2022-06-17 08:46:16 -04:00
Nick Mathewson 9c4f31edc1 GuardMgr: Add a new filter type based on reachable addresses. 2022-06-17 08:46:16 -04:00
Nick Mathewson 801b6bec5f Guardmgr: Change the GuardFilter API.
The guard filter is now a set of restrictions that can be placed on
allowable guards.
2022-06-17 08:46:16 -04:00
Nick Mathewson bf15abbb97 Avoid matching crate names by prefix. 2022-06-17 08:41:38 -04:00
Nick Mathewson 5509bd0269 Merge branch 'config-fix2' into 'main'
Use impl_standard_builder more and remove manual Default/builder impls

See merge request tpo/core/arti!594
2022-06-16 20:30:34 +00:00