welcome: please sign in
location: LinuxPacketRadio

AmateurRadio > PacketRadio > LinuxPacketRadio
AmateurRadio > LinuxAmateurRadio > LinuxPacketRadio

Packet Radio in Linux

Before proceeding, start with the general packet radio page.

Linux has the world's best support for packet radio built right into the operating system. AX.25, NET/ROM, and ROSE are all directly supported in the Linux kernel. There is also substantial userland support for packet.

Getting Started Guides

There are some HOWTOs out there about getting started. Here are some links:


Soundmodem is a software-defined TNC that hooks directly into the kernel AX.25 stack.

Its setup is generally fairly straightforward using Googleable documentation, but one thing that is not straightforward is 300bps packet support.

Apparently, due to a bug or design flaw, to make Soundmodem work, you must use tone frequencies below 1200Hz. You'll of course need to watch the receive frequencies.

Please refer to my HF transmission discussion for background on this, which is not limited to soundmodem.

Following is an example config file with tones at 900Hz and 1100Hz.

[phil@localhost ax25]$ more soundmodem.conf
<?xml version="1.0"?>
  <configuration name="hf_packet">
    <channel name="Channel 0">
      <mod mode="afsk" bps="300" f0="900" f1="1100" diffenc="1"/>
      <demod mode="afsk" bps="300" f0="900" f1="1100" diffdec="1"/>
      <pkt mode="MKISS" ifname="sm0" hwaddr="VK4BVM-2" ip="" 
.0" broadcast=""/>

Now, let's look at an example. My PacketRadio pages discusses Network 105. The Network 105 instructions are to tune your radio to 14105 LSB with tones at 1600Hz and 1800Hz.

Our tones at 900Hz and 1100Hz are 700Hz closer to the carrier (rig readout) frequency than the ones discussed. Therefore the rig will need to be tuned to a different frequency. Since soundmodem will use frequencies closer to frequency, and we're using LSB, we need to lower the radio's tuning frequency by 700Hz to 14104.30. You can verify that with:

So, to summarize, the rule is this: If you are given a carrier frequency, and offsets of 1600Hz and 1800Hz, and soundmodem is using 900Hz and 1100Hz, then:

Serial TNCs

See /SerialTNCs.

General HF suggestions

Based on tips from K7TMG, for use on HF, the following settings are suggested:

Jabber Bridge

JohnGoerzen KR0L wrote a bridge to Jabber, which is at https://github.com/jgoerzen/ax25xmpp.

Node and BBS software

Debian includes the full LinuxNode and F6FBB (aka FBB) BBS software. FBB is a bit odd configuration-wise, since its startup script creates config files the first time it's run. I had some confusion setting it and other things up, as sometimes they assume a non-KISS-capable TNC or a non-AX.25 kernel, but in general it isn't too bad.

Other node software



AXIP is a protocol for routing AX.25 frames over the Internet. It is not the same as Telnet, which lets people without an AX.25 stack log in to your system. Rather, it is most commonly used as a long-haul backbone link between two AX.25 packet nodes.

ax25ipd is the Linux program that implements this and it is, sadly, rather under-documented. The default configuration file offers some clues but not quite enough.

ax25ipd is really an IP-KISS gateway. KISS is the stream protocol designed for serial port use between a TNC and PC, but is also used in some of the Linux AX.25 programs as a virtual link protocol.

What you will do is this:

  1. Use kissnetd to set up a KISS bridge
  2. Use kissattach to connect one end of this bridge to the AX.25 kernel stack
  3. Use ax25ipd to connect the other end to one or more IP destinations

Let's go through these steps in order.

kissnetd setup

First of all, if you are running a modern Linux system, check to see if kissnetd supports the -p switch. If it doesn't, grab my patch that supports Unix98 PTYs and recompile. (See the details about this problem if you care).

You will be running kissnetd -p2 to generate the appropriate PTYs. I'll show you what to do with this in a bit.


Next, you'll want to create an entry in /etc/ax25/axports for your new link. You can just set the speed to 38400.

You'll be running kissattach l $PTS1 axportname xx.xx.xx.xx where the end part can be a made-up IP address.

And then you'll be running ax25ipd with this setup.


You'll need to configure /etc/ax25/ax25ipd.conf. This file is also a bit under-documented. Some hints:

A startup script

Now, we're ready to start. Here's an example script:


kissnetd -p2 > "$tmpfile" &

sleep 2

attachthem () {
        read PTS1 PTS2
        echo "Starting ipd on $PTS1 and $PTS2"
        kissattach -l $PTS1 ipct
        sleep 1
        sed -i "s,device /dev/.*$,device $PTS2," /etc/ax25/ax25ipd.conf

tail -n 1 $tmpfile | attachthem
rm $tmpfile

(Note: this has a /tmp race and needs enhancement for multiuser systems.)

So, we fire up kissnetd and save off the PTYs that will be used. Next we load those saved PTYs and use them to attach things. We first set up kissattach, then we note the second PTY in the ax25ipd.conf file, and finally start up ax25ipd.

See Also


WikiCompleteOrg: LinuxPacketRadio (last edited July 27, 2012 by JohnGoerzen)