NATM(4) | FreeBSD Kernel Interfaces Manual | NATM(4) |
名称
natm — ネイティブモード ATM プロトコルレイヤ解説
BSD ATM ソフトウェアは、AAL0 と AAL5 のバーチャルサーキット (仮想回線) へのソケットレベルのアクセスを提供する ネイティブモード ATM プロトコルレイヤ (層) (native mode ATM protocol layer) を装備しています。このプロトコルレイヤを有効にするためには、カーネル設定ファイルにを加えて、カーネルを再構築 (“make clean”を行うことを忘れないでください) してください。options NATM
NATM API
NATM レイヤは、バーチャルサーキットを指定するために struct sockaddr_natm を使用します。
struct sockaddr_natm { uint8_t snatm_len; /* 長さ */ uint8_t snatm_family; /* AF_NATM */ char snatm_if[IFNAMSIZ]; /* インタフェース名 */ uint16_t snatm_vci; /* vci */ uint8_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() 呼び出しの後に、ATM I/O を実行するためにソケットに read() または write() できます。
内部の NATM 操作
内部に、NATM プロトコルレイヤは、 natm_pcbs にシステム上のすべてのアクティブなバーチャルサーキットのリストを保持します。これは、NATM と IP がバーチャルサーキット使用法に関して衝突するのを防ぐために IP で現在使用されている回線を含んでいます。バーチャルサーキットがデータを受信するために有効になる場合、 NATM プロトコルレイヤは、受信“ハンドル”としてドライバにプロトコルコントロールブロックのアドレスを譲り渡します。入ってくるデータが到着する場合、ドライバは、適切な受信ハンドルでデータを後ろに渡します。 NATM レイヤは、プロトコルコントロールブロック検索のオーバヘッドを回避するためにこれを使用します。これは、ATM が既にデータをデマルチプレックス (逆多重化) したという事実をうまく利用することができるようにします。
作者
Washington University (ワシントン大学) の は、 NetBSD のために 1996 年に EN ATM ドライバと共に NATM プロトコルレイヤを実装しました。警告
ATM プロトコルサポートは、NATM プロトコル開発として変更の対象です。ユーザは、現在の実装の詳細に依存してはなりませんが、むしろエクスポート (他にデータ転送) されたサービスに依存するべきです。December 29, 1997 | FreeBSD |