2.9. System Design

The system has been designed from the ground up specifically for RAYNET usage. The system is split into separate docker containers which are run on a Kubernetes cluster.

The primary containers are

  • DMR traffic is handled via golang binary

  • Web UI interface is written in Ruby on Rails

  • Backend database uses MySQL

  • Documentation is written using SPhinx-Doc generating static HTML pages which are hosted on an nginx container.

@startuml
  actor User
  node "WebUI"
  node "DMR"
  node "API"
  database "MySQL"
  cloud  "Internet"
  collections "Hotspots"
  collections "Repeaters"

  WebUI -- MySQL
  User -- WebUI
  DMR -- API
  API -- MySQL
  DMR -- Internet
  Internet -- Hotspots
  Internet -- Repeaters

@enduml

2.9.4. DMR Service

@startuml
  (*) --> if "DMR traffic"
      --> [RPTL]  "Login Request"
      --> "Query Peer ID"
      --> if ""
        --> "RPTACK with salt"
        else
        --> "MSTNAK"
        endif
    else
      --> [RPTK]  "Login Attempt"
      --> "Compare auth token"
      --> if ""
        --> "RPTACK"
        else
        --> "MSTNAK"
        endif
    else
      --> [RPTP]  "Ping from Peer"
      --> if "valid"
        --> "MSTPONG"
        else
        --> "MSTNAK"
       endif
    else
      --> [RPTCL] "Peer Closing down"
      --> "Disconnect peer"
    else
      --> [RPTC]  "Peer configuration"
      --> "Update configuration"
    else
      --> [DMRD]  "DMR Data Received"
      --> "Validiate Talkgroup and sending DMRID"
      --> "Lookup peers listening for Talkgroup traffic"
      --> "Send Audio traffic to peers"
    endif

@enduml

The DMR server is written in golang listens on UDP port 62030 and queries the backend SQL database via an API interface.

2.9.5. Web Portal

The web portal is written in Ruby on Rails and runs inside a docker container. It provides users with a UI to interact with the service.

  • Users are able to add their DMRIDs

  • Create peers/hotspots.

  • View lastheard information

  • Connection logs

  • Group membership

  • Call logs