OID_RECEIVE_FILTER_SET_FILTER

Un driver overlying invia una richiesta di metodo OID di OID_RECEIVE_FILTER_SET_FILTER per impostare un filtro su una scheda di rete.

Il membro InformationBuffer della struttura NDIS_OID_REQUEST contiene un puntatore a un buffer allocato dal chiamante. Questo buffer è formattato per contenere quanto segue:

Una volta restituito correttamente dalla richiesta del metodo OID, il membro InformationBuffer della struttura NDIS_OID_REQUEST contiene un puntatore a una struttura NDIS_RECEIVE_FILTER_PARAMETERS . Se il driver overlying sta creando un nuovo filtro di ricezione, NDIS aggiorna questa struttura con un nuovo identificatore di filtro.

Commenti

I filtri di ricezione NDIS vengono usati nelle interfacce NDIS seguenti:

La richiesta di metodo OID di OID_RECEIVE_FILTER_SET_FILTER è obbligatoria per i driver miniport che supportano l'interfaccia di unione dei pacchetti NDIS, SR-IOV o VMQ.

Il driver eccessivamente inizializza la struttura NDIS_RECEIVE_FILTER_PARAMETERS con la configurazione del filtro richiesta. NDIS assegna un identificatore di filtro nel membro FilterId della struttura NDIS_RECEIVE_FILTER_PARAMETERS e passa la richiesta di metodo al driver miniport sottostante.

Ogni filtro impostato in una coda di ricezione ha un identificatore di filtro univoco per una scheda di rete. Ovvero, gli identificatori di filtro non vengono duplicati in code diverse gestite dalla scheda di rete. Quando NDIS riceve una richiesta OID per impostare un filtro in una coda di ricezione, verifica i parametri del filtro. Dopo che NDIS alloca le risorse necessarie e l'identificatore di filtro, invia la richiesta OID alla scheda di rete sottostante. Se la scheda di rete può allocare correttamente le risorse software e hardware necessarie per il filtro, completa la richiesta OID con lo stato restituito di NDIS_STATUS_SUCCESS.

Nota A partire da NDIS 6.30, il filtro di ricezione di unione dei pacchetti è supportato solo nella coda di ricezione predefinita della scheda di rete. Questa coda di ricezione ha un identificatore di NDIS_DEFAULT_RECEIVE_QUEUE_ID.

Il driver miniport deve mantenere gli identificatori di filtro per i filtri di ricezione allocati. NDIS usa l'identificatore di un filtro nelle richieste OID successive per modificare i parametri del filtro di ricezione o cancellare il filtro di ricezione.

Dopo che un driver miniport riceve una richiesta di OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE e include filtri impostati nella coda, la coda si trova nello stato In esecuzione . In questo stato, il driver miniport può avviare le indicazioni dei pacchetti nella coda chiamando NdisMIndicateReceiveNetBufferLists.

Linee guida aggiuntive per l'interfaccia SR-IOV

I punti seguenti si applicano ai driver miniport che supportano l'interfaccia SR-IOV:

  • Per l'interfaccia SR-IOV, viene creata una coda di ricezione in una porta virtuale predefinita o non predefinita (VPort).

    Nota A partire da Windows Server 2012, l'interfaccia SR-IOV supporta solo la coda di ricezione predefinita di un VPort.

    Dopo l'allocazione di un VPort SR-IOV tramite una richiesta di set OID di OID_NIC_SWITCH_CREATE_VPORT, gli overlying driver possono impostare filtri sul VPort con richieste OID di OID_RECEIVE_FILTER_SET_FILTER.

    Nota Solo il driver overlying che ha allocato il VPort può impostare un filtro su tale VPort.

  • Poiché il VPort predefinito esiste sempre, i driver overlying possono sempre impostare un filtro sul VPort predefinito.

  • Quando viene creato il VPort, non vengono impostati filtri di ricezione. In questo caso, il driver miniport non deve indicare alcun pacchetto di ricezione su tale VPort prima che il driver miniport riceva una richiesta OID di OID_RECEIVE_FILTER_SET_FILTER per il VPort. Dopo l'emissione di questa richiesta OID, il driver miniport può indicare pacchetti in tale VPort.

    Nota Se il driver miniport indica i pacchetti in un VPort durante l'elaborazione di una richiesta OID di OID_RECEIVE_FILTER_SET_FILTER, deve completare la richiesta OID e restituire un codice di stato NDIS_STATUS_SUCCESS.

Linee guida aggiuntive per l'interfaccia VMQ

I punti seguenti si applicano ai driver miniport che supportano l'interfaccia VMQ:

  • Dopo aver allocato una coda di ricezione VMQ, i driver overlying possono impostare filtri nella coda di ricezione con richieste OID di OID_RECEIVE_FILTER_SET_FILTER.

    Nota Solo il driver di protocollo che ha allocato una coda di ricezione può impostare un filtro su tale coda.

  • Poiché la coda predefinita esiste sempre, gli overlying driver possono sempre impostare un filtro sulla coda predefinita. Se la scheda di rete supporta una coda di rilascio, i driver eccessivamente possono impostare un filtro sulla coda di rilascio.

    I driver eccessivamente non sono proprietari delle code predefinite o di rilascio. Pertanto, tutti i driver di protocollo associati a una scheda di rete usano la coda predefinita o di rilascio.

  • Quando viene creata la coda di ricezione, non vengono impostati filtri di ricezione. In questo caso, il driver miniport non deve indicare alcun pacchetto di ricezione nella coda di ricezione prima che il driver miniport riceva una richiesta OID di OID_RECEIVE_FILTER_SET_FILTER per la coda di ricezione. Dopo l'emissione di questa richiesta OID, il driver miniport può indicare i pacchetti nella coda di ricezione.

    Nota Se il driver miniport indica i pacchetti in una coda durante l'elaborazione di una richiesta OID di OID_RECEIVE_FILTER_SET_FILTER, deve completare la richiesta OID e restituire un codice di stato NDIS_STATUS_SUCCESS.

Codici di stato restituiti

Il driver miniport restituisce uno dei codici di stato seguenti per la richiesta del metodo OID di OID_RECEIVE_FILTER_SET_FILTER:

NDIS_STATUS_SUCCESS
Il filtro è stato impostato correttamente nella coda. Il buffer delle informazioni contiene la struttura NDIS_RECEIVE_FILTER_PARAMETERS aggiornata.

NDIS_STATUS_PENDING
La richiesta è in attesa di completamento. Il codice di stato finale e i risultati verranno passati al gestore di completamento della richiesta OID del chiamante.

NDIS_STATUS_INVALID_PARAMETER
Uno o più parametri forniti dal driver overlying non sono validi.

NDIS_STATUS_INVALID_LENGTH
Il buffer delle informazioni era troppo breve. NDIS imposta i DATI. METHOD_INFORMATION. Membro BytesNeeded nella struttura NDIS_OID_REQUEST alle dimensioni minime del buffer necessarie.

NDIS_STATUS_NOT_SUPPORTED
La versione NDIS del driver miniport è una versione precedente alla 6.20.

NDIS_STATUS_FAILURE
La richiesta non è riuscita per altri motivi.

Requisiti

Versione

Supportato in NDIS 6.20 e versioni successive.

Intestazione

Ntddndis.h (include Ndis.h)

Vedi anche

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