Problem
On 2026-06-20, a tower reboot (HA 2026.6.1 upgrade) left Home Assistant's
zeroconf component dead: OSError: [Errno 19] No such device while joining
mDNS multicast (setsockopt(IP_ADD_MEMBERSHIP)). Because HA's shared aiohttp
DNS resolver is built on zeroconf, the failure cascaded to every integration
that lazily creates a client session after boot — airgradient (the Air Quality
dashboard sensors) and mobile_app notify both went unavailable. HA ran
degraded for ~2 days until a manual restart fixed it. The AirGradient device
itself was healthy the whole time.
Root cause
Tower is dual-homed on the same /24:
enp11s0-static → 192.168.0.10 (declared in modules/hosts/tower/configuration.nix)
soft (WiFi, wlp12s0) → 192.168.0.52 (an undeclared, runtime-stored NM connection)
zeroconf enumerates every interface at startup and joins mDNS multicast on each.
The WiFi associates slower than the wired NIC; if zeroconf hits it mid-bringup →
ENODEV → the whole socket setup fails. network-online.target doesn't help
because nm-online -s reports ready as soon as one connection is up, not when
every interface is multicast-ready. systemd after/wants are already present
(NixOS default) and were satisfied before HA started.
The WiFi exists only as a workaround: tower's single ethernet cable is sometimes
unplugged and moved to the MacBook for low-latency wired gaming, and WiFi keeps
tower (and HA) alive during those sessions.
Plan
- Hardware: add a small unmanaged switch at the desk. Router → switch;
switch → tower's onboard NIC; switch → monitor's RJ45. Both machines wired
permanently, no more cable swapping. A switch is latency-transparent for
gaming (~µs vs. the ms of internet RTT). Gigabit is plenty; 2.5GbE only for
LAN-transfer headroom.
- Ignore the monitor's USB-ethernet on tower. The monitor is a USB-C hub
with built-in ethernet that follows the active host. When tower is the active
host it would inherit that USB NIC on top of enp11s0 — recreating the
dual-homing. Mark that adapter unmanaged in NetworkManager (by MAC or
driver:r8152) so tower always stays single-homed on enp11s0.
- Remove tower's WiFi (
wlp12s0 / the undeclared soft connection)
declaratively. With the switch in place it's no longer needed, and removing it
kills the zeroconf race at the source and removes config drift.
Sequencing constraint
Do not remove WiFi (step 3) before the switch (step 1) is physically
installed — HA runs on tower, so today the WiFi is the only thing keeping tower
online when the ethernet cable is moved to the Mac.
Open item
Identify the monitor's USB-ethernet adapter (MAC / driver) to write the
unmanaged match — read ip -brief link while tower is the active monitor host,
or infer the chipset from the monitor model (likely Realtek RTL8153 / r8152).
Problem
On 2026-06-20, a tower reboot (HA 2026.6.1 upgrade) left Home Assistant's
zeroconfcomponent dead:OSError: [Errno 19] No such devicewhile joiningmDNS multicast (
setsockopt(IP_ADD_MEMBERSHIP)). Because HA's shared aiohttpDNS resolver is built on zeroconf, the failure cascaded to every integration
that lazily creates a client session after boot —
airgradient(the Air Qualitydashboard sensors) and
mobile_appnotify both wentunavailable. HA randegraded for ~2 days until a manual restart fixed it. The AirGradient device
itself was healthy the whole time.
Root cause
Tower is dual-homed on the same
/24:enp11s0-static→192.168.0.10(declared inmodules/hosts/tower/configuration.nix)soft(WiFi,wlp12s0) →192.168.0.52(an undeclared, runtime-stored NM connection)zeroconf enumerates every interface at startup and joins mDNS multicast on each.
The WiFi associates slower than the wired NIC; if zeroconf hits it mid-bringup →
ENODEV→ the whole socket setup fails.network-online.targetdoesn't helpbecause
nm-online -sreports ready as soon as one connection is up, not whenevery interface is multicast-ready. systemd
after/wantsare already present(NixOS default) and were satisfied before HA started.
The WiFi exists only as a workaround: tower's single ethernet cable is sometimes
unplugged and moved to the MacBook for low-latency wired gaming, and WiFi keeps
tower (and HA) alive during those sessions.
Plan
switch → tower's onboard NIC; switch → monitor's RJ45. Both machines wired
permanently, no more cable swapping. A switch is latency-transparent for
gaming (~µs vs. the ms of internet RTT). Gigabit is plenty; 2.5GbE only for
LAN-transfer headroom.
with built-in ethernet that follows the active host. When tower is the active
host it would inherit that USB NIC on top of
enp11s0— recreating thedual-homing. Mark that adapter
unmanagedin NetworkManager (by MAC ordriver:r8152) so tower always stays single-homed onenp11s0.wlp12s0/ the undeclaredsoftconnection)declaratively. With the switch in place it's no longer needed, and removing it
kills the zeroconf race at the source and removes config drift.
Sequencing constraint
Do not remove WiFi (step 3) before the switch (step 1) is physically
installed — HA runs on tower, so today the WiFi is the only thing keeping tower
online when the ethernet cable is moved to the Mac.
Open item
Identify the monitor's USB-ethernet adapter (MAC / driver) to write the
unmanagedmatch — readip -brief linkwhile tower is the active monitor host,or infer the chipset from the monitor model (likely Realtek RTL8153 /
r8152).