# ATM on Linux HOWTO

Paul
Schroeder
B
IBM Corporation

    paulsch@us.ibm.com

芳賀
靖史
日本語訳

    yasufumi.haga@nifty.com

本文書では、Linux で ATM ネットワーク接続をサポートするのに必要な、 ドライバやツールのインストールや構成、および設定の方法を解説します。

最新情報については、ぜひ ATM on Linux home page をご覧になって下さい。

Linux 用の ATM サポートは、現在プレアルファ段階ですが、 実験用にリリースしたものがあります。 このリリースでは、素の ATM コネクション （つまり PVC と SVC）や IP over ATM、LAN エミュレーション、 マルチプロトコル・オーバー・ATM(MPOA)、それに Arequipa を始め、 他にもいくつか魅力的な機能をサポートしています。
2001年 10月 18日
2.4.0
2001年 10月 18日
PBS
いくつか追加、変更を行なうと共に、 LaTeX から DocBook に変換。

## はじめに

### 謝辞

本文書は、主に Usage Instructions という文書が元になっています。この文書は、 バージョン 0.79 までの ATM on Linux というディストリビューションで、一緒に配布していたもので、 Werner Almesberger wa@almsesberger.net が Institute for computer Communications and Applications (ICA) に勤務しているときに著しました。

の節は、主に Richard Jones rjones@imcl.com が担当しました。

### 著作権

Copyright 2001 IBM Corporation

この部分の邦訳は参考です。正式なものは英文をお読み下さい。

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license can be found at http://www.gnu.org/copyleft/fdl.html.

本文書の複製、配布、ないし変更は、 Free Software Foundationが公開している、 フリー文書利用許諾契約書 （ GNU Free Documentation License ） のバージョン 1.1 ないしはそれ以降の条件下で許可する。 ただし、変更不可能部分が無いこと、表表紙が無いこと、 および裏表紙が無いこと。 当該ライセンスの複製は http://www.gnu.org/copyleft/fdl.html にある。

本文書の大部分は、 バージョン 0.79 までの ATM on Linux ディストリビューションと共に配布している、 Usage Instructions を元にしている。 当該ディストリビューションは、 BSD License, GNU General Public License (GPL), および GNU Lesser General Public License (LGPL) の条件下でリリースしたものである。

### メーリングリストについて

ATM on Linux の議論はメーリングリストでも行なっています。 ご意見やご質問、ご助言など、あるいは実際開発に参加なさりたい場合などは、 ぜひ当リストにご参加下さい。

当メーリングリストに投稿していただいたメールは、 http://www.geocrawler.com/lists/3/SourceForge/6487/0/ にアーカイブしてあります。

### CVS へのアクセスについて

CVS にある最新バージョンは至急使わなくては、などと勝手に思い込まず、 リリースしたものを使い続けていただきたいのですが、 最先端のものがお好みなら、以下にその方法を載せておきます。

まず、匿名でログインします。

    % cvs -d:pserver:anonymous@cvs.linux-atm.sourceforge.net.:/cvsroot/linux-atm login

パスワードのプロンプトが出たら、リターンキーを押すだけにして下さい。 それから、リポジトリをチェックアウトします。

    % cvs -z6 -d:pserver:anonymous@cvs.linux-atm.sourceforge.net.:/cvsroot/linux-atm co -P linux-atm

ブランチを指定してチェックアウトしてもかまいません。 具体的には以下のようにします。

    % cvs -z6 -d:pserver:anonymous@cvs.linux-atm.sourceforge.net.:/cvsroot/linux-atm co -r V2_5_0 linux-atm

いずれも場合も、"linux-atm" というディレクトリができ、 そこに最新のソースが入ります。当該ディレクトリ内で作業する場合は、 CVS に '-d' オプションを付ける必要はありません。 具体的には、次のようにして、

    % cvs -z6 up -d

リポジトリにある変更内容を、いずれも持ってくればいいのです （上記の例で使用している '-d' オプションは、 "up" サブコマンドに対するもので、 CVS ルートディレクトリを指定するために用いた '-d' とは違います）。

ソースツリーをチェックアウトしたら、 当該ツリーのトップレベルディレクトリで autotools スクリプトを実行する必要があります。 そうしないと、ソースツリーの構成や構築、それにインストールはできません。

    # ./autotools
    Running aclocal...
    Running autoconf...
    Running autoheader...
    Running automake...
    automake: configure.in: installing `./install-sh'
    automake: configure.in: installing `./mkinstalldirs'
    automake: configure.in: installing `./missing'
    configure.in: 26: required file `./ltconfig' not found
    automake: Makefile.am: installing `./INSTALL'
    automake: configure.in: installing `src/lane/ylwrap'
    Finished...  Now run './configure' and 'make'...

tar+gzip したり RPM でまとめた、配布用ファイルを作りたい場合は、 各々 `make dist` か `make rpm` を実行して下さい。 tar+gzip したファイルはソースツリーのトップレベルディレクトリにできますし、 RPM ファイルは `src/extra/RPMS` ディレクトリにできます。

CVS のアーカイブは http://cvs.linux-atm.sourceforge.net/cgi-bin/viewcvs.cgi/linux-atm/linux-atm/ にあるので、ウェブで閲覧していただいてもかまいません。

最後に、ソースをリポジトリにコミットするたびに、 その diff をすべて電子メールで受け取りたい場合ですが、 "linux-atm-commits": http://lists.sourceforge.net/lists/listinfo/linux-atm-commits というメーリングリストがありますのでご利用下さい。

このメーリングリストは、ユーザーの受信専用とします。 （内容が、当リストを通じて送るパッチに関することだとしても） 議論や質問は許可しません。 議論はすべて linux-atm-general メーリングリストで続けて下さい。

## インストール

本パッケージをインストールするには、 以下のものが必要になります。

- パッケージ自体。 http://linux-atm.sourceforge.net/dist.php から入手できます。

- Linux カーネルのバージョン 2.4.x。 例えば、 ftp://ftp.kernel.org/pub/linux/kernel/v2.4/ から入手できます。

- Perl のバージョン 4、ないしは 5

- メモリのデバッグをしたい場合は MPRも必要。 例えば、 ftp://ibiblio.org/pub/Linux/devel/lang/c/ から入手できます。

### バイナリの RPM ファイルを使う

