From 22eee048d078254c7a7fe30fb454b6e589fb9fb2 Mon Sep 17 00:00:00 2001 From: lbl <1791778603@qq.com> Date: Sat, 19 Jul 2025 22:10:53 +0800 Subject: [PATCH] Use the latest version of tun-rs --- Cargo.lock | 125 +++++------------------------ vnt/Cargo.toml | 6 +- vnt/src/handle/tun_tap/platform.rs | 11 ++- 3 files changed, 28 insertions(+), 114 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3a3c98e..3112354 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -88,30 +88,6 @@ version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" -[[package]] -name = "async-channel" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" -dependencies = [ - "concurrent-queue", - "event-listener-strategy", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-task" -version = "4.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" - -[[package]] -name = "atomic-waker" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" - [[package]] name = "attohttpc" version = "0.16.3" @@ -224,19 +200,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "blocking" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" -dependencies = [ - "async-channel", - "async-task", - "futures-io", - "futures-lite", - "piper", -] - [[package]] name = "bumpalo" version = "3.19.0" @@ -395,15 +358,6 @@ dependencies = [ "vnt", ] -[[package]] -name = "concurrent-queue" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "console" version = "0.15.11" @@ -636,27 +590,6 @@ dependencies = [ "windows-sys 0.60.2", ] -[[package]] -name = "event-listener" -version = "5.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" -dependencies = [ - "event-listener", - "pin-project-lite", -] - [[package]] name = "fastrand" version = "2.3.0" @@ -696,22 +629,6 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" -[[package]] -name = "futures-io" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" - -[[package]] -name = "futures-lite" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" -dependencies = [ - "futures-core", - "pin-project-lite", -] - [[package]] name = "futures-macro" version = "0.3.31" @@ -1082,6 +999,17 @@ dependencies = [ "generic-array", ] +[[package]] +name = "io-uring" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013" +dependencies = [ + "bitflags", + "cfg-if", + "libc", +] + [[package]] name = "ipnet" version = "2.11.0" @@ -1563,12 +1491,6 @@ dependencies = [ "byteorder", ] -[[package]] -name = "parking" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" - [[package]] name = "parking_lot" version = "0.12.4" @@ -1625,17 +1547,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "piper" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" -dependencies = [ - "atomic-waker", - "fastrand", - "futures-io", -] - [[package]] name = "pkcs1" version = "0.7.5" @@ -2423,17 +2334,19 @@ dependencies = [ [[package]] name = "tokio" -version = "1.45.1" +version = "1.46.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" +checksum = "0cc3a2344dafbe23a245241fe8b09735b521110d30fcefbbd5feb1797ca35d17" dependencies = [ "backtrace", "bytes", + "io-uring", "libc", "mio 1.0.4", "parking_lot", "pin-project-lite", "signal-hook-registry", + "slab", "socket2", "tokio-macros", "windows-sys 0.52.0", @@ -2479,12 +2392,11 @@ dependencies = [ [[package]] name = "tun-rs" -version = "2.4.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2ea0d5c871693b7b3129f2d8bb72442ebc0a76fd690faf68c962bc6184c5d81" +checksum = "041ac55a23c02ef3ca62bf41a6a43830119818e07f65805bad27afb93292fc9c" dependencies = [ "bindgen 0.72.0", - "blocking", "byteorder", "bytes", "c2rust-bitfields", @@ -2498,7 +2410,6 @@ dependencies = [ "nix 0.30.1", "route_manager", "scopeguard", - "tokio", "widestring", "windows-sys 0.60.2", "winreg", @@ -2704,7 +2615,7 @@ dependencies = [ "tokio", "tokio-tungstenite", "tun-rs", - "windows-sys 0.59.0", + "windows-sys 0.60.2", "winreg", "zstd", ] diff --git a/vnt/Cargo.toml b/vnt/Cargo.toml index e5589dc..96b8efc 100644 --- a/vnt/Cargo.toml +++ b/vnt/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -tun-rs = { version = "2", optional = true, features = ["async"] } +tun-rs = { version = "2.5.0", optional = true, features = ["interruptible"] } packet = { path = "./packet" } bytes = "1.5.0" log = "0.4.17" @@ -38,7 +38,7 @@ crossbeam-queue = "0.3.11" anyhow = "1.0.82" dns-parser = "0.8.0" -tokio = { version = "1.37.0", features = ["full"] } +tokio = { version = "1.46.1", features = ["full"] } lz4_flex = { version = "0.11", default-features = false, optional = true } zstd = { version = "0.13.1", optional = true } @@ -54,7 +54,7 @@ futures-util = "0.3.30" [target.'cfg(target_os = "windows")'.dependencies] winreg = "0.55.0" libloading = "0.8.0" -windows-sys = { version = "0.59.0", features = ["Win32_Foundation", +windows-sys = { version = "0.60.2", features = ["Win32_Foundation", "Win32_NetworkManagement", "Win32_NetworkManagement_IpHelper", "Win32_Networking_WinSock", diff --git a/vnt/src/handle/tun_tap/platform.rs b/vnt/src/handle/tun_tap/platform.rs index 5411f44..4cdc5d3 100644 --- a/vnt/src/handle/tun_tap/platform.rs +++ b/vnt/src/handle/tun_tap/platform.rs @@ -13,7 +13,7 @@ use parking_lot::Mutex; use std::collections::HashMap; use std::net::Ipv4Addr; use std::sync::Arc; -use tun_rs::SyncDevice; +use tun_rs::{InterruptEvent, SyncDevice}; pub(crate) fn start_simple( stop_manager: StopManager, @@ -29,10 +29,11 @@ pub(crate) fn start_simple( device_stop: DeviceStop, allow_wire_guard: bool, ) -> anyhow::Result<()> { + let event = Arc::new(InterruptEvent::new()?); let worker = { - let device = device.clone(); + let event = event.clone(); stop_manager.add_listener("tun_device".into(), move || { - if let Err(e) = device.shutdown() { + if let Err(e) = event.trigger() { log::warn!("{:?}", e); } })? @@ -50,6 +51,7 @@ pub(crate) fn start_simple( if let Err(e) = start_simple0( context, device, + event, current_device, ip_route, #[cfg(feature = "ip_proxy")] @@ -72,6 +74,7 @@ pub(crate) fn start_simple( fn start_simple0( context: &ChannelContext, device: Arc, + event: Arc, current_device: Arc>, ip_route: ExternalRoute, #[cfg(feature = "ip_proxy")] ip_proxy_map: Option, @@ -84,7 +87,7 @@ fn start_simple0( let mut buf = [0; BUFFER_SIZE]; let mut extend = [0; BUFFER_SIZE]; loop { - let len = device.recv(&mut buf[12..])? + 12; + let len = device.recv_intr(&mut buf[12..],&event)? + 12; // buf是重复利用的,需要重置头部 buf[..12].fill(0); match crate::handle::tun_tap::tun_handler::handle(