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

名称

lmcLMC (現在は SBE) 広域ネットワークインタフェースカードのためのデバイスドライバ

書式

このドライバを利用者のカーネルに組み込むには、次の行をカーネル設定ファイルに追加します:

device lmc

代わりに、ブート時に、このモジュールをロードするためには、

if_lmc_load="YES"

/boot/loader.conf に追加します。 loader.conf(5) を参照してください。

ラインプロトコルを利用者のカーネルに組み込むためには、次を追加します:

options NETGRAPH
device sppp

利用者のカーネルに、ラインプロトコルを組み込む必要はありません、 kldload(8) で、後でロードすることができます。たとえ、SPPP も Netgraph もカーネルに設定されていないなくても、ドライバは、生の IP パケットを送信して受信することができます。 Netgraph と SPPP を、ともに有効にすることができます。 Netgraph は、 rawdata フックが接続されているなら、使用されます。

解説

これは、PCI バス WAN インタフェースカードのためのオープンソース UNIX デバイスドライバです。それは、同期回路で HDLC フレームでパケットを送信して受信します。一般的な PC、と UNIX といくつかの LMC / SBE カードは、 オープン ルータを作成します。このドライバは、 FreeBSD, NetBSD, OpenBSD, BSD/OS と Linux OS で動作します。それは、i386 (SMP 32 ビットのリトルエンディアン) と Sparc (64 ビットのビッグエンディアン) アーキテクチャでテストされました。

lmc ドライバは、次のカードで動作しています:

  • SBE wanADAPT-HSSI (LMC5200)

    ハイスピードシリアルインタフェース, EIA612/613, 50-ピンコネクタ, 0 から 52 Mb/s, DTE のみ.

  • SBE wanADAPT-T3 (LMC5245)

    T3: two 75-ohm BNC コネクタ, C-Parity または M13 フレーミング, 44.736 Mb/s, up to 950 ft.

  • SBE wanADAPT-SSI (LMC1000)

    同期シリアルインタフェース, V.35, X.21, EIA449, EIA530(A), EIA232, 0 から 10 Mb/s, DTE または DCE.

  • SBE wanADAPT-T1E1 (LMC1200)

    T1 または E1: RJ45 conn, 100 または 120 ohms, T1-ESF-B8ZS, T1-SF-AMI, E1-(many)-HDB3, 1.544 Mb/s または 2.048 Mb/s, up to 6 Kft.

カードは、高性能 PCI インタフェース、 HDLC 機能と統合 モデム (T1、T3) または モデム インタフェース (HSSI と SSI) のいずれかを含んでいます。

PCI
PCI インタフェースは、DEC 21140A "Tulip"ファーストイーサネットチップです。このチップは、スキャッタ/ギャザ (scatter/gather) DMA が付いた効率的な PCI 実装で、100 Mb/s 全二重 (ここで必要とされるより 2 倍の速さ) で実行することができます。
HDLC
HDLC 機能 (ISO-3309: フラグ、ビットスタッフィング、CRC) は、 Media Independent Interface (MII) を通してイーサネットチップとと通信をする Field Programmable Gate Array (FPGA) でで実装されています。 FPGA のハードウェアは、イーサネットパケットと HDLC フレームオンザフライ (on-the-fly) の間で変換されます。イーサネットのための WAN PHY チップとして考えます。
Modem
モデムチップは、カードによって大きく違っています。 HSSI カードは、 EIA-612/613 インタフェースを実装するために ECL10K チップを使用します。 T3 カードは、TranSwitch TXC-03401 フレーマチップを使用します。 SSI カードは、Linear Technology LTC1343 モデムインタフェースチップを使用します。 T1 カードは、BrookTree/Conexant/Mindspeed Bt8370 フレーマとラインインタフェースチップを使用します。

ラインプロトコルは、デバイスドライバ上と、インターネットプロトコル下に存在しています。それらは、一般的に HDLC フレームでパケットをカプセル化し、プロトコルマルチプレクシングとセキュリティのような問題をよりハイレベルに処理します。このドライバは、いくつかのラインプロトコルパッケージと互換性があります:

