use super::af_netlink::{NetlinkSock, NetlinkSocket}; use crate::libs::{mutex::Mutex, rwlock::RwLock}; use alloc::{boxed::Box, sync::Arc, vec::Vec}; use uefi_raw::protocol; const SKB_SIZE: usize = 4096; // 定义 SKB 的大小 #[derive(Debug, Clone)] pub struct SkBuff { pub sk: Arc>, pub len: u32, pub inner: Vec, } impl SkBuff { pub fn new(protocol: Option) -> Self { SkBuff { sk: Arc::new(Mutex::new(NetlinkSock::new(protocol))), len: 0, inner: vec![0u8; SKB_SIZE], } } } // 处理网络套接字的过度运行情况 pub fn netlink_overrun(sk: &Arc>) { todo!() } // 用于检查网络数据包(skb)是否被共享 pub fn skb_shared(skb: &RwLock) -> bool { // todo!() false } /// 处理被孤儿化的网络数据包(skb) /// 孤儿化网络数据包意味着数据包不再与任何套接字关联, /// 通常是因为发送数据包时指定了 MSG_DONTWAIT 标志,这告诉内核不要等待必要的资源(如内存),而是尽可能快地发送数据包。 pub fn skb_orphan(skb: &Arc>) { // todo!() } fn skb_recv_datagram() {} fn skb_try_recv_datagram() {} fn skb_try_recv_from_queue() {}