From 6c13d3cb23e280fadcac2b172ad88666228b619e Mon Sep 17 00:00:00 2001 From: Andrew Chen Date: Tue, 1 Sep 2026 15:26:52 -0700 Subject: [PATCH 1/3] Rebase the iroh backpressure fork onto v1.1.0; noq-proto 1.2.0 Upstream iroh v1.1.0 still drops a transmit when the transport returns Pending (transports.rs is byte-identical to v1.0.3 there), so the fork is still required. The single fork commit is cherry-picked onto v1.1.0 as branch ezvpn-send-backpressure-1.1.0. noq-proto moves to 1.2.0 to match iroh 1.1.0 so the lockfile carries one copy of the noq crates. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_016bFY7oe5SzmhaKxy3TTo3y --- Cargo.lock | 115 +++++++++++++++++++++++++++++++++++++++-------------- Cargo.toml | 6 +-- 2 files changed, 88 insertions(+), 33 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6d1aa0e..f584eb5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1652,8 +1652,8 @@ dependencies = [ [[package]] name = "iroh" -version = "1.0.3" -source = "git+https://github.com/andrewtheguy/iroh.git?branch=ezvpn-send-backpressure-1.0.3#df40a97deb8f765dc990df9fd534414650e1f433" +version = "1.1.0" +source = "git+https://github.com/andrewtheguy/iroh.git?branch=ezvpn-send-backpressure-1.1.0#dfaa3ba8f2ecfe6d2bb57b55e956917bfcdda9a5" dependencies = [ "backon", "blake3", @@ -1702,8 +1702,8 @@ dependencies = [ [[package]] name = "iroh-base" -version = "1.0.3" -source = "git+https://github.com/andrewtheguy/iroh.git?branch=ezvpn-send-backpressure-1.0.3#df40a97deb8f765dc990df9fd534414650e1f433" +version = "1.1.0" +source = "git+https://github.com/andrewtheguy/iroh.git?branch=ezvpn-send-backpressure-1.1.0#dfaa3ba8f2ecfe6d2bb57b55e956917bfcdda9a5" dependencies = [ "curve25519-dalek", "data-encoding", @@ -1720,8 +1720,8 @@ dependencies = [ [[package]] name = "iroh-dns" -version = "1.0.3" -source = "git+https://github.com/andrewtheguy/iroh.git?branch=ezvpn-send-backpressure-1.0.3#df40a97deb8f765dc990df9fd534414650e1f433" +version = "1.1.0" +source = "git+https://github.com/andrewtheguy/iroh.git?branch=ezvpn-send-backpressure-1.1.0#dfaa3ba8f2ecfe6d2bb57b55e956917bfcdda9a5" dependencies = [ "arc-swap", "cfg_aliases", @@ -1770,8 +1770,8 @@ dependencies = [ [[package]] name = "iroh-relay" -version = "1.0.3" -source = "git+https://github.com/andrewtheguy/iroh.git?branch=ezvpn-send-backpressure-1.0.3#df40a97deb8f765dc990df9fd534414650e1f433" +version = "1.1.0" +source = "git+https://github.com/andrewtheguy/iroh.git?branch=ezvpn-send-backpressure-1.1.0#dfaa3ba8f2ecfe6d2bb57b55e956917bfcdda9a5" dependencies = [ "blake3", "bytes", @@ -2162,9 +2162,9 @@ dependencies = [ "libc", "mac-addr", "ndk-context", - "netlink-packet-core", - "netlink-packet-route", - "netlink-sys", + "netlink-packet-core 0.8.1", + "netlink-packet-route 0.31.0", + "netlink-sys 0.8.8", "objc2", "objc2-core-foundation", "objc2-core-wlan", @@ -2175,6 +2175,30 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "netdev" +version = "0.46.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4db4135b187ddae3b6813c4f9d9ac9d5181859fa6a08b4e006c63a130974ed62" +dependencies = [ + "block2", + "dispatch2", + "dlopen2", + "ipnet", + "jni 0.21.1", + "libc", + "mac-addr", + "ndk-context", + "netlink-packet-core 0.9.0", + "netlink-packet-route 0.33.0", + "netlink-sys 0.9.0", + "objc2-core-foundation", + "objc2-system-configuration", + "once_cell", + "plist", + "windows-sys 0.61.2", +] + [[package]] name = "netlink-packet-core" version = "0.8.1" @@ -2184,6 +2208,12 @@ dependencies = [ "paste", ] +[[package]] +name = "netlink-packet-core" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d6e2daf9a8c2e21302714706860a0e6be02e03d17294ecc66b354ea7d4059dd" + [[package]] name = "netlink-packet-route" version = "0.31.0" @@ -2193,7 +2223,20 @@ dependencies = [ "bitflags", "libc", "log", - "netlink-packet-core", + "netlink-packet-core 0.8.1", +] + +[[package]] +name = "netlink-packet-route" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59d48ffc8b73a506e1ff0878528c72668f2bfbc3d875b6be890a96be5d0d5576" +dependencies = [ + "bitflags", + "libc", + "log", + "netlink-packet-core 0.9.0", + "zerocopy", ] [[package]] @@ -2205,8 +2248,8 @@ dependencies = [ "bytes", "futures", "log", - "netlink-packet-core", - "netlink-sys", + "netlink-packet-core 0.8.1", + "netlink-sys 0.8.8", "thiserror 2.0.18", ] @@ -2223,11 +2266,22 @@ dependencies = [ "tokio", ] +[[package]] +name = "netlink-sys" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c99d38e00b420df49e940fe0826e667c3dad82ac68eb4c2bbf754c1c14a83a10" +dependencies = [ + "bytes", + "libc", + "log", +] + [[package]] name = "netwatch" -version = "0.19.1" +version = "0.19.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d9cbe01741347ef750d743d6690603f5eed8341e679fb51c8e629337aa11976" +checksum = "39da9cad5f23aa43401f09497d3b280e51b5feba115d9ffbf38ca35d6ff95e96" dependencies = [ "atomic-waker", "bytes", @@ -2239,11 +2293,12 @@ dependencies = [ "n0-error", "n0-future", "n0-watcher", - "netdev", - "netlink-packet-core", - "netlink-packet-route", + "netdev 0.45.0", + "netdev 0.46.2", + "netlink-packet-core 0.8.1", + "netlink-packet-route 0.31.0", "netlink-proto", - "netlink-sys", + "netlink-sys 0.8.8", "noq-udp", "objc2-core-foundation", "objc2-system-configuration", @@ -2274,9 +2329,9 @@ dependencies = [ [[package]] name = "noq" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e11803df44ac03a30988d61585ea50885d5428e42da944fe1e498799da7886a2" +checksum = "f1e6c57353d26be91a242f0ec96073066c4481a03f6be874daafb18902394515" dependencies = [ "bytes", "cfg_aliases", @@ -2296,9 +2351,9 @@ dependencies = [ [[package]] name = "noq-proto" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "334c3c9833f7b2c573cceb9896ddc7aaeb58c8807cbb63211b24d1fe88bf866e" +checksum = "9a46813e306c29c4f86357b6ffa39a8e1c97bb274b9a296a19a56d62e4111225" dependencies = [ "aes-gcm", "bytes", @@ -2324,9 +2379,9 @@ dependencies = [ [[package]] name = "noq-udp" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde7a5d5102f1cff03d482240f0ed20551661f63663620f4b26112ed751165e9" +checksum = "b56d621ed2c1773b5356ab39cc68c819f8d0103f7493d8661c4a5f5f8ea55f40" dependencies = [ "cfg_aliases", "libc", @@ -2667,9 +2722,9 @@ dependencies = [ [[package]] name = "portmapper" -version = "0.19.1" +version = "0.19.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3713e4977408279158444a18c1a01ac9bf2e7eaf1fbfd1a19ac9cd18d90721" +checksum = "ca97242f016e090a25330613bc2382aab65eb22f9149dbe84d8f8e711d49a530" dependencies = [ "base64", "bytes", @@ -3268,9 +3323,9 @@ checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" [[package]] name = "simple-dns" -version = "0.11.3" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a75cbde1bf934313596a004973e462f9a82caa814dcf1a5f507bdf51597eeb4" +checksum = "2b6f884fa9a8d48101774bfbd3aeb81e968dd22cffd19a372da69f183db22c1a" dependencies = [ "bitflags", ] diff --git a/Cargo.toml b/Cargo.toml index 2ffe4f3..23578d4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,11 +31,11 @@ etherparse = "0.20" flexaccess-keys = { git = "https://github.com/flexaccessdev/flexaccess-keys", tag = "v0.0.2", default-features = false } futures = "0.3" ipnet = { version = "2", features = ["serde"] } -# Forked from iroh v1.0.3. This branch preserves established-path transport +# Forked from iroh v1.1.0. This branch preserves established-path transport # backpressure so noq retains and retries the transmit instead of treating a # local discard as successful. Cargo.lock pins the tested branch commit. -iroh = { version = "=1.0.3", git = "https://github.com/andrewtheguy/iroh.git", branch = "ezvpn-send-backpressure-1.0.3" } -noq-proto = "1.1.0" +iroh = { version = "=1.1.0", git = "https://github.com/andrewtheguy/iroh.git", branch = "ezvpn-send-backpressure-1.1.0" } +noq-proto = "1.2.0" n0-watcher = "1.0.0" log = "0.4" libc = "0.2" From af38ca1bffa8d6b4c77431eaef518692eca62d27 Mon Sep 17 00:00:00 2001 From: Andrew Chen Date: Tue, 1 Sep 2026 15:28:44 -0700 Subject: [PATCH 2/3] Use as_chunks in the checksum byte adder (clippy 1.98) Rust 1.98's clippy flags chunks_exact with a constant size (chunks_exact_to_as_chunks); CI on main was red on this since the "update" commit. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_016bFY7oe5SzmhaKxy3TTo3y --- src/tunnel/offload.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/tunnel/offload.rs b/src/tunnel/offload.rs index 78b9cef..a224b3b 100644 --- a/src/tunnel/offload.rs +++ b/src/tunnel/offload.rs @@ -863,11 +863,11 @@ fn tcp_checksum_ipv6(packet: &[u8], tcp_offset: usize) -> Result { } fn add_bytes(mut sum: u32, bytes: &[u8]) -> u32 { - let mut chunks = bytes.chunks_exact(2); - for chunk in &mut chunks { - sum = sum.wrapping_add(u32::from(u16::from_be_bytes([chunk[0], chunk[1]]))); + let (chunks, remainder) = bytes.as_chunks::<2>(); + for chunk in chunks { + sum = sum.wrapping_add(u32::from(u16::from_be_bytes(*chunk))); } - if let [last] = chunks.remainder() { + if let [last] = remainder { sum = sum.wrapping_add(u32::from(u16::from_be_bytes([*last, 0]))); } sum From a39e3f555f0a2e4ba647736abfd33b8652749a3d Mon Sep 17 00:00:00 2001 From: Andrew Chen Date: Tue, 1 Sep 2026 15:26:54 -0700 Subject: [PATCH 3/3] Bump version to 0.0.44 Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_016bFY7oe5SzmhaKxy3TTo3y --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f584eb5..3d5d698 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -922,7 +922,7 @@ dependencies = [ [[package]] name = "ezvpn" -version = "0.0.43" +version = "0.0.44" dependencies = [ "android_logger", "anyhow", diff --git a/Cargo.toml b/Cargo.toml index 23578d4..67af65e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ezvpn" -version = "0.0.43" +version = "0.0.44" edition = "2024" description = "IP-over-QUIC VPN tunnel via iroh P2P" readme = "README.md"