Skip to content

F4FXL/DStarGateway

Repository files navigation

F4FXL

1. Introduction

This is a port of G4KLX Jonathan Naylor's ircddbGateway. It is wxWidgets free and has minimal dependencies to boost (header libs only) and libcurl. I plan to ad some features in the future

2. Current State

2.1. Code sanity

The current code is working, yet it is a mix of C and C++ of various ages and there is plenty of room for rework. I realised that G4KLx started programming this over a decade ago, when C++11 was not yet a thing !

The code has also been amended to no longer rely on compiler defines for paths like log or data. These can be set in configuration file.

Quite a few classes are more or less copy/paste from each other some sanitization by using base classes or template classes would greatly improve code maintainibility. Maybe one day ;)

2.2. Code Credits

2.3. Thanks

  • Cyrille F1MHV / DF1CHB for the testing
  • Jonathan Naylor G4KLX for all the work ahead and the rock solid code base

2.4. Features

All the features found in ircddbGateway are supposed to be working. Except the ones listed below

2.4.1. Features that where left out :

  • CCS: is still being used? I always considered this as trojan horse to push some DMR Agenda into DStar and a burdain to use. Call sign routing is by far more flexible and superior.
  • Starnet: You might consider running Smart Group Server XL from a dedicated computer instead.
  • Announcement: same can be achieved using VoiceTransmit.
  • APRSGateway capability: I would prefer to have some sort of TCP "APRS-IS proxy" program sitting between the program and the APRS server, thus keeping the ability to directly connect to APRS-IS or not, depending on the system owner wish. I run mostly DStar Only repeaters, having an additional program to maintain is unnecessary overkill.
  • CallSign Server : this is a legacy from the dead project xreflector.net, I will most probably drop it for good.

2.4.2. Additional Features compared to ircddbGateway:

  • DPlus, DExtra and G2 NAT Traversal using ircddb network as rendez-vous server. I.e. it is not required to open firewall ports for Callsign Routing or Gateway calls. however it is still recommended to do so. But NAT Traversal will bring more flexibility when operating on CGNAT (Mobile) Networks.
  • Forward RSMS1A app messages from/to APRS-IS Network, yes you can send/receive messages to and from aprs. Yes, you can send messages to APRS stations and Vice Versa. Additionnally, part of the message is sent as Text Dat in the slow data. This allows you to read the message directly on your radio screen.
  • Repeater Link status is sent to APRS-IS as a status frame

3. Building and installing

3.1. Initial setup

Clone the repository (only required initally)

git clone https://github.com/F4FXL/DStarGateway.git
cd DStarGateway

3.2. Get latest stable version (recommended)

From inside the cloned repository run following commands to get the latest stable version

git pull -p
git fetch --tags
latestTag=$(git describe --tags `git rev-list --tags --max-count=1`)
git checkout $latestTag

3.3. Get latest development version

git checkout develop

3.4. Prerequisites and dependencies

Before first time building you need to install dependencies and prerequisites

sudo apt install build-essential libcurl4-openssl-dev libboost-dev

If you are going to build with gpsd support, also install libgps-dev

sudo apt install libgps-dev

3.5. Building

Regular building

make

3.5.0.1. Build With GPSD Support

make USE_GPS=1

3.5.0.2. Debug Build

make ENABLE_DEBUG=1

Note that this will will add libl dependency. Building this way will output the stack trace in case of a crash.

3.6. Installing

The program is meant to run as a systemd service. All bits an pieces are provided.

sudo make install newhostfiles

3.7. Configuring

After installing you have to edit the configuration file. If you went with default paths, the config file is located in /usr/local/etc/dstargateway.cfg

The configuration format is quite straight forward. It is organised in sections and key/value pairs. The order of the sections or key/values pairs inside the sections does not matter nor does casing. Boolean values can be set using true, false, 1 or 0 Floating point values must use . (point) as decimal separator.

When done with configuration, the daemon will be started automatically on next boot. To manual start and stop it, use the usual systemd commands

sudo systemctl start dstargateway.service
sudo systemctl stop dstargateway.service

3.8. Updating host files

To update host files, from within the source code directory, run

sudo make newhostfiles
sudo systemctl restart dstargateway.service

4. Dashboard

@johnhays K7VE has developed a nice lightweight NodeJS dashboard. Code and instructions can be found on his GitHub.

Here are some instances of it:

5. Contributing

5.1. Work Flow

