Introduction

As mentioned in my post on AX.25 over Ethernet, it can frequenly be useful to transport AX.25 traffic over other networks. In the modern era the obvious candidate is the Internet.

There are two common ways of transporting AX.25 frames over Internet Protocol (IP) networks, both often referred to collectively as AXIP.

Packets can be directly encapsulated in IP frames using the protocol type 93, or inside UDP frames. The latter method is sometimes referred to as AXUDP.

AXIP has less overhead than AXUDP but can be harder to handle, particularly with domestic network equipment due to the unusual protocol number.

AXUDP comes with a little more overhead but the advantage of being the more common UDP protocol type, and using a UDP port number allows for several AXUDP connections to be handled by a single IP address.

The Linux implemenation of AX.25 over IP - ax25ipd can handle both types of encapsulation, but I'll be using AXUDP for this example.

I have also created an AXIP Ansible Role to automate this process.

Concept

ax25ipd can be seen as a bridge with the IP network on one side and KISS-encapsulated AX.25 frames on the other.

Rather than interacting directly with the Linux AX.25 stack, ax25ipd connects to a serial port or pseudo terminal. This could be used to connect a hardware KISS TNC at a remote location.

In order to connect it to a Linux system, it is necessary to use an additional peice of software to simulate a serial cable, with ax25ipd on one end and kissattach on the other.

The ax25-tools package provides kissnetd for this purpose, but it is awkward to use on modern linux systems with dynamic (Unix98) pseudo terminals as it requires its output to be parsed to determine which pseudo terminal has been allocated, and ax25ipd reconfigured to use this. A more convienent solution is to use socat, which will manage the pseudo terminal and provide symbolic links in a fixed location for ax25ipd and kissattach to use.

socat

The first thing we need to do is set up the systemd service to manage socat.

Create a file at /etc/systemd/system/kiss-socat-axip.service containing the following:

# /etc/systemd/system/kiss-socat-axip.service
[Unit]
Description=Socat interconnect for AX25 AXIP
After=network-online.target
Wants=network-online.target

[Service]
WorkingDirectory=/var/ax25
ExecStart=socat -d -d -ly pty,raw,echo=0,link=/var/ax25/pty/axip1 pty,raw,echo=0,link=/var/ax25/pty/axip2
ExecStartPost=/usr/bin/bash -c 'while ! [ -h /var/ax25/pty/axip2 ]; do sleep 1 ; done'
ExecStopPost=rm /var/ax25/pty/axip1 /var/ax25/pty/axip2

[Install]
WantedBy=multi-user.target

Create the /var/ax25/pty directory, then enable and start the service:

$ sudo mkdir -p /var/ax25/pty

$ sudo systemctl daemon-reload

$ sudo systemctl enable kiss-socat-axip

$ sudo systemctl start kiss-socat-axip


axports

we need an entry in /etc/ax25/axports - use your callign and a suitable SSID:


axip N0CALL-11 115200 255 7 AXIP

This defines the ax.25 port 'tnc' with its callsign, serial port speed, packet size, window size, and finally a comment describing the port.

kissattach

The kissattach program is used to set up communication between Linux's AX.25 stack and ax25ipd, via the socat process.

Create a file at /etc/systemd/system/kiss-tnc@.service containing the following:

# /etc/systemd/system/kiss-tnc@.service
[Unit]
Description=AX25 KISS TNC %I

[Service]
ExecStart=/usr/sbin/kissattach $TNC_TTY %i
ExecStop=pkill -f "kissattach $TNC_TTY %i"
ExecStartPost=/usr/bin/bash -c 'while ! /usr/sbin/kissparms -c 1 -p %i; do sleep 1; done'
TimeoutStopSec=5
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target

This is a template unit file that can be used for several TNCs or AXIP tunnels.

To configure an instance for our AXIP tunnel, first enable it:

$ sudo systemctl enable kiss-tnc@axip

Then edit it:

$ sudo systemctl edit kiss-tnc@axip

Add the following to the top of the file and then save it:


[Unit]
After=kiss-socat-axip.service
After=network-online.target
[Service]
Environment=TNC_TTY=/var/ax25/pty/axip2

This tells kissattach where to fine the pseudo terminal, and systemd to wait until socat is running before trying to run kissattach.


As we've already started socat, we can bring up this service now:

$ sudo systemctl start kiss-tnc@axip

