The Future of AX.25

Oooo man this is totally awesome. ARDC has grant an amount of 180 thousand dollars for fixing the AX.25 stack/kernel.

https://www.ampr.org/grants/grant-fixing-the-linux-kernel-ax-25/

Grant: Fixing the Linux kernel AX.25
Date: December 2021
Amount: €179,690
Changes to the Linux kernel over the years have improved and modernized the kernel, but have also made existing AX.25 implementations incompatible and turned preexisting issues into bugs. This can make systems unpredictable or even unusable. Linux kernel development is complex, requiring deep specialized knowledge, and bugs are hard to trace. This may be one of the reasons, why the Linux kernel AX.25 stack is currently in such a bad state.

This ARDC grant funds will allow the Deutscher Amateur Radio Club to hire software developers who can create a stable Linux AX.25 implementation and prevent Linux distributions from dropping pre-compiled AX.25 support. The fixed and functional Kernel-AX.25 stack will improve global amateur radio infrastructure. Professional kernel development can bring Linux AX.25 back to life.

Learn more at https://www.linux-ax25.org/wiki/Main_Page.

This is killing 🙂

Ax25-apps, Ax25-tools, Ax25-utils, Libax25

Please use the latest version, this prevents irritation and annoying things that you do not understand.

Ax25-Apps
-rw-r–r– 1 pd9q pd9q 185677 Mar 8 14:25 ax25-apps-0.0.1.tar.gz
-rw-r–r– 1 pd9q pd9q 196284 Mar 8 14:25 ax25-apps-0.0.2.tar.gz
-rw-r–r– 1 pd9q pd9q 197901 Mar 8 14:25 ax25-apps-0.0.3.tar.gz
-rw-r–r– 1 pd9q pd9q 198064 Mar 8 14:25 ax25-apps-0.0.4.tar.gz
-rw-r–r– 1 pd9q pd9q 207347 Mar 8 14:25 ax25-apps-0.0.5p2.tar.gz
-rw-r–r– 1 pd9q pd9q 207624 Mar 8 14:25 ax25-apps-0.0.5.tar.gz
-rw-r–r– 1 pd9q pd9q 273846 Mar 8 14:25 ax25-apps-0.0.6.tar.gz
-rw-r–r– 1 pd9q pd9q 462058 Mar 8 14:25 ax25-apps-0.0.8-rc1.tar.gz
-rw-r–r– 1 pd9q pd9q 430456 Mar 8 14:25 ax25-apps-0.0.8-rc2.tar.gz
-rw-r–r– 1 pd9q pd9q 469313 Mar 8 14:25 ax25-apps-0.0.8-rc3.tar.gz
-rw-r–r– 1 pd9q pd9q 442172 Mar 8 14:25 ax25-apps-0.0.8-rc4.tar.gz
-rw-r–r– 1 pd9q pd9q 479590 Mar 8 14:25 ax25-apps-0.0.8-rc5.tar.gz

Ax25-Tools
-rw-r–r– 1 pd9q pd9q 515474 Mar 8 14:25 ax25-tools-0.0.10-rc1.tar.gz
-rw-r–r– 1 pd9q pd9q 381575 Mar 8 14:25 ax25-tools-0.0.10-rc2.tar.gz
-rw-r–r– 1 pd9q pd9q 370079 Mar 8 14:25 ax25-tools-0.0.10-rc3.tar.gz
-rw-r–r– 1 pd9q pd9q 364332 Mar 8 14:25 ax25-tools-0.0.10-rc4.tar.gz
-rw-r–r– 1 pd9q pd9q 372851 Mar 8 14:25 ax25-tools-0.0.10-rc5.tar.gz
-rw-r–r– 1 pd9q pd9q 162320 Mar 8 14:25 ax25-tools-0.0.1.tar.gz
-rw-r–r– 1 pd9q pd9q 176989 Mar 8 14:25 ax25-tools-0.0.2.tar.gz
-rw-r–r– 1 pd9q pd9q 234032 Mar 8 14:25 ax25-tools-0.0.3.tar.gz
-rw-r–r– 1 pd9q pd9q 230243 Mar 8 14:25 ax25-tools-0.0.4.tar.gz
-rw-r–r– 1 pd9q pd9q 230243 Mar 8 14:25 ax25-tools-0.0.5.tar.gz
-rw-r–r– 1 pd9q pd9q 251941 Mar 8 14:25 ax25-tools-0.0.6.tar.gz
-rw-r–r– 1 pd9q pd9q 254019 Mar 8 14:25 ax25-tools-0.0.8.tar.gz

Libax25
-rw-r–r– 1 pd9q pd9q 103151 Mar 8 14:25 ax25-lib-0.0.1.tar.gz
-rw-r–r– 1 pd9q pd9q 122941 Mar 8 14:25 ax25-lib-0.0.2.tar.gz
-rw-r–r– 1 pd9q pd9q 123970 Mar 8 14:25 ax25-lib-0.0.3.tar.gz
-rw-r–r– 1 pd9q pd9q 143265 Mar 8 14:25 libax25-0.0.10.tar.gz
-rw-r–r– 1 pd9q pd9q 231325 Mar 8 14:25 libax25-0.0.11.tar.gz
-rw-r–r– 1 pd9q pd9q 361613 Mar 8 14:25 libax25-0.0.12-rc1.tar.gz
-rw-r–r– 1 pd9q pd9q 332178 Mar 8 14:25 libax25-0.0.12-rc2.tar.gz
-rw-r–r– 1 pd9q pd9q 359045 Mar 8 14:25 libax25-0.0.12-rc3.tar.gz
-rw-r–r– 1 pd9q pd9q 335535 Mar 8 14:25 libax25-0.0.12-rc4.tar.gz
-rw-r–r– 1 pd9q pd9q 360123 Mar 8 14:25 libax25-0.0.12-rc5.tar.gz
-rw-r–r– 1 pd9q pd9q 122442 Mar 8 14:25 libax25-0.0.4.tar.gz
-rw-r–r– 1 pd9q pd9q 129510 Mar 8 14:25 libax25-0.0.5.tar.gz
-rw-r–r– 1 pd9q pd9q 130198 Mar 8 14:25 libax25-0.0.6.tar.gz
-rw-r–r– 1 pd9q pd9q 131177 Mar 8 14:25 libax25-0.0.7.tar.gz
-rw-r–r– 1 pd9q pd9q 264673 Mar 8 14:25 libax25-0.0.9.tar.gz

