diff --git a/Cargo.lock b/Cargo.lock index 14ff99c..170a0f9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -593,7 +593,6 @@ checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", - "futures-executor", "futures-io", "futures-sink", "futures-task", @@ -616,17 +615,6 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" -[[package]] -name = "futures-executor" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - [[package]] name = "futures-io" version = "0.3.31" @@ -1019,9 +1007,8 @@ dependencies = [ "futures", "libc", "log", - "nix 0.30.1", + "nix", "rand", - "rtnetlink", "tokio", ] @@ -1052,7 +1039,7 @@ dependencies = [ "netlink-packet-route", "netlink-sys", "nftables", - "nix 0.30.1", + "nix", "once_cell", "prost", "rand", @@ -1090,20 +1077,6 @@ dependencies = [ "netlink-packet-core", ] -[[package]] -name = "netlink-proto" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b65d130ee111430e47eed7896ea43ca693c387f097dd97376bffafbf25812128" -dependencies = [ - "bytes", - "futures", - "log", - "netlink-packet-core", - "netlink-sys", - "thiserror 2.0.17", -] - [[package]] name = "netlink-sys" version = "0.8.7" @@ -1111,10 +1084,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" dependencies = [ "bytes", - "futures", "libc", "log", - "tokio", ] [[package]] @@ -1129,19 +1100,7 @@ dependencies = [ "serde_path_to_error", "strum", "strum_macros", - "thiserror 2.0.17", -] - -[[package]] -name = "nix" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" -dependencies = [ - "bitflags", - "cfg-if", - "cfg_aliases", - "libc", + "thiserror", ] [[package]] @@ -1492,23 +1451,6 @@ version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" -[[package]] -name = "rtnetlink" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08fd15aa4c64c34d0b3178e45ec6dad313a9f02b193376d501668a7950264bb7" -dependencies = [ - "futures", - "log", - "netlink-packet-core", - "netlink-packet-route", - "netlink-proto", - "netlink-sys", - "nix 0.29.0", - "thiserror 1.0.69", - "tokio", -] - [[package]] name = "rustix" version = "1.1.3" @@ -1743,33 +1685,13 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "thiserror" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" -dependencies = [ - "thiserror-impl 1.0.69", -] - [[package]] name = "thiserror" version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" dependencies = [ - "thiserror-impl 2.0.17", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" -dependencies = [ - "proc-macro2", - "quote", - "syn", + "thiserror-impl", ] [[package]] @@ -2320,7 +2242,7 @@ dependencies = [ "futures-core", "futures-lite", "hex", - "nix 0.30.1", + "nix", "ordered-stream", "serde", "serde_repr", diff --git a/Cargo.toml b/Cargo.toml index e81e5dd..d181860 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -55,7 +55,7 @@ tokio-stream = { version = "0.1.18", features = ["net"] } tonic = "0.14.2" tonic-prost = "0.14.2" prost = "0.14.1" -mozim = "0.3.1" +mozim = { version = "0.3.1", default-features = false } futures-channel = "0.3.31" futures-core = "0.3.31" futures-util = "0.3.31" diff --git a/src/dhcp_proxy/dhcp_service.rs b/src/dhcp_proxy/dhcp_service.rs index 2acdf31..97a84c4 100644 --- a/src/dhcp_proxy/dhcp_service.rs +++ b/src/dhcp_proxy/dhcp_service.rs @@ -1,6 +1,9 @@ use std::{net::Ipv4Addr, sync::Arc}; -use crate::network::netlink_route::{LinkID, Route}; +use crate::network::{ + netlink, + netlink_route::{LinkID, NetlinkRoute, Route}, +}; use log::debug; use mozim::{DhcpV4Client, DhcpV4Config, DhcpV4Lease as MozimV4Lease, DhcpV4State}; use tokio::sync::Mutex; @@ -54,6 +57,14 @@ impl DhcpV4Service { .map_err(|e| DhcpServiceError::new(InvalidArgument, e.to_string()))?; config.set_timeout_sec(timeout); + let mut socket = netlink::Socket::::new() + .map_err(|e| DhcpServiceError::new(InvalidArgument, e.to_string()))?; + let link = socket + .get_link(LinkID::Name(nc.host_iface.clone())) + .map_err(|e| DhcpServiceError::new(InvalidArgument, e.to_string()))?; + + config.set_iface_index(link.header.index); + // Sending the hostname to the DHCP server is optional but it can be // useful in environments where DDNS is used to create or update // DNS records.