summaryrefslogtreecommitdiff
path: root/doc
Commit message (Collapse)AuthorAgeFilesLines
...
* fallback list: Introduce and use FallbackListBuilderIan Jackson2022-04-221-0/+4
| | | | | | | | | Now the network fallbacks configuration wants to Deserialize a Vec<FallbackDirBuilder>, rather than validated Vec<FallbackDir>. Methods on FallbackListBuilder are as per https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/462#note_2797697 mutatis mutandi for the fact that this struct has only fallbacks in it.
* Fix wording in FAQSamanta Navarro2022-04-201-2/+2
|
* Fix typosSamanta Navarro2022-04-201-1/+1
| | | | Typos found with codespell.
* circmgr: Remove now-unused scheduled entry points.Nick Mathewson2022-04-121-0/+1
| | | | | Now that we have TaskSchedule, we don't need to expose these any longer.
* Implement a better clock skew estimator.Nick Mathewson2022-04-111-0/+6
| | | | | | | | This time, our estimator discards outliers, takes the mean of what's left, and uses the standard deviation to try to figure out how seriously to take our report of skew/not-skew. These estimates are still not actually used.
* ChanMgr: Return provenance information from get_or_launchNick Mathewson2022-04-071-0/+1
| | | | | | We need this since we want to report certain conditions only when they happen on a new channel, not if we observe them on a preexisting channel.
* chanmgr: bubble ClockSkew up through the Error object.Nick Mathewson2022-04-071-0/+5
| | | | | | | | Fortunately, we don't need a separate type here: authenticated clock skew can only come attached to a `tor_proto::Error`. We also remove skew from `tor_proto::Error::HandshakeCertsExpired`, since it would now be redundant.
* Channel: Expose our view of whether the clock is skewed, and the ageNick Mathewson2022-04-071-0/+4
| | | | | | | | of a channel. At first I wanted to have this information not be a part of channels at all, but it is a fairly tiny amount of data, and the alternatives are pretty crufty.
* Merge branch 'main' into 'separate_dir_status'Nick Mathewson2022-04-061-2/+6
|\ | | | | | | # Conflicts: # doc/semver_status.md
| * Merge branch 'main' into 'retriable'Nick Mathewson2022-04-051-0/+8
| |\ | | | | | | | | | # Conflicts: # doc/semver_status.md
| * | circmgr: Avoid a race condition in circuit usage restrictionNick Mathewson2022-04-041-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We were treating restrict_mut() failures as internal errors, and using internal errors to represent them. But in fact, these failures are entirely possible based on timing. Here's how it happens: * Two different circuit requests arrive at the same time, and both notice a pending circuit that they could use. * The pending circuit completes; both pending requests are notified. * The first request calls restrict_mut(), and restricts the request in such a way that the second couldn't use it. * The second request calls restrict_mut(), and gets a failure. Because of this issue, we treat these errors as transient failures and just wait for another circuit. Closes #427. (This is not a breaking API change, since `AbstractSpec` is a crate-private trait.)
* | | Add RetrySchedule::reset()Nick Mathewson2022-04-041-1/+4
| |/ |/| | | | | | | | | | | | | | | | | | | Previously the code would do stuff like ``` schedule = RetrySchedule::new(INITIAL_DELAY); ``` which is needlessly verbose, since the schedule already keeps track of its initial delay.
* | rtmock: add the ability to make a connection time out.Nick Mathewson2022-04-021-0/+5
| |
* | socksproto: remove some unused accessors.Nick Mathewson2022-04-021-0/+3
|/
* Clean out semver_status.mdNick Mathewson2022-04-011-98/+1
|
* Implement Ord for Ed25519Identity.Nick Mathewson2022-03-301-0/+1
|
* Update semver_status from recent round of movement.Nick Mathewson2022-03-301-0/+4
|
* Move fallback.rs into guardmgr.Nick Mathewson2022-03-301-0/+8
| | | | | | | This is the logical place for it, I think: the GuardMgr's job is to pick the first hop for a circuit depending on remembered status for possible first hops. Making this change will let us streamline the code that interacts with these objects.
* Make daemon tasks self-contained; introduce NetDirProvidereta2022-03-301-0/+1
| | | | | | | | | | | | | | | The various background daemon tasks that `arti-client` used to spawn are now handled inside their respective crates instead, with functions provided to spawn them that return `TaskHandle`s. This required introducing a new trait, `NetDirProvider`, which steals some functionality from the `DirProvider` trait to enable `tor-circmgr` to depend on it (`tor-circmgr` is a dependency of `tor-dirmgr`, so it can't depend on `DirProvider` directly). While we're at it, we also make some of the tasks wait for events from the `NetDirProvider` instead of sleeping, slightly increasing efficiency.
* Merge branch 'netinfo-clock-skew' into 'main'Nick Mathewson2022-03-231-0/+11
|\ | | | | | | | | tor-proto: add the ability to learn clock skew from NETINFO cells See merge request tpo/core/arti!410
| * tor-proto: better errors when handshake fails due to untimely certsNick Mathewson2022-03-231-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We now check the handshake certificates unconditionally, and only report them as _expired_ as a last resort. (Rationale: if somebody is presenting the wrong identity from a year ago, it is more interesting that they are presenting the wrong ID than it is that they are doing so with an expired cert. We also now report a different error if the certificate is expired, but its expiration is within the range of reported clock skew. (Rationale: it's helpful to distinguish this case, so that we can blame the failure on possible clock skew rather than definitely attributing it to a misbehaving relay.) Part of #405.
| * tor-proto: add a backend to detect reported clock skew.Nick Mathewson2022-03-231-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | NETINFO cells, which are sent in every handshake, may contain timestamps. This patch adds an accessor for the timestamp in the Netinfo messages, and teaches the tor-proto code how to compute the minimum clock skew in the code. The computation isn't terribly precise, but it doesn't need to be: Tor should work fine if your clock is accurate to within a few hours. This patch also notes a Y2038 problem in the protocol: see torspec#80. Part of #405.
* | dirclient: Collect and expose peer information from errors.Nick Mathewson2022-03-211-0/+3
| | | | | | | | | | | | | | | | | | | | This commit refactors the dirclient error type into two cases: errors when constructing a circuit, and errors that occur once we already have a one-hop circuit. The latter can usually be attributed to the specific cache we're talking to. This commit also adds a function to expose the information about which directory gave us the info.
* | Expose more peer information from circuit build failuresNick Mathewson2022-03-211-0/+2
| | | | | | | | | | | | | | | | | | We already have the ability to get peer information from ChanMgr errors, and therefore from any RetryErrors that contain ChanMgr errors. This commit adds optional peer information to tor-proto errors, and a function to expose whatever peer information is available.
* | circmgr: Change API for using FallbackDirsNick Mathewson2022-03-211-0/+5
| | | | | | | | | | | | It'll soon more convenient to pass in FallbackDirs as a slice of references, rather than just a slice of FallbackDirs: I'm going to be changing how we handle these in tor-dirmgr.
* | Add semver noteIan Jackson2022-03-181-0/+1
| |
* | Define accessors for circuit hops.Nick Mathewson2022-03-171-0/+3
| | | | | | | | Closes #415
* | Update semver_status.md for isolation changesNick Mathewson2022-03-171-0/+4
| |
* | semver notes.Ian Jackson2022-03-161-0/+6
|/
* add integration test and fill semver_statustrinity-1686a2022-03-141-1/+5
|
* Merge branch 'testing-docs' into 'main'Nick Mathewson2022-03-142-0/+344
|\ | | | | | | | | New documents to checkpoint my work on #329 and #87 See merge request tpo/core/arti!407
| * Apply 1 suggestion(s) to 1 file(s)eta2022-03-141-1/+1
| |
| * New documents to checkpoint my work on #329 and #87Nick Mathewson2022-03-142-0/+344
| | | | | | | | | | | | | | | | | | These documents explain how to profile arti for CPU and memory, and how to simulate different kinds of breakage and misconfiguration. They aren't at all in their final form, but I figure it's useful to check them in so that more people can look at them, and make suggestions.
* | Merge branch 'main' into 'intern-more'Nick Mathewson2022-03-141-0/+3
|\| | | | | | | # Conflicts: # doc/semver_status.md
| * humantime_serde_option: Add note about semverIan Jackson2022-03-141-1/+5
| |
* | Canonicalize and intern protover lines on descriptorsNick Mathewson2022-03-111-3/+6
|/ | | | | | | | This should save around 1MB per consensus, since every relay has a 'protocols' lines, but there are only a few distinct possibilities for such a line. Closes #385.
* Merge branch 'arti-lib' into 'main'Ian Jackson2022-03-111-0/+4
|\ | | | | | | | | arti: Move all code from binary crate to library crate See merge request tpo/core/arti!403
| * Add note about semver.Ian Jackson2022-03-111-0/+4
| |
* | Merge branch 'smaller_routerstatus' into 'main'Nick Mathewson2022-03-111-0/+2
|\ \ | |/ |/| | | | | | | | | tor-netdoc: Save allocation space in GenericRouterstatus Closes #387 See merge request tpo/core/arti!400
| * Add a missing newline.Nick Mathewson2022-03-111-1/+1
| |
| * netdoc: Make versions smaller in GenericRouterStatusNick Mathewson2022-03-111-0/+2
| | | | | | | | | | | | When the version is a Tor version, we can just parse it; otherwise, we can intern it. This shrinks GenericRouterStatus and avoids a lot of extra help allocations.
* | Merge branch 'config-flatten' into 'main'Ian Jackson2022-03-111-0/+5
|\ \ | |/ |/| | | | | Make ArtiConfigBuilder contain a TorClientConfigBuilder See merge request tpo/core/arti!401
| * config work: Add semver note.Ian Jackson2022-03-111-0/+5
| |
* | Follow-up from arti!318Nick Mathewson2022-03-111-0/+9
|/ | | | Make update_config only conditionally exported; add semver-status update.
* Drop remaining conversion from FooConfig to FooConfigBuilderIan Jackson2022-03-071-1/+1
|
* Have ArtiConfig contain a TorClientConfig, and drop builder retconIan Jackson2022-03-071-0/+7
| | | | | | | | | | | | | | | | | | | Replace the recapitulation of TorClientConfig fields in ArtiConfig and instead just have it contain one. This is part of #374. The conversions from ArtiConfig back to ArtiConfigBuilder and TorClientConfigBuilder would need to change, but, since we don't want them anyway, No longer impl Deserialize for ArtiConfig. (As per #371 this will want to become a private type.) No longer impl From<ArtiConfig> for ArtiConfigBuilder and TorClientConfigBuilder. And abolish tests of that code. (This all has to be in one commit, because previously ArtiConfig::tor_client_config used the validated-to-builder config retcon.)
* Add a from_hex method for RsaIdentity.Nick Mathewson2022-03-041-0/+4
| | | | | | | | | | | | | We perform this operation in a bunch of places, and most of them use hex::decode(). That's not great, since hex::decode() has to do heap allocation. This implementation uses hex::decode_to_slice(), which should be faster. (In the future we might choose to use one of the faster hex implementations, but I'm hoping that this change will be sufficient to get hex decoding out of our profiles.) Part of #377.
* arti-client: Make dirmgr() and circmgr() return &Arc<..>Nick Mathewson2022-03-031-1/+8
| | | | | | | | | | | Previously they returned an Arc, which wasn't necessary unless the client actually _wanted_ a new Arc. This would be an API break, except that these functions are marked 'experimental-api', so semver does not apply; nonetheless I've noted the break in semver_status.md, just in case we care. Closes #369
* arti-hyper: Upgrade from an example to an "adaptation layer"Ian Jackson2022-03-011-1/+1
|
* Add new crates to doc/Architecture.mdNick Mathewson2022-02-281-0/+12
|