From cf95ac819c6de0a5ab509c2be7d84aa17bb94f55 Mon Sep 17 00:00:00 2001 From: Conrad Kramer Date: Mon, 8 May 2023 18:23:38 -0400 Subject: [PATCH] Share *RawFd trait implementations on Unix They were previously only present on Apple platforms. --- tun/src/unix/apple/mod.rs | 18 +++--------------- tun/src/unix/mod.rs | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/tun/src/unix/apple/mod.rs b/tun/src/unix/apple/mod.rs index 178ec6a..11a7350 100644 --- a/tun/src/unix/apple/mod.rs +++ b/tun/src/unix/apple/mod.rs @@ -1,11 +1,11 @@ use fehler::throws; use libc::c_char; -use std::net::Ipv4Addr; -use std::os::unix::io::{AsRawFd, IntoRawFd, RawFd}; use std::io::Error; +use std::net::Ipv4Addr; +use std::os::fd::AsRawFd; -mod sys; mod kern_control; +mod sys; pub use super::queue::TunQueue; @@ -62,15 +62,3 @@ impl TunInterface { todo!() } } - -impl AsRawFd for TunInterface { - fn as_raw_fd(&self) -> RawFd { - self.socket.as_raw_fd() - } -} - -impl IntoRawFd for TunInterface { - fn into_raw_fd(self) -> RawFd { - self.socket.into_raw_fd() - } -} diff --git a/tun/src/unix/mod.rs b/tun/src/unix/mod.rs index 615e647..6ee3bf4 100644 --- a/tun/src/unix/mod.rs +++ b/tun/src/unix/mod.rs @@ -1,3 +1,5 @@ +use std::os::fd::{AsRawFd, FromRawFd, IntoRawFd, RawFd}; + mod queue; #[cfg(target_vendor = "apple")] @@ -11,6 +13,25 @@ mod imp; pub use imp::TunInterface; pub use queue::TunQueue; +impl AsRawFd for TunInterface { + fn as_raw_fd(&self) -> RawFd { + self.socket.as_raw_fd() + } +} + +impl FromRawFd for TunInterface { + unsafe fn from_raw_fd(fd: RawFd) -> TunInterface { + TunInterface { + socket: socket2::Socket::from_raw_fd(fd), + } + } +} + +impl IntoRawFd for TunInterface { + fn into_raw_fd(self) -> RawFd { + self.socket.into_raw_fd() + } +} pub fn ifname_to_string(buf: [libc::c_char; libc::IFNAMSIZ]) -> String { // TODO: Switch to `CStr::from_bytes_until_nul` when stabilized unsafe {