自分でソースの展開や構築をするのは時間と労力の浪費だ、と思っている場合は、 RPM 形式でも ATM ツールを配布していますから、それを使って下さい。 これは、次のようにすればインストールできます。

    rpm -ivh linux-atm-x.x.x-x.rpm

### ソースツリーを使う

この場合は、まず ATM on Linux ディストリビューションを展開します。

    tar xzvf linux-atm-x.x.x.tar.gz

ディストリビューションを展開すると、 `linux-atm-x.x.x/` ディレクトリができ、その下にサブディレクトリがいくつかできます。 中でも重要なのは、次のディレクトリです。

`doc/`

  （この HOWTO を含む）SGML DocBook 形式の文書があります。

`src/sigd/`

  UNI 3.0 と UNI 3.1、および UNI 4.0 のシグナル処理デーモン atmsigd があります。

`src/saal/`

  シグナル処理用 AAL ライブラリ (SSCOP と SSCF、および SAAL) があります。

`src/qgen/`

  Q.2931 形式のメッセージ処理があります。

`src/ilmid/`

  ILMI アドレス登録デーモン ilmid があります。

`src/maint/`

  次の ATM 保守プログラムがあります。：atmaddr, atmdiag, atmdump, atmloop, atmtcp, enitune, esi, sonetdiag, saaldump, および zntune

`src/test/`

  次の テストプログラムがあります。：align, aping, aread, awrite, br, bw, isp, ttcp_atm, window

`src/arpd/`

  ATMARP 用のツールとデーモン atmarp と atmarpd があります。

`src/led/`

  LAN エミュレーションデーモン zeppelin があります。

`src/lane/`

  LAN エミュレーションサーバー bus と lecs、および les があります。

`src/mpoad/`

  マルチプロトコル・オーバー・ATM デーモン mpcd があります。

`src/debug/`

  次のデバッグツールがあります。：delay, ed, encopy, endump, svctor, zndump, および znth

`src/lib/`

  アプリケーション、およびデーモン用ライブラリがあります。

`src/man/`

  種々雑多なマニュアルページがあります。

`src/extra/`

  追加パッケージと RPM の spec ファイルがあります。

`src/config/`

  設定と rc ファイルのサンプルがあります。

`src/switch/`

  スイッチ・ファブリック・コントロールがあります （開発中）。

### カーネルの設定

#### 注意

新しいカーネルの構築やインストールに不慣れな場合は、ぜひ The Linux Kernel HOWTO を参照して下さい。

カーネルのディストリビューションを展開後、 Linux カーネルのソースツリーのトップレベルで、 いつもの、 `make config` か `make menuconfig`、あるいは `make xconfig` を行なって下さい。 まず、以下のオプションを有効にします。

    Prompt for development and/or incomplete code/drivers
      (CONFIG_EXPERIMENTAL)

それから、次のオプションを見つけて、有効にして下さい。

    Asynchronous Transfer Mode (ATM, EXPERIMENTAL) (CONFIG_ATM)
      Use "new" skb structure (CONFIG_ATM_SKB)
      Classical IP over ATM (CONFIG_ATM_CLIP)
        Do NOT send ICMP if no neighbour (CONFIG_ATM_CLIP_NO_ICMP)
      LAN Emulation (LANE) support (CONFIG_ATM_LANE)
        Multi-Protocol Over ATM (MPOA) support (CONFIG_ATM_MPOA)
    ATM over TCP (CONFIG_ATM_TCP)
    Efficient Networks ENI155P (CONFIG_ATM_ENI)
      Enable extended debugging (CONFIG_ATM_ENI_DEBUG)
      Fine-tune burst settings (CONFIG_ATM_ENI_TUNE_BURST)
        Enable 16W TX bursts (discouraged) (CONFIG_ATM_ENI_BURST_TX_16W)
        Enable 8W TX bursts (recommended) (CONFIG_ATM_ENI_BURST_TX_8W)
        Enable 4W TX bursts (optional) (CONFIG_ATM_ENI_BURST_TX_4W)
        Enable 2W TX bursts (optional) (CONFIG_ATM_ENI_BURST_TX_2W)
        Enable 16W RX bursts (discouraged) (CONFIG_ATM_ENI_BURST_RX_16W)
        Enable 8W RX bursts (discouraged) (CONFIG_ATM_ENI_BURST_RX_8W)
        Enable 4W RX bursts (recommended) (CONFIG_ATM_ENI_BURST_RX_4W)
        Enable 2W RX bursts (optional) (CONFIG_ATM_ENI_BURST_RX_2W)
    ZeitNet ZN1221/ZN1225 (CONFIG_ATM_ZATM)
      Enable extended debugging (CONFIG_ATM_ZATM_DEBUG)
      Enable usec resolution timestamps (CONFIG_ATM_ZATM_EXACT_TS)
    IDT 77201 (NICStAR) (CONFIG_ATM_NICSTAR)
      Use suni PHY driver (155Mbps) (CONFIG_ATM_NICSTAR_USE_SUNI)
      Use IDT77015 PHY driver (25Mbps) (CONFIG_ATM_NICSTAR_USE_IDT77105)
    Madge Ambassador (Collage PCI 155 Server) (CONFIG_ATM_AMBASSADOR)
      Enable debugging messages (CONFIG_ATM_AMBASSADOR_DEBUG)
    Madge Horizon [Ultra] (Collage PCI 25 and Collage PCI 155 Client)
      Enable debugging messages (CONFIG_ATM_HORIZON_DEBUG)
    Interphase ATM PCI x575/x525/x531 (CONFIG_ATM_IA)
      Enable debugging messages (CONFIG_ATM_IA_DEBUG)

ENI ドライバの"burst settings"を有効にすれば、 細かい調整ができるようになります。 デフォルトの設定では、 PCI チップセットがバッファオーバーランしてしまうようなら、 このオプションが必要かも知れません。 "burst settings"の変更に関連する詳細な説明については、 オンラインヘルプの "CONFIG_ATM_ENI_TUNE_BURST" を参照して下さい。

`drivers/atm/nicstar.h` ファイルには、IDT 77201 ドライバ用に、 いくつか変更可能な設定項目があることは覚えておいて下さい。

中には、互換性のあるカードでも使えるドライバがあります。 カードの互換性に関する最新情報は、 ATM on Linux information のページにあります。

その後、カーネルを構築してリブートして下さい。

### ドライバのメッセージ

