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:
Struttura NDIS_RECEIVE_FILTER_PARAMETERS che specifica i parametri per un filtro di ricezione NDIS.
Matrice di strutture NDIS_RECEIVE_FILTER_FIELD_PARAMETERS che specifica il criterio di test del filtro per un campo in un'intestazione di pacchetto di rete.
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:
Unione di pacchetti NDIS. Per altre informazioni su come usare i filtri di ricezione in questa interfaccia, vedere Managing Packet Coalescing Receive Filters.For more information about how to use receive filters in this interface, see Managing Packet Coalescing Receive Filters.
Single Root I/O Virtualization (SR-IOV). Per altre informazioni su come usare i filtri di ricezione in questa interfaccia, vedere Impostazione di un filtro di ricezione su una porta virtuale.
VMQ (Virtual Machine Queue). Per altre informazioni su come usare i filtri di ricezione in questa interfaccia, vedere Impostazione e cancellazione dei filtri VMQ.
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_RECEIVE_FILTER_PARAMETERS
NET_BUFFER_LIST_RECEIVE_FILTER_ID