次の方法で共有


NIC スイッチ機能の判断

このトピックでは、NDIS と上にあるドライバーが、単一ルート I/O 仮想化 (SR-IOV) をサポートするネットワーク アダプターの NIC スイッチ機能を決定する方法について説明します。 このトピックの内容は次のとおりです。

MiniportInitializeEx 中の NIC スイッチ機能の報告

上にあるドライバーによる NIC スイッチ機能の照会

SR-IOV ネットワーク アダプターの PCI Express (PCIe) 物理機能 (PF) のミニポート ドライバーのみが NIC スイッチ機能を報告できます。 PCIe 仮想関数 (VF) のミニポート ドライバーは、SR-IOV アダプターの NIC スイッチ機能を報告できません。

NIC スイッチの詳細は、「NIC スイッチ」をご覧ください。

MiniportInitializeEx 中の NIC スイッチ機能の報告

NDIS は、ミニポート ドライバーの MiniportInitializeEx 関数を呼び出すと、ドライバーは、次の NIC スイッチ機能を提供します。

  • ネットワーク アダプターがサポートできる NIC スイッチのハードウェア機能の完全なセット。

    NDIS 6.30 以降では、ネットワーク アダプターに NIC スイッチが 1 つだけ作成されます。 このスイッチは、既定の NIC スイッチと呼ばれます。

  • ネットワーク アダプターで現在有効になっている NIC スイッチ機能。

ミニポート ドライバーは、次のように初期化された NDIS_NIC_SWITCH_CAPABILITIES 構造体を介して、下にあるネットワーク アダプターの NIC スイッチハードウェア機能を報告します。

  1. ミニポート ドライバーは、Header メンバーを初期化します。 ドライバーは、HeaderType メンバーを NDIS_OBJECT_TYPE_DEFAULT に設定します。

    NDIS 6.30 以降、ミニポート ドライバーは、HeaderRevision メンバーを NDIS_NIC_SWITCH_CAPABILITIES_REVISION_2 に Size メンバーを NDIS_SIZEOF_NIC_SWITCH_CAPABILITIES_REVISION_2 に設定します。

  2. ミニポート ドライバーは、NDIS_NIC_SWITCH_CAPABILITIES 構造体の NicSwitchCapabilities メンバーの適切なフラグを SR-IOV ネットワーク アダプターの NIC スイッチ機能に設定します。 たとえば、ミニポート ドライバーは、NIC スイッチがスイッチに作成された各仮想ポート (VPort) の割り込みモデレーションをサポートしている場合、NDIS_NIC_SWITCH_CAPS_PER_VPORT_INTERRUPT_MODERATION_SUPPORTED フラグを設定します。

  3. ミニポート ドライバーは、NDIS_NIC_SWITCH_CAPABILITIES 構造体の他のメンバーを SR-IOV ネットワーク アダプターの NIC スイッチ機能の値の範囲に設定します。 たとえば、ミニポート ドライバーは、MaxNumVFsMaxNumVPorts メンバーをアダプターがサポートできるVM と VPort の最大数に設定します。

    ネットワーク アダプターで使用可能なハードウェア リソースに応じて、ミニポート ドライバーは、MaxNumVFs メンバーを *NumVFs キーワード未満の値に設定できます。 このキーワードの詳細については、「SR-IOV の標準化された INF キーワード」を参照してください。

