スポンサーリンク

LP(4) FreeBSD/i386 カーネルインタフェースマニュアル LP(4)

名称

lp − プリンタポートインターネットプロトコルドライバ

書式

ifconfig lp0 自アドレス 相手アドレス [−link0]

device lpt0 at isa? port? tty irq 7

解説

lp ドライバによって、PC パラレルプリンタポートを、同様に設定された 2 つの システム間で、 point-to-point ネットワークインタフェースとして使うことが できます。データは一度に 4 ビットずつ転送し、入力にはプリンタ状態信号を使 用します。よって、特別な双方向ハードウェアは必要とせず、割り込みで動作す る標準の AT 互換のプリンタポートを使うことができます。

lp ドライバは lpt ドライバを統合したものとして実装されており、インター ネットのサポートと少なくとも 1 つの lpt デバイスを設定したカーネルに自動 的に組み込まれます。ブートプロセス中に検出され割り込みが割り当てられた各 lpt プリンタデバイスについて、対応する lp ネットワークデバイスが生成され ます。使用可能なデバイスは

lp0: TCP/IP capable interface

のようなメッセージによってアナウンスされます。

初期状態では lpt デバイスは印刷用にアクティブとなっており、ネットワークイ ンタフェースは非アクティブです。しかし、一旦対応する lp デバイスが ifconfig(8) によって ’up’ に設定されると、ネットワークインタフェースが ’down’ に設定されるまで印刷は行えません。

通信プロトコルは link0 フラグによって選択されます。

       −link0

(デフォルト) FreeBSD モード (LPIP) を使用します。もう一つの モードに比べシンプルなもので、やや効率が良いものです。

link0
Cyrnwr/Linux 互換のモード (CLPIP) を使用します。このモードは イーサネットパケットヘッダをシミュレートしており、他のタイプ の機器とのインタフェースが容易です。

インタフェース MTU のデフォルト値は 1500 となっていますが、ほかの値に設定 することが可能です。リンクの両端では同じ値の MTU に設定されることが必要で す。

ケーブルの接続
2 つのパラレルポートを接続するケーブルは、次のように結線されていることが 必要です。

ピン

ピン

説明

2

15

Data0 -> ERROR*

3

13

Data1 -> SLCT

4

12

Data2 -> PE

5

10

Data3 -> ACK*

6

11

Data4 -> BUSY

15

2

ERROR* -> Data0

13

3

SLCT -> Data1

12

4

PE -> Data2

10

5

ACK* -> Data3

11

6

BUSY -> Data4

18-25

18-25

グランド

この結線のケーブルは ’Laplink’ ケーブルとして広く入手可能であり、よく黄色 にカラーリングされています。

接続は対称的であり、各方向で 5 本を使用します (データに 4 本とハンドシェ イク用に 1 本)。 2 つのモードは同じ結線のものを使いますが、どの線をハンド シェイクに使用するかが異なっています。

FreeBSD LPIP モード

信号線は次のように使われます。

       Data0 (ピン 2)

出力データのビット 0。

Data1 (ピン 3)
出力データのビット 1。

Data2 (ピン 4)
出力データのビット 2。

Data3 (ピン 5)
ハンドシェイク出力。

Data4 (ピン 6)
出力データのビット 3。

ERROR* (ピン 15)
入力データのビット 0。

SLCT (ピン 13)
入力データのビット 1。

PE (ピン 12)
入力データのビット 2。

BUSY (ピン 11)
入力データのビット 3。

ACK* (ピン 10)
ハンドシェイク入力。

アイドル時、すべてのデータ線は 0 になっています。各バイトは次のように 4 段階で送信されます。送信側が上位 4 ビットを書き込み、ハンドシェイクライン を上げます。受信側はその 4 ビットを読み、読み込んだことを知らせるためにハ ンドシェイクラインを上げます。送信側は下位 4 ビットをデータ線にセットし、 ハンドシェイクラインを下げます。受信側はデータを読み、ハンドシェイクライ ンを下げます。

