過度配置驅動程式會發出 OID_RECEIVE_FILTER_SET_FILTER 的 OID 方法要求,以在網路適配器上設定篩選。
InformationBufferNDIS_OID_REQUEST 結構的成員包含呼叫端配置緩衝區的指標。 此緩衝區的格式設定為包含下列專案:
NDIS_RECEIVE_FILTER_PARAMETERS 結構,指定 NDIS 接收篩選的參數。
NDIS_RECEIVE_FILTER_FIELD_PARAMETERS 結構的陣列,指定網路封包標頭中欄位的篩選測試準則。
從 OID 方法要求成功傳回之後,InformationBufferNDIS_OID_REQUEST 結構的成員包含 NDIS_RECEIVE_FILTER_PARAMETERS 結構的指標。 如果過度配置驅動程式正在建立新的接收篩選器,NDIS 會以新的篩選標識元更新此結構。
言論
NDIS 接收篩選器用於下列 NDIS 介面:
NDIS 封包聯合。 如需如何在此介面中使用接收篩選器的詳細資訊,請參閱 管理封包聯合接收篩選。
單一根目錄 I/O 虛擬化 (SR-IOV)。 如需如何在此介面中使用接收篩選的詳細資訊,請參閱在虛擬埠上設定接收篩選器 。
虛擬機佇列 (VMQ)。 如需如何在此介面中使用接收篩選的詳細資訊,請參閱 設定和清除 VMQ 篩選。
OID_RECEIVE_FILTER_SET_FILTER的 OID 方法要求對於支援 NDIS 封包聯合、SR-IOV 或 VMQ 介面的迷你埠驅動程式而言是必要的。
過度配置驅動程式會使用其要求的篩選組態,初始化 NDIS_RECEIVE_FILTER_PARAMETERS 結構。 NDIS 會在 NDIS_RECEIVE_FILTER_PARAMETERS 結構的 FilterId 成員中指派篩選標識符,並將方法要求傳遞至基礎迷你埠驅動程式。
在接收佇列上設定的每個篩選,都有網路適配器的唯一篩選標識符。 也就是說,篩選標識碼不會在網路適配器管理的不同佇列上重複。 當 NDIS 收到 OID 要求以在接收佇列上設定篩選時,它會驗證篩選參數。 在 NDIS 配置必要的資源和篩選標識碼之後,它會將 OID 要求提交至基礎網路適配器。 如果網路適配器可以成功配置篩選所需的軟體和硬體資源,它會完成傳回狀態為 NDIS_STATUS_SUCCESS 的 OID 要求。
注意 從 NDIS 6.30 開始,只有網路適配器的預設接收佇列才支援封包聯合接收篩選器。 此接收佇列具有NDIS_DEFAULT_RECEIVE_QUEUE_ID的標識碼。
迷你埠驅動程序必須保留已配置接收篩選條件的篩選標識碼。 NDIS 會在稍後的 OID 要求中使用篩選的標識碼來變更接收篩選參數,或清除接收篩選條件。
迷你埠驅動程式收到 OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE 要求,並在佇列上設定篩選之後,佇列會處於 執行中 狀態。 在此狀態下,迷你埠驅動程式可以呼叫 NdisMIndicateReceiveNetBufferLists來啟動佇列中的封包指示。
SR-IOV 介面的其他指導方針
下列幾點適用於支援 SR-IOV 介面的迷你埠驅動程式:
針對 SR-IOV 介面,會在預設或非預設虛擬埠 (VPort) 上建立接收佇列。
注意 從 Windows Server 2012 開始,SR-IOV 介面僅支援 VPort 的預設接收佇列。
透過 OID_NIC_SWITCH_CREATE_VPORT的 OID 集合要求配置 SR-IOV VPort 之後,過度配置驅動程式可以使用 OID_RECEIVE_FILTER_SET_FILTER 的 OID 要求,在 VPort 上設定篩選。
注意 只有配置 VPort 的過度驅動程式可以設定該 VPort 的篩選條件。
因為預設 VPort 一律存在,因此過度裝載的驅動程式一律可以在預設 VPort 上設定篩選。
建立 VPort 時,不會設定任何接收篩選。 在此情況下,迷你埠驅動程式在迷你埠驅動程式收到 VPort OID_RECEIVE_FILTER_SET_FILTER的 OID 要求之前,不得指出該 VPort 上的任何接收封包。 發出此 OID 要求之後,迷你埠驅動程式可以指出該 VPort 上的封包。
注意 如果迷你埠驅動程式在處理OID_RECEIVE_FILTER_SET_FILTER的 OID 要求時指出 VPort 上的封包,則必須完成 OID 要求,並傳回NDIS_STATUS_SUCCESS狀態代碼。
VMQ 介面的其他指導方針
下列幾點適用於支援 VMQ 介面的迷你連接埠驅動程式:
配置 VMQ 接收佇列之後,過度配置驅動程式可以在接收佇列上設定篩選,且 OID 要求為 OID_RECEIVE_FILTER_SET_FILTER。
注意 只有配置接收佇列的通訊協定驅動程式才能在該佇列上設定篩選。
因為預設佇列一律存在,因此過度依賴驅動程式一律可以在預設佇列上設定篩選。 如果網路適配器支援置放佇列,過度配置驅動程式可以在置放佇列上設定篩選。
過度放置驅動程式不會擁有預設或卸除佇列。 因此,系結至網路適配器的所有通訊協定驅動程式都會使用預設或卸除佇列。
建立接收佇列時,不會設定任何接收篩選。 在此情況下,迷你埠驅動程式在迷你埠驅動程式收到接收佇列OID_RECEIVE_FILTER_SET_FILTER的 OID 要求之前,不得指出該接收佇列上的任何接收封包。 發出此 OID 要求之後,迷你埠驅動程式可以指出該接收佇列上的封包。
注意 如果迷你埠驅動程式在處理OID_RECEIVE_FILTER_SET_FILTER的 OID 要求時指出佇列上的封包,則必須完成 OID 要求,並傳回NDIS_STATUS_SUCCESS狀態代碼。
傳回狀態代碼
miniport 驅動程式會針對 OID_RECEIVE_FILTER_SET_FILTER 的 OID 方法要求傳回下列其中一個狀態代碼:
NDIS_STATUS_SUCCESS
已成功在佇列上設定篩選條件。 信息緩衝區包含更新 NDIS_RECEIVE_FILTER_PARAMETERS 結構。
NDIS_STATUS_PENDING
要求擱置完成。 最終的狀態代碼和結果會傳遞至呼叫端的 OID 要求完成處理程式。
NDIS_STATUS_INVALID_PARAMETER
提供過度驅動程式的一或多個參數無效。
NDIS_STATUS_INVALID_LENGTH
信息緩衝區太短。 NDIS 會設定 DATA。METHOD_INFORMATION。BytesNeededNDIS_OID_REQUEST 結構中的成員,以所需的緩衝區大小下限。
NDIS_STATUS_NOT_SUPPORTED
迷你埠驅動程式的 NDIS 版本比 6.20 更早。
NDIS_STATUS_FAILURE
要求因其他原因而失敗。
要求
版本 |
NDIS 6.20 和更新版本支援。 |
頁眉 |
Ntddndis.h (包括 Ndis.h) |
另請參閱
NdisMIndicateReceiveNetBufferLists
NDIS_RECEIVE_FILTER_PARAMETERS
NET_BUFFER_LIST_RECEIVE_FILTER_ID