aboutsummaryrefslogtreecommitdiff
path: root/crates/tor-circmgr
Commit message (Collapse)AuthorAgeFilesLines
...
* | Change an XXX in pareto.rs: a ticket is now open.Nick Mathewson2021-12-081-2/+3
| |
* | Resolve an XXXX: timeout scaling _is_ documentedNick Mathewson2021-12-081-1/+2
|/
* Clarify names and docs for predictive circuits.Nick Mathewson2021-12-072-20/+30
| | | | | Also, use humantime_serde, rather than a number of seconds, to indicate configuration time.
* Rename circuits_preemptive to preemptive_circuitsNick Mathewson2021-12-072-18/+18
| | | | | | This obeys a few conventions: * adjective before noun * config objects end with "config"
* Merge branch 'bug183a_redux' into 'main'eta2021-12-071-6/+5
|\ | | | | | | | | | | | | Squash, refactor, and test !139 (Don't use same family as exit when picking a guard) Closes #183 See merge request tpo/core/arti!173
| * Move the "real families" code into tor-netdir.Nick Mathewson2021-12-061-15/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Just as `in_same_family` is a member of Relay, so the function for getting all the real family members of a relay should belong in the same crate. This change also removes the `family()` accessor: it gives the _claimed_ family rather than the _acknlowedged_ family, and is therefore a bit dangerous. There's still a hole in this logic; I've noted it in the Limitations section. If we get a microdescriptor for a relay in between creating and using the guard restriction, it might be omitted from the family list.
| * Use hashset _inside_ GuardRestriction.Nick Mathewson2021-12-061-6/+4
| | | | | | | | This approach saves us from a linear search when picking guards.
| * Change GuardUsage to have Vec of restrictions.Nick Mathewson2021-12-061-5/+4
| | | | | | | | | | | | | | | | There's not much reason to use a HashSet here, since we're just going over the whole list. This reverts commit 16e8489abbea1581b8e2 and does a little more refactoring.
| * Implement guard family restriction codeNeel Chauhan2021-12-061-4/+16
| |
* | Merge branch 'safe_mul_dur_f64' into 'main'eta2021-12-074-8/+67
|\ \ | | | | | | | | | | | | Use a panic-free function to multiply timeouts. See merge request tpo/core/arti!175
| * | Use a panic-free function to multiply timeouts.Nick Mathewson2021-12-064-8/+67
| | | | | | | | | | | | | | | | | | | | | | | | | | | Previously we used Duration::mul_f64, which panics if its output is out-of-range. That shouldn't actually be possible for the values we're giving it, but probably it's better to just multiply in a safe way. This resolves a couple of XXXXs and therefore relates to #231.
* | | Merge branch 'preemptive-config' into 'main'eta2021-12-075-39/+162
|\ \ \ | |/ / |/| | | | | | | | | | | | | | Allow configurability on preemptive circuits Closes #245 See merge request tpo/core/arti!164
| * | Allow configurability on preemptive circuitsNeel Chauhan2021-12-075-39/+162
| |/
* / Resolve roughly half of the XXXXs.Nick Mathewson2021-12-062-5/+2
|/ | | | | | | | We want to only use TODO in the codebase for non-blockers, and open tickets for anything that is a bigger blocker than a TODO. These XXXXs seem like definite non-blockers to me. Part of arti#231.
* Add a semicolon.Nick Mathewson2021-11-301-1/+1
|
* Merge remote-tracking branch 'origin/mr/154'Nick Mathewson2021-11-304-31/+450
|\
| * Add tests & address review commentaryeta2021-11-304-34/+269
| |
| * Actually build preemptive circuits (and minor fixes)eta2021-11-293-0/+43
| | | | | | | | | | | | The new CircMgr::build_circuits_preemptively function actually causes preemptive circuits to be built; it gets called from arti-client, like the other daemon tasks the CircMgr has.
| * Introduce PreemptiveCircuitPredictor and TargetCircUsage::Preemptiveeta2021-11-234-26/+167
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In preparation for making Arti build circuits preemptively, this commit introduces `TargetCircUsage::Preemptive`, a circuit usage that works somewhat differently from other ones: it requires at least 2 circuits to exist that can exit the port it contains in order for an existing circuit to match against it (path-spec.txt § 2.1.1); if that's not the case, that usage will require building new circuits (in order that we build enough to have 2 available). This required refactoring how circuit reuse worked; now, `CircList::find_open` uses the new `AbstractSpec::find_supported` trait method, which we customize to implement the above check in the case of `Preemptive` circuit usages. To make that work, `OpenEntry` now takes two type parameters (the spec and circuit types), instead of taking a builder type parameter and using its associated types. (We also got rid of type constraints on that struct, yay!) A WIP implementation of a preemptive circuit predictor that implements path-spec.txt § 2.1.1 is also included, but this will require additional effort to wire it up with the `CircMgr` properly.
* | Bump every crate by one patch version.Nick Mathewson2021-11-291-17/+17
| |
* | Merge branch 'config-updates-and-tests'Nick Mathewson2021-11-291-0/+2
|\ \
| * | Ensure that all config sections have deny_unknown_fieldsNick Mathewson2021-11-251-0/+2
| | | | | | | | | | | | | | | When we deserialize a configuration, we should reject unknown variables (except when we have an explicit reason to allow them).
* | | Merge remote-tracking branch 'origin/mr/148'Nick Mathewson2021-11-291-10/+2
|\ \ \
| * | | In struct PendingEntry, remove circ_specNeel Chauhan2021-11-281-10/+2
| |/ /
* | | tor-circmgr: Write a test for BadExit support.Neel Chauhan2021-11-291-6/+20
| | |
* | | add semicolons if nothing returnedDaniel Eades2021-11-258-11/+12
| | |
* | | deglob some enums, use concise iteration syntaxDaniel Eades2021-11-251-1/+1
|/ /
* / Fix a few typos.Nick Mathewson2021-11-244-7/+7
|/ | | | Also fix some commonwealth spellings that had slipped in.
* Implement meta-builder pattern for TorClientConfigNick Mathewson2021-11-221-1/+1
| | | | | This should be ergonomic than having to construct every section of the configuration separately.
* Make every Config type implement Eq.Nick Mathewson2021-11-211-3/+3
| | | | | Doing this is necessary for reconfiguration support, and will help a lot with testing, too.
* For every* config type, make defaults consistent.Nick Mathewson2021-11-211-7/+28
| | | | | | | | | | This patch makes sure that for every* config type we have, the defaults you get from a Builder match those you get from Serde, and that both match the value that you get from arti_defaults.toml. Later down the line I'll be adding some tests to keep these in sync. * StorageConfig still has no defaults of its own, since we aren't so sure we want other applications to use Arti's directories by default.
* Give every ConfigBuilder a From<Config> implementation.Nick Mathewson2021-11-211-0/+22
| | | | This will make it more convenient to reconfigure things.
* Ensure that every section-level config type has a builder() function.Nick Mathewson2021-11-211-0/+18
|
* Flatten enforce_distance into path_rules.Nick Mathewson2021-11-183-16/+54
| | | | Also use the path_rules name consistently throughout the code.
* Fold "circuit_timing" and "request_timing" into a single section.Nick Mathewson2021-11-183-76/+29
|
* Move top-level configuration downwards from `arti` to `arti-config`.Nick Mathewson2021-11-182-4/+7
| | | | | | | | To do this at all neatly, I had to split out `tor-config` from `arti-config` again, and putting the lower level stuff (paths, builder errors) into tor-config. I also changed our use of derive_builder to always use a common error type, to avoid error type proliferation.
* Completely overhaul the tor-proto circuit reactoreta2021-11-121-4/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Rather like e8e9699c3c239d6c30f9ad414f15d3bad6ec03fd ("Get rid of tor-proto's ChannelImpl, and use the reactor more instead"), this admittedly rather large commit refactors the way circuits in `tor-proto` work, centralising all of the logic in one large nonblocking reactor which other things send messages into and out of, instead of having a bunch of `-Impl` types that are protected by mutexes. Congestion control becomes a lot simpler with this refactor, since the reactor can manage both stream- and circuit-level congestion control unilaterally without having to share this information with consumers, meaning we can get rid of some locks. The way streams work also changes, in order to facilitate better handling of backpressure / fairness between streams: each stream now has a set of channels to send and receive messages over, instead of sending relay cells directly onto the channel (now, the reactor pulls messages off each stream in each map, and tries to avoid doing so if it won't be able to forward them yet). Additionally, a lot of "close this circuit / stream" messages aren't required any more, since that state is simply indicated by one end of a channel going away. This should make cleanup a lot less brittle. Getting all of this to work involved writing a fair deal of intricate nonblocking code in Reactor::run_once that tries very hard to be mindful of making backpressure work correctly (and congestion control); the old code could get away with having tasks .await on things, but the new reactor can't really do this (as it'd lock the reactor up), so has to do everything in a nonblocking manner.
* Fix typosDimitris Apostolou2021-11-121-1/+1
|
* Document that the "experimental-api" feature is not semver-covered.Nick Mathewson2021-11-111-0/+4
|
* Add a couple of pieces of missing documentation.Nick Mathewson2021-11-081-1/+1
|
* Replace all println/eprintln calls outside of arti CLI with trace.Nick Mathewson2021-11-042-4/+6
|
* Remove all remaining dbg! instances.Nick Mathewson2021-11-041-5/+0
|
* Basic tests for readonly estimators, and estimator migration.Nick Mathewson2021-11-032-2/+92
| | | | | Also add a comment about a possible problem behavior in read-only estimators.
* Get rid of tor-proto's ChannelImpl, and use the reactor more insteadeta2021-11-031-2/+4
| | | | | | | | | | | | | | | | | | | Instead of awkwardly sharing the internals of a `tor-proto` `Channel` between the reactor task and any other tasks, move most of the internals into the reactor and have other tasks communicate with the reactor via message-passing to allocate circuits and send cells. This makes a lot of things simple, and has convenient properties like not needing to wrap the `Channel` in an `Arc` (though some places in the code still do this for now). A lot of test code required tweaking in order to deal with the refactor; in fact, fixing the tests probably took longer than writing the mainline code (!). Importantly, we now use `tokio`'s `tokio::test` annotation instead of `async_test`, so that we can run things in the background (which is required to have reactors running for the circuit tests). This is an instance of #205, and also kind of #217.
* Disable a check in exitpathNick Mathewson2021-11-021-1/+2
| | | | | This check relies on families being enforced correctly, which is not the case when specifying a fixed exit and using guards. (See #183)
* Allow clone-on-copy in tor-circmgr tests to fix a nightly-only clippy warning.Nick Mathewson2021-11-022-0/+2
|
* tor-circmgr: test ExitPathBuilder with guards.Nick Mathewson2021-11-022-0/+104
|
* tor-circmgr: test DirPathBuilder with GuardMgr.Nick Mathewson2021-11-022-0/+41
|
* tor-circmgr: testing for NoUsage and TimeoutTesting usageNick Mathewson2021-11-021-0/+24
| | | | This doesn't add much to coverage, but it's important.
* tor-circmgr: tests for netwoks with no exitsNick Mathewson2021-11-022-25/+76
|