ENI155p-MF ドライバを使用するようにした場合は、 以下のようなメッセージが 2 行出るはずです （512kB は -C バージョンで、2048KB は -S バージョンです）。

    eni(itf 0): rev.0,base=0xff400000,irq=10,mem=512kB (00-20-EA-00-07-56)
    eni(itf 0): FPGA,MMF

一方、ZN1221/ZN1225 ドライバを使用するようにした場合は、 以下のようなメッセージになります。

    zatm(itf 0): rev.3,base=0xf800,irq=11,mem=128kB,MMF (00-20-D4-10-2A-80)
    zatm(itf 0): uPD98401 0.5 at 30.024 MHz
    zatm(itf 0): 16 shapers, 32 pools, 2048 RX, 3958 VCs

Triton ベースのシステムで使いたい場合は、 最低でもリビジョンレベル 3 のボードが必要ですから、 注意して下さい。

"ATM over TCP" デバイスは、 `atmtcp` を用いて、後で生成するので、 "ATM over TCP" ドライバしか使わないようにした場合は、 スタート時のメッセージは出ません、注意して下さい。

### メモリのデバッグ

メモリアロケーション用のオプションでデバッグ機能を有効にしたい場合は、 ATM ツールのコンパイル前に、MPR をインストールする必要があります。

バイナリの RPM パッケージをダウンロードすることにしたのなら、 MPR は次のようにすればインストールできます。

    rpm -ivh mpr-x.x-x.rpm

ソースを使うことにした場合は、 以下のようにして、`mpr-x.x.tar.gz` を展開して下さい。

    tar xzvf mpr-x.x.tar.gz

それから次のコマンドを実行します。

    cd mpr-x.x
    ./configure x86-linux
    make
    make install

MPR をインストールした状態でプログラムをコンパイルすれば、 `malloc` や `free` の一般的な誤用に関しては、自動的に検出します。 また、`MPRPC` と `MPRFI` を設定しておけば、メモリの割り当て追跡機能が有効になります。 詳細は、MPR ディストリビューションにある、 `doc/mpr.html` や、あるいは `doc/mpr.ps` を参照して下さい。

メモリのデバッグ機能を入れても、 この二つの環境変数を設定しなければ、 実行時のオーバーヘッドはわずかなものにすぎません。

### ATM ツール

さあ、最終段階です。ATM ツールの構成と構築を行ないます。 構成が必要なのは、スイッチに UNI 3.1 か 4.0 を使っているか、 もしくは何かバグがある場合だけです。 構成オプションは、linux-atm ディストリビューションにある、 `./configure` に適切なオプションを渡す方法にしました。

#### 注意

使用できるオプションをすべて見るには、 linux-atm ディストリビューションのトップレベルディレクトリで、 `./configure --help` を実行して下さい。

ATM ツールは、次のコマンドを使って構築します。

    cd linux-atm-x.x.x
    ./configure
    make
    make install

`./configure` の起動時に、特に何も指定しなければ、 実行可能ファイルは `make install` で、 それぞれ `/usr/local/bin` と `/usr/local/sbin` にインストールします。 設定ファイルは `/usr/local/etc` にインストールします （ただし `hosts.atm` は別です。 このファイルは `/etc` にインストールします）。 ライブラリはとヘッダーファイルはそれぞれ、 `/usr/local/lib` と `/usr/local/include` にインストールします。 マニュアルページは、 `/usr/local/man` にインストールします。

### 追加パッケージ

一部のプログラムは、 ATM 関連以外で既に配布されている、 大規模パッケージが元になっているものがあります。 いくつかのパッケージについては、 ATM on Linux のディストリビューションにパッチが入っており、 `src/extra` ディレクトリに置いてあります。

現時点で使用可能な追加パッケージは、次のとおりです。

tcpdump

  ネットワークトラフィックのダンプ （ATM 用に拡張済み）。

ANS

  ATM ネームサーバー （元は、named 4.9.5）

text2atm は、ANS が使えれば自動的に使用しますので、注意して下さい。 ですから、ans のインストールが必要なのは、 ネームサーバーの諸機能を提供しているシステムか、 ATM 関連の保守ツール （nslookup 等々） が必要な場合だけです。

hosts2ans.pl スクリプトは、 `/etc/hosts.atm` ファイルを ANS のゾーンファイルに変換するもので、 `src/extra/ANS/` ディレクトリに置いてあります。 使用方法はこのファイルの冒頭で説明しています。

## デバイスの設定

本節では、デバイス固有の設定作業と、 ATM や SONET レベルで行なう一般的な診断手順を説明します。 ハードウェアの取り付けと診断に関する詳細は、 ぜひそのアダプターのドキュメントを参照して下さい。

### ATM Over TCP の設定

本物の ATM ハードウェアが無くても、 "ATM over TCP" ドライバを使えば、 API が使えます。 この API は、 リモートデバイスに直結している ATM デバイスをエミュレートするものです （つまり、VPI/VCI スワッピングはありません）。

（双方向の）"ワイア"を一本確立するには、 両システムで root になり （または、同一システムの両側を走らせて、 "インタフェース"を二つ作ってそれを接続し）、 どちらかで、以下のコマンドを実行します（それを "a" としましょう）。

    # atmtcp virtual listen

それから、別のシステム（"b"）で、 以下のコマンドを実行します。

    # atmtcp virtual connect address_of_a

双方の `atmtcp` はその状況を報告し、 カーネルは両方のシステムで、以下のようなメッセージを表示するはずです。

    Link 0: virtual interface 2
    Link 1: incoming ATMTCP connection from 127.0.0.1

および

    Link 0: virtual interface 3
    Link 1: ATMTCP connection to localhost

この際、`atmtcp` が動き続けることと、 割り込みをかけると仮想ワイアが切れることに注意して下さい。

ポート番号（デフォルトは 2812）を指定すれば、 同一マシンに "ワイア" が複数付けられます。 しかし AAL 処理がまったく実行されないことに注意して下さい。 したがって、データを送信したものとは別の AAL（例えば AAL0） を使ってデータを受信するのは不可能です

### ZN1221/ZN1225 の調整

ZeitNet 社の ZN1221 アダプターと ZN1225 アダプターは、 受信用に予めアロケートしておいた、 フリーメモリバッファのプールを用います。 SDU がある最大サイズになっている VC を受信用にオープンすると、 デバイスドライバが対応するプールにフリーバッファを詰め込みます。 データの受信中は、アダプターはバッファを削除します。 そして残りのバッファ数があるしきい値を下回ると、 デバイスドライバは、再度プールにフリーバッファを補充します。