Netgraph
netgraph(4) は、カーネルローダブルモジュールとして多くの基本的なパケット取り扱い機能を実装しています。多くのプロトコルを実装するためにグラフでそれらを相互接続することができます。設定は、カーネルを再構築しないでユーザランドから行われます。パケットは、ドライバの rawdata フックが接続されているなら、このインタフェースを通して送信して受信され、そうでなければ、ifnet インタフェース (SPPP と RawIP) が使用されます。 ASCII 設定制御メッセージは、現在サポートされて いません
SPPP
sppp(4) は、カーネルで Synchronous-PPP、Frame-Relay と CiscoHDLC を実装しています。
RawIP
ドライバに組み込まれた、このヌルラインプロトコルは、オーバヘッドの余分なバイトなしで、終点 (end point) の状態なしで、 HDLC フレーム (通称 IPin-HDLC) で生の IPv4 と IPv6 パケットを送信して受信します。

使用例

ifconfig と lmcconfig

プログラム lmcconfig(8) は、 ifconfig(8) の範囲を超えてインタフェースパラメータを操作します。通常の操作では、ほんのいくつかの引数のみが必要です:

-X
外部の SPPP ラインプロトコルパッケージを選択します。
-x
組み込みの RawIP ラインプロトコルパッケージを選択します。
-Z
PPP ラインプロトコルを選択します。
-z
Cisco-HDLC ラインプロトコルを選択します。
-F
Frame-Relay ラインプロトコルを選択します。
lmcconfig lmc0
インタフェース設定と状態を表示します。
lmcconfig lmc0 -D
デバイスドライバだけからデバッグ出力を有効にします。
ifconfig lmc0 debug
デバイスドライバと上記のラインプロトコルモジュールからデバッグ出力を有効にします。また、コンソールに現れるデバッグメッセージは、ファイル /var/log/messages にも書き込まれます。 警告: いろいろなことが間違うようになるとき、デバッグメッセージの洪水は、コンソールを無力にし、マシンを攻め滅ぼすことができます。

操作

SPPP と Netgraph を使用して PPP リンクをアクティブにします:

ngctl mkpeer lmc0: sppp rawdata downstream 
ifconfig sppp0 10.0.0.1 10.0.0.2

SPPP のみを使用して PPP リンクをアクティブにします:

lmcconfig lmc0 -XYZ 
ifconfig lmc0 10.0.0.1 10.0.0.2

SPPP と Netgraph を使用して Cisco-HDLC リンクをアクティブにします:

ngctl mkpeer lmc0: sppp rawdata downstream 
ifconfig sppp0 10.0.0.1 10.0.0.2 link2

SPPP だけを使用して Cisco-HDLC リンクをアクティブにします:

lmcconfig lmc0 -XYz 
ifconfig lmc0 10.0.0.1 10.0.0.2

Netgraph だけを使用して Cisco-HDLC リンクをアクティブにします:

ngctl mkpeer lmc0: cisco rawdata downstream 
ngctl mkpeer lmc0:rawdata iface inet inet 
ifconfig ng0 10.0.0.1 10.0.0.2

SPPP を使用して Frame-Relay DTE リンクをアクティブにします:

lmcconfig lmc0 -XYF 
ifconfig lmc0 10.0.0.1 10.0.0.2

(SPPP は ANSI T1.617 annex D LMI を実装しています。)

Netgraph を使用して Frame-Relay DTE リンクをアクティブにします:

ngctl mkpeer  lmc0: frame_relay rawdata downstream 
ngctl mkpeer  lmc0:rawdata lmi dlci0 auto0 
ngctl connect lmc0:rawdata dlci0 dlci1023 auto1023 
ngctl mkpeer  lmc0:rawdata rfc1490 dlci500 downstream 
ngctl mkpeer  lmc0:rawdata.dlci500 iface inet inet 
ifconfig ng0 10.0.0.1 10.0.0.2

これは、多くがある、 1 つの あり得る Frame Relay 設定です。

ドライバだけを使用して RAWIP リンクをアクティブにします:

lmcconfig lmc0 -x 
ifconfig lmc0 10.0.0.1 10.0.0.2

Netgraph を使用して RAWIP リンクをアクティブにします:

ngctl mkpeer lmc0: iface rawdata inet 
ifconfig ng0 10.0.0.1 10.0.0.2

