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 | |
parent | c8e9098e4053deb4d2b6f184ea113afb003f0184 (diff) |
move from linkaddrs to netlinklib
-rw-r--r-- | Cargo.lock | 19 | ||||
-rw-r--r-- | Cargo.toml | 5 | ||||
-rw-r--r-- | src/error.rs | 2 | ||||
-rw-r--r-- | src/main.rs | 10 | ||||
-rw-r--r-- | src/util.rs | 21 |
5 files changed, 25 insertions, 32 deletions
@@ -304,18 +304,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" [[package]] -name = "linkaddrs" -version = "0.1.0" -source = "git+https://github.com/HimbeerserverDE/linkaddrs.git#df47e5f96a680f8052ab238e985d683df386368b" -dependencies = [ - "futures", - "ipnet", - "netlink-packet-route", - "rtnetlink", - "tokio", -] - -[[package]] name = "log" version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -543,12 +531,11 @@ dependencies = [ [[package]] name = "rsdsl_dhcp4d" -version = "0.2.3" +version = "0.2.4" dependencies = [ "dhcproto", "ipnet", "libc", - "linkaddrs", "rand", "rsdsl_netlinklib", "serde", @@ -561,8 +548,8 @@ dependencies = [ [[package]] name = "rsdsl_netlinklib" -version = "0.2.1" -source = "git+https://github.com/rsdsl/netlinklib.git#e90ee46c1aeb83973da25e9b104c896baddc475d" +version = "0.3.0" +source = "git+https://github.com/rsdsl/netlinklib.git#2c20dc2932696cb87ea7e6eb5327b7dccf0e9b1b" dependencies = [ "futures", "libc", @@ -1,6 +1,6 @@ [package] name = "rsdsl_dhcp4d" -version = "0.2.3" +version = "0.2.4" authors = ["HimbeerserverDE <himbeerserverde@gmail.com>"] license = "MIT" edition = "2021" @@ -11,9 +11,8 @@ edition = "2021" dhcproto = "0.8.0" ipnet = "2.7.1" libc = "0.2" -linkaddrs = { git = "https://github.com/HimbeerserverDE/linkaddrs.git", version = "0.1.0" } rand = "0.8.5" -rsdsl_netlinklib = { git = "https://github.com/rsdsl/netlinklib.git", version = "0.2.1", default-features = false, features = ["blocking", "status"] } +rsdsl_netlinklib = { git = "https://github.com/rsdsl/netlinklib.git", version = "0.3.0", default-features = false, features = ["addr", "blocking", "status"] } serde = "1.0" serde_derive = "1.0" serde_json = "1.0" 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)] |