From f2c5265a3ac99c9ae861492b768751bf4833155b Mon Sep 17 00:00:00 2001 From: Paul Holzinger Date: Thu, 11 Dec 2025 15:07:29 +0100 Subject: [PATCH] mozim: do not use netlink feature mozim uses rtnetlink which we do not otherwise. All mozim uses it for is to get the interface index which can lookup easily ourselves. This saves about 500KB in binary size. Signed-off-by: Paul Holzinger --- Cargo.lock | 88 ++-------------------------------- Cargo.toml | 2 +- src/dhcp_proxy/dhcp_service.rs | 13 ++++- 3 files changed, 18 insertions(+), 85 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 208a072..26c0017 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.2" @@ -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 0939fe0..b55808d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -55,7 +55,7 @@ tokio-stream = { version = "0.1.17", 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.