パケットは固定値 0x08, 0x00 からなる 2 バイトのヘッダに IP ヘッダとデータ が続く形式となっています。

パケットの開始は単にヘッダの最初のバイトを送信することで示されます。パ ケットの終了はハンドシェイクラインの状態を変えずに、データ線を反転する ( すなわち直前に送信したニブルの 1 の補数を書く) ことによって示されます。

パケット終了のマークはハンドシェイク信号と出力データビットが 1 つの命令で 書き込めることを前提にしていることに注意してください。さもなければ、パ ケットデータ中のあるバイト値がパケット終了として誤って解釈されることが起 こりえます。これは PC のプリンタポートでは問題とはなりませんが、このプロ トコルを他の機器に実装する場合に注意が必要となります。

Crynwr/Linux CLPIP モード
信号線は次のように使われます。

Data0 (ピン 2)
出力データのビット 0。

Data1 (ピン 3)
出力データのビット 1。

Data2 (ピン 4)
出力データのビット 2。

Data3 (ピン 5)
出力データのビット 3。

Data4 (ピン 6)
ハンドシェイク出力。

ERROR* (ピン 15)
入力データのビット 0。

SLCT (ピン 13)
入力データのビット 1。

PE (ピン 12)
入力データのビット 2。

ACK* (ピン 10)
入力データのビット 3。

BUSY (ピン 11)
ハンドシェイク入力。

アイドル時にはすべてのデータ線は 0 になっています。各バイトは次のように 4 段階で送信されます。送信側が下位 4 ビットを書き込み、ハンドシェイクライン を上げます。受信側はその 4 ビットを読み、読み込んだことを知らせるためにハ ンドシェイクラインを上げます。送信側は上位 4 ビットをデータ線にセットし、 ハンドシェイクラインを下げます。受信側はデータを読み、ハンドシェイクライ ンを下げます。 [LPIP モードとはニブルの順番が逆になっていることに注意して ください。]

パケットの形式は次のようになります。

長さ (下位バイト)
長さ (上位バイト)
12 バイトの想定 MAC アドレス (FreeBSD では無視)
固定バイト 0x08
固定バイト 0x00
<IP データグラム>
チェックサムバイト

長さには、ヘッダの 14 バイトが含まれますが、長さを示すバイト自身とチェッ クサムバイトは含まれません。

チェックサムはすべてのバイト (繰り返しますが、ヘッダ部分は含みますが、 チェックサムと長さのバイトは除きます) の単純な算術和です。 FreeBSD では送 信時にはチェックサムを計算していますが、受信したものについての確認は行っ ていません。

ハンドシェイク入力に選択されている信号線は割り込みを生成するためには使わ れていないので、パケットの開始は特別な方法で信号化することが必要です。送 信側は、データ線に値 0x08 を書き、受信側がデータ線に 0x01 を書くことによ り応答するのを待ちます。その後、送信側はパケットの最初のバイト (長さバイ ト) の送信を開始します。

パケットの終了はパケット長から分かるため、特別な方法での信号化はされませ ん。 (データ線はアイドル状態である 0 に戻され、次のパケットの開始とならな いようにはされますが。)

関連項目

lpt(4), ifconfig(8)

バグ

データの転送中のハンドシェイクにはビジーウェイトループが使われています。 (さらに、受信側システムでのパケット開始の割り込みに応答するための待ちにお いても同様です。) そのため、低速なシステムと通信を行っている高速なシステ ムではかなりの CPU 時間を消費してしまいます。これは ハンドシェイクの信号 の選択により CLPIP モードでは避けられないものです。理論的には LPIP モード の場合では改善することができます。

ポーリングのタイムアウトはタイマではなくループの回数によって制御されてお り、CPU の速度に依存しています。これは実際にポートを読むために (低速な) ISA のバスサイクルを実行する必要があるため、いくぶん安定化されています。

FreeBSD 10.0 March 4, 1996 FreeBSD 10.0

スポンサーリンク