総合手引 | セクション 4 | オプション |
options NATM
を加え、カーネルの再構築を行ってください (その際 "make clean" を忘れずに行ってください)。
struct sockaddr_natm { u_int8_t snatm_len; /* 長さ */ u_int8_t snatm_family; /* AF_NATM */ char snatm_if[IFNAMSIZ]; /* インタフェース名 */ u_int16_t snatm_vci; /* vci */ u_int8_t snatm_vpi; /* vpi */ };
VPI 0, VCI 201 の仮想回線に AAL5 コネクションを作成するには次の様にします:
struct sockaddr_natm snatm; int s, r; s = socket(AF_NATM, SOCK_STREAM, PROTO_NATMAAL5); /* 注: PROTO_NATMAAL0 は AAL0 です */ if (s < 0) { perror("socket"); exit(1); } bzero(&snatm, sizeof(snatm)); snatm.snatm_len = sizeof(snatm); snatm.snatm_family = AF_NATM; sprintf(snatm.snatm_if, "en0"); snatm.snatm_vci = 201; snatm.snatm_vpi = 0; r = connect(s, (struct sockaddr *)&snatm, sizeof(snatm)); if (r < 0) { perror("connect"); exit(1); } /* 以上で s が ATM に接続されました! */
socket() コールは単純に未接続の NATM ソケットを作成します。 connect() コールは未接続の NATM ソケットを仮想回線に結び付け、 データの受信のためにその仮想回線を有効にするようドライバに通知します。 connect() コールの実行後、そのソケットに対し read() または write() を使用して ATM 入出力を行います。
仮想回線のデータ受信が有効化されると、 NATM プロトコル層はプロトコル制御ブロックのアドレスを 受信 "ハンドル" としてドライバへ渡します。 入力データが到着すると、 ドライバは適切な受信ハンドルと共にデータを返します。 NATM 層は、 プロトコル制御ブロックの検索のオーバヘッドを避けるために、 この情報を使用します。 これにより、ATM が既にデータをデマルチプレクスしてある結果を 利用することができます。
int size = 4000; /* bytes */ ret = ioctl(s, SIOCRAWATM, (caddr_t)&size);
この例では、通常の 48 バイトのかたまりではなく、4000 バイトの かたまりで AAL0 のデータを処理するようドライバに伝えます。 明らかにこれは少々粗雑な方法ではありますが、 我々の現在のアプリケーションには必要なものです。 将来、適した大きな AAL5 のフレームでビデオ情報源からの データ送信が行われることを期待しています。
BSD | NATM (4) | December 29, 1997 |
総合手引 | セクション 4 | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.
“ | If you have an emergency I'm great at running around and flailing my arms | ” |
— Artur Bagyants |