OpenDMR_Bridge

A simple DMR bridge that connects two DMR servers and links talkgroups together

OpenDMR_Bridge

A simple DMR bridge that connects two DMR servers and links talkgroups together.

Features

  • Connects to two DMR servers simultaneously as a repeater client
  • Bridges all voice traffic between networks
  • Automatic reconnection on connection loss
  • SHA-256 password authentication

Configuration

Create a config.toml file with the following format:

[network_a]
address = "dmr-a.example.net:62031"
password = "pass123"
talkgroup = 9001

[network_b]
address = "dmr-b.example.net:62031"
password = "pass456"
talkgroup = 9002

Each network only forwards traffic from its configured talkgroup to the other network's talkgroup, preventing loopback.

Important: You must configure static talkgroups on each DMR network for the bridge's repeater IDs:

  • On Network A: Add static TG 9001 subscription for repeater ID 10485761 (0x00A00001)
  • On Network B: Add static TG 9002 subscription for repeater ID 11534337 (0x00B00001)

Without static talkgroup configuration on the server side, the bridge will not receive traffic.

Building

go mod download
go build -o opendmr_bridge

Usage

./opendmr_bridge config.toml

How it works

The bridge:

  1. Connects to both DMR servers as a repeater
  2. Authenticates using the provided passwords
  3. Monitors traffic on each configured talkgroup
  4. Forwards traffic FROM one talkgroup TO the other (rewriting destination TG)
  5. Prevents loopback by only forwarding traffic destined to each network's own TG

Example

With the config above:

  • Traffic to TG 9001 on network_a is forwarded to TG 9002 on network_b
  • Traffic to TG 9002 on network_b is forwarded to TG 9001 on network_a
  • Each network ignores the TG it's forwarding to, preventing loops