2.0 KiB
FreeDMR 2 Subscription Model
The subscription model is the centrepiece of FreeDMR 2.
Conceptually, each TG is a conference bridge. Client systems subscribe to conference TGs. FreeDMR routes traffic according to active subscriptions, not according to the legacy shape of the BRIDGES dict.
Definitions:
conference_tg: FreeDMR network/conference identity.rf_tg: Client-facing RF presentation identity.
Examples:
Direct TG:
rf_tg == conference_tg
Dial-a-TG:
rf_tg == 9
conference_tg == selected reflector/TG
Alias/rewrite:
rf_tg may differ from conference_tg by policy/configuration
Example subscription:
TalkgroupSubscription(
client_id=2345001,
slot=2,
rf_tg=9,
conference_tg=4400,
mode="dial",
active=True,
)
Routing Invariant
Packet routing should not need to know whether a subscription came from static config, default reflector, dial-a-TG, API, SMS control, or a future UI action. Those are subscription sources, not routing modes.
Dial-a-TG Rationale
Dial-a-TG exists so terminal users can access arbitrary FreeDMR TGs without programming every TG into the terminal/codeplug. It is an amateur-radio usability feature and should be evaluated against that goal, not only against commercial DMR fleet assumptions.
Control of dial-a-TG from TS1 as well as TS2 is intentional. If TS2 is blocked by unwanted traffic, a user can transmit private-call control on TS1 to disconnect or change the TS2 reflector/TG state.
Voice prompts should remain RF-visible as TG9 slot 2 unless that policy is deliberately changed.
FreeDMR Routing Model
- TGs are conference groups.
- DMR IDs are like phone numbers.
- Timeslots are access/capacity paths, more like phone lines.
- FreeDMR is intended to be relatively timeslot agnostic.
- TS1 control affecting TS2 reflector state is consistent with the FreeDMR PBX/line model.
This model also allows future arbitrary RF TG aliases, not only the traditional TG9 dial-a-TG rewrite.