dispatches from the margins

hackable pocket router pt 3: the night job

2026-09-21

the night job

Part 2 is here.

The goal is substantial, and of actual value: The Company needs a way to test multi-subnet routing and 802.1x authentication, and there isn’t one available, at least not a good one. I should know, I identified the problem the last time we had it, interviewed half of engineering looking for anyone who might have done this before, and wrote the goal myself.

Last time we had this problem, I set up a RADIUS server on a proxmox instance I’d made from leftover hardware from an abandoned project and configured a switch to connect to it and use it for our QA guys to use. This is not exactly something that scales. For a hardware manufacturer, we don’t really have a lot of loose hardware lying around.

What’s strange is where the work happens. It’s a corporate goal, which means it counts, which means someone will look at it and form an opinion about me. It’s also not sprinted, which means it doesn’t get hours. So it’s a thing I am accountable for and a thing I do after dinner. Both of those are true at once and nobody involved seems to find that odd.

The gap exists because an OpenStack solution was promised for Q2 2025 and never materialized. I wrote that sentence into the project doc myself, months ago, as context. Reading it back it’s less context than diagnosis. An organization failed to deliver infrastructure, and the correction is one engineer’s evenings. The failure was institutional. The remedy is personal. There was no meeting where that trade got made.

The hardware is the part I keep turning over. The BOM target was $150, and a Pi 5 wouldn’t fit, so we went with an Allwinner board that did. That saves about $100 dollars a unit which is substantial for an internal product that generates no direct revenue. It’ll be way easier to ask for tens of these at ~50 USD than it would be at ~200. It has also cost four months of bringup, including:

Almost every hour of that came out of evenings. So the money stayed on the company’s side of the ledger and the cost came out of mine, and on paper it looks like savings. It is a saving. Just not of the thing it appears to be.

The funding model also quietly decides the engineering, which I didn’t expect. Mainline U-Boot is the right answer. It’s a clean aarch64 build, no vendor blob, no splice, and it picks up fixes for free when the kernel moves. It also means revalidating both NICs, the display work, and the rootfs growth on a different bootloader. That’s a week of solid attention. I don’t have a week of solid attention. I struggle to get five minutes of solid attention. So the correct long-term choice gets written down as future work and stays there, not because anyone decided against it but because nobody is paying for the decision.

Then there’s the part where the goal system wants deliverables and this work doesn’t produce any. Four months of status rows and not one of them is a thing the project is actually supposed to do. No DHCP, no DNS, no RADIUS. Just boot, then ethernet, then boot again. All of it necessary. None of it legible. If someone skims it they’ll see four months and no router.

And about two months of that was one bad board. Intermittent SD failures, which I interpreted as a power problem, which it wasn’t. Three sessions, three power supplies, a bootloader binary patched twice. The answer was to plug the card into the other board, which took thirty seconds and was available the entire time. That one’s on me; it just didn’t FEEL like it was the board. But it was also several evenings, and evenings are the only budget there is.

The thing that makes this a philosophical problem instead of a scheduling one is that I’d probably do it anyway. The work is good. Reverse engineering a closed bootloader header is genuinely interesting and I don’t get to do that during the day. Which is, I assume, why the arrangement works. You can’t extract unpaid labor from someone who’s bored.

I’m not really going anywhere with this. Just writing it down so it’s somewhere other than my head at 11pm.