Ax25-Utils
-rw-r–r– 1 pd9q pd9q 282655 Mar 8 14:25 ax25-utils-1.3.30.tar.gz
-rw-r–r– 1 pd9q pd9q 155821 Mar 8 14:25 ax25-utils-1.3.80.tar.gz
-rw-r–r– 1 pd9q pd9q 246854 Mar 8 14:25 ax25-utils-2.0.12c.tar.gz
-rw-r–r– 1 pd9q pd9q 204439 Mar 8 14:25 ax25-utils-2.0.12.tar.gz
-rw-r–r– 1 pd9q pd9q 359082 Mar 8 14:25 ax25-utils-2.1.22b.tar.gz
-rw-r–r– 1 pd9q pd9q 346153 Mar 8 14:25 ax25-utils-2.1.42a.tar.gz
-rw-r–r– 1 pd9q pd9q 344332 Mar 8 14:25 ax25-utils-2.1.42.tar.gz
-rw-r–r– 1 pd9q pd9q 21657 Mar 8 14:25 ax25utils.tar.gz

Bind ax25 interface to Direwolf

It can be easy to link an ax25 interface to Direwolf. This makes it possible to use RMSGateway, Uronode etc with Direwolf.
In this script Direwolf is started with the -p option. With the -p option a virtual tnc is created. /tmp/kisstnc.

With mkiss a kiss connection is made on the /tmp/kisstnc. With kissattach the PTY is connected to the ax25 interface.

Fist edit the file axports in /etc/ax25

pd9q@pd9q:/etc/ax25 $ cat axports
# /etc/ax25/axports
# name callsign speed paclen window description
#
ax0     PI1LAP-9       19200    255     7     RMSGateway pi1lap-10

Config the direwolf.conf file to set the right audio device and ptt port. Save file to /etc/ax25/direwolf.conf

ADEVICE plughw:1,0
ACHANNELS 1
CHANNEL 0
MODEM 300 2130:2230 D
PTT GPIO 21
DWAIT 0
SLOTTIME 12
PERSIST 63
TXDELAY 40
TXTAIL 10
FIX_BITS 1 AX25
LOGDIR /var/log/direwolf

Run the script

#!/bin/bash
   PATH=/usr/local/sbin:/usr/local/bin:/bin:/usr/bin:/etc/ax25:/usr/local/ax25
   echo "Starting direwolf"
     direwolf -t 0 -c /etc/ax25/direwolf.conf -p &
   #Check if Direwolf is running
   sleep 5
   if [ -z "`ps ax | grep -v grep | grep direwolf`" ]; then
      echo -e "\nERROR: Direwolf did not start properly and is not running, please review direwolf.conf"
         exit 1
   fi
   echo "Installing one KISS connection on PTY port /tmp/kisstnc"
     mkiss -s 19200 -x 1 /tmp/kisstnc > /tmp/unix98
   #This creates a PTS interface like "/dev/pts/3"
     export PTS0=`more /tmp/unix98 | grep -w /dev | cut -b -11`
     echo "PTS0 device: $PTS0"
     kissattach $PTS0 ax0  > /tmp/ax25-config.tmp
     awk '/device/ { print $7 }' /tmp/ax25-config.tmp > /tmp/ax25-config1-tmp
     read Device < /tmp/ax25-config1-tmp

Let’s check if everything went well.

pd9q@pd9q:~ $ ps ax
1015 ?        Ss     0:00 mkiss -s 19200 -x 1 /tmp/kisstnc
1025 ?        Ss     0:00 kissattach /dev/pts/2 ax0

Try it out…

pd9q@pd9q:~ $ call ax0 pd9q-2
GW4PTS AX.25 Connect 2.0.0
Trying...
*** Connected to pd9q-2
*** Cleared

Now it’s possible to setup RMSGateway or Uronode of whatever you want.

AX25 Dual port TNC (kpc-9612)

Here is an ax25 script that I use to control the Dual port KPC-9612 with mkiss and kissattach.

# Dual port TNC KPC-9612
        mkiss -s 9600 -x 2 /dev/ttyUSB1 > /tmp/unix98
        export PTS0=`more /tmp/unix98 | grep -w /dev | cut -b -11`
        export PTS1=`more /tmp/unix98 | grep -w /dev | cut -b 12-`
        sleep 1
        # Port 1k2 144.850Mhz
        echo "Starting ax0 "
        if grep ax0 /etc/ax25/axports ; then
                kissattach $PTS0 ax0 || return=$rc_failed

                ifconfig ax0 44.137.31.73 netmask 255.255.255.224
                sleep 2
        else
                echo  "Error ax0 not found in the file axports"
                return="Failed"
        fi
        echo "$1 $return"

        # Port 9k6 430.950Mhz
        echo "Starting ax1 "
        if grep ax1 /etc/ax25/axports ; then
                kissattach $PTS1 ax1 || return=$rc_failed

                ifconfig ax1 44.137.31.73 netmask 255.255.255.224
                sleep 2
        else
                echo  "Error ax1 not found in the file axports"
                return="Failed"
        fi
        echo "$1 $return"

 

