网络栈
这一节的标题其实有点名不副实:FujoOS 没有网络栈。有的是一个裸的 virtio-net 驱动,加每个 demo 各自手搓的 IP / UDP / TCP 头。把这件事说清楚,比给它起一个好听的名字重要。
| 面 | 现状 |
|---|---|
| 网卡驱动 | virtio-net,仅 3 个原语 |
| 原语 | fujo_net_info(186) · fujo_net_tx(204) · fujo_net_rx(253) |
| 用户 ABI | 帧级 tx/rx,单帧 ≤ 1514 B,原生 opcode 0x8A04–06 |
| POSIX socket | 仅名字占位,dispatch 返回 -ENOSYS |
| 服务模型 | srv_net 只存在于文档里;驱动直接从用户 ELF 调用 |
| 协议实现 | 每个 demo 各写一遍 ARP / IP / UDP 头与校验和 |
| 回归 | UDP 回环 PASS;宿主→客体 TCP PASS;出向 TCP 响应被 slirp 丢弃(已记录) |
为什么这块值得单独讲
它是 L0 的靶子。
上面那句“每个 demo 各写一遍协议头”就是这个项目最典型的重复。ARP / IP / UDP 的字段偏移、字节序、校验和是绝对精确的,正好是 .lom 单一真源最擅长消灭的那类跨语言重复。
它需要能力边界。
网络是“一个进程只应该碰它被允许碰的那部分”最自然的例子:端口白名单、允许的目的地址、最大帧长。现有能力表只管 AI 动作,还没有端口 / socket 能力。
网络线是另一件事:
这一页讲的是内核侧的网络现状。用 Loment / Potato 重写用户态网络层的那条开发线,见 项目 · 网络线。