Commit Graph

4051 Commits

Author SHA1 Message Date
Asmir Avdicevic 1982b6ce00 delete repo level project tracking 2025-05-26 14:32:08 +02:00
Floris Bruynooghe c9c2646fe0 Small cleanup in discard_space (#69) 2025-05-22 17:53:12 +02:00
Floris Bruynooghe 020e6f9719 Small cleanup in discard_space 2025-05-22 17:44:03 +02:00
Floris Bruynooghe 8c4e5d7522 Flub/merge main (#68)
Green CI again on stable
2025-05-22 16:24:30 +02:00
Floris Bruynooghe ffeecca60e update ci 2025-05-22 16:15:00 +02:00
Floris Bruynooghe 3360856d1a convert to our test changes 2025-05-22 16:11:06 +02:00
Floris Bruynooghe 2d54bac314 Merge branch 'main' into multipath-quinn-0.11.x 2025-05-22 16:00:22 +02:00
Floris Bruynooghe d8fdaea9a2 Make sending ACKs work 2025-05-22 14:09:06 +02:00
Divma a03ea32f23 add adapted cid rotation test (#65) 2025-05-20 16:01:39 -05:00
Petr Sumbera 8537a18329 Solaris CI: better workaround for spurious network issues 2025-05-20 00:55:51 +00:00
Divma a5502f5896 keep track of the local and remote max path id (#63)
* make transport config and transport parameters uniform

* remove comment from docs

* keep track of the local and remote max path ids

* add constant

* clippy fixes
2025-05-19 11:21:49 -05:00
Phoenix Kahlo 41facf3861 Fix large RetryError clippy warnings
Clippy is warning that the size of RetryError (both proto and quinn's
versions) are excessively large for a Result Err variant. This function
fixes these warnings by boxing the contents of both.
2025-05-19 07:16:01 +00:00
Phoenix Kahlo c8ca79c9c3 proto: Suppress large AcceptError clippy warning
This commit uses an allow directive to suppress the following error:

```
warning: the `Err`-variant returned from this function is very large
   --> quinn-proto/src/endpoint.rs:525:10
    |
525 |     ) -> Result<(ConnectionHandle, Connection), AcceptError> {
    |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the `Err`-variant is at least 136 bytes
    |
    = help: try reducing the size of `endpoint::AcceptError`, for example by boxing large elements or replacing it with `Box<endpoint::AcceptError>`
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#result_large_err
    = note: `#[warn(clippy::result_large_err)]` on by default
```

Because AcceptError and all of its descendants fields are public,
excepting a descendant that contains a usize, it is impossible to reduce
the byte size of AcceptError without semver breakage.
2025-05-19 07:16:01 +00:00
Floris Bruynooghe ab977d659c Send most of the stuff only on active paths (#62)
If there's an active path we only want to send packets that must be sent
on a backup path on the backup path. All the other packets should go on
the active path, even if the active path is congestion blocked.
2025-05-14 18:06:50 +02:00
Floris Bruynooghe 8d52a7bf62 Don't build all frames on backup paths 2025-05-14 17:26:20 +02:00
Floris Bruynooghe 1e46722465 send CONNECTION_CLOSE on all paths, backup or not 2025-05-14 17:06:13 +02:00
Floris Bruynooghe 381ba9df2e Fix existing tests again 2025-05-14 15:47:36 +02:00
Floris Bruynooghe 572baaf46a Send most of the stuff only on active paths
WIP
2025-05-14 14:44:53 +02:00
Phoenix Kahlo 4f8a0f13cf refactor(quinn): Remove some usage of execute_poll
This commit makes there be fewer places where SendStream::execute_poll
is called directly. AsyncWrite implementations now go through poll_write,
and poll_write now goes through the write future. This means that
execute_poll is now only called directly from write and write_chunks.
2025-05-14 10:31:48 +00:00
dependabot[bot] 176e84c666 build(deps): bump rustls-platform-verifier from 0.5.1 to 0.5.3
Bumps [rustls-platform-verifier](https://github.com/rustls/rustls-platform-verifier) from 0.5.1 to 0.5.3.
- [Release notes](https://github.com/rustls/rustls-platform-verifier/releases)
- [Changelog](https://github.com/rustls/rustls-platform-verifier/blob/main/CHANGELOG)
- [Commits](https://github.com/rustls/rustls-platform-verifier/compare/v/0.5.1...v/0.5.3)

---
updated-dependencies:
- dependency-name: rustls-platform-verifier
  dependency-version: 0.5.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-14 09:27:48 +00:00
dependabot[bot] 81282af8d5 build(deps): bump getrandom from 0.3.2 to 0.3.3
Bumps [getrandom](https://github.com/rust-random/getrandom) from 0.3.2 to 0.3.3.
- [Changelog](https://github.com/rust-random/getrandom/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-random/getrandom/compare/v0.3.2...v0.3.3)

---
updated-dependencies:
- dependency-name: getrandom
  dependency-version: 0.3.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-14 09:27:15 +00:00
Petr Sumbera d06319b3f1 Solaris CI: workaround for spurious network issues 2025-05-14 04:51:50 +00:00
Frando f1fe1832a7 feat: Make the future returned from SendStream::stopped 'static
Changes the implementation of `SendStream::stopped` such that the
returned future is static and no longer lifetime-bound onto a mutable
reference to the send stream.

This allows to use the stopped future with combinators or in a separate
task while still sending on the stream concurrently.

Internally, this is done changing the implementation of the stopped
notification to use a cloneable tokio::sync::Notify instead of storing
a single waker.
2025-05-14 04:43:32 +00:00
Phoenix Kahlo 9f008ade66 proto: Make BytesSource private
There are no public APIs that accept BytesSource. This commit makes it
not be re-exported publically.
2025-05-13 00:44:35 +00:00
Floris Bruynooghe 9ea74f1a41 Rename PathMigrationData (#61)
I mostly want to be able to write `path.data` to refer to the PathData
rather than `path.path` or so.
2025-05-12 17:36:04 +02:00
Floris Bruynooghe 806858c1fb Rename PathMigrationData
I mostly want to be able to write `path.data` to refer to the PathData
rather than `path.path` or so.
2025-05-12 17:03:19 +02:00
Floris Bruynooghe ad6a630f19 Basic send on multiple paths (#58)
This doesn't do selection correctly yet.  And there's still a bunch to clean up.  But the main structure is there now.
2025-05-12 13:19:20 +02:00
Floris Bruynooghe bbbc0cb63c fixup docs 2025-05-12 12:56:44 +02:00
Floris Bruynooghe a90eafd60b bump sccache to stop using deprecated github cache servers 2025-05-12 12:47:21 +02:00
Floris Bruynooghe 8ba7262786 clippy 2025-05-12 12:44:14 +02:00
Floris Bruynooghe 25645818fa Always call maybe_queue_probe
We need to make sure there's something ACK-eliciting.  So there needs
to be a can_send.other.  But the maybe_queue_probe function already
has this functionality in it.  Just call it, even if the work that
function does has weird lines.  For now keep it the same.
2025-05-12 12:43:33 +02:00
Floris Bruynooghe 135aaf02fd Better next space check, only check congestion for new dgram 2025-05-12 12:43:30 +02:00
Floris Bruynooghe 2a01ddce6a Check the 3rd space too, this is very hacky 2025-05-12 12:42:38 +02:00
Floris Bruynooghe 722047b031 Something that starts to work 2025-05-12 12:42:33 +02:00
Floris Bruynooghe d056825cd1 WIP: Send on multiple paths 2025-05-12 12:38:07 +02:00
Divma c53d990c3a adjust timers to keep track of the path_id (#60)
* adjust timers to keep track of the path_id

* expand test
2025-05-11 23:16:39 -05:00
Phoenix Kahlo bce32845dc quinn: Remove explicit write future structs
We maintain explicit send stream future implementation structs for
`Write`, `WriteAll`, `WriteChunk`, and `WriteAllChunks`. However, these
are private. We can significantly simplify this code by instead leaning
more directly on functionality such as async functions and
`std::future::poll_fn`.
2025-05-11 17:35:45 +00:00
Phoenix Kahlo f642fa870e ci: Change powerset check
The existing powerset check has problems:

- It takes too long.
- It failed to catch all the bugs fixed in the previous commit.

This commit fixes it as such:

- `--depth 3` is passed in which limits execution time.
- `--group-features` groups are removed which would have caught the bugs
  fixed in the previous commit.
- `--clean-per-run` is removed as it's no longer necessary and slows it
  down.

Experimentation indicates that a depth of 3 takes roughly a few minutes
to execute and catches bugs, whereas a depth of 4 takes roughly 40
minutes to run and does not catch any additional bugs.
quinn-0.11.8 quinn-proto-0.11.12
2025-05-09 01:01:17 +00:00
Phoenix Kahlo 14b905ae56 quinn: Fix feature combination error / warnings
Commit fixes compile errors and warnings that previously occurred with
certain combinations of features that our CI was not catching.
2025-05-09 01:01:17 +00:00
Dirkjan Ochtman 3482fcc759 proto: bump version to 0.11.12 2025-05-08 17:43:40 +00:00
David Lönnhager d161fc07d7 Bump quinn version to 0.11.8 2025-05-08 14:37:03 +00:00
Phoenix Kahlo 7ce43e8e7b test(proto): Use default BloomTokenLog
Tests no longer reconfigure config to use SimpleTokenLog if the bloom
feature is enabled, instead preferring to use the default BloomTokenLog.
2025-05-07 04:37:29 +00:00
Phoenix Kahlo 63737c4562 Set default tokens sent to 2 if bloom enabled
It makes sense to do this now that we have a default token log that's
actually able to accept tokens.
2025-05-07 04:37:29 +00:00
Phoenix Kahlo a615d43bf1 Make BloomTokenLog the default TokenLog
Unless the bloom feature is disabled, in which case it still falls back
to NoneTokenLog.
2025-05-07 04:37:29 +00:00
Phoenix Kahlo 15103ee887 Add BloomTokenLog
- Adds default feature `bloom`.
- It enables a new BloomTokenLog implementation of TokenLog.
- It enables a dependency on the `fastbloom` crate.
2025-05-07 04:37:29 +00:00
Phoenix Kahlo 11265915ae test(proto): Use default TokenMemoryCache
Deletes SimpleTokenStore. Test code can now rely on TokenMemoryCache,
which is set by default.
2025-05-07 02:36:17 +00:00
Phoenix Kahlo 8cc68dcbaa Make TokenMemoryCache the default TokenStore 2025-05-07 02:36:17 +00:00
Phoenix Kahlo 0b5762efaa Add TokenMemoryCache
TokenMemoryCache is a new implementation of TokenStore.

TokenMemoryCache is designed to store up to 2 tokens per server (this is
configurable) for up to 256 servers (this is also configurable), with a
LRU eviction policy. This is so that it works harmoniously with
rustls::ClientSessionMemoryCache, which by default stores resumption
state for up to 256 servers with a LRU eviction policy.
2025-05-07 02:36:17 +00:00
Thomas Eizinger 6b901a3c27 quinn-udp: sanitise segment_size
In order to perform GSO, an application needs to batch datagrams
together into a big buffer. As part of such a batch, the last datagram
is allowed to be less than the `segment_size` as that still allows the
kernel to unambigously segment the content into individual packets.

When GSO gets disabled at runtime due to lack of driver support,
applications need to segment such a prepared batch themselves into
individual `Transmit`s. Doing that may lead to situations in which a
`Transmit` is handed to `quinn-udp` which still has the original
`segment_size` set, yet its content is shorter than that.

Not all kernels like that. Specifically, it has been observed that
Android is particularly picky about these parameters.

We already sanitise the `segment_size` such that it is not set when it
is equal to the content length. To further increase the robustness of
`quinn-udp`, we extend this check to only set it when it is strictly
less than the content length.

Related: #2201
Related: #2145
Related: https://github.com/firezone/firezone/pull/8932
quinn-udp-0.5.12
2025-04-30 20:23:14 +00:00
Max Leonard Inden 458295c305 chore(udp): increase crate patch version to v0.5.12 2025-04-30 16:05:00 +02:00