AX.25 in TCP/IP za Linux
Navodila za namestitev in nastavitev

Andrej Souvent, S51BW
Stržovo 25, Mežica

17. junij 2001

Kazalo

Uvod

Navodila opisujejo namestitev in nastavitev potrebne programske opreme za uporabo AX.25 protokola z Linux operacijskim sistemom. Opis je splošen in velja za vse distribucije. Vsa programska oprema je na voljo v izvorni kodi. Kako se jo prevede, namesti in nastavi, pa je opisano v nadaljevanju.

Omejili se bomo na opis nastavitev dveh vmesnikov, ki se pri nas najpogosteje uporabljata. To sta S5SCC DMA kartica in TNC v KISS načinu.

Predpostavlja se, da ima bralec osnovna znanja o TCP/IP, AX.25 in Linux operacijskem sistemu, zato se prispevek ne spušča v razlago osnov le-teh.

Na voljo je tudi PDF različica tega dokumenta: ax25.pdf.

Prevajanje in namestitev jedra

V jedrih, ki običajno pridejo z distribucijo, ni vključena podpora za AX.25 - ni na voljo ustreznih modulov. Če pa že so, se nam lahko zgodi - predvsem pri modulu za S5SCC kartico (dmascc), da le-ta ni pravi. V starejših verzijah tega modula ta kartica ni podprta. V tem primeru nam ne preostane drugega, kot da zamenjamo dmascc.c datoteko s pravo (podrobneje v nadaljevanju) in izvorno kodo jedra prevedemo na novo. V novih jedrih serije 2.4 je modul že pravi (vsaj od različice 2.4.4 naprej). Prevajanje jedra zahteva nekaj izkušenj, saj je potrebno izbrati kar nekaj nastavitev. V tem poglavju se bomo omejili le na sekcijo Hamradio, kar pa ne pomeni, da smemo ostale preskočiti.

Priprava