ドライバがアンロードされ、次に、ロードされるなら、次によってフックを再接続します:

ngctl connect lmc0: ng0: rawdata inet

テスト

ループバック付きテスト

ループバックでのテストは、1 つのカードだけを必要とします。次の多くのポイントでパケットをループにすることができます: PCI チップで、モデムチップで、ループバックプラグを通して、ローカルの外部の設備で、または回路の終端においてです。

ifconfig(8) でカードをアクティブにします:

ifconfig lmc0 10.0.0.1 10.0.0.1

PCI チップを通してすべてのカードをループにすることができます。モデムフレーマとモデムラインインタフェースを通して内部のモデムがあるカードをループにすることができます。ドライバ/受信機チップを通して外部のモデムのためのカードをループにすることができます。詳細については、 lmcconfig(8) を参照してください。

ループバックプラグは、カードの上のすべてをテストします。

HSSI
SBE (と、その他) からループバックプラグを順序付けすることができます。転送クロックは、通常外部のモデムから供給されます。 HSSI カードがループバックプラグで操作されるとき、 PCI バスクロックは、転送クロック (通常 33 MHz) として使用されなければなりません。ループバックプラグで HSSI カードをテストするとき、次の通り、 lmcconfig(8) でそれを設定します:

lmcconfig lmc0 -a 2

-a 2”は、転送クロックとして PCI バスクロックを選択します。

T3
短い同軸ケーブルで 2 つの BNC ジャッキを接続します。
SSI
SBE (だけ) からループバックプラグを順序付けできます。転送クロックは、通常外部のモデムによって供給されます。 SSI カードがループバックプラグで操作されるとき、オンボードクロックシンセサイザが使用されなければなりません。ループバックプラグで SSI カードをテストするとき、次の通り、 lmcconfig(8) でそれを設定します:

lmcconfig lmc0 -E -f 10000000

-E は、DCE モードのカードをソースの転送クロックを置きます。“ -f 10000000”は、内部のクロックソースを 10 Mb/s に設定します。

T1/E1
ループバックプラグは、2 本の結線、ピン 1 をピン 4 とピン 2 をピン 5 に接続するモジュラプラグ (modular plug) です。

また、ローカルモデム (HSSI と SSI) またはループバックを設定する NI (T1 と T3) を接続することによってテストすることができます。カードは、完全な回路をテストできるように、ループバックリモート装置へのシグナルを生成することができます。詳細については、 lmcconfig(8) を参照してください。

モデム付きのテスト

モデムでのテストは、異なったタイプの 2 枚のカードを必要とします。
T3/HSSI
(Digital Link、Kentrox Larscom などで作らた) HSSI インタフェースで T3 モデムがあるなら、1 台のマシンの HSSI カードともう片方のマシンの T3 カードを使用します。 T3 同軸ケーブルは、ヌルモデム設定 (下記参照) を使用しなければなりません。
T1/V.35
V.35、X.21 または EIA530 インタフェースがある T1 (1E) モデムがあるなら、 1 台のマシンの SSI カードともう片方のマシンの T1 カードを使用します。 T1 のヌルモデムケーブルを使用します (下記参照)。

ヌルモデムケーブル付きのテスト

ヌルモデムケーブルでのテストは、同じタイプの 2 枚のカードを必要とします。
HSSI
SBE から 3 メートル HSSI ヌルモデムケーブルを順序付けできます。いざというときには、数メートルまでの 50 ピン SCSI-II ケーブルは、まっすぐな HSSI ケーブル (ヌルモデムケーブルでない) として動作します。より長いケーブルは、ケーブルのインピーダンスが異なっているので、専用の HSSI ケーブルであるべきです。転送クロックは、通常外部のモデムから供給されます。 HSSI カードが、ヌルモデムケーブルによって接続されるとき、転送クロック (通常 33 MHz) として、PCI バスクロックを使用することができます。ヌルモデムケーブルで HSSI カードをテストするとき、次の通り、 lmcconfig(8) でそれを設定します:

lmcconfig lmc0 -a 2

-a 2”は、転送クロックとして PCI バスクロックを選択します。

