Control de filtros de recepción de fusión de paquetes
Varios filtros de recepción se descargan en un controlador de minipuerto a través de solicitudes de método OID de OID_RECEIVE_FILTER_SET_FILTER. Cada filtro puede especificar una o varias pruebas (pruebas de campo de encabezado) que usa el adaptador de red para determinar si un paquete recibido se debe fusionar en un búfer de fusión de hardware en el adaptador.
Antes de que el controlador miniporte configure el adaptador de red con los filtros de recepción, el controlador debe optimizar los filtros de recepción en función de las funcionalidades de hardware del adaptador. Por ejemplo, todos los filtros de recepción requieren una prueba de campo de encabezado para el encabezado MAC. Por lo tanto, el controlador podría optimizar las reglas de filtro en función de los resultados de esta prueba. Esto permite al adaptador determinar qué pruebas de campo de encabezado de encabezado de capa 3 (L3) y capa 4 (L4) de interconexión de sistemas abiertos (OSI) realizan a continuación.
En cuanto el adaptador de red se haya configurado con filtros de recepción, debe hacer lo siguiente:
Todos los parámetros de prueba de campo de encabezado para un filtro determinado deben coincidir en el paquete recibido para combinar el paquete en el búfer de fusión.
El adaptador de red combina los resultados de todas las pruebas de campo de encabezado de un filtro de recepción con una operación AND lógica. Es decir, si se produce un error en cualquier prueba de campo de encabezado incluida en la matriz de estructuras de NDIS_RECEIVE_FILTER_FIELD_PARAMETERS para un filtro de recepción, el paquete recibido no cumple el criterio de filtro especificado y no se debe fusionar.
El adaptador de red solo inspecciona los datos de paquetes en función de los parámetros de prueba de campo de encabezado especificados. El adaptador debe omitir todos los campos de encabezado del paquete para los que no se especifican las pruebas de campo de encabezado.
Si un paquete recibido coincide con todas las pruebas de campo de encabezado para cualquiera de los filtros de recepción, el adaptador de red debe fusionar el paquete dentro del búfer de fusión de hardware. En cuanto se combina el primer paquete, el adaptador de red debe iniciar un temporizador de hardware y debe establecer la hora de expiración en el valor del miembro MaxCoalescingDelay de la estructura de NDIS_RECEIVE_FILTER_PARAMETERS para el filtro de recepción coincidente.
A medida que se reciben más paquetes que coinciden con un filtro de recepción de fusión de paquetes, el adaptador de red los coloca en el búfer de fusión.
Si el temporizador de hardware ya se está ejecutando, el adaptador no debe detener ni reiniciar el temporizador para el filtro de recepción coincidente. Sin embargo, el adaptador puede configurar el temporizador de hardware con el valor de expiración más pequeño de los filtros de recepción coincidentes. Por ejemplo, cuando el controlador recibe un paquete que coincide con el filtro de recepción X, el adaptador inicia el temporizador con el valor de expiración especificado para ese filtro de recepción. Si el adaptador recibe un paquete que coincide con el filtro de recepción Y, el adaptador puede volver a configurar el temporizador de hardware con el valor de expiración especificado para ese filtro de recepción.
Nota El adaptador de red no debe volver a configurar el temporizador de hardware si el tiempo que queda en el temporizador es menor que el tiempo de expiración de un filtro de recepción.
En cuanto se fusionan los paquetes recibidos, el adaptador de red genera una interrupción si se produce alguno de los siguientes eventos:
Si el espacio disponible dentro del búfer de fusión de hardware alcanza una marca de agua baja específica del hardware, el adaptador de red debe generar una interrupción de recepción para que el controlador de miniporte pueda procesar los paquetes de recepción combinado.
Si el temporizador de hardware usado para el búfer de fusión de hardware expira, el adaptador de red debe generar una interrupción de recepción para que el controlador de miniporte pueda procesar los paquetes de recepción fusionados.
Si se borra un filtro de recepción y se han combinado paquetes que coinciden con ese filtro, el adaptador de red debe generar una interrupción de recepción para que el controlador de miniporte pueda procesar los paquetes de recepción combinado.
Si un paquete recibido no coincide con ninguno de los filtros de recepción, el adaptador de red debe generar una interrupción de recepción para que el controlador de miniporte pueda procesar el paquete recibido. Si se han combinado paquetes, el controlador de minipuerto también debe procesar esos paquetes.
Si el adaptador de red genera una interrupción para cualquier otro estado de interrupción distinto de una interrupción de recepción, el adaptador de red también debe indicar un estado de interrupción de recepción para que el controlador de miniporte pueda procesar los paquetes recibidos combinados.
En cuanto se genere la interrupción, el adaptador de red debe detener el temporizador de hardware si no ha expirado y debe borrar el búfer de fusión de hardware.
El controlador de minipuerto debe mantener un contador de paquetes combinado, que contiene un valor para el número de paquetes recibidos que han coinciden con un filtro de fusión de paquetes. NDIS consulta este contador a través de una solicitud de consulta OID de OID_PACKET_COALESCING_FILTER_MATCH_COUNT.
El adaptador de red solo realiza la fusión de paquetes mientras el hardware funciona en un estado de energía completa. Aunque el hardware está en un estado de bajo consumo, el adaptador solo debe filtrar los paquetes recibidos en función de los patrones de reactivación que se han descargado al adaptador a través de solicitudes de conjunto de OID de OID_PNP_ENABLE_WAKE_UP.
Cuando el adaptador de red pasa a un estado de energía completa, el controlador de minipuerto debe seguir estos pasos:
El controlador de minipuerto debe configurar el adaptador de red para descartar cualquier paquete combinado dentro del búfer de fusión de hardware. El adaptador de red puede haber combinado estos paquetes cuando se realizó la transición a un estado de bajo consumo.
El controlador de minipuerto debe configurar el adaptador de red con el conjunto de filtros de recepción de fusión de paquetes que se descargaron en el controlador antes de la transición de bajo consumo.
El controlador de minipuerto debe borrar el contador de paquetes combinado.