ネットワーク アダプターの VMQ 機能の判断
NDIS は、次のようなネットワーク アダプターの VMQ 機能を決定するインターフェイスを提供します。
ネットワーク アダプターの汎用フィルター機能。
サポートされている VM キュー機能。
ネットワーク データ メモリを 2 つの個別のバッファーに分割できるようにする先読みサポート。
注: NDIS 6.30 以降では、パケット データの個別の先読みバッファーへの分割はサポートされなくなりました。
ミニポート ドライバーは、ネットワーク アダプターの初期化中に NDIS に次の情報を提供します。
ネットワーク アダプターがサポートできる VMQ ハードウェア機能。
現在有効になっている VMQ 機能。
ネットワーク アダプターで有効または無効になっているグローバル受信フィルター機能。
上にあるドライバーとアプリケーションでは、次の OID クエリ要求を使用して、ネットワーク アダプターの機能を取得できます。
OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES
OID_RECEIVE_FILTER_CURRENT_CAPABILITIES
OID_RECEIVE_FILTER_GLOBAL_PARAMETERS
NDIS は、ミニポート ドライバーのこれらの OID クエリ要求を処理します。 そのため、ミニポート ドライバーのクエリは要求されません。 NDIS は、初期化中にネットワーク アダプターの現在有効な受信 VMQ 機能を報告します。 そのため、上にあるドライバーは、これらの OID に対してクエリを実行する必要はありません。
NDIS_RECEIVE_FILTER_CAPABILITIES 構造体はネットワーク アダプターのフィルター機能を指定します。 この構造体は、次のように使用されます。
NDIS が MiniportInitializeEx 関数を呼び出すと、ミニポート ドライバーは NDIS_RECEIVE_FILTER_CAPABILITIES 構造体を初期化することによって、そのフィルター機能を登録します。 次に、ドライバーは NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 構造体の HardwareReceiveFilterCapabilities メンバーを NDIS_RECEIVE_FILTER_CAPABILITIES 構造体へのポイントに設定します。 次に、ドライバーは NdisMSetMiniportAttributes 関数を呼び出し、 MiniportAttributes パラメーターを NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 構造体へのポインターに設定します。
上にあるプロトコル ドライバーは、NDIS がドライバーの ProtocolBindAdapterEx 関数を呼び出すときに、NDIS_BIND_PARAMETERS 構造体の NDIS_RECEIVE_FILTER_CAPABILITIES 構造体を受け取ります。
上にあるフィルター ドライバーは、NDIS がドライバーの FilterAttach 関数を呼び出す時に、NDIS_FILTER_ATTACH_PARAMETERS 構造体の NDIS_RECEIVE_FILTER_CAPABILITIES 構造体を受け取ります。
上にあるドライバーは OID_RECEIVE_FILTER_CURRENT_CAPABILITIES または OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES の OID クエリ要求を発行することによって、NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 構造体を受け取ります。 HardwareReceiveFilterCapabilities と CurrentReceiveFilterCapabilities メンバーは NDIS_RECEIVE_FILTER_CAPABILITIES 構造体を指します。
NDIS_RECEIVE_FILTER_CAPABILITIES 構造体には、次の情報が含まれています。
EnabledFilterTypes
サポートされている受信フィルターの種類。 NDIS_RECEIVE_FILTER_VMQ_FILTERS_ENABLED フラグは、仮想マシン キュー (VMQ) フィルターが有効になっていることを指定します。
EnabledQueueTypes
サポートされている受信キューの種類。 NDIS_RECEIVE_FILTER_VM_QUEUES_ENABLED フラグは、仮想マシン (VM) キューが有効になっていることを指定します。
NumQueues
ネットワーク アダプターがサポートする受信キューの数。 VMQ をサポートするには、この数が NIC でサポートされているユニキャスト MAC アドレスの数以下である必要があります。 この数に、既定のキューを含めてはなりません。
注 ネットワーク アダプターがサポートするユニキャスト MAC アドレスまたは VM キューの数には、関連付けられている NIC の MAC アドレスは含まれません。
SupportedQueueProperties
ネットワーク アダプターがサポートするキューのプロパティ。 NDIS_RECEIVE_FILTER_VM_QUEUE_SUPPORTED フラグは、ネットワーク アダプターが VMQ フィルターをサポートするための最小要件を提供することを指定します。 VMQ 対応 NIC は、受信キューごとに MSI-X テーブル エントリを提供する必要があります。 そのため、VMQ ミニポート ドライバーは、NDIS_RECEIVE_FILTER_MSI_X_SUPPORTED フラグを設定する必要があります。
SupportedFilterTests
ミニポート ドライバーがサポートするフィルター テスト操作。 例えば、ネットワーク アダプターは、選択したヘッダー フィールドが指定された値と等しいかどうかを判断するためのテストをサポートします。 VMQ ミニポート ドライバーは、NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_EQUAL_SUPPORTED フラグを設定する必要があります。
SupportedHeaders
ミニポート ドライバーが検査できるネットワーク パケット ヘッダーの種類。 たとえば、ネットワーク アダプターは、ネットワーク パケットの MAC ヘッダーを検査できます。 MAC ヘッダーには、パケットの種類、宛先と送信元の MAC アドレス、VLAN 識別子、および優先度タグ フィールドが含まれます。 VMQ ミニポート ドライバーは、NDIS_RECEIVE_FILTER_MAC_HEADER_SUPPORTED フラグを設定する必要があります。
SupportedMacHeaderFields
ミニポート ドライバーが検査できる MAC ヘッダー フィールドの種類。 VMQ ミニポート ドライバーは、NDIS_RECEIVE_FILTER_MAC_HEADER_DEST_ADDR_SUPPORTED フラグを設定する必要があります。
MaxMacHeaderFilters
ミニポート ドライバーがサポートする MAC ヘッダー フィルターの最大数。 少なくとも VM キューと同じ数のヘッダー フィルターが必要です。
MaxQueueGroups
このメンバーは NDIS 用に予約されています。
MaxQueuesPerQueueGroup
このメンバーは NDIS 用に予約されています。
MinLookaheadSplitSize
ネットワーク アダプターが先読みパケット セグメントをサポートする最小サイズ (バイト単位)。
注: NDIS 6.30 以降では、パケット データの個別の先読みバッファーへの分割はサポートされなくなりました。 NDIS 6.30 以降のバージョンをサポートするミニポート ドライバーは、このメンバーを 0 に設定する必要があります。
MaxLookaheadSplitSize
ネットワーク アダプターが先読みパケット セグメントをサポートする最大サイズ (バイト単位)。
注: NDIS 6.30 以降では、パケット データの個別の先読みバッファーへの分割はサポートされなくなりました。 NDIS 6.30 以降のバージョンをサポートするミニポート ドライバーは、このメンバーを 0 に設定する必要があります。
OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES OID クエリから正常に戻った後、NDIS_OID_REQUEST 構造体の InformationBuffer メンバーには NDIS_RECEIVE_FILTER_CAPABILITIES 構造体へのポインターが含まれます。 これらの機能には、INF ファイルの設定または 詳細 プロパティ ページによって現在無効にされている VMQ ハードウェア機能が含まれている場合があります。 VMQ INF ファイルの設定の詳細については、「VMQ Standard INF エントリ」を参照してください。
NDIS ミニポート ドライバーは、NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 構造体の HardwareReceiveFilterCapabilities メンバーの初期化中に受信フィルター ハードウェア機能を提供します。
OID_RECEIVE_FILTER_CURRENT_CAPABILITIES OID クエリから正常に戻った後、NDIS_OID_REQUEST 構造体の InformationBuffer メンバーには NDIS_RECEIVE_FILTER_CAPABILITIES 構造体へのポインターが含まれます。 これらの機能には、現在有効になっている VMQ 機能が含まれます。
NDIS ミニポート ドライバーは、NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 構造体の CurrentReceiveFilterCapabilities メンバーの初期化中に現在有効になっている受信フィルター機能を提供します。
NDIS は、バインド操作中に、NDIS_BIND_PARAMETERS 構造体の ReceiveFilterCapabilities メンバーの上にあるプロトコル ドライバーに下にあるネットワーク アダプターの現在有効な受信フィルター機能を報告します。
NDIS_RECEIVE_FILTER_GLOBAL_PARAMETERS 構造体は、現在のグローバル受信フィルター設定を取得するために、OID_RECEIVE_FILTER_GLOBAL_PARAMETERS クエリ OID で使用されます。
NDIS_RECEIVE_FILTER_GLOBAL_PARAMETERS には、次の情報が含まれます。
EnabledFilterTypes
有効な受信フィルターの種類。 NDIS_RECEIVE_FILTER_VMQ_FILTERS_ENABLED フラグは、仮想マシン キュー (VMQ) フィルターが有効になっていることを指定します。
EnabledQueueTypes
有効な受信キューの種類。 NDIS_RECEIVE_FILTER_VM_QUEUES_ENABLED フラグは、仮想マシン (VM) キューが有効になっていることを指定します。
OID_RECEIVE_FILTER_GLOBAL_PARAMETERS OID から正常に戻った後、NDIS_OID_REQUEST 構造体の InformationBuffer メンバーには NDIS_RECEIVE_FILTER_GLOBAL_PARAMETERS 構造体へのポインターが含まれます。 NDIS_RECEIVE_FILTER_GLOBAL_PARAMETERS 構造体は、ネットワーク アダプターで有効または無効になっている受信フィルター機能を指定します。
NDIS プロトコル ドライバーは、OID_RECEIVE_FILTER_GLOBAL_PARAMETERS を使用して、ネットワーク アダプターで受信フィルターの現在のグローバル構成パラメーターを照会します。 たとえば、プロトコル ドライバーは、この OID を使用して、受信フィルターまたは受信キューの種類が有効か、無効かを判断できます。