21. AX.25, NET/ROM, ROSE ネットワークプログラミング

おそらく、アマチュアパケット無線プロトコルでカーネル内の実装を使う最大 の利点は、それらのプロトコルを使うアプリケーションやプログラムの開発が 簡単になるということでしょう。

Unix のネットワークプログラミングについて触れることは、この文書の目的 からは外れますが、AX.25, NET/ROM, ROSE プロトコルをあなたのソフトウェ アでどうやって扱えばいいのか、基本的なことについて説明したいと思います。

21.1. アドレスファミリー

Linux では AX.25, NET/ROM, ROSE のネットワークプログラミングは TCP/IP のプログラミングとほとんど同じです。 主な違いは使われるアドレスファミリーの違いと、そのヘッダに埋込むための アドレス構造体の違いです。

AX.25, NET/ROM, ROSE のアドレスファミリーの名前はそれぞれ AF_AX25, AF_NETROM, AF_ROSE です。

21.2. ヘッダファイル

これらのプロトコルを扱うならば、ヘッダファイル 「netax25/ax25.h」を必ずインクルードしなければなり ません。 場合によっては「netrom/netrom.h」や 「netrose/rose.h」も必要です。 プログラム開発の出発点になるような簡単な例を示せば以下のような感じです。

AX.25 の場合

#include <netax25/ax25.h>
int s, addrlen = sizeof(struct full_sockaddr_ax25);
struct full_sockaddr_ax25 sockaddr;
sockaddr.fsa_ax25.sax25_family = AF_AX25

NET/ROM の場合

#include <netax25/ax25.h>
#include <netrom/netrom.h>
int s, addrlen = sizeof(struct full_sockaddr_ax25);
struct full_sockaddr_ax25 sockaddr;
sockaddr.fsa_ax25.sax25_family = AF_NETROM;

ROSE の場合

#include <netax25/ax25.h>
#include <netrose/rose.h>
int s, addrlen = sizeof(struct sockaddr_rose);
struct sockaddr_rose sockaddr;
sockaddr.srose_family = AF_ROSE;

21.3. コールサインの変換とその例題

AX.25 ユーティリティパッケージに組込まれている lib/ax25.a ライブラリーにはコールサイン変換のための ルーチンがあります。 もちろん、お望みであれば自分で書いても構いません。

user_call ユーティリティは作業を始める出発点とし ては最良の例題です。 ソースコードは AX.25 ユーティリティパッケージに含まれています (訳注: user_call は ax25-tools パッケージに含まれます)。 ソースコードをちょっと眺めれば、このプログラムのやっていることの 90 パー セントはソケットをオープンするための準備であることにすぐ気付くことでしょ う。 実際に接続をするのは簡単なことです。むしろそのための準備が大変なのです。

この例題は分かりやすい方だと思います。 もし分からないことがあれば、linux-hams メーリングリ ストで聞いてみるといいでしょう。誰かが答えてくれると思います。