Files
roro9stack/docs/milestones/S1.md
T
twislaandClaude Opus 5.5 bdd027cb50 S1 #7 steps 1-2: IPv4 checks, the IP setting per Saved Network, DNS and NTP settings
The plan and decisions Q105 to Q116 (docs/milestones/S1.md). lib/net:
strict IPv4 parsing, prefix and mask, and the checks a Fixed setting must
pass, each refusal with its reason. A Saved Network is Automatic or Fixed
(address/prefix and an optional gateway), kept with it in flash. Settings:
two DNS servers (9.9.9.9, 1.1.1.1), "Always use my DNS", two NTP servers
(pool.ntp.org, time.cloudflare.com). Host-tested: 383 tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EhqxQ49eCju4CzKYNjZzwT
2026-10-05 23:39:07 +02:00

4.0 KiB

S1 — System basics

Status: in progress (branch s1). The SD driver fix shipped in v0.6.1 (issue #21, ADR 0007). Fixed IPv4 settings (issue #7) are being built. The System Monitor (#11) hasn't started.

Goal: the device works on any network, the card can be trusted, and you can see what the system is doing. A side milestone, like G1.

Fixed IPv4, DNS and NTP (issue #7)

Not every network has a DHCP server: a lab bench, a direct link to a router, a network where addresses are handed out by hand. Until now every Saved Network used DHCP, DNS always came from DHCP, and the NTP server was pool.ntp.org, hard-coded.

IPv4 only. IPv6 isn't part of this, now or as a planned follow-up.

Decisions (design round 2026-10-05)

# Decision
Q105 The IP setting is per Saved Network: Automatic (DHCP, as before) or Fixed, with its own address, prefix and gateway. New networks start Automatic.
Q106 The subnet is entered as a prefix length (24), with the mask shown next to it.
Q107 The gateway is optional: left empty, the device talks to its own subnet only.
Q108 DNS is global: two servers in Settings, used on every Fixed network. On Automatic networks DHCP's DNS is used, unless "Always use my DNS" is on.
Q109 DNS defaults: 9.9.9.9 (Quad9), then 1.1.1.1 (Cloudflare).
Q110 NTP is global: two servers in Settings, names or addresses, defaulting to pool.ntp.org and time.cloudflare.com. NTP servers offered by DHCP are used first. GNSS still outranks NTP for the clock.
Q111 What's typed is checked, host-tested in lib/wifi: an address is four numbers from 0 to 255; a prefix is 1 to 30; the address isn't the subnet's network or broadcast address; the gateway is inside the subnet and isn't the device's own address. Refusals say why.
Q112 Addresses are typed in the line editor, limited to digits and dots.
Q113 Enter on a Saved Network opens its page (IP, Address, Prefix, Gateway, Forget) instead of asking to forget it. Settings > Wi-Fi gains DNS servers, "Always use my DNS" and NTP servers. The Status row opens connection details: address, mask, gateway, DNS and NTP in use, and where each came from.
Q114 A change applies at once: the network in use reconnects with the new settings. No automatic way back; the keyboard still works if Wi-Fi is cut.
Q115 Console: wifi status shows address, gateway, DNS, NTP and their sources; wifi ip <ssid> dhcp, wifi ip <ssid> <address>/<prefix> [gateway], wifi dns <a> [b], wifi ntp <a> [b]. Debug Builds: wifi ip … try 60 goes back to the previous setting after 60 s unless confirmed with wifi ip keep.
Q116 Left out: checking whether the address is already taken, and per-network DNS.

The SDK already allows 3 NTP servers and 3 DNS servers and can take NTP servers from DHCP (CONFIG_LWIP_SNTP_MAX_SERVERS=3, CONFIG_LWIP_DHCP_GET_NTP_SRV=y), so the framework isn't rebuilt for this.

Done when

  • A Saved Network set to Fixed joins with that address, mask and gateway, and the device reaches the internet (IRC, Gemini, NTP) through the DNS servers from Settings.
  • Set back to Automatic, it gets its address from DHCP again.
  • With "Always use my DNS" on, an Automatic network resolves through the servers from Settings.
  • The NTP servers from Settings set the clock.
  • Wrong entries are refused with a reason, in Settings and on the console.
  • Connection details show what's in use and where it came from.
  • Tested on knbg-guests with 10.39.39.12 (the device's DHCP lease) and 10.39.39.13 (free: the device is alone on that network).

Work breakdown

  1. IPv4 logic (host-tested): parsing and formatting addresses, prefix and mask, the checks of Q111.
  2. Storage: the IP setting in each Saved Network; DNS, "Always use my DNS" and NTP in Settings.
  3. Wi-Fi Service: apply it when joining; DNS and NTP; wifi status and the console commands.
  4. Settings: the network page, the DNS and NTP rows, connection details.
  5. Tests on the device, recorded here.