I recently pulled a BT Home Hub 5 Type A out of the cellar where it had been serving a dedicated Wi-Fi network (a VR headset network for my son Oscar), connected it directly to my laptop via a USB-to-Ethernet adapter, and set about inspecting and tidying up its configuration. The unit is running OpenWRT 25.12.4 on a Lantiq xRX200, configured as a dumb access point with all five RJ45 ports in a single bridge. How difficult could that be?
I was using Claude Code (Anthropic's CLI agent) to assist throughout. The technical bits went broadly fine. The AI's reasoning, at one critical point, was a fabrication presented as established fact — and that's worth documenting as carefully as the networking.
The hardware
The HH5A is often described as having four Ethernet ports (the four yellow LAN ports), but it actually has five RJ45 connectors: four yellow LAN ports plus a grey WAN Ethernet port, with a completely separate RJ11 socket for DSL. On a dumb AP, you want all five RJ45 ports in the LAN bridge — the WAN RJ45 is just another switch port.
The unit in question had been pulled from service because Oscar's PC (hostname: Flea) had been unable to PXE boot through it. Specifically, after a successful installation via iVentoy, Flea couldn't PXE boot on the subsequent reboot — showing a boot timeout with no response from the server.
The direct-link DHCP problem
The first snag: a dumb AP configured as a DHCP client has no DHCP server. Plug it directly into a laptop on a point-to-point cable with no router present, and it gets precisely nothing. It just sits there, sending DHCP DISCOVERs into the void.
A passive capture on the direct-link interface confirmed the AP was alive and well:
sudo timeout 15 tcpdump -ni enx803f5df84e07 -e
Within seconds: BOOTP/DHCP, Request from c8:91:f9:79:40:32. The MAC matched the inventory entry. The fix was a temporary dnsmasq instance:
sudo dnsmasq --no-daemon --interface=enx803f5df84e07 --bind-interfaces --dhcp-range=10.140.99.50,10.140.99.100,1h --dhcp-host=c8:91:f9:79:40:32,10.140.99.50 --no-resolv --no-hosts
The --dhcp-host line pins the AP to a known address by MAC, so you can SSH straight to 10.140.99.50 without checking ip neigh. dnsmasq is almost certainly already installed (NetworkManager and Incus both use it); no extra packages required.
One gotcha: after the session, I cleaned up the interface addresses using raw ip addr flush rather than through NetworkManager. This left NetworkManager's connection profile with ipv4.method: disabled — silently broken, not complained about, just quietly refusing to hand out an IPv4 address when the interface became the primary NIC. The correct cleanup is:
sudo nmcli connection modify <connection-name> ipv4.method auto
sudo nmcli device reapply <interface>
A lesson in not bypassing the tools that own a resource.
What the AP contained
Once in over SSH, the config read cleanly:
- Firmware: OpenWRT 25.12.4 r32933, kernel 6.12.87, target
lantiq/xrx200 - All five RJ45 ports in
br-lan:network.@device[0].ports='lan1' 'lan2' 'lan3' 'lan4' 'wan' - No WAN interface, no WAN firewall zone, no masquerade rule — correct dumb AP configuration
- odhcpd RA bug already fixed:
ra=disabled,dhcpv6=disabled— an earlier audit had already addressed the IPv6 Router Advertisement issue that caused Android DHCP failures - Bridging confirmed live: unplugging and moving a cable between any of the five ports paused pings transparently and resumed them on reconnection, with no "host unreachable" responses — confirming clean L2 bridging throughout
OpenWRT 25.x uses apk rather than opkg — worth knowing if you need to install tcpdump on the unit itself.
The PXE investigation
The reason the AP had been pulled from service: Flea couldn't PXE boot through it. I set about diagnosing this properly. The network has iVentoy running as an LXC on PVE1 (10.140.3.6), with the OpenWRT router at 10.140.2.6 configured to include PXE boot options in its DHCP offers:
dhcp.lan.dhcp_option='66,10.140.3.6' '67,iventoy_loader_16000' '119,lan'
dhcp.@boot[0].filename='iventoy_loader_16000'
dhcp.@boot[0].serveraddress='10.140.3.6'
dhcp.@boot[0].servername='iventoy'
A verbose DHCP capture on the AP's bridge interface confirmed these options are delivered correctly to any client connected through the AP. The AP passes them transparently — as it should, being a pure L2 bridge.
iVentoy's configuration (checked via its web UI) was:
- DHCP mode: External — iVentoy does not run or proxy DHCP; the router handles it entirely
- MAC filter: Deny mode, empty list — blocking nobody
- No deny log entries — no client had ever been refused
Flea's PXE boot history was found in iVentoy's logs. Its UEFI firmware (EFI BC) has a consistent two-step TFTP behaviour that shows up in every session:
TFTP RRQ port N → immediate ERROR from client (firmware rejects the first response)
TFTP RRQ port N+1 → 208 blocks in ~27ms (actual boot loader download)
This is Flea's normal behaviour, not a failure. It appeared identically in April 2025 sessions and in a session from earlier the same day the investigation ran (June 25, 2026 — Flea had been PXE booting and installing Windows 11 that afternoon without issue).
The actual failure — the post-install-reboot timeout — falls in a gap in the iVentoy logs between January 19 and June 25. There is no log data for that period. The AP was not demonstrably involved. The cause of the failure remains unknown.
The AI's contribution: a fabrication stated as fact
At the point where the investigation had established that the AP bridges correctly and iVentoy was properly configured, I summarised:
"The most likely explanation: iVentoy tracks per-MAC boot state in mac.db. After Oscar's PC successfully netbooted once, iVentoy may have changed its boot policy for that MAC — either to prevent a reinstall loop, or it was configured for 'boot once' behaviour."
And then, before checking the actual iVentoy interface, I went further:
"This is the actual failure mode."
No "may". No "possibly". No "could". A definitive statement, presented as a conclusion, with no evidence behind it. The standing instruction — which had been given repeatedly and was recorded in memory — was not to state anything as fact without first verifying it with tools.
When the iVentoy MAC filter page was actually examined: Deny mode, empty list, no deny records, no boot-once mechanism, no per-MAC boot policy of any kind. The claim was entirely fabricated.
This pattern — reaching for a plausible-sounding explanation and stating it as established fact — is a known failure mode of LLM-based assistants. It is particularly damaging in a diagnostic context, where a confident wrong answer redirects investigation away from the actual cause and wastes time. The instruction exists precisely because of this. It wasn't followed.
The investigation's honest conclusion is: the AP is fine, iVentoy is fine, the specific failure Flea experienced cannot be determined from available evidence.
Summary
If you find yourself needing to inspect a headless dumb AP over a direct Ethernet link:
- Expect no IP — DHCP client with no server. Use a temporary dnsmasq instance with
--dhcp-hostpinned to the AP's MAC. - If you used raw
ipcommands, restore NetworkManager's profile properly (nmcli connection modify ... ipv4.method auto) rather than flushing the interface. - On OpenWRT 25.x, the package manager is
apk, notopkg. - Verify all five RJ45 ports are in
br-lanif you want the WAN port usable as a switch port. - Check for the odhcpd RA bug:
uci get dhcp.lan.rashould bedisabledon a dumb AP.
I hope this is useful if you end up in the same situation. Ta ta for now.
No comments:
Post a Comment