フリーバッファ数の上限と下限、 および新しいデータオフセットに適用するしきい値は、 zntune プログラムを使って設定できます。 使い方は次のとおりです。

    	zntune
    	-l low_water
    	-h high_water
    	-t threshold
    	itf
    	pool

プール番号を指定しないと、すべてのプールにその変更内容を適用します。 プール 2 には 64 バイトのパケットを格納し、 プール 3 には 128 バイトのパケットを格納します、等々。 プール 0 とプール 1 は現在未使用です。

以下のように、 新しいパラメータをつけずに `zntune` を実行すれば、 その時点の設定といくつかの使用状況の統計が得られます。

    	zntune
    	-z
    	itf
    	pool

"Size" 欄は、バイト単位のバッファサイズを表しています。 "Ref" 欄は、そのプールを使用している、オープン中の VC 数です。 "Alarm" 欄は、カウンタのリセット後に、 フリーバッファ数が下限値を下回った回数です。 同様に、"Under" 欄は、対応するプールが空だったという理由で、 内向きの PDU を破棄した回数です。

"Offs", "NxOf", "Count" および "Thres"、 これらの欄は、整列の適用状況を表しています。 "Offs" は、その時点でドライバが内向きの PDU 内に想定している、 ユーザーデータのオフセットです。 シングルコピーの場合、 データをページ境界で受信するように受信バッファが整列します。 "NxOf" は、一番新しく受信した PDU のユーザーデータオフセットです。 このオフセットは、その時点で想定しているオフセットとは別のものです。 "Count" は、"NxOf" のオフセット順に受信した PDU 数です。 最後の "Thres" はしきい値で、 "Count" がこのしきい値を越えないと、 "NxOf" は新しいカレントオフセットになりません。

"Alarm"カウンタ と "Under"カウンタをリセットする場合は、 `-z` オプションを使って下さい。

### `/proc/net/atm/`にあるファイル

ATM サブシステムに関するある種のステータス情報は、 `/proc/net/atm/` にあるファイルからわかります。 `/proc/net/atm/arp` ファイルには、"クラシカル IP over ATM" 固有の情報が入っています。 を参照して下さい。

アクティブな ATM デバイスは、すべて `/proc/net/atm/devices` にリストされています。 この中には、各デバイスのインタフェース番号、 種類を表すラベル、エンドシステムの識別子 (ESI)、 それに統計情報が示してあります。 この統計情報の内容は、 atmdiag を使ってわかるものに該当します。

個々の ATM デバイスについては、 （例えば、`eni:0` のような） `種類:番号` という形式のエントリを複数登録することがあり、 これにデバイス固有の情報が入っています。

`/proc/net/atm/pvc` と `/proc/net/atm/svc` には、PVC と SVC ソケットがすべてリストされています。 ここには、いずれのタイプのソケットについても、VPI と VCI 番号が載っています。 PVC に関しては、その後に AAL とトラフィッククラス、 それに受信と送信のそれぞれの方向について選んだ PCR が載っています。 一方 SVC に関しては、SVC の状態と通信相手のアドレスが載っています。 インタフェース番号が 999 になっている SVC は、 "State" 欄で示しているように、 特別な制御用に使用します。

さらに、`/proc/net/atm/vc` は、バッファサイズと、 ATM ソケットすべてに関する内部の追加情報を示しています。

### ATM の診断

atmdiag プログラムを使って、 ATM デバイスドライバの様々なカウンタの問い合わせができます。 詳細は該当するマニュアルページを参照して下さい。

### SONET の診断

SONET の診断ツールはリンクの性能を監視したり、 エラーをシミュレートするのに使用できます。 現在の SONET の統計情報を得るには、 引数に ATM のインタフェース番号を付けて、 このツールを実行します。例えば以下のようにします。

    % sonetdiag 0

カウンタは、`-z` オプションを付ければリセットできます。

    # sonetdiag -z 0

シミュレートできるネットワーク障害には、 次のものがあります。 中には、この一部しかサポートしていないアダプタもあります。

sbip

  セクションエラー (B1) を挿入します。

lbip

  ラインエラー (B2) を挿入します。

pbip

  パスエラー (B3) を挿入します。

frame

  強制的にフレームロス (RX) を起こします。

los

  ロスオブシグナルを挿入します。

lais

  ラインアラーム通知シグナルを挿入します。

pais

  パスアラーム通知シグナルを挿入します。

hcs

  ヘッダーのチェックサムエラーを挿入します。

障害は、対応するキーワードをコマンドラインに追加すれば有効になり、 キーワードの直前にマイナス記号 (-) を付ければ、障害をクリアします。 例えば以下のように使います。

    a# sonetdiag -z 0 >/dev/null
    b# sonetdiag -z 0 >/dev/null
    a# sonetdiag 0 los
    a# sonetdiag 0 -los
    b# sonetdiag 0 | grep BIP
    Section BIP errors:      56200
    Line BIP errors:           342
    Path BIP errors:           152
    a# sonetdiag 0 | grep FEBE
    Line FEBE:                 342
    Path FEBE:                 152

何らかの診断エラーが挿入できるようになっていると、 sonetdiag を使用して統計情報を取得する際、そのキーワードを表示します。 ハードウェアが自動的に無効にするエラー挿入もあることに注意して下さい。

## ネイティブ ATM PVC

PVC は直接接続しているマシンでも、 スイッチ経由で接続しるマシンでも、 いずれの場合も使用できます。 後者の場合、セルフォワードの設定は、 スイッチに対して手動で行なわなければなりません。

### トラフィックツール

aread/awrite と br/bw は、ATM の API にアクセスするための簡単なプログラムです。 awrite は AAL5 PDU の第二パラメータに渡したテキスト文字列を送信し、 aread は AAL5 PDU を 1 個 受信して、その内容を 16 進数で表示します。 両プログラムとも、該当するシステムコールの戻り値と、 errno の現在値も表示します。

bw は、標準入力も、（番号を第四パラメータに渡した場合は） 8kB の AAL5 PDU にある任意のデータを含むブロックのストリームも、 いずれも送信します。 br は AAL5 PDU を受信して、その内容を標準出力に書き出します。

aread, awrite, br, bw, これら四つの第一パラメータは、常に PVC アドレス、 つまり、ATM インタフェース番号と VPI 番号、それに VCI 番号を、 ドットで区切って並べたものです。 インタフェース番号は、ゼロなら省略してもかまいません。 例えば、以下のようなものです。

    % awrite 1.0.42 hi

