网络栈概览
TGOSKits 的网络能力收敛在 net/ax-net。它是 ArceOS、StarryOS 和 Axvisor 共享的统一网络栈,向上提供 TCP、UDP、raw socket、Unix domain socket、可选 vsock、DNS、DHCP、ARP、接口查询和 readiness/poll 能力,向下通过 EthernetDriver 能力边界适配真实网卡;当前标准实现是基于 rd-net 的 RdNetDriver。
源码
源码位于 net/ax-net/src/,入口 lib.rs。Socket backend 包括 IP 类(tcp.rs、udp.rs、raw.rs,基于 smoltcp)、unix/(自包含 stream/dgram,不经 smoltcp)和可选的 vsock/(基于 rdif-vsock 驱动,含 connection manager 与 ring buffer)。
| 模块 | 角色 | 关键类型 |
|---|---|---|
lib.rs | public facade,初始化网络、启动 poll worker、导出 API | init_network, request_poll, net_poll_worker |
config.rs | 配置与接口信息类型 | InterfaceId, NetworkConfig, InterfaceInfo, DeviceBinding |
service.rs | 控制面 + 协议核心调度 | Service, NetControl, DhcpState |
router.rs | 路由表、有界队列、smoltcp Device 适配 | Router, RouteTable, RouteDecision |
wrapper.rs | 全局 SocketSet 包装与端口冲突仲裁 | SocketSetWrapper |
socket.rs | 统一 socket 抽象 | SocketOps, Socket, SocketAddrEx |
addr.rs | 共享地址 helper:临时端口分配(0xc000–0xffff)、listen 地址冲突判定 | allocate_ephemeral_port, listen_addrs_conflict |
ip_tos.rs | per-socket egress IP_TOS/traffic-class:smoltcp 不暴露 TOS 设置,在 Router 边界改写发出的 IP 包头 | EgressIpTosKey |
rx_meta.rs | 利用 smoltcp PacketMeta id 携带接收侧 QoS 元数据,供 recvmsg cmsg 上报 | ReceivedTrafficClass |
options.rs | socket 选项与 Configurable trait | GetSocketOption, SetSocketOption, TcpInfo |
general.rs | 通用 socket 选项、非阻塞/超时/poll helper | GeneralOptions |
state.rs | socket 状态机锁 | StateLock, StateGuard |
listen_table.rs | TCP listen/accept 表与 SYN 预创建 | ListenTable |
tcp.rs / udp.rs / raw.rs | IP socket 实现 | TcpSocket, UdpSocket, RawSocket |
orphan.rs | TCP orphan socket 回收(RFC 793 TIME_WAIT) | add_orphan, reap_orphans |
dhcp_server.rs | 最简 DHCP 服务器(SoftAP 模式) | DhcpServer |
unix/ | Unix domain socket | UnixSocket, Transport |
vsock/ | 可选 vsock 支持(vsock feature) | VsockSocket, VsockStreamTransport |
device/ | loopback、Ethernet、rd-net、vsock 设备适配 | Device, EthernetDevice, RdNetDriver |
consts.rs | 缓冲区大小等常量 | STANDARD_MTU, SOCKET_BUFFER_SIZE |
能力矩阵
| 能力 | 实现方式 | 状态 |
|---|---|---|
| TCP | smoltcp socket::tcp,含 keep-alive、Nagle、TCP_INFO、SYN pre-create | 完整 |
| UDP | smoltcp socket::udp,含 MSG_MORE corking、端口冲突仲裁 | 完整 |
| Raw IP/ICMP | smoltcp socket::raw,含 loopback ICMP echo reply 模拟 | 完整 |
| Unix domain stream | 自包含,ringbuf 双向通道 + cmsg 管道 + peer credentials | 完整 |
| Unix domain datagram | 自包含,async_channel 无界队列 + cmsg + SO_PASSCRED | 完整 |
| Vsock stream | rdif-vsock 驱动 + connection manager + ring buffer stream | 需要 vsock feature |
| DHCPv4 client | 内核态 DhcpState 状态机,per-interface,启动阻塞等待 | 基础完成 |
| DNS resolver | smoltcp socket::dns,自动过滤不可路由 server,5s 超时 | 完整 |
| ARP | EthernetDevice 内部 neighbors: HashMap(已解析条目, 300s TTL)+ pending_neighbors: HashMap(等待 ARP reply 条目, 1s 重试) + pending_packets: PacketBuffer(暂存待 ARP 解析后发送的包) | 完整 |
| 多 NIC 路由 | RouteTable 最长前缀匹配 + metric 排序 + per-interface 替换 | 完整 |
| IRQ 感知 | EthernetIrqRegistrar + EthernetIrqAction + IRQ→wake 转换 | 完整 |
| Loopback | 零状态 LoopbackDevice + Router::dispatch() 快速路径 inline 注入 rx_buffer,不经设备 worker 和队列分配 | 完整 |
| TCP orphan 回收 | orphan.rs:Drop 后保留 smoltcp socket 直到 FIN/TIME_WAIT 完成,RFC 793 合规 | 完整 |
| DHCP 服务器(SoftAP) | dhcp_server.rs |