Update start script

I have update the start script for pi1lap/pi8lap. I have add start/stop/restart/status in it.
The disadvantage of this script is if you for example make an adjustment in axport you have to stop and restart the whole system. Maybe divide into smaller parts.

Ok lets check the status.

root@linux:/etc/ax25# ./ax-start status
Checking for fbb daemon: No, fbb is down :(
Checking for ax25d daemon: No, ax25d is down :(
Checking for netromd daemon: No, netromd is down :(
Checking for ax25rtd daemon: No, ax25rtd is down :(
Checking for flexd daemon: No, flexd is down :(
Checking for mheardd daemon: No, mheardd is down :(
Checking for ax25ipd daemon: No, ax25ipd is down :(
Checking for ax25udp daemon: No, ax25udp is down :(
Checking for linuxnet node: No, linuxnet node is down :(
Checking for jnos bbs: No, jnos is down :(
Checking for kissattach: No, kissattach is down :(
Checking for slattach: No, slattach is down :(
Checking for kissnetd: No, kissnetd is down :(
Checking for mkiss: No, mkiss is down :(
Checking for socat: No, socat is down :(
Checking for rstatrxd: No, rstatrxd is down :(
root@linux:/etc/ax25#

Now let start the system.

root@linux:/etc/ax25# ./ax-start start
Starting ax0
ax0     PI1LAP-1        9600    128     4       144.850Mhz 1k2
AX.25 port ax0 bound to device ax0
start Done
Starting ax1
ax1     PI1LAP-2        9600    128     4       430.950Mhz 9k6
AX.25 port ax1 bound to device ax1
start Done
Starting ax2
ax2     PI1LAP-3        19200   128     4       Link local BBS pi8lap
AX.25 port ax2 bound to device ax2
start Done
Starting ax3
ax3     PI1LAP-6        19200   128     4       Link local Dx pi1lap-4
AX.25 port ax3 bound to device ax3
start Done
Starting ax4
ax4     PI1LAP-8        19200   256     2       AX25/udp via pi1lap-8
AX.25 port ax4 bound to device ax4
start Done
Starting ax5
ax5     PI1LAP-9        19200   256     2       AX25/ip via pi1lap-9
AX.25 port ax5 bound to device ax5
start Done
Starting ax6
ax6     PD9Q-7         19200   256     2       Link local Jnos p9q
AX.25 port ax6 bound to device ax6
start Done
Starting rose0
rose0  2040330113  ROSE port 330113
Rose port rose0 bound to device rose0
start Done
Starting nr0
nr0      PI1LAP-5       LAPURO  236     Uronode PI1LAP-15
NET/ROM port nr0 bound to device nr0
start Done
Starting nr1
nr1      PI8LAP         LAPBBS  236     Fbb BBS PI8LAP
NET/ROM port nr1 bound to device nr1
start Done
Starting nr2
nr2      PI1LAP-4       LAPDX   236     DxSpider PI1LAP-4
NET/ROM port nr2 bound to device nr2
start Done
Starting nr3
nr3      PI1LAP-7       LAPPAC  236     FPAC node PI1LAP-7
NET/ROM port nr3 bound to device nr3
start Done
Starting ax25d daemon
start Done
Starting mheardd daemon
start Done
Starting ax25rtd daemon
start Done
Starting flexd daemon
FlexD started.
start Done
Starting netromd daemon
start Done
Starting FBB daemon
Checking fbb tree.... Ok
Checking fbb configuration :
FBB options : -s -a
Running XFBB in background mode ^C to abort
Starting XFBB (pwd = /usr/local/var/ax25/fbb)...

Now look at the status

root@linux:/etc/ax25# ./ax-start status
Checking for fbb daemon: Yes, fbb is up :)
Checking for ax25d daemon: Yes, ax25d is up :)
Checking for netromd daemon: Yes, netromd is up :)
Checking for ax25rtd daemon: Yes, ax25rtd is up :)
Checking for flexd daemon: Yes, flexd is up :)
Checking for mheardd daemon: Yes, mheardd is up :)
Checking for ax25ipd daemon: Yes, ax25ipd is up :)
Checking for ax25udp daemon: Yes, ax25udp is up :)
Checking for linuxnet node: Yes, linuxnet is up :)
Checking for jnos bbs: Yes, jnos is up :)
Checking for kissattach: Yes, kissattach is up :)
Checking for slattach: Yes, slattach is up :)
Checking for kissnetd: Yes, kissnetd is up :)
Checking for mkiss: No, mkiss is down :(
Checking for socat: Yes, socat is up :)
Checking for rstatrxd: Yes, rstatrxd is up :)

Here you see that “mkiss” is down. That is because I do not use “mkiss” at the moment.

Ok, now we will stop the system

root@linux:/etc/ax25# ./ax-start stop
Shutting down jnos bbs
Shutting down FBB script
Shutting down FBB daemon
Shutting down mheardd daemon
Shutting down netromd daemon
Shutting down ax25d daemon
Shutting down ax25ipd daemon
Shutting down ax25upd daemon
Shutting down rstatrxd daemon
Shutting down ax25rtd daemon
Shutting down mkiss daemon
mkiss: no process found
Shutting down kissattach daemon
Shutting down kissnetd daemon
Shutting down slattach daemon
Shutting down socat daemon
Shutting down beacon daemon
Shutting down flexd daemon
Shutting down netrom ports
Shutting down ax ports
Shutting down rose ports
stop Failed

Here you see that stopping has failed, this is because “mkiss” can not be stopped.

Here is the start script

#!/bin/bash
# Start AX25/Netrom networking daemons.
# Script written and modified by Niels pd9q
# Date of last modification: 11-14-2018

### BEGIN INIT INFO
# Provides:       ax25
# Required-Start: $network $remote_fs $syslog
# Required-Stop:  $network $remote_fs $syslog
# Default-Start:  2 3 4 5
# Default-Stop:   0 1 6
# Description:    AX25 server
### END INIT INFO
# Add some color
green='\e[0;32m'
red='\e[0;31m'
reset='\e[0m'

set +e   # Don't exit on error status

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/xnet:/usr/local/etc/ax25:/home/pd2lt/jnos

DESC="AX25 server"

ENABLED=1

base=${0##*/}
link=${base#*[SK][0-9][0-9]}

test $link = $base && AX_START=yes
test "$AX_START" = yes || exit 0
test -x /usr/local/etc/ax25/ax-start || exit 0

return="Done"
case "$1" in
  start)
        modprobe mkiss
        modprobe ax25
        modprobe netrom
	modprobe rose


	# Dual port TNC KPC-9612
	#mkiss -s 9600 -x 2 /dev/ttyUSB0 > /tmp/unix98
	#export PTS0=`more /tmp/unix98 | grep -w /dev | cut -b -11`
	#export PTS1=`more /tmp/unix98 | grep -w /dev | cut -b 12-`
	#sleep 1
	# Port 1k2 144.850Mhz
	echo "Starting ax0 "
        if grep ax0 /etc/ax25/axports ; then
                kissattach /dev/ttyUSB0 ax0 || return=$rc_failed

        	ifconfig ax0 44.137.31.73 netmask 255.255.255.224
       		sleep 2
        else
                echo  "Error ax0 not found in the file axports"
                return="Failed"
        fi
        echo "$1 $return"

	# Port 9k6 430.950Mhz
	echo "Starting ax1 "
        if grep ax1 /etc/ax25/axports ; then
                kissattach /dev/ttyUSB1 ax1 || return=$rc_failed

                ifconfig ax1 44.137.31.73 netmask 255.255.255.224
                sleep 2
        else
                echo  "Error ax1 not found in the file axports"
                return="Failed"
        fi
        echo "$1 $return"

	# link local pi8lap (xnet)
	echo "Starting ax2 "
	if grep ax2 /etc/ax25/axports ; then
	tmpfile="/tmp/$$.startax2.pts"
	kissnetd -p 2 > "$tmpfile" &
	sleep 2
	attachthem () {
		read PTS1 PTS2
        	kissattach -l $PTS1 ax2 44.137.31.73 || return=$rc_failed
		ifconfig ax2 44.137.31.73 netmask 255.255.255.224 up
        	sleep 1
        	sed -i "s,attach sdev3 kiss 3 1 19200 /dev/.*$,attach sdev3 kiss 3 1 19200 $PTS2," /usr/local/xnet/AUTOBOOT.NET
	}

	tail -n 1 $tmpfile | attachthem
	rm $tmpfile
	sleep 3
	else
                echo  "Error ax2 not found in the file axports"
                return="Failed"
        fi
        echo "$1 $return"

	# Link local pi1lap-4 (xnet)
	echo "Starting ax3 "
        if grep ax3 /etc/ax25/axports ; then
	tmpfile="/tmp/$$.startax3.pts"
	kissnetd -p 2 > "$tmpfile" &
	sleep 2
	attachthem () {
        	read PTS1 PTS2
        	kissattach -l $PTS1 ax3 44.137.31.73 || return=$rc_failed
		ifconfig ax3 44.137.31.73 netmask 255.255.255.224 up
        	sleep 1
        	sed -i "s,attach sdev4 kiss 4 1 19200 /dev/.*$,attach sdev4 kiss 4 1 19200 $PTS2," /usr/local/xnet/AUTOBOOT.NET
	}

	tail -n 1 $tmpfile | attachthem
	rm $tmpfile
	sleep 3
	else
                echo  "Error ax3 not found in the file axports"
                return="Failed"
        fi
        echo "$1 $return"

	# create slip link Linux <-> Xnet
	socat -d -d -ly PTY,link=/dev/ttyq1 PTY,link=/dev/ptyq1 &
	sleep 2
		slattach -s 38400 -p slip /dev/ptyq1 &
        	sleep 1
        	ifconfig sl0 44.137.31.69 netmask 255.255.255.255 pointopoint 44.137.31.70 mtu 236 up
        	sleep 1

	# create axudp device
	socat -d -d -ly PTY,link=/dev/ttyq2 PTY,link=/dev/ptyq2 &
	sleep 2
	echo "Starting ax4 "
        if grep ax4 /etc/ax25/axports ; then
		kissattach -m 256 /dev/ptyq2 ax4 44.137.31.73 || return=$rc_failed
		ax25udp -c /etc/ax25/ax25ipd-10093.conf > /tmp/axudp
		ifconfig ax4 44.137.31.73 netmask 255.255.255.224 up
	sleep 1
	else
                echo  "Error ax4 not found in the file axports"
                return="Failed"
        fi
        echo "$1 $return"

	# create axip device
        socat -d -d -ly PTY,link=/dev/ttyq3 PTY,link=/dev/ptyq3 &
        sleep 2
	echo "Starting ax5 "
        if grep ax5 /etc/ax25/axports ; then
        	kissattach -m 256 /dev/ptyq3 ax5 44.137.31.73 || return=$rc_failed
        	ax25ipd -c /etc/ax25/ax25ipd-axip.conf > /tmp/axip
        	ifconfig ax5 44.137.31.73 netmask 255.255.255.224 up
	sleep 1
	else
                echo  "Error ax5 not found in the file axports"
                return="Failed"
        fi
        echo "$1 $return"

	# create socat device (jnos-uro)
        socat -d -d -ly PTY,link=/dev/ttyq4 PTY,link=/dev/ptyq4 &
	sleep 2
	echo "Starting ax6 "
        if grep ax6 /etc/ax25/axports ; then
		kissattach -m 256 /dev/ptyq4 ax6 44.137.31.73 || return=$rc_failed
                ifconfig ax6 44.137.31.73 netmask 255.255.255.224 up
	sleep 1
	else
                echo  "Error ax6 not found in the file axports"
                return="Failed"
        fi
        echo "$1 $return"

	# attach rose port
	echo "Starting rose0 "
        if grep rose0 /etc/ax25/rsports ; then
        	rsattach rose0 || return=$rc_failed
        	ifconfig rose0 44.137.31.73 netmask 255.255.255.224
        	rsparms -call PI1LAP-10
	else
                echo  "Error rose0 not found in the file rsports"
                return="Failed"
        fi
        echo "$1 $return"

	# MFnos running in DOSEmu
	# Set the comport in de file /etc/dosemu/dosemu.comf $_com1 = "dev/ttyq5"
	#socat -d -d -ly PTY,link=/dev/ttyq5 PTY,link=/dev/ptyq5 &
	#	slattach -n -q -p slip -s 38400 /dev/ptyq5 &
        #sleep 2
	# KISS inteface for MFnos / slip
        #	kissattach /dev/ptyq5 ax6 44.137.31.73
        #	kissparms -p ax6 -c 1 -f y -t 10 -s 100 -r 255
        #	axparms -setcall ax6 pi1lap-10
	#
        #	ifconfig ax3 44.88.0.9 netmask 255.255.255.224 up
	#sleep 2

	# create nr0 device (lapuro/pi1lap-5) uronode
	echo "Starting nr0 "
        if grep nr0 /etc/ax25/nrports ; then
	        ifconfig nr0 down
        	nrattach -i 44.137.31.73 -m 512 nr0 || return=$rc_failed
        	ifconfig nr0 44.137.31.73 netmask 255.255.255.224 hw netrom PI1LAP-5 up
	else
                echo  "Error nr0 not found in the file nrports"
                return="Failed"
        fi
        echo "$1 $return"

	# create nr1 device (lapbbs/pi8lap) f6fbb
        echo "Starting nr1 "
        if grep nr1 /etc/ax25/nrports ; then
		ifconfig nr1 down
        	nrattach -i 44.137.31.73 -m 512 nr1 || return=$rc_failed
        	ifconfig nr1 44.137.31.73 netmask 255.255.255.224 hw netrom PI8LAP up
	else
                echo  "Error nr1 not found in the file nrports"
                return="Failed"
        fi
        echo "$1 $return"

	# create nr2 device (lapdx/pi1lap-4) dxspider
        echo "Starting nr2 "
        if grep nr2 /etc/ax25/nrports ; then
		ifconfig nr2 down
        	nrattach -i 44.137.31.73 -m 512 nr2 || return=$rc_failed
        	ifconfig nr2 44.137.31.73 netmask 255.255.255.224 hw netrom PI1LAP-4 up
	else
                echo  "Error nr2 not found in the file nrports"
                return="Failed"
        fi
        echo "$1 $return"

	# create nr3 device (lappac/pi1lap-7) fpac
        echo "Starting nr3 "
        if grep nr3 /etc/ax25/nrports ; then
		ifconfig nr3 down
        	nrattach -i 44.137.31.73 -m 512 nr3 || return=$rc_failed
        	ifconfig nr3 44.137.31.73 netmask 255.255.255.224 hw netrom PI1LAP-7 up
	else
                echo  "Error nr3 not found in the file nrports"
                return="Failed"
        fi
        echo "$1 $return"

	# start xnet
	cd /usr/local/xnet
	rm *.CFG &> /dev/null
	sleep 2
	./linuxnet < /dev/tty2 > /dev/tty2 2>&1 &
	./rstatrxd /var/www/cgi-bin/postat/ &> /dev/null &
	sleep 2

	# start jnos
	cd /home/pd9q/jnos
	./startnos </dev/tty3>/dev/tty3 2>&1 &
	sleep 3

	# route
	# Xnet route
	ip route add 44.137.31.70 dev sl0 table 44 src 44.137.31.69
	# Mfnos route to 192.168.1.110
	#route add 44.137.31.75 gw 192.168.1.112

	# beacons
		beacon -c PI1LAP-15 -t 10 -d  ID ax0 "Network node PI1LAP-15 Zeeland, JO11VN" &
        beacon -c PI1LAP-15 -t 10 -d  ID ax1 "Network node PI1LAP-15 Zeeland, JO11VN" &
        beacon -c PI1LAP-15 -t 10 -d  ID ax2 "Network node PI1LAP-15 Zeeland, JO11VN" &
        beacon -c PI1LAP-15 -t 10 -d  ID ax3 "Network node PI1LAP-15 Zeeland, JO11VN" &

	# start ax25 deamons
	echo "Starting ax25d daemon "
        if [ -f /usr/local/etc/ax25/ax25d.conf ] ; then
                /usr/local/sbin/ax25d || return=$rc_failed
        else
                echo  "/usr/local/etc/ax25/ax25d.conf file not found"
                return="Failed"
        fi
        echo "$1 $return"

	echo "Starting mheardd daemon "
        /usr/local/sbin/mheardd
	echo "$1 $return"

	echo "Starting ax25rtd daemon "
        if [ -f /usr/local/etc/ax25/ax25rtd.conf ] ; then
                /usr/local/sbin/ax25rtd || return=$rc_failed
        else
                echo  "/usr/local/etc/ax25/ax25rtd.conf file not found"
                return="Failed"
        fi
        echo "$1 $return"

	echo "Starting flexd daemon "
        if [ -f /usr/local/etc/ax25/flexd.conf ] ; then
                /usr/local/sbin/flexd || return=$rc_failed
        else
                echo  "/usr/local/etc/ax25/flexd.conf file not found"
                return="Failed"
        fi
        echo "$1 $return"

	echo "Starting netromd daemon "
        if [ -f /usr/local/etc/ax25/nrports ] ; then
                /usr/local/sbin/netromd -c -i -p 1 -t 15 || return=$rc_failed
        else
                echo  "/usr/local/etc/ax25/nrports file not found"
                return="Failed"
        fi
        echo "$1 $return"

	echo "Starting FBB daemon "
        if [ -f /usr/local/etc/ax25/fbb/fbb.conf ] ; then
                /usr/local/sbin/fbb -s -a -l /etc/ax25/fbb.log || return=$rc_failed
        else
                echo  "/usr/local/etc/ax25/fbb/fbb.conf file not found"
                return="Failed"
        fi
        echo "$1 $return"
        ;;

 stop)
        kill $(ps aux | grep '[l]inuxnet' | awk '{print $2}')
	echo "Shutting down jnos bbs"
        killall -KILL jnos || return="Failed"
	echo "Shutting down FBB script"
        killall -KILL fbb || return="Failed"
        echo "Shutting down FBB daemon"
        killall -KILL xfbbd || return="Failed"
        echo "Shutting down mheardd daemon"
        killall -KILL mheardd || return="Failed"
	echo "Shutting down netromd daemon"
        killall -KILL netromd || return="Failed"
	echo "Shutting down ax25d daemon"
        killall -KILL ax25d || return="Failed"
	echo "Shutting down ax25ipd daemon"
        killall -KILL ax25ipd || return="Failed"
	echo "Shutting down ax25upd daemon"
        killall -KILL ax25udp || return="Failed"
	echo "Shutting down rstatrxd daemon"
        killall -KILL rstatrxd || return="Failed"
	echo "Shutting down ax25rtd daemon"
        killall -KILL ax25rtd || return="Failed"
	echo "Shutting down mkiss daemon"
        killall -KILL mkiss || return="Failed"
	echo "Shutting down kissattach daemon"
        killall -KILL kissattach || return="Failed"
	echo "Shutting down kissnetd daemon"
        killall -KILL kissnetd || return="Failed"
	echo "Shutting down slattach daemon"
        killall -KILL slattach || return="Failed"
	echo "Shutting down socat daemon"
        killall -KILL socat || return="Failed"
	echo "Shutting down beacon daemon"
        killall -KILL beacon || return="Failed"
	echo "Shutting down flexd daemon"
        killall -KILL flexd || return="Failed"
	echo "Shutting down netrom ports"
        ifconfig nr0 down || return="Failed"
        ifconfig nr1 down || return="Failed"
        ifconfig nr2 down || return="Failed"
        ifconfig nr3 down || return="Failed"
	echo "Shutting down ax ports"
        ifconfig ax0 down || return="Failed"
        ifconfig ax1 down || return="Failed"
        ifconfig ax2 down || return="Failed"
        ifconfig ax3 down || return="Failed"
        ifconfig ax4 down || return="Failed"
        ifconfig ax5 down || return="Failed"
	echo "Shutting down rose ports"
	ifconfig rose0 down || return="Failed"
        ifconfig rose1 down || return="Failed"
	sleep 4
        echo "$1 $return"
        ;;
restart|reload)
        $0 stop && $0 start
        ;;
status)
        echo -n "Checking for fbb daemon: "
        PID=`/bin/pidof -x xfbbd`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, fbb is up :)${reset}"
         else
                echo -e "${red}No, fbb is down :(${reset}"
        fi
	echo -n "Checking for ax25d daemon: "
        PID=`/bin/pidof -x ax25d`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, ax25d is up :)${reset}"
         else
                echo -e "${red}No, ax25d is down :(${reset}"
        fi
	echo -n "Checking for netromd daemon: "
        PID=`/bin/pidof -x netromd`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, netromd is up :)${reset}"
         else
                echo -e "${red}No, netromd is down :(${reset}"
        fi
	echo -n "Checking for ax25rtd daemon: "
        PID=`/bin/pidof -x ax25rtd`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, ax25rtd is up :)${reset}"
         else
                echo -e "${red}No, ax25rtd is down :(${reset}"
        fi
	echo -n "Checking for flexd daemon: "
        PID=`/bin/pidof -x flexd`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, flexd is up :)${reset}"
         else
                echo -e "${red}No, flexd is down :(${reset}"
        fi
	echo -n "Checking for mheardd daemon: "
        PID=`/bin/pidof -x mheardd`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, mheardd is up :)${reset}"
         else
                echo -e "${red}No, mheardd is down :(${reset}"
        fi
	echo -n "Checking for ax25ipd daemon: "
        PID=`/bin/pidof -x ax25ipd`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, ax25ipd is up :)${reset}"
         else
                echo -e "${red}No, ax25ipd is down :(${reset}"
        fi
	echo -n "Checking for ax25udp daemon: "
        PID=`/bin/pidof -x ax25udp`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, ax25udp is up :)${reset}"
         else
                echo -e "${red}No, ax25udp is down :(${reset}"
        fi
	echo -n "Checking for linuxnet node: "
        PID=`/bin/pidof -x linuxnet`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, linuxnet is up :)${reset}"
         else
                echo -e "${red}No, linuxnet node is down :(${reset}"
        fi
	echo -n "Checking for jnos bbs: "
        PID=`/bin/pidof -x jnos`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, jnos is up :)${reset}"
         else
                echo -e "${red}No, jnos is down :(${reset}"
        fi
	echo -n "Checking for kissattach: "
        PID=`/bin/pidof -x kissattach`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, kissattach is up :)${reset}"
         else
                echo -e "${red}No, kissattach is down :(${reset}"
        fi
	echo -n "Checking for slattach: "
        PID=`/bin/pidof -x slattach`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, slattach is up :)${reset}"
         else
                echo -e "${red}No, slattach is down :(${reset}"
        fi
	echo -n "Checking for kissnetd: "
        PID=`/bin/pidof -x kissnetd`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, kissnetd is up :)${reset}"
         else
                echo -e "${red}No, kissnetd is down :(${reset}"
        fi
	echo -n "Checking for mkiss: "
        PID=`/bin/pidof -x mkiss`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, mkiss is up :)${reset}"
         else
                echo -e "${red}No, mkiss is down :(${reset}"
        fi
	echo -n "Checking for socat: "
        PID=`/bin/pidof -x socat`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, socat is up :)${reset}"
         else
                echo -e "${red}No, socat is down :(${reset}"
        fi
	echo -n "Checking for rstatrxd: "
        PID=`/bin/pidof -x rstatrxd`
        if [ -n "$PID" ]; then
                echo -e "${green}Yes, rstatrxd is up :)${reset}"
         else
                echo -e "${red}No, rstatrxd is down :(${reset}"
        fi

        ;;
