===== Description =====
The ax25-essentials and ax25-helpers are a subjective mix of ax25-apps and ax25-tools. The source is the latest from CVS (http://www.linux-ax25.org).
===== Dependencies =====
^Package ^depends on ^
|ax25-essentials |ax25-libax25 (-> kmod-ax25) |
|ax25-helpers |ax25-essentials (-> ax25-libax25 -> kmod-ax25), libncurses (needed for 'listen' and 'call') |
|ax25-netrom-rose |ax25-libax25 (-> kmod-ax25)|
|ax25-libax25 |kmod-ax25 |
===== Installation =====
Both ax25-essentials and ax25-helpers depend on "kmod-ax25-dg8ngn". Make sure you have it installed.
Diskfree prior to installation:
root@OpenWrt:/ df
Filesystem 1k-blocks Used Available Use% Mounted on
none 15256 28 15228 0% /tmp
/dev/mtdblock/4 6016 652 5364 11% /jffs
mini_fo:/jffs 1280 1280 0 100% /
root@OpenWrt:/
Installation:
ipkg update
ipkg install ax25-essentials
ipkg install ax25-helpers
ipkg install ax25-netrom-rose (only needed if you want to use netrom or rose)
reboot
Diskfree after installation:
root@OpenWrt:/# df
Filesystem 1k-blocks Used Available Use% Mounted on
none 15256 20 15236 0% /tmp
/dev/mtdblock/4 6016 1252 4764 21% /jffs
mini_fo:/jffs 1280 1280 0 100% /
root@OpenWrt:/#
===== AX25 Configuration =====
The following has been put together by Jens, DL3SJB.
Each of the AX.25 applications read a particular configuration file to obtain the parameters of the AX.25 port(s) of your OPENWRT Linux. For AX.25 ports the file is '/etc/ax25/axports'.
root@OpenWrt:/etc/ax25# ls
ax25.profile ax25mond.conf axspawn.conf rip98d.conf ttylinkd.conf
ax25d.conf ax25rtd.conf nrbroadcast rsports
ax25ipd.conf axports nrports rxecho.conf
root@OpenWrt:/etc/ax25#
The file 'axports' configures the ax25 device:
root@OpenWrt:/etc/ax25# vi axports
# The format of this file is:
#
# name callsign speed paclen window description
#
ax0 d0mmy 115200 255 2 XNET Kernellink
root@OpenWrt:/etc/ax25#
Note: You need to assign unique callsign (ssid) to each ax25 port in your 'axports' file. In this example the call used is 'd0mmy'.
As netrom is not subject of configuration here, make sure no netrom port is listed in 'nrports':
root@OpenWrt:/etc/ax25# vi nrports
# /etc/ax25/nrports
#
# The format of this file is:
#
# name callsign alias paclen description
#
root@OpenWrt:/etc/ax25#
Same goes for rose. As rose is not subject of configuration here, make sure no rose port is listed in 'rsports':
root@OpenWrt:/etc/ax25# vi rsports
# /etc/ax25/rsports
#
# The format of this file is:
#
# name address description
#
root@OpenWrt:/etc/ax25#
The 'axspawn' program is launched by 'ax25d'. It provides for AX.25 logins into the local Linux. To prepare for this add the following
lines into your '/etc/ax25/ax25d.conf' file (you may have to delete the existing default lines that are serving as examples):
root@OpenWrt:/etc/ax25# vi ax25d.conf
# /etc/ax25/ax25d.conf
#
# ax25d Configuration File.
#
# AX.25 Ports begin with a '['.
#
[D0MMY VIA AX0]
NOCALL * * * * * * L
default * * * * * * - root /usr/sbin/axspawn axspawn %u
root@OpenWrt:/etc/ax25#
Add to File (/etc/group):
guest:x:300:
Add to File (/etc/passwd):
guest:+:300:300:guest:/tmp/guest:/bin/ash
The 'axspawn.conf' file configures the operation of 'axspawn'. Example:
root@OpenWrt:/etc/ax25# vi axspawn.conf
# /etc/ax25/axspawn.conf
#
# allow automatic creation of user accounts
create yes
# allow empty password field (so user may login via telnet, too) [default no]
create_empty_password no
# create with system utility useradd(8)? [default no]
create_with_useradd no
#pwcheck call
#pwcheck group
#pwcheck password
# guest user if above is 'no' or everything else fails. Disable with "no"
guest no
# group id or name for autoaccount
group guest
# first user id to use
first_uid 400
# maximum user id
max_uid 2000
# where to add the home directory for the new user
home /tmp
# secure homedirectories (g-rwx)
#secure_home yes
# user shell
shell /bin/sh
# bind user id to callsign for outgoing connects.
associate no
root@OpenWrt:/etc/ax25#
Note (1): The default shell has been altered from the default file (bash => ash), as Kamikaze normally has no bash support.
Note (2): In this example, the user space is located in the fram disk. If you place the users in /tmp, remember that all content is lost
after reset. This maybe, however, an acceptable consequence as it cleans-up the system regularly. If you decide to use flash disk
instead, this could be a critical location as flash memories don't have unlimited write cycles. Therefore we suggest to find a different
location, such as usb-hdd (if any) or on a samba network share.
If you decide not to use '/tmp' remember to ensure the home root directory does exist, i.e.:
root@OpenWrt:/etc/ax25# mkdir /home
root@OpenWrt:/etc/ax25# mkdir /home/hams
root@OpenWrt:/etc/ax25#
Prior to the XNET configuration, one final step ought to be performed. The standard login script of OPENWRT does not allow 'axspawn' to login a user 'as him-' respectively 'herself'. Therefore, we need to apply a workaround using the scripting language 'ruby' (thanks to DL9SAU).
Diskfree prior to installation:
root@OpenWrt:~/etc/ax25# df
Filesystem 1k-blocks Used Available Use% Mounted on
none 15256 40 15216 0% /tmp
/dev/mtdblock/4 6016 2344 3672 39% /jffs
mini_fo:/jffs 1280 1280 0 100% /
Installation of 'ruby':
root@OpenWrt:~/etc/ax25# ipkg install ruby
Installing ruby (1.8.6-p36-1) to root...
Downloading http://downloads.openwrt.org/kamikaze/packages/mipsel/./ruby_1.8.6-p36-1_mipsel.ipk
Installing libruby (1.8.6-p36-1) to root...
Downloading http://downloads.openwrt.org/kamikaze/packages/mipsel/./libruby_1.8.6-p36-1_mipsel.ipk
Configuring libruby
Configuring ruby
Done.
root@OpenWrt:~/etc/ax25#
Diskfree after installation:
root@OpenWrt:~/etc/ax25# df
Filesystem 1k-blocks Used Available Use% Mounted on
none 15256 40 15216 0% /tmp
/dev/mtdblock/4 6016 2716 3300 45% /jffs
mini_fo:/jffs 1280 1280 0 100% /
root@OpenWrt:~/etc/ax25#
Note: 372 kb of flash memory are occupied by 'ruby'.
Now modify the standard 'login script' as follows:
root@OpenWrt:~/etc/ax25#vi /bin/login
#!/bin/sh
if [ ! -z "$AXCALL" ]; then
exec /bin/login.rb $*
fi
grep '^root:[^!]' /etc/passwd >&- 2>&-
[ "$?" = "0" -a -z "$FAILSAFE" ] &&
{
echo "Login failed."
exit 0
}
exec /bin/ash --login
root@OpenWrt:~/etc/ax25#
The main change here is to use the ruby script '/bin/login.rb' which still needs to be created:
root@OpenWrt:~/etc/ax25#vi /bin/login.rb
#!/usr/bin/ruby
Process::Sys.setresgid(300,300,300)
Process::Sys.setreuid(300,300)
exec "/bin/ash --login"
Make '/bin/login.rb' executable:
root@OpenWrt:~/etc/ax25# chmod 755 /bin/login.rb
Now install XNET:
root@OpenWrt:/etc/ax25# ipkg install xnet
Installing xnet (1.39-20071005-0.2) to root...
Downloading http://db0fhn-i.ampr.org/openwrt/kamikaze/packages/mipsel/xnet_1.39-20071005-0.2_mipsel.ipk
Installing screen (4.0.3-1) to root...
Downloading http://downloads.openwrt.org/kamikaze/packages/mipsel/./screen_4.0.3-1_mipsel.ipk
Configuring screen
Configuring xnet
Done.
root@OpenWrt:/etc/ax25# reboot
After reboot check for running XNET:
root@OpenWrt:/# ps
PID Uid VmSize Stat Command
(...)
481 root 764 S SCREEN -DmS xnet -c /usr/local/xnet/conf/screen.xnet
482 root 2716 S /tmp/xnet/wrtxnet
483 root 412 R ps
root@OpenWrt:/#
Now stop running XNET and modify its 'AUTOEXEC.NET' so XNET can talk to the kernel:
root@OpenWrt:/# /etc/init.d/xnet stop
root@OpenWrt:/# vi /usr/local/xnet/conf/AUTOEXEC.NET
att sdev1 kiss 7 1 115200 /dev/pty/m0
my call d1mmy
root@OpenWrt:/#
Note: in this example, the kiss device is attached to XNET port 7 and linked to the master-pry-device '/dev/pty/m0'. XNET's AX25 call is 'd1mmy'. Only the very basic configuation of XNET is shown here, there are many more options that are of no importance here.
Now both restart and check for running XNET:
root@OpenWrt:/# /etc/init.d/xnet start
root@OpenWrt:/# ps | grep "wrtxnet"|head -c45
482 root 2716 S /tmp/xnet/wrtxnet
root@OpenWrt:/#
Next prepare the kernel for 'KISS':
root@OpenWrt:/# kissattach
usage: kissattach [-b] [-l] [-m mtu] [-v] tty port [inetaddr]
root@OpenWrt:/# kissattach /dev/pty/s0 ax0 x.x.x.x
port ax0 bound to device ax0
root@OpenWrt:/#
Note: 'x.x.x.x' needs to match your local IP configuration. If you are unsure, use '192.168.255.200'
Finally, the AX25 configuration needs to be finalized:
root@OpenWrt:/#/sbin/ifconfig ax0 mtu 1500
root@OpenWrt:/#/bin/echo 1 >/proc/sys/net/ax25/ax0/ip_default_mode
root@OpenWrt:/#/bin/echo 7 >/proc/sys/net/ax25/ax0/standard_window_size
root@OpenWrt:/#/bin/echo 500 >/proc/sys/net/ax25/ax0/t1_timeout
root@OpenWrt:/#/bin/echo 90 >/proc/sys/net/ax25/ax0/t2_timeout
root@OpenWrt:/#/bin/echo 30000 >/proc/sys/net/ax25/ax0/t3_timeout
root@OpenWrt:/#/bin/echo 30 >/proc/sys/net/ax25/ax0/maximum_retry_count
root@OpenWrt:/#
Now check for running KISS communication from LINUX side:
root@OpenWrt:/# call -r ax0 d1mmy
GW4PTS AX.25 Connect v1.11
*** Connected to d1mmy
Rawmode
(X)NET/LINUX/MIPSel V1.39
=>q
73!
*** Cleared
root@OpenWrt:/#
Is AX25d running?
root@OpenWrt:/# ax25d -l
root@OpenWrt:/# ps |grep "ax25d"|head -c36
432 root 344 S ax25d -l
root@OpenWrt:/#
Now check for running KISS communication from XNET side (propper login procedure (axspawn, ruby, login) is being check as well):
root@OpenWrt:~/d0m...# call -r ax0 d1mmy
GW4PTS AX.25 Connect v1.11
*** Connected to d1mmy
Rawmode
(X)NET/LINUX/MIPSel V1.39
=>c d0mmy
link setup (7)...
*** connected to D0MMY
Notice: No .bcpasswd file found in your homedirectory (for more secure
password authentication than plaintext). Generating example file,
with unique passwords (which may be changed).
Please edit ~/.bcpasswd, and enable your prefered authentication type;
MD5 is recommended.
BusyBox v1.4.2 (2008-02-28 05:09:35 CET) Built-in shell (sh)
Enter 'help' for a list of built-in commands.
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
KAMIKAZE (7.09) -----------------------------------
* 10 oz Vodka Shake well with ice and strain
* 10 oz Triple sec mixture into 10 shot glasses.
* 10 oz lime juice Salute!
---------------------------------------------------
d0mmy@OpenWrt:/tmp/d0m.../d0mmy$
Note: the above message "No .bcpasswd file found (...)" appears the first time a user is logging into the system. This is normal. It won't show up the 2nd time. Axspawn creates the user during the initial login in '/etc/passwd' plus makes his/her home-directory in which two files are generated: '.bcpasswd' and '.profile':
d0mmy@OpenWrt:/tmp/d0m.../d0mmy$ ls -al
drwxr-x--x 2 d0mmy guest 80 Jan 3 08:43 .
drwxr-xr-x 3 root root 60 Jan 3 08:43 ..
-rw------- 1 d0mmy guest 421 Jan 3 08:43 .bcpasswd
-rw------- 1 d0mmy guest 38 Jan 3 08:43 .profile
d0mmy@OpenWrt:/tmp/d0m.../d0mmy$
AX25 Kernel link is up and running.
===== SLIP Configuration =====
Configuring SLIP starting with XNET. Add "start routed" (this is the ax25 router) && "start tcpd" (this is the tcp router) to AUTOEXEC.NET. When XNET restarts, it automatically executes IP.NET.
root@OpenWrt:/# /etc/init.d/xnet stop
root@OpenWrt:/# vi /usr/local/xnet/conf/AUTOEXEC.NET
my call d1mmy
att sdev1 kiss 7 1 115200 /dev/pty/m0
start routed
start tcpd
root@OpenWrt:/#
Then we add XNET's IP address (here: 44.0.0.3, please replace with your local IP addresses), attach slip device to pty m2 (this creates s2 to be used on the Linux side later), we tell XNET the Linux Kernel's IP address (here: 44.0.0.2) and then route traffic for 44.0.0.2 over the slip device.
root@OpenWrt:/# vi /usr/local/xnet/conf/IP.NET
myip 44.0.0.3
att sdeva slip 115200 /dev/pty/m2
arp add 44.0.0.2 slip sdeva
ipr add 44.0.0.2 slip
root@OpenWrt:/#
This IP.NET, of course, only shows the principal entries to get TCPIP and SLIP running. There are multiple additional TCP/IP options/functions that can be configured by the sysop. It is recommended to link your packet radio node to IGATE in order to benefit from improved world-wide IP-over-AX25 functionality. For more information click here [[http://db0fhn-i.ampr.org/doku.php?id=projects:igate:ipoverigate]] (in German language).
Next add a symlink for IP.NET to /tmp/xnet. Ideally, this is done through the init.d xnet script (/etc/init.d/xnet). Insert the symlink (ln -s ...) after the "mkdir /tmp/xnet" command.
root@OpenWrt:/# vi /etc/init.d/xnet
start() {
(...)
mkdir /tmp/xnet
(...)
ln -s /usr/local/xnet/conf/IP.NET /tmp/xnet/IP.NET
(...)
}
Testing for presence of SDEVA SLIP device:
root@OpenWrt:/# /etc/init.d/xnet start
root@OpenWrt:/#
root@OpenWrt:/# call -r ax0 d1mmy
GW4PTS AX.25 Connect v1.11
*** Connected to d1mmy
Rawmode
(X)NET/LINUX/MIPSel V1.39
=>sys
=>att
SDEV1 : KISS Driver: 115200 Baud
SDEVA : SLIP Driver: 115200 Baud
=>q
73!
*** Cleared
root@OpenWrt:/#
Now the Kernel needs to be setup so it can talk to XNET via /dev/pty/s2. Here's how it is done:
root@OpenWrt:/#
root@OpenWrt:/# slattach -p slip -s 115200 /dev/pty/s2 -d &
slattach: tty_open: trying to open /dev/pty/s2
slattach: tty_open: /dev/pty/s2 (fd=3) slattach: tty_set_speed: 115200
slattach: tty_set_databits: 8
slattach: tty_set_stopbits: 1
slattach: tty_set_parity: N
slip started on /dev/pty/s2 interface sl0
Assignment of IP address 44.0.0.2 to slip device 'sl0' with mtu of 1500 bytes:
root@OpenWrt:/# ifconfig sl0 44.0.0.2 mtu 1500
Route traffic for XNET ('44.0.0.3') via slip device:
root@OpenWrt:/# route add 44.0.0.3 sl0
And finally route all 44-traffic via XNET ('44.0.0.3') with netmask 255.0.0.0:
root@OpenWrt:/# route add -net 44.0.0.0 netmask 255.0.0.0 gw 44.0.0.3
Testing Kernellink. We ping XNET from OPENWRT:
root@OpenWrt:~# ping 44.0.0.3
PING 44.0.0.3 (44.0.0.3): 56 data bytes
64 bytes from 44.0.0.3: icmp_seq=0 ttl=63 time=6.3 ms
--- 44.0.0.3 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 6.3/6.3/6.3 ms
root@OpenWrt:~#
Testing. We ping Openwrt from XNET:
root@OpenWrt:~# call -r ax0 d1mmy
GW4PTS AX.25 Connect v1.11
*** Connected to d1mmy
Rawmode
(X)NET/LINUX/MIPSel V1.39
=>ping 44.0.0.2
ping to 44.0.0.2 ...
=>
*** route: 44.0.0.2 echo reply 12 ms
=>q
*** Cleared
root@OpenWrt:~#
QUOD ERAT DEMONSTRANDUM.
===== Init-Skript =====
Last step: create bootable configuration:
root@OpenWrt:~# vi /etc/init.d/ax25slip
#!/bin/sh /etc/rc.common
START=81
start(){
sleep 1s
insmod slip.o
sleep 1s
slattach -p slip -s 115200 /dev/pty/s2 -d &
ifconfig sl0 44.0.0.2 mtu 1500
route add 44.0.0.3 sl0
route add -net 44.0.0.0 netmask 255.0.0.0 gw 44.0.0.3
kissattach /dev/pty/s0 ax0 192.168.255.2
ifconfig ax0 mtu 1500
echo 1 >/proc/sys/net/ax25/ax0/ip_default_mode
echo 7 >/proc/sys/net/ax25/ax0/standard_window_size
echo 500 >/proc/sys/net/ax25/ax0/t1_timeout
echo 90 >/proc/sys/net/ax25/ax0/t2_timeout
echo 30000 >/proc/sys/net/ax25/ax0/t3_timeout
echo 30 >/proc/sys/net/ax25/ax0/maximum_retry_count
ax25d
}
stop (){
killall ax25d
killall kissattach
killall slattach
}
root@OpenWrt:~#
root@OpenWrt:~# ln -s /etc/init.d/ax25slip /etc/rc.d/S81ax25slip
root@OpenWrt:~#
root@OpenWrt:~# reboot
After reboot from Universe:
root@OpenWrt:~# ps
PID Uid VmSize Stat Command
1 root 400 S init
2 root SW [keventd]
3 root RWN [ksoftirqd_CPU0]
4 root SW [kswapd]
5 root SW [bdflush]
6 root SW [kupdated]
8 root SW [mtdblockd]
54 root SWN [jffs2_gcd_mtd4]
67 root 412 S logger -s -p 6 -t
69 root 404 S init
86 root 400 S syslogd -C16
89 root 376 S klogd
207 root 448 S udhcpc -t 0 -i eth0.1 -b -p /var/run/eth0.1.pid -R
373 root 376 S crond -c /etc/crontabs
377 root 416 S /usr/sbin/dropbear -p 22
385 root 392 S httpd -p 80 -h /www -r OpenWrt
396 root 764 S SCREEN -DmS xnet -c /usr/local/xnet/conf/screen.xnet
400 root 2848 S /tmp/xnet/wrtxnet
412 root 244 S slattach -p slip -s 115200 /dev/pty/s2 -d
422 root 312 S kissattach /dev/pty/s0 ax0 192.168.255.2
424 root 316 S ax25d
443 root 608 S /usr/sbin/dropbear -p 22
444 root 580 S -ash
451 root 412 R ps
===== Update =====
These Files will not be changed on an update:
ax25-essentials:
/etc/ax25/ax25ipd.conf
/etc/ax25/ax25rtd.conf
/etc/ax25/ax25.profile
/etc/ax25/rxecho.conf
/etc/ax25/ax25d.conf
/etc/ax25/axspawn.conf
/etc/ax25/axports
ax25-helpers:
/etc/ax25/ax25mond.conf
/etc/ax25/rip98d.conf
/etc/ax25/ttylinkd.conf