EN JA
NATM(4)
NATM(4) FreeBSD Kernel Interfaces Manual NATM(4)

名称

natmネイティブモード ATM プロトコルレイヤ

解説

BSD ATM ソフトウェアは、AAL0 と AAL5 のバーチャルサーキット (仮想回線) へのソケットレベルのアクセスを提供する ネイティブモード ATM プロトコルレイヤ (層) (native mode ATM protocol layer) を装備しています。このプロトコルレイヤを有効にするためには、カーネル設定ファイルに
options NATM
を加えて、カーネルを再構築 (“make clean”を行うことを忘れないでください) してください。

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 (ワシントン大学) の Chuck Cranor は、 NetBSD のために 1996 年に EN ATM ドライバと共に NATM プロトコルレイヤを実装しました。

警告

ATM プロトコルサポートは、NATM プロトコル開発として変更の対象です。ユーザは、現在の実装の詳細に依存してはなりませんが、むしろエクスポート (他にデータ転送) されたサービスに依存するべきです。
December 29, 1997 FreeBSD