Differences between US and UK Amateur Radio license rules and restrictions – part 4: New Ofcom license conditions for 2024 for UK licensees

In my previous posts comparing US Amateur Radio licence conditions with UK licences I looked at output power differences (part 1), geographic restrictions (part 2) and callsign formats (part 3). One area I have been particularly interested in over the past few years is packet radio (previous posts), packet BBSes (previous posts) and APRS usage, both topics until license changes in 2024 were significantly more restricted in the UK compared to US.

I don’t think there are any similar restrictions for any license level to run a packet radio node unattended in the US (see Part 97.219 Message Forwarding Systems. Beacon station are also permitted upto 100w in the US for any licence level), but in the UK up until 2024 with the recent license changes only a Full license holder was allowed to run an unattended station of any kind, which would include a repeater, a beacon, a packet radio mailbox, a BBS, or a packet radio node.

For 2024 in the UK, Foundation and Intermediate licensees can now run an unattended station as a new category of ‘Data Station’, which includes packet stations, but only upto 5w ERP. For upto 25w then a Full license is required.

Previously in the UK, a Notice of Variation (NoV) needed to be applied for to run an unattended data station, similar to repeaters, which if approved would grant a new callsign for the unattended station. This has also been relaxed in the 2024 changes where for up to 5w ERP you can run the station under your own personal callsign.

Full details of these changes are in Ofcom’s ‘Statement: Updating the amateur radio licensing framework’ doc here.

linbpq install on Lubuntu 22.04

I’m setting up a test install of linbpq on Linbuntu 22.04. This is just a test install to play with the config.

Since linbpq is a 32 bit app, you need to add i386 32bit library support:

sudo dpkg --add-architecture i386
sudo apt-get update
./linbpq: error while loading shared libraries: libasound.so.2: cannot open shared object file: No such file or directory

To fix, install:

$ sudo apt-get install libasound2

Next error

./linbpq: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory

To fix this on I installed 32bit gcc:

$sudo apt-get install gcc:i386

At this point I was able to create a simple bpq32.cfg file to test telnet access, and I’m up an running:


NODECALL=YOURCALL-5 ; Node callsign
NODEALIAS=YOURALIAS ; Node alias (6 characters max)

ID=Telnet Server
;FBBPORT=8011 6300
CTEXT=BPQ32 Telnet Server\nPress ? For list of commands \n\n


Troubleshooting serial terminal connections (VT Serial Terminal, VT132, Packet Radio TNCs)

I’ve been on a serial terminal kick the last few months. I think it started when I picked up a used Sun Ultra 60 and found out you could boot with a serial terminal to diagnose boot issues, and/or logon via a serial terminal. I built a VT132 kit and this has worked well using a regular VGA monitor and USB keyboard, but one thing lead to another and I started shopping ebay for a real DEC VT terminal. These are getting harder to find in working condition and it seems the prices are going up to pretty crazy levels. You can easily get one around $200 to $300, but if you shop around you should be able to get one around $100.

I’ve been able to connect the VT132 to anything so far and get it to work. There are a couple of jumpers on the board to select a straight through or crossover cable connection, if one doesn’t work change it to the other and it will connect. I’ve used it so far to connect to a AEA PK-232 Amateur Radio packet TNC, my Ultra 60, and a PC running Ubuntu.

The VT terminal on the other hand is more tricky. It will connect to the PK-232 and the wifi modem on the VT132, but I have not been able to successfully connect it to do a serial terminal logon to a Raspberry Pi (this was my main goal), or another PC yet.

My suspicion is that the 2 serial cables I have that I’ve been using interchangeably depending on what I’ve connecting too just based on the connectors are not the same. One has DB25 to DB25, the other has DB9 to DB25, so I’ve been picking the one that connects between the two devices. I’ve assumed these are both null modem cables, but I think one is straight through, and I don’t know which is which. I need to test them with a meter to find out.

I also thought the USB to serial connector that I was using on the Raspberry Pi was not working (it was a FTDI chip) so I bought another one using the Prolific chip, and that didn’t work either connecting from the VT Terminal, but it did from the VT132, so I think this is more to do with the serial cable than the Serial USB adapter. I think the clue was that from the VT132 it only worked when I switched the straightthrough to crossover jumpers to crossover, actually the same setting that works with the Ultra 60 too (but not the PK-232).

My next steps are to create a table of all the combinations that work vs don’t work. I also need to test the cables to find out if one is a straight through vs the other being a crossover cable. I think assuming they were the same is not true and this is causing the confusion. I will keep you updated on my findings!

Running an ax25 netrom node on a Raspberry Pi

I’ve played with Packet Radio using a Raspberry Pi a number of times in the past, and have a posted a number of posts – here’s some of my previous posts:

At one point I set up a Node.js app that used a library to read ax25 packets over Serial, and then Tweet received packets (here, here, and here). I ran this for a while but then took it down when I reused that Pi for another project.

A number of times I wondered what would it take to use this same approach with a client app directly interacting via ax25 packets to build an interactive app or game over Packet Radio. I did look into options for a while but didn’t get too far. I had noticed a couple of times that the node software or BBS software accessed via Packet could allow access to interact with apps running locally. Again, I looked into this for a while but didn’t get too far.