中には、 VPI == 0 しかサポートしていないアダプタもあるので、 注意して下さい。また、例えば 0 から 1023 までというように、 VCI の範囲にも制限があるかも知れません。 インタフェース番号は、スタート時にドライバが表示する、 初期化メッセージで分かります。 atm0 ならインタフェース 0 で、 atm1 ならインタフェース 1、等々 というようになります。 （例えば atmtcp ばかりではなく） 本物の ATM アダプタを装備しているシステムなら、 アダプタは、通常 atm0 にあります。

aping は、PVC 上で短い AAL5 PDU の送受信を行ないます。 このプログラムは、送信するメッセージがエコーバックされるか、 他端の同じようなプログラムがメッセージストリームを生成すると思っていますが、 長時間何もメッセージを受信しないと、エラーを報告します。 aping は、aread のように、 PVC を指定して起動します。

"本物の"テストの際は、 このパッケージに付いてくる、 ttcp の修正版を使用して下さい。 修正前のオリジナルは ftp://ftp.sgi.com/sgi/src/ttcp/ にあります。 修正に際しては、以下のオプションを付け加えました。

`-a`

  UDP/TCP ではなく、ネイティブの ATM を使用します。 PVC については、アドレスは `[itf.]vpi.vci` 形式でなければなりません。 SVC については、ATM のエンドシステムの有効なアドレスにしてください。

`-P` num

  num セル毎秒のピークセルレートで、 CBR コネクションを使用します。 デフォルトでは、UBR を使用します。

