* 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
* Enable qlog for proptests
* Panic with debug assertions when we end up accessing old PNSes
* Add generated regression test `regression_packet_number_space_missing`
* Fix accessing packet number space of paths that have been forgotten
* Always panic in `for_path`, even if we're not in debug_assertions
* 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
* 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
* Take semver-compatible dependency updates
* proto: use new constructor where possible
* proto: drop unused From impl
* quinn: import more types
* quinn: remove indirection in connection initialization
---------
Co-authored-by: Dirkjan Ochtman <dirkjan@ochtman.nl>
* chore: add more Debug derives
* fix: do not unconditionally use path 0 in APIs
* fix(quinn): reexport PathId
* fixup: debug for controllermetrics
* cleanup and remove `network_path_changed` api
* fix: do not use Instant::now in proto tests
Proto tests using the Pair driver should not use Instant::now() for
API calls. The Pair keeps track of time itself, and advances time
faster than real time. So time can be ahead of real time. API calls
that need a "now" should take the time from the Pair::time field.
* remove unused import
* Also fixup the non-multipath tests
* fix(proto): send path acks only in 1RTT space
Closes https://github.com/n0-computer/iroh/issues/3727
* check for multipath frames being on incoming
* fixup format
* fixup: undo filters
* expand frame checks
* expand check to also restrict QAD frames
* fix: run MTU discovery on all paths
This ensures that MTU discovery is run on all open, validated paths
and not-abandoned paths.
Fixes#3526.
* spelling
* describe the conditions in text
* clearly differentiate client and server states
This makes reasoning much easier since only the required fields are
present in the corresponding side state. It also reduces state size, now
it's 112 bytes, before it was 160 bytes
* apply clippy fixes
* fmt
* fix: disable GSO on windows if failures happen
Unfortunately this is not feature gated, so had the risk of tanking
performance on windows. Though it should not normally happen.
* make this state exist
* love running compiler on ci
* params
* imports
* param
* and slowly doing everything arqu did...
* adjust the test
- **rename PunchMe to ReachOut**
- **use new codes for transport parameter and frames**
- **update frame fields**
- **add the beginnings of nat traversal state**
- **init state when the extension is negotiated**
- **move the client side api away to deal with the error just once**
- **handle removed and added frames**
- **make some types public**
- **move iroh_hp out of connection**
- **thread adding addresses**
- **thread removing addresses**
- **include adding and removing frames in retransmission data**
- **Send ADD_ADDRESS and REMOVE_ADDRESS frames**
- **Add how to query the local nat traversal addresses.**
- **Thread server updates about addresses**
- **Boilerplate threading the nat traversal round call**
- **Remove the path_id from the ReachOut frame**
- **add retransmission fields for reach out frames**
- **Send the reach out frames, probe server addresses**
- **fix docs**
- **Send the reach out frames**
- **add fields to queue pending server-side challenges**
- **Return the remotely advertised nat traversal addresses instead**
- **modify the meaning of the transport parameter**
- **Hook up id tryfrom**
- **Queue server challenges**
- **send rand data instead of path challenges**
- **track sent reach outs in stats and sent frames**
- **track sent add and remove address in stats and sent frames**
- **Change APIs to set addresses**
- **logging conventions**
- **write 8 bytes, not 0**
- **Update `RttEstimator` from path challenge responses**