LP(4) | FreeBSD Kernel Interfaces Manual | LP(4) |
名称
lp — プリンタポートのインターネットプロトコルドライバ書式
ifconfig | plip0 myaddress hisaddress [ -link0] |
device ppbus
device plip
device ppc
解説
lp ドライバは、2 つのよく似た設定のシステム間のポイントツーポイントネットワークインタフェースとして PC パラレルプリンタポートを使用できるようにします。データは入力のためにプリンタの状態信号線を使用して、一度に 4 ビットずつ転送します。したがって、特別な双方向のハードウェアは必要がなく、割り込みで動作する標準の AT 互換のプリンタポートが使用されます。ブートプロセスの間に、プローブされ割り込みを割り当てられた plip デバイス毎に、対応する network デバイスが作成されます。
ifconfig(8) で lp デバイスを設定すればネットワークインタフェースが 'down' と設定されるまで PLIP のために対応する parallel port bus (パラレルポートバス) を予約します。
通信プロトコルは、 link0 フラグによって選択されます:
- -link0
- (デフォルト) FreeBSD モード (LPIP) を使用します。これは、2 つのモードの簡単なほうで、わずかに効率的です。
- link0
- Crynwr/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 ヘッダとデータが続きます。
パケットの開始は、単にヘッダの最初のバイトを信号で送ることによって示されます。パケットの終わりは、ハンドシェイクの状態を変えないでデータ線を反転する (すなわち、送信された前のニブル (4 ビット) の 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 の状態に戻されますが) パケットの終わりはパケットの長さから推定されて、特に信号を送りません。
バグ
ビジーウェートループは、ハンドシェイクバイトの間に使用されます (そして、なお悪いことに、パケットの開始のための割り込みに応答するための受信システムを待つときに)。そのため、低速のシステムと通信する高速のシステムは、過剰の CPU を消費します。これは、ハンドシェイクの信号線の選択のために CLPIP モードの場合は、避けられません。理論的には LPIP モードの場合は、改良することができます。ポーリングのタイムアウトは、タイマよりむしろループの繰り返しを数えることによって制御されるので、CPU の速度に依存しています。これは、実際にポートを読み込むために (低速の) ISA バスサイクルを実行する必要性によっていくらか安定させられています。
March 4, 1996 | FreeBSD |