diff options
author | Galen Guyer <galen@galenguyer.com> | 2023-06-05 12:48:01 -0400 |
---|---|---|
committer | Galen Guyer <galen@galenguyer.com> | 2023-06-05 12:48:01 -0400 |
commit | ed184057cc9d8414f9e935fd1ce06c087b32023b (patch) | |
tree | 8c62c6f22ed1da4b3d80cd2175244a562a0a1030 | |
parent | 77ae9ab0bec82af5e702590adcdb8a3420125a16 (diff) |
wg-rs: add get_device
-rw-r--r-- | wg-rs/src/lib.rs | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/wg-rs/src/lib.rs b/wg-rs/src/lib.rs index a5ad22e..2885dc2 100644 --- a/wg-rs/src/lib.rs +++ b/wg-rs/src/lib.rs @@ -65,6 +65,30 @@ pub fn key_from_base64(encoded: &str) -> Result<[u8; 32], String> { } } +pub fn get_device(name: &str) -> Result<wg_sys::wg_device, String> { + let cstr = std::ffi::CString::new(name).unwrap(); + let device = Box::new(wg_sys::wg_device { + name: [0i8; 16], + ifindex: 0, + flags: wg_sys::wg_device_flags(0), + listen_port: 0, + fwmark: 0, + public_key: [0u8; 32], + private_key: [0u8; 32], + first_peer: std::ptr::null_mut(), + last_peer: std::ptr::null_mut(), + }); + let devptr = &mut Box::into_raw(device); + let res = unsafe { wg_sys::wg_get_device(devptr, cstr.into_raw()) }; + if res == 0 { + unsafe { + Ok(**devptr) + } + } else { + Err(format!("error getting device (res = {res})")) + } +} + #[cfg(test)] mod tests { use super::*; @@ -74,4 +98,9 @@ mod tests { let key = generate_private_key(); assert!(key_from_base64(&key_to_base64(key)).unwrap() == key); } + + #[test] + fn test_get_device() { + dbg!(get_device("wg0")); + } } |