As I continue to learn about digital modes and ham radio, I was intrigued with the idea of testing ax.25 vs ardop in real world situations. As it turns out, I had no idea what I was getting myself into! It was one of the most painful Linux setups that I’ve ever done, not because it was so terribly hard, but I did not fine one complete step by step document to guide me through it. It took me several days of fiddling and lots of research to get it sorted out. I’m putting it all together here, in hopes that it will help the next guy!

First, I needed to install direwolf and ax.25 utilities in Ubuntu:

  $ sudo apt-get update
  $ sudo apt-get install ax25-tools
  $ sudo apt-get install direwolf

Then, I had to create a system service to start and stop the ax.25 interface and reload the daemons:

  $ sudo nano /lib/systemd/system/ax25.service
  
  =======================
[Unit]
Description=AX.25 KISS interface
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/ax25-up /dev/ttyUSB0 wl2k 1200

[Install]
WantedBy=default.target

  =======================
  $ sudo systemctl daemon-reload

Next, I needed to download an ax.25-up binary and make it executable:


  $ sudo curl -o /usr/local/bin/ax25-up https://raw.githubusercontent.com/la5nta/pat/master/share/bin/axup
  $ sudo chmod +x /usr/local/bin/ax25-up 

Now I had to create virtual ports for ax.25 to use. Notice that since I am using HF, I needed a low baud rate (speed) of 300, rather than 1200, as you would expect to see with VHF/UHF.

  $ sudo nano /etc/ax25/axports 
  
   ======================= 
# /etc/ax25/axports
#
# The format of this file is:
#
# name callsign speed paclen window description
#

#1	OH2BNS-1	1200	255	2	144.675 MHz (1200  bps)
#2	OH2BNS-9	38400	255	7	TNOS/Linux  (38400 bps)

#portname       callsign        speed   paclen  window  description
wl2k            KL4TH           300     255     7       Winlink

  ======================= 

Now I can start and stop the ax.25 service, or check the status at will, like so:

  $ sudo systemctl start ax25
  $ sudo systemctl status ax25 -l
  $ sudo systemctl stop ax25
  $ sudo systemctl start ax25

After that I edited my PAT configuration file. Notice in the PAT configuration file that the ax.25 port of wl2k matches the axport portname that we made earlier:

  $ pat configure
  
  =======================
  {
  "mycall": "KL4TH",
  "secure_login_password": "<EDITED>",
  "auxiliary_addresses": [],
  "locator": "BP64du",
  "service_codes": [
    "PUBLIC"
  ],
  "http_addr": "localhost:8080",
  "motd": [
    "Open source Winlink client - getpat.io"
  ],
  "connect_aliases": {
    "telnet": "telnet://{mycall}:CMSTelnet@cms.winlink.org:8772/wl2k"
  },
  "listen": [],
  "hamlib_rigs": {"myrig": {"address": "localhost:4532", "network": "tcp"}},
  "ax25": {
    "port": "wl2k",
    "beacon": {
      "every": 3600,
      "message": "Winlink P2P",
      "destination": "IDENT"
    },
    "rig": ""
  },
  "serial-tnc": {
    "path": "/dev/ttyUSB0",
    "baudrate": 4800,
    "type": "Yaesu"
  },
  "winmor": {
    "addr": "localhost:8500",
    "inbound_bandwidth": 1600,
    "drive_level": 0,
    "rig": "",
    "ptt_ctrl": false
  },
  "ardop": {
    "rig": "myrig",
    "ptt_ctrl": false,
    "addr": "localhost:8515",
    "arq_bandwidth": {
      "Forced": false,
      "Max": 500
    },
    "beacon_interval": 0,
    "cwid_enabled": true
  },
  "pactor": {
    "path": "/dev/ttyUSB0",
    "baudrate": 57600,
    "rig": "",
    "custom_init_script": ""
  },
  "telnet": {
    "listen_addr": ":8774",
    "password": ""
  },
  "gpsd": {
    "enable_http": false,
    "use_server_time": false,
    "addr": "localhost:2947"
  },
  "schedule": {},
  "version_reporting_disabled": false,
  "forms_path": "/home/alaskalinuxuser/.wl2k/Standard_Forms"
}
  =======================
  
  

Before I could start direwolf, I needed to define a few things in the config file. There file is huge, and I didn’t change too much, the rest I left as default. This file can be downloaded here, and you put it in your home folder as ~/direwolf.conf making the necessary edits:

#############################################################
#                                                           #
#               FIRST AUDIO DEVICE PROPERTIES               #
#               (Channel 0 + 1 if in stereo)                #
#                                                           #
#############################################################

# Get this with aplay -l
ADEVICE plughw:1,0

#
# Number of audio channels for this souncard:  1 or 2.
#

ACHANNELS 1

#############################################################
#                                                           #
#               CHANNEL 0 PROPERTIES                        #
#                                                           #
#############################################################

CHANNEL 0

MYCALL KL4TH-0

MODEM 300

#############################################################
#                                                           #
#               VIRTUAL TNC SERVER PROPERTIES               #
#                                                           #
#############################################################


AGWPORT 8000
KISSPORT 8001

Then I could start direwolf with sudo, because it didn’t work right without using sudo:

$ sudo direwolf -t 0 -p
  
Dire Wolf version 1.5
Includes optional support for:  gpsd hamlib

Reading config file direwolf.conf
Audio device for both receive and transmit: plughw:1,0  (channel 0)
Channel 0: 300 baud, AFSK 1600 & 1800 Hz, D, 44100 sample rate / 3.
Note: PTT not configured for channel 0. (Ignore this if using VOX.)
Ready to accept AGW client application 0 on port 8000 ...
Ready to accept KISS TCP client application 0 on port 8001 ...
Virtual KISS TNC is available on /dev/pts/5
Created symlink /tmp/kisstnc -> /dev/pts/5

With direwolf running, we can see the created symlink to /dev/pts/5 (in this case), and we can use that with kissattach to link the dev port to our axport. Keep in mind, you have to launch this with sudo, or it will not work!

$ sudo /usr/sbin/kissattach /dev/pts/5 wl2k
  
AX.25 port wl2k bound to device ax0

Of course, I also needed rig control, so I launched that as usual with rigctrld:

$ rigctld -m 105 -s 4800 -r /dev/ttyUSB0

Finally, we are ready to start PAT and listen on ax.25:

$ pat --listen "ax25" http

Now when I open up my browser, pointed to localhost:8080, I get the usual PAT interface with the “listening on ax.25” banner at the top!

All in all, it is much more complicated to use and setup than ardop, by far. However, it was supposed to be faster and more robust from the studies I reviewed. Unfortunately, I couldn’t put that to a test, as the nearest station using HF and ax.25 was 700km away, and I couldn’t get it to connect. Likewise, with ardop, I couldn’t connect to anyone that far away either, so I didn’t conclusively prove anything.

Linux – keep it simple.

Leave a Reply

Your email address will not be published. Required fields are marked *