aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2023-11-17 18:21:48 +0100
committerHimbeerserverDE <himbeerserverde@gmail.com>2023-11-17 18:21:48 +0100
commita11f7c5a0cf3ffa816e433b2c844e0c9abf2ab03 (patch)
tree95b2ace747b1e3148121ac89b4c06f743bc45b09
parentc8e9098e4053deb4d2b6f184ea113afb003f0184 (diff)
move from linkaddrs to netlinklib
-rw-r--r--Cargo.lock19
-rw-r--r--Cargo.toml5
-rw-r--r--src/error.rs2
-rw-r--r--src/main.rs10
-rw-r--r--src/util.rs21
5 files changed, 25 insertions, 32 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 7b0abf2..e0b3023 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -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",
diff --git a/Cargo.toml b/Cargo.toml
index 9274036..412f305 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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)]