物理ネットワーク アダプターへのハードウェア オフロード OID 要求の管理

このトピックでは、Hyper-V 拡張可能スイッチ転送拡張機能が、拡張可能スイッチ制御パスを介して基盤の物理アダプターのハードウェア オフロード テクノロジのオブジェクト識別子 (OID) 要求を管理する方法について説明します。

たとえば、外部ネットワーク アダプターは、NDIS マルチプレクサー (MUX) 中間ドライバーの仮想ミニポート エッジにバインドできます。 MUX ドライバーは、ホスト上の 1 つ以上の物理ネットワークのチームにバインドされます。 この構成は、拡張可能スイッチ チームと呼ばれます。

この構成では、拡張可能スイッチ拡張機能がチーム内のすべてのネットワーク アダプターに公開されます。 これにより、拡張機能は、チーム内の個々のネットワーク アダプターの構成と使用を管理できます。 たとえば、転送拡張機能では、送信パケットを個々のアダプターに転送することで、チーム経由の負荷分散フェールオーバー (LBFO) ソリューションのサポートを提供できます。 拡張可能スイッチ チームを管理する転送拡張機能は、チーミング プロバイダーと呼ばれます。 チーミング プロバイダーの詳細については、「チーミング プロバイダー拡張機能」を参照してください。

次の図は、NDIS 6.40 (Windows Server 2012 R2) 以降の拡張可能スイッチ チームの例を示しています。

Diagram showing an extensible switch team for NDIS 6.40.

次の図は、NDIS 6.30 (Windows Server 2012) の拡張可能スイッチ チームの例を示しています。

Diagram illustrating an extensible switch team for NDIS 6.30.

注: 拡張可能スイッチ インターフェイスで、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_VFOID_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_QUEUEOID_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_FILTEROID_NIC_SWITCH_DELETE_VPORT の OID 要求を失敗してはなりません。 拡張可能スイッチ インターフェイスは、これらのリソースの状態情報をクリーンするために、これらの OID 要求を処理する必要があります。

    拡張機能は、オフロード リソースの割り当て、移動、または設定を行うためのハードウェア オフロード OID 要求を変更または失敗させることができます。 たとえば拡張機能は、OID_NIC_SWITCH_ALLOCATE_VFOID_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 中間ドライバー」を参照してください。