T3
T3 ヌルモデムケーブルは、BNC コネクタがあるちょうど 75 オーム同軸ケーブルです。 1 枚のカードの上の TX OUT は、もう片方のカードで RX IN に接続されるべきです。いざというときには、50 オーム thin (薄い) イーサネットケーブルは、 通常 数メートルまで動作しますが、それらは、長くなると動作 しません — 75 オーム同軸が 必要です
SSI
SBE から 3 メートルのヌルモデムケーブルを順序付けすることができます。 SSI ヌルモデムケーブルは、V.36/EIA449 のケーブルタイプを報告します。転送クロックは、通常外部のモデムから供給されます。 SSI カードがヌルモデムケーブルによって接続されるとき、オンボードクロックシンセサイザが使用されます。ヌルモデムケーブルで SSI カードをテストするとき、次の通り、 lmcconfig(8) でそれを設定します:

lmcconfig lmc0 -E -f 10000000

-E は、DCE モードのカードをソースの転送クロックに置きます。“ -f 10000000”は、内部クロックソースを 10 Mb/s に設定します。

T1/E1
T1 のヌルモデムケーブルには、1 つのプラグでピン 1 と 2 を、他のプラグでピン 4 と 5 を接続する 2 本のツイストペアがあります。ロックタブ指向の下で、ピン 1 が左の、プラグのケーブルエントリホールを検索します。ツイストペアイーサネットケーブルは、優れたまっすぐな T1 ケーブルを作成します。残念なことに、イーサネットクロスオーバケーブルは、T1 ヌルモデムケーブルとして動作しません。

操作上の注意

パケット長

最大の転送と受信のパケット長は、無制限です。最小の転送と受信のパケット長は、1 バイトです。

1 つのパケットの後にクリンアップし、次のパケットのためにセットアップすることは、いくつかの DMA 参照を行うことを必要とします。これは、アダプタが遅れを取ることを引き起こして、短いパケットの持続時間より長くかかるかもしれません。典型的な PCI バストラフィックレベルとメモリシステムレイテンシ (待ち時間) のために、およそ 20 バイトより長い back-to-back パケットは、常に (53 バイトのセルは動作し) 動作しますが、 20 バイトより短い数 100 の back-to-back パケットは、パケットを落とされます。 IPv4 パケットのヘッダが少なくとも 20 バイト長であるので、これは、通常、問題となりません。

このデバイスドライバは、パケットサイズに制約を課しません。ほとんどのオペレーティングシステムは、デフォルトの最大転送ユニット (Maximum Transmission Unit (MTU)) を 1500 バイトに設定します。正当な範囲は、通常 (72..65535) です。次でこれを変更することができます。

ifconfig lmc0 mtu 2000

SPPP は、PPP のために (128..MRU の終り) の MTU、 Cisco-HDLC のために 1500 バイトの MTU を強制します。 RAWIP は、デフォルトの MTU を 4032 バイトに設定しますが、何にでも変更することができます。

BPF - バークレイパケットフィルタ

このドライバは、 bpf(4)、Berkeley Packet Filter のためのフックがあります。 BPF に報告されたラインプロトコルヘッダ長は、SPPP と P2P ラインプロトコルのためには 4 バイト、RawIP のためには 0 バイトです。

BPF サポートをカーネルに含めるには、次の行を conf/YOURKERNEL に追加します:

device bpf

BPF カーネルインタフェースをテストするために、2 台のマシンの間のリンクを立ち上げ、次に、 ping(8)tcpdump(1) を実行します:

ping 10.0.0.1

そして、異なるウィンドウでは:

tcpdump -i lmc0

tcpdump(1) からの出力は、次のようになるはずです:

03:54:35.979965 10.0.0.2 > 10.0.0.1: icmp: echo request 
03:54:35.981423 10.0.0.1 > 10.0.0.2: icmp: echo reply

ラインプロトコル制御パケットは、ときどき ping(8) パケットの間に現れます。

デバイスポーリング

T3 受信機は、1 秒毎に 100K 以上の割り込みを生成することができ、これによって、システムは、“live-lock”することができます: 時間のすべてを割り込みのサービスに費やします。 FreeBSD には、live-lock を防ぐためにポーリングメカニズムがあります。

