名前 | 形式 | 機能説明 | アプリケーションプログラミングインタフェース | ファイル | 関連項目
ge GigabitEthernet ドライバ (以下 ge ドライバと略記) は、マルチスレッド化され、読み込みや複製が可能な STREAMS ハードウェアドライバです。 GEM SBus および GEM PCI GigabitEthernet アドイン型アダプタに対してコネクションレス型のデータリンクプロバイダインタフェース (DLPI: 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 は、IEEE 802.3x フロー制御に準拠した自動ネゴシエーション機能を実現しています。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 に対して ge ドライバによって返される 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 状態において特殊な SAP (Service Access Pointer) を ストリームに関連付けるために、ユーザーは DL_BIND_REQ を送信する必要があります。sap フィールドの値が [0-0xFFFF] の範囲内にある限り、ge ドライバは、DL_BIND_REQ 中の sap フィールドを、Ethernet の "種類" として解釈します。いかなる場合も、ただ 1 つの種類の Ethernet をストリームに結合することができます。
ユーザーが sap の値として 0 を指定した場合、受け取り側は、"802.3 モード" になります。"type" フィールドの値が [0-1500] の範囲内にあるメディアを受信したすべてのフレームは、802.3 準拠とみなされます。そして、sap 値が 0 に結合されている、開いているすべてのストリームに経路付けられます。1 つ以上のストリームが "802.3 モード" であるなら、フレームは複製され、DL_UNITDATA_IND メッセージとして、複数のストリームに経路付けられます。
データ伝送中に、sap 値が 0 で、なおかつ destination type フィールドの値が [0-1500] の範囲内にあれば、ge ドライバは、DL_BIND_REQ 中の sap フィールドをチェックします。もし、いずれの条件も真の場合、デバイスドライバは、すべての DL_UNITDATA_REQ メッセージの直後に続く最初の M_PROTO mblk (メッセージブロック) を含めずに、メッセージの長さを算出します。そして、この値を MAC フレームヘッダ長フィールドに持つ 802.3 フレームを送信します。
ge ドライバの DLSAP アドレスの書式は、8 バイトの DLSAP アドレスを生成する、2 バイトの sap (型) コンポーネントと、それに続く (Ethernet の) 6 バイトの物理アドレスコンポーネントから成り立っています。アプリケーションは、この特殊な実装を指定する DLSAP アドレスの書式をハードコードすべきでは ありません。 DLSAP アドレスの構成と分解を行う DL_INFO_ACK プリミティブに返される情報を使用すべきです。sap のデータ長、DLSAP の 全データ長、sap または物理的な指示は、DL_INFO_ACK の中に含まれています。物理アドレス長は、全 DLSAP アドレス長から sap のデータ長を引くか、ストリームに関連付けられた現在の物理アドレスを得る、DL_PHYS_ADDR_REQ を発行することにより、算出することができます。
DL_BOUND ステートでは、ge ドライバに 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. に続くいかなるステートにおいてもこの 2 つのプリミティブを受け入れます。
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) はスーパーユーザでなければなりません。そうでない場合は、EPERM は、DL_ERROR_ACK 中に戻されます。このプリミティブは、このデバイスに結合された、現在および未来の他のすべてのストリームに影響を及ぼす点で、破壊的なものです。このプリミティブがこのストリーム上で成功したとき、このデバイスに結合された他のすべてのストリームに M_ERROR が送られます。一旦変更があると、その後に開かれ、このデバイスに結合されたすべてのストリームは、この新しい物理アドレスを取得するはずです。変更があったとき、この物理アドレスは、さらに次の変更があるか、システムが再起動されるまで保持されます。
デフォルトでは、リンクのモードとフロー制御機能を選択するために、ge ドライバは、"自動ネゴシエーション" を実行します。
リンクは、以下に示す 4 つのモードのいずれかになります。
1000 Mbps、全二重接続
1000 Mbps、半二重接続
対称的中断 (Symmetric Pause)
非対称的中断 (Asymmetric Pause)
上記の通信速度とモードは、1000BASE-TX 規格に規定されて い ます。
自動ネゴシエーションプロトコルは、以下の項目を自動的に選択します。
動作モード (半二重または全二重)
フロー制御機能 (対称または非対称、あるいはその両方)
自動ネゴシエーションプロトコルは、以下の処理を行います。
リンク先パートナーのサポートする全動作モードの取得
リンク先パートナーに対する、各機能を通知
優先度に基づいた、最も優先度の高いモードの選択
GEM ハードウェアは、上記の全動作モードを実現しています。 デフォルト時は、リンク先との接続のために自動ネゴシエーションを使用し、次に、リンク先パートナーと同じ動作モードを選択します。PCS は、強制モードもサポートしています。これは、ndd ユーティリティを使用して、ドライバが動作モードとフロー制御機能を選択できるモードです。
GEM デバイスは、プログラム可能な IPG (Inter-Packet Gap) パラメタの ipg1 および ipg2 をサポートしています。デフォルトでは、ドライバは、ipg1 を 8 バイトの倍数に、ipg2 を 4 バイトの 倍数に設定します (これらは標準的な数値です)。ユーザーは、これらの数値を標準的な 1000 Mpbs IPG セットから 0.096 マイクロ秒へ変更してもかまいません。
ge ドライバは、GEM デバイスの各種パラメタを設定したり、取得することができます。パラメタのリストには、現在のトランシーバの状態、現在の接続の状態、パケット間隔、PCS の各機能、リンク先パートナーの各機能が含まれています。
PCS には、機能別に 2 つのセットがあります。1 つは、ハードウェアの各機能を反映したものであり、読み取り専用 (RO) パラメタです。2 つめのセットは、ユーザーによって選択された数値を反映したもので、 高速選択 (speed selection) として使用されます。こちらは、 読み取り・書き込み (RW) いずれも可能です。 ブート時には、これらの 2 つの機能セットは同等です。リンク先パートナーの各機能もまた、読み取り専用パラメタです。なぜなら、そのときのデフォルト値は、読み取りのみが可能で、変更できないからです。
ndd(1M), netstat(1M), driver.conf(4), dlpi(7P), ie(7D), le(7D) hme(7D) qfe(7D)