物理ネットワーク アダプターへのハードウェア オフロード OID 要求の管理
このトピックでは、Hyper-V 拡張可能スイッチ転送拡張機能が、拡張可能スイッチ制御パスを介して基盤の物理アダプターのハードウェア オフロード テクノロジのオブジェクト識別子 (OID) 要求を管理する方法について説明します。
たとえば、外部ネットワーク アダプターは、NDIS マルチプレクサー (MUX) 中間ドライバーの仮想ミニポート エッジにバインドできます。 MUX ドライバーは、ホスト上の 1 つ以上の物理ネットワークのチームにバインドされます。 この構成は、拡張可能スイッチ チームと呼ばれます。
この構成では、拡張可能スイッチ拡張機能がチーム内のすべてのネットワーク アダプターに公開されます。 これにより、拡張機能は、チーム内の個々のネットワーク アダプターの構成と使用を管理できます。 たとえば、転送拡張機能では、送信パケットを個々のアダプターに転送することで、チーム経由の負荷分散フェールオーバー (LBFO) ソリューションのサポートを提供できます。 拡張可能スイッチ チームを管理する転送拡張機能は、チーミング プロバイダーと呼ばれます。 チーミング プロバイダーの詳細については、「チーミング プロバイダー拡張機能」を参照してください。
次の図は、NDIS 6.40 (Windows Server 2012 R2) 以降の拡張可能スイッチ チームの例を示しています。
次の図は、NDIS 6.30 (Windows Server 2012) の拡張可能スイッチ チームの例を示しています。
注: 拡張可能スイッチ インターフェイスで、NDIS フィルター ドライバーは拡張可能スイッチ拡張機能と呼ばれ、ドライバー スタックは拡張可能スイッチ ドライバー スタックと呼ばれます。
OID 要求 OID_SWITCH_NIC_REQUEST を処理することで、転送拡張機能は、ハードウェア オフロードの拡張可能スイッチ チームの構成に参加できます。 たとえば、拡張可能スイッチ チームの物理ネットワーク アダプターを管理する拡張機能では、ハードウェア オフロードをサポートする物理アダプターに OID_SWITCH_NIC_REQUEST 要求を転送できます。
NDIS、および 上部のプロトコル ドライバーとフィルター ドライバーは、基盤の物理ネットワーク アダプターにハードウェア オフロード テクノロジの OID 要求を発行できます。 これらの OID 要求が拡張可能スイッチ インターフェイスに到着すると、NDIS_SWITCH_NIC_OID_REQUEST 内に OID 要求が カプセル化されます 次に、拡張可能スイッチのプロトコル エッジは、この構造体を含む OID 要求 OID_SWITCH_NIC_REQUEST を発行します。
拡張可能スイッチ インターフェイスは、次のハードウェア オフロード テクノロジの OID をカプセル化します。
インターネット プロトコル セキュリティ (IPsec) オフロード (バージョン 2)
次の IPsec OID 要求がカプセル化されます。
転送拡張機能は、これらの OID 要求に対して失敗したり拒否したりしてはなりません。
IPsec ハードウェア オフロード テクノロジのバージョン 2 の詳細については、「IPsec オフロード バージョン 2」を参照してください。
シングル ルート I/O 仮想化 (SR-IOV)。
次の SR-IOV OID 要求がカプセル化されます。
転送拡張機能は、OID_NIC_SWITCH_ALLOCATE_VF と OID_NIC_SWITCH_CREATE_VPORT の OID 要求を拒否できます。 ただし、拡張機能は他の SR-IOV OID 要求を拒否してはなりません。
SR-IOV ハードウェア オフロード テクノロジの詳細については、「シングル ルート I/O 仮想化 (SR-IOV)」を参照してください。
仮想化マシン キュー (VMQ)
次の SR-VMQ OID 要求がカプセル化されます。
転送拡張機能は、NDIS_STATUS_SUCCESS以外の状態コードで要求を完了することにより、OID_RECEIVE_FILTER_ALLOCATE_QUEUE と OID_RECEIVE_FILTER_Standard Edition T_FILTER の OID 要求を拒否できます。 ただし、拡張機能は他の VMQ OID 要求を拒否してはなりません。
VMQ ハードウェア オフロード テクノロジの詳細については、「仮想マシン キュー (VMQ)」を参照してください。
転送拡張機能は、ハードウェア オフロード OID 要求を処理するために、次のガイドラインに従う必要があります。
Microsoft IM プラットフォームは、チーム全体に共通のオフロード機能のみをアドバタイズします。 ただし、拡張機能は、チーム内の各アダプターの機能をクエリする OID 要求を生成できます。
拡張機能は、チーム内の物理アダプターのハードウェア機能を決定したら、オフロードに最適なアダプターにハードウェア オフロードの OID 設定要求を転送できます。
上部のプロトコル ドライバーやフィルター ドライバーによって生まれるすべてのハードウェア オフロード OID 要求は、NDIS_SWITCH_NIC_OID_REQUEST構造体内にカプセル化されます。 転送拡張機能によって生成されるすべてのハードウェア オフロード OID 要求も、NDIS_SWITCH_NIC_OID_REQUEST 構造体にカプセル化する必要があります。
この拡張機能は、OID 設定要求OID_SWITCH_NIC_REQUEST を通じて、カプセル化された OID 要求を基盤の物理ネットワーク アダプターに転送します。 この手順の詳細については、「物理ネットワーク アダプターへの OID 要求の転送」を参照してください。
この拡張機能は、オフロード リソースの割り当てをクリア、解放、または完了するためのハードウェア オフロード OID 要求を変更したり失敗したりしてはいけません。 たとえば、拡張機能は、OID_RECEIVE_FILTER_CLEAR_FILTER や OID_NIC_SWITCH_DELETE_VPORT の OID 要求を失敗してはなりません。 拡張可能スイッチ インターフェイスは、これらのリソースの状態情報をクリーンするために、これらの OID 要求を処理する必要があります。
拡張機能は、オフロード リソースの割り当て、移動、または設定を行うためのハードウェア オフロード OID 要求を変更または失敗させることができます。 たとえば拡張機能は、OID_NIC_SWITCH_ALLOCATE_VF や OID_TCP_TASK_IPSEC_OFFLOAD_V2_ADD_SA の OID 要求を失敗または変更できます。
この拡張機能は、基盤の物理ネットワーク アダプターに対するハードウェア オフロード OID を生成できます。 ただし拡張機能は、割り当てなかったオフロード リソースをクリアまたは解放するハードウェア オフロード OID を生成してはなりません。
たとえば、拡張機能によるハードウェア オフロード OID 要求 OID_RECEIVE_FILTER_FREE_QUEUE の生成は、同じキューに対して拡張機能が OID_RECEIVE_FILTER_ALLOCATE_QUEUE 要求を生成しなかった場合、行ってはなりません。
注: 拡張機能は、上部のドライバーによって発行されたのと同じ OID 要求をフィルター処理する場合にのみ、独自のカプセル化されたハードウェア オフロード OID 要求を生成できます。 この場合、拡張機能は元の OID 要求を転送できません。 代わりに、この拡張機能は NdisFOidRequestComplete の呼び出しと完成を、NDIS が FilterOidRequestComplete を呼び出して、生成された OID 要求を完成させる場合に行う必要があります。
拡張機能が基盤の物理ネットワーク アダプターにハードウェア オフロード OID 要求を転送する場合、DestinationNicIndex メンバー (NDIS_SWITCH_NIC_OID_REQUEST 構造体内) は、アダプターの 0 以外のインデックス値に設定する必要があります。 これらのインデックス値の詳細については、「ネットワーク アダプターのインデックス値」を参照してください。
また、DestinationPortId メンバーは、外部ネットワーク アダプターが接続されている拡張可能スイッチ ポートの識別子に設定する必要があります。
拡張機能が Hyper-V 子パーティションのリソースを割り当てるハードウェア オフロード OID 要求を開始する場合、SourcePortId メンバー (NDIS_SWITCH_NIC_OID_REQUEST 構造体内) は、パーティションが接続されている拡張可能スイッチ ポートの識別子に設定する必要があります。
SourceNicIndex メンバーは NDIS_SWITCH_DEFAULT_NIC_INDEX に設定する必要があります。
拡張機能は、NdisFOidRequest を呼び出して OID 要求を転送するとき、OidRequest パラメーターを、NDIS_OID_REQUEST 構造体 (OID_SWITCH_NIC_REQUEST OID 要求用) へのポインターに設定する必要があります。
拡張機能が OID 要求をフィルターリングする方法の詳細については、「NDIS フィルター ドライバーでの OID 要求のフィルターリング」を参照してください。
MUX ドライバーの詳細については、「NDIS MUX 中間ドライバー」を参照してください。