名前 | 形式 | 機能説明 | アプリケーションプログラミングインタフェース | ファイル | 関連項目
/dev/ge
GigabitEthernet ドライバ (ge ドライバ) は、マルチスレッド化され、 読み込みや複製が可能な STREAMS ハードウェアドライバです。 GEM、SBus、および PCI GigabitEthernet アドイン型アダプタに対して コネクションレス型のデータリンクプロバイダインタフェース dlpi(7P) をサポートします。ge ドライバは、システムに組み込まれた、複数の GEM アダプタをサポートするものです。、ge ドライバは、おもに GEM 対応の Ethernet ハードウェアをサポートし、SUNW, sbus-gem (SBus 対応 GEM) や pci108e,2bad (PCI 対応 GEM) などのデバイスを制御します。その機能は、チップの初期化、フレームの転送と受信、マルチキャストと プロミスキュアスのサポート、エラーの復旧処理および報告です。
GEM デバイスは、外部 SERDES および光ファイバー通信トランシーバを制御する GEM ASIC (専用チップ) を使用して、100BASE-SX のネットワークインタフェースを提供します。GEM ASIC は、適切なバスインタフェースに対し、MAC 機能や PCS (Physical Code Sub-layer : 物理コードサブレイヤー) 機能を提供します。外部 SERDES は、光ファイバートランシーバに接続され、物理的な接続を提供します。
1000BASE-SX 規格には、自動的に動作モードを選択する自動ネゴシエーション機能が規定されています。さらに全二重モードのために、GEM ASIC は、 フロー制御に準拠した自動ネゴシエーション機能を実現しています。GEM PCS 機能は、遠隔リンク先 (リンクパートナー) に対して、自動ネゴシエーションを実行したり、遠隔リンク先からのメッセージを受信したりします。また、優先度に応じてもっとも優先順位の高いモードを選択します。ドライバが対応しているシステムでは、強制モード もサポートします。
文字複製された特殊デバイスである /dev/ge は、システムに組み込まれている、すべての ge コントローラへのアクセスに使用されます。
ge ドライバは、スタイル 2 型のデータリンクサービスを提供するものです。M_PROTO 型、および M_PCPROTO 型のメッセージは、DLPI プリミティブとして解釈されます。DLPI プリミティブについては、<sys/dlpi.h> ファイルで定義されています。詳細については、dlpi(7P) のマニュアルページを参照してください。
ユーザーからの DL_ATTACH_REQ メッセージは、特殊デバイス/ ppa に対して開かれたストリームに関連付けられなければなりません。 ppa ID は、unsigned long
型のデータとして解釈され、対応するデバイスインスタンス (ユニット) 番号を指し示します。ppa フィールドの値が、そのシステムの有効なデバイスインスタンス番号と一致しない場合、ドライバは、エラー値とし DL_ERROR_ACK を返します。デバイスは、最初の接続時に初期化され、最後の接続時に終了処理 (停止) されます。
DL_INFO_REQ に対してドライバから換えされる DL_INFO_ACK の値は、以下のようになります。
SDU の最大値は 1500 です (ETHERMTU -<sys/ethernet.h> で定義されている)。
SDU の最小値は 0 です。
dlsap のアドレス長は 8 です。
MAC 型は DL_ETHER です。
sap 長の値は –2 です。これは、物理アドレスコンポーネントの直後に、DLSAP アドレス内部にある、2 バイトのsap コンポーネントが続くことを意味しています。
サービスモードは DL_CLDLS です。
オプションなしのサービス品質 (QOS) サポートしない場合、 QOS フィールドの値は 0 になります。
サービス提供の形式は DL_STYLE2 です。
バージョンは DL_VERSION_2 です。
ブロードキャストアドレスの値は、 Ethernet/IEEE ブロードキャストアドレス (0xFFFFFF) です。
DL_ATTACHED 状態において特殊な Service Access Pointer (SAP) をストリームに関連付けるために、ユーザーは DL_BIND_REQ を送信する必要があります。フィールドの値が [0-0xFFFF] の範囲内にある限り、ドライバは、DL_BIND_REQ 中の sap フィールドを Ethernet の type (種類) として解釈します。いかなる場合も、ただ 1 つの種類の Ethernet をストリームに結合することができます。
ユーザーが sap の値として 0 を指定した場合、受け取り側は、802.3 モードになります。type フィールドの値が [0-1500] の範囲内にあるメディアを受信したすべてのフレームは、802.3 準拠とみなされます。そして、fsap の値が 0 に結合されている、開いているすべてのストリームに経路付けられます。1 つ以上のストリームが であるなら、DL_UNITDATA_IND メッセージとして、複数のストリームに経路付けられます。
データ伝送中、ge ドライバは、DL_BIND_REQ 中の sap 値を検査して、sap が 0 かどうか、および、 destination type フィールドの値が [0-1500] の範囲内にるかどうかを判断します。もし、いずれの条件も真の場合、ドライバは、すべての DL_UNITDATA_REQ メッセージの直後に続く最初の M_PROTO mblk (メッセージブロック) を含めずに、メッセージの長さを算出します。そして、この値を MAC フレームヘッダ長フィールドに持つ 802.3 フレームを送信します。
ge ドライバの DLSAP アドレスの書式は、8 バイトの DLSAP アドレスを生成する、2 バイトの sap (型) コンポーネントと、それに続く (Ethernet の) 6 バイトの物理アドレスコンポーネントから成り立っています。アプリケーションは、この特殊な実装を指定する DLSAP アドレスの書式をハードコードすべきではありません。アドレスの構成と分解を行うDL_INFO_ACK プリミティブに返される情報を使用すべきです。 sap のデータ長、DLSAP の全データ長、sap または物理的な指示は、DL_INFO_ACK の中に含まれています。物理アドレス長は、全 DLSAP アドレス長から sap の値を弾くか、ストリームに関連付けられた現在の物理アドレスを得る、DL_PHYS_ADDR_REQ を発行することにより、算出できます。
DL_BOUND ステートでは、sap ドライバに DL_UNITDATA_REQ メッセージを送ることによって、ユーザーは Ethernet 上にフレームを送信することがあります。ge ドライバは、DL_UNITDATA_IND メッセージに Ethernet タイプが一致している sap を持つ、開かれた、もしくは結合されたストリームに、受信した Ethernet フレームを経路付けすることになります。必要に応じて、受信された Ethernet フレームは複製され、複数の開かれたストリームに経路付けされます。 DL_UNITDATA_REQ および DL_UNITDATA_IND メッセージの中に含まれる DLSAP アドレスは、sap (型) と物理 (Ethernet) コンポーネントから構成されています。
強制コネクションレス DLPI メッセージセットに加えて、ge ドライバは、以下のプリミティブをサポートしています。
DL_ENABMULTI_REQ と DL_DISABMULTI_REQ プリミティブは、個々のマルチキャストグループアドレスの受け取りを許可・不許可します。この 2 つのプリミティブを使うことによって、マルチキャストアドレスの組み合わせが各ストリーム上で何度も生成されたり、変更されたりします。ドライバは、DL_ATTACHED に続くいかなるステートにおいても、DL_ENABMULTI_REQ と DL_DISABMULTI_REQ のプリミティブを受け入れます。
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 プリミティブ中のストリームにその時点で関連 (結合) 付けられた 6 オクテットの Ethernet アドレスを返します。このプリミティブは、成功した DL_ATTACH_REQ の後に続く状態であるときのみ有効です。
DL_SET_PHYS_ADDR_REQ プリミティブは、このストリームにその時点で関連 (結合) 付けられた 6 オクテットの Ethernet アドレスを変更します。最初にこのストリームを開いたプロセスの資格 (credentials) は、スーパーユーザでなければなりません。そうでない場合、DL_ERROR_ACK 内に EPERM が換えされます。DL_SET_PHYS_ADDR_REQ プリミティブは、このデバイスに結合された、現在および未来の他のすべてのストリームに影響を及ぼす点で、破壊的なものです。DL_SET_PHYS_ADDR_REQ DL_SET_PHYS_ADDR_REQ プリミティブがこのストリーム上で成功したとき、このデバイスに結合された他のすべてのストリームに M_ERROR が送られます。いったん変更があると、その後に開かれ、このデバイスに結合されたすべてのストリームは、この新しい物理アドレスを取得するはずです。変更があったとき、この物理アドレスは、DL_SET_PHYS_ADDR_REQ によって物理アドレスが再度変更されるか、システムが再起動されるまで保持されます。
デフォルトでは、ge ドライバは自動ネゴシエーションを実行して、リンクのモードとフロー制御モードを選択します。リンクは、以下に示す 4 つのモードのいずれかになります。
1000 Mbps、全二重接続
1000 Mbps、半二重接続
対称的中断 (Symmetric Pause)
非対称的中断 (Asymmetric Pause)
通信速度とモードは、1000BASE-TX 規格に規定されています。
自動ネゴシエーションプロトコルは、以下の項目を自動的に選択します。
動作モード (半二重または全二重)
フロー制御機能 (対称または非対称、あるいはその両方)
自動ネゴシエーションプロトコルは、以下の処理を行います。
リンク先パートナーのサポートする全動作モードの取得
リンク先パートナーに対する、各機能を通知
優先度に基づいた、最も優先度の高いモードの選択
GEM ハードウェア は、上記の全動作モードを実現しています。デフォルト時は、リンク先との接続のために自動ネゴシエーションを使用し、 次に、リンク先パートナーと同じ動作モードを選択します。PCS は、 強制モード もサポートしています。これは、ndd ユーティリティを使用して、ドライバが動作モードと フロー制御機能を選択できるモードです。
GEM デバイスは、プログラム可能な Inter-Packet Gap (IPG) パラメータの ipg1 および ipg2 をサポートしています。デフォルトでは、ドライバは、ipg1 を 8 バイトの倍数に、ipg2 を 4 バイトの倍数に設定します (これらは標準的な数値です)。ユーザーは、これらの数値を標準的な 1000 Mpbs IPG セットから 0.096 マイクロ秒へ変更してもかまいません。
ge ドライバを使用して、デバイスの各種パラメータを設定したり、取得することができます。パラメータのリストには、現在のトランシーバの状態、現在の接続の状態、パケット間隔、PCS の各機能、およびリンク先パートナーの各機能が含まれています。
PCS には、機能別に 2 つのセットがあります。1 つは、ハードウェアの各機能を反映したものであり、読み取り専用です。2 つめのセットは読み取り/書き込み可能で、高速選択 (speed selection) として使用され、ユーザーが選択した数値を反映したものです。ブート時には、これらの 2 つの機能セットは同じになります。リンク先パートナーの各機能は読み取り専用で、変更できません。