2. パケット無線のプロトコル群と Linux

AX.25 プロトコルはコネクション型および非コネクショ ン型の通信モードを持っており、それ自体でポイント−ポイント間の通信に使 われたり、また TCP/IP や NET/ROM といった他のプロトコルを通すために使わ れたりします。

構造としては X.25 level 2 に似ていますが、アマチュア無線により適するよう いくつか拡張がなされています。

NET/ROM プロトコルはフル規格のネットワークプロトコルを作ろうという試み です。AX.25 を下位層のデータリンク層プロトコルとして使います。 AX.25 に適合した形式でネットワーク層を提供し、動的ルーティングやノード エイリアスといった機能を備えています。

ROSE プロトコルは Tom Moulton W2VY によって考案され実装されました。 X.25 パケット層プロトコルの実装であり、AX.25 をデータリンク層プロトコル として使うよう設計されています。 このプロトコルもネットワーク層を提供しています。 ROSE アドレスは 10 桁の数字からなりますが、最初の 4 桁は Data Network Identification Code (DNIC) と呼ばれ、CCITT 勧告 X.121 の Appendix B か ら採用されています。 ROSE プロトコルのさらなる情報は RATS Web server から得られるでしょう。

Alan Cox は Linux における初期のカーネルまわりの AX.25 機能を開発しま した。 Jonathon Naylor は その後の開発を引き継いで NET/ROM や ROSE のサポートを追加しました。 現在は AX.25 に関するカーネルコードの開発者です。 DAMA サポートは Joerg DL1BKE によって開発されました。 Baycom, Soundmodem のサポートは Thomas Sailer が追加しました。 AX.25 機能のソフトウェア集は現在 SourceForge の小さなチーム (small team) によって保守されています。(訳注:small teamとはメインテナー の名前Smallとかけた洒落、実質のメインテナーが彼一人という皮肉もちょっ とあるように思う)

Linux のコードは TNC (Terminal Node Controller) を使う KISS や 6PACK、 また generic SCC ドライバーにより Ottawa PI カード、Gracilis PacketTwin カード、その他の Z8530 SCC を用いたカードを、またパラレルポー トやシリアルポート用の何種類かの Baycom モデムとシリアルポート用の YAM モデムをサポートしています。 Thomas Sailer のカーネル版 soundmodem ドライバーは SoundBlaster や Crystal のチップセットを使ったサウンドカードをサポートしています。 また彼の新しいユーザーモード版 soundmodem はカーネル標準のサウンドドラ イバーを使っており、Linux がサポートするどのサウンドカードでも動作する はずです。

ユーザー領域のプログラム集には簡単な PMS (Personal Message System) (訳 注:簡易版 RBBS のようなもの) やビーコン機能、ラインモードの connect プログラム、listen (どのようにして raw レベルで全て の AX.25 フレームを取り込むかの例)、NET/ROM プロトコルを設定するための プログラムなどが含まれています。 AX.25 の接続要求を受付けて処理するようなサーバー型のプログラムや NET/ROM 機能の大変な部分をほとんどまかなう NET/ROM デーモンなども含ま れています。

APRS をサポートするユーティリティープログラムもあります。 これにはデジピート機能やインターネットとのゲートウェイ機能も含まれてい ます。

2.1. どういった仕組みになっているの?

Linux の AX.25 機能は全く新しい実装です。 NOS やら BPQ やらといった他の AX.25 の実装にいろんな点で似ているように 見えるかも知れませんが、これらの仲間ではありませんし、またこれらと同一 なものというわけでもありません。 Linux の AX.25 機能は他の AX.25 の実装と同一な振舞をするよう設定できま すが、設定のやり方はかなり異なっています。

設定時には何をどう考えるべきかという理解を手助けするため、この章では AX.25 の実装の構造的特徴について少し触れて、それが Linux 全体の枠組の 中でどのように組み込まれているか説明します。

プロトコル層の簡単な図
 _____________________________________________
|         |           |             |         |
| AF_AX25 | AF_NETROM |  AF_INET    | AF_ROSE |
|=========|===========|=============|=========|
|         |           |             |         |
|         |           |    TCP/IP   |         |
|         |           |________     |         |
|         |   NET/ROM          |    | ROSE    |
|         |____________________|____|_________|
|            AX.25                            |
|_____________________________________________|

この図が示しているのは、NET/ROM や ROSE や TCP/IP が直接 AX.25 の上で 動作するようになっており、各プロトコルは別々のプログラムインターフェイ スで扱われるということです。 `_'のついた名前は、これらのプロトコルの Address Family につけらる名前であり、プログラムを 書く際にはこの名前を使います。 ここでの重要なポイントは、AX.25 のデバイスを設定してからでないと、 NET/ROM や ROSE や TCP/IP の各デバイスを設定できないという 暗黙の依存関係です。

Linux におけるネットワーク実装の各ソフトウェアモジュールの 関係
 ___________________________________________________________________________
|         |           |                       ||          |                 |
| User    | Programs  |   call        node    ||  Daemons | ax25d  mheardd  |
|         |           |   pms         mheard  ||          | inetd  netromd  |
|_________|___________|_______________________||__________|_________________|
|         | Sockets   |open(), close(), listen(), read(), write(), connect()|
|         |           |_____________________________________________________|
|         |           |   AF_AX25   |  AF_NETROM  |   AF_ROSE   |  AF_INET  |
|         |___________|_____________|_____________|_____________|___________|
|Kernel   | Protocols |   AX.25     |   NetRom    |     ROSE    | IP/TCP/UDP|
|         |___________|_____________|_____________|_____________|___________|
|         | Devices   |   ax0,ax1   |  nr0,nr1    | rose0,rose1 | eth0,ppp0 |
|         |___________|_____________|_____________|_____________|___________|
|         | Drivers   | Kiss   PI2   PacketTwin   SCC   BPQ     | slip ppp  |
|         |           |     Soundmodem      Baycom              | ethernet  |
|_________|___________|_________________________________________|___________|
|Hardware | PI2 Card, PacketTwin Card, SCC card, Serial port, Ethernet Card |
|_________|_________________________________________________________________|

この図は先のものよりやや一般的なものです。 この図ではユーザーアプリケーションやカーネル、ハードウェアの関係を表し ています。 またソケットインターフェイスや実際のプロトコルモジュール、カーネルネッ トワークデバイスとデバイスドライバの関係も表しています。 上にあるものは下にあるものに依存しており、一般に設定はこの図で下から上 へという順番で行う必要があります。 ですから例えば call というプログラムを動かしたい なら、まずハードウェアについて設定し、次にカーネルに正しいデバイスドラ イバーが組み込まれており、さらに正しいネットワークデバイスが作成されて いて、そして call が使うプログラムインターフェー スを提供するプロトコルがカーネルに組み込まれていなければなりません。 この文書でもだいたいこんな順番で説明していこうと思っています。