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 🙂

Netrom Tutorial (n2nov)

Charles N2NOV has written a fantastic document with a clear explanation about netrom quality`s and parameters.

Setting NetRom Parameters
I was looking at the old NEDA (NorthEast Digital Association) newsletters from twenty years ago (1999) and want to show you some pertinent NetRom parameters that might help with the bloated (some up to 800) nodes lists that we see from time to time. These started as X1J parameters, but you might find them useful to give you an idea how to tweak your BPQ, Xrouter, *NOS, Flex, etc systems. Each program might use a different naming convention, but reading the details of your documentation will align to NEDA labels. As always, adjustments can be made for a non-standard configurations like full duplex data repeaters, etc. Feel free to discuss the technical points here, but gear the explanation for the newer sysops. The parameters are broken down differently by the type of connection you have with another station (mostly RF-based). Adaption to an AXIP link via wired internet should follow the Dedicated Point-to-Point Link (DPPL).

USER PORT (typical 2 meter port):
No node table is broadcast to keep the channel clear. Do this by setting Initial (Default) Obsolescence at 5 and the Minimum Obsolescence to 6. Since the default is lower than the cutoff, it will never broadcast. 

DPPL (only two backbone users on a dedicated frequency) [or AXIP]:
Your partner station should be a locked route with quality of 203.
Accept incoming nodes from your partner with minimum quality of 63. 
Initial (Default) Obsolescence at Minimum Obsolescence to 3
Nodes Broadcast Interval 900 seconds (15 minutes)
The obsolescence count will start at 5 and decrement by 1 every 15 minute cycle and stop when it hits 3 if there is no refresh from your partner station. This keeps things clean and updated within 30 minutes.

Multiway Backbone with 3 Partners (typically 220 Mhz regional channel):
Your partner station should be a locked route with quality of 203.
Accept incoming nodes from your partner with minimum quality of 63.
Initial (Default) Obsolescence at 5
Minimum Obsolescence to 2
Nodes Broadcast Interval 900 seconds (15 minutes)
The obsolescence count will start at 5 and decrement by 1 every 15 minute cycle and stop when it hits 2 if there is no refresh from your partner station. This keeps things clean and updated within 45 minutes. This allows for occasional transmitter collisions between partners.
NOTE: current practice is to set minimum quality values at 150 or 180 is only to mitigate the effect of mislabeled nodes qualities broadcast to partner systems that get propagated. There are several systems that make all of the nodes in their table higher than they should be. When the network is cleaned out and realigned, then the minimum quality can be adjusted downward.
How are node qualities adjusted when the nodes table is passed around the network from partner to partner?

*** ONLY WHAT IS ON YOUR PHYSICAL BOX OR WIRED LAN SHOULD BE HIGHER THAN 203 ***
Initial partner default quality is  203 (out of 256)  or 203/256
First hop between AXIP partners is  203/256 * 203/256 or 161/256
Second hop between AXIP partners is 161/256 * 203/256 or 128/256
Third hop between AXIP partners is  128/256 * 203/256 or 101/256
Fourth hop between AXIP partners is 101/256 * 203/256 or 80/256
Fifth hop between AXIP partners is  80/256  * 203/256 or 63/256

Let's look at how various stations relate to each other on the NetRom nodes list. First, each station sets their partners at a default value of 203 if on AXIP or DPPL. This is only the value between the two stations talking to each other. Here are some of my forwarding partners and some of their other partners.

Second, let's look at how those next-line stations actually calculate to my station. If my partner is 203/256 (or about 80% reliability) and so is their partner, then the second-level station is not going to be 80% reliability to me. BBGATE:AA6HF-4 is 80% to me on a direct connection, but has to be less when going through LAXNET:N6ROE-3.

By doing the calculation of each level's reliability of 203/256 against the next level,
we get 203/256 x 203/256 (same as 0.79296875 x 0.79296875) or 161/256 (0.628799438476).

If we extend this exercise by multiplying against the next level of 203/256 we get:

Going down level by level we get values of 128 (X), 101 (Y), 80 (Z), etc.
By setting MIN QUALITY you can cut off how many levels (hops) you want to see.
MIN QUAL 161 lets me see all stations closer to me above the level that X is on.
MIN QUAL 128 allows me to see down to the level of X.
MIN QUAL 101 allows me to see down to the level of Y.
MIN QUAL 80  allows me to see down to the level of Z.

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

Bug Netrom node Broadcast

@Bug Bash / Thanks to Dave who has fixed the bug (also working on Xfbb) Thanks to Theo how has found the Bug.

There is an (apparently) very old bug in netromd of the linuxax25 tools. This bug ensures that nodes broadcasts on an AX.25 port with paclen <256 do not go out or are incomplete. This is the case in both the original and VE7FET versions.

Syslog get spammend with this kind of messages

Feb  6 14:20:03 raspberrypi netromd[17311]: netromt: sendto: Message too long
Feb  6 14:20:08 raspberrypi netromd[17311]: netromt: sendto: Message too long
Feb  6 14:20:13 raspberrypi netromd[17311]: netromt: sendto: Message too long
Feb  6 14:20:18 raspberrypi netromd[17311]: netromt: sendto: Message too long
Feb  6 14:20:23 raspberrypi netromd[17311]: netromt: sendto: Message too long
Feb  6 14:20:28 raspberrypi netromd[17311]: netromt: sendto: Message too long
Feb  6 14:20:33 raspberrypi netromd[17311]: netromt: sendto: Message too long
Feb  6 14:20:38 raspberrypi netromd[17311]: netromt: sendto: Message too long
Feb  6 14:20:43 raspberrypi netromd[17311]: netromt: sendto: Message too long
Feb  6 14:35:04 raspberrypi netromd[17320]: netromt: sendto: Message too long
Feb  6 14:35:09 raspberrypi netromd[17320]: netromt: sendto: Message too long
Feb  6 14:35:14 raspberrypi netromd[17320]: netromt: sendto: Message too long
Feb  6 14:35:19 raspberrypi netromd[17320]: netromt: sendto: Message too long

This can be fixed by releasing a patch on the ax25tools/netrom/netromt.c file.

106c106,111
< 
---
> 	int ax_paclen;
> 	
> 	ax_paclen = ax25_config_get_paclen (port_list[port].port);
> 	if (ax_paclen == 0) 
> 		ax_paclen = NODES_PACLEN;	
> 	
183,184c188,189
< 			if (len + ROUTE_LEN > NODES_PACLEN)
< 				break;
---
> 			if (len + ROUTE_LEN > ax_paclen)
> 				break;	
197,198c202,203
< 	/* If the packet was not full then we are done */
< 	} while (len + ROUTE_LEN > NODES_PACLEN);
---
> 	/* If the packet was not full then we are done */	
> 	} while (len + ROUTE_LEN > ax_paclen);

Download the patch

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"

 

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)