I Use Git flow as my workflow. PR are welcome but pleasee observe following rules :

  • You have tested your code thoroughly
  • Compilation produces no warnings
  • Code formating rules are observed (these are very lousy though)

5.2. Continuous Integration

I have added some basic CI using CircleCI F4FXL I am trying to rewrite the code so that it can be put into some Behavior Driven Development scheme. This is a long haul task and I'll try do do it on the go while changing/adding stuff. The testing framwework used is Google Test.

6. Version History

6.1. Version 1.0

  • [Improvement] Limit log reporting (#44)
  • [Improvement] Improve CI to include all variants of build configurations (#40)
  • [Bugfix] Fix #43 Cache not updated when answering ircddb gateway is only conected to one network (#43)
  • [Bugfix] Fix #37 Unable to transmit multiple files (DGWVoiceTransmit) (#37)
  • [Bugfix] Fix #36 Error1 Build fails in some environment (#36)
  • [Bugfix] Fix #38 g++ 13 build (#38)
  • [Bugfix] Add support for libgps API version greater than 10(#39)
  • [Bugfix] Fix Dongles requires a Frequency (#15)

6.2. Version 0.7

  • [Bugfix] Unknow repeater entries in log when using Icom Hardware (#34)
  • [Bugfix] Malformed callsign in some cases when using DV-G (NMEA) (#33)
  • [Bugfix] Crash on startup with Icom Hardware. Thanks to Josh AB9FT for reporting the issue.(#31)
  • [Improvement] Add/Fix DPRS Object support(#28)
  • [Improvement] Log incoming DPRS frames so they can be used in e.g. dashboards(#29)

6.3. Version 0.6

  • [Improvement] Add DRats Support (#24)
  • [Improvement] Add call sign lists (#22)
  • [Improvement] Add a way to override Slow Data in VoiceTransmit (#23)
  • [Improvement] Add time server
  • [Improvement] Gracefully exit on SIGINT and SIGTERM (#21). DStarGateway can also be run as a "forking" daemon. This might be required for distros still using sysv. Systemd can live without it.
  • [Improvement] Add text transmit utility dgwtexttransmit (#18)
  • [Improvement] Add voice transmit utility dgwvoicetransmit (#18)

6.4. Version 0.5

  • [Improvement] Add remote control utility dgwremotecontrol (#17)
  • [Bugfix] Two simultaneous incoming G2 streams would fail to be transmitted on dual band repeaters (#16)
  • [Improvement] Add NAT Traversal for G2 and DExtra, using IRCDDB as a Rendez Vous server (#5)
  • [Improvement] Add forwarding of RS-MS1A messages to APRS-IS (#9)
  • [Bugfix] Failed to download XLX Hosts when URL contains a = sign (#14)
  • [Bugfix] Remote control connection failed (#13)
  • [Bugfix] Trying to connect to ghost ircDDB when no ircDDB is configured

6.5. Version 0.4

  • [Improvement] Add APRS status link feature (#8)
  • [Bugfix] Positions received over radio were not sent to APRS-IS when GPDS connection failed. (#7)
  • [Improvement] Bring back GPSD support (#6)
  • [Improvement] Log enhancements (#4)

6.6. Version 0.3

  • [Improvement] Get rid of libconfig++ dependency. When upgrading from earlier version you need to manualy delete the config file before reinstalling.

6.7. Version 0.2

  • [Bugfix] ircDDBFreeze when repeater not found (#1)
  • Code sanitization

6.8. Version 0.1

First working version

7. Future

I started this during my 2021 seasons holiday. It took me almost 8 days to get to a workable version. Here are a couple of stuff I'd like to do :

  • ☑ Better NatTraversal
    • No banging on every gateway: use ircDDB (or something else) as mitigation server to notify peer
    • Support for all protocols (G2, DExtra, DPlus) DCS does nto make sense as it was historically never used as protocol for linking repeaters
  • ☑ Send the connection status to APRS-IS as a status frame
  • ☑ Reinstantiate DRATS
  • ☑ Migrate all the "accessories" (VoiceTransmit, RemoteControl ...)
  • ☒ Automatic refresh of host files
  • ☒ Reduce ircDDB dependency, build something more P2P, maybe based on Distributed Hashtable ?
  • ☑ Forward messages from RS-MS1A to APRS and vice versa
  • Everything that might come handy to make dstar the most powerful system ever :)

About

A wxWidget free port of ircddbGateway with some more (not yet all implemented) features ;)

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published