diff options
| author | Joakim Hulthe <joakim.hulthe@mullvad.net> | 2025-09-09 16:04:56 +0200 |
|---|---|---|
| committer | Joakim Hulthe <joakim.hulthe@mullvad.net> | 2025-09-09 16:04:56 +0200 |
| commit | efca82e53a62237fb7fe327ad24e9dc2ae50ddeb (patch) | |
| tree | e0e4e35cf0976ed5fa2b7a830acd5a33f274f91d | |
| parent | d9f3c505ced31576d597d8fb2df8dfded2b86ddb (diff) | |
| parent | df42fa5e6390dd9aa9d08d78b8912f4e25fd3cf5 (diff) | |
| download | mullvadvpn-efca82e53a62237fb7fe327ad24e9dc2ae50ddeb.tar.xz mullvadvpn-efca82e53a62237fb7fe327ad24e9dc2ae50ddeb.zip | |
Merge branch 'ttcc-nix'
| -rw-r--r-- | Cargo.lock | 2 | ||||
| -rw-r--r-- | talpid-tunnel-config-client/Cargo.toml | 2 | ||||
| -rw-r--r-- | talpid-tunnel-config-client/src/socket.rs | 29 |
3 files changed, 8 insertions, 25 deletions
diff --git a/Cargo.lock b/Cargo.lock index a65ec04157..eb876b6dfb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5814,9 +5814,9 @@ name = "talpid-tunnel-config-client" version = "0.0.0" dependencies = [ "hyper-util", - "libc", "log", "ml-kem", + "nix 0.30.1", "oslog", "pqcrypto-hqc", "pqcrypto-traits", diff --git a/talpid-tunnel-config-client/Cargo.toml b/talpid-tunnel-config-client/Cargo.toml index 5fe9bbab10..42b8d777b0 100644 --- a/talpid-tunnel-config-client/Cargo.toml +++ b/talpid-tunnel-config-client/Cargo.toml @@ -29,7 +29,7 @@ sha2 = { workspace = true } zeroize = "1.5.7" [target.'cfg(unix)'.dependencies] -libc = "0.2" +nix = { workspace = true, features = ["socket"] } [target.'cfg(windows)'.dependencies.windows-sys] workspace = true diff --git a/talpid-tunnel-config-client/src/socket.rs b/talpid-tunnel-config-client/src/socket.rs index 3d1e32bd98..0863662c67 100644 --- a/talpid-tunnel-config-client/src/socket.rs +++ b/talpid-tunnel-config-client/src/socket.rs @@ -15,9 +15,8 @@ use tokio::net::TcpStream; mod sys { use super::*; - pub use libc::{IPPROTO_TCP, TCP_MAXSEG, setsockopt, socklen_t}; - use std::ffi::c_int; - pub use std::os::fd::AsRawFd; + use nix::sys::socket::{setsockopt, sockopt::TcpMaxSeg}; + use std::os::fd::AsFd; /// MTU to set on the tunnel config client socket. We want a low value to prevent fragmentation. /// Especially on Android, we've found that the real MTU is often lower than the default MTU, and @@ -43,28 +42,12 @@ mod sys { } } - fn try_set_tcp_sock_mtu(sock: &impl AsRawFd) { - let mss = c_int::from(desired_mss()); - + fn try_set_tcp_sock_mtu(sock: &impl AsFd) { + let mss = u32::from(desired_mss()); log::debug!("Tunnel config TCP socket MSS: {mss}"); - - // TODO: replace with nix when TcpMaxSeg is added for macos - // SAFETY: `mss` is a valid pointer to a c_int. - let result = unsafe { - setsockopt( - sock.as_raw_fd(), - IPPROTO_TCP, - TCP_MAXSEG, - &mss as *const _ as _, - socklen_t::try_from(std::mem::size_of_val(&mss)).unwrap(), - ) + if let Err(e) = setsockopt(sock, TcpMaxSeg, &mss) { + log::error!("Failed to set MSS on tunnel config TCP socket: {e}"); }; - if result != 0 { - log::error!( - "Failed to set MSS on tunnel config TCP socket: {}", - std::io::Error::last_os_error() - ); - } } const fn desired_mss() -> u16 { |