*)
        echo "Usage: $0 {start|stop|status|restart}"
        exit 1
esac

exit 0

 

Install and update script AX25 /tools/libs/apps

Script provided by Charles S. Schuman modified by F6BVP for updating AX.25 libraries and applications. October 22/2017 (update at Jan 13 2019)

#!/bin/bash
# script updated October-22-2017 for VE7FET new AX.25 github repository (F6BVP)
# script update January-13-2019 by VE7FET to correct error checking and update for installconf changes
# Copy this script file in /usr/local/src/ax25/updAX25.sh
# cd into /usr/local/src/ax25
# and execute command : sudo chmod a+x updAX25.sh
# execute command to run the script : ./updAX25.sh
# It will update and re-compile AX.25 libraries, AX.25 tools and AX.25 apps

LIBAX25=linuxax25-master/libax25/
TOOLS=linuxax25-master/ax25tools/
APPS=linuxax25-master/ax25apps/

# Color Codes
Reset='\e[0m'
Red='\e[31m'
Green='\e[30;42m'  # Black/Green
Yellow='\e[33m'
YelRed='\e[31;43m' #Red/Yellow
Blue='\e[34m'
White='\e[37m'
BluW='\e[37;44m'

echo -e "${BluW}\t\n\t Script provided by Charles S. Schuman modified by F6BVP for updating AX.25 libraries and applications\t\n\t\t\t ${Red} January-13-2019    \n \t\t${Yellow}       k4gbb1@gmail.com \n${Reset}"

  if ! uid=0
   then su
  fi

