Skip to content

Fix FH-BUG-069, 080, 081 and add ISSI whitelist over Brew (079) - #47

Open
razvanzeces wants to merge 4 commits into
mainfrom
fix/flowhub-r3
Open

Fix FH-BUG-069, 080, 081 and add ISSI whitelist over Brew (079)#47
razvanzeces wants to merge 4 commits into
mainfrom
fix/flowhub-r3

Conversation

@razvanzeces

Copy link
Copy Markdown
Owner

Four tracker bugs on v0.4.0. One commit each.

FH-BUG-069 (reopened) - a busy network TG pinned a timeslot with nobody local
listening. has_listener counts local radios AND external Brew subscribers, so BM
TG-91 (affiliates only on the backhaul) kept ts2 in a setup/hangtime/release loop with
zero local members. The earlier fix required a listener but not a local one. Network
group-call admission now checks has_local_listener, read from the registry only MM
writes from real U-ATTACH/DETACH, so scan-off detach frees the slot. Local U-SETUP
keeps the combined count so EchoLink-bridged TGs still work.

FH-BUG-080 - DTMF was decoded and then dropped at the Asterisk entity ("currently
ignored"). Now sent as one in-dialog SIP INFO (application/dtmf-relay) per digit, CSeq
ordered against the later BYE.

FH-BUG-081 - reporter had a µCell and an SXceiver on one Pi. detect() is fine; the
bug is enumeration order, with no device= set the first supported device wins (µCell)
so the SXceiver is never opened. Log the raw driver/hardware keys every probe, WARN when
more than one device is present with the fix (device = "driver=sx"), and show the keys
on the dashboard so the next misdetection needs no SSH.

FH-BUG-079 - firewalled basestations are only reachable over Brew, so the dashboard
whitelist endpoint doesn't help. The reporter (HOH) shipped a working PoC that patched
the Rust at runtime; this upstreams it natively. Brew Service 0xf4 type 0x30 with
{"issi_whitelist":[...]} sets the override, kicks now-disallowed radios via MM, and
persists to config.toml. Off by default behind [brew] feature_issi_whitelist_sync.
Empty list follows the configured whitelist_mode instead of forcing open.

Testing

491 pass, 0 fail (+18 new). Default and --features asterisk both check clean.

asterisk can't link here (no libtetra-codec), so 080 is compile-checked only. Run it for
real before release.

Follow-ups

  • 081 fix is diagnostic + a clear WARN, not automatic board selection on a multi-SDR
    host. The user still sets device=. Confirm the SXceiver's post-open driver_key is
    actually sx from the new log if it still shows wrong.
  • 079: the enable flag and the config path are carried via load-time globals to keep the
    change inside net_brew + tetra-config. Works and is tested, but moving them onto
    CfgBrew/StackConfig fields is cleaner and means a config reload picks up the flag
    without a restart. Left for a follow-up.

FH-BUG-069, reopened. has_listener counts both local radios and external Brew
subscribers, so a busy worldwide TG (BM TG-91) with affiliates only on the backhaul
kept ts2 in a setup/hangtime/release loop with zero local members listening. The
earlier fix required a listener but not a local one.

Network-initiated group-call admission now checks has_local_listener, read from the
subscriber registry that only MM writes from real U-ATTACH/DETACH, so scan-off
detach clears it and the slot frees. Local U-SETUP still uses the combined count so
EchoLink-bridged TGs keep working.
FH-BUG-080. CMCE decoded the digits and handed them to the Asterisk entity as
NetworkCircuitDtmf, which logged 'currently ignored' and dropped them.

Send one in-dialog SIP INFO (application/dtmf-relay) per digit to the remote target,
CSeq bumped and persisted so back-to-back digits and the later BYE stay ordered.
CMCE only forwards tone-start digits as ASCII, so one INFO per digit with a fixed
250ms duration. Unknown/ringing dialog: dropped quietly.
FH-BUG-081. Reporter had both a µCell (driver=mucell) and an SXceiver (driver=sx)
on one Pi. detect() maps both correctly; the problem is enumeration order: with no
device= set, the first supported device wins (µCell), so the SXceiver is never
opened and the badge shows the wrong board.

Log the raw driver_key/hardware_key on every probe, WARN when more than one device
is present with the fix (set device="driver=sx"), and expose the raw keys to the
dashboard next to the name so a future misdetection is visible without SSH. On an
unrecognised device fall back to an Unknown badge instead of mislabelling.
FH-BUG-079. Firewalled basestations can only be reached over the outbound Brew link,
so the dashboard whitelist endpoint doesn't help. A user shipped a working PoC that
patched the Rust at runtime; this is the same thing upstreamed natively.

Brew Service 0xf4 type 0x30 with {"issi_whitelist":[...]} sets the runtime override,
kicks now-disallowed radios (via MM, so they actually re-register and get rejected),
and persists to config.toml. Off by default behind [brew] feature_issi_whitelist_sync
so a remote core can't take over local access control unless the operator opts in.
Empty list follows the configured whitelist_mode instead of forcing open, and never
kicks everyone.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant