OID_RECEIVE_FILTER_SET_FILTER

過度配置驅動程式發出OID_RECEIVE_FILTER_SET_FILTER的 OID 方法要求,以在網路介面卡上設定篩選。

NDIS_OID_REQUEST結構的InformationBuffer成員包含呼叫端配置的緩衝區指標。 此緩衝區的格式設定為包含下列內容:

從 OID 方法要求成功傳回之後,NDIS_OID_REQUEST結構的InformationBuffer成員會包含NDIS_RECEIVE_FILTER_PARAMETERS結構的指標。 如果過度配置驅動程式正在建立新的接收篩選器,NDIS 會以新的篩選識別碼更新此結構。

備註

NDIS 接收篩選準則用於下列 NDIS 介面:

OID_RECEIVE_FILTER_SET_FILTER的 OID 方法要求是支援 NDIS 封包聯合、SR-IOV 或 VMQ 介面的迷你埠驅動程式的必要條件。

過度配置驅動程式會使用其要求的篩選組態,初始化 NDIS_RECEIVE_FILTER_PARAMETERS 結構。 NDIS 會在 NDIS_RECEIVE_FILTER_PARAMETERS 結構的 FilterId 成員中指派篩選識別碼,並將方法要求傳遞至基礎迷你埠驅動程式。

在接收佇列上設定的每個篩選,都有網路介面卡的唯一篩選識別碼。 也就是說,篩選識別碼不會在網路介面卡管理的不同佇列上重複。 當 NDIS 收到 OID 要求以在接收佇列上設定篩選時,它會驗證篩選參數。 在 NDIS 配置必要的資源和篩選識別碼之後,它會將 OID 要求提交至基礎網路介面卡。 如果網路介面卡可以成功配置篩選所需的軟體和硬體資源,它會完成 OID 要求,且傳回狀態為 NDIS_STATUS_SUCCESS。

注意 從 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 之後,過度分配的驅動程式可以在 VPort 上設定 篩選,且 OID 要求為 OID_RECEIVE_FILTER_SET_FILTER。

    注意 只有配置 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狀態碼。

傳回狀態碼

迷你埠驅動程式會針對 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。NDIS_OID_REQUEST 結構中的 BytesNeeded成員,以達到所需的最小緩衝區大小。

NDIS_STATUS_NOT_SUPPORTED
迷你埠驅動程式的 NDIS 版本是 6.20 之前的版本。

NDIS_STATUS_FAILURE
要求因其他原因而失敗。

規格需求

版本

NDIS 6.20 和更新版本支援。

標頭

Ntddndis.h (包括 Ndis.h)

另請參閱

NdisMIndicateReceiveNetBufferLists

NDIS_OID_REQUEST

NDIS_RECEIVE_FILTER_PARAMETERS

NET_BUFFER_LIST

NET_BUFFER_LIST_RECEIVE_FILTER_ID

OID_NIC_SWITCH_CREATE_VPORT

OID_RECEIVE_FILTER_CLEAR_FILTER

OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE