#!/bin/sh
# do_ax25
# 04-30-98, 05-12-98
# 11-23-99
# 04-06-00,
# 04-19-03 (SuSE), 05-14-03
# 06-01-03 (Bambi), 06-05-03
# KA1FSB/kbn
# --------------------------------------------------------------------
#
# NOTE: Make sure you have the cable in the right slot! COM1
# Make sure you have removed any NULL modem from the line!
# Make sure you have disabled any use of dev/ttyS3 in the inittab
# file, else you will get a resources busy from ifconfig!
# Make sure the ifconfig for the bcsf0 iface looks OK!
# Modify the ax25d.conf and the axports files for bcsf0!
#
# NOTE: If you want to include the sound modules, load them AFTER this
# do_baycom has been run!!!
#
# NOTE: (This is the SuSE version! device is bcsf[0-3]. You may have to
# convert the line to tcpip or the ax25d won't run!
# So far, I can only get COM1 to "attach" on irq 4. The docs
# say use either irq 3 or 4, and com2 or com1. Doesn't talk about
# other com's or irq's! This is for sethdlc.)
#
# NOTE: This is the Bambi version! devices are bc[0-3]. I tried irq 2
# and this did NOT work, as it did not on SuSE either! So I
# tried irq 5 and it worked! (3, 4, 11 all known to work)
#
# NOTE: This is slowly converting to a generalized ax25 loader!
# OK, we are there, 05-12-03. It is now do_ax25
#
# NOTE: Bring up axip and netrom first using this script. Then go
# back and bring up bcsf0 for JNOS.
#
# NOTE: Can now be run from do_ax25.cf which answers the prompts so
# that this can be automated from another script. If you want more
# configuration ability, then you can add a cmd line switch which
# would allow passing args by this method...
#
# ---------------------------------------------------------------------
#----- Inits...
MYDATE=`/bin/date`
LM='06-01-03'
LINUX_VER=`uname -r`
MOD_PATH="/lib/modules/$LINUX_VER"
#----- Where you want the log data...
MYLOG="/root/ax25.errors"
#----- A few more inits...
KISSDUMP="/root/bin/mykiss"
INETADDR="44.56.26.14"
DEFCALL="KA1FSB-7"
MODNAME=""
OBJPATH=""
#----- This is the list of modules that need to be loaded
#----- for a full radio configuration...
MODLIST="net/bsd_comp net/hdlcdrv net/baycom"
#----- A separate shorter list for axip only or no baycom...
# AX25LIST="misc/ax25 misc/netrom"
#===== Parse the cmd args...
#----- Help usage info...
if [ "$1" = "--help" ]
then
echo ""
echo "Usage: do_ax25 (currently an interactive version, no cmd line args)"
echo ""
exit 0
fi
#===== Start of calls and subs...
do_axip ()
{
#----- KA1FSB-6 is the axip0 call... for ax25 utils
local DEVICE=""
local KISSMSG=""
local AXIPCALL="KA1FSB-6"
#----- Attach the axip line...
/bin/echo " -> Attaching the axip device on port axip0..." | tee -a $MYLOG
#----- Attach as an internal pipe, ptyqd on port axip0.
/usr/sbin/kissattach -l /dev/ptyqd axip0 $INETADDR >$KISSDUMP
KISSMSG=`/bin/cat $KISSDUMP`
DEVICE=`echo $KISSMSG | tr -d "." | \
sed -e 's/^.* \(ax[0-9].*\)/\1/' | cut -f1 -d " "`
if [ "$DEVICE" ]
then
echo " -> $KISSMSG" | tee -a $MYLOG
ifconfig $DEVICE $INETADDR broadcast 44.255.255.255 netmask 255.255.255.0
axparms -setcall $DEVICE $AXIPCALL
/bin/echo " -> Starting the ax25ipd daemon..." | tee -a $MYLOG
#----- Connect the other side of this pipe ttyqd for axip0...
#----- The ax25ipd.conf lists /dev/ttyqd as the other side of that pipe
/usr/sbin/ax25ipd 1>>$MYLOG 2>>$MYLOG &
#----- 01-14-02: Make KA1FSB-7 the default route...
/usr/sbin/axparms -route add axip0 default ka1fsb-7
fi
}
do_netrom ()
{
#----- 12-30-01, 01-01-02: Netrom set ups, SuSE 04-23-03
/bin/echo " -> Setting up NET/ROM configs... " | tee -a $MYLOG
#----- Order of ops is crucial, as usual..
/usr/sbin/nrattach -i $INETADDR nr0 | tee -a $MYLOG
#----- netmask was 255.0.0.0, brc was 44.255.255.255
/sbin/ifconfig nr0 44.56.26.14 netmask 255.255.255.0
#----- Could include -q 192 for quality... ( -i at start, gives it a kick )
/usr/sbin/netromd -i -l -t 20 -d &
sleep 1
}
do_baycom ()
{
#----- Now set up the bc devices, up to four devices allowed...
#----- Shift in the args as this sub is called...
local IFACE=""
local TTY=""
local HEXADDR=""
local INTR=""
local DEVCALL=""
local PORTNET=""
local PTERM=""
IFACE=$1
shift
echo " ...Starting do_baycom script for $IFACE" | tee -a $MYLOG
echo " -> Testing for bc devices in device table..." | tee -a $MYLOG
TEST=""
TEST=`cat /proc/net/dev | grep -c bc[a-z0-9]:* | tr -d " "`
if [ "$TEST" != "" ]
then
echo " OK, found $TEST bc device(s)..." | tee -a $MYLOG
TEST=""
TEST=`cat /proc/net/dev | grep -i $IFACE: | tr -d " "`
if [ ! "$TEST" ]
then
echo "Could not find bc device $IFACE!" | tee -a $MYLOG
return
fi
else
echo " Could NOT find bc devices in /proc/net/dev" | tee -a $MYLOG
return
fi
#----- Pass in the rest of the parameters...
TTY=$1
shift
HEXADDR=$1
shift
INTR=$1
shift
DEVCALL=$1
shift
PORTNET=$1
shift
PTERM=$1
#----- Detach the serial driver from this port, COM1...
#----- Line must be free in order to detach!
echo " -> Clearing and detaching ${TTY} ..." | tee -a $MYLOG
setserial /dev/${TTY} uart none
sleep 2
#----- Attach the HDLC driver for this serial port... if not, then bail
sethdlc -p -i $IFACE mode ser12* io $HEXADDR irq $INTR
if [ "$?" = "0" ]
then
echo " -> Freed ${TTY} and attached Baycom driver to $IFACE on ${TTY}." | tee -a $MYLOG
else
echo " => Fail on device $IFACE attach!" | tee -a $MYLOG
return
fi
sleep 7
#----- Tweak the timing parameters... ppersist was 40, txd-200, txt-20
echo ' -> Tweaking parameters for the hdlc...' | tee -a $MYLOG
sethdlc -i $IFACE -a txd 250 txtail 30 slot 100 ppersist 63 half
sleep 3
#----- Turn it on...
echo ' -> Setting up ifconfig, arp and mtu 256...' | tee -a $MYLOG
ifconfig $IFACE mtu 256 up
sleep 1
#----- Associate a callsign with the kernel iface to get the port name!
echo " -> Associating $DEVCALL with interface $IFACE" | tee -a $MYLOG
axparms -setcall $IFACE $DEVCALL
sleep 1
#----- Convert the line to tcp/ip, may need to add routing...
#----- NOTE: On SuSE seems like the line must be a tcpip too!
/root/do_tcpip $IFACE
#----- If JNOS, then hook this end of the pseudo terminal up...
#----- NOTE: On bambi, this does not always "take" the first time.
#----- I have to do a double boot, once for net2kiss and then for JNOS
#----- See the file baycom in /doc...
if [ "$PORTNET" = "jnos" ]
then
sleep 1
echo " -> Set network to kiss pseudo pty${PTERM} pipe..." | tee -a $MYLOG
/usr/sbin/net2kiss -z -i $IFACE /dev/pty${PTERM} &
sleep 1
fi
#----- OK! This works fine! Gets access to all the portnet "vhf" SSID's
#----- To activate, make PORTNET vhf or whatever networked port you want!
if [ "$PORTNET" != "" ] && [ "$PORTNET" != "jnos" ] && [ "$PORTNET" != "none" ]
then
/usr/sbin/net2kiss -z -i $IFACE /dev/pty${PTERM} &
/usr/sbin/kissattach /dev/tty${PTERM} $PORTNET $INETADDR
fi
#----- Now show the table for ifconfig...
ifconfig $IFACE
}
#***** Begin the main process...
clear
echo " *** AX25 Utilities Configuration ( $LM ) ***"
echo ""
#----- Could be changed to clear file on first run... (>)
echo $MYDATE 1>$MYLOG
#----- First disable the cua(x)'s before the module loads!
#----- This made no difference in regard to bc1 (deaf)
# setserial /dev/cua1 uart none
# sleep 1
# setserial /dev/cua2 uart none
#===== Load the module drivers...
echo " -> Loading required modules..." | tee -a $MYLOG
for i in $MODLIST
do
MODNAME=`echo $i | cut -f2 -d"/"`
echo -n "$MODNAME " | tee -a $MYLOG
OBJPATH=$MOD_PATH"/"$i".o"
insmod $OBJPATH
sleep 1
done
echo "" | tee -a $MYLOG
#===== Attach devices and startup subsidiary daemons...
echo -n "Do you want to install the baycom driver module? (Y/N) : "
read MYINPUT
if [ "$MYINPUT" = "y" ] || [ "$MYINPUT" = "Y" ]
then
echo "OK, installing baycom module..."
#----- Configure or re-configure as required...
#----- The last is the pseudo terminal ptyqa and ttyqa,
#----- You choose the last two letters, ie, qa, qb, qc, qd...
#----- NOTE: irq 2 usually does not work, get a busy sig from device
do_baycom bc0 ttyS2 0x3e8 5 KA1FSB-7 jnos qa
sleep 3
#----- Line cannot RX yet! Line discipline? Order of ops?
#----- or is there a kernel conflict with the sound stuff!?
# do_baycom bc1 ttyS1 0x2f8 3 KA1FSB-8 none -
# sleep 5
#----- Spares...
# do_baycom bc2 ttySx 0x??? X KA1FSB-7 jnos qc
# do_baycom bc3 ttySx 0x??? X KA1FSB-7 jnos qd
else
echo -e "\nNot installing the baycom driver at this time..."
fi
#----- Exit if you only want to set up the bc driver(s)
echo -n "Do you want to install the ax25 utilities? (Y/N) : "
read MYINPUT
if [ "$MYINPUT" = "y" ] || [ "$MYINPUT" = "Y" ]
then
echo "OK, continuing with full install of ax25 modules..."
else
echo -e "\nExiting here..."
exit
fi
#----- Early exit here on Bambi for a test... just in case
# exit
#----- Now do the axip links...
# do_axip
#----- Set up the netrom port(s) and start up the daemon...
#----- Netrom MUST come before the ax25d start up!
# do_netrom
#===== Clear out any control files that may be blocking...
cp /dev/null /var/ax25/pms/loggedin
#===== Now load the daemons...
echo " -> Starting ax25d, etc..." | tee -a $MYLOG
/usr/sbin/ax25d
#----- Now start some things AFTER the ax25d is up!
/usr/sbin/mheardd -n 10
#----- Now set up ax25 routing...
/usr/sbin/ax25rtd
#----- You may tweak/add netrom any time after all is up...
# /root/bin/do_nrparms
#----- Set the radio beacon going...
/root/do_beacon - bc0
#----- Need this for pms MBX!, mail then goes to ka1fsb on system
/usr/sbin/axparms -assoc ka1fsb-7 ka1fsb
/usr/sbin/axparms -route add bc0 default ka1fsb-7
/usr/sbin/axparms -route add bc0 default
#----- Test to see if sockets are active...
netstat --ax25
netstat --netrom
echo " Completed do_baycom script..." | tee -a $MYLOG
echo "" >> $MYLOG
#===== End of do_ax25