You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
FreeDMR/docs/dmr-data-observability.md

101 lines
4.3 KiB

# DMR Data Observability
FreeDMR can emit passive, per-burst metadata for received DMR data/control
traffic. The observer does not change routing, packet bytes, acknowledgement
state or delivery behavior.
## Enable
The feature is disabled by default. Enable it in `[GLOBAL]`:
```ini
DATA_PACKET_LOGGING: True
```
Restart FreeDMR after changing the setting.
The setting applies to both HBP and FBP/OpenBridge receive paths. Voice header,
voice payload and voice terminator bursts never enter the data observer.
At normal `INFO` log level, FreeDMR emits only decoded human-readable records:
- `*DMR DATA TEXT*` for conservative ASCII, UTF-16BE or UTF-16LE text;
- `*DMR DATA GPS*` for complete NMEA GPRMC/GNRMC positions;
- existing `*IN-CALL TA*` records for complete Talker Alias text;
- existing `*IN-CALL GPS*` records for decoded embedded-LC positions.
Set the server log level to `DEBUG` when raw burst and protocol detail is also
required.
## Logged fields
At `DEBUG`, each eligible RX burst produces one bounded
`*DMR DATA OBSERVE*` record:
| Field | Meaning |
| --- | --- |
| `TRANSPORT` | Source receive path: `HBP` or `FBP/OBP`. |
| `STREAM ID`, `SEQ`, `TS`, `CALL` | Wrapper stream and burst metadata. |
| `SRC`, `DST`, `PEER` | Wrapper source, destination and peer IDs. |
| `TYPE` | Data type reported by the HBP/FBP wrapper. |
| `AIR_TYPE`, `CC` | Uncorrected Slot Type data bits carried in the 33-byte DMR burst. |
| `MATCH` | Whether wrapper and air-burst data types agree. |
| `CODING` | Expected coding for the wrapper data type. |
| `SYNC` | Raw 48-bit center sync field. |
| `DPF` | Data Packet Format for a BPTC-decoded Data Header. |
| `CSBKO`, `FID` | Opcode and feature-set ID for a BPTC-decoded CSBK. |
| `LOGICAL` | Generic 12-byte BPTC(196,96) information extraction where applicable. |
| `RAW` | Complete original 33-byte DMR burst payload. |
| `CRC` | Validation status. The first implementation reports `NOT_CHECKED`. |
Supported DPF labels are UDT, response, unconfirmed, confirmed, defined short
data, raw/status short data and proprietary. Unknown values remain numeric and
are labelled `UNKNOWN`.
CSBK, MBC header/continuation, Data Header and Rate 1/2 bursts receive generic
BPTC extraction. Rate 3/4 and Rate 1 payloads are kept raw; this observer does
not guess at trellis or rate-1 decoding. Idle and reserved burst types are
deliberately skipped to avoid noise and log-volume overhead.
## Human-readable reconstruction
The observer keeps a small per-router least-recently-used collector. It retains
at most 32 data streams and 256 logical bytes per stream. Only decoded Rate 1/2
logical blocks are accumulated; voice, CSBK, Data Header, Idle, Rate 3/4 and
Rate 1 payloads are not added to the human-content buffer.
Obvious text runs of at least four characters are reported. The known UDP port
signature `5016` (`1398` hexadecimal) gives an `ETSI/ANYTONE` SMS profile hint,
and port `4007` (`0fa7`) gives a `MOTOROLA` SMS hint. These are hints for capture
analysis, not proof that every payload follows that vendor profile.
Complete `$GPRMC` and `$GNRMC` sentences are converted to decimal latitude and
longitude and include status, UTC, speed in knots and course. Duplicate text or
location observations within the bounded stream buffer are suppressed.
## Deliberate limits
This is a capture aid, not a DMR data endpoint. It does not currently:
- validate or correct BPTC, CRC16, CRC9 or data CRC32;
- perform standards-complete DMR fragmentation/pad/CRC reassembly;
- send confirmed-data ACK/NACK/SACK responses;
- infer a vendor profile;
- decode binary MD-380, Motorola LRRP or Hytera LP locations;
- parse ARS, IP packets or vendor application ACKs;
- write new report-socket event formats.
Those features need capture-backed fixtures for ETSI/Anytone, MD-380-like,
Hytera and Motorola profiles before they can be implemented reliably.
## Performance and privacy
When disabled, the receive path performs only the configuration check and exits.
When enabled, per-burst work and collector memory are bounded. Human-readable
records are concise at `INFO`; detailed `DEBUG` logging can be voluminous, so
use it only while collecting protocol captures on a system with appropriate log
capacity.
`RAW` and `LOGICAL` may contain private message, location or application data.
Treat these logs as sensitive and disable the feature after capture work.

Powered by TurnKey Linux.