Conversation
This reverts commit a68a89a.
dbda584 to
89da514
Compare
b420ff2 to
7cf0ed9
Compare
89da514 to
52a4783
Compare
matheus23
left a comment
There was a problem hiding this comment.
Let's ship this - at the very least for the important bugfix.
Let's discuss changes to code structure later and open another PR for those if need be.
Hmmm. I'm sorry I just reread the PR description again and that's why I'm coming back to this. We should reconsider this (after merging!). We can always change this IMO, that's not a problem, as long as we change this before we do the next breaking change without adding another relay protocol version (and I think we'll always want to use a new protocol version even if we add optional frames). This is contrary to what e.g. QUIC does: If you receive a frame you don't know - that's a protocol violation. We should really think through what this means in various cases again before we do the next protocol change. |
Good point. I think you are right and we should fix that. I'll look into it. |
…ror (#4127) ## Description #3955 added a new relay protocol version. This PR fixes the contract: We should only allow frames that are defined for the negotiated protocol version, and abort if we receive a frame not allowed in the negotiated version. ## Breaking Changes None ## Change checklist - [x] Self-review. - [x] Documentation updates following the [style guide](https://rust-lang.github.io/rfcs/1574-more-api-documentation-conventions.html#appendix-a-full-conventions-text), if relevant. - [x] Tests if relevant. - [x] All breaking changes documented.
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [iroh](https://github.com/n0-computer/iroh) | workspace.dependencies | minor | `0.97.0` → `0.98.0` | --- ### Release Notes <details> <summary>n0-computer/iroh (iroh)</summary> ### [`v0.98.0`](https://github.com/n0-computer/iroh/blob/HEAD/CHANGELOG.md#0980---2026-04-17) [Compare Source](n0-computer/iroh@v0.97.0...v0.98.0) ##### ⛰️ Features - *(iroh)* Avoid allocations in `AddrFilter` ([#​4018](n0-computer/iroh#4018)) - ([d26cbd2](n0-computer/iroh@d26cbd2)) - *(iroh)* Pluggable crypto backends ([#​3992](n0-computer/iroh#3992)) - ([387c2e4](n0-computer/iroh@387c2e4)) - *(iroh)* Add ability to configure external addrs ([#​4098](n0-computer/iroh#4098)) - ([372aab9](n0-computer/iroh@372aab9)) - *(iroh)* Do not advertise deprecated IPv6 addrs ([#​4106](n0-computer/iroh#4106)) - ([b2b1d46](n0-computer/iroh@b2b1d46)) - *(iroh-relay)* Expose more metrics on the relay server ([#​4085](n0-computer/iroh#4085)) - ([ee844a6](n0-computer/iroh@ee844a6)) - Expose the new fn decrypt on noq. ([#​4002](n0-computer/iroh#4002)) - ([197d8db](n0-computer/iroh@197d8db)) - Update noq and net-tools to latest ([#​4088](n0-computer/iroh#4088)) - ([159a5cf](n0-computer/iroh@159a5cf)) - Rate limiting in router ([#​3951](n0-computer/iroh#3951)) - ([ea7a634](n0-computer/iroh@ea7a634)) - Update relay protocol to iroh-relay-v2, add new Health frame, test protocol update mechanism ([#​3955](n0-computer/iroh#3955)) - ([0a22d76](n0-computer/iroh@0a22d76)) - Update to noq\@​0.18 ([#​4121](n0-computer/iroh#4121)) - ([72e4538](n0-computer/iroh@72e4538)) - Vendor pkarr implementation ([#​4026](n0-computer/iroh#4026)) - ([3ab6222](n0-computer/iroh@3ab6222)) ##### 🐛 Bug Fixes - *(ci)* Install cmake and nasm for aws-lc-sys on Windows ([#​4032](n0-computer/iroh#4032)) - ([405de1d](n0-computer/iroh@405de1d)) - *(iroh)* \[**breaking**] Faster relay health check after network change ([#​4041](n0-computer/iroh#4041)) - ([b11b0eb](n0-computer/iroh@b11b0eb)) - *(iroh)* `Endpoint::online` should only return once connected to a relay ([#​4115](n0-computer/iroh#4115)) - ([3424c6d](n0-computer/iroh@3424c6d)) - *(iroh)* \[**breaking**] Don't stop address lookup when one service errors ([#​4126](n0-computer/iroh#4126)) - ([321443d](n0-computer/iroh@321443d)) - *(iroh)* Don't falsely report home relay as connected on change ([#​4136](n0-computer/iroh#4136)) - ([1b04d34](n0-computer/iroh@1b04d34)) - *(iroh-relay)* Send EndpointGone message to the right peers ([#​4079](n0-computer/iroh#4079)) - ([6be4b3c](n0-computer/iroh@6be4b3c)) - *(iroh-relay)* Treat frames not allowed in a protocol version as error ([#​4127](n0-computer/iroh#4127)) - ([1c92a39](n0-computer/iroh@1c92a39)) - Improve holepunching after network changes ([#​3928](n0-computer/iroh#3928)) - ([cc21f51](n0-computer/iroh@cc21f51)) - Poll for default route with exponential backoff after network change ([#​4039](n0-computer/iroh#4039)) - ([dc01a77](n0-computer/iroh@dc01a77)) - Modify test\_ip\_wins\_over\_custom so it is a noop if no ip transport is… ([#​4048](n0-computer/iroh#4048)) - ([b141e02](n0-computer/iroh@b141e02)) - Increase path idle timeouts and configure relay paths ([#​4038](n0-computer/iroh#4038)) - ([eba6afc](n0-computer/iroh@eba6afc)) - Handle wine properly ([#​3902](n0-computer/iroh#3902)) - ([8bf7002](n0-computer/iroh@8bf7002)) - Set default crypto provider for iroh-relay binary ([#​4087](n0-computer/iroh#4087)) - ([2433645](n0-computer/iroh@2433645)) ##### 🚜 Refactor - *(iroh)* \[**breaking**] Improve address lookup registry ([#​4130](n0-computer/iroh#4130)) - ([481c870](n0-computer/iroh@481c870)) - *(iroh, iroh-relay)* \[**breaking**] Mark public types as non\_exhaustive ([#​4107](n0-computer/iroh#4107)) - ([86d3ac6](n0-computer/iroh@86d3ac6)) - *(iroh-base)* \[**breaking**] Don't expose third-party error types in iroh-base ([#​4073](n0-computer/iroh#4073)) - ([d803dfe](n0-computer/iroh@d803dfe)) - *(iroh-base)* \[**breaking**] Rename `CustomAddr::as_vec` to `CustomAddr::to_vec` and improve docs ([#​4074](n0-computer/iroh#4074)) - ([3077f17](n0-computer/iroh@3077f17)) - *(iroh-base)* \[**breaking**] Change `SecretKey::generate` to not take an `Rng` arg ([#​4075](n0-computer/iroh#4075)) - ([36781ad](n0-computer/iroh@36781ad)) - *(iroh-relay)* \[**breaking**] Proper timeouts on relay connections ([#​4083](n0-computer/iroh#4083)) - ([79bb0e4](n0-computer/iroh@79bb0e4)) - Use latest noq api ([#​4057](n0-computer/iroh#4057)) - ([8af8370](n0-computer/iroh@8af8370)) - Remove needless alloc in relay server ([#​4084](n0-computer/iroh#4084)) - ([40b50a1](n0-computer/iroh@40b50a1)) - Move to\_z32/from\_z32 into iroh-base and remove EndpointIdExt trait ([#​4133](n0-computer/iroh#4133)) - ([382bf36](n0-computer/iroh@382bf36)) ##### 🧪 Testing - *(iroh)* Add patchbay test matrix for switching uplinks ([#​4095](n0-computer/iroh#4095)) - ([d72f1cb](n0-computer/iroh@d72f1cb)) - *(iroh)* Add more patchbay tests and improve existing tests ([#​4118](n0-computer/iroh#4118)) - ([f5ec24a](n0-computer/iroh@f5ec24a)) - *(iroh)* Improve patchbay NAT matrix ([#​4135](n0-computer/iroh#4135)) - ([2ad657a](n0-computer/iroh@2ad657a)) - Fix ip\_wins\_over\_custom flakiness ([#​4047](n0-computer/iroh#4047)) - ([174b58b](n0-computer/iroh@174b58b)) - Add patchbay tests ([#​3986](n0-computer/iroh#3986)) - ([2ab1240](n0-computer/iroh@2ab1240)) - Improve patchbay test setup ([#​4078](n0-computer/iroh#4078)) - ([9b01751](n0-computer/iroh@9b01751)) - Minor patchbay test improvements ([#​4091](n0-computer/iroh#4091)) - ([0cc2441](n0-computer/iroh@0cc2441)) ##### ⚙️ Miscellaneous Tasks - *(ci)* Move more CI jobs to self hosted runners ([#​4072](n0-computer/iroh#4072)) - ([54442c3](n0-computer/iroh@54442c3)) - *(iroh)* Update hickory to 0.26.0-beta.4 and use exact-version deps for prereleased crates ([#​4117](n0-computer/iroh#4117)) - ([f829593](n0-computer/iroh@f829593)) - *(iroh-bench)* Allow configuring the number of worker threads for each endpoint in iroh-bench ([#​4063](n0-computer/iroh#4063)) - ([065b448](n0-computer/iroh@065b448)) - Update to netwatch\@​0.16 and portmapper\@​0.16 ([#​4128](n0-computer/iroh#4128)) - ([24efedf](n0-computer/iroh@24efedf)) - Fix changelog generation - ([08c6454](n0-computer/iroh@08c6454)) ##### Deps - *(iroh)* Update patchbay to 0.5 ([#​4097](n0-computer/iroh#4097)) - ([811a062](n0-computer/iroh@811a062)) - Bump noq and net-tools ([#​4113](n0-computer/iroh#4113)) - ([184e378](n0-computer/iroh@184e378)) ##### Examples - *(iroh)* Allow to configure the receive window in the transfer example ([#​4082](n0-computer/iroh#4082)) - ([c865251](n0-computer/iroh@c865251)) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJ0eXBlL21pbm9yIl19--> Reviewed-on: https://git.erwanleboucher.dev/eleboucher/towonel/pulls/19
Description
This branch add a
iroh-relay-v2protocol. The only changes to theiroh-relay-v1protocol are:Healthframe (id 11) with string payloadStatusframe (id 13) with binary-encoded enum payload that can be extended with further variants or payloadsThe actual change is thus quite minor, but serves as a real-world test for our protocol negotiation.
The PR also fixes a bug in how the relay server parsed the supported protocols; it is harmless because all existing deployments support a single version anyway, but good to fix now.
Everything is fully backwards-compatible on the wire (old clients can talk to new relays, and new clients can talk to old relays).
Breaking Changes
iroh_relay::http::RELAY_PROTOCOL_VERSIONhas been removed. The relay protocol now supports version negotiation between client and server. Useiroh_relay::http::ProtocolVersioninstead. For the previous constant value, useProtocolVersion::V1.to_str().iroh_relay::server::client::Confighas a new fieldprotocol_version: ProtocolVersion.iroh_relay::protos::relay::RelayToClientMsghas a newStatus(Status)variant and the existingHealthvariant is deprecated. Clients should handleRelayToClientMsg::Statusfor connection health information. TheHealthvariant is still sent by V1 relay servers but should not be relied upon going forward.Notes & open questions
Change checklist