物理ネットワーク アダプターからの NDIS 状態表示の転送

このトピックでは、基になるフィジカルアダプターから NDIS ステータス表示を転送する拡張を転送する拡張可能スイッチで使用されるメソッドについて説明します。 1 つ以上の基になるフィジカルアダプターを、Hyper-V 拡張可能スイッチ外部ネットワーク アダプターと組み合わせて使用できます。

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

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

次の図は、NDIS 6.40 (Windows Server 2012 R2) 以降の上のフィジカルアダプターからの NDIS 状態表示の Hyper-V 拡張可能スイッチ制御パスを示しています。

Diagram that shows the Hyper-V extensible switch control path for NDIS status indications from physical network adapters for NDIS 6.40 and later.

次の図は、NDIS 6.30 (Windows Server 2012) の上のフィジカル アダプターからの NDIS 状態表示の Hyper-V 拡張可能スイッチ制御パスを示しています。

Diagram that shows the Hyper-V extensible switch control path for NDIS status indications from physical network adapters for NDIS 6.30.

注: 拡張可能スイッチ インターフェイスで、NDIS フィルター ドライバーは 拡張可能スイッチ拡張機能 と呼ばれ、ドライバー スタックは 拡張可能スイッチ ドライバー スタック と呼ばれます。

拡張可能スイッチ インターフェイスは、基になる物理アダプターによって生成した NDIS 状態の表示を転送します。 外部ネットワーク アダプターが拡張可能スイッチ チームにバインドされている場合、NDIS 状態表示は、MUX ドライバーの仮想アダプターの端で発生します。 それ以外の場合、ステータス表示は、外部ネットワーク アダプターにバインドされている単一の物理ネットワーク アダプターで発生します。

NDIS 状態表示が拡張可能スイッチ インターフェイスに到着すると、 NDIS_SWITCH_NIC_STATUS_INDICATION 構造体内に表示をカプセル化します。 次に、拡張可能スイッチのミニポート エッジは、この構造体を含む NDIS_STATUS_SWITCH_NIC_STATUS 表示を発行します。

転送拡張機能は、NDIS 状態表示を受け取ると、元の表示データを転送したり、表示を転送する前にデータを変更したりできます。

注: ステータス表示を転送する前に、転送拡張機能のみがデータを変更できます。 この種類の拡張機能の詳細については、「拡張機能の転送」を参照してください。

転送拡張機能は、拡張可能スイッチの外部ネットワーク アダプターにバインドされている、基になる物理アダプターからステータス表示を変更および転送できます。 通常、この拡張機能は、基になるフィジカルアダプターのアドバタイズされたハードウェア オフロード機能を変更するために、これらのステータス表示を発行します。 たとえば、拡張機能は、次の種類のハードウェア オフロードのステータス表示を変更および転送できます。

  • インターネット プロトコル セキュリティ (IPsec)

  • 仮想化マシン キュー (VMQ)

  • シングル ルート I/O 仮想化 (SR-IOV)

転送拡張機能が NDIS ステータス表示を転送する場合は、次の方法でNDIS_SWITCH_NIC_STATUS_INDICATION構造体のメンバーを設定する必要があります。

  • SourcePortId メンバーは、外部ネットワーク アダプターが接続されている拡張可能スイッチ ポートの識別子に設定してください。 外部ネットワーク アダプターは、1 つ以上のフィジカルアダプターにバインドされます。 詳細については、「外部ネットワーク アダプター」をご覧ください。

  • SourceNicIndex メンバーは NDIS_SWITCH_DEFAULT_NIC_INDEX に設定する必要があります。 これにより、ステータス表示は、外部ネットワーク アダプターにバインドされている拡張可能スイッチ チーム全体から発生されたものとして解釈できます。

  • DestinationPortId メンバーは NDIS_SWITCH_DEFAULT_PORT_ID に設定する必要があります。

  • DestinationNicIndex メンバーを NDIS_SWITCH_DEFAULT_NIC_INDEX に設定してください。

  • StatusIndication メンバーは、NDIS_STATUS_INDICATION 構造体へのポインターに設定する必要があります。 この構造体には、カプセル化された NDIS 状態表示のデータが含まれています。

転送拡張機能がカプセル化された NDIS 状態表示を発行する場合は、次の手順に従ってください。

  1. この拡張機能は ReferenceSwitchNic を呼び出して、外部ネットワーク アダプターの参照カウンターをインクリメントします。 これにより、拡張可能スイッチ インターフェイスは、参照カウンターが 0 以外のネットワーク アダプター接続を削除しないことを保証します。

    拡張機能が ReferenceSwitchNic を呼び出すときに、SwitchPortId パラメーターを SourcePortId メンバーに指定された値に設定します。 また、この拡張機能は SwitchNicIndex パラメーターを SourceNicIndex メンバーに指定された値に設定します。

    注: ReferenceSwitchNic が NDIS_STATUS_SUCCESS を返さない場合、カプセル化された NDIS 状態表示を発行できません。

  2. この拡張機能は、NdisFIndicateStatus を呼び出して、カプセル化された状態通知を転送します。

    : 拡張機能がカプセル化された NDIS 状態表示を転送する場合は、その FilterStatus 関数の呼び出しのコンテキスト内で NdisFIndicateStatus を呼び出す必要があります。

  3. NdisFIndicateStatus が返された後、拡張機能は DereferenceSwitchNic を呼び出して、ソースまたは宛先のネットワーク アダプター接続の参照カウンターをクリアします。 拡張機能は、SwitchPortId パラメーターと SwitchNicIndex パラメーターを ReferenceSwitchNic の呼び出しで使用したのと同じ値に設定します。

MUX ドライバーの詳細については、「NDIS MUX 中間ドライバー」を参照してください。