判斷網路介面卡的 VMQ 功能
NDIS 提供介面來判斷網路介面卡的 VMQ 功能,例如:
網路介面卡的一般篩選功能。
支援的 VM 佇列功能。
Lookahead 支援,允許將網路資料記憶體分割成兩個不同的緩衝區。
注意 從 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 佇列。
MaxQueuesPerQueueGroup
此成員會保留給 NDIS。
MinLoSplitSize
網路介面卡支援尋找封包區段的大小下限,以位元組為單位。
注意 從 NDIS 6.30 開始,不再支援將封包資料分割成個別的外觀緩衝區。 支援 NDIS 6.30 或更新版本的迷你埠驅動程式必須將這個成員設定為零。
MaxLoSplitSize
網路介面卡支援尋找封包區段的大小上限,以位元組為單位。
注意 從 NDIS 6.30 開始,不再支援將封包資料分割成個別的外觀緩衝區。 支援 NDIS 6.30 或更新版本的迷你埠驅動程式必須將這個成員設定為零。
從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 來判斷是否啟用或停用接收篩選或接收佇列的類型。