#if [ -f /usr/lib/libax25.a ]; then
echo -e "${Green} Removing Old Libax25 files out of the way${Reset}"
  rm -fr /usr/lib/libax25*
  rm -fr /usr/lib/libax25*.*
#fi

# Make directories if not exist
if [ -d /usr/local/src/ax25/ ]
	then echo "directory /usr/local/src/ax25 already exists"
	else 
	mkdir /usr/local/src/ax25/
fi
if ! [ -d /usr/local/etc/ax25/ ]
	then mkdir /usr/local/etc/ax25/
fi
if ! [ -d /usr/local/var/ax25/ ] 
	then 
		mkdir /usr/local/var/
		mkdir /usr/local/var/ax25
fi
#
# Download libax25 source file 
  cd /usr/local/src/ax25
  rm -fr /usr/local/src/ax25/libax25
  rm -f master.zip
  echo -e "${Green} Getting AX25 libraries, AX25 tools and AX25 apps archives${Reset}"
   wget https://github.com/ve7fet/linuxax25/archive/master.zip
  if [ $? -ne 0 ]
   then
     echo -e "${Red}\t Ax25 Source files are Missing${Reset}"
     exit 1
  fi

echo -e "${Green} Now unarchiving AX.25 files${Reset}"
  rm -fr linuxax25-master
  unzip master.zip
