The metrics say which module is armed for USB boot
Pins bmcd 2.36.3. BMC-UI stays at 3.27.0 and tpi is unchanged.
Firmware v2.30.0, 12 September 2026 — the first image to carry bmcd 2.36.3. Every item below is the repository's own changelog entry, taken apart; the whole entry is a click away under each one.
New¶
/metrics says which module is armed for USB boot¶
Two families: bmcd_node_usb_boot_armed, one sample per module, and bmcd_usb_config, which names the node, mode, route and bus type of the persisted configuration.
The whole entry
tpi flash and tpi advanced msd leave that configuration at
Flashing(NodeN, …), and the daemon re-applies it on every start, which
asserts the module's USB-boot pin and stops it booting from its own eMMC.
The module keeps running, because it is already booted — so the fault
appears at its next reboot, possibly weeks later.
Until now nothing exported that. A module in flash mode is indistinguishable
from dead hardware from every remote angle: nothing at all on the serial
console, not even a bootloader banner, because the loader does not use the
console; nothing on the network; and the BMC reporting the rail on. tpi usb
status cannot separate the two either — it prints the same route for UsbA
and Flashing. Measured on hive-6 on 2026-09-12: twenty minutes spent on a
module that looked dead, with the answer sitting unexported in the daemon's
own database.
/metrics now reports the USB multiplexer, including which module is¶
armed for USB boot bmcd 2.36.3
Two families: bmcd_node_usb_boot_armed, one sample per module, and bmcd_usb_config, which names the node, mode, route and bus type of the persisted configuration.
The whole entry
tpi flash and tpi advanced msd leave the configuration at
Flashing(NodeN, …). The daemon persists that and re-applies it on every
start, which asserts that module's USB-boot pin and stops it booting from
its own eMMC. The module keeps running, because it is already booted — so
the fault appears at its next reboot, possibly weeks later, and then it
comes up in the USB loader instead of its operating system.
From outside, that module is indistinguishable from dead hardware: nothing
at all on the serial console, not even a bootloader banner, because the
loader does not use the console; nothing on the network; and the BMC
reporting its rail on. tpi usb status could not separate the two either,
because it prints the same route for UsbA and Flashing. The only readout
that named the mode was a line in the daemon's own log.
Measured on hive-6, 2026-09-12: twenty minutes spent on a module that looked
dead, with the fact that explained it sitting unexported in the daemon's
database. bmcd_node_usb_boot_armed{node="node2"} 1 would have answered it
in one query, and a rule on fifteen minutes of it pages the operator who
armed it while they still remember doing so.
The armed family is four samples rather than one because a single "which node" gauge cannot express none, and none is the normal state it exists to assert.
Changed¶
UsbConfig::parts()is now the single mapping from a stored configuration to(node, mode, route). Thetype=usbresponse and the metrics exposition share it, so a board cannot report one thing through the API and another on a dashboard. bmcd 2.36.3
Fixed¶
-
The board refused every attempt to resume a TLS session, fatally, and that was the intermittent console failure. A serial console or an API call through the fleet gateway would occasionally fail outright, on both boards, with nothing in the daemon's log and the board healthy either side of it.
The whole entry
Envoy keeps one TLS session per upstream cluster and offers it on the next connection it opens. On the gateway, a third of all new connections to the two boards died that way — 8 of 28 to one, 19 of 45 to the other — while every connection taken from the pool was fine, which is what made it look random from a browser. Reproduced from a pod on the gateway's own node: 30 fresh connections all succeeded, and 30 offering back a saved session all failed with
tlsv1 alert internal error.OpenSSL will not resume a session on a server that asks for client certificates unless the context carries a session id context, and the refusal is not a quiet cache miss — it is
internal_error, fatal, sent before a byte of HTTP. The error is raised on the server, which never logged it. So the fault arrived with client certificates in 2.30.0 and was invisible for six releases, and it was never specific to the gateway: any client that resumes hit the same wall. -
The board refused every attempt to resume a TLS session, fatally. This is the intermittent fleet console failure: a serial console or an API call through the gateway would occasionally fail outright, on both boards, with nothing in the daemon's log and the board perfectly healthy either side of it. bmcd 2.36.2
The whole entry
Envoy keeps one TLS session per upstream cluster and offers it on the next connection it opens. Measured on the gateway, a third of all new upstream connections to the two boards died this way — 8 of 28 to one, 19 of 45 to the other — while every connection taken from the pool was fine, which is what made it look random from a browser. Reproduced deterministically from a pod on the gateway's own node: 30 fresh connections all succeeded, and 30 that offered back a saved session all failed with
tlsv1 alert internal error.OpenSSL will not resume a session on a server that asks for client certificates unless the context carries a session id context, and the refusal is not a quiet cache miss — it is
internal_error, fatal, sent before a byte of HTTP is exchanged. The error,ssl_get_prev_session: session id context uninitialized, is raised on the server, which never logged it; the client sees only an alert it cannot explain.So the fault arrived with client certificates in 2.30.0 and was invisible from the daemon's side for six releases.
The acceptor now sets a session id context, derived from the client CA so that a board whose trust anchor is replaced will not resume a session authenticated under the old one. There is a test that performs two real handshakes against the real acceptor and offers the first session back; it fails on 2.36.1 with the OpenSSL error above.
Every release of the firmware · the roadmap · follow by feed