During some recent searching online, I wondered if anyone else had some something similar to this and set up access to a text based game like a text adventure, and of course they have, because why not? Richard Osgood has a fantastically good and well written article here walking through setting up ax25, and ax25 node and integrating access to Zork. If you’ve never done any Packet setup on the Pi before, this covers everything you need to get up and running.

From my previous setups I have already done ax25 and Direwolf configs before, so what I was more interested in what the delta between my previous previous steps and getting ax-25 node setup and able to interact with other apps.

I’ve summarized my steps here from the point of assuming you already have ax25 and Direwolf setup. If not you’ll need to go back to Richard’s original article and start from the beginning, or look at the links to my previous articles at the start of this post.

So, picking up from already having ax25 installed and configured and working with Direwolf:

Install ax25-node and telnet (for local testing):

sudo apt-get install ax25-node telnet

I already had ax25-tools and ax25-apps installed from my previous setup.

Configure nrports:

sudo nano /etc/ax25/nrports

Add 1 line:

netrom KK6DCT-6 #DAVBBS 255     Netrom node

-6 is my SSID for the netrom node, DAVBBS is my node alias

ax25d config:

sudo nano /etc/ax25/ax25d.conf


Add these 2 sections, you can delete or commented out the example configs in the file:

[KK6DCT-6 VIA 1]
NOCALL * * * * * * L
default * * * * * * - root /usr/sbin/ax25-node ax25-node

NOCALL * * * * * * L
default * * * * * * - root /usr/sbin/ax25-node ax25-node

The ‘VIA 1’ in the fist config is referring to the ‘1’ interface already defined in my /etc/ax25/axports.

Configure the node:

sudo nano /etc/ax25/node.conf

There’s a lot of defaults and examples in this file. I kept any timeout values unchanged, but changed:

HostName KK6DCT-6

Node permissions:

sudo nano /etc/ax25/node.perms

I kept :

# user type port passwd perms
kk6dct * * CHANGEPASSWORD 255

# Default permissions per connection type.
* ax25 * * 7
* netrom * * 7
* local * * 7
* ampr * * 7
* inet * * 7
* host * * 7

Change CHANGEPASSWORD for a password for local testing via telnet.

TODO – check whether I changed these defaults

nrbroadcast – in my default copy of the file there’s 2 default lines, one I’m assuming for port 1 and one for port 2. I’ve only configured port 1, so I deleted the second line:

sudo nano /etc/ax25/nrbroadcast
# /etc/ax25/nrbroadcast
# The format of this file is:
# ax25_name min_obs def_qual worst_qual verbose
1	5	192	100	0
#2	5	255	100	1

Start up netrom:

sudo nrattach netrom

if you get a “no such device” error, do a “sudo modprobe netrom” first.

nrattach: SIOCGIFFLAGS: No such device
nrattach: cannot find free NET/ROM device
$sudo modprobe netrom
$ sudo nrattach netrom
NET/ROM port netrom bound to device nr0

Configure telnet for testing:

sudo nano /etc/services


ax25-node       4444/tcp        # KK6DCT-6 node

This allows an incoming connection e.g. via telnet to get handled by ax25-node.

Configure ax25-node to start at boot:

sudo nano /etc/inetd.conf


ax25-node stream tcp nowait root /usr/sbin/ax25-node ax25-node

Note that this file also has a default line added for a bbs service over ax25, but this line has wait instead of nowait. I don’t know what this option does, but if you use wait instead of nowait you won’t get a connection to the node – don’t uncomment this line:

#:OTHER: Other services
#<off># bbs     stream  tcp     wait    root    /usr/sbin/ax25-node     ax25-no$

Restart inetd:

sudo service inetd restart

Now start up netromd and ax25d:

sudo netromd
sudo ax25d

Ready to go!

At this point I can telnet into my node locally, and also receive incoming connections over Packet.

I tested this locally with 2 packet stations:

  • Raspberry Pi set up as above, using a Signalink connected to a Wouxun KG-UV5D HT, and a Ed Fong rollup 2m/440cm antenna hanging against a window indoors.

With this radio on low power (1w) I can get to the local BERR37 node on 145.370MHz up on the hills near Lake Berryessa – in a straight line that’s roughly 20 miles from my location.

To test accessing the node running Zork and a command line weather forecast util called ansiweather I used:

  • AES PK232 accessed via a VT132 terminal card, connected to an Icom 880h and my regular 1/4 wave antenna in my attic.

Here’s accessing the node (KK6DCT-6) via the VT132 and PK232. What you’re looking at here is the VGA output from the VT132 terminal connected to the PK232 TNC:

  • c KK6DCT-6 : connect to the node
  • ? : list commands for the node – note ‘Weather’ and ‘Zork1’ in the list
  • w : run the weather command which calls answeather

Here’s Direwolf running on the Raspberry Pi. The ax25 startup steps are on the left (I didn’t get them setup to start on boot yet), and Direwolf receiving and sending on the right:

Here’s the hardware side of this Packet craziness on my desk. The Wouxun and Signalink on the right are connected to the Raspberry Pi which is out of the picture on the right. The AES PK232 at the bottom is connected to the Icom 880h on the right (the rest of the gear is not in use for this packet setup):