mirror of
https://github.com/openglow-org/forgefirm.git
synced 2026-09-28 09:11:11 -07:00
ulfius: client_address carries the whole peer sockaddr; forgectrl.auth asserts the loopback report is accepted
The dual-stack listener reports every peer as a sockaddr_in6; ulfius 2.7.15 copied sixteen bytes of it, so forgectrl's loopback-only cooling channel refused the controller's every report (403 loopback only) and the engine never saw a run or an armed window. The recipe carries the patch: a sockaddr_storage allocation and a copy of the family's length, in the dispatcher and in ulfius_copy_request. forgetest: forgectrl.auth asserts POST /cool/state from loopback -> 200 beside the LAN 403, and covers src/peer.*. BRINGUP item 21 and the campaign log record how the campaign on dev 20260824215906 found it.
This commit is contained in:
+21
-2
@@ -1586,8 +1586,27 @@ Open items only. Anything closed is in `CAMPAIGN-LOG.md`.
|
||||
remove and on the probe unwind, the empty-ring run request logs at ERR
|
||||
level again (it was the only kernel-log trace of the fault), and
|
||||
`image.health` asserts the SDMA clock enable count directly. The ecspi2
|
||||
`dmas` stay deleted. Left: build, flash, the item-16 drill and the
|
||||
campaign.
|
||||
`dmas` stay deleted. Bench-proven on dev 20260824215906: the clock count
|
||||
reads 1, the probe reports MOTION OK, `cnc/free` reads the ring less its
|
||||
gap, and the campaign ran every kernel, forgectrl, logs and motion test
|
||||
green.
|
||||
|
||||
That campaign then stopped on `cooling.fans-quiet-after-motion`: M8
|
||||
raised no fan duty because forgectrl had accepted no cooling report
|
||||
from the controller at all (`report_age_s` -1). The dual-stack listener
|
||||
of the second round reports every peer as a `sockaddr_in6`, and ulfius
|
||||
2.7.15 copies the peer into `client_address` as `sizeof(struct
|
||||
sockaddr)`, 16 bytes; the mapped-loopback bytes the check reads lie
|
||||
beyond the copy, so `POST /cool/state` from 127.0.0.1 got `403 loopback
|
||||
only` (fail-safe: the engine treats silence as a stand-down, so nothing
|
||||
fired, but no run profile and no armed window either). The fix: the
|
||||
image patches ulfius to allocate a `sockaddr_storage` and copy the
|
||||
family's length (`meta-forgefirm/recipes-extended/ulfius`), the peer
|
||||
check lives in `src/peer.c` with a host unit test (`auth_peer_test`,
|
||||
including the truncated-copy case, which fails closed), and
|
||||
`forgectrl.auth` asserts that the loopback peer is accepted as well as
|
||||
that a LAN peer is refused. Left: build, flash, the item-16 drill and
|
||||
the campaign.
|
||||
|
||||
**Deliberately not gated:** an armed GRBL job after an underrun cuts at the
|
||||
stale origin unless homing is required (GRBL mode permits unhomed cutting; the
|
||||
|
||||
Reference in New Issue
Block a user