`-C`

  (UDP チェックサムを無効にします。

例：

    %a ttcp_atm -r -a -s 0.90
    %b ttcp_atm -t -a -s 0.90

### ダイレクトセルアクセス

デバイスドライバがサポートしているアダプタでは、 素のセル ("AAL0") にアクセスします。 個々のセルは、 atmdump で作れるし受信もできます。

以下のその例を載せます。

    a% sleep 10; date | ./atmdump -t 1 -c 0.51
    b% ./atmdump 0.51
    825079645.192480: VPI=0 VCI=51, GFC=0x0, CLP=1, Data SDU 1 (PTI 1)
       46 72 69 20 46 65 62 20 32 33 20 31 32 3a 34 37
       3a 32 35 20 47 4d 54 20 31 39 39 36 0a 00 00 00
       00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

## シグナル処理

### ATM の Hosts ファイル

ATM のアドレスはそのままでは使いずらいので、 ほとんどの ATM ツールでは、数字を並べたアドレスの代わりに、 名前も認めています。 名前と数字のマッピングは、 `/etc/hosts.atm` というファイルで定義します。 このファイルの構造は、`/etc/hosts` ファイルと似たものになっています。

    数字のアドレス 名前

例えば、以下のようなものです。

    47.0005.80FFE1000000F21A26D8.0020EA000EE0.00 pc2-a.fqdn pc2-a
    47.0005.80FFE1000000F21A26D8.0020D4102A80.00 pc3-a.fqdn pc3-a

数字のアドレスは、[] で説明している形式なら、どの形式で指定してもかまいません。 Linux システムの数字のアドレスは、 `atmaddr `-n`` コマンドを使って決定します （ も参照して下さい）。

ATM ツールの多くは、アドレスを表示する際、 該当する名前も見つけようとします。 数字のアドレスから名前に変換する場合、 そのファイルにある最初に見つかった該当する名前を使用します。

SVC 用の ATM アドレスの他に、 `/etc/hosts.atm` には PVC アドレスも格納できます。 名前が同じでアドレスタイプが違うものを格納すると、 最初に該当するものを選びます。つまり、 アプリケーションが明示的に SVC アドレスだけを要求すれば、 PVC アドレスはいずれも無視されます。

### ANS

ATM ネームサーバー (ANS) にアクセスできるのなら （例えば、ANS 拡張をインストールしてあるなら）、 それだけを使ってもいいし、 `/etc/resolv.conf` に hosts ファイルの他に、 ANS が動いているホストを指定して、 両方使用してもかまいません。

E.164 アドレスの逆引きには、電話の国別コードが必要になりまが、 このコードリストは International Telecommunications Union から入手できます。 List of ITU-T Recommendation E.164 Assigned Country Codes は、現在 PDF 形式と MS-Word 形式が利用できます。

#### 注意

万が一 URL が古くなっていても、 ITU のウェブサイトでこの文書のタイトルを検索すれば、簡単に見つかります。

atm-linux ディストリビューションに入っている `src/lib/pdf2e164_cc.pl` スクリプトを使えば、 PDF 版 の国別コードリストから E.164 国別コード表が作れます。 例えば以下のように使います。

    perl pdf2e164_cc.pl e164_xxx.pdf >/etc/e164_cc

上記のスクリプトを実行する際、 pdftotext を使用する必要があることに注意して下さい。 このプログラムは xpdf から入手できます。

### シグナル処理デーモン

マニュアルページは次のようになっています。 atmsigd 8 atmsigd.conf 4

atmsigd では、"ポイント・ツー・マルチポイント" のサポートに、大きな制限があります。注意して下さい。 ポイント・ツー・マルチポイントツリーのシングルリーフでしか動作しません。

デフォルトでは、atmsigd は、UNI バージョンを動的に構成し、それに従うような構成になっています。 具体的に言えば、linux-atm のソースディストリビューションの、 トップレベルディレクトリにある、 `./configure` スクリプトに `--with-uni=VERSION` を指定すれば、UNI 3.0 か 3.1, あるいは 4.0 を、 コンパイル時に指定できます。

atmsigd は病的なほど疑り深い設定になっていますので、気をつけて下さい。 何か異常な問題を検知すると、よく止まってしまいます。 この件については、今後は当然変更されると思います。

また、`-c` オプションに指定した場所で設定ファイルも探します。 デフォルトの場所は `/usr/local/etc/atmsigd.conf` になっています。

### ILMI デーモン

ILMI はアドレスを自動設定する仕組みを提供するデーモンです。 しかし、スイッチが無い場合や、ILMI をサポートしていないスイッチの場合は、 手作業で ATM アドレスを設定する必要があります （ を参照して下さい）。 アドレスを手作業で設定しているインタフェースでは、 ILMI は使わないよう注意して下さい。

ILMI デーモンは、以下のようにしてスタートします。

    	ilmid
    	-b
    	-d
    	-i local_ip
    	-l log_file
    	-q qos
    	-u uni_version
    	-v
    	-x
    	itf

`-b`

  バックグラウンドで動かします。初期化後、 fork した子プロセス内で動かします。

`-d`

  デバッグ出力を有効にします。デフォルトでは、 ilmid は、非常に物静かです。

`-i` local_ip

  スイッチから問い合わせがあった時に答える IP アドレスです。 ドットで区切った 10 進数でも、テキスト形式でも、どちらでもかまいません。 デフォルトでは、ilmid は、発見的方法論を用いて、ローカルの IP アドレスを選びます。

`-l` logfile

  診断メッセージを、標準エラー出力ではなく、 指定したファイルに書き出します。 システムログ採取プログラムに診断結果を送る場合は、 `syslog` という特定の名前を用います。

`-q` qos

  指定したサービス品質を用いるよう、ILMI VC を設定します。 デフォルトでは、ILMI の VC で、リンク速度の UBR を使用します。

`-u` uni_version

  UNI バージョンを設定します。 指定できる値は、 `3.0` と `3.1`、および `4.0` の三つです。真ん中の小数点は省略してもかまいません。 デフォルト値は ilmid のコンパイルの仕方によって異なりますが、 普通は、`3.0` です。

`-v`

  拡張デバッグ出力を有効にします。

`-x`

  ColdstartTrap 内に変数のバインディングを含めないようにします。 （例えば、LS100 のように） 中にはこのオプションを設定しないと動作しないスイッチがあります。

インタフェース番号を指定しない場合、 ilmid は、インタフェース 0 を用います。 `atmaddr` コマンド（下記参照）を使えば、 アドレスが正しく登録されたかどうかが確認できます。

エージェントがサポートしているのは、 ATM フォーラムの UNI 3.1 仕様 にある 5.8 節に明記してある、 アドレス登録手順だけです。 この手順に含まれるのは、 ホスト上のネットワークプレフィックスをホストに登録するスイッチと、 それに応えて最終的な ATM アドレスをスイッチに登録するホストです。 ホストは、スイッチが登録したネットワークプレフィックスに、 ESI （エンドシステム識別子）とヌルセレクタバイトを追加するという方法で、 これを行ないます。ESI は ATM インタフェースの物理アドレス、 または MAC アドレスです。

### アドレスの手動設定

お使いのスイッチが ILMI をサポートしていない場合、 スイッチ側と PC 側の両方で、ATM アドレスを手作業で設定しなければなりません。 Linux 側では、 ilmid が邪魔していないことを確かめてから、 `atmaddr` コマンドを使ってアドレスを設定して下さい。

マニュアルページは次のとおりです。 atmaddr 8

ATM アドレスを手作業でスイッチに設定する方法は、 物によって異なります。 Fore ASX-200 では、次のコマンドを使って行ないます。

    conf nsap route new nsap_addr 152 port vpi

例えば、

    conf nsap route new 47000580ffe1000000f21510650020ea000ee000 152 1a2 0
                        |<---- NSAP prefix ----->||<--ESI--->|^^
                                                              SEL

NSAP アドレス全体の長さは常に 40 桁でなければなりません。 別のプレフィックスと、 お使いのアダプタにある ESI 以外の ESI を付けたアドレスも使えますので、 覚えておいて下さい。 セレクタバイト (SEL) の値は無視します。

### 2 枚の ATM NIC を、直接接続して動かす

2 枚の NIC を直接接続し、 間にスイッチを置かずに動かすこともできます。 簡単なテスト環境としては最高です。

まず、UTP か STP-5 を使うつもりなら、適したケーブルが必要です。 筆者らの経験では、 標準的な 100Base-T のケーブルで直接接続してもうまく行きませんでした。 使っているピン配置が違っているようです。 何度か試した結果、次のケーブルでうまくいくことが分かりました。

    RJ45                            RJ45
       1        ------------        7
       2        ------------        8

       7        ------------        1
       8        ------------        2

    3 番、4 番、5 番、6 番の各ピンは未接続

バック・ツー・バックケーブルの両端にある、 RJ45 コネクタに適当に色付けするという方法で、 例示する方が良いかもしれません。

    RJ45-1
       1 - 茶
       2 - 白／茶
       3 - 未接続
       4 - 未接続
       5 - 未接続
       6 - 未接続
       7 - オレンジ
       8 - 白／オレンジ

二番目のコネクタには次の色づけをします。

    RJ45-2
       1 - オレンジ
       2 - 白／オレンジ
       3 - 未接続
       4 - 未接続
       5 - 未接続
       6 - 未接続
       7 - 茶
       8 - 白／茶

1 番と 7 番、および 2 番と 8番を、それぞれ接続して、 超簡単なループバックケーブルを作ることもできます。

ここで、マシンを二台用意し、 名前をそれぞれ "virgil"、そして "nestor" とします。 名前は必要に応じて、ご自分のものに置き換えて下さい。

ATM コネクションの一方には、 ネットワーク版の atmsigd を使う必要があります。 また、他方には通常のユーザー版を使って下さい。 では、nestor で、 以下のようにして atmsigd を起動します。

    atmsigd -b -m network

virgil では、以下のようにします。

    atmsigd -b

スイッチが無いと、ILMI は使えません。 その代わり、`/etc/hosts.atm` を作って、そこに二つのダミーアドレスを書いて下さい。 この例の ATM hosts ファイルは次のようになります。

    47.0005.80FFE1000000F21A26D8.0020EA000EE0.00    nestor-atm
    47.0005.80FFE1000000F21A26D8.0020D4102A80.00    virgil-atm

もちろん、これは完全な模造アドレスですが、 公開されている ATM ネットワークやプライベートなものに接続しない限り、 問題にはならないと思います。 ドライバに正しくアドレスを設定するには、 この例の、virgil では以下のようにします

    atmaddr -a virgil-atm

そして nestor では

    atmaddr -a nestor-atm

のようにします。 では、両マシンで、atmarpd を通常のやり方でスタートしてください。 これで正しく動作する ATM の設定ができました（そのはずです）。 "IP over ATM" を動かすには、 の指示に従えば良いのです。

### Q.2931 メッセージダンパー

Q.2931 メッセージコンパイラは、 そのメッセージ用のプリティプリンタ（フォーマッタ）も生成します。 この実行可能ファイルを q.dump と言い、 `src/qgen` ディレクトリに格納します。 `make install` では、 他のディレクトリにはコピーされないので注意して下さい。

q.dump が想定している入力シーケンスは、 標準入力から、空白で区切った 16 進数のバイト列で、 メッセージが解析できる場合は、メッセージの構造を出力します。

例：

    % echo 09 03 80 00 05 5A 80 00 06 08 80 00 02 81 83 00 48 \
      00 00 08 | ./q.dump
    _pdsc = 9 "Q.2931 user-network call/connection control message"
    _cr_len = 3
    call_ref = 8388613 (0x800005)
    msg_type = 0x5a "RELEASE COMPLETE"
    _ext = 1
    _flag = 0 "instruction field not significant"
    _action_ind = 0 "clear call"
    msg_len = 6 (0x6)
      _ie_id = 0x08 "Cause"
        _ext = 1
        cause_cs = 0 "ITU-T standardized"
        _flag = 0 "instruction field not significant"
        _action_ind = 0 "clear call"
        _ie_len = 2 (0x2)
          _ext = 1
          location = 1 "private network serving the local user"
          _ext = 1
          cause = 3 "no route to destination"

## IP Over ATM

IP over ATM は、以下のプロトコルでサポートされています。

- クラシカル IP over ATM (CLIP、RFC1577 [] で定義されています)

- LAN エミュレーション (LANE、[] と [] で定義されています)

- マルチプロトコル・オーバー・ATM (MPOA、クライアントのみ、[] で定義されています)

### CLIP

デーモンプロセスは、ARP の問い合わせを行ない、 また問い合わせに答えるために使用します。 実際のカーネル部分は、小さなルックアップテーブルを保持していますが、 そこには部分的な情報しか入っていません。

マニュアルページには次のものがあります。 atmarpd 8, atmarp 8

atmarpd を動かす際は、その前にあらかじめ atmsigd と ilmid を走らせておかなければなりません。 `-b` オプションを使用して、この二つを確実に正しく同期させてください。 例えば、

    #!/bin/sh
    atmsigd -b
    ilmid -b
    atmarpd -b
    ...

は動作しますが、

    #!/bin/sh
    atmsigd &
    ilmid &
    atmarpd &
    ...

は、（まだ）うまくいかないことがよくあります。

atmarp は、ATMARP の設定に使用します。 まず、atmsigd と ilmid、それに atmarpd を動かす必要があります。 それから、以下のようにして、IP インタフェースを作成し、その設定を行ないます。

    # atmarp -c interface_name
    # ifconfig atm0 local_address possibly_more_options up

例：

    # atmarp -c atm0
    # ifconfig atm0 10.0.0.3 up

PVC しか使用しないのであれば、以下のようなコマンドを使って作れます。

    # atmarp -s 10.0.0.4 0.0.70

`null` キーワードを使う場合は、 NULL カプセル化を用います。 ARP には LLC/SNAP のカプセル化が必要になりますので注意して下さい。 したがって、NULL カプセル化は PVC の場合しか使えません。

SVC を使用する際、設定の追加作業いくらか必要になるかもしれません。 当該 LIS でそのマシンが ATMARP サーバーとして動作している場合は、 設定の追加は不要です。その他の場合は、 ATMARP サーバーの ATM アドレスを設定する必要があります。 これには、`arpsrv` というオプションで、 ネットワークアドレスのエントリを作成するという方法を用います。 例えば以下のように行ないます。

    # atmarp -s \
      10.0.0.0 47.0005.80.ffe100.0000.f215.1065.0020EA000756.00 \
      arpsrv

クライアントを設定する際は、 その前に、先に ATMARP サーバーを動かして設定しておかなければなりませんので、 注意して下さい。

カーネルの ATMARP テーブルは、 \path{/proc/net/atm/arp} を通じて読み出せます。 atmarpd に `-d` オプションを付けて起動すると、 atmarpd が使用するテーブルは、定期的に標準エラー出力に表示します。 `-d` オプション無しで atmarpd を起動すると、 テーブルはダンプディレクトリの `atmarpd.table` ファイルに書き出します （ダンプディレクトリのデフォルトは `/var/run` ですが、 `-D` オプションで変更できます）。 また、`atmarp -a` コマンドを使えば、そのテーブルが読み出せます。

### LAN エミュレーション

ATM で IP パケットを搬送するには、 "クラシカル IP over ATM" の他に、 LAN エミュレーション (LANE) を使ってもかまいません。 LANE は、ブロードキャストのサポートといったような、 従来の LAN 技術の特性をエミュレートするものです。 LANE サーバーのサポートに関しては、 linux-atm ディストリビューションにある、 `src/lane/USAGE` ファイルで説明しています。

マニュアルページには、次のものがあります。 bus 8, lecs 8, les 8, and zeppelin 8

LANE クライアントや LANE サービスを複数動かすつもりなら、 各デーモンごとに別々の ATM アドレスを指定する必要があります。 LANE デーモンはすべて、 同じようなサービスアクセスポイント (SAP) を使用しているので、 コネクション相互の区別をつけるには、ATM アドレスを変える必要があるのです。

ちょうど CLIP のように、LANE クライアントを構成しているのは二つの部分です。 一つは、zeppelin というデーモンプロセスで、これは LANE プロトコルを処理しています。 あとは、カーネルの部分で、LANE の ARP キャッシュを持っています。

zeppelin を動かす際は、その前に先に atmsigd と ilmid を走らせておく必要があります。 zeppelin がスタートすると、カーネルは新しいインタフェースを作るので、 以下のようにして設定できます。

    # zeppelin たぶん複数のオプションが付く &
    # ifconfig lec0 ローカルアドレス たぶん複数のオプションが付く up

以下の例では、LANE クライアントを 2 台動かしています。 最初のクライアントは、デフォルトのインタフェース lec0 とデフォルトの listen アドレスを使用し、 デフォルトの ELAN に参加しようとします。 もう一方の LANE クライアントには lec2 というインタフェースが与えられ、 ローカルアドレス `mybox3` にバインドし、 `myelan` という ELAN に参加しようとします。 そして、ELAN と イーサネットセグメントの間で、 パケットのブリッジを行ないます。 `mybox3` というアドレスは `/etc/hosts.atm` で定義してあります。 ブリッジングの残りの部分は、 Bridging mini-HOWTO [] を読めば設定できます。

    # zeppelin &
    # ifconfig lec0 10.1.1.42 netmask 255.255.255.0 \
                              broadcast 10.1.1.255 up
    #
    # zeppelin -i 2 -l mybox3 -n myelan -p &
    # ifconfig lec2 10.1.2.42 netmask 255.255.255.0 \
                              broadcast 10.1.2.255 up

何もしないと、zeppelin は、インタフェース lec0 を使い、 セレクタバイトの値を 0 にしてローカルの ATM アドレスにバインドします。 それから、LECS のウェルノウン・アドレスを使って LECS にコンタクトし、 LECS が定義している ELAN に参加し、 LES が定義している MTU サイズを認識します。ですからプロキシ LEC では 動作しません。 このパラメータは、 zeppelin 8 で定義している、コマンドラインのオプションを使って調整できます。

また、zeppelin は、1516 バイトというデフォルトの MTU サイズを越える MTU の ELAN なら、どれにでも自動的に参加します。 LANE インタフェースの MTU は、その時点の ELAN の MTU に合わせて、 インタフェース自身が自分で調整します。

LANE ARP キャッシュの状態は、 `/proc/net/atm/lec` を通じて監視できます。 各エントリでは、MAC アドレスと ATM アドレス、それに状態をリストしています。 有効なコネクションがある場合は、 そのコネクションの識別子もエントリにリストします。

LANE のサービス ( lecs 8 と、 les 8 および、 bus 8 ) は設定ファイルを用いて設定します。 この設定ファイルの構文は各マニュアルページにリストしてあります。

Linux LANE のサービスに関する詳細は、 Marko Kiiskilä の Master's Thesis [] で解説しています。

### MPOA

Linux の MPOA クライアントはユーザー空間の流儀を持ち続けています。 カーネルから分離した ATM サービスなのです。 カーネルが MPOA の入出力キャッシュを保持して、 パケットフォワーディングを行なっている間、 mpcd というデーモンプロセスが、 MPOA 制御パケットを処理します。

マニュアルページは mpcd 8 です。

atmsigd と ilmid は、mpcd の起動前に動かしておいて下さい。 MPOA は LANE トラフィックから IP レイヤ の流れを検知するので、 MPOA が機能する前に、zeppelin を動かしておく必要があるのです。 しかし、zeppelin と mpcd を動かす順序は決まっていません。 好きな時にどのデーモンでも殺せますし、 後で再起動する際も、他のデーモンの再起動は不要です。 MPOA を無効にするもっとも簡単な方法は、 動作中の mpcd を殺すことです。

以下の例は にあるもので、 LANE クライアントを 2 台動かしています。 ここでは、この LANE クライアントを用いる MPOA クライアントを 2 台追加しました。

    # zeppelin &
    # ifconfig lec0 10.1.1.42 netmask 255.255.255.0 \
                              broadcast 10.1.1.255 up
    # mpcd -s mybox1 -l mybox2 &
    #
    # zeppelin -i 2 -l mybox3 -n myelan -p &
    # ifconfig lec2 10.1.2.42 netmask 255.255.255.0 \
                              broadcast 10.1.2.255 up
    # mpcd -i 2 -s mybox4 -l mybox5 &

MPOA デーモンがデータと制御コネクションを初期化して受信する際、 別々の ローカル ATM アドレスを二つ使用する必要があります。 このアドレスは、例にあるように同じものでもかまいません。 でも、zeppelin は実際、他の mpcd とは違うものにしなければなりません。 デフォルトでは、mpcd は、LECS から設定情報を取り出しません。 LECS を用いた、コマンドラインの必要なオプションと例は、 mpcd のマニュアルページに示してあります。 ここには、利用できる残りのオプションも載せてあります。

MPOA の入出力キャッシュの内容は、 `/proc/net/atm/mpc` ファイルを通じて監視できます。

Linux MPOA クライアントは、デフォルトの UBR の代わりに、 ショートカット SVC 用の CBR トラフィッククラスもサポートします。 今後のショートカットに関する QoS 仕様は、 `/proc/net/atm/mpc` を使うようになり、そのように修正されることがあります。

    # echo add 130.230.54.146 tx=80000,1600 rx=tx > /proc/net/atm/mpc
    #             # generate enough traffic to trigger a shortcut
    # cat /proc/net/atm/mpc
    QoS entries for shortcuts:
    IP address
      TX:max_pcr pcr     min_pcr max_cdv max_sdu
      RX:max_pcr pcr     min_pcr max_cdv max_sdu
    130.230.54.146
         80000   0       0       0       1600
         80000   0       0       0       1600

    Interface 2:

    Ingress Entries:
    IP address      State     Holding time  Packets fwded  VPI VCI
    130.230.4.3     invalid   1160          0
    130.230.54.146  resolved  542           151            0   109
    ...

IP アドレス `130.230.54.146` のショートカットは先に示したパラメータを用いて確立しました。 フロー検出を拡張して、レイヤ 4 フローを完全にサポートするパッチも存在します。 レイヤ 4 フローは 五つのタプル （プロトコル、ローカルアドレス、ローカルポート、リモートアドレス、 リモートポート）で表現し、それらを使って、 アプリケーションとアプリケーションフローを区別します。 興味がおありなら、最新パッチに関しては ftp://sunsite.tut.fi/pub/Local/linux-atm/mpoa/ を参照して下さい。

## 日本語版謝辞

本 HOWTO の邦訳にあたり、JF プロジェクトの皆様に査読していただきました。 特に、水原さんと kaneko さんには貴重なアドバイスをいただきました。 この場を借りて御礼申し上げます。

## 図書目録

### 参考文献

### Linux ATM API

Werner
Almesberger
http://linux-atm.sourceforge.net/API/
July 1996

### Classical IP and ARP over ATM (RFC1577)

Mark
Laubach
January 1994

### LAN Emulation Over ATM -- Version 1.0

ATM Forum
February 1996

### LAN Emulation Over ATM -- Version 2 -- LUNI Specification

ATM Forum
July 1997

### Multi-Protocol Over ATM -- Version 1.0

ATM Forum
July 1997

### Bridging mini-Howto

Christopher
Cole
http://www.linuxdoc.org/HOWTO/mini/Bridge.html
March, 2001

### Implementation of LAN Emulation Over ATM in Linux

Marko
Kiiskilä
ftp://sunsite.tut.fi/pub/Local/linux-atm/misc/
October 1996