ax25ipd

Next we need to configure ax25ipd. Create /etc/ax25/ax25ipd.conf with the following contents:


# /etc/ax25/ax25ipd.conf
socket udp 10095
mode tnc
device /var/ax25/pty/axip1
speed 115200
loglevel 2
broadcast NODES-0
route N1CALL axip.example.net b

The exact contents of this file will depend on the software you are running and your AXIP peer.

The socket line dictates with UDP port will be used for this connection, and will need to match what is being sent by your peer.

The broadcast line is a list of destinations that will be treated as broadcast traffic. NET/ROM operation requires NODES-0. If you are running the fbb bulletin board software you may need to add FBB-0.

The route line defines your peer, and should include their callsign and internet host name or IP address. The final 'b' on the line indicates that they should receive broadcast traffic.


Finally, we need to create a systemd service for ax25ipd. Create /etc/systemd/system/ax25ipd.service containing the following:


# /etc/systemd/system/ax25ipd.service
[Unit]
Description=AX.25 over IP (AXIP) daemon
After=network.target
StartLimitInterval=0

[Service]
Type=simple
Restart=always
RestartSec=5
ExecStart=/usr/sbin/ax25ipd

[Install]
WantedBy=multi-user.target

$ sudo systemctl daemon-reload

$ sudo systemctl enable ax25ipd

$ sudo systemctl start ax25ipd

If everything has worked, you should now be able to use axcall axip N1CALL to connect to your peer.

Posted Sun Jan 21 13:35:10 2024 Tags:

Having made some changes to how my email is handled recently I wanted to tidy things up by having my FreeBSD systems submit mail via my mail provider's authenticated SMTP submission service.

Googling for how to do this turned up a lot of advice, much of it dated and often more complicated than is currently required, so I thought I'd document where I got to for the benefit of others trying to do this.

I'm assuming this is being done on a system where sendmail has already been configured generally. See the FreeBSD handbook if this isn't the case.

Firstly, the Sendmail shipped with FreeBSD 13 doesn't include the SASL features required to do authentication. The easist way to fix this is to install a more complete version from pkg using pkg install sendmail.

Once this is done, installing the supplied mailer.conf file will tell the system to use this version of sendmail.


cd /usr/local/etc/mail
cp mailer.conf.sendmail mailer.conf

To tell sendmail to use a smarthost, and to authenticate to it requires a couple of changes.

Firstly in /etc/mail/${HOST}.mc, add


