The stack will now detect an SDS is too long to be transmitted over the air, and instead issue a warning on the console output and drop the offending sds.
* Fix downlink signaling scheduled on wrong timeslot for Brew SDS
* Forward U-STATUS to Brew when destination is not locally registered
* Zero-fill SHORT_TRANSFER number field instead of duplicating destination ISSI
* Use REREGISTER instead of REGISTER for already-registered subscribers on Brew
* Convert SDS-TL short report to Type4 for Brew and improve SDS_REPORT comment and logging
* SDS implementation: bug fixes, group delivery, U-STATUS forwarding, tests
- Fix D-SDS-DATA CPTI extension condition to match ETSI 14.7.1.10
- Add registration check in rx_sds_from_brew to drop SDS for unregistered ISSIs
- Add SubscriberRegistry with has_group_members() for group SDS routing
- Add group-addressed SDS delivery (single GSSI-addressed D-SDS-DATA PDU)
- Route U-STATUS to SDS subentity; forward as D-STATUS to local destination
- Brew→local SDS always uses SDTI=3 (Brew sends SDS Type 4 per protocol spec)
- Never forward group SDS to Brew, only individually-addressed SDS
- Add TetraPack SDS service ISSI whitelist (200999, 262993)
- Add PDU round-trip tests for D-SDS-DATA, U-SDS-DATA (8 tests)
- Add Brew protocol tests for SHORT_TRANSFER/SDS_TRANSFER (3 tests)
- Add SubscriberRegistry unit tests (4 tests)
- Add SDS integration tests: local delivery, Brew forward, group, U-STATUS (7 tests)
* LLC: ETSI-compliant BL-DATA retransmission for reliable SDS delivery
- Register expected ACK for BL-DATA (was missing — only BL-ADATA tracked)
- Store retransmission buffer to allow re-sending the same PDU on timeout
- Retransmit up to 3 times (N.252=3) with 48-timeslot timeout (T.251)
- Fix process_incoming_ack: two-pass scan — exact N(R) match first,
then mismatch handling per ETSI 22.3.2.3(k)
- Fix process_incoming_ack: match by SSI only (not timeslot) so ACKs
for retransmitted PDUs are matched correctly
- Clean up stale BL-ADATA entries on timeout (previously leaked forever)
- Fix tick_end return value to reflect retransmission activity
* Per-radio ISSIs with TetraPack safety filtering; MM improvements
- Version to 0.4.9
- Send per-radio REGISTER/DEREGISTER/AFFILIATE/DEAFFILIATE with individual ISSIs
- Add TetraPack ISSI filter: only exactly 7-digit ISSIs sent over WS
- Restrict GSSI <= 90 filter to TetraPack only
- Filter GROUP_TX forwarding for non-routable source ISSIs
- Remove Brew ISSI config field and initial BTS registration
- Rename is_brew_routable to is_brew_gssi_routable
- MM: auto-register unknown MS on group attach
- MM: send D-LOCATION UPDATE COMMAND to returning radios for group report
- MM: fix group_identity_attachment_lifetime to ETSI default
- MM: rename TemporaryRegistration to MigratingLocationUpdating
Replace mcch_queue_depth heuristic with per-message TxReceipt tracking.
CMCE checks is_in_final_state() before queuing re-sends, avoiding MCCH
flooding without mutex overhead of polling StackState every tick.
- Store Option<TxReceipt> alongside cached D-SETUPs per call_id
- Initial send stores None receipt to avoid throttling ETSI backup send
- Fresh receipt/reporter pair created for each re-send in tick_start
- Remove mcch_queue_depth from StackState/UMAC, fix interval to 5s
Known limitations (outside CMCE scope):
- mark_discarded() is never called in UMAC, so Discarded state is
unreachable. A Drop impl for TxReporter would close this gap.
- Reporter dropped without transitioning leaves receipt Pending forever,
blocking re-sends until circuit expiry. Not practical today since
circuit close also drops the receipt.
Bring in the 5s late-entry D-SETUP interval fix and return->continue
bug fix from the feature branch. Drop the mcch_queue_depth heuristic
throttle (StackState field, UMAC publish, CMCE check, dl_queue_depth)
in favor of the tx_receipt-based approach on this branch.
Llc now uses TxReporter (if present) to signal TxState::Acknowledge,
upon reception of a BL-ACK or BL-ADATA for a known previously send
message. This state change can in turn be picked up by the associated
TxReceipt held by Mm, Cmce or Sndcp.
- Handle U-DISCONNECT per ETSI 14.5.2.3.1: call owner tears down call, non-call owner rejected with D-RELEASE cause=8
- Set call_ownership=true in D-CONNECT for calling MS (ETSI 14.8.4)
- Pass disconnect_cause through release_call/build_d_release instead of hardcoding cause=13
- Remove unused send_d_connect (superseded by inline D-CONNECT in rx_u_setup)
- Fix misleading null PDU debug message to log actual remaining bits