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.