aboutsummaryrefslogtreecommitdiff
path: root/crates/tor-circmgr
Commit message (Collapse)AuthorAgeFilesLines
...
* Only count timeouts when we've seen net activity.Nick Mathewson2021-12-201-5/+7
| | | | | | | This closes arti#256. It makes our behavior match Tor's more closely, though it has a simpler implementation than Tor. I think that the extra complexity in Tor's logic is because we used to record timeouts in the histogram as well as in the success/failure log.
* Merge branch 'eta/instant-checked-add' into 'main'Nick Mathewson2021-12-201-2/+12
|\ | | | | | | | | preemptive.rs: Use Instant::checked_add instead of raw subtraction See merge request tpo/core/arti!206
| * preemptive.rs: Use Instant::checked_add instead of raw subtractioneta2021-12-201-2/+12
| | | | | | | | | | | | | | | | | | | | | | The implementations of `Add` / `Sub` (et al.) on `std::time::Instant` can panic if the underlying OS structure can't represent the result (like arti#266). Use Instant::checked_add and print a warning instead, to prevent panicking. Also, we now add instead of subtracting; I suspect it's reasonable that you might not be able to go backward past the first `Instant` created on some platforms, but going *forward* should probably work?
* | Remove XXXs from tor-circmgr::mgrNick Mathewson2021-12-201-4/+0
| | | | | | | | | | | | IIUC, these anticipatd a need to store min_exit_circs_per_port in CircMgr. But the current design, where it goes into preemptive.rs and thence to usage, seems to work fine.
* | Adjust comment to be accurate wrt #263.Nick Mathewson2021-12-161-3/+5
| |
* | Do not treat spawn failure as a fatal error.Nick Mathewson2021-12-151-12/+12
| |
* | Expand some comments about circuit expiration.Nick Mathewson2021-12-152-6/+14
| | | | | | | | | | Emphasize that circuit expiration functions _decide whether to expire the circuit_, and don't expire it automatically.
* | Add spawn_expiration_task function in circuit managerYuan Lyu2021-12-152-54/+105
|/
* Merge branch 'reconfigure' into 'main'eta2021-12-137-69/+233
|\ | | | | | | | | Make most arti-client fields reconfigurable. See merge request tpo/core/arti!181
| * Fix Rustdoc errors.Nick Mathewson2021-12-081-3/+3
| |
| * Minor circuit predictor tweaks and comments.Nick Mathewson2021-12-071-3/+11
| | | | | | | | | | | | Most notably, make min_exit_circs_for_port actually get used. Also add a couple of comments.
| * Make preemptive circuits reconfigurable.Nick Mathewson2021-12-073-43/+79
| | | | | | | | | | | | This required re-centralizing the configuration object for preemptive circuits, since previously the settings from it were a bit spread out over the crate.
| * Make circuit_timing reconfigurable.Nick Mathewson2021-12-073-18/+26
| |
| * Add new configuration objects to reconfigure.Nick Mathewson2021-12-071-5/+9
| | | | | | | | | | (These weren't in the codebase when I started the first version of this branch.)
| * Allow on-the-fly changing of path_rulesNick Mathewson2021-12-076-18/+100
| | | | | | | | | | | | | | | | | | | | | | | | And now the complexity begins: when the user changes the path_rules, they not only want new circuits to obey those rules: they want _all new requests_ to be put onto circuits that obey those rules. That means that when the path rules become more restrictive, we need to retire all the circuits, and make sure that currently pending circuits aren't used for any requests. If it's any comfort, doing this was even more complicated in C tor. ;)
| * Sketch API for reconfiguration.Nick Mathewson2021-12-073-5/+31
| | | | | | | | | | | | | | This patch doesn't actually make anything reconfigurable, but it does create an API that will tell you "you can't change the value of that!" If the API looks reasonable, I can start making it possible to change the values of individual items.
* | Don't create circuits if the consensus is stale by over 72 hoursNeel Chauhan2021-12-122-0/+11
| |
* | fix nightly clippy errorsTrinity Pointard2021-12-091-2/+1
| |
* | Use a safer histogram rebuild algorithm.Nick Mathewson2021-12-081-9/+14
| | | | | | | | | | Our old algorithm could, on some inputs, exhaust RAM. That's not great, since we try to be robust againt corruption to the state file.
* | 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.