chore: retarget upstream portal-tunnel v2.6.3 #113

Merged
ada merged 3 commits from chore/retarget-v2.6.3 into master 2026-10-12 14:18:42 +00:00
Collaborator

Retarget the Rust relay from upstream portal-tunnel v2.6.1 to v2.6.3 (tag commit 52f443635872a577939617509c533e3bbce7dbac). Upstream v2.6.2 is included; tunnel protocol 10 and discovery protocol 9 are unchanged.

Ported relay contract (v2.6.2)

  • Unnamed default service: an empty identity name now registers. It gets only the address-only canonical hostname <40-hex address>.<root>, an empty friendly hostname, and identity key :<address>. The v2.6.3 official CLI omits the name by default, so the previous relay rejected it with name is required.
  • Service names up to 63 characters: names longer than 22 characters enter the canonical label as the first 21 characters of a domain-separated (portal-canonical-name-v1) SHA-256 in lowercase base32, as <hash>--<address>. Canonical labels for names of 22 characters or fewer are byte-identical to v2.6.1.
  • Names that normalize to 40 hex characters, alone or after a final hyphen, are rejected, so friendly and canonical labels stay disjoint. A legacy route hostname may not use another identity's address-only label.
  • Client-reported IPs are stored in canonical form (IPv4-mapped IPv6 is unmapped; zoned or malformed values are dropped), matching SanitizeReportedIP.

The test vectors come from running the upstream v2.6.3 Go functions (CanonicalLeaseHostname, SanitizeReportedIP).

Release metadata

  • Workspace version 2.6.3 (cargo update -p portal-relay --precise 2.6.3 only).
  • Browser WASM/JS assets are retargeted to v2.6.3 and checksum-pinned from the official checksums.txt.
  • The image tag gate accepts the v2.6.3 core and rejects v2.6.0 and v2.6.1.

Not ported (documented in docs/unsupported-features.md)

  • IVNP v0.1.1 pin: the helper keeps the v2.6.0 revision. Overlay stays opt-in and is not deployed.
  • Dual-stack public IP discovery and AAAA sync: Cloudflare A records only.
  • Client-side changes (IPv6 dialing, QUIC address racing, RelayStatus.AliasURL, CLI help) are official-client behavior and are out of scope.

Verification

  • cargo fmt --check
  • cargo clippy --workspace --all-targets --locked -- -D warnings
  • cargo test --workspace --locked: 226 passed, 0 failed, 4 ignored (7 new or updated tests)
  • bash scripts/test-container-image-tag.sh
  • Public live gate to follow on the exact published dev image (v2.6.3, v2.6.1, and v2.6.0 official clients, plus browser/WASM).
Retarget the Rust relay from upstream portal-tunnel v2.6.1 to v2.6.3 (tag commit `52f443635872a577939617509c533e3bbce7dbac`). Upstream v2.6.2 is included; tunnel protocol 10 and discovery protocol 9 are unchanged. ## Ported relay contract (v2.6.2) - Unnamed default service: an empty identity name now registers. It gets only the address-only canonical hostname `<40-hex address>.<root>`, an empty friendly `hostname`, and identity key `:<address>`. The v2.6.3 official CLI omits the name by default, so the previous relay rejected it with `name is required`. - Service names up to 63 characters: names longer than 22 characters enter the canonical label as the first 21 characters of a domain-separated (`portal-canonical-name-v1`) SHA-256 in lowercase base32, as `<hash>--<address>`. Canonical labels for names of 22 characters or fewer are byte-identical to v2.6.1. - Names that normalize to 40 hex characters, alone or after a final hyphen, are rejected, so friendly and canonical labels stay disjoint. A legacy route hostname may not use another identity's address-only label. - Client-reported IPs are stored in canonical form (IPv4-mapped IPv6 is unmapped; zoned or malformed values are dropped), matching `SanitizeReportedIP`. The test vectors come from running the upstream v2.6.3 Go functions (`CanonicalLeaseHostname`, `SanitizeReportedIP`). ## Release metadata - Workspace version 2.6.3 (`cargo update -p portal-relay --precise 2.6.3` only). - Browser WASM/JS assets are retargeted to v2.6.3 and checksum-pinned from the official `checksums.txt`. - The image tag gate accepts the v2.6.3 core and rejects v2.6.0 and v2.6.1. ## Not ported (documented in docs/unsupported-features.md) - IVNP v0.1.1 pin: the helper keeps the v2.6.0 revision. Overlay stays opt-in and is not deployed. - Dual-stack public IP discovery and AAAA sync: Cloudflare A records only. - Client-side changes (IPv6 dialing, QUIC address racing, `RelayStatus.AliasURL`, CLI help) are official-client behavior and are out of scope. ## Verification - `cargo fmt --check` - `cargo clippy --workspace --all-targets --locked -- -D warnings` - `cargo test --workspace --locked`: 226 passed, 0 failed, 4 ignored (7 new or updated tests) - `bash scripts/test-container-image-tag.sh` - Public live gate to follow on the exact published dev image (v2.6.3, v2.6.1, and v2.6.0 official clients, plus browser/WASM).
Port the upstream v2.6.2 registration contract: an empty service name
registers the address-only default service, names longer than 22
characters enter the canonical label as a domain-separated base32
SHA-256 prefix, names shaped like canonical labels are rejected, and
client-reported IPs are stored in canonical form.
test(ivnp): probe helper liveness with kill -0 instead of setuid ps
All checks were successful
Rust CI / Format, lint, and test (pull_request) Successful in 3m50s
Rust CI / Build and start linux/arm64 image (no push) (pull_request) Successful in 3m40s
5a576df3ee
The release driver runs tests inside the dev sandbox, which cannot exec
setuid binaries, so /bin/ps failed and every reaping test misread a live
helper as exited.
ada merged commit 3b7e5c0900 into master 2026-10-12 14:18:42 +00:00
ada deleted branch chore/retarget-v2.6.3 2026-10-12 14:18:42 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
gofix/portal-tunnel-rs!113
No description provided.