os/device/net/
mod.rs

1//! 网络设备驱动模块
2//!
3//! 管理和初始化各种网络设备
4
5use crate::device::NetDevice;
6use crate::sync::SpinLock;
7use alloc::{sync::Arc, vec::Vec};
8
9pub mod net_device;
10pub mod virtio_net;
11
12use lazy_static::lazy_static;
13lazy_static! {
14    /// 网络设备管理器
15    /// 负责存储和管理系统中的所有网络设备
16    pub static ref NETWORK_DEVICES: SpinLock<Vec<Arc<dyn NetDevice>>> = SpinLock::new(Vec::new());
17}
18
19/// 添加网络设备到网络设备管理器
20pub fn add_network_device(device: Arc<dyn NetDevice>) {
21    NETWORK_DEVICES.lock().push(device);
22}
23/// 获取所有网络设备
24pub fn get_net_devices() -> Vec<alloc::sync::Arc<dyn NetDevice>> {
25    NETWORK_DEVICES.lock().clone()
26}
27
28/// 格式化MAC地址为可读字符串
29fn format_mac_address(mac: [u8; 6]) -> alloc::string::String {
30    use alloc::format;
31    format!(
32        "{:02x}:{:02x}:{:02x}:{:02x}:{:02x}:{:02x}",
33        mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]
34    )
35}