Establecer un filtro de recepción en un puerto virtual
Después de crear un puerto virtual (VPort) en el conmutador NIC del adaptador de red, los controladores que se sobreponen pueden establecer filtros de recepción en VPort. Solo el controlador que creó la instancia de VPort puede establecer un filtro de recepción en ese VPort.
Este tema contiene la información siguiente:
Establecer un filtro de recepción en una instancia de VPort
Usar la marca de NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO
Uso del identificador de filtro
Control de filtros de recepción en una VPort
Para obtener más información sobre cómo crear una instancia de VPort, consulte Creación de un puerto virtual.
Nota Dado que el VPort predeterminado siempre existe y nunca se crea explícitamente, cualquier controlador de exceso puede establecer un filtro de recepción en el VPort predeterminado. Los controladores que se sobreponen no poseen el VPort predeterminado. Por lo tanto, todos los controladores de protocolo que están enlazados a un adaptador de red pueden usar el VPort predeterminado. El VPort predeterminado tiene un valor de identificador de NDIS_DEFAULT_VPORT_ID.
Establecer un filtro de recepción en una instancia de VPort
Para establecer y configurar un filtro en una instancia de VPort, un controlador de sobreslización emite una solicitud de método de identificador de objeto (OID) de OID_RECEIVE_FILTER_SET_FILTER. El miembro InformationBuffer de la estructura NDIS_OID_REQUEST contiene inicialmente un puntero a una estructura de NDIS_RECEIVE_FILTER_PARAMETERS .
Antes de que el controlador sobrecale emite esta solicitud de método de OID, debe inicializar una estructura de NDIS_RECEIVE_FILTER_PARAMETERS . El controlador debe establecer los miembros de esta estructura de la siguiente manera:
El miembro FilterType debe establecerse en un valor de enumeración NDIS_RECEIVE_FILTER_TYPE .
Nota A partir de NDIS 6.30, solo se admiten los tipos de filtro NdisReceiveFilterTypeVMQueue para la interfaz de virtualización de E/S raíz única (SR-IOV).
El miembro QueueId debe establecerse en NDIS_DEFAULT_RECEIVE_QUEUE_ID.
El miembro VPortId debe establecerse en el identificador asociado a VPort. El controlador de sobrestitución obtiene el identificador VPort a través de una de las siguientes maneras:
A partir de una solicitud de método OID anterior de OID_NIC_SWITCH_CREATE_VPORT.
A partir de una solicitud de método OID anterior de OID_NIC_SWITCH_ENUM_VPORTS.
El miembro FilterId debe establecerse en NDIS_DEFAULT_RECEIVE_FILTER_ID.
Nota NDIS asigna un identificador de filtro único en este miembro antes de reenviar la solicitud OID al controlador de miniporte para su procesamiento.
Los miembros FieldParametersArrayOffset, FieldParametersArrayNumElements y FieldParametersArrayElementSize de la estructura NDIS_RECEIVE_FILTER_PARAMETERS deben establecerse adecuadamente para definir una matriz de estructuras de NDIS_RECEIVE_FILTER_FIELD_PARAMETERS . Cada estructura NDIS_RECEIVE_FILTER_FIELD_PARAMETERS de la matriz establece el criterio de prueba de filtro para un campo de un encabezado de red.
Para la interfaz SR-IOV, se definen los siguientes parámetros de prueba de campo:
La dirección de control de acceso multimedia de destino (MAC) del paquete es igual a la dirección MAC especificada.
El identificador de LAN virtual (VLAN) del paquete es igual al identificador de VLAN especificado.
Después de una devolución correcta de la solicitud del método OID, el miembro InformationBuffer de la estructura de NDIS_OID_REQUEST contiene un puntero a una estructura de NDIS_RECEIVE_FILTER_PARAMETERS con un nuevo identificador de filtro.
Usar la marca de NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO
El miembro Flags de la estructura NDIS_RECEIVE_FILTER_FIELD_PARAMETERS especifica las acciones que se van a realizar para el filtro de recepción. Los siguientes puntos se aplican a la marca de NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO :
Si la marca NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO está establecida en el miembro Flags , el adaptador de red debe indicar solo los paquetes recibidos que coincidan con todos los criterios de prueba siguientes:
Paquete con una dirección MAC coincidente.
Paquete que no tiene ninguna etiqueta VLAN o tiene un identificador VLAN de cero.
Si se establece la marca NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO , el adaptador de red no debe indicar paquetes que tengan una dirección MAC coincidente y un identificador VLAN distinto de cero.
Nota Si la pila de virtualización establece el filtro de direcciones MAC y no se configura ningún filtro de identificador de VLAN mediante la solicitud de conjunto de OID_RECEIVE_FILTER_SET_FILTER , el modificador también establece la marca NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO .
A partir de NDIS 6.30, si no se establece la marca de NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO y no hay ningún filtro de identificador VLAN configurado por la solicitud del método OID_RECEIVE_FILTER_SET_FILTER , el controlador de miniporte debe realizar una de las siguientes acciones:
El controlador de minipuerto debe devolver un estado erróneo para la solicitud de método OID_RECEIVE_FILTER_SET_FILTER .
El controlador de minipuerto debe configurar el adaptador de red para inspeccionar y filtrar los campos de dirección MAC especificados. Si una etiqueta VLAN está presente en el paquete recibido, el adaptador de red debe quitarla de los datos del paquete. El controlador de minipuerto debe colocar la etiqueta VLAN en un NDIS_NET_BUFFER_LIST_8021Q_INFO asociado a la estructura NET_BUFFER_LIST del paquete.
Si un controlador de protocolo establece un filtro de direcciones MAC y un filtro de identificador VLAN con la solicitud de método OID_RECEIVE_FILTER_SET_FILTER , no establece la marca de NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO en ninguno de los campos de filtro. En este caso, el controlador de minipuerto debe indicar paquetes que coincidan con la dirección MAC especificada y el identificador VLAN. Es decir, el controlador de minipuerto no debe indicar paquetes con una dirección MAC coincidente que tenga un identificador VLAN cero o que no estén marcados como paquetes.
Uso del identificador de filtro
NDIS asigna un identificador de filtro en el miembro FilterId de la estructura de NDIS_RECEIVE_FILTER_PARAMETERS y pasa la solicitud de método OID de OID_RECEIVE_FILTER_SET_FILTER al controlador de miniport subyacente. Cada filtro que se establece en una VPort tiene un identificador de filtro único para un adaptador de red. Es decir, los identificadores de filtro no se duplican en distintas colas que administra el adaptador de red.
El controlador de sobreslización debe usar el identificador de filtro que proporciona NDIS en solicitudes OID posteriores para cambiar los parámetros de filtro o liberar un filtro.
Cuando NDIS recibe una solicitud OID para establecer un filtro en una VPort, comprueba los parámetros de filtro. Una vez que NDIS asigna 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 hardware y software necesarios para el filtro, completa la solicitud OID con NDIS_STATUS_SUCCESS.
El controlador de minipuerto debe conservar los identificadores de filtro para los filtros de recepción asignados. NDIS usa el identificador de filtro de un filtro con solicitudes OID posteriores para cambiar los parámetros de filtro de recepción o borrar el filtro de recepción. Para obtener más información sobre cómo cambiar parámetros y borrar filtros, consulte Obtención y actualización de parámetros de cola de VM y Borrado de un filtro VMQ.
Control de filtros de recepción en una VPort
El controlador de minipuerto programa el adaptador de red basado en los filtros de la siguiente manera:
Todos los parámetros de prueba de campo de un filtro determinado deben coincidir para asignar un paquete a VPort.
Se pueden establecer varios filtros en una VPort.
Los paquetes deben asignarse a VPort si se pasa alguno de los filtros.
El adaptador de red combina los resultados de todas las pruebas de campo con una operación AND lógica. Es decir, si se produce un error en cualquier prueba de campo incluida en la matriz de estructuras de NDIS_RECEIVE_FILTER_FIELD_PARAMETERS , el paquete de red no cumple el criterio de filtro especificado.
Cuando un adaptador de red prueba un paquete recibido con estos criterios de filtro, debe omitir todos los campos del paquete que no tienen criterios de prueba especificados.