FreeBSD のメカニズムは、永久にカードからの割り込みを無効にし、代わりにカードの割り込みサービスルーチンは、カーネルが (システムコール、タイマ割り込みなど) に入られて、カーネルのアイドルループから来ているたびに呼び出されます。これは、何らかのレイテンシ (待ち時間) を追加します。ドライバは、制限された数のパケットを処理することが許可されます。このように消費できる CPU の割合は、設定可能です。

どのようにポーリングモードを有効にするかに関する詳細については polling(4) マニュアルページを参照してください。

SNMP: シンプルネットワーク管理プロトコル

このドライバは、Simple Network Management Protocol のエージェントによって管理された Network Interface Object になるために何が必要であるかを承知しています。ドライバは、次のための MIB を作成するために SNMP エージェントのために十分な SNMP フォーマット設定と状態情報をエクスポートします。

  • RFC-2233: インタフェースグループ,
  • RFC-2496: DS3 インタフェース,
  • RFC-2495: DS1/E1 インタフェース,
  • RFC-1659: RS232-like インタフェース Ns 。

SNMP エージェントは、カーネル関数ではなく、ユーザプログラムです。エージェントは、Netgraph 制御メッセージまたは ioctl(2) システムコールを使用することによって、設定と状態情報を検索できます。ユーザプログラムは、SNMP 状態が更新された後に 1 秒毎に一度増加される sc->cfg.ticks をポーリングするべきです。

HSSI と SSI LED

カードは、すべての 3 つの緑色の LED がオン (左上のものが点滅しているはず) で赤い LED がオフであるなら、操作可能のはずです。電源オンでモジュールがアンロードのときに、すべての 4 つの LED がオンです。

RED upper-right 転送クロックなし
GREEN upper-left 点滅しているなら、デバイスドライバは動作中
GREEN lower-right モデムシグナルは良好
GREEN lower-left ケーブルは、プラグが入っている (SSI のみ)

T1E1 と T3 LED

左上の緑色の LED が点滅して、他のすべての LED がオフであるなら、カードは、操作可能のはずです。 T3 カードのために、他の LED がオンであるか、または点滅しているなら、同軸ケーブルを交換してみてください! 電源オンでモジュールがアンロードのときに、すべての 4 つの LED がオンです。

RED upper-right 受信されたシグナルは間違い
GREEN upper-left 点滅するなら、デバイスドライバは、動作中
BLUE lower-right アラーム情報シグナル (AIS)
YELLOW lower-left リモート警報表示 (RAI)

緑の LED デバイスドライバが動作中であるなら、LED が点滅
赤の LED 外側のループバックが動作中であるなら、LED が点滅
青の LED AIS 送信なら、LED が点滅、受信 AIS なら、点灯
黄色の LED RAI 送信なら、LED が点滅、受信 RAI なら、点灯

E1 フレーミング

通常、電話会社は、顧客が Frame Alignment Signal (FAS) をタイムスロット 0 に置くと主張します。また、Cyclic Redundancy Checksum (CRC) は、タイムスロット 0 に乗ることができます。 Channel Associated Signalling (CAS) は、タイムスロット 16 を使用します。電話会社の言葉で、 signalling は、フックのオン/オフ、ベルを鳴らす、ビジーなどです。 signalling は、ここで必要でなく、 64 KB/s を費します。もう一方の終りがそれを主張するなら、E1-CAS 形式のみを使用します! 公衆回線で E1-FAS+CRC フレーミング形式を使用します。プライベート回線にインストールされた設備によって、データ (E1-NONE) のためのすべての 32 タイムスロットを使用することができます。

T3 フレーミング

M13 は、28 T1s を T3 に多重送信するための技術です。 Muxe は、速度適合トリビュトリ (tributary) ために C-bit を使用します。 Muxing は、ここで必要でなく、FEBE と FEAC ビットを侵害します。もう一方の終りがそれを主張するなら、 T3-M13 形式のみを使用します! できれば、T3-CParity フレーミング形式を使用します。 Facility Data Link のループタイミング、Fractional T3、と HDLC パケットは、サポート されていません

