Commit Graph

119 Commits

Author SHA1 Message Date
dignifiedquire c80da25006 chore: Release 2026-05-26 16:26:39 +02:00
Franz Heinzmann 628f2df026 chore(deps): update wasm-bindgen version (#664)
## Description

Wasm CI is currently failing with a tooling error. Let's see if updating
all the versions help.

## Change checklist

- [x] Self-review.
2026-05-20 13:31:47 +00:00
dignifiedquire 6ee7cf2f8c chore: Release 2026-05-07 11:28:50 +02:00
dignifiedquire 93a2710e74 chore: bump rustls-webpki to 0.103.13 (RUSTSEC-2026-0104) 2026-04-22 15:15:19 +02:00
Dirkjan Ochtman d4f61c1088 Upgrade rustls-platform-verifier to 0.7
(cherry picked from commit bda24fdae5)
2026-04-22 15:15:19 +02:00
Floris Bruynooghe d64959b878 chore(clippy): Fix clippy and cargo-deny for new rust release (#597)
## Description

New rust release, new clippy lints!

Also fix cargo-deny by upgrading rustls-webpki.

And clean up the cargo-deny config by removing unused exceptions.

## Breaking Changes

n/a

## Notes & open questions

n/a

## Change checklist

- [x] Self-review.
2026-04-17 11:53:42 +00:00
dignifiedquire 6933db95b0 chore: Release 2026-04-15 14:46:10 +02:00
Philipp Krüger 712b231d6f fix(proto): Move Connection::app_limited to PathData::app_limited (#580)
## Description

- Does what the PR title says
- Also some small cleanups in `poll_transmit_path_space`, if I may.

Context for what `app_limited` is:
> When bytes in flight is smaller than the congestion window and sending
is not pacing limited, the congestion window is underutilized. This can
happen due to insufficient application data or flow control limits. When
this occurs, the congestion window SHOULD NOT be increased in either
slow start or congestion avoidance.
https://www.rfc-editor.org/rfc/rfc9002.html#section-7.8

I.e. when `app_limited` is `true`, the congestion controller doesn't
increase the congestion window.
You can see this in `Cubic::on_ack` where it outright immediately bails,
doing nothing, when `app_limited` is `true`.

Because all paths have their own congestion window, they need to track
whether they're application limited separately.
Otherwise it's possible that there's a situation where one path is never
exercised fully (e.g. a backup path), while another path is saturated
with application data. Previously, the application data path would set
the connection-wide `app_limited` to `false`, causing the backup path
(that never experiences congestion) to inflate its congestion window.

With this change, the backup path would know it's not application
limited and pass that correct information to the congestion controller.
2026-04-13 11:24:10 +00:00
Friedel Ziegelmayer 5fd0ad1276 feat(noq): unify waking the state (#541)
Based on #540

Trying to make it less easy to forget this, I think it's neat, but maybe
not?

This does wake in some more cases now, specifically on error branches,
but I don't think that really matters. But please tell me if you think
it does

---------

Co-authored-by: Philipp Krüger <philipp.krueger1@gmail.com>
2026-03-27 08:51:47 +00:00
Philipp Krüger 1280ffd01b chore(proto): Update to rand 0.10 (#511)
## Description

This updates noq and its dependencies to rand 0.10 and getrandom 0.4.

## Breaking Changes

I don't think there are any of rand's APIs exposed in noq or noq-proto.
So no breaking changes.

## Notes & open questions

~~Blocked on https://github.com/tomtomwombat/fastbloom/pull/27 being
released.~~ We can disable the rand feature for fastbloom instead.

`proptest` still depends on rand 0.9:
```
$ cargo tree -i rand@0.9
rand v0.9.2
└── proptest v1.9.0
    [dev-dependencies]
    └── noq-proto v0.16.0 (/home/philipp/program/work/noq/noq-proto)
        ├── noq v0.17.0 (/home/philipp/program/work/noq/noq)
        │   ├── bench v0.2.0 (/home/philipp/program/work/noq/bench)
        │   └── perf v0.2.0 (/home/philipp/program/work/noq/perf)
        └── perf v0.2.0 (/home/philipp/program/work/noq/perf)
```
But it's only a dev-dependency, so won't get pulled in for people
depending on noq.
2026-03-23 10:37:34 +00:00
dignifiedquire faeddf58ee chore: Release 2026-03-09 14:41:38 +01:00
Philipp Krüger 13a1c456f5 feat!: Allow compiling with rustls, but without any crypto providers compiled into rustls (#462)
* Switch to `aes-gcm` crate for retry token logic when using rustls

* Split `rustls-ring` and `rustls-aws-lc-rs` features into `rustls`, `ring` and `aws-lc-rs` features.

* Better document the features.

* `cargo make format`

* Fix outdated feature references

* Avoid double-defining `configured_provider`

* File an issue about suddenly working PQC handshakes now breaking a test

* Fix rebase

* Only enable `aes-gcm` dependency when needed

* Add features for backwards compatibility

* Add some links to the spec's retry packet integrity section
2026-03-02 11:56:51 +00:00
Friedel Ziegelmayer 294e3ea603 refactor!: rename to noq (#461)
* refactor!: rename to noq

* fixup python scripts

* fixup

* fixup

* fixup: cr
2026-02-27 14:57:21 +00:00
Diva Martínez d29726a1fa fix! make Path::close completely sync (this never returned in the happy case) (#419)
* remove PathEvent::Closed

* add test

* remove unused public api types

* spelling

* make test finish reliably
2026-02-10 15:46:17 +00:00
Friedel Ziegelmayer 708a6a0119 fix(quinn-udp): more wine fixes (#414)
* fix(quinn-udp): disable IP_PKTINFO under Wine

Wine's IP_PKTINFO implementation maps Linux's ipi_addr (the IP header
destination address) to Windows' IN_PKTINFO.ipi_addr. On multi-homed hosts,
ipi_addr and ipi_spec_dst (the local address) can differ, causing QUIC to
discard packets with 'sent to incorrect interface'.

This commit:
- Detects Wine at runtime via ntdll.dll's wine_get_version export
- Disables pktinfo when running under Wine (both send and recv paths)
- Exports is_wine() from the crate for use by downstream tests
- Skips the local_ip assertion in echo tests under Wine
- Upgrades windows-sys to 0.61

See:
- Wine's convert_control_headers(): https://github.com/wine-mirror/wine/blob/master/dlls/ntdll/unix/socket.c
- Linux in_pktinfo fields: https://man7.org/linux/man-pages/man7/ip.7.html
- Windows IN_PKTINFO: https://learn.microsoft.com/en-us/windows/win32/api/ws2ipdef/ns-ws2ipdef-in_pktinfo

* apply CR

* fixup

* cleanup
2026-02-06 17:24:48 +00:00
Friedel Ziegelmayer 1a91e0b538 fix: update time dep to address RUSTSEC-2026-0009 (#412) 2026-02-06 09:17:27 +00:00
Diva Martínez 7cabfe8392 tests: introduce ConnPair and testresult to simplify tests (#408)
* add basic struct and methods

* dispatch using side

* use ConnPair in multipath tests

* use `Side` variants directly

* add testresult to dev deps

* always use time from underlying pair

* use ConnPair in multipath tests even if they don't use multipath_pair

* use stats(side) directly

* introduce ConnPair::connect_with

* introduce ConnPair::with_default_endpoint

* reduce LOCs

* introduce ConnPair::with_transport_cfg for even less noise

* only keep the public api

* fmt

* take advantage of derive_more

* add some basic docs

* revert weird windows update
2026-02-05 16:33:45 +00:00
Diva Martínez b5e2b8f0e3 update bytes to address advisory RUSTSEC-2026-0007 (#405) 2026-02-03 16:33:31 +00:00
“ramfox” 4695fbfe1f chore: Release 2026-01-31 13:49:00 -05:00
“ramfox” d1c70a87d0 chore: Release 2026-01-31 13:48:45 -05:00
“ramfox” e41672537d chore: Release 2026-01-28 11:10:17 -05:00
“ramfox” 349e82913a chore: Release 2026-01-28 11:09:42 -05:00
“ramfox” 086cf769b3 chore: Release 2026-01-28 11:01:36 -05:00
Rüdiger Klaehn 1df76577f7 tests: Add proptest arbitraries for various quinn-proto types and implement encoder roundtrip tests. (#325)
* Add proptests for encode/decode

* Add proptest arbitrary for VarInt and StreamId

Also fix the StreamId arbitrary::Arbitrary generation

* Add proptest arbitraries for various quinn-proto types and make use of them in the random interaction test

* Add more arbitraries.

* Remove unneeded derives

* Use MaybeFrame arb

* fmt

* Use cfg(test) for the arbitraries.

Also move the encode_decode tests into a separate file.

* Add more cases to TestFrame

* Get rid of the last remaining record enum cases.

* More arbitraries. Now almost every frame type is roundrrip tested.

* remove dead code

* clippy

* Add proptest and test-strategy even in wasm

(we don't *run* proptests, but need them to compile)

* Use a feature flag after all...

going in circles...

* Remove claude settings and DRY the proptest attribute.

* Revert "Use a feature flag after all..."

This reverts commit b27add632b.

* Try to get proptest to work in wasm after all

It doesn't need to run tests, just compile.

* Use the right hmac import

* sort dev deps

* Remove some feature flag gated imports

they are not worth it in terms of DRY

* Use test_strategy::Arbitrary by default in frame. It gets used way more often.
2026-01-19 09:35:31 +00:00
ramfox d5287455b6 chore: release v0.15.0
`cargo release` command successfully published the crates, but the
commit created by `cargo release` to update the version numbers was
rejected, because I don't have permissions to push to the `main` branch
directly.

These are the appropriate changes to ensure the version numbers in our
code align with the released crates.
2026-01-09 07:35:28 +01:00
dignifiedquire bacde87c71 refactor(quinn-proto): use enum-assoc instead of manual macro for frametype 2026-01-07 11:47:44 +01:00
Ruediger Klaehn 0234c4a09e Switch to criterion here as well 2025-12-16 14:05:27 +02:00
Ruediger Klaehn 41dce79883 Merge branch 'main-iroh' into fix-send-buffer 2025-12-16 12:37:49 +02:00
Rüdiger Klaehn 65c66d5929 deps: switch to criterion for benching (#262)
* Switch from bencher to criterion

* clippy

* MSRV
2025-12-16 10:24:03 +00:00
Ruediger Klaehn c8d73c1076 Convert many_small_writes_delayed_acks into a bench 2025-12-12 15:00:36 +02:00
Diva Martínez a688a24072 refactor: create PathChallenge and PathResponse types (#240)
* create PathChallenge and PathResponse

* Small fixes
2025-12-10 21:32:56 +00:00
Philipp Krüger 5e51c98783 test: Add code to programmatically generate interaction patterns with quinn-proto (#193)
* fix: Don't allow sending path status frames on non-multipath connections

* fix: Ignore PATH_ACKs on abandoned paths

* test: Implement a quinn-proto multipath proptest & add regression tests

* Restructure proptests, fix "invalid key" access in test endpoints

* Turn of MTUD

* Add another regression test

* fix: Correctly check `space.rx_packet` in key updates

Also refactor `PacketNumberSpace::rx_packet` to be an `Option<u64>` instead of `u64`.

* Smaller test case

* fix accepting packets from other remotes.

* Increase the iterations in `drive_bounded`

* Remove proptests itself

* Cargo.lock update fix after merge

* fix imports

* fix merge

* self-review

* cfg-gate proptests

* Implement `RoutingTable` instead of `multipath_addrs`

* Keep connection handles around, but don't use them when drained

* Fix all tests

* Reintroduce proptests

* Move random interaction running tests into submodule

* Implement more complex route table generation

* Prefer `Self::`

* refactor: Prefer not duplicating quinn-proto types

* Don't track `path_ids` in `State`, but fetch them from `Connection`

* Extract out `TestOp::run`

* Reorder things

* Add close operation

* Properly use short-circuiting

* Add holepunching APIs to proptests

* Revert accidental changes

* Return the `ConnectionError` from `Connection::handle_event`

* Revert "Return the `ConnectionError` from `Connection::handle_event`"

This reverts commit 713e17465f.

* Check `Connection::state` in proptests instead of adding a panic_on_transport_error config

* Properly check for transport errors

* `cargo fmt`

* Cfg out `random_interaction` module in Wasm

* format

* Cleanup, fix all clippy issues

* Code review
2025-12-09 12:45:37 +00:00
Rüdiger Klaehn bad9ca2abd refactor: Use array based data structure for sent_packets instead of BTreeMap (#202)
* WIP add new packet buffer

* Use git dep

* Use PacketBuf for lost_packets as well

* Use published sorted_index_buffer

* fmt

* Get rid of MSRV warning

* fix dependency sort order
2025-12-09 11:21:56 +00:00
Franz Heinzmann abbe27bf07 feat!: update qlog to latest drafts, add more events and QUIC extensions, emit traces per connection (#208)
* refactor: upgrade to latest n0-qlog

* feat: record path id

* feat: add qlog support for multipath frames

* support more frames and error codes

* feat: add support for quic-address-discovery and quic-ack-frequency extensions

* feat: support iroh's NAT traversal extension

* feat: emit TupleAssigned for new paths

* fixup

* chore: update to latest n0-qlog

* feat: emit TransportParameters

* chore: clippy

* deps: update to n0-qlog 0.1.0

* refactor: add qlog factory, move group_id to common_fields

* docs: improve

* chore: clippy

* fixup

* feat: add QlogFileFactory and util methods on TransportConfig

* feat: reexport from quinn

* chore: clippy

* feat: qlog timers

* add more timers

* docs: improve

* refactor: disable keep alive timers in qlog to reduce noise

* address review

* fix: downgrade logging

* cleanup

* fixup naming

---------

Co-authored-by: Friedel Ziegelmayer <me@dignifiedquire.com>
2025-12-06 10:07:30 +00:00
Asmir Avdicevic 35f654b0c0 ci: fix more workflows 2025-12-02 13:24:18 +01:00
dignifiedquire c8a655c4b4 Merge remote-tracking branch 'upstream/main' into chore-merge-upstream 2025-12-01 14:08:32 +01:00
Friedel Ziegelmayer 7854c50e0e chore: fix wasm builds (#186) 2025-11-28 13:42:20 +01:00
dependabot[bot] ac22065c29 build(deps): bump bytes from 1.10.1 to 1.11.0
Bumps [bytes](https://github.com/tokio-rs/bytes) from 1.10.1 to 1.11.0.
- [Release notes](https://github.com/tokio-rs/bytes/releases)
- [Changelog](https://github.com/tokio-rs/bytes/blob/master/CHANGELOG.md)
- [Commits](https://github.com/tokio-rs/bytes/compare/v1.10.1...v1.11.0)

---
updated-dependencies:
- dependency-name: bytes
  dependency-version: 1.11.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-17 13:31:37 +00:00
Cathal Mullan 35cefdd003 Bump MSRV to 1.80, remove once_cell and lazy_static deps 2025-11-14 18:29:03 +00:00
dependabot[bot] 7fc33f4143 build(deps): bump hex-literal from 1.0.0 to 1.1.0
Bumps [hex-literal](https://github.com/RustCrypto/utils) from 1.0.0 to 1.1.0.
- [Commits](https://github.com/RustCrypto/utils/compare/hex-literal-v1.0.0...hex-literal-v1.1.0)

---
updated-dependencies:
- dependency-name: hex-literal
  dependency-version: 1.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-11 09:17:23 +00:00
dependabot[bot] 425b8b45f6 build(deps): bump console-subscriber from 0.4.1 to 0.5.0
Bumps [console-subscriber](https://github.com/tokio-rs/console) from 0.4.1 to 0.5.0.
- [Release notes](https://github.com/tokio-rs/console/releases)
- [Changelog](https://github.com/tokio-rs/console/blob/main/release-plz.toml)
- [Commits](https://github.com/tokio-rs/console/compare/console-subscriber-v0.4.1...console-subscriber-v0.5.0)

---
updated-dependencies:
- dependency-name: console-subscriber
  dependency-version: 0.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-11 09:16:51 +00:00
Friedel Ziegelmayer 817a1b565d perf: implement more efficient timeouts and MSRV to 1.83 2025-11-04 22:38:50 +01:00
Dirkjan Ochtman 8141831760 Take semver-compatible updates 2025-10-30 05:36:24 +00:00
Diva Martínez 20e462d810 nat traversal requires multipath (#159)
* nat traversal requires multipath

* allow crate access, not ideal, but unavoidable

* satisfty MSRV limits

* pub all the way to the top

* update wasm-bindgen-test
2025-10-28 09:25:02 -05:00
dependabot[bot] 491b8b5deb build(deps): bump rustls-platform-verifier from 0.6.1 to 0.6.2
Bumps [rustls-platform-verifier](https://github.com/rustls/rustls-platform-verifier) from 0.6.1 to 0.6.2.
- [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.6.1...v/0.6.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-27 14:09:05 +00:00
dependabot[bot] 1e44c69f86 build(deps): bump getrandom from 0.3.3 to 0.3.4
Bumps [getrandom](https://github.com/rust-random/getrandom) from 0.3.3 to 0.3.4.
- [Release notes](https://github.com/rust-random/getrandom/releases)
- [Changelog](https://github.com/rust-random/getrandom/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-random/getrandom/compare/v0.3.3...v0.3.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-20 13:53:59 +00:00
Floris Bruynooghe 2d68ea5303 Switch to released rustls (#152) 2025-10-17 11:00:04 -05:00
Floris Bruynooghe 3820a0ae48 upgrade rustls to 0.23.29 to match iroh (#134) 2025-10-06 12:38:49 +02:00
Diva M 56a5a35f38 fixes to make everything work together 2025-10-01 13:22:35 -05:00
Diva M 4d39665d48 Revert Dig's merge fixed to bring back const
This reverts commit 44a3dc6e45.
2025-10-01 13:22:24 -05:00