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.
42 lines
2.1 KiB
42 lines
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.
|