T1 と T3 フレームオーバヘッド関数

  • Performance Report Messages (PRMs) は、T1-ESF で有効にされます。
  • Bit Oriented Protocol (BOP) は、T1-ESF で有効にされます。
  • in-band ループバック制御 (フレームされるかされないか) は、T1-SF で有効にされます。
  • Far End Alarm and Control (FEAC) メッセージは、T3-CPar で有効にされます。
  • Far End Block Error (FEBE) は、T3-CPar で有効にされます。
  • Remote Alarm Indication (RAI) は、T3-Any で有効にされます。
  • ループバックは、300 秒の後にリモートでタイムアウトを開始します。

T1/E1 'Fractional' 64 kb/秒タイムスロット

T1 は、タイムスロット 24..1 を使用します。 E1 は、タイムスロット 31..0 を使用します。 E1 は、FAS オーバヘッドのために TS0 を、CAS オーバヘッドのために TS16 を使用します。 E1-NONE には、オーバヘッドが ない ので、すべての 32 TS は、データに利用可能です。設定パラメータに 32 1s/0s を設定することによってタイムスロットを有効/無効にします。 E1 オーバヘッドタイムスロットを有効にするか、または T1 のために TS0 または TS25-TS31 を有効にすることは、より良いことを知っている、ドライバによって無視されます。デフォルトの TS パラメータ、0xFFFFFFFF は、選択されるフレーム形式は何でもタイムスロットの最大数を有効にします。 56 KB/s のタイプスロットは、サポートされて いません

T1 生 (Raw) モード

特別なゲートアレイマイクロコードは、T1/E1 カードのために存在しています。 24 バイトの各 T1 フレームは、パケットとして扱われます。生の T1 バイトストリームをメインメモリに引き渡して、メインメモリから転送することができます。 T1 カードは、フレーミングビットを追加するか、または削除しますが、データは変更しません。ソフトウェアがすべての仕事をして、ATM セルを、この方法で転送して、受信することができます。しかし、それは難しくはありません。結局、それは、1.5Mb/s 秒のみです!

T3 サーキット (回路) エミュレーションモード

特別なゲートアレイマイクロコードは、T3 カードのために存在しています。 595 バイトの各 T3 フレームは、パケットとして扱われます。生の T3 シグナルを パケット化 して、(何らかのプロトコルを使用して) パケットネットワークを通して転送して、次に、終端で T3 シグナルとして 再編成 することができます。遠い入力シグナルに 頻繁にロック することができるように、出力送信機のビット伝送速度をソフトウェアから制御できます。

HSSI と SSI 転送クロック

同期インタフェースは、モデムケーブルの speed-of-light (光の速度) の遅延よって引き起こされる ねじれ (skew) を排除するために 2 つの転送クロックを使用します。 DCE (モデム) は、ST、送信タイミング、最初の転送クロックを駆動します。 ST を受信し、クロックのためにそれを使用する DTE (ホスト) は、データ、TD をモデムケーブルに転送します。また、DTE は、DCE の方に戻る ST のコピーと TT と呼び、転送タイミング、2 番目の転送クロックを駆動します。 DCE は、TT と TD を受信し、フリップフロップへのクロック TD に TT を使用します。 TT は、TD (に関連している ねじれ (skew) がない) と同じ遅延を経験します。したがって、ケーブルの長さは、データ/クロックタイミングに影響しません。

歴史

Ron Crane は、PCI インタフェースとしてファーストイーサネットを使用する着想があり、 WAN カードを作るために Ethernet-to-HDLC ゲートアレイを追加しました。 David Boggs は、Ethernet-to-HDLC ゲートアレイと PC カードを設計しました。私たちは弊社、LAN Media Corporation (LMC) でこれを行いました。 SBE Corp. は、 LMC を獲得して、カードを作り続けています。

カードが Tulip イーサネットチップを使用するので、私たちは Matt Thomas のありふれた de(4) ドライバから始めました。 Michael Graff は、イーサネットものと追加された HSSI ものを取り除きました。 Basil Gunn は、 Solaris (失われている) にそれを移植し、 Rob Braun は、それを Linux に移植しました。 Andrew Stanley-Jones は、3 つ以上のカードのサポートを追加して、 lmcconfig(8) の最初のバージョンを書きました。 David Boggs は、すべてを書き直して、今、それに責任を感じます。

作者

David Boggs <boggs@boggs.palo-alto.ca.us>
February 8, 2012 FreeBSD