次の方法で共有


OID_NIC_SWITCH_CREATE_SWITCH 要求の処理

NDIS は、次の操作を行う OID_NIC_SWITCH_CREATE_SWITCH のオブジェクト識別子 (OID) メソッド要求を発行します。

  • PCI Express (PCIe) 物理機能 (PF) のミニポート ドライバーによって静的に作成されたネットワーク アダプターで NIC スイッチを有効にします。 PF は、単一ルート I/O 仮想化 (SR-IOV) をサポートするネットワーク アダプターのハードウェア コンポーネントです。

    NIC スイッチは、MiniportInitializeEx の呼び出しへのコンテキスト内から PF ミニポート ドライバーによって静的に作成されます。 ドライバーは、リソースを割り当て、レジストリ設定から読み取られたパラメーターに基づいてスイッチを作成します。

  • ネットワーク アダプターで NIC スイッチを動的に作成します。

    PF ミニポート ドライバーが静的 NIC スイッチの作成をサポートしていない場合、ミニポート ドライバーはリソースを割り当て、OID 要求で指定されているパラメーターに基づいてスイッチを作成します。

PF ミニポート ドライバーは、NDIS がドライバーの MiniportInitializeEx 関数を呼び出すときに SR-IOV インターフェイスのサポートをアドバタイズします。 PF ミニポート ドライバーが SR-IOV をサポートしている場合、NDIS はレジストリから NIC スイッチの構成を読み取ります。 NDIS が PF ミニポート ドライバーに OID_NIC_SWITCH_CREATE_SWITCH の OID メソッド要求を発行する前に、NDIS は次の方法でレジストリ情報と NDIS_NIC_SWITCH_PARAMETERS 構造体を書式設定します:

  • NDIS は、 SwitchType メンバーを NIC スイッチの種類に設定します。

    Windows Server 2012 以降では、Windows は NdisNicSwitchTypeExternal のスイッチの種類のみをサポートしています。 外部スイッチは、この種類のスイッチに接続されている仮想ポート (VPort) が、ネットワーク アダプターの物理ポートを介して外部ネットワークにアクセスできることを指定します。

    NIC スイッチの詳細については、「SR-IOV アーキテクチャ」を参照してください。

  • NDIS は、NIC スイッチの 識別子の値に SwitchId メンバーを設定します。 スイッチ識別子は、0 からネットワーク アダプターがサポートするスイッチの数までの整数です。 NDIS_DEFAULT_SWITCH_ID 値は、既定の NIC スイッチを示します。

    Windows Server 2012 以降では、SR-IOV インターフェイスは、ネットワーク アダプターの既定の NIC スイッチのみをサポートします。

  • NDIS は、NIC スイッチに割り当てることができる PCIe 仮想関数 (VFs) の数を指定する NumVFs メンバーを設定します。

OID_NIC_SWITCH_CREATE_SWITCH メソッド要求を受信すると、PF ミニポート ドライバーは、次の操作を行う必要があります:

  1. PF ミニポート ドライバーは、静的なスイッチの作成と構成をサポートしている場合、NDIS が MiniportInitializeEx を呼び出すと、NIC スイッチを作成します。 ドライバーは、この OID 要求を処理するとき、NDIS_NIC_SWITCH_PARAMETERS 構造体の構成パラメーターを検証する必要があります。 パラメーターは、MiniportInitializeEx の呼び出し中にスイッチを作成するためにドライバーによって使用されるパラメーターと同じである必要があります。 これが真でない場合、ドライバーは OID 要求を失敗する必要があります。

    詳細については、「NIC スイッチの静的な作成」を参照してください。

  2. PF ミニポート ドライバーが動的なスイッチの作成と構成をサポートしている場合、ドライバーは、NDIS_NIC_SWITCH_PARAMETERS 構造体の構成値を検証し、これらの値に基づいて NIC スイッチを作成する必要があります。

    詳細については、「NIC スイッチの動的な作成」を参照してください。

  3. PF ミニポート ドライバーは、NIC スイッチの既定の VPort に必要なハードウェアおよびソフトウェアのリソースを割り当てる必要があります。

    既定の VPort は常に、OID_NIC_SWITCH_CREATE_SWITCH の OID 要求を通じて作成され、OID_NIC_SWITCH_DELETE_SWITCH の OID 要求を通じて削除されます。 OID_NIC_SWITCH_CREATE_VPORTOID_NIC_SWITCH_DELETE_VPORT の OID 要求は、NIC スイッチの既定以外の VPort の作成と削除に使用されます。

  4. 動的スなイッチの作成と構成をサポートする PF ミニポート ドライバーは、NdisMEnableVirtualization を呼び出すことによって、スイッチの SR-IOV 仮想化を有効にする必要があります。 この呼び出しによって、アダプターの PCI Express (PCIe) 構成領域の SR-IOV 拡張機能構造で NumVFs メンバーと VF Enable ビットが構成されます。

    SR-IOV 構成領域の詳細については、PCI-SIG 「単一ルート I/O 仮想化および 共有 1.1」仕様を参照してください。

    PF ミニポート ドライバーは、静的なスイッチの作成をサポートしている場合、MiniportInitializeEx が呼び出されるとスイッチを作成し、その後、SR-IOV 仮想化を有効にします。

PF ミニポート ドライバーが OID_NIC_SWITCH_CREATE_SWITCH の OID メソッド要求を正常に完了した場合、次の処理が可能になります。

  • OID_NIC_SWITCH_ALLOCATE_VF の OID メソッド要求によって、NIC スイッチに VF を割り当てることができます。

  • 既定以外の VPort は、OID_NIC_SWITCH_CREATE_VPORT の OID メソッド要求によって、NIC スイッチに作成できます。

    ミニポート ドライバーは、既定以外の VPort のプールを管理します。 ドライバーは、NDIS_NIC_SWITCH_INFO 構造体の NumVPorts メンバーを使用して、プール内の既定以外の VPort の数を指定します。 ドライバーは、OID_NIC_SWITCH_ENUM_SWITCHES の OID クエリ要求を通じてこの構造体を返します。

    ネットワーク アダプターは、PF のプールから常に既定の VPort を作成する必要があります。