feat(guests): place networked guests on tagged VLANs #30
Reference in New Issue
Block a user
Delete Branch "task-0004-guest-networking-placement"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Implements the guest networking placement slice of the guests spec.
What was built
The host-side placement fields that make a guest a first-class L2 citizen on a tagged VLAN:
vlan— attaches the guest to its host'sbr-vlan<id>bridge by the naming convention. A guest naming a VLAN its host has not declared fails the build with an actionable message naming the guest and VLAN.mac— set it to reuse an existing address so a router's DHCP reservation keeps working; left unset, a stable address is derived from the guest's namespace path in the locally-administered range and reads back vianix eval.address— a static on-VLAN IP; left unset the guest takes its address by DHCP.The MAC and address are pinned inside the guest by its own systemd-networkd, the only stable MAC pin for a nested container. The
br-vlan<id>naming moves into a sharedbridgeNamein the lib, so the bridge a guest attaches to and the bridge the host emits have one source.Deviations
addresssets only the on-VLAN IP, with no gateway or DNS. This mirrorsmodules.network, which deliberately dropped amanagement.gatewayas speculative; off-VLAN routing for a statically-addressed guest is a later concern, and the centralized path stays DHCP.nix evalagainstneogaiathroughextendModulesrather than by a committed enablement, exactly as the network foundation was.neogaiais a wifi laptop that cannot bridge and whose DNS networkd would take over, so its committedguests.sampleplacement leavesvlanunset.nix flake checkpasses with the guest building its interior in full.Review
Overall: MEDIUM
bridgeNamehelper now consumed by two files; new networking threaded into the shared guest abstraction, but only one benign path is live.nix flake check, and the networked path isn't exercised by any current host.mkIfconditionals.Unaddressed findings:
addresscarries no gateway or DNS, unlike the DHCP path. Left as a deliberate scope boundary matching the network foundation's dropped gateway; recorded in the task's implementation notes.— Claude