nf は、マルチスレッド化された、読み込みや複製が可能な STREAMS ハードウェアデバイスドライバです。このドライバでは、SBus カード内の DP83265A (BSI-2) FDDI コントローラにおいてコネクションレス型のデータリンクプロバイダインタフェース (dlpi(7P)) を使用することができます。このドライバで使用することができる FDDI カードの数には制限がありません。nf ドライバは、BSI-2、BMAC、PLAYER+ ハードウェアの基本的な機能を提 供します。機能には、チップの初期化、フレームの転送と受信、マルチキャストとプロミスキュアスへの対応、エラーからの回復および報告が含まれます。
複製された文字型特殊デバイスの /dev/nf は、システムにインストールされたすべての BSI-2 コントローラに接続するために使用します。
nf ドライバは、「スタイル 2」のデータリンクサービスプロバイダです。すべての M_PROTO 型および M_PCPROTO 型のメッセージは、DLPI 基本式として解釈されます。開いているストリームに特殊デバイス (ppa) を関連付けるには、ユーザーからの明示的な DL_ATTACH_REQ メッセージが必要となります。この ppa ID は、符号なしの長整数として解釈され、対応するデバイスインスタンス (ユニット) 番号を示します。ppa フィールドの値がシステムにおける 有効なデバイスインスタンス番号に対応していない場合は、エラー (DL_ERROR_ACK) が nf ドライバによって返されます。デバイスは最初の接続時に初期化され、最後の切り離し時に終了 (停止) します。
ユーザーからの DL_INFO_REQ に応答して nf ドライバが返す DL_INFO_ACK 基本式の値を以下に示します。
SDU の最大値は 4352 (FDDIMTU) です。
SDU の最小値は 0 です。
dlsap アドレス長は 8 です。
MAC 形式は DL_FDDI です。
sap 長の値は -2 で、これは、DLSAP アドレスの中で物理アドレス構成要素のすぐ後に 2 バイト長の sap 構成要素が位置することを意味します。
サービスモードは DL_CLDLS です。
サービスの品質 (QOS: quality of service) オプションは現在のところ含まれていないため、QOS フィールドは 0 です。
プロバイダスタイルは DL_STYLE2 です。
バージョンは DL_VERSION_2 です。
ブロードキャストアドレスの値は Ethernet/IEEE のブロードキャストアドレス (0xFFFFFF) です。
DL_ATTACHED 状態になると、特定の SAP (Service Access Pointer) をストリームと関連付けるために、ユーザーは DL_BIND_REQ を送る必要があります。nf ドライバは、DL_BIND_REQ 内の sap フィールドを Ethernet の「タイプ」として解釈します。したがって、sap フィールドの有効な値は [0-0xFFFF] の範囲になります。一度にストリームに接続できるのは 1 つのタイプのEthernet だけです。
Ethernet V2 サービスに加えて、「802.3 モード」が nf ドライバによって提供され、次のように機能します。sap 値 0 は、ユーザーによる 802.3 モードの要求を示します。DL_BIND_REQ の sap フィールドの値が 0 の場合、nf ドライバは最初のメッセージの長さを M_PROTO mblk を含まずに計算し、MAC フレームヘッダーの長さフィールドにこの値を持ち、スナップヘッダーに 0xaaaa030000 の値を持つ 802.3 フレームを転送します。タイプフィールドが [0-1500] の範囲内にある媒体から受信したすべてのフレームは 802.3 フレームとみなされ、sap 値が 0 のすべての開いているストリームに配信されます。複数のストリームが 802.3 モードにある場合は、フレームは複製され、DL_UNITDATA_IND メッセージとして複数のストリームに配信されます。
nf ドライバの DLSAP アドレス形式は、6 バイトの物理 (FDDI) アドレス部分と、それに続く 2 バイトの sap (タイプ) 部分とで構成されます。アプリケーションでは、DLSAP アドレスの作成や削除を行う際に、実装に依存した DLSAP アドレス形式を明示的に使用せずに、DL_INFO_ACK 基本式で返される情報を使用してください。 sap 長、完全な DLSAP 長、sap/物理の順序は DL_INFO_ACK に含まれます。物理アドレス長は、完全な DLSAP アドレス長から sap 長を引くか、DL_PHYS_ADDR_REQ を発行して、ストリームに対応する現在の物理アドレスを取得することによって計算することができます。
DL_BOUND 状態になると、nf ドライバ に DL_UNITDATA_REQ メッセージを送信することによって、ユーザーは FDDI 上でフレームを送信することができます。nf ドライバは、DL_UNITDATA_IND メッセージの FDDI のタイプと一致する sap 値を持ち、開いていて結合されているストリームすべてに、受信された FDDI フレームを配信します。受信された FDDI フレームは複製され、必要に応じて複数の開いているストリームに配信されます。DL_UNITDATA_REQ および DL_UNITDATA_IND メッセージに含まれる DLSAP アドレスは、sap (タイプ) と物理 (FDDI) 部分で構成されます。
nf ドライバは、強制的なコネクションレス DLPI メッセージセットに加えて、以下の基本式に対応しています。
DL_ENABMULTI_REQ および DL_DISABMULTI_REQ 基本式は、個々のマルチキャストグループアドレスの受信を有効または無効にします。 これらの基本式を使用して、一群のマルチキャストアドレスをストリームごとに繰り返し作成および変更することができます。これらの基本式は、DL_ATTACHED 後の状態にある場合に、nf ドライバ によって受け付けられます。
dl_level フィールド内に DL_PROMISC_PHYS フラグが設定された状態での DL_PROMISCON_REQ および DL_PROMISCOFF_REQ の基本式は、ローカルホストによって生成されたフレームを含む、媒体上のすべての (「プロミスキュアスモード」の) フレームの受信を有効または無効にします。DL_PROMISC_SAP フラグが設定されている状態で使用すると、sap 値 (Ethernet のタイプ) の受信を有効または無効にします。DL_PROMISC_MULTI フラグが設定されている状態で使用すると、すべてのマルチキャストグループアドレスの受信を有効または無効にします。どちら効果も、常にストリームごとに適用され、当該ストリームやその他のストリームの sap および物理レベルの設定の影響は受けません。
DL_PHYS_ADDR_REQ 基本式は、DL_PHYS_ADDR_ACK 基本式の中のストリームに対応する (接続されている) MAC アドレス (6 桁の数) を返します。この基本式は、DL_ATTACH_REQ の成功後の状態においてのみ有効です。
DL_SET_PHYS_ADDR_REQ 基本式は、このストリームに対応する (接続されている) MAC アドレスを変更します。このストリームを最初に開く処理は、スーパーユーザーのみが行うことができます。スーパーユーザーでない場合は、DL_ERROR_ACK で EPERM が返されます。この基本式は、このデバイスに接続された現在および未来のすべてのストリームに影響する意味で破壊的です。この基本式がこのストリームに対して成功すると、このデバイスに接続された他のすべてのストリームに M_ERROR が送信されます。物理アドレスが一度変更されると、その後開かれ、このデバイスに接続されたストリームは、この新しい物理アドレスを取得します。物理アドレスが一度変更されると、物理アドレスを再び変更するためにこの基本式が使用されるか、システムが再起動されるまでこの物理アドレスは存続します。
デフォルトでは、最初のインタフェースはシステムの MAC アドレスを使用しますが、後続のインタフェースは FDDI ローカルアドレスを使用します。