ドライバは lpt ドライバを統合したものとして実装されており、 インターネットのサポートと少なくとも 1 つの lpt デバイスを設定したカーネルに自動的に組み込まれます。 ブートプロセス中に検出され割り込みが割り当てられた各 lpt プリンタデバイスについて、 対応する ネットワークデバイスが生成されます。 使用可能なデバイスは
lp0: TCP/IP capable interfaceのようなメッセージによってアナウンスされます。
初期状態では lpt デバイスは印刷用にアクティブとなっており、 ネットワークインタフェースは非アクティブです。 しかし、一旦対応する デバイスが ifconfig(8) によって 'up' に設定されると、 ネットワークインタフェースが 'down' に設定されるまで印刷は行えません。
通信プロトコルは link0 フラグによって選択されます。
インタフェース MTU のデフォルト値は 1500 となっていますが、 ほかの値に設定することが可能です。 リンクの両端では同じ値の MTU に設定されることが必要です。
ピン ピン 説明 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 つのモードは同じ結線のものを使いますが、 どの線をハンドシェイクに使用するかが異なっています。
アイドル時、すべてのデータ線は 0 になっています。 各バイトは次のように 4 段階で送信されます。 送信側が上位 4 ビットを書き込み、ハンドシェイクラインを上げます。 受信側はその 4 ビットを読み、 読み込んだことを知らせるためにハンドシェイクラインを上げます。 送信側は下位 4 ビットをデータ線にセットし、ハンドシェイクラインを下げます。 受信側はデータを読み、ハンドシェイクラインを下げます。
パケットは固定値 0x08, 0x00 からなる 2 バイトのヘッダに IP ヘッダとデータが続く形式となっています。
パケットの開始は単にヘッダの最初のバイトを送信することで示されます。 パケットの終了はハンドシェイクラインの状態を変えずに、 データ線を反転する (すなわち直前に送信したニブルの 1 の補数を書く) ことによって示されます。
パケット終了のマークはハンドシェイク信号と出力データビットが 1 つの命令で書き込めることを前提にしていることに注意してください。 さもなければ、パケットデータ中のあるバイト値が パケット終了として誤って解釈されることが起こりえます。 これは PC のプリンタポートでは問題とはなりませんが、 このプロトコルを他の機器に実装する場合に注意が必要となります。
アイドル時にはすべてのデータ線は 0 になっています。 各バイトは次のように 4 段階で送信されます。 送信側が下位 4 ビットを書き込み、ハンドシェイクラインを上げます。 受信側はその 4 ビットを読み、 読み込んだことを知らせるためにハンドシェイクラインを上げます。 送信側は上位 4 ビットをデータ線にセットし、ハンドシェイクラインを下げます。 受信側はデータを読み、ハンドシェイクラインを下げます。 [LPIP モードとはニブルの順番が逆になっていることに注意してください。]
パケットの形式は次のようになります。
長さ (下位バイト) 長さ (上位バイト) 12 バイトの想定 MAC アドレス (FreeBSD では無視) 固定バイト 0x08 固定バイト 0x00 <IP データグラム> チェックサムバイト
長さには、ヘッダの 14 バイトが含まれますが、 長さを示すバイト自身とチェックサムバイトは含まれません。
チェックサムはすべてのバイト (繰り返しますが、ヘッダ部分は含みますが、チェックサムと長さのバイトは除きます) の単純な算術和です。 FreeBSD では送信時にはチェックサムを計算していますが、 受信したものについての確認は行っていません。
ハンドシェイク入力に選択されている信号線は 割り込みを生成するためには使われていないので、 パケットの開始は特別な方法で信号化することが必要です。 送信側は、データ線に値 0x08 を書き、 受信側がデータ線に 0x01 を書くことにより応答するのを待ちます。 その後、送信側はパケットの最初のバイト (長さバイト) の送信を開始します。
パケットの終了はパケット長から分かるため、 特別な方法での信号化はされません。 (データ線はアイドル状態である 0 に戻され、 次のパケットの開始とならないようにはされますが。)
ポーリングのタイムアウトはタイマではなく ループの回数によって制御されており、CPU の速度に依存しています。 これは実際にポートを読むために (低速な) ISA のバスサイクルを実行する必要があるため、 いくぶん安定化されています。