#Libax25 (updating configure.ac for automake > 1.12 compliance)
  cd /usr/local/src/ax25/$LIBAX25
#  
  echo -e "${Green}\t Creating Makefile(s) to prepare libraries compilation${Reset}"
  ./autogen.sh
  ./configure > liberror.txt 2>&1
  echo -e -n "\t  *"
  echo -e "${Green}\t Compiling Runtime Lib files${Reset}"

# Clean old binaries
  make clean
  if [ $? -ne 0 ]
    then
     echo -e "${Red}\t Libax25 Compile error - See liberror.txt${Reset}"
     exit 1
  fi
# Compile
  echo -n "  *"   
  make
  if [ $? -ne 0 ]
    then
     echo -e "${Red}\t Libax25 Compile error - See liberror.txt${Reset}"
     exit 1
  fi
  echo  "  *\n"
# Install
#  make install >> liberror.txt 2>&1
  make install
  if [ $? -ne 0 ]
   then
     echo -e "${Red} Libax25 Install error - See liberror.txt${Reset}"
     exit 1
   else   
     echo -e "${Green} Libax25 Installed${Reset}"
     rm liberror.txt
  fi

# AX25 libraries symbolic name needed for some applications
  cd /usr/local/lib/
  ln -s libax25.so libax25.so.0

