Skip to content

feat(net): support multiple independent network interfaces - #9

Merged
Leonmmcoset merged 1 commit into
mainfrom
feature/multi-nic
Nov 12, 2026
Merged

Leonmmcoset merged 1 commit into
mainfrom
feature/multi-nic

Conversation

@VasilyZa

Copy link
Copy Markdown
Contributor

更新内容

将以单张网卡为中心的内部网络状态改为逐设备管理,使 e1000、e1000e、Realtek 驱动可以同时提供多个接口,也支持同一驱动枚举多张匹配的 PCI 网卡。

  • 增加带设备上下文的私有 netdev 注册接口、启动内稳定递增的 ifindex、逐卡计数和按模块 owner 固定回调的生命周期管理。
  • 三种网卡驱动使用独立设备状态和 DMA 环。卸载只排空并移除当前 owner 的设备,停止失败时保留仍可能被硬件访问的资源与模块代码。
  • 按接口管理 IPv4 地址、行政状态、路由和 ARP。接收链路携带 ifindex,AF_PACKET、UDP、TCP 和 raw socket 按设备与路由约束收发。
  • IPv6 链路状态动态分配,邻居、发现、待发包、重组、PMTU、地址和路由携带接口身份,检查 socket 设备绑定与作用域的一致性。
  • ioctl、rtnetlink 和 proc 查询覆盖多个接口。补齐 SO_BINDTODEVICE 和 SIOCGIFTXQLEN 对应路径,修正同接口换网关时 TCP 下一跳缓存与本机 NIC 地址投递。
  • 新接口由 ReliefNT 私有符号导出,兼容公开驱动 API v2 表布局。旧网络服务入口查询首个存活接口,相关 .ko 需要随内核重建。
  • 同步分目录 Kbuild、内核文档、宿主回归和供系统仓使用的原生 socket 探针。

接口卸载后保留编号空洞,重新加载会分配新 ifindex 和 ethN 名称。

编译验证

  • 原生 Make/Kbuild 的三种网卡全部内置配置编译、安装通过。
  • e1000、e1000e、r8169 均为 m 的配置编译、安装与模块依赖生成通过。
  • ABI 布局检查通过,覆盖 70 个记录和 27 个常量。
  • Kbuild 布局及测试归属检查通过,覆盖 112 个本地 Kbuild 列表和 516 个生产对象。

测试验证

  • 定向宿主测试通过,覆盖 netdev owner 隔离、接口配置与选路、ARP/UDP/AF_PACKET 隔离、TCP 下一跳更新、IPv6 协议与控制面。
  • e1000、e1000e、Realtek 设备模型测试及驱动、音频模块 owner 回归通过,包含同型号多卡与失败清理。
  • Task8 net-ioctl-user 用户内存等待与不可变输入夹具通过。
  • 提交前再次运行多网卡、IPv4 TCP/UDP、IPv6 协议/控制、ABI、Kbuild 布局与归属检查,全部所选检查通过。

运行验证

ReliefOS 私有 QEMU/KVM 来宾挂载两张 e1000 与一张 e1000e。内置和模块配置均通过三张网卡独立 DHCP、IPv4/IPv6 ping、并发 TCP/UDP 回显与 BusyBox ip 查询。模块场景中,卸载 e1000 移除其两张网卡时,e1000e 的既有 TCP 连接继续传输;重新加载后的两张 e1000 重新配置并恢复双栈通信。

来宾的网络探针使用原生 Linux/POSIX socket 接口,网络管理命令由原版 BusyBox 执行。QEMU 三网卡编排由 ReliefOS 仓库持有。

已知边界

  • VMware 验证未完成。实体 Realtek 网卡未验证,Realtek 多卡目前由设备模型覆盖。
  • IPv6 地址、路由、邻居等共享表保留既有容量。IPv4 rtnetlink 组播通知与 /sys/class/net 的完整导出仍待扩展。
  • 配套图形测试采用精简 ISO 中的现有 Xorg/IceWM 与新应用、运行库和内核,完整生产 VMDK/Installer 未重建。
  • 一次精简图形来宾中的配置脚本以 1 退出,日志未给出根因。随后相同配置连续三次 prepare 成功,两个自动化三网卡来宾也通过。此项仍待复现定位。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants