判斷網路適配器的 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 結構來註冊其篩選功能。 驅動程式接著會將 HardwareReceiveFilterCapabilitiesNDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 結構的成員設定為指向 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)篩選器。
啟用佇列類型
支援的接收佇列類型。 NDIS_RECEIVE_FILTER_VM_QUEUES_ENABLED旗標表示已啟用虛擬機(VM)佇列。
NumQueues
網路適配器支援的接收佇列數目。 若要支援 VMQ,此數字必須等於或小於 NIC 支援的單播 MAC 位址數目。 此數位不得包含預設佇列。
附註 網路適配器支援的單播 MAC 位址或 VM 佇列數目不包含相關聯 NIC 的 MAC 位址。
支持的佇列屬性
網路適配器支援的佇列屬性。 NDIS_RECEIVE_FILTER_VM_QUEUE_SUPPORTED旗標表明網路介面卡符合支援 VMQ 篩選的最低需求。 支援 VMQ 的 NIC 必須為每個接收佇列提供一個 MSI-X 資料表項目。 因此,VMQ 迷你埠驅動程序必須設定NDIS_RECEIVE_FILTER_MSI_X_SUPPORTED旗標。
支援的篩選測試
迷你埠驅動程式支援的篩選測試作業。 例如,網路適配器支持測試選取的標頭字段,以判斷它是否等於指定的值。 VMQ 小型端口驅動程式必須設定NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_EQUAL_SUPPORTED旗標。
支援的標頭
迷你埠驅動程式可以檢查的網路封包標頭類型。 例如,網路適配器可以檢查網路封包的 MAC 標頭。 MAC 標頭包含封包類型、目的地和來源 MAC 位址、VLAN 識別元,以及優先順序標記字段。 VMQ 迷你埠驅動程序必須設定NDIS_RECEIVE_FILTER_MAC_HEADER_SUPPORTED旗標。
支援的Mac標頭欄位
迷你埠驅動程式可以檢查的 MAC 標頭欄位類型。 VMQ 微型端口驅動程序必須設定 NDIS_RECEIVE_FILTER_MAC_HEADER_DEST_ADDR_SUPPORTED 旗標。
MaxMacHeaderFilters
迷你埠驅動程序支援的 MAC 標頭篩選數目上限。 至少應有與 VM 佇列數量相等或更多的標頭篩選器。
MaxQueuesPerQueueGroup
此成員保留給 NDIS。
MinLookaheadSplitSize
網路適配器支援的前視封包區段的最小大小,單位為位元組。
注意 從 NDIS 6.30 開始,不再支持將資料封包分割成個別的前瞻緩衝區。 支援 NDIS 6.30 或更新版本的迷你埠驅動程式必須將這個成員設定為零。
MaxLookaheadSplitSize
以位元組為單位,網路介面卡支援的前視封包片段的最大大小。
注意 從 NDIS 6.30 開始,不再支援將封包數據分割成個別的前視緩衝區。 支援 NDIS 6.30 或更新版本的迷你埠驅動程式必須將這個成員設定為零。
成功返回 OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES OID 查詢後,InformationBuffer 成為 NDIS_OID_REQUEST 結構的一部分,並包含一個指向 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 迷你埠驅動程式會在 CurrentReceiveFilterCapabilities 中提供目前啟用的接收篩選功能,NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 結構的成員。
NDIS 會報告目前啟用的基礎網路適配器接收篩選功能,以在系結作業期間,將 ReceiveFilterCapabilities 中的通訊協定驅動程式NDIS_BIND_PARAMETERS 結構的成員。
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 來判斷是否啟用或停用接收篩選或接收佇列的類型。