OP25 source in op25-client image is an unpinned, cached gr310 clone; tk_drb_conv depends on tk_p25 internals no test checks #29

Open
opened 2026-10-04 18:02:56 -04:00 by logan · 1 comment
Owner

Found 2026-10-04 verifying node-26#24 (P25 conventional) after merge at 80a0e88.

What. op25-container/Dockerfile runs git clone -b gr310 https://github.com/boatbod/op25 with no commit pin, and CI builds from a registry layer cache (the 80a0e88 build shows that step CACHED). So the OP25 source inside op25-client:stable is whatever gr310 HEAD was when that layer was last rebuilt, and the next cache miss silently pulls a new HEAD.

Why it matters now. op25_addons/tk_drb_conv.py subclasses tk_p25.rx_ctl and depends on its internals: the self.receivers[id]['rx_rcvr'] dict shape, fa_ctrl, the 9-arg log_call(sysid, rcvr, freq, slot, prio, tgid, tgtag, rid, rtag), and the get_chan_status() JSON. op25-container/tests/test_conventional.py stubs tk_p25, so CI cannot catch an upstream change to any of those. A break would take down decode on every P25 conventional and analog node (both use tk_drb_conv), not just new ones.

Checked today. tk_drb_conv run against the real upstream gr310 tk_p25.py (HEAD 5b58335, last tk_p25 change 2026-08-13, before the image's FROM change on 2026-08-20, so the image almost certainly has the same file) with simulated LDU1/LCW/LDU2/TDU15/timeout frames: NAC filter applied, tgid/voice/NAC/encryption reported, one call_log entry per call, nothing logged for encrypted calls. It works today.

Fix shape. Pin the clone to a commit (git clone ... && git -C /op25 checkout <sha>), bump it deliberately, and add a CI test that imports tk_drb_conv against the real tk_p25.py/helper_funcs.py/log_ts.py at that sha (only gnuradio needs stubbing).

Minor, same file: tk_drb_conv's docstring and _process_conv treat duid 0 (HDU) as voice start, but OP25's p25p1_fdma::process_HDU never sends a message. That branch is dead. Voice starts at the first LDU1 link control or LDU2 ESS JSON instead, within one superframe. Not a bug, just misleading when debugging.

Linked: node-26#24.

Found 2026-10-04 verifying node-26#24 (P25 conventional) after merge at 80a0e88. **What.** `op25-container/Dockerfile` runs `git clone -b gr310 https://github.com/boatbod/op25` with no commit pin, and CI builds from a registry layer cache (the 80a0e88 build shows that step `CACHED`). So the OP25 source inside `op25-client:stable` is whatever gr310 HEAD was when that layer was last rebuilt, and the next cache miss silently pulls a new HEAD. **Why it matters now.** `op25_addons/tk_drb_conv.py` subclasses `tk_p25.rx_ctl` and depends on its internals: the `self.receivers[id]['rx_rcvr']` dict shape, `fa_ctrl`, the 9-arg `log_call(sysid, rcvr, freq, slot, prio, tgid, tgtag, rid, rtag)`, and the `get_chan_status()` JSON. `op25-container/tests/test_conventional.py` stubs tk_p25, so CI cannot catch an upstream change to any of those. A break would take down decode on every P25 conventional and analog node (both use tk_drb_conv), not just new ones. **Checked today.** tk_drb_conv run against the real upstream gr310 `tk_p25.py` (HEAD 5b58335, last tk_p25 change 2026-08-13, before the image's FROM change on 2026-08-20, so the image almost certainly has the same file) with simulated LDU1/LCW/LDU2/TDU15/timeout frames: NAC filter applied, tgid/voice/NAC/encryption reported, one call_log entry per call, nothing logged for encrypted calls. It works today. **Fix shape.** Pin the clone to a commit (`git clone ... && git -C /op25 checkout <sha>`), bump it deliberately, and add a CI test that imports tk_drb_conv against the real `tk_p25.py`/`helper_funcs.py`/`log_ts.py` at that sha (only `gnuradio` needs stubbing). Minor, same file: tk_drb_conv's docstring and `_process_conv` treat duid 0 (HDU) as voice start, but OP25's `p25p1_fdma::process_HDU` never sends a message. That branch is dead. Voice starts at the first LDU1 link control or LDU2 ESS JSON instead, within one superframe. Not a bug, just misleading when debugging. Linked: node-26#24.
logan added the area/infra-deployarea/sdr-radio
priority
p2
type
chore
labels 2026-10-05 02:05:12 -04:00
Author
Owner

Pin half done in a4a575e (merged as c57a5b9): the Dockerfile clones gr310 at 5b58335. Still open: a CI test of tk_drb_conv against the real tk_p25.py.

Pin half done in a4a575e (merged as c57a5b9): the Dockerfile clones gr310 at 5b58335. Still open: a CI test of tk_drb_conv against the real tk_p25.py.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: logan/node-26#29