# 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.