NDIS は、ミニポート ドライバーの MiniportInitializeEx 関数を呼び出すと、ドライバーは、次の手順に従って、ネットワーク アダプターの NIC スイッチ機能を登録します。

  1. ミニポート ドライバーは、NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 構造体を初期化します。

    ミニポート ドライバーは、以前に初期化された NDIS_NIC_SWITCH_CAPABILITIES 構造体へのポインターに HardwareNicSwitchCapabilities メンバーを設定します。

    *SRIOV INF キーワーのレジストリ設定の値が 1 の場合、ネットワーク アダプターは現在、NIC スイッチの作成と構成に対して有効になっています。 ミニポート ドライバーは、CurrentNicSwitchCapabilities メンバーを同じ NDIS_NIC_SWITCH_CAPABILITIES 構造体へのポインターに設定します。

    *SRIOV INF キーワーのレジストリ設定の値が 0 の場合、ネットワーク アダプターは現在、NIC スイッチの作成と構成に対して有効になっていません。 ミニポート ドライバーは、CurrentNicSwitchCapabilities メンバーを NULL に設定する必要があります。

    *SRIOV INF キーワードの詳細については、「SR-IOV の標準化された INF キーワード」を参照してください。

  2. ドライバーは NdisMSetMiniportAttributes を呼び出し、MiniportAttributes パラメーターを NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 構造体へのポインターに設定します。

アダプターの初期化プロセスの詳細については、「ミニポート アダプターの初期化」を参照してください。

SR-IOV を使用せずに NIC スイッチを作成する

NDIS 6.60 以降のミニポート ドライバーは、SR-IOV が有効になっていない場合に、NIC スイッチと VMQ 機能の共存に関する次の要件に従う必要があります。 SR-IOV が有効になっている場合、ミニポート ドライバーは、前のセクションの既存の要件に従う必要があります。

  • ミニポート ドライバーは、NIC スイッチと VMQ 機能の両方をアドバタイズします。
  • NIC は、NIC の再起動なしで NIC スイッチと VMQ モードを切り替えることができます。
    • NIC の初期起動時には、いずれかのモード (NIC スイッチの作成または VMQ キューの作成) になる準備ができています。
      • NIC スイッチが作成された場合、ミニポートは後続の VMQ キューの割り当てコールバックに失敗します。
      • VMQ キューが最初に作成された場合、ミニポート ドライバーは、VMQ キューの割り当てに成功し、NIC スイッチの割り当て呼び出しに失敗します。
    • NIC スイッチが削除されるか、すべての VMQ キューが削除されると、ミニポート ドライバーは初期状態に戻り、これらのモードのいずれかに再度移行する準備が整います。

SR-IOV を使用せずに NIC スイッチを作成できることをアドバタイズするために、ミニポート ドライバーは、NDIS_NIC_SWITCH_CAPABILITIES 構造体の NicSwitchCapabilities メンバーの NDIS_NIC_SWITCH_CAPS_NIC_SWITCH_WITHOUT_IOV_SUPPORTED フラグを設定します。

上にあるドライバーによる NIC スイッチ機能の照会

NDIS は、次の方法でネットワーク アダプターにバインドする上にあるドライバーにネットワーク アダプターの現在有効な NIC スイッチ機能を渡します。

  • NDIS が上にあるフィルター ドライバーの FilterAttach 関数を呼び出すと、NDIS は AttachParameters パラメーターを介してネットワーク アダプターの NIC スイッチ機能を渡します。 このパラメーターには、NDIS_FILTER_ATTACH_PARAMETERS 構造体へのポインターが含まれています。 この構造体の NicSwitchCapabilities メンバーには NDIS_NIC_SWITCH_CAPABILITIES 構造体へのポインターが含まれています。

  • NDIS が上にあるプロトコル ドライバーの ProtocolBindAdapterEx 関数を呼び出すと、NDIS は BindParameters パラメーターを介してネットワーク アダプターの NIC スイッチ機能を渡します。 このパラメーターには、NDIS_FILTER_ATTACH_PARAMETERS 構造体へのポインターが含まれています。 この構造体の NicSwitchCapabilities メンバーには NDIS_NIC_SWITCH_CAPABILITIES 構造体へのポインターが含まれています。

NDIS は、上にあるプロトコルまたはフィルター ドライバーによって発行される、OID_NIC_SWITCH_HARDWARE_CAPABILITIESOID_NIC_SWITCH_CURRENT_CAPABILITIES のオブジェクト識別子 (OID) クエリ要求を処理する場合、NDIS_NIC_SWITCH_CAPABILITIES 構造体も返します。