aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGalen Guyer <galen@galenguyer.com>2023-06-05 12:48:01 -0400
committerGalen Guyer <galen@galenguyer.com>2023-06-05 12:48:01 -0400
commited184057cc9d8414f9e935fd1ce06c087b32023b (patch)
tree8c62c6f22ed1da4b3d80cd2175244a562a0a1030
parent77ae9ab0bec82af5e702590adcdb8a3420125a16 (diff)
wg-rs: add get_device
-rw-r--r--wg-rs/src/lib.rs29
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"));
+ }
}