ここではLinuxのサウンドモデム機能を使い,隔地間をIP接続する方法を紹介する。 実験にはアマチュア無線の免許と機器が必要である。
使用しているLinuxは Debian/GNU Linux 2.1(slink)r4。 kernelは 2.2.15。
はじめに
カーネルのコンパイル
パッケージの導入とモジュールの設定
PTTのコントロール
無線機との接続
IP Linkの設定
感想と謝辞
追実験
パケット通信にはTNCが必要である。 TNCは有線モデムの無線版と言ったところで,中継機能やメールボックス機能等も併せ持つ。 要はTNCとは半二重通信の無線機を送信状態にしてデータをピーギャーと送り,受信状態にして受信したピーギャーをデータに変換する機器である。
サウンドモデムはこのTNCを使用しない。 ソフトウェアで送信するピーギャーとなるべき音をサウンドカードで作成し,サウンドカードに入力されたピーギャーの受信音をソフトウェアで解析してデータに変換する。 TNCを用意しなくてすむお得な機能だ。
Linuxにはもう一つの機能としてパケット通信を利用してIP Linkを張ることができる。 つまり無線LANを構築する機能だ。 この機能はサウンドモデム機能とは独立しているのでKISSモードが使用できるTNCを使って構築することも可能だ。
カーネルのコンパイルの注意点
以下にSoundblaster用のカーネルの設定の抜粋を置く。 適時環境により変更願いたい。
[*] Amateur Radio support --- Packet Radio protocols <M> Amateur Radio AX.25 Level 2 protocol --- AX.25 network device drivers <M> Serial port KISS driver <M> Soundcard modem driver [*] soundmodem support for Soundblaster and compatible cards [ ] soundmodem support for WSS and Crystal cards [*] soundmodem support for 1200 baud AFSK modulation [*] soundmodem support for 2400 baud AFSK modulation (7.3728MHz ... [*] soundmodem support for 2400 baud AFSK modulation (8MHz ... [*] soundmodem support for 2666 baud AFSK modulation [*] soundmodem support for 4800 baud HAPN-1 modulation [*] soundmodem support for 4800 baud PSK modulation [*] soundmodem support for 9600 baud FSK G3RUH modulation <M> Sound card support <M> OSS sound modules <M> 100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16 ... < > Microsoft Sound System support
必要なパッケージは以下の2つ。 aumixはサウンドカードの初期化に使用する。 dselect等でインストール願いたい。
ax25-utils 2.1.42a-6 aumix 1.13-2
次にモジュールの設定を以下のように/etc/conf.modulesに行う。 FM synthesizerは soundmodemには関係ないが・・・。
使用するサンドカードとDMA,IO,IRQは適時環境により変更願いたい。
alias char-major-14 sb post-install sb /sbin/modprobe "-k" "adlib_card" alias sm0 soundmodem options sb io=0x220 irq=5 dma=1 dma16=5 mpu_io=0x330 options adlib_card io=0x388 # FM synthesizer
パケット通信では無線機の送受信をPC側でコントロールする必要がある。 サウンドモデムにはシリアルポート,またはパラレルポートを使用してこれをコントロールする機能がある。
Webmasterはパラレルポートを使用してコントロールを行っている。 トランジスタは一般的な2SC1815を使用した。
回路図は PTT signalling using Soundcard/DSP drivers が詳しい。 この図はここよりコピーした物。
無線機側はデータ端子がある場合は良いが,無い場合はMIC,SP,PTTに接続する。 高速通信用に無線機を改造された方はそちらへ。
Linuxのサウンドカード側であるが,Webmasterは無線機のSPをMICに,無線機のMICをLINE OUTに接続した。 無線機のSPをLINE INに,無線機のMICをSPに接続する方法も,これらを組み合わせた方法も考えられる。 LINE INとLINE OUTを使う方法がノイズの多いPC内のサウンドカードのアンプをより使用しないので良いような気はするが,Webmasterの環境では上記組み合わせがもっとも良かった。
いずれの場合も,無線機のSP出力設定とサウンドカードの各種パラメータの設定を最適化する必要があり,各人でカット&トライ願いたい。 DATA端子のない無改造無線機で2666bpsを通すにはかなりシビアな設定が必要だ。 フィルタの設計により無線機によっては通らないかも。
まずは設定の簡単なKiss modeから。 TNCをKiss modeにして以下のスクリプトを作成して実行すればOK。 もちろん手入力で試しても良いし,必要なら起動時の設定に書き込んでもよい。 パラメータについては各人で変更願いたい。
#! /bin/sh kissattach /dev/ttyS1 radio kissparms -p radio -t 300 -s 10 -r 64 -f n ifconfig ax0 192.168.32.1 netmask 255.255.255.0 broadcast 192.168.32.255
まずsoundmodemを起動するスクリプトを以下に記載する。 コールサインは架空の物。
#! /bin/sh ## Reset sound card # #isapnp /etc/isapnp.conf modprobe -k sb io=0x220 irq=5 dma=1 dma16=5 mpu_io=0x330 sleep 1 aumix -v 10 -b 50 -t 50 -s 0 -w 65 -p 0 -l 100 -m 40 -c 0 -x 0\ -i 100 -o 100 -1 0 -2 0 -3 0 rmmod adlib_card sb rmmod opl3 uart401 rmmod sound ## set soundmodem # # mode:afsk1200, afsk2666, hapn4800, psk4800 or fsk9600 # sethdlc -p -i sm0 mode sbc:afsk1200 io 0x220 irq 5 dma 1 dma2 5 pario 0x378 #sethdlc -a -i sm0 txd 180 txtail 0 slot 100 ppersist 64 half ifconfig sm0 192.168.32.1 hw ax25 ja2abc-15 ifconfig sm0 netmask 255.255.255.0 broadcast 192.168.32.255
5行目の様にISA PnPなカードの場合は設定してコメントを外す。
6行目サウンドモジュールの導入。カードによって要変更。
8行目サウンドカードの各種ボリューム設定。カット&トライが必要。
10〜12行目サウンド系モジュールの削除。
18行目soundmodemのモジュールの導入。sbc:****を書き換えてmode変更が可能。
20〜21行目コールサインとIP addressの設定。
まずは一行ずつ実行して動作確認する必要があるだろう。 モジュールのリスト,導入,削除のコマンドはそれぞれlsmod,insmod,rmmod。
以下がサウンドモデムを外すスクリプト。 先の起動スクリプトの特にaumixのパラメータを書き換えて,起動,試して,外すの繰り返しが必要だ。 aumixとsoundmodemは別モジュールで同じハードを使用するため,決して同時に使用しないように注意が必要。
#! /bin/sh ifconfig sm0 down rmmod soundmodem rmmod hdlcdrv rmmod ax25
まずは通常の通信が受信できるかモニターして試そう。 上記スクリプト起動後 sethdlc -i sm0 と入力し,うまく復調できれば画面にモニターした内容が表示されるだろう。 無線機のSP出力を調整して,良好に受信できるポイントを探し出して欲しい。 ダメならサウンドモデムを一端外して,起動スクリプトのaumixのパラメータを書き換えてMIC,なりLINE INのボリュームを書き換えてsoundmodemを再起動して試す。
送信は無線機の代わりにスピーカーを取り付け
ping 192.168.32.2
などとしてピーギャーと音が出ればまずはOK。 次に実際に無線機を繋いで,別の無線機で音を聞いて変調度をaumixで調整して欲しい。
実験はSoundblasterのsoundmodemを使用した2台のLinuxで,その間約200m。 430MHz帯を使用し,アンテナ間は見通せない状況で実験を行った。
1200bpsではpingを行うと毎秒作成されるパケットの送受が追いつかず,どんどんバッファーにデータがたまる。 当然timeもだんだんと長くなる。(;_;)
2666bpsにすればpingでのtimeの増加現象は無くなるが,数秒後に数パケットがまとめて帰ってくる状況・・・。
2666bpsでは telnetを使用するのは厳しすぎる。(T_T)
これ以上高速な転送速度の環境がないので何とも言えないが,9600bps以上で接続しないと実用に耐えないだろう。
電波を使用しての接続になるのでセキュリティには十分注意して運用してもらいたい。 特にNICを搭載したLinuxを利用する場合は,ipchainsを設定するなどの無線からNIC側のネットワークを不正使用されない対策も必要。 また telnet等は情報がパケットとしてそのまま流れるため,パスワードが盗聴されてしまう問題がある。 ssh等を利用してパケットを暗号化することも必要となる(アマチュア無線の暗号通信禁止に抵触するかは難しい問題だが)
最後にこれらの実験を行うにあたり以下のページを参考とした。 これらページのOMに感謝したい。
Ham Radio Internet by Linux
LinuxでSound Modemに挑戦
Electronics Laboratory
2台のLinuxを無線を介さずにMICとLINE OUTをそれぞれ直結し,100回のpingとftpで48kBのファイル転送を行った。 soundmodemのパラメータは以下のように相当余裕を見た設定で行った。
sethdlc -a -i sm0 txd 500 txtail 20 slot 300 ppersist 40 half
ping afsk1200(61% packet loss) afsk2666( 2% packet loss) fsk9600 (32% packet loss) ftp afsk1200(get 592bps, put 1242bps) afsk2666(get 927bps, put 2053bps) fsk9600 (packet lossが多いため未測定)
pingプログラムは最後のpingを投げてから10秒程度しか応答を待たないので,1200bpsの後半部分はゴッソリとパケットロスしているが,pingが終了してからもピーギャーと応答は帰ってきている。
ftpでは,最初putを行い,put終了後にputしたファイルをgetして,cmpにより念のためファイルの同一性をチェックした。 FTPではTCPレベルで再送処理が行われるのでデータの化けは通常ありえない。
ftpでgetがputより遅いのは,getの方がより多くのパケットを送信する?プロトコルだからであろう。
9600bpsではどんなにオーディオパラメーターを調整しても掲載データ以上の良好な状態にはならなかった。 使用したSB16AWE32はnon PnPの古い物で,ノイズレベルが高いのが原因かもしれない。 新しいサウンドボードではどうなるか非常に興味がある。
これらは相当苦労して,オーディオのパラメータを追い込んで測定した物である。 今回の追実験は2台のサウンドボードを直結したデータである。 実際の無線LANではこのデータを越えることはまずあり得ない。 続いて実験される方の参考になればと思う。
soundmodemはオーディオのパラメーターの調整が非常に大変だ。 TNCを使えば無線機のボリューム程度の調整で使用できるし,TONO PMT-192を使えばAFの調整からは解放される。 TONO PMT-192の19200bpsで試してみたいな〜。