define(`SMART_HOST', `smtp.example.com')
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
FEATURE(`authinfo', `hash -o /etc/mail/authinfo')dnl

Then create /etc/mail/authinfo containing


AuthInfo:smtp.example.com "U:me@example.com" "I:me@example.com" "P:passw0rd" "M:LOGIN"

For my provider the U: (username) and I: (identity) values are the same, for others they may be different, e.g. to send from a different mailbox to the one being used to authenticate.

Build the authinfo database, and install the modified sendmail configuration:


cd /etc/mail
makemap hash authinfo < authinfo
make all
make install
service sendmail restart

Posted Mon Jun 26 12:30:08 2023 Tags:

Back in 2022 after I discovered letterboxd I decided to try working my way through the Academy of Motion Picture Arts and Sciences "Best Picture" Oscar winners that I'd not already seen.

First off, this isn't something I'd recommend doing unless you're keen on ticking off a list - they're some well documented utter stinkers that really aren't worth spending the time to watch, and many good films that whatever reason were passed over by the awards.

At the time I started I'd seen 19 out of the then 94 winning films, and I watched the 95th - Everything Everywhere All at Once (2022) - before the 2023 awards.

I was able to watch a few of the remaining films through streaming subscriptions we have or from having previously recorded them from television broadcasts. Most of the remainder I watched as digital rentals from Microsoft, Amazon, or Sky.

The final few: The Broadway Melody (1929), The Life of Emile Zola (1937), Gigi (1958), One Flew Over the Cuckoo’s Nest (1975), and Million Dollar Baby (2004) were not available to stream anywhere at the time but I was able to obtain them on DVD. A couple of those titles were available to 'buy' - essentially perpetual rentals - but I'm skepical of the longevity of those. If I'm going to spend more than I would for a rental I'd rather get a disk I can actually keep.

Before watching The Return of the King (2003), I also watched The Fellowship of the Ring (2001), and The Two Towers (2002), the first of which I'd already seen.

I won't try to review every film I've watched, but I do want to mention a few that I particularly enjoyed.

Wings (1927)

A remarkable film, both the first winner of the prize and, until The Artist in 2011, the only Silent Film to do so. Predating the development of model photography, all the flight sequences were performed with real aircraft and assistance from the Air Corps.

Grand Hotel (1932)

A simple plot weaved between a cast of characters in a Berlin hotel, elevated by fantastic performances by some big stars of the day including Greta Garbo and Joan Crawford.

An American in Paris (1951)

The story feels dated now but it's more than made up for by the great song and dance sequences.

The Godfather (1972)

One of those films I feel that I ought to have seen already and a bit of an odd experience as I'd seen many of the notable sceenes clipped out in documentaries or parodied in other media.

The King’s Speech (2010)

As a stammerer, this was a stressful watch. Firth manages to convey perfectly just how frustrating it is when the words you have to say just won't come out no matter how hard you try.

CODA (2021)

On one level a run of the mill coming of age story, but the centering of Deafness in the story adds an interesting angle to it.

Posted Sat May 20 14:03:07 2023 Tags:

Saw some great films over the last few days that were screening as part of the Bo'ness Hippodrome's "Hippfest" silent film festival.

The Blue Bird (1918) A children's fantasy based on a stage play, with what I assume were at the time innovative filming tecniques.

The Man Who Laughs (1928), based on a Victor Hugo novel with great performances and a main character who's appearance would go on to influence other creative works including DC Comics' Joker.

Shooting Stars (1928) A drama set itself in and around the British film industry of the time, offering as well as a gripping story a glimse into the practicalies of the silent era studio systems.

I've watched silent films at home before but it's a much richer experience to see them in a theatre, especially with the live music performances which had been arranged to accompany the films.

I really like the Hippodrome as a cinema venue, and I'll certainly try to catch the festival again next year.

Posted Sun Mar 26 23:16:58 2023 Tags:

While AX.25 is typically used over radio links, there are circumstances where it is useful to transport it by other means, such as wired or wireless ethernet, or over established wide area networks.

As with many other protocols, it is fairly simple to encapsulate AX.25 in another network layer, and dencapsulate it when it reaches its destination. For long-distance links it is common to us AX.25 over Internet Protocol, either on the Internet itself or over private networks such as AMPRNet.

In the situation where it is desirable to connect AX.25 systems on a local network, AX.25 over ethernet offers a less complicated solution.

Both Linux and BPQ32 implement AX.25 over Ethernet as 'BPQEther', and it can be used to interoperate between those systems.

On my local network I have a couple of systems running Linux's AX.25 implementation, one of which is connected a radio using a NinoTNC.

On Linux, making use of BPQEther is a simple matter or loading the 'bpqether' module. One this is loaded, it will create a number of 'bpq' network interfaces, corressponding to the number of ethernet devices on the system. The mappings can be found in /proc/net/bpqether.


dev   ether      destination        accept from
bpq0  eth0       ff:ff:ff:ff:ff:ff  *

To make use of a device, it first needs to be assigned a callsign:

axparms --setcall bpq0 MYCALL-7

optionally, a specific ethernet destiation can be set using bpqparms -d, otherwise packets will be sent to the network broadcast address, which is adaquate for simple setups with only a small number of systems.

On my Debian based systems I use a the normal network interfaces files to manage bpqether interfaces:


# /etc/network/interfaces.d/bpq0
auto bpq0
iface bpq0 inet manual
  up bpqparms bpq0 -d broadcast
  up axparms --setcall bpq0 MYCALL-15
  up ip link set dev bpq0 up
  down ip link set dev bpq0 down

For AX.25 applications to make use of the port, it should also be listed in the axports file.


#name   callsign    speed       paclen window description
bpq0    MYCALL-15   1000000000  255    7      BPQETHER for eth0

Posted Thu Mar 23 15:43:48 2023 Tags:

Introduction

The socat mechanism described in my AX25 over IP post can also be used to connect other AX.25 systems that use KISS together. A practical use of this is to connect a LinBPQ instance to the Linux AX.25 stack on the system that it's running on. This can be helpful to share a TNC between the two systems, and to allow systems to reach NET/ROM systems via the other system.

socat

The first thing we need to do is set up the systemd service to manage socat.

I'm assuming BPQ will be running as the linbpq user as is the case for the packaged version of LimBPQ distributed by OARC. You may need to adjust the ownership of the /var/ax25/pty/bpq directory if this is not the case on your system.

Create a file at /etc/systemd/system/kiss-socat-local.service containing the following:

# /etc/systemd/system/kiss-socat-local.service
[Unit]
Description=Socat interconnect for BPQ
After=network-online.target
Wants=network-online.target

[Service]
WorkingDirectory=/var/ax25
ExecStart=socat -d -d -ly pty,raw,echo=0,link=/var/ax25/pty/bpq/bpq1 pty,raw,echo=0,link=/var/ax25/pty/bpq/bpq2
ExecStartPost=/usr/bin/bash -c 'while ! [ -h /var/ax25/pty/bpq/bpq2 ]; do sleep 1 ; done'
ExecStopPost=rm /var/ax25/pty/bpq/bpq1 /var/ax25/pty/bpq/bpq2
User=linbpq

[Install]
WantedBy=multi-user.target

Create the /var/ax25/pty/bpq directory, then enable and start the service:

$ sudo mkdir -p /var/ax25/pty/bpq

$ sudo chown linbpq /var/ax25/pty/bpq

$ sudo systemctl daemon-reload

$ sudo systemctl enable kiss-socat-local

$ sudo systemctl start kiss-socat-local

axports

we need an entry in /etc/ax25/axports - use your callign and a suitable SSID:


local N0CALL-12 115200 255 7 Local connection to LinBPQ

kissattach

The kissattach program is used to set up communication between Linux's AX.25 stack and LinBPQ, via the socat process.

Create a file at /etc/systemd/system/kiss-tnc@.service containing the following:

# /etc/systemd/system/kiss-tnc@.service
[Unit]
Description=AX25 KISS TNC %I

[Service]
ExecStart=/usr/sbin/kissattach $TNC_TTY %i
ExecStop=pkill -f "kissattach $TNC_TTY %i"
ExecStartPost=/usr/bin/bash -c 'while ! /usr/sbin/kissparms -c 1 -p %i; do sleep 1; done'
TimeoutStopSec=5
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target

This is a template unit file that can be used for several TNCs or AXIP tunnels.

To configure an instance for our AXIP tunnel, first enable it:

$ sudo systemctl enable kiss-tnc@local

Then edit it:

$ sudo systemctl edit kiss-tnc@local

Add the following to the top of the file and then save it:


[Unit]
After=kiss-socat-local.service
[Service]
Environment=TNC_TTY=/var/ax25/pty/bpq/bpq2
Restart=on-failure
RestartSec=5s

And then start the service:

$ sudo systemctl start kiss-tnc@local

LinBPQ

To configure the LinBPQ side of the connection, add the following to your bpq32.cfg file. Adjust the port number to fit with the numbering scheme you are using.


PORT
 PORTNUM=2
 ID=local
 PROTOCOL=KISS
 COMPORT=/var/ax25/pty/bpq/bpq1
 SPEED=115200
 QUALITY=0
 MINQUAL=128
 MAXFRAME=2
 FRACK=4000
 RESPTIME=1000
 RETRIES=10
 PACLEN=236
ENDPORT

The restart LinBPQ:

$ sudo systemctl restart linbpq

After a few moments you should find you can connect to your LinBPQ instance from Linux with axcall local and the callsign BPQ is using.

By increasing the QUALITY setting and configuring netromd on the Linux side, NET/ROM routing information can be exchanged between the two systems.

Posted Wed Mar 22 12:25:05 2023 Tags:

Introduction

This post aims to explain how to set up a basic Linux NET/ROM node for participation in Amateur Packet Radio.

Lines starting with $ are commands to be typed.

I'll be using a Raspberry Pi 3 running the current Raspberry Pi OS at the time of writing (bullseye), and a NinoTNC USB KISS TNC. These instructions will likely work for Debian and other debian-dervied systems, and other KISS TNCs including soundmodem and direwolf, but they will require their own configuration be done first.

I've also written an ansible role to perform the same steps described here.

SSIDs and aliases

AX.25 identifies ports using Amateur Radio callsigns. As it is often necessary to have more than one port or station, Secondary Station Identifiers (SSIDs) are used. These take the form of CALLSIGN-NUMBER.

The number can be from 0 to 15. When 0 is used it is typically ommited when the SSID is displayed and just CALLSIGN is shown.

While SSIDs can be used for anything there are some conventions associating particular numbers with particular types of service.

In general, low numbers are reserved for services that users will interact with and high numbers used for things like backbone ports which will not normally be seen.

NET/ROM aliases are used to provide convenient names for services, and are frequently used to provide geographic names for nodes. They should be 6 characters or less.

Software packages

Starting with a fresh, updated Raspberry Pi OS. we need to install ax25-tools and ax25-apps.

$ sudo apt-get install ax25-tools ax25-apps

Kernel modules

AX.25 and NET/ROM is included in the Linux kernel packages. AX.25 will load automatically when we configure the TNC, but we need to ensure netrom is loaded.

Add netrom to /etc/modules. To load it right away, run:

$ modprobe netrom

TNC

Before we can use the TNC we need to define an AX.25 port for it, and run kissattach to enable it.

Add the following to /etc/ax25/axports, replacing N0CALL with the callsign being used:


tnc     N0CALL-15        57600 255      7       NinoTNC

This defines the ax.25 port 'tnc' with its callsign, serial port speed, packet size, window size, and finally a comment describing the port.

The kissattach program is used to set up communication between a Linux AX.25 interface and a KISS TNC.

In order to assure it runs automatically when the system boots, I'm going to use a systemd unit.

Create a file at /etc/systemd/system/kiss-tnc@.service containing the following:

# /etc/systemd/system/kiss-tnc@.service
[Unit]
Description=AX25 KISS TNC %I

[Service]
ExecStart=/usr/sbin/kissattach $TNC_TTY %i
ExecStop=pkill -f "kissattach $TNC_TTY %i"
ExecStartPost=/usr/bin/bash -c 'while ! /usr/sbin/kissparms -c 1 -p %i; do sleep 1; done'
TimeoutStopSec=5
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target

This is a template unit file that can be used for several TNCs or AXIP tunnels.

To configure an instance for our TNC, first enable it:

$ sudo systemctl enable kiss-tnc@tnc

Then edit it:

$ sudo systemctl edit kiss-tnc@axip

Add the following to the top of the file and then save it:


[Service]
Environment=TNC_TTY=/dev/ttyACM0

$ sudo systemctl start kiss-tnc@tnc

At this point, ip link show should list an AX.25 port - ax0 as well as four netrom ports - nr0 - nr3.

We can test that the interface and TNC are working with the 'beacon' command:

$ beacon -s tnc 'This is a test'

If everything is working this will key the radio and send a short message.

If you don't have a radio attached to the TNC you can also check the operation of the beacon command by running axlisten -cra in a second terminal window - this will monitor all AX.25 activity on the machine.

NET/ROM port

There are two configuration files for netrom - nrports and nrbroadcast.

Much like axports, nrports assosicates a netrom port name with a callsign, as well as aliases, link quality and a descriptive comment.

Add the folllowing to /etc/ax25/nrports, again substituting the callsign, and replacing NCALL with a suitable alias for this port.


netrom N0CALL-14 NCALL 236     Linux Switch Port

nrbroadcast defines a list of AX.25 ports that we're going to run NET/ROM over and that we will use to broadcast routing information.

It also defines parameters which affect descisions about what routes we will accept, and information for other stations about our routes.

I'm not going to describe these in detail just now. If you're joining a NET/ROM network your link partner should be able to advise on the best settings for this file.

Comment out the default lines in /etc/ax25/nrbroadcast with # characters and add the following:


tnc 5   203 129 1

As with the TNC, we also need to run a command - nrattach - to enable our NET/ROM interface, and again I'll be using a unit file to make sure this happens on boot.

Create /etc/systemd/system/nrattach@.service with the following:


[Unit]
Description=AX.25 NET/ROM interface %I
After=network.target
StartLimitInterval=0

[Service]
Type=oneshot
ExecStart=/usr/sbin/nrattach %i
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target

This is a template unit so we can use it for more than one netrom port if needed. Specify the netrom port name after an @ when issuing systemctl commands.

$ sudo systemctl daemon-reload

$ sudo systemctl enable nrattach@netrom

$ sudo systmectl start nrattach@netrom

Note: nrattach can be unpredictable if run in parallel. If you're going to use this unit for mutiple NET/ROM ports it will be necessary to ensure the ports are brought up in sequence. This r/systemd post explains how to do this.

netromd

We need to run netromd which will manage the exchange of NET/ROM routing information with other nodes on the network.

It doesn't require any configuration, just another unit file:

Create /etc/systemd/system/netromd.service:


[Unit]
Description=NET/ROM routing daemon
After=network.target
StartLimitInterval=0

[Service]
Type=simple
Restart=always
RestartSec=5
ExecStart=/usr/sbin/netromd -i

[Install]
WantedBy=multi-user.target

$ sudo systemctl daemon-reload

$ sudo systemctl enable netromd

$ sudo systemctl start netromd

Retaining routing information

To preserve bandwith, NET/ROM nodes tend to broadcast their routing information slowly, typically with intervals between 15 and 60 minutes. Because of this it can take a while for a rebooted node to obtain a working routing table. To help with this, ax25-tools provides a nodesave command that can be used to save and reload the NET/ROM routing table when the system is rebooted.

The commands generated by nodesave will fail if the AX.25 interfaces aren't up, so it's necessary to include After= lines in the .service file to ensure nodesave.sh is run after relevant services have started.

Create /etc/systemd/system/nodesave.service:


[Unit]
Description=Persist NET/ROM routing information
After=network.target
After=kiss-tnc@tnc.service
StartLimitInterval=0

[Service]
Type=oneshot
ExecStart=bash -c '[ -x /etc/ax25/nodesave.sh ] && /etc/ax25/nodesave.sh; exit 0'
ExecStop=bash -c '/usr/sbin/nodesave > /etc/ax25/nodesave.sh && chmod 755 /etc/ax25/nodesave.sh'
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target

$ sudo systemctl daemon-reload

$ sudo systemctl enable nodesave

Posted Wed Mar 22 11:20:18 2023 Tags:

As mentioned in my post about Digital Voice, the various technologies available all have their quirks and differences along with the many things they have in common.

A common feature between most of these systems is the notion of Talk Groups, to use DMR terminology. In simplex operation or on a standalone repeater system, Talk Groups allow separate groups of radio users to operate on the same frequency or frequency pair without hearing messages from other groups, and without their messages being heard by those other groups.

On an internet-linked repeater system, a Talk Group can made available on different repeaters or gateways anywhere in the world, creating a wide-area virtual channel.

It's common on DMR systems to have a handful of Talk Groups configured on a repeater or gateway, meaning that it will transmit when traffic for that Talk Group arrives from the internet. End radio users can select which talk group they wish to listen to on their radio.

During a recent conversation on OARC's #digital-voice text chat I noted my experience that Yaesu's System Fusion lacked the ability to have multiple Talk Groups ('Rooms' in Yaesu's terminology, Reflectors in general amateur parlance) presented in this way, it only appearing to have the ability to switch which single Room was available using the Wires-X interface on the radio, or the "YSF Link Manager" feature in the Pi-Star DV Dashboard.

Jonathan Naylor (G4KLX), developer of MMDVMHost and many amateur radio digital voice tools, interjected that it was in fact possible do this, using DG-IDs.

DG-IDs are, I found, a bit of an underdocumented feature. The operating manual for my FT-991a includes the following description:

By matching the transmit DG-ID number to the uplink DG-ID number set in the DR-2X/XE System Fusion II digital repeater club, you can access the DR-2X/XE digital repeater used in the club. For communication only between transceivers in a group of friends, you can all match the same DG-ID number; then only your friend's voices will be heard.

The latter part of that is fairly understandable, and is similar to how Talk Groups can be used in DMR Simplex operation to separate groups of users, as described earlier. The first part is less clear to me.

A bit of internet searching led me to a description of a linked repeater system making use of the DG-ID system to allow users to choose whether their transmissions would be repeated by the repeater they were communicating with, or by every linked repeater in the group.

I also found discussion of part of the YSFClients suite that I had not looked at before - DGIdGateway. This work by Jonathan provides what I would describe as a routing service between a given DG-ID and various System Fusion services.

The sample DGIdGatway.ini offers an insight into what it can do - associating DG-IDs with YSFGateway, YSFParrot instances, various YSF2XXX bridges, and specific individual reflectors.

From the example, I set up my own hotspot and radio with these DG-IDs

  1. YSFGateway
  2. YSFParrot
  3. DV Scotland YSF Reflector (Static)
  4. Online Amateur Radio Club YSF Reflector (Static)
  5. FreeStar UK YSF Reflector (Dynamic)
  6. CQ-UK YSF Reflector (Dynamic)
  7. SDF ARC Talk Group (Static)
  8. Scotland Chat Talk Group (Static)

With the DG-ID set to 0, my radio operates as I have come to expect and I can either use the Wires-X menu or the Pi-Star DV Dashboard to change Reflectors.

By setting it to 1 through 7, my radio receives messages for the Reflector or Talkgroup selected, ignoring other traffic. The Static entries will always receive traffic from the internet, while the Dynamic ones require an initial local transmission to activate, and will remain active for a few minutes after the last local or internet transmission has been received. FreeStar and CQ-UK can busy at times so I'd prefer not to have them enabled all the time.

Usefully, the Pi-Star DV Dashboard will show DG-IDs associated with transmissions, so it is possible to observe where activity is taking place on DG-IDs other than the one selected on the radio.

DG-IDs 6 and 7 make use of the YSF2DMR bridge software to connect to talkgroups on the BrandMeister DMR network. It would also be possible to have additional DG-IDs configured to link to talkgroups on other DMR networks, or indeed networks for other protocols for which a YSF2XXX bridge is available.

I have a post in the works about how my MMDVM hotspot is configured which will include more detail on how I went about setting up DGIdGateway.

Posted Tue May 3 21:01:52 2022 Tags:

Over the last couple of days I've been experimenting with the digital voice setup that I use at home.

Digital Voice technologies have been being explored by radio amateurs since the early 2000s following the introduction of DSTAR from ICOM and System Fusion from Yaesu on equipment specifically for amateur radio use, along with repurposed Digital Mobile Radio, NXDN, and P25 equipment originally designed and sold for the commercial two-way radio market.

While each of these have their own characteristics they share the same aim of making efficient use of radio spectrum while providing high quality audio along with data features such as location reporting and text messaging.

Many parts of the UK are well served by digital repeaters, and I am fortunate to have two within workable range, GB7FE on 70cm and GB7LV on 2m. Both of these are multi-mode with support for DMR, DSTAR and System Fusion. As a new user the learning curve, particularly for DMR, can be a little steep so being able to use existing infrastructure and obtain assistance from other amateurs is helpful.

My first experiences were on DMR using a relatively inexpensive TYT MD-390 handheld, a ruggedized version of the popular MD-380.

More recently, an upgrade of my main shack radio to a Yaseu FT-991a has brought me System Fusion capability.

In addition to the local repeaters, I also have a Raspberry Pi based device with a digital voice modem that acts as a 'hotspot' - a low-powered gateway to various digital voice networks.

For experimentation the hotspot is useful as it gives the amateur total control of what is going on, and visibility into both the RF and network sides of the system.

Up until now I've been using the Pi-Star linux distribution on my hotspot. Pi-Star is a great tool that works almost out of the box with an easy to use web front end, supports

As I wanted to learn more about how the underlying system works and explore some features not yet presented to the user by Pi-Star, I've been working on my own hotspot setup based on the Raspberry Pi OS Lite distribution and the same application software that Pi-Star uses. I'll write a separate post on how I went about that and how I got on.

Posted Mon May 2 22:13:05 2022 Tags:

As the title says, it's been a while. I can't actually remember why I abandoned this after the 500 words exercise back in 2017. Other than a bit of handwritten journalling, often when travelling, I've not been doing a whole lot of writing.

I was doing some housekeeping on the server which hosts this blog today and was reminded of it. I've given it a spring clean and who knows, this might be the start of something regular.

I'll perhaps write something about the pandemic later, but for the moment it's reasonable to say that we've been living quietly.

I've not been running or cycling much but I have been walking and managing to get in 10,000 steps every day for more than four months now.

I've gotten back into Duolingo and while I still feel I'm a long way from having an actual functional grasp of French I have been enjoying it and I do seem to be learning, albeit slowly.

I've also rekindled my interest in amateur radio over the last couple of years. During the first lockdown in 2020 I bought a Yaesu FT-818 HF radio and I've been enjoing the learning curve of what I can do with it.

Posted Sun Nov 14 02:06:38 2021 Tags:

This blog is powered by ikiwiki.