From 523d2a97d94ccd75654c0cb40d57ea320c61b9f1 Mon Sep 17 00:00:00 2001 From: LoGin Date: Thu, 12 Jun 2025 14:22:27 +0800 Subject: [PATCH] =?UTF-8?q?fix(net):=20=E8=A7=A3=E5=86=B3dhcp=E5=81=B6?= =?UTF-8?q?=E5=B0=94=E5=A4=B1=E8=B4=A5=E7=9A=84=E9=97=AE=E9=A2=98=20(#1205?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原因是unified init导致网卡顺序不一样了,原本固定写死id的方式不对.现在改用名称匹配 Signed-off-by: longjin --- kernel/src/net/net_core.rs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/kernel/src/net/net_core.rs b/kernel/src/net/net_core.rs index d066fa4d..42e34aba 100644 --- a/kernel/src/net/net_core.rs +++ b/kernel/src/net/net_core.rs @@ -45,10 +45,17 @@ pub fn net_init() -> Result<(), SystemError> { fn dhcp_query() -> Result<(), SystemError> { let binding = NET_DEVICES.write_irqsave(); - //由于现在os未实现在用户态为网卡动态分配内存,而lo网卡的id最先分配且ip固定不能被分配 - //所以特判取用id为1的网卡(也就是virto_net) - let net_face = binding.get(&1).ok_or(SystemError::ENODEV)?.clone(); + let net_face = binding + .iter() + .find(|(_, iface)| iface.name().starts_with("eth")) + .map(|(_, iface)| iface.clone()); + if net_face.is_none() { + warn!("dhcp_query: No net device found!"); + return Err(SystemError::ENODEV); + } + let net_face = net_face.unwrap(); + log::debug!("dhcp_query: net_face={}", net_face.name()); drop(binding); // Create sockets