Протокол AX.25 в Linux Slackware

UA6HJQ
написано для aprs-kawkaz в марте 2012

Для полноценной работы AX.25 в Linux, нужно чтобы ядро было собрано с поддержкой протокола AX.25 (в slackware стандартное ядро bare.i уже имеет поддержку) и нужно установить пакеты: ax25_apps, ax25_tools и libax25, они позволяют создать очень гибкую пакетныю систему и работают с большим кол-вом различного 'железа', от звуковых и DSP-карт, до многопортовых TNC. На схеме ниже вы видите одну из возможных конфигураций, которая позволяет работать APRS, Packet Radio, AMPR, FlexNet, NETROM, INP3, WEBHAM. У меня она сделана на основе старого LapTop CPU 233мГц, RAM 64Мб, HDD 2GGb и Linux Slackware 11. Двухпортовые контроллеры подключены к портам COM1 и COM2.

my rig for APRS and Packet Radio

Пакеты ax25_apps, ax25_tools и libax25 можно взять из комплекта Salckware или скомпилировать самому более новые версии взяв их на сайте linux-ax25.org. Сначала рассмотрим самую простейшую конфигурацию, с одним портом и TNC2. После установки утилит потребуется создать запускающий скрипт и отредактировать некоторые конфигурационные файлы.

# /etc/ax25/axports
#
#name   callsign     speed   paclen  window    description
p1      UA6HJQ-1     9600    255     3	       TNC2 (6pack)
Порт имеет имя p1 (можно придумать другое), к нему подключен TNC2 с прошивкой 6pack. Скорость между TNC2 и СОМ-портом 9600бод, скорость в радиоканале (у моего TNC2W) 1200бод. Теперь создаём файл rc.ax25, который будет запускать нашу AX.25 конфигурацию с нужными параметрами и дополнительные программы.
#!/bin/sh
# /etc/rc.d/rc.ax25
#
# load modules
insmod ax25
insmod 6pack
#
# port 1: tnc2 on 6pack mode via COM1
kissattach -6 /dev/ttyS0 p1 44.178.92.100
sleep 1
#
echo "ax.25 parameters for tnc2"
# -p port, -r persystanse, -l txtail, -s slottime, -t txdelay
kissparms -p p1 -r 60 -s 100 -t 330
sleep 1
#
echo "listen (monitor) on tty10"
listen -ari8ct > /dev/tty10 &
sleep 1
#
echo "start mheardd"
mheardd -n 20
sleep 1
#
echo "start AX.25 beacons"
beacon -d WSEM -s p1 "AX.25 utils is runing..."
beacon -c UA6HJQ -d CQ -t 20 p1 "My home packet radio system on Linux Slackware" &
#
Что мы получили? К порту COM1 подключен TNC2 с прошивкой 6PACK (на мой взгляд, удачная прошивка) к TNC2 подключена УКВ радиостанция Yaesu FT-60R и антенна.

В файле запуска есть два маяка, первый передаётся один раз, только в момент запуска AX.25 системы. Второй маяк, каждые 20 минут, передаёт в эфир указанный текст. В 10-ом терминале (Alt+F10), мы можем наблюдать все переданные маяки и принимаемые из эфира пакеты от других станций. Смотрите вид экрана фото1.

Запуск mheardd нужен для того чтобы можно было смотреть статистику по всем работающим AX.25 портам, командой mheard. Вот как это выглядит на экране: фото2.

Командой kissparms мы установили несколько важных (именно для передачи пакетов) параметров. Теперь, чтобы соединиться с другой пакетной станцией (например с rz6hxa-8), нужно набрать в консоли команду call p1 rz6hxa-8. Цифра 1 это имя порта, оно может быть и другим. Сеанс связи выглядит так: фото3.

Итак, у нас есть базовая конфигурация, которая будет основой для создания более сложных систем на протоколе AX.25. Для наглядности нарисуем блок-схему которая выглядит так:

   \|/
    |
 .------.   .------.   .---------------------.
 | FT60 |---| TNC2 |---| COM1---Linux(AX.25) |    <--- beacon, listen, call, mheard
 '------'   '------'   '---------------------'

Уже сейчас, без использования дополнительных программ, мы можем передавать маяки, мониторить частоту, соединяться с другими пакетными станциями, собирать статистику. Это базовые функции AX.25. Теперь рассмотрим, на конкретных примерах, варианты подключения различных программ к имеющейся конфигурации:


APRX
Чтобы через созданный порт могла работать программа APRS шлюза APRX, нужно в файле конфигурации /etc/aprx.conf указать позывной порта и запустить APRS-маяк, а обычный маяк отключить.

/etc/aprx.conf
<interface>
  ax25-device UA6HJQ-1  <--- позывной указанный в /etc/ax25/axports
  tx-ok	true
</interface>

<beacon>
  beaconmode both
  cycle-size 30m
  beacon symbol "I&" lat "4502.19N" lon "04158.35E" comment "Rx-Tx-iGate from Stavropol"
</beacon>
В строке ax25-device нужно указать позывной присвоенный порту в файле /etc/ax25/axports в нашем случае это UA6HJQ-10. Так программа APRX поймёт что требуется работать через этот порт. Для автоматического запуска APRX из скрипта, конец файла /etc/rc.d/rc.ax25 нужно дописать:
/etc/rc.d/rc.ax25
echo "aprx runing..."
cd /sbin
./aprx
Программа APRX, по умолчанию, запускается как демон и не занимает терминал, да там и смотреть не на что. Можно отметить, что APRX может работать напрямую с COM-портом и без AX.25 в Linux. В этом случае поддерживаются любые TNC имеющие KISS режим или TNC2 совместимые модели с прошивкой 6PACK или SMACK.


XNET
Чтобы через созданный порт мог работать роутер XNET, нужно дописать указанные строки в указанные файлы. Работа XNET напрямую с AX.25 не предусмотрена, поэтому, сначала создаём виртуальный порт (ptyp0-ttyp0) между AX.25 и XNET, а затем запускаем сам XNET в 7-ом терминале. От туда с ним можно работать.

/etc/rc.d/rc.ax25
net2kiss -i sp0 /dev/ptyp0 &
sleep 1

echo "(X)NET on tty7"
cd /usr/xnet
./linuxsnet < /dev/tty7 > /dev/tty7 &


/usr/xnet/AUTOEXEC.NET
attach sdev0 kiss 0 1 9600 /dev/ttyp0
po 0 name 144625khz

Нужно отметить, что XNET можеть работать напрямую с COM-портом и без поддержки AX.25 со стороны Linux, но в этом случае выбор 'железа' ограничен TNC2 совместимыми моделями с прошивкой TRKISS. Кстати, работает он с ними очень хорошо!


OpenBCM
Делать соединение между портом и BBS нет смысла (хотя и возможно), гораздо практичнее соединить их через XNET, так BBS получит возможность вести форвардинг как через радиоканал, так и через FlexNet, NETROM, INP3, AMPR сети, а пользователи этих сетей, получать доступ к нему. Поэтому создаём ещё один виртуальный порт в XNET для BBS. Работа роутера XNET в связке с BBS OpenBCM, это оптимальный вариант, они гармонично дополняют друг друга.

/usr/xnet/AUTOEXEC.NET
attach sdev1 kiss 1 1 38400 /dev/ptyp2	# link to baybox
po 1 name local mailbox
po 1 baud 38400
po 1 duplex 255
po 1 per 200
po 1 txd 0
route local add 1 ua6hjq-8 nd BCM


/usr/bcm/init.l2
dcall    ua6hjq-2    ; xnet call
monitor  4
mselect  0
mcalls   -0
;
assign   kiss
mode     38400
device   /dev/ttyp2


/etc/rc.d/rc.ax25
echo "BayCom-Mailbox on tty8"
cd /usr/bcm
./bcm144k < /dev/tty8 > /dev/tty8 &
OpenBCM должен запускаться после (его строки стоят ниже) XNET. В 8-ой консоли вы будете видеть что он делает, в режиме реального времени. Это удобно и нужно для отладки его работы. ББС должен работать под постоянным контролем SysOp, как и любая почтовая система он требует обслуживания.


NODE и AWZNODE
Эти программы выполняют простые узловые функции, на мой взгляд они устарели, роутер XNET может их полностью заменить. Поэтому настройку и конфигурацию NODE и AWZNODE здесь я рассматривать не буду.

Полезные ссылки:
hamcmw.qrz.ru/pr/ - большой раздел о пакетной связи и aprs
APRX , OpenBCM , XNET , AWZnode

Игорь UA6HJQ