Na Internetu (npr. ftp://ftp.kernel.org) dobimo izvorno kodo zadnjega jedra iz serije 2.2, trenutno je to linux-2.2.19.tar.gz.

Razpakiramo ga v /usr/local/src direktoriju z:

tar xzvf linux-2.2.19.tar.gz

Gremo na vrh drevesa izvorne kode:

cd linux

Konfiguriranje jedra za AX.25

Najprej konfiguriramo jedro z make menuconfig ukazom (če uporabljamo X windowse, lahko uporabimo tudi make xconfig):

make menuconfig
Za uporabo AX.25 moramo vključiti podporo za Hamradio, ter označiti kot module ax25 in dmascc (za S5SCC kartico) oziroma mkiss (za TNC). Če uporabljamo kakšen drug vmesnik (npr. Baycom), izberemo ustrezen modul.

Pred prevajanjem jedra je treba zamenjati dmascc.c, ki se nahaja v drivers/net/hamradio direktoriju v drevesu Linux izvorne kode. Ustrezen dmascc.c dobimo v paketu dmascc-1.27.tar.gz.

Pravilen dmascc driver, ki podpira tudi S5SCC kartico, ima to označeno v komentarju na začetku datoteke:

 * $Id: dmascc.c,v 1.27 2000/06/01 14:46:23 oe1kib Exp $
 *
 * Driver for high-speed SCC boards (those with DMA support)
 * Copyright (C) 1997-2000 Klaus Kudielka
 *
 * S5SCC/DMA support by Janko Koleznik S52HI

Po končanem konfiguriranju jedra, mora biti v .config datoteki vključena podpora za to, kar rabimo.

V mojem primeru je za AX.25 vključeno: (del .config datoteke)

# Amateur Radio support
#
CONFIG_HAMRADIO=y
CONFIG_AX25=m
# CONFIG_AX25_DAMA_SLAVE is not set
# CONFIG_NETROM is not set
# CONFIG_ROSE is not set
CONFIG_MKISS=m
# CONFIG_6PACK is not set
# CONFIG_BPQETHER is not set
CONFIG_DMASCC=m
# CONFIG_SCC is not set
# CONFIG_BAYCOM_SER_FDX is not set
# CONFIG_BAYCOM_SER_HDX is not set
# CONFIG_BAYCOM_PAR is not set
# CONFIG_BAYCOM_EPP is not set
# CONFIG_SOUNDMODEM is not set
# CONFIG_YAM is not set
# CONFIG_HFMODEM is not set

Prevajanje jedra in modulov, ter namestitev le-teh

Jedro in module operacijskega sistema prevedemo s sledečimi ukazi:

make dep
make bzImage
make modules

make modules_install

Slednji ukaz namesti module na pravo mesto.

Namestitev novega jedra

Prevedeno jedro se nahaja v arch/i386/boot/bzImage.

Ponavadi ga skopiramo v /boot:

cp arch/i386/boot/bzImage /boot/vmlinuz-2.2.19

Skopiramo še System.map:

cp System.map /boot/System.map-2.2.19

LILOtu (Linux loader) povemo, da naj uporabi novo jedro. Ustrezno popravimo /etc/lilo.conf.

Primer moje lilo.conf:

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
linear
default=linux

image=/boot/vmlinuz-2.2.19
        label=linux
        read-only
        root=/dev/hda5

image=/boot/vmlinuz-2.2.16-3
        label=linux-old
        read-only
        root=/dev/hda5

other=/dev/hda1
        label=dos

(Če smo naredili karkoli narobe, lahko pri zagonu z labelo linux-old izberemo še staro jedro.)

Po spremembi lilo.conf je treba pognati ukaz lilo.

Naredimo reboot sistema.

Prevajanje in namestitev AX.25 programov

Potrebujemo sledeče pakete (dobimo jih lahko tudi na http://lea.hamradio.si/~andrej/linux-ax25/):

Če nimamo posebnih zahtev, prve tri pakete razpakiramo, prevedemo in namestimo na sledeč način (navodila so tudi v datoteki INSTALL, ki se nahaja na vrhu drevesa razpakiranega paketa):

tar xzvf ime_paketa.tar.gz
cd ime_paketa
./configure
make
make install

Namestimo lahko še primere konfiguracijskih datotek z

make installconf

Paket dmascc-1.27.tar.gz razpakiramo, prevedemo in namestimo s sledečimi ukazi

tar xzvf dmascc-1.27.tar.gz
cd dmascc_cfg
make  
install -m 755 dmascc_cfg /usr/local/sbin

Pomembno je, da pred tem namestimo paket ax25-tools-0.0.5, ker le-ta vsebuje napačen dmascc_cfg, ki ga moramo nadomestiti s tem iz paketa dmascc-1.27.

Po razpakiranju slednjega paketa dobimo tudi direktorij z imenom dmascc v katerem se nahaja izvorna koda gonilnika (dmascc.c), ki podpira tudi S5SCC kartico. Povezovalniku (linkerju) moramo naznaniti, da imamo sedaj knjižnice tudi v /usr/local/lib, kar storimo tako, da v /etc/ld.so.conf dodamo vrstico:

/usr/local/lib

in nato poženemo ldconfig. Programi se privzeto namestijo v /usr/local/bin in /usr/local/sbin direktorije, konfiguracijske datoteke pa v /usr/local/etc/ax25.

Kadarkoli nameščamo programsko opremo s prevajanjem izvorne kode iz tar.gz paketov na sistem, ki ima svoj sistem paketov (npr. rpm za RedHat, SuSe,..., deb za Debian, ipd.), je dobra praksa, da datoteke namestimo v direktorije pod /usr/local.

Mesta namestitev programov in datotek lahko spremenimo tako, da configure poženemo s parametri:

./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var

POZOR! Če namestimo te programe iz binarnh paketov nekaterih distribucij (npr. rpm za RedHat, Suse, ipd, deb za Debian), se programi privzeto nahajajo v /usr/bin in /usr/sbin, konfiguracijske datoteke pa v /etc/ax25 .

AX.25 nastavitve

V /usr/local/etc/ax25 (oziroma /etc/ax25) najprej nastavimo datoteko axports:

# /usr/local/etc/ax25/axports
#
# The format of this file is:
#
# name callsign speed paclen window description
#
ax0     S51BW-5         115200  256     7       KISS TNC
dmascc0 S51BW-1		     0  256	7 	DMASCC kanal 0

Nato si naredimo ukazno datoteko, ki opravi še preostale nastavitve.

Primer za 1M2 kanal S5SCC kartice

#!/bin/sh
#
#####################################
# Primer za 1M2 kanal S5SCC kartice #
#####################################

# Aktiviramo modul za dmascc kartico, ki je na naslovu 0x320

modprobe dmascc io=0x320

# Inicializacija dmascc0 in AX.25 L2

dmascc_cfg dmascc0 --frequency 0.0 --nrzi 1 --clocks 0x08 \
--txdelay 1.6 --txpause 0.8 --txtimeout 100.0 --txtail 0.5 \
--rtsoff 0 --dcdon 0 --dcdoff 0 --slottime 1.6 --persist 64 \ 
--waittime 3.0 --dma 3

/sbin/ifconfig dmascc0 inet 44.150.1.4 hw ax25 S51BW-1 mtu 1500 arp up


# FRACK T1 v 10 ms 
echo -n 60 > /proc/sys/net/ax25/dmascc0/t1_timeout
# RESPTIME v 10 ms
echo -n 2 > /proc/sys/net/ax25/dmascc0/t2_timeout
# T3, check 
echo -n 30000 > /proc/sys/net/ax25/dmascc0/t3_timeout
# Idle 
echo -n 18000 > /proc/sys/net/ax25/dmascc0/idle_timeout
# Backoff exp
echo -n 1 > /proc/sys/net/ax25/dmascc0/backoff_type
# Arg N 
echo -n 30 > /proc/sys/net/ax25/dmascc0/maximum_retry_count
# Arg win
echo -n 7 > /proc/sys/net/ax25/dmascc0/standard_window_size

# Primer nastavitve arp in fiksne poti do S50YFE-0
/sbin/arp -H ax25 -i dmascc0 -s 44.150.8.1 S50YFE-0
/usr/local/sbin/axparms -route add dmascc0 S50YFE-0 S55YLJ-0 -ipmode V

Primer za KISS TNC

###########################################
# Še primer za KISS na COM1 (/dev/ttyS0)  #
###########################################

# Aktivirajmo modul za KISS

modprobe mkiss

# Inicializacija in AX.25 L2
/usr/local/sbin/kissattach -l -m 1500 /dev/ttyS0 ax0 44.150.4.4
/sbin/ifconfig ax0 44.150.4.4 netmask 255.0.0.0 broadcast 44.255.255.255

# FRACK T1 v 10 ms 
echo -n 200 > /proc/sys/net/ax25/ax0/t1_timeout
# RESPTIME v 10 ms
echo -n 20 > /proc/sys/net/ax25/ax0/t2_timeout
# T3, check 
echo -n 30000 > /proc/sys/net/ax25/ax0/t3_timeout
# Idle 
echo -n 18000 > /proc/sys/net/ax25/ax0/idle_timeout
# Backoff exp
echo -n 1 > /proc/sys/net/ax25/ax0/backoff_type
# Arg N 
echo -n 30 > /proc/sys/net/ax25/ax0/maximum_retry_count
# Arg win
echo -n 7 > /proc/sys/net/ax25/ax0/standard_window_size


# Primer nastavitve arp in fiksne poti do S50YFE-0
/sbin/arp -H ax25 -i ax0 -s 44.150.8.1 S50YFE-0
/usr/local/sbin/axparms -route add ax0 S50YFE-0 S55YLJ-0 -ipmode V

Preizkus

Najprej z ukazom listen poslušamo, kaj se na frekvenc dogaja:

listen

Tukaj je primer izpisa dogajanja na frekvenci:

dmascc0: fm S56JLP-6 to S50LEA via S55YLJ* ctl REJ7v 
dmascc0: fm S56JLP-6 to S50LEA via S55YLJ* ctl I40^ pid=CC(IP) len 40 
IP: len 40 44.150.1.81->210.208.147.33 ihl 20 ttl 64 DF prot TCP
TCP: 2610->ftp-data Seq xbf135915 Ack x647e708f ACK Wnd 32120
dmascc0: fm S56JLP-6 to S50LEA via S55YLJ* ctl RR5- 
dmascc0: fm S56JLP-6 to S50LEA via S55YLJ* ctl RR5- 
dmascc0: fm S50LEA to S56JLP-6 via S55YLJ ctl I00^ pid=8(segment) len 255 remain 3

Nato naredimo AX.25 povezavo (konekt) na naše vozlišče, npr.:

call dmascc0 LJU -r

Primer:

lea:~$ call dmascc0 LJU -r
GW4PTS AX.25 Connect v1.11
*** Connected to LJU
Rawmode
LJU:S55YLJ>
u 3
*** 23 uporabnikov LJU:S55YLJ *** 969 prostih blokov spomina ***
3:7 S51BW LJU 4/12 <1!0> Upravlja LJU:S55YLJ
LJU:S55YLJ>
q
*** 73 de SuperVozelj LJU:S55YLJ ***
*** Cleared
lea:~$

Če je vse v redu, preizkusimo še TCP/IP:

ping 44.150.8.1

Primer:

lea:~$ ping s56jlp.ampr.org
PING s56jlp.ampr.org (44.150.1.81): 56 data bytes
64 bytes from 44.150.1.81: icmp_seq=0 ttl=64 time=19.7 ms
64 bytes from 44.150.1.81: icmp_seq=1 ttl=64 time=16.1 ms
64 bytes from 44.150.1.81: icmp_seq=2 ttl=64 time=14.2 ms
64 bytes from 44.150.1.81: icmp_seq=3 ttl=64 time=17.8 ms

--- s56jlp.ampr.org ping statistics ---
4 packets transmitted, 4 packets received,0% packet loss
round-trip min/avg/max = 14.2/16.9/19.7 ms
lea:~$