diff --git a/Apple/Burrow.xcodeproj/project.pbxproj b/Apple/Burrow.xcodeproj/project.pbxproj index f9c7454..ec08d2b 100644 --- a/Apple/Burrow.xcodeproj/project.pbxproj +++ b/Apple/Burrow.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 0B90A6DF2A99BDB300EE4E7F /* NetworkSettingsConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B90A6DE2A99BDB300EE4E7F /* NetworkSettingsConverter.swift */; }; 43AA26D82A10004900F14CE6 /* MenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43AA26D72A10004900F14CE6 /* MenuView.swift */; }; D00AA8972A4669BC005C8102 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00AA8962A4669BC005C8102 /* AppDelegate.swift */; }; D020F65829E4A697002790F6 /* PacketTunnelProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = D020F65729E4A697002790F6 /* PacketTunnelProvider.swift */; }; @@ -46,6 +47,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0B90A6DE2A99BDB300EE4E7F /* NetworkSettingsConverter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkSettingsConverter.swift; sourceTree = ""; }; 43AA26D72A10004900F14CE6 /* MenuView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuView.swift; sourceTree = ""; }; D00AA8962A4669BC005C8102 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; D020F63D29E4A1FF002790F6 /* Identity.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Identity.xcconfig; sourceTree = ""; }; @@ -118,6 +120,7 @@ isa = PBXGroup; children = ( D020F65729E4A697002790F6 /* PacketTunnelProvider.swift */, + 0B90A6DE2A99BDB300EE4E7F /* NetworkSettingsConverter.swift */, D020F65929E4A697002790F6 /* Info.plist */, D020F66729E4A95D002790F6 /* NetworkExtension-iOS.entitlements */, D020F66629E4A95D002790F6 /* NetworkExtension-macOS.entitlements */, @@ -304,6 +307,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 0B90A6DF2A99BDB300EE4E7F /* NetworkSettingsConverter.swift in Sources */, D020F65829E4A697002790F6 /* PacketTunnelProvider.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/Apple/NetworkExtension/NetworkSettingsConverter.swift b/Apple/NetworkExtension/NetworkSettingsConverter.swift new file mode 100644 index 0000000..bf17c55 --- /dev/null +++ b/Apple/NetworkExtension/NetworkSettingsConverter.swift @@ -0,0 +1,56 @@ +// +// NetworkSettingsConverter.swift +// NetworkExtension +// +// Created by Jett Chen on 2023/7/7. +// + +import Foundation +import NetworkExtension + +public struct TunCrateNetworkSettings { + let addr: Int64 + let netmask: Int64 + let mtu: Int32 +} + +extension TunCrateNetworkSettings { + var decodedIPv4Addr: String? { + return decodeIPv4(addr) + } + + var decodedIPv4Netmask: String? { + return decodeIPv4(netmask) + } + + var decodedMTU: Int? { + return mtu >= 0 ? Int(mtu) : nil + } + + private func decodeIPv4(_ addr: Int64) -> String? { + if addr < 0 { + return nil + } + let bytes = ( + UInt8((addr & 0xFF000000) >> 24), + UInt8((addr & 0x00FF0000) >> 16), + UInt8((addr & 0x0000FF00) >> 8), + UInt8(addr & 0x000000FF) + ) + return "\(bytes.0).\(bytes.1).\(bytes.2).\(bytes.3)" + } + + func generateNetworkSettings() -> NEPacketTunnelNetworkSettings { + let neSettings = NEPacketTunnelNetworkSettings() + + if let addr = decodedIPv4Addr, let netmask = decodedIPv4Netmask { + neSettings.ipv4Settings = NEIPv4Settings(addresses: [addr], subnetMasks: [netmask]) + } + if let mtuValue = decodedMTU { + neSettings.mtu = NSNumber(value: mtuValue) + } + return neSettings + } + +} + diff --git a/Apple/NetworkExtension/PacketTunnelProvider.swift b/Apple/NetworkExtension/PacketTunnelProvider.swift index 5ca4e93..540c585 100644 --- a/Apple/NetworkExtension/PacketTunnelProvider.swift +++ b/Apple/NetworkExtension/PacketTunnelProvider.swift @@ -4,7 +4,9 @@ import OSLog class PacketTunnelProvider: NEPacketTunnelProvider { let logger = Logger(subsystem: "com.hackclub.burrow", category: "General") + override func startTunnel(options: [String: NSObject]?, completionHandler: @escaping (Error?) -> Void) { + libburrow.initialize_oslog() let fild = libburrow.retrieve() if fild == -1 { // Not sure if this is the right way to return an error @@ -17,6 +19,8 @@ class PacketTunnelProvider: NEPacketTunnelProvider { completionHandler(err) } logger.info("fd: \(fild)") + let networkSettings = genNetSec(fild: fild) + logger.info("Network Settings: - ipv4:\(networkSettings.ipv4Settings) -mtu: \(networkSettings.mtu)") completionHandler(nil) } @@ -24,6 +28,14 @@ class PacketTunnelProvider: NEPacketTunnelProvider { completionHandler() } + func genNetSec(fild: Int32) -> NEPacketTunnelNetworkSettings { + logger.debug("getting Network settings with fild \(fild) ...") + let settings = libburrow.getNetworkSettings(fild) + logger.debug("genNetSec Called: \n ipv4: \(settings.ipv4_addr) \n netmask: \(settings.ipv4_netmask) \n mtu: \(settings.mtu)") + let tNetworksettings = TunCrateNetworkSettings(addr: settings.ipv4_addr, netmask: settings.ipv4_netmask, mtu: settings.mtu) + return tNetworksettings.generateNetworkSettings() + } + override func handleAppMessage(_ messageData: Data, completionHandler: ((Data?) -> Void)?) { if let handler = completionHandler { handler(messageData) diff --git a/Apple/NetworkExtension/libburrow/libburrow.h b/Apple/NetworkExtension/libburrow/libburrow.h index 1057c90..52eb8aa 100644 --- a/Apple/NetworkExtension/libburrow/libburrow.h +++ b/Apple/NetworkExtension/libburrow/libburrow.h @@ -1 +1,11 @@ +#include int retrieve(); + +typedef struct { + int64_t ipv4_addr; + int64_t ipv4_netmask; + int32_t mtu; +} NetWorkSettings; + +NetWorkSettings getNetworkSettings(int); +void initialize_oslog(); diff --git a/Cargo.lock b/Cargo.lock index 146bbc5..273ec5d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -29,6 +29,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + [[package]] name = "anstream" version = "0.3.2" @@ -84,6 +93,17 @@ version = "1.0.71" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi 0.1.19", + "libc", + "winapi", +] + [[package]] name = "autocfg" version = "1.1.0" @@ -102,6 +122,29 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" +[[package]] +name = "bindgen" +version = "0.59.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bd2a9a458e8f4304c52c43ebb0cfbd520289f8379a52e329a38afda99bf8eb8" +dependencies = [ + "bitflags", + "cexpr", + "clang-sys", + "clap 2.34.0", + "env_logger 0.9.3", + "lazy_static", + "lazycell", + "log", + "peeking_take_while", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "which", +] + [[package]] name = "bindgen" version = "0.65.1" @@ -151,11 +194,14 @@ name = "burrow" version = "0.1.0" dependencies = [ "caps", - "clap", - "env_logger", + "clap 4.3.2", + "env_logger 0.10.0", "log", "nix", "tokio", + "tracing", + "tracing-oslog", + "tracing-subscriber", "tun", ] @@ -246,6 +292,21 @@ dependencies = [ "libloading", ] +[[package]] +name = "clap" +version = "2.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" +dependencies = [ + "ansi_term", + "atty", + "bitflags", + "strsim 0.8.0", + "textwrap", + "unicode-width", + "vec_map", +] + [[package]] name = "clap" version = "4.3.2" @@ -267,7 +328,7 @@ dependencies = [ "anstyle", "bitflags", "clap_lex", - "strsim", + "strsim 0.10.0", ] [[package]] @@ -379,6 +440,19 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "env_logger" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", +] + [[package]] name = "env_logger" version = "0.10.0" @@ -618,6 +692,15 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + [[package]] name = "hermit-abi" version = "0.3.1" @@ -751,7 +834,7 @@ version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" dependencies = [ - "hermit-abi", + "hermit-abi 0.3.1", "libc", "windows-sys 0.48.0", ] @@ -768,7 +851,7 @@ version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" dependencies = [ - "hermit-abi", + "hermit-abi 0.3.1", "io-lifetimes", "rustix", "windows-sys 0.48.0", @@ -832,6 +915,16 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f" +[[package]] +name = "lock_api" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +dependencies = [ + "autocfg", + "scopeguard", +] + [[package]] name = "log" version = "0.4.19" @@ -951,6 +1044,16 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + [[package]] name = "once_cell" version = "1.17.1" @@ -1007,6 +1110,37 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +dependencies = [ + "cfg-if", + "instant", + "libc", + "redox_syscall 0.2.16", + "smallvec", + "winapi", +] + [[package]] name = "password-hash" version = "0.4.2" @@ -1094,6 +1228,15 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags", +] + [[package]] name = "redox_syscall" version = "0.3.5" @@ -1192,6 +1335,12 @@ dependencies = [ "windows-sys 0.42.0", ] +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + [[package]] name = "security-framework" version = "2.9.0" @@ -1277,6 +1426,15 @@ dependencies = [ "digest", ] +[[package]] +name = "sharded-slab" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +dependencies = [ + "lazy_static", +] + [[package]] name = "shlex" version = "1.1.0" @@ -1292,6 +1450,12 @@ dependencies = [ "autocfg", ] +[[package]] +name = "smallvec" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" + [[package]] name = "socket2" version = "0.4.9" @@ -1324,6 +1488,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + [[package]] name = "strsim" version = "0.10.0" @@ -1366,7 +1536,7 @@ checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" dependencies = [ "cfg-if", "fastrand", - "redox_syscall", + "redox_syscall 0.3.5", "rustix", "windows-sys 0.45.0", ] @@ -1380,6 +1550,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + [[package]] name = "thiserror" version = "1.0.40" @@ -1400,6 +1579,16 @@ dependencies = [ "syn 2.0.15", ] +[[package]] +name = "thread_local" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +dependencies = [ + "cfg-if", + "once_cell", +] + [[package]] name = "time" version = "0.3.21" @@ -1496,9 +1685,21 @@ checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ "cfg-if", "pin-project-lite", + "tracing-attributes", "tracing-core", ] +[[package]] +name = "tracing-attributes" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.15", +] + [[package]] name = "tracing-core" version = "0.1.31" @@ -1506,6 +1707,48 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" dependencies = [ "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +dependencies = [ + "lazy_static", + "log", + "tracing-core", +] + +[[package]] +name = "tracing-oslog" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bc58223383423483e4bc056c7e7b3f77bdee924a9d33834112c69ead06dc847" +dependencies = [ + "bindgen 0.59.2", + "cc", + "cfg-if", + "fnv", + "once_cell", + "parking_lot", + "tracing-core", + "tracing-subscriber", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" +dependencies = [ + "nu-ansi-term", + "sharded-slab", + "smallvec", + "thread_local", + "tracing-core", + "tracing-log", ] [[package]] @@ -1519,7 +1762,7 @@ name = "tun" version = "0.1.0" dependencies = [ "anyhow", - "bindgen", + "bindgen 0.65.1", "byteorder", "fehler", "futures", @@ -1588,12 +1831,24 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + [[package]] name = "vcpkg" version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + [[package]] name = "version_check" version = "0.9.4" diff --git a/burrow/Cargo.toml b/burrow/Cargo.toml index c9dd71f..c9338cd 100644 --- a/burrow/Cargo.toml +++ b/burrow/Cargo.toml @@ -12,9 +12,12 @@ tun = { version = "0.1", path = "../tun" } clap = { version = "4.3.2", features = ["derive"] } env_logger = "0.10" log = "0.4" +tracing = "0.1" +tracing-subscriber = "0.3" [target.'cfg(target_os = "linux")'.dependencies] caps = "0.5.5" [target.'cfg(target_vendor = "apple")'.dependencies] nix = { version = "0.26.2" } +tracing-oslog = "0.1" \ No newline at end of file diff --git a/burrow/src/apple/mod.rs b/burrow/src/apple/mod.rs new file mode 100644 index 0000000..065e817 --- /dev/null +++ b/burrow/src/apple/mod.rs @@ -0,0 +1,51 @@ +use std::net::Ipv4Addr; +use std::io::Error; +use std::os::fd::FromRawFd; +use tracing::field::debug; +use tun::TunInterface; +use tracing_oslog::OsLogger; +use tracing_subscriber::layer::SubscriberExt; +use tracing::debug; + +#[repr(C)] +pub struct NetWorkSettings { + ipv4_addr: i64, + ipv4_netmask: i64, + mtu: i32, +} + +fn encode_ipv4_result(res: Result) -> i64 { + match res { + Ok(addr) => u32::from_be(addr.into()) as i64, + Err(_) => -1, + } +} + +impl From for NetWorkSettings { + fn from(value: TunInterface) -> Self { + debug!("Converting TunInterface {} to NetWorkSettings", value.name().unwrap_or("NONEXISTENT".to_string())); + let ipv4_addr = encode_ipv4_result(value.ipv4_addr()); + let ipv4_netmask = encode_ipv4_result(value.netmask()); + let mtu = value.mtu().unwrap_or(-1); + Self { + ipv4_addr, + ipv4_netmask, + mtu, + } + } +} + +#[no_mangle] +pub extern "C" fn initialize_oslog() { + let collector = tracing_subscriber::registry() + .with(OsLogger::new("com.hackclub.burrow", "default")); + tracing::subscriber::set_global_default(collector).unwrap(); + debug!("Initialized oslog tracing in libburrow rust FFI"); +} + +#[no_mangle] +pub extern "C" fn getNetworkSettings(n: i32) -> NetWorkSettings { + debug!("getNetworkSettings called with fd: {}", n); + let iface = unsafe {TunInterface::from_raw_fd(n)}; + iface.into() +} \ No newline at end of file diff --git a/burrow/src/lib.rs b/burrow/src/lib.rs index 687d306..931517d 100644 --- a/burrow/src/lib.rs +++ b/burrow/src/lib.rs @@ -1,13 +1,20 @@ pub mod ensureroot; +#[cfg(target_vendor = "apple")] +mod apple; #[cfg(any(target_os = "linux", target_vendor = "apple"))] use std::{ mem, os::fd::{AsRawFd, FromRawFd}, }; +use std::os::fd::RawFd; +use tracing::debug; use tun::TunInterface; +#[cfg(target_vendor = "apple")] +pub use apple::{NetWorkSettings, getNetworkSettings, initialize_oslog}; + // TODO Separate start and retrieve functions #[cfg(any(target_os = "linux", target_vendor = "apple"))] @@ -15,9 +22,13 @@ use tun::TunInterface; pub extern "C" fn retrieve() -> i32 { let iface2 = (1..100) .filter_map(|i| { + debug!("Getting TunInterface with fd: {:?}", i); let iface = unsafe { TunInterface::from_raw_fd(i) }; match iface.name() { - Ok(_name) => Some(iface), + Ok(name) => { + debug!("Found interface {}", name); + Some(iface) + }, Err(_) => { mem::forget(iface); None @@ -26,7 +37,13 @@ pub extern "C" fn retrieve() -> i32 { }) .next(); match iface2 { - Some(iface) => iface.as_raw_fd(), - None => -1, + Some(iface) => { + debug!("Found interface {:?}", iface.name()); + iface.as_raw_fd() + }, + None => { + debug!("No interface found"); + -1 + } } }