OID_RECEIVE_FILTER_SET_FILTER

Un controlador demasiado excesivo emite una solicitud de método OID de OID_RECEIVE_FILTER_SET_FILTER para establecer un filtro en un adaptador de red.

El miembro InformationBuffer de la estructura NDIS_OID_REQUEST contiene un puntero a un búfer asignado por el autor de la llamada. Este búfer tiene el formato siguiente:

Después de una devolución correcta de la solicitud de método OID, el miembro InformationBuffer de la estructura NDIS_OID_REQUEST contiene un puntero a una estructura de NDIS_RECEIVE_FILTER_PARAMETERS . Si el controlador de sobreaprovisionamiento está creando un nuevo filtro de recepción, NDIS actualiza esta estructura con un nuevo identificador de filtro.

Observaciones

Los filtros de recepción NDIS se usan en las siguientes interfaces NDIS:

La solicitud de método OID de OID_RECEIVE_FILTER_SET_FILTER es obligatoria para los controladores de minipuerto que admiten la fusión de paquetes NDIS, SR-IOV o interfaz VMQ.

El controlador de sobreaprovisionamiento inicializa la estructura de NDIS_RECEIVE_FILTER_PARAMETERS con su configuración de filtro solicitada. NDIS asigna un identificador de filtro en el miembro FilterId de la estructura NDIS_RECEIVE_FILTER_PARAMETERS y pasa la solicitud de método al controlador de miniport subyacente.

Cada filtro que se establece en una cola de recepción tiene un identificador de filtro único para un adaptador de red. Es decir, los identificadores de filtro no se duplican en diferentes colas que administra el adaptador de red. Cuando NDIS recibe una solicitud de OID para establecer un filtro en una cola de recepción, comprueba los parámetros de filtro. Después de que NDIS asigne los recursos necesarios y el identificador de filtro, envía la solicitud OID al adaptador de red subyacente. Si el adaptador de red puede asignar correctamente los recursos de software y hardware necesarios para el filtro, completa la solicitud OID con un estado de retorno de NDIS_STATUS_SUCCESS.

Nota A partir de NDIS 6.30, el filtro de recepción de fusión de paquetes solo se admite en la cola de recepción predeterminada del adaptador de red. Esta cola de recepción tiene un identificador de NDIS_DEFAULT_RECEIVE_QUEUE_ID.

El controlador de minipuerto debe conservar los identificadores de filtro para los filtros de recepción asignados. NDIS usa el identificador de un filtro en solicitudes OID posteriores para cambiar los parámetros del filtro de recepción o borrar el filtro de recepción.

Una vez que un controlador de minipuerto recibe una solicitud de OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE y tiene filtros establecidos en la cola, la cola se encuentra en estado En ejecución . En este estado, el controlador de minipuerto puede iniciar indicaciones de paquetes en la cola llamando a NdisMIndicateReceiveNetBufferLists.

Directrices adicionales para la interfaz SR-IOV

Los siguientes puntos se aplican a los controladores de minipuerto que admiten la interfaz SR-IOV:

  • Para la interfaz SR-IOV, se crea una cola de recepción en un puerto virtual predeterminado o no predeterminado (VPort).

    Nota A partir de Windows Server 2012, la interfaz SR-IOV solo admite la cola de recepción predeterminada de un VPort.

    Después de asignar un VPort sr-IOV a través de una solicitud de conjunto de OID de OID_NIC_SWITCH_CREATE_VPORT, los controladores de exceso pueden establecer filtros en VPort con solicitudes de OID de OID_RECEIVE_FILTER_SET_FILTER.

    Nota Solo el controlador que asignó el VPort puede establecer un filtro en ese VPort.

  • Dado que el VPort predeterminado siempre existe, los controladores demasiado excesivos siempre pueden establecer un filtro en el VPort predeterminado.

  • Cuando se crea el VPort, no se establecen filtros de recepción en él. En este caso, el controlador de minipuerto no debe indicar ningún paquete de recepción en ese VPort antes de que el controlador de miniporte reciba una solicitud OID de OID_RECEIVE_FILTER_SET_FILTER para el VPort. Una vez emitida esta solicitud de OID, el controlador de minipuerto puede indicar paquetes en ese VPort.

    Nota Si el controlador de minipuerto indica paquetes en un VPort mientras está procesando una solicitud OID de OID_RECEIVE_FILTER_SET_FILTER, debe completar la solicitud OID y devolver un código de estado NDIS_STATUS_SUCCESS.

Instrucciones adicionales para la interfaz VMQ

Los siguientes puntos se aplican a los controladores de minipuerto que admiten la interfaz VMQ:

  • Una vez asignada una cola de recepción de VMQ, los controladores que se sobreponen pueden establecer filtros en la cola de recepción con solicitudes de OID de OID_RECEIVE_FILTER_SET_FILTER.

    Nota Solo el controlador de protocolo que asignó una cola de recepción puede establecer un filtro en esa cola.

  • Dado que la cola predeterminada siempre existe, los controladores demasiado excesivos siempre pueden establecer un filtro en la cola predeterminada. Si el adaptador de red admite una cola de colocación, los controladores que se sobreponen pueden establecer un filtro en la cola de colocación.

    Los controladores demasiado excesivos no poseen las colas predeterminadas ni quitan. Por lo tanto, todos los controladores de protocolo que están enlazados a un adaptador de red usan la cola predeterminada o drop.

  • Cuando se crea la cola de recepción, no se establecen filtros de recepción en ella. En este caso, el controlador de miniporte no debe indicar ningún paquete de recepción en esa cola de recepción antes de que el controlador de miniporte reciba una solicitud OID de OID_RECEIVE_FILTER_SET_FILTER para la cola de recepción. Una vez emitida esta solicitud de OID, el controlador de minipuerto puede indicar paquetes en esa cola de recepción.

    Nota Si el controlador de minipuerto indica paquetes en una cola mientras está procesando una solicitud OID de OID_RECEIVE_FILTER_SET_FILTER, debe completar la solicitud OID y devolver un código de estado NDIS_STATUS_SUCCESS.

Códigos de estado de devolución

El controlador de minipuerto devuelve uno de los siguientes códigos de estado para la solicitud de método OID de OID_RECEIVE_FILTER_SET_FILTER:

NDIS_STATUS_SUCCESS
El filtro se estableció correctamente en la cola. El búfer de información contiene la estructura de NDIS_RECEIVE_FILTER_PARAMETERS actualizada.

NDIS_STATUS_PENDING
La solicitud está pendiente de finalización. El código de estado final y los resultados se pasarán al controlador de finalización de solicitudes de OID del autor de la llamada.

NDIS_STATUS_INVALID_PARAMETER
Uno o varios de los parámetros que proporcionó el controlador de sobreaprovisionamiento no eran válidos.

NDIS_STATUS_INVALID_LENGTH
El búfer de información era demasiado corto. NDIS establece data . METHOD_INFORMATION. Miembro BytesNeeded de la estructura NDIS_OID_REQUEST al tamaño mínimo del búfer necesario.

NDIS_STATUS_NOT_SUPPORTED
La versión NDIS del controlador miniport es una versión anterior a la 6.20.

NDIS_STATUS_FAILURE
Error en la solicitud por otros motivos.

Requisitos

Versión

Se admite en NDIS 6.20 y versiones posteriores.

Encabezado

Ntddndis.h (incluye Ndis.h)

Consulte también

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