Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Track N — network foundation (virtio-net ARP + ICMP + UDP + thin TCP + EL0 net/UDP samples)

Scope ADR: ADR-063. Separate from Track A (freestanding apps) and Track B (Linux-compat research — never implementation).

Driving force (non-negotiable)

This track is subordinate to ctos core principles (principles.md). Networking must not abandon honesty, fail-closed sensors, the three pillars, or virt learning scope. Do not override principles for a “has networking” headline.

  • Honesty ledger — Verified only with a probe; N0 is Planned for runtime claims
  • Antifragility — fail-closed smoke + ratchets; do not break blk/FAT markers
  • Security — threat model names the I/O surface; no “secure OS”
  • Performance — measure first; no invented benches
  • Document-first / one milestone → one branch → one PR

Goal

Bring up a minimal guest network path on QEMU virt: virtio-mmio virtio-net, discover the device, TX/RX one raw Ethernet frame (N1), an ICMP echo to the SLIRP gateway (N2), a UDP datagram to SLIRP DNS (N3), then a thin TCP active-open + one payload vs QEMU guestfwd echo (N5), with serial markers and fail-closed smoke. Reuse virtio-mmio patterns from blk (ADR-028). N1: ADR-066. N2: ADR-067. N3: ADR-070. N3.x EL0 UDP SVC: ADR-071. N5 thin TCP: ADR-074. EL0 TCP SVC: ADR-076.

Keep

Honesty ledger, fail-closed qemu-smoke, existing virtio-blk + FAT16 + sample catalog markers, QEMU virt + AArch64 until an ADR widens it, Track A freestanding path.

Mile ladder

IDWorkProbe that closes itStatus
N0Scope ADR + docs wiringDocs-build; ledger Planned row; no Verified inventAccepted (docs) — ADR-063
N1Link bring-up / first frameDiscover + TX/RX one raw Ethernet frame; QEMU -netdev / -device virtio-net-device; smoke greps; keep blk/FAT greenVerified when this tip’s qemu-smoke prints net: ok (ADR-066)
N2ARP + ICMP ping (kernel-path)After ARP: ICMP echo request/reply vs 10.0.2.2; net: icmp-tx / net: icmp-rx / net: ping-ok; keep N1 + blk/FAT greenVerified when this tip’s qemu-smoke prints net: ping-ok (ADR-067)
N3Transport — minimal UDP (IPv4)UDP TX/RX vs SLIRP DNS 10.0.2.3:53; net: udp-tx / net: udp-rx / net: udp-ok; keep N1/N2 + blk/FAT greenVerified when this tip’s qemu-smoke prints net: udp-ok (ADR-070)
N4Freestanding sample using net SVCsAfter N1+ Verified; EL0 net_mac/net_ping + FAT /netdemo; smoke grepsVerified when this tip’s qemu-smoke prints libctos: net-ok / netdemo: ok (ADR-068)
N3.xEL0 UDP DNS SVC + freestanding sampleAfter N3 Verified; EL0 net_udp_dns + FAT /udpdemo; smoke grepsVerified when this tip’s qemu-smoke prints libctos: udp-ok / udpdemo: ok (ADR-071)
N5Thin TCP (active open + one payload)After N3; TCP SYN/est + one payload echo vs guestfwd 10.0.2.4:7; net: tcp-syn / net: tcp-est / net: tcp-tx / net: tcp-rx / net: tcp-ok; keep N1–N3 + blk/FAT greenVerified when this tip’s qemu-smoke prints net: tcp-ok (ADR-074)
N5.xEL0 thin TCP SVC + sampleAfter N5; SYS_NET_TCP_ECHO (28) quiet guestfwd echo; FAT /tcpdemo; libctos: tcp-ok / tcpdemo: ok; keep net: tcp-okVerified when this tip’s qemu-smoke prints libctos: tcp-ok / tcpdemo: ok (ADR-076)

Explicit non-goals (locked until new ADR + sponsor)

BSD sockets as product; TCP stack as product / listen/accept / multi-connection socket table (N5 is one active-open + one payload only — ADR-074); TLS; HTTP stack; DHCP/DNS as product features (N3/N3.x may use SLIRP DNS as probe bait only); Wi‑Fi; virtio-pci-only foundation stories; Linux net stack; “has networking / sockets OS” marketing. N3.x adds EL0 net_udp_dns only (ADR-071); N5.x adds EL0 net_tcp_echo only (ADR-076); general udp_send/udp_recv / listen-accept / sockets ABI need another ADR. N4 EL0 net ABI remains the tiny net_mac/net_ping surface (ADR-068).

Honesty

Do not say the guest “has networking” or “has sockets.” N0 is scope (ADR-063). N1 first-frame is ADR-066 (net: ok). N2 ICMP ping is ADR-067 — Verified only with net: ping-ok on a named tip. N3 UDP is ADR-070 — Verified only with net: udp-ok on a named tip. N3.x EL0 UDP SVC sample is ADR-071 — Verified only with libctos: udp-ok / udpdemo: ok on a named tip. N4 EL0 net sample is ADR-068 — Verified only with libctos: net-ok / netdemo: ok on a named tip. N5 thin TCP is ADR-074 — Verified only with net: tcp-ok on a named tip. N5.x EL0 TCP SVC sample is ADR-076 — Verified only with libctos: tcp-ok / tcpdemo: ok on a named tip. Still not BSD sockets / TCP product / DHCP/DNS product. CloudAgent HELD; evidence tags agent-box / amd64 workstation. No self-merge (ADR-002).