2.1 KiB
FreeDMR 2 System Model
FreeDMR 2 is a layered system. The layers are design boundaries, not necessarily separate processes at first.
Access Layer
The access layer owns HBP and future client/repeater protocols. It handles login, authentication, options, keepalive, access sessions, RF-facing slot state, and RF-visible TG presentation.
A configured listener is not the client identity. A single listener should eventually support multiple clients directly, replacing proxy-mediated fan-out where possible.
Subscription Layer
The subscription layer owns talkgroup conference membership. It handles direct TG subscriptions, dial-a-TG subscriptions, static subscriptions, default reflectors, user/API/SMS activated subscriptions, expiry, and RF-visible TG to conference TG mapping.
Packet routing should consume subscription state. It should not need to know whether a subscription came from static config, dial-a-TG, API, SMS, or a future UI.
Mesh Layer
The mesh layer owns FBP/OBP/trunk-style inter-server traffic. It handles loop control, source quench, hop/version handling, bridge control, source server/repeater metadata, and conference traffic between servers.
FreeDMR remains a peer network, not hub-and-spoke. Local sysops retain local routing and policy autonomy.
Packet/Stream Layer
The packet/stream layer owns packet parsing, stream lifecycle, sequence handling, terminators, LC/embedded LC handling, data-vs-voice classification, and packet mutation boundaries.
Raw packet bytes are immutable input until an explicit named rewrite operation occurs.
Reporting Layer
The reporting layer is observational only. It emits state and events to local dashboards, global lastheard exporters, logs, and monitoring consumers.
Reporting must not steer packet routing.
Control/API Layer
The control/API layer provides explicit authenticated operations for sysop and control-plane actions. It should operate on access sessions, subscriptions, mesh peers, and reporting state without blocking the packet path.
Critical Invariant
Reporting, dashboards, APIs, databases, exporters, and monitoring consumers must not block or steer packet handling.