# AX25 libraries declaration (into ld.so.conf)
  echo "/usr/local/lib" >> /etc/ld.so.conf && /sbin/ldconfig

# AX25-APPS
  cd /usr/local/src/ax25
  rm -fr /usr/local/src/ax25/ax25apps
  echo -e "${Green} AX.25 applications${Reset}"
#Libax25 (updating configure.ac for automake > 1.12 compliance)
  cd /usr/local/src/ax25/$APPS
#  
  echo -e "${Green}\t Creating Makefile(s) to prepare apps compilation${Reset}"
  ./autogen.sh
  ./configure > appserror.txt 2>&1
  echo -n -e "\t  *" 
# Clean old binaries
  make clean
  if [ $? -ne 0 ]
   then
     echo -e "${Red}\t Ax25-Apps Compile Error - see appserror.txt${Reset}"
     exit 1
  fi
# Compile Ax25-apps
  echo -n "  *" 
  echo -e "${Green}\t Compiling Ax25 apps ${Reset}"
  make
  if [ $? -ne 0 ]
   then
     echo -e "${Red}\t Ax25-Apps Compile Error - see appserror.txt${Reset}"
     exit 1
  fi
# Install Ax25-apps
  echo "  *" 
#  make  install >> appserror.txt 2>&1
  make  install
  if [ $? -ne 0 ]
  then
     echo -e "${Red} Ax25-Apps Install Error - see appserror.txt${Reset}"
     exit 1
  else
     echo -e "${Green} Ax25-apps Installed${Reset}"
     rm appserror.txt
  fi

