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

このトピックでは、スイッチに接続されているネットワーク アダプターの NDIS 状態表示を生成する拡張スイッチ転送拡張機能で使用される方法について説明します。 拡張機能は、次の種類のアダプターの NDIS 状態表示を生成できます。

  • 拡張可能スイッチの外部ネットワーク アダプター にバインドされている 1 つ以上の基になる物理アダプター

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

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

  • Hyper-V 子パーティション内で公開され、拡張可能スイッチ ポートに接続されている仮想マシン (VM) ネットワーク アダプター。

次の図は、NDIS 6.40 (Windows Server 2012 R2) 以降の物理および VM ネットワーク アダプターからの NDIS 状態表示の Hyper-V 拡張可能スイッチ制御パスを示しています。

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

次の図は、NDIS 6.30 (Windows Server 2012) の物理および VM ネットワーク アダプターからの NDIS 状態表示の Hyper-V 拡張可能スイッチ制御パスを示しています。

Diagram showing the Hyper-V extensible switch control path for NDIS status indications from physical and VM network adapters for NDIS 6.30.

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

転送拡張機能は、拡張可能スイッチ ドライバー スタック内の上にあるドライバーにカプセル化されたハードウェア オフロード状態表示を生成できます。 これにより、拡張機能は、拡張可能スイッチの外部ネットワーク アダプターにバインドされている物理アダプターの基になるチームの現在のオフロード機能を変更することもできます。 アダプターのチームが外部ネットワーク アダプターにバインドされている場合、チームの一般的な機能のみが NDIS または上にあるプロトコルとフィルター ドライバーにアドバタイズされます。 拡張機能は、カプセル化された状態表示を生成して、チーム内の一部のアダプターでサポートされている機能をアドバタイズすることで、アドバタイズされた機能を拡張できます。 たとえば、拡張機能は、カプセル化された NDIS_STATUS_RECEIVE_FILTER_CURRENT_CAPABILITIES 表示を発行して、チーム全体で現在有効になっている受信フィルター機能を変更できます。

注: 転送拡張機能のみが、カプセル化された状態表示を生成できます。 この種類の拡張機能の詳細については、「拡張機能の転送」を参照してください。

通常、転送拡張機能は、基になる物理アダプターのアドバタイズされたハードウェア オフロード機能を変更するカプセル化された NDIS 状態表示を生成します。 たとえば、拡張機能は、次の種類のハードウェア オフロードの状態表示を生成できます。

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

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

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

転送拡張機能は、Hyper-V 子パーティションに割り当てられているハードウェア オフロード リソースを変更するカプセル化された NDIS 状態表示を生成することもできます。 NDIS 6.30 以降では、拡張機能は、VM ネットワーク アダプターと PCI Express (PCIe) 仮想関数 (VF) の間のバインドを削除するカプセル化された NDIS_STATUS_SWITCH_PORT_REMOVE_VF 表示を発行できます。 VF は、単一ルート I/O 仮想化 (SR-IOV) インターフェイスをサポートする基になる物理ネットワーク アダプターによって公開およびサポートされます。

転送拡張機能が、基になる物理アダプターのハードウェア オフロード リソースのカプセル化された NDIS 状態表示を生成する場合は、次の方法でNDIS_SWITCH_NIC_STATUS_INDICATION構造体のメンバーを設定する必要があります。

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

  • DestinationNicIndex メンバーを NDIS_SWITCH_DEFAULT_NIC_INDEX に設定する必要があります。

  • SourcePortId メンバーは、外部ネットワーク アダプターが接続されている拡張可能スイッチ ポートの識別子に設定する必要があります。

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

    注: 転送拡張機能では、1 つの物理ネットワーク アダプターのみが外部ネットワーク アダプターに バインドされている場合は、このメンバーをNDIS_SWITCH_DEFAULT_NIC_INDEX に設定する必要があります。

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

転送拡張機能が Hyper-V 子パーティションのハードウェア オフロード リソースの NDIS 状態表示を発生させる場合は、次の方法で NDIS_SWITCH_NIC_STATUS_INDICATION 構造体のメンバーを設定する必要があります。

  • DestinationPortIdDestinationNicIndex メンバーはパーティションで使用されるネットワーク接続のポートおよびネットワーク アダプター インデックスの対応する値に設定する必要があります。

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

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

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

拡張機能がカプセル化された NDIS 状態表示を発行する場合は、次の手順に従う必要があります。

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

    拡張機能が ReferenceSwitchNicを呼び出すと、次の方法でパラメーターが設定されます。

    • 転送拡張機能が、基になる物理アダプターのカプセル化された NDIS 状態表示を開始する場合は、 SwitchPortId パラメーターを SourcePortId メンバーに指定された値に設定します。 また、この拡張機能は SwitchNicIndex パラメーターを SourceNicIndex メンバーに指定された値に設定します。

    • 転送拡張機能が Hyper-V 子パーティションの NDIS 状態表示を発生させる場合は、 SwitchPortId パラメーターを DestinationPortId メンバーに指定された値に設定します。 また、この拡張機能は SwitchNicIndex パラメーターを DestinationNicIndex メンバーに指定された値に設定します。

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

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

    注: 拡張機能がフィルター処理された OID 要求を転送する場合は、その NdisFIndicateStatus をその FilterStatus 関数の呼び出しこコンテキスト内で呼び出す必要があります。

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