summaryrefslogtreecommitdiff
path: root/Cargo.lock
Commit message (Collapse)AuthorAgeFilesLines
...
* Refactor Runtimes to use separate TLS implementations internally.Nick Mathewson2022-01-191-1/+0
| | | | | This will make it easier to implement them using some other TLS provider as well, without having to duplicate all of our code.
* Merge branch 'bootstrap_reporting'Nick Mathewson2022-01-191-0/+10
|\
| * tor-chanmgr: Add bootstrap/status reporting.Nick Mathewson2022-01-181-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The information is pretty basic here: we use "have we been able to connect/TLS-handshake/Tor-handshake" as a proxy for "are we on the internet? Are we on a reasonably unfiltered part of the internet?" Eventually we'll want to make the information gathered and exported more detailed: I've noted a few places in the code. For now, however, this is about as good as C Tor does today, and it should be a good starting point. This uses a slightly different design from tor-dirmgr. Instead of exporting an entire state structure via `postage::watch`, it exports only the parts of that structure which the user is supposed to read. I think that's more reasonable in this case because most of the possible internal transitions in the tor-chanmgr state don't cause a change in the exposed status.
| * tor-dirmgr: Create a bootstrap-status exporting mechanism.Nick Mathewson2022-01-181-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The interface is similar to the one exposed by `arti-client`: it internally uses postage::watch to give a series of events showing when a bootstrap status is changing. Thanks to the existing state/driver separation in the DirMgr design we don't need much new logic: each download state needs to expose (internally) how far along it is in its download, which the bootstrap code passes to the DirMgr if it has changed. I believe that in the long run, we'll probably want to expose more (or different) information here, and we'll want to process it differently. With that in mind, I've made the API for `DirBootstrapStatus` deliberately narrow, so that we can change its of its internal later on without breaking code that depends on it. (The information exposed by this commit is not yet summarized in `arti-client`.) Part of #96.
* | Merge branch 'eta/292-1' into 'main'eta2022-01-141-0/+8
|\ \ | |/ |/| | | | | arti-bench: add support for multiple samples & averaging See merge request tpo/core/arti!240
| * arti-bench: add support for multiple samples & averagingeta2022-01-141-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We now do multiple samples (configurable; default 3) per type of `arti-bench` benchmark run, and take a mean and median average of all data collected, in order to hopefully be a bit more resilient to random outliers / variation. This uses some `futures::stream::Stream` hacks, which might result in more connections being made than required (and might impact the TTFB metrics somewhat, at least for downloading). Results now get collected into a `BenchmarkResults` struct per type of benchmark, which will be in turn placed into a `BenchmarkSummary` in a later commit; this will also add the ability to serialize the latter struct out to disk, for future reference. part of arti#292
* | Implement the basics of a bootstrap-status API.Nick Mathewson2022-01-131-0/+2
|/ | | | | | | | | | | | The purpose of a this API is to tell the user how far along Arti is in getting bootstrapped, and if it's stuck, what it's stuck on. This API doesn't yet expose any useful information: by the time it's observable to a client, it's always "100% bootstrapped." But I'm putting it in a MR now so that we can review the basic idea, and to avoid conflicts with later work on tickets like #293 and #278. This is part of #96.
* guardmgr::..::sample_test: Fix intermittent failure.Nick Mathewson2022-01-111-0/+1
| | | | | | | | | | | | | | This test should only fail very rarely (around 1/2.4e8) when guards are chosen from a list of 20 with uniform probability. But that wasn't what we were doing on the mock test network: we were choosing from a list of 10 viable guards, with nonuniform probability. As a fix, we change the test network probabilities so that the guards _are_ chosen with a uniform probability for this test, and we use a modified version of the test network where there are indeed 20 Guard-flagged relays with the required DirCache=2 protocol. Closes #276.
* Bump all crate versions to 0.0.3.Nick Mathewson2022-01-111-29/+29
|
* Run "cargo update".Nick Mathewson2022-01-111-147/+153
|
* Tracing configuration for logfiles, per-target filtersNick Mathewson2022-01-101-0/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | Previously we could only configure one global tracing filter that applied to stdout and journald. There was no support for log files, either. This patch fixes both issues, by substantially revising the configuration format: There are now separate filters for each log file, for journald, and for the console log. Because we want to allow multiple logfiles, they have to go into an array in the configuration. The configuration logic has grown a bit complicated in its types, since the tracing_subscriber crate would prefer to have the complete structure of tracing Layers known statically. That's fine when you know how many you have, and which kinds there will be, but for the runtime-configuration case we need to mess around with `Box<dyn Layer ...>`. I also had to switch from tracing_subscriber's EnvFilter to its Targets filter. It seems "EnvFilter" can only be applied as a Layer in itself, and won't work as a Filter on an individual Layer. Closes #166. Closes #170.
* Merge branch 'arti-bench' into 'main'eta2021-12-161-0/+71
|\ | | | | | | | | Introduce an experimental benchmarking utility for Arti See merge request tpo/core/arti!195
| * Introduce an experimental benchmarking utility for Artieta2021-12-161-0/+71
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The new `arti-bench` crate does a simple end-to-end benchmark test embedding Arti: it generates some random data (of configurable amount, depending on command-line parameters), and then sends said data back and forth via Arti (which should be configured to use a local Chutney network). Additionally, the benchmark can also be run via a local SOCKS5 server (in order to benchmark the performance via a local Chutney node, for comparison). The `tests/chutney/arti-bench.sh` sets up and tears down Chutney as required to make this work. This is very much a first cut; there are many things that should eventually get added, such as support for multiple connections, JSON output capabilities, running multiple tests, ...
* | Refactor directory events to use a FlagPublisher mechanism.Nick Mathewson2021-12-141-0/+1
|/ | | | | | | | This approach tries to preserve the current interface, but uses a counter-based event backend to implement a coalescing stream of events that can be represented as small integers. The advantage here is that publishing events no longer needs to be a blocking operation, since there is no queue to fill up.
* Merge branch 'reconfigure' into 'main'eta2021-12-131-0/+25
|\ | | | | | | | | Make most arti-client fields reconfigurable. See merge request tpo/core/arti!181
| * Add a few tests to tor-config.Nick Mathewson2021-12-071-0/+24
| |
| * Sketch API for reconfiguration.Nick Mathewson2021-12-071-0/+1
| | | | | | | | | | | | | | 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.
* | update rusqlite and revert minimal version changeTrinity Pointard2021-12-091-2/+2
| |
* | Upgrade to digest v0.10.0Nick Mathewson2021-12-071-39/+56
|/ | | | | We generally try to track the latest rust-crypto traits when we can: fortunately, this upgrade didn't break much, considering.
* Merge branch 'bug252' into 'main'eta2021-12-071-0/+1
|\ | | | | | | | | | | | | Make DNS fields in arti-client/src/client.rs configurable Closes #252 See merge request tpo/core/arti!171
| * Make DNS fields in arti-client/src/client.rs configurableNeel Chauhan2021-12-031-0/+1
| |
* | Merge branch 'preemptive-config' into 'main'eta2021-12-071-0/+1
|\ \ | | | | | | | | | | | | | | | | | | Allow configurability on preemptive circuits Closes #245 See merge request tpo/core/arti!164
| * | Allow configurability on preemptive circuitsNeel Chauhan2021-12-071-0/+1
| |/
* / tor-netdir: Use reproducible RNG in tests.Nick Mathewson2021-12-061-0/+1
|/ | | | | | The rand crate's documentation says it's not okay to rely on StdRng having reproducible output. So instead, let's switch to ChaCha12Rng instead (which is what StrRng currently uses).
* tor-netdir: Use bitflags for WeightKindNeel Chauhan2021-11-301-0/+1
|
* One more "cargo update" before the release.Nick Mathewson2021-11-301-15/+6
|
* Bump every crate by one patch version.Nick Mathewson2021-11-291-28/+28
|
* Run "cargo update" to get latest versions.Nick Mathewson2021-11-291-92/+39
| | | | | | | Also fix a couple of warnings introduced by now-unneeded imports with new ed25519 crate. This is part of the process for releasing our next version.
* Merge branch 'arti-client-config' into 'main'eta2021-11-221-0/+1
|\ | | | | | | | | Further configuration refactoring See merge request tpo/core/arti!137
| * Ensure that every section-level config type has a builder() function.Nick Mathewson2021-11-211-0/+1
| |
* | Merge commit '98f38dc' (arti!131) into HEADeta2021-11-221-0/+30
|\ \ | |/ |/| | | | | This commit message totally gives away the cursed way in which I use git. branches? what are those?
| * Initial cut at a typed event framework for arti (arti#230).eta2021-11-221-0/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This implements a basic typed event broadcast mechanism, as described in arti#230: consumers of the new `tor-events` crate can emit `TorEvent` events, which others can consume via the `TorEventReceiver`. Under the hood, the crate uses the `async-broadcast` (https://github.com/smol-rs/async-broadcast) crate, and a `futures::mpsc::UnboundedSender` for the event emitters; these are glued together in the `EventReactor`, which must be run in a background thread for things to work. (This is done so event sending is always cheap and non-blocking, since `async-broadcast` senders don't have this functionality.) Additionally, the `TorEventKind` type is used to implement selective event reception / emission: receivers can subscribe to certain event types (and in fact start out receiving nothing), which filters the set of events they receive. Having no subscribers for a given event type means it won't even be emitted in the first place, making things more efficient.
* | Move top-level configuration downwards from `arti` to `arti-config`.Nick Mathewson2021-11-181-5/+22
| | | | | | | | | | | | | | | | 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.
* | Merge remote-tracking branch 'origin/mr/131'Nick Mathewson2021-11-171-44/+44
|\ \
| * | update dependenciesTrinity Pointard2021-11-171-46/+46
| |/
* | Remove dependency from arti-client to tor-config.Nick Mathewson2021-11-161-1/+1
| | | | | | | | | | I'm about to make tor-config a higher-level module, so it can't be a dependency for tor-config.
* | Remove unused "dirs" dependency from tor-persist.Nick Mathewson2021-11-161-1/+0
| |
* | tor-proto: Use tor-rtcompat macros for testing, not tokio.Nick Mathewson2021-11-151-0/+1
| | | | | | | | Closes #222.
* | Update to simple_asn1 0.6.1.Nick Mathewson2021-11-141-2/+2
|/ | | | | | This is a security fix for a panic. Closes #236
* Completely overhaul the tor-proto circuit reactoreta2021-11-121-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* Upgrade to async-native-tls 0.4.0Nick Mathewson2021-11-121-3/+3
|
* Remove usage of tracing-test 0.1Nick Mathewson2021-11-111-81/+4
| | | | | | | | It requires tracing-subscriber 0.2, which is a lower version than we want, and which causes trouble with our minimal-versions CI test. There is a pending issue to fix this; we can reinstate tracing-test once it is merged: https://github.com/dbrgn/tracing-test/pull/11
* Tests for tor-dirmgr::bootstrapNick Mathewson2021-11-111-4/+82
|
* Replace all println/eprintln calls outside of arti CLI with trace.Nick Mathewson2021-11-041-0/+1
|
* Get rid of tor-proto's ChannelImpl, and use the reactor more insteadeta2021-11-031-1/+0
| | | | | | | | | | | | | | | | | | | 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.
* Use coarsetime to build an incoming traffic timestamp.Nick Mathewson2021-11-021-0/+14
| | | | | | | | | | | | | | | | We need this for the circuit timeout estimator (#57). It needs to know "how recently have we got some incoming traffic", so that it can tell whether a circuit has truly timed out, or whether the entire network is down. I'm implementing this with coarsetime, since we need to update these in response to every single incoming cell, and we need the timestamp operation to be _fast_. (This reinstates an earlier commit, f30b2280, which I reverted because we didn't need it at the time.) Closes #179.
* Cargo.lock: v0.0.1 is now published.arti-v0.0.1Nick Mathewson2021-10-291-26/+26
|
* Update Cargo.lock in preparation for Arti 0.0.1 release.Nick Mathewson2021-10-291-71/+71
|
* Upgrade to fslock version 0.2Nick Mathewson2021-10-271-3/+2
| | | | | This version makes all locks per-handle rather than per-process, by moving from lockf() to flock() on unix.
* Improve and future-proof the `arti` CLIeta2021-10-271-44/+62
| | | | | | | | | | | | | | | | | | | | | | | | This switches out `arti`'s argument-parsing library with `clap`, which is a lot more featureful (and very widely used within the Rust ecosystem). We also now use a lot of `clap`'s features to improve the CLI experience: - The CLI now expects a subcommand (currently, either "help", or "proxy" for the existing SOCKS proxy behaviour). This should let us add additional non-SOCKS-proxy features to arti in future. - `clap` supports default values determined at runtime, so the way the default config file is loaded was changed: now, we determine the OS-specific path for said file before invoking `clap`, so the help command can show it properly. - The behaviour of `tor_config` was also changed; now, one simply specifies a list of configuration files to load, together with whether they're required. - That function also way overused generics; this has been fixed. - Instead of using the ARTI_LOG environment variable to configure logging, one now uses the `-l, --log-level` CLI option. (The intent is for this option to be more discoverable by users.) - The `proxy` subcommand allows the user to override the SOCKS port used on the CLI without editing the config file.