Tipos de hash RSS
El tipo de hash RSS especifica la parte de los datos de red recibidos que una NIC debe usar para calcular un valor hash RSS.
Los controladores que se sobreponen establecen el tipo hash, la función y la tabla de direccionamiento indirecto. El tipo hash que establece el controlador de sobreserción puede ser un subconjunto del tipo que el controlador de miniporte puede admitir. Para obtener más información, consulte Configuración rss.
El tipo hash es un OR de combinaciones válidas de las marcas siguientes:
- NDIS_HASH_IPV4
- NDIS_HASH_TCP_IPV4
- NDIS_HASH_UDP_IPV4
- NDIS_HASH_IPV6
- NDIS_HASH_TCP_IPV6
- NDIS_HASH_UDP_IPV6
- NDIS_HASH_IPV6_EX
- NDIS_HASH_TCP_IPV6_EX
- NDIS_HASH_UDP_IPV6_EX
Estos son los conjuntos de combinaciones de marcas válidas:
- IPv4 (combinaciones de NDIS_HASH_IPV4, NDIS_HASH_TCP_IPV4 y NDIS_HASH_UDP_IPV4)
- IPv6 (combinaciones de NDIS_HASH_IPV6, NDIS_HASH_TCP_IPV6 y NDIS_HASH_UDP_IPV6)
- IPv6 con encabezados de extensión (combinaciones de NDIS_HASH_IPV6_EX, NDIS_HASH_TCP_IPV6_EX y NDIS_HASH_UDP_IPV6_EX)
Una NIC debe admitir una de las combinaciones del conjunto IPv4. Los demás conjuntos y combinaciones son opcionales. Una NIC puede admitir más de un conjunto a la vez. En este caso, el tipo de datos recibidos determina qué tipo hash usa la NIC.
En general, si la NIC no puede interpretar correctamente los datos recibidos, no debe calcular el valor hash. Por ejemplo, si la NIC solo admite IPv4 y recibe un paquete IPv6, que no puede interpretar correctamente, no debe calcular el valor hash. Si la NIC recibe un paquete para un tipo de transporte que no admite, no debe calcular el valor hash. Por ejemplo, si la NIC recibe un paquete UDP cuando se supone que va a calcular valores hash para paquetes TCP, no debe calcular el valor hash. En este caso, el paquete se procesa como en el caso que no es RSS. Para obtener más información sobre el procesamiento de recepción no RSS, consulte Procesamiento de recepción no RSS.
Las combinaciones de tipos hash válidas del conjunto IPv4 son:
- NDIS_HASH_IPV4
- NDIS_HASH_TCP_IPV4
- NDIS_HASH_UDP_IPV4
- NDIS_HASH_TCP_IPV4 | NDIS_HASH_IPV4
- NDIS_HASH_UDP_IPV4 | NDIS_HASH_IPV4
- NDIS_HASH_TCP_IPV4 | NDIS_HASH_UDP_IPV4 | NDIS_HASH_IPV4
Si se establece esta marca por sí sola, la NIC debe calcular el valor hash en los siguientes campos de encabezado IPv4:
- Dirección IPv4 de origen
- Destination-IPv4-Address
Nota
Si una NIC recibe un paquete que tiene encabezados IP y TCP, no siempre se debe usar NDIS_HASH_TCP_IPV4. En el caso de un paquete IP fragmentado, se debe usar NDIS_HASH_IPV4. Esto incluye el primer fragmento que contiene los encabezados IP y TCP.
Si se establece esta marca por sí sola, la NIC debe analizar los datos recibidos para identificar un paquete IPv4 que contiene un segmento TCP.
La NIC debe identificar y omitir las opciones de IP que estén presentes. Si la NIC no puede omitir ninguna opción de IP, no debe calcular un valor hash.
La NIC debe calcular el valor hash en los campos siguientes:
- Dirección IPv4 de origen
- Destination-IPv4-Address
- Puerto TCP de origen
- Puerto TCP de destino
Si se establece esta marca por sí sola, la NIC debe analizar los datos recibidos para identificar un paquete IPv4 que contiene un datagrama UDP.
La NIC debe identificar y omitir las opciones de IP que estén presentes. Si la NIC no puede omitir ninguna opción de IP, no debe calcular un valor hash.
La NIC debe calcular el valor hash en los campos siguientes:
- Dirección IPv4 de origen
- Destination-IPv4-Address
- Puerto UDP de origen
- Puerto UDP de destino
Si se establece esta combinación de marcas, la NIC debe realizar los cálculos hash según se especifica para el NDIS_HASH_TCP_IPV4 caso. Sin embargo, si el paquete no contiene un encabezado TCP, la NIC debe calcular el valor hash como se especifica para el NDIS_HASH_IPV4 caso.
Si se establece esta combinación de marcas, la NIC debe realizar los cálculos hash según se especifica para el caso de NDIS_HASH_UDP_IPV4. Sin embargo, si el paquete no contiene un encabezado UDP, la NIC debe calcular el valor hash como se especifica para el NDIS_HASH_IPV4 caso.
Si se establece esta combinación de marcas, la NIC debe realizar el cálculo hash según lo especificado por el transporte en el paquete. Sin embargo, si el paquete no contiene un encabezado TCP o UDP, la NIC debe calcular el valor hash como se especifica para el caso de NDIS_HASH_IPV4.
Las combinaciones de tipos hash válidas del conjunto IPv6 son:
- NDIS_HASH_IPV6
- NDIS_HASH_TCP_IPV6
- NDIS_HASH_UDP_IPV6
- NDIS_HASH_TCP_IPV6 | NDIS_HASH_IPV6
- NDIS_HASH_UDP_IPV6 | NDIS_HASH_IPV6
- NDIS_HASH_TCP_IPV6 | NDIS_HASH_UDP_IPV6 | NDIS_HASH_IPV6
Si se establece esta marca por sí sola, la NIC debe calcular el hash en los campos siguientes:
- Dirección IPv6 de origen
- Destination-IPv6-Address
Si se establece esta marca por sí sola, la NIC debe analizar los datos recibidos para identificar un paquete IPv6 que contiene un segmento TCP. La NIC debe identificar y omitir los encabezados de extensión IPv6 que estén presentes en el paquete. Si la NIC no puede omitir ningún encabezado de extensión IPv6, no debe calcular un valor hash.
La NIC debe calcular el valor hash en los campos siguientes:
- Source-IPv6 -Address
- Destination-IPv6 -Address
- Puerto TCP de origen
- Puerto TCP de destino
Si se establece esta marca por sí sola, la NIC debe analizar los datos recibidos para identificar un paquete IPv6 que contiene un datagrama UDP. La NIC debe identificar y omitir los encabezados de extensión IPv6 que están presentes en el paquete. Si la NIC no puede omitir ningún encabezado de extensión IPv6, no debe calcular un valor hash.
La NIC debe calcular el valor hash en los campos siguientes:
- Dirección IPv6 de origen
- Dirección IPv6 de destino
- Puerto UDP de origen
- Puerto UDP de destino
Si se establece esta combinación de marcas, la NIC debe realizar los cálculos hash especificados para el NDIS_HASH_TCP_IPV6 caso. Sin embargo, si el paquete no contiene un encabezado TCP, la NIC debe calcular el hash como se especifica para el NDIS_HASH_IPV6 caso.
Por ejemplo, si el paquete está fragmentado, es posible que no contenga el encabezado TCP. En ese caso, la NIC debe calcular el hash solo a través del encabezado IP.
Si se establece esta combinación de marcas, la NIC debe realizar los cálculos hash especificados para el NDIS_HASH_UDP_IPV6 caso. Sin embargo, si el paquete no contiene un encabezado UDP, la NIC debe calcular el hash como se especifica para el NDIS_HASH_IPV6 caso.
Por ejemplo, si el paquete está fragmentado, es posible que no contenga el encabezado UDP. En ese caso, la NIC debe calcular el hash solo a través del encabezado IP.
Si se establece esta combinación de marcas, la NIC debe realizar el cálculo hash según lo especificado por el transporte en el paquete. Sin embargo, si el paquete no contiene un encabezado TCP o UDP, la NIC debe calcular el valor hash como se especifica en el NDIS_HASH_IPV6 caso.
Por ejemplo, si el paquete está fragmentado, es posible que no contenga el encabezado TCP o UDP. En ese caso, la NIC debe calcular el hash solo a través del encabezado IP.
Las combinaciones válidas en IPv6 con encabezados de extensión establecidos son:
- NDIS_HASH_IPV6_EX
- NDIS_HASH_TCP_IPV6_EX
- NDIS_HASH_UDP_IPV6_EX
- NDIS_HASH_TCP_IPV6_EX | NDIS_HASH_IPV6_EX
- NDIS_HASH_UDP_IPV6_EX | NDIS_HASH_IPV6_EX
- NDIS_HASH_TCP_IPV6_EX | NDIS_HASH_UDP_IPV6_EX | NDIS_HASH_IPV6_EX
Si se establece esta marca por sí sola, la NIC debe calcular el hash en los campos siguientes:
- Dirección principal de la opción de dirección principal en el encabezado de opciones de destino IPv6. Si el encabezado de extensión no está presente, use la dirección IPv6 de origen.
- Dirección IPv6 contenida en routing-Header-Type-2 del encabezado de extensión asociado. Si el encabezado de extensión no está presente, use la dirección IPv6 de destino.
Si se establece esta marca por sí sola, la NIC debe calcular el hash en los campos siguientes:
- Dirección principal de la opción de dirección principal en el encabezado de opciones de destino IPv6. Si el encabezado de extensión no está presente, use la dirección IPv6 de origen.
- Dirección IPv6 contenida en routing-Header-Type-2 del encabezado de extensión asociado. Si el encabezado de extensión no está presente, use la dirección IPv6 de destino.
- Puerto TCP de origen
- Puerto TCP de destino
Si se establece esta marca por sí sola, la NIC debe calcular el hash en los campos siguientes:
- Dirección principal de la opción de dirección principal en el encabezado de opciones de destino IPv6. Si el encabezado de extensión no está presente, use la dirección IPv6 de origen.
- Dirección IPv6 contenida en routing-Header-Type-2 del encabezado de extensión asociado. Si el encabezado de extensión no está presente, use la dirección IPv6 de destino.
- Puerto UDP de origen
- Puerto UDP de destino
Si se establece esta combinación de marcas, la NIC debe realizar los cálculos hash especificados para el NDIS_HASH_TCP_IPV6_EX caso. Sin embargo, si el paquete no contiene un encabezado TCP, la NIC debe calcular el hash como se especifica para el NDIS_HASH_IPV6_EX caso.
Si se establece esta combinación de marcas, la NIC debe realizar los cálculos hash especificados para el NDIS_HASH_UDP_IPV6_EX caso. Sin embargo, si el paquete no contiene un encabezado UDP, la NIC debe calcular el hash según lo especificado para el NDIS_HASH_IPV6_EX caso.
Si se establece esta combinación de marcas, la NIC debe realizar los cálculos hash especificados por el transporte de paquetes. Sin embargo, si el paquete no contiene un encabezado TCP o UDP, la NIC debe calcular el hash como se especifica para el NDIS_HASH_IPV6_EX caso.
Nota
Si un controlador de minipuerto informa NDIS_RSS_CAPS_HASH_TYPE_TCP_IPV6_EX o NDIS_RSS_CAPS_HASH_TYPE_UDP_IPV6_EX funcionalidad para una NIC, la NIC debe calcular los valores hash (en los campos de los encabezados de extensión IPv6) de acuerdo con los tipos hash de extensión IPv6 establecidos por el controlador de protocolo. La NIC puede almacenar el tipo hash de extensión o el tipo hash normal en la estructura NET_BUFFER_LIST del paquete IPv6 para el que se calcula un valor hash.
Un controlador de minipuerto establece el tipo hash en una estructura de NET_BUFFER_LIST antes de indicar los datos recibidos. Para obtener más información, vea Indicar datos de recepción RSS.