diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-11-17 18:21:48 +0100 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-11-17 18:21:48 +0100 |
commit | a11f7c5a0cf3ffa816e433b2c844e0c9abf2ab03 (patch) | |
tree | 95b2ace747b1e3148121ac89b4c06f743bc45b09 /src | |
parent | c8e9098e4053deb4d2b6f184ea113afb003f0184 (diff) |
move from linkaddrs to netlinklib
Diffstat (limited to 'src')
-rw-r--r-- | src/error.rs | 2 | ||||
-rw-r--r-- | src/main.rs | 10 | ||||
-rw-r--r-- | src/util.rs | 21 |
3 files changed, 20 insertions, 13 deletions
diff --git a/src/error.rs b/src/error.rs index 1812073..baa97cb 100644 --- a/src/error.rs +++ b/src/error.rs @@ -35,8 +35,6 @@ pub enum Error { DhcprotoDecode(#[from] dhcproto::error::DecodeError), #[error("dhcproto encode error: {0}")] DhcprotoEncode(#[from] dhcproto::error::EncodeError), - #[error("linkaddrs error: {0}")] - LinkAddrs(#[from] linkaddrs::Error), #[error("netlinklib error: {0}")] Netlinklib(#[from] rsdsl_netlinklib::Error), #[error("serde_json error: {0}")] diff --git a/src/main.rs b/src/main.rs index adf61d0..5a9ae42 100644 --- a/src/main.rs +++ b/src/main.rs @@ -112,7 +112,7 @@ fn run(link: String, subnet_id: u8) -> Result<()> { let remote = remote.as_socket_ipv4().unwrap(); - match handle_request(&sock, lease_mgr.clone(), buf, &link) { + match handle_request(&sock, lease_mgr.clone(), buf, link.clone()) { Ok(_) => {} Err(e) => println!("[info] pkt from {} on {}: {}", remote, link, e), } @@ -123,7 +123,7 @@ fn handle_request<T: LeaseManager>( sock: &Socket, lease_mgr: Arc<Mutex<T>>, buf: &[u8], - link: &str, + link: String, ) -> Result<()> { let dst: SocketAddrV4 = "255.255.255.255:68".parse().unwrap(); @@ -159,7 +159,7 @@ fn handle_request<T: LeaseManager>( .persistent_free_address(client_id, hostname) .ok_or(Error::PoolExhausted)?; - let own_addr = local_ip(link)?; + let own_addr = local_ip(link.clone())?; let mut resp = Message::default(); let opts = resp @@ -233,7 +233,7 @@ fn handle_request<T: LeaseManager>( }; if !lease_mgr.request(requested_addr, client_id, hostname)? { - let own_addr = local_ip(link)?; + let own_addr = local_ip(link.clone())?; let mut resp = Message::default(); let opts = resp @@ -271,7 +271,7 @@ fn handle_request<T: LeaseManager>( } } else { let lease_time = lease_mgr.lease_time(); - let own_addr = local_ip(link)?; + let own_addr = local_ip(link.clone())?; let mut resp = Message::default(); let opts = resp diff --git a/src/util.rs b/src/util.rs index 687c722..974c273 100644 --- a/src/util.rs +++ b/src/util.rs @@ -2,7 +2,9 @@ use crate::{Error, Result}; use std::ffi::{c_char, c_int}; use std::io; -use std::net::Ipv4Addr; +use std::net::{IpAddr, Ipv4Addr}; + +use rsdsl_netlinklib::blocking::addr; /// Helper macro to execute a system call that returns an `io::Result`. macro_rules! syscall { @@ -25,11 +27,18 @@ pub fn format_client_id(client_id: &[u8]) -> Result<String> { .ok_or(Error::EmptyClientId) } -pub fn local_ip(link: &str) -> Result<Ipv4Addr> { - Ok(linkaddrs::ipv4_addresses(link.to_owned())? - .first() - .ok_or(Error::NoIpv4Addr(link.to_owned()))? - .addr()) +pub fn local_ip(link: String) -> Result<Ipv4Addr> { + addr::get(link.clone())? + .into_iter() + .filter_map(|addr| { + if let IpAddr::V4(v4) = addr { + Some(v4) + } else { + None + } + }) + .next() + .ok_or(Error::NoIpv4Addr(link)) } #[allow(clippy::missing_safety_doc)] |