# AX25-TOOLS
  cd /usr/local/src/ax25
  rm -fr /usr/local/src/ax25/ax25tools
  echo -e "${Green} AX.25 tools${Reset}"
  cd /usr/local/src/ax25/$TOOLS
#  
  echo -n -e "\t  *" 
  echo -e "${Green}\t Creating Makefile(s) to prepare apps compilation${Reset}"
  ./autogen.sh
  ./configure > toolserror.txt 2>&1
# Clean old binaries
  make clean
    if [ $? -ne 0 ]
      then
        echo -e "${Red}\t AX.25 tools Compile error - See toolserror.txt${Reset}"
        exit 1
    fi
# Compile Ax.25 tools
  echo -e "${Green}\t Compiling AX.25 tools${Reset}"
  echo -e "\t  *" 
  make
    if [ $? -ne 0 ]
      then
        echo -e "${Red}\t AX.25 tools Compile error - See toolserror.txt${Reset}"
        exit 1
    fi
# Install Ax.25 tools
  echo "  *" 
  make install
  if [ $? -ne 0 ]
    then
      echo -e "${Red}\t AX.25 tools Install error - See toolserror.txt${Reset}"
      exit 1
    else
      echo -e "${Green} AX.25 tools Installed${Reset}"
      rm toolserror.txt
    fi

# Set permissions for /usr/local/sbin/ and /usr/local/bin
#  cd /usr/local/sbin/
#  chmod 4775 *
#  cd /usr/local/bin/
#  chmod 4775 *
  echo -e "\t \e[030;42m   Ax.25 Libraries, applications and tools were successfully rebuilt and installed${Reset}"
  echo -e "${Green} If this is a first install of AX.25 tools or apps, sample config files were installed in the doc ${Reset}" 
  echo -e "${Green} folder on your system. This is likely something like /usr/local/share/doc or /usr/share/doc. ${Reset}"
  echo -e "${Green} Look in doc/ax25apps/conf and doc/ax25tools/conf for sample conf files, and copy them to your ${Reset}"
  echo -e "${Green} etc/ax25 folder and edit (may be /etc/ax25 or /usr/local/etc/ax25, depending on your system).${Reset}"
# (End of Script)

 

Howto set ax25 Parameters

Howto set ax25 parameters on a tnc in kissmode.

  /usr/local/sbin/kissattach /dev/ttyUSB0 1 44.137.31.85 > /tmp/ax25-config.tmp
  awk '/device/ { print $7 }' /tmp/ax25-config.tmp > /tmp/ax25-config-tmp
  Device=ax0 


# Check for Device
  if [ -d /proc/sys/net/ax25/$Device ]
    then cd /proc/sys/net/ax25/$Device/
       /etc/ax25/ax25parms
       echo -e "Port 1 attached to $Device"
    else echo -e "** Error setting $Device parms*"
  fi
         echo -e -n "$"

Below the file ax25parms. (chmod 755)

#! /bin/bash

# Parms for a USER Port
echo 5000    > t1_timeout               # (Frack)
echo 500     > t2_timeout               # (RESPtime)
echo 300000  > t3_timeout               # (Check)
echo 900000  > idle_timeout             # Idle Timer
echo 5       > standard_window_size     # Outstanding Frames
echo 8       > maximum_retry_count      # Max Retrys
echo 256     > maximum_packet_length    # Paclen
echo 0       > ax25_default_mode
echo 0       > ip_default_mode
echo 0       > backoff_type
echo 2       > connect_mode
#echo 180000 > dama_slave_timeout
echo 32      > extended_window_size
echo 0       > protocol