Tipos de hash RSS
Visão geral
O tipo de hash RSS especifica a parte dos dados de rede recebidos que uma NIC deve usar para calcular um valor de hash RSS.
Os drivers em excesso definem o tipo de hash, a função e a tabela de indireção. O tipo de hash que o driver subjacente define pode ser um subconjunto do tipo que o driver de miniporto pode dar suporte. Para obter mais informações, consulte Configuração do RSS.
O tipo de hash é um OR de combinações válidas dos seguintes sinalizadores:
- 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
Estes são os conjuntos de combinações de sinalizador válidas:
- IPv4 (combinações de NDIS_HASH_IPV4, NDIS_HASH_TCP_IPV4 e NDIS_HASH_UDP_IPV4)
- IPv6 (combinações de NDIS_HASH_IPV6, NDIS_HASH_TCP_IPV6 e NDIS_HASH_UDP_IPV6)
- IPv6 com cabeçalhos de extensão (combinações de NDIS_HASH_IPV6_EX, NDIS_HASH_TCP_IPV6_EX e NDIS_HASH_UDP_IPV6_EX)
Uma NIC deve dar suporte a uma das combinações do conjunto IPv4. Os outros conjuntos e combinações são opcionais. Uma NIC pode dar suporte a mais de um conjunto por vez. Nesse caso, o tipo de dados recebidos determina qual tipo de hash a NIC usa.
Em geral, se a NIC não puder interpretar os dados recebidos corretamente, ela não deverá calcular o valor de hash. Por exemplo, se a NIC só dá suporte a IPv4 e recebe um pacote IPv6, que não pode ser interpretado corretamente, ele não deve calcular o valor de hash. Se a NIC receber um pacote para um tipo de transporte que ele não dá suporte, ele não deverá calcular o valor de hash. Por exemplo, se a NIC receber um pacote UDP quando deveria estar calculando valores de hash para pacotes TCP, ela não deverá calcular o valor de hash. Nesse caso, o pacote é processado como no caso não RSS. Para obter mais informações sobre o processamento de recebimento não RSS, consulte Processamento de recebimento não RSS.
Combinações de tipo de hash IPv4
As combinações de tipo de hash válidas no conjunto IPv4 são:
- 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
NDIS_HASH_IPV4
Se esse sinalizador sozinho estiver definido, a NIC deverá calcular o valor de hash nos seguintes campos de cabeçalho IPv4:
- Origem-IPv4-Address
- Destination-IPv4-Address
Observação
Se uma NIC receber um pacote que tenha cabeçalhos IP e TCP, nem sempre NDIS_HASH_TCP_IPV4 deve ser usado. No caso de um pacote IP fragmentado, NDIS_HASH_IPV4 deve ser usado. Isso inclui o primeiro fragmento que contém cabeçalhos IP e TCP.
NDIS_HASH_TCP_IPV4
Se esse sinalizador sozinho estiver definido, a NIC deverá analisar os dados recebidos para identificar um pacote IPv4 que contém um segmento TCP.
A NIC deve identificar e ignorar todas as opções de IP presentes. Se a NIC não puder ignorar nenhuma opção de IP, ela não deverá calcular um valor de hash.
A NIC deve calcular o valor de hash nos seguintes campos:
- Origem-IPv4-Address
- Destination-IPv4-Address
- Porta TCP de origem
- Porta TCP de destino
NDIS_HASH_UDP_IPV4
Se esse sinalizador sozinho estiver definido, a NIC deverá analisar os dados recebidos para identificar um pacote IPv4 que contém um datagrama UDP.
A NIC deve identificar e ignorar todas as opções de IP presentes. Se a NIC não puder ignorar nenhuma opção de IP, ela não deverá calcular um valor de hash.
A NIC deve calcular o valor de hash nos seguintes campos:
- Origem-IPv4-Address
- Destination-IPv4-Address
- Porta UDP de origem
- Porta UDP de destino
NDIS_HASH_TCP_IPV4 | NDIS_HASH_IPV4
Se essa combinação de sinalizadores for definida, a NIC deverá executar os cálculos de hash conforme especificado para o caso de NDIS_HASH_TCP_IPV4. No entanto, se o pacote não contiver um cabeçalho TCP, a NIC deverá calcular o valor de hash conforme especificado para o caso de NDIS_HASH_IPV4.
NDIS_HASH_UDP_IPV4 | NDIS_HASH_IPV4
Se essa combinação de sinalizadores for definida, a NIC deverá executar os cálculos de hash conforme especificado para o caso de NDIS_HASH_UDP_IPV4. No entanto, se o pacote não contiver um cabeçalho UDP, a NIC deverá calcular o valor de hash conforme especificado para o caso de NDIS_HASH_IPV4.
NDIS_HASH_TCP_IPV4 | NDIS_HASH_UDP_IPV4 | NDIS_HASH_IPV4
Se essa combinação de sinalizadores for definida, a NIC deverá executar o cálculo de hash conforme especificado pelo transporte no pacote. No entanto, se o pacote não contiver um cabeçalho TCP ou UDP, a NIC deverá calcular o valor de hash conforme especificado para o caso de NDIS_HASH_IPV4.
Combinações de tipo de hash IPv6
As combinações de tipo de hash válidas no conjunto IPv6 são:
- 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
NDIS_HASH_IPV6
Se esse sinalizador estiver definido sozinho, a NIC deverá calcular o hash nos seguintes campos:
- Origem-IPv6-Address
- Destination-IPv6-Address
NDIS_HASH_TCP_IPV6
Se esse sinalizador sozinho estiver definido, a NIC deverá analisar os dados recebidos para identificar um pacote IPv6 que contém um segmento TCP. A NIC deve identificar e ignorar todos os cabeçalhos de extensão IPv6 presentes no pacote. Se a NIC não puder ignorar nenhum cabeçalho de extensão IPv6, ela não deverá calcular um valor de hash.
A NIC deve calcular o valor de hash nos seguintes campos:
- Source-IPv6 -Address
- Destination-IPv6 -Address
- Porta TCP de origem
- Porta TCP de destino
NDIS_HASH_UDP_IPV6
Se esse sinalizador estiver definido sozinho, a NIC deverá analisar os dados recebidos para identificar um pacote IPv6 que contém um datagrama UDP. A NIC deve identificar e ignorar todos os cabeçalhos de extensão IPv6 presentes no pacote. Se a NIC não puder ignorar nenhum cabeçalho de extensão IPv6, ela não deverá calcular um valor de hash.
A NIC deve calcular o valor de hash nos seguintes campos:
- Origem-IPv6-Address
- Destination-IPv6-Address
- Porta UDP de origem
- Porta UDP de destino
NDIS_HASH_TCP_IPV6 | NDIS_HASH_IPV6
Se essa combinação de sinalizadores for definida, a NIC deverá executar os cálculos de hash conforme especificado para o caso de NDIS_HASH_TCP_IPV6. No entanto, se o pacote não contiver um cabeçalho TCP, a NIC deverá calcular o hash conforme especificado para o caso de NDIS_HASH_IPV6.
Por exemplo, se o pacote estiver fragmentado, ele poderá não conter o cabeçalho TCP. Nesse caso, a NIC deve calcular o hash somente sobre o cabeçalho IP.
NDIS_HASH_UDP_IPV6 | NDIS_HASH_IPV6
Se essa combinação de sinalizadores estiver definida, a NIC deverá executar os cálculos de hash conforme especificado para o caso de NDIS_HASH_UDP_IPV6. No entanto, se o pacote não contiver um cabeçalho UDP, a NIC deverá calcular o hash conforme especificado para o caso de NDIS_HASH_IPV6.
Por exemplo, se o pacote estiver fragmentado, ele poderá não conter o cabeçalho UDP. Nesse caso, a NIC deve calcular o hash somente sobre o cabeçalho IP.
NDIS_HASH_TCP_IPV6 | NDIS_HASH_UDP_IPV6 | NDIS_HASH_IPV6
Se essa combinação de sinalizadores for definida, a NIC deverá executar o cálculo de hash conforme especificado pelo transporte no pacote. No entanto, se o pacote não contiver um cabeçalho TCP ou UDP, a NIC deverá calcular o valor de hash conforme especificado no caso de NDIS_HASH_IPV6.
Por exemplo, se o pacote estiver fragmentado, ele poderá não conter o cabeçalho TCP ou UDP. Nesse caso, a NIC deve calcular o hash somente sobre o cabeçalho IP.
IPv6 com combinações de tipo de hash de cabeçalhos de extensão
As combinações válidas no IPv6 com cabeçalhos de extensão definidas são:
- 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
NDIS_HASH_IPV6_EX
Se esse sinalizador estiver definido sozinho, a NIC deverá calcular o hash nos seguintes campos:
- Endereço residencial da opção de endereço residencial no cabeçalho de opções de destino IPv6. Se o cabeçalho da extensão não estiver presente, use o Endereço IPv6 de origem.
- Endereço IPv6 contido no routing-header-type-2 do cabeçalho de extensão associado. Se o cabeçalho da extensão não estiver presente, use o Endereço IPv6 de Destino.
NDIS_HASH_TCP_IPV6_EX
Se esse sinalizador estiver definido sozinho, a NIC deverá calcular o hash nos seguintes campos:
- Endereço residencial da opção de endereço residencial no cabeçalho de opções de destino IPv6. Se o cabeçalho da extensão não estiver presente, use o Endereço IPv6 de origem.
- Endereço IPv6 contido no routing-header-type-2 do cabeçalho de extensão associado. Se o cabeçalho da extensão não estiver presente, use o Endereço IPv6 de Destino.
- Porta TCP de origem
- Porta TCP de destino
NDIS_HASH_UDP_IPV6_EX
Se esse sinalizador estiver definido sozinho, a NIC deverá calcular o hash nos seguintes campos:
- Endereço residencial da opção de endereço residencial no cabeçalho de opções de destino IPv6. Se o cabeçalho da extensão não estiver presente, use o Endereço IPv6 de origem.
- Endereço IPv6 contido no routing-header-type-2 do cabeçalho de extensão associado. Se o cabeçalho da extensão não estiver presente, use o Endereço IPv6 de Destino.
- Porta UDP de origem
- Porta UDP de destino
NDIS_HASH_TCP_IPV6_EX | NDIS_HASH_IPV6_EX
Se essa combinação de sinalizadores for definida, a NIC deverá executar os cálculos de hash conforme especificado para o caso de NDIS_HASH_TCP_IPV6_EX. No entanto, se o pacote não contiver um cabeçalho TCP, a NIC deverá calcular o hash conforme especificado para o caso de NDIS_HASH_IPV6_EX.
NDIS_HASH_UDP_IPV6_EX | NDIS_HASH_IPV6_EX
Se essa combinação de sinalizadores for definida, a NIC deverá executar os cálculos de hash conforme especificado para o caso de NDIS_HASH_UDP_IPV6_EX. No entanto, se o pacote não contiver um cabeçalho UDP, a NIC deverá calcular o hash conforme especificado para o caso de NDIS_HASH_IPV6_EX.
NDIS_HASH_TCP_IPV6_EX | NDIS_HASH_UDP_IPV6_EX | NDIS_HASH_IPV6_EX
Se essa combinação de sinalizadores for definida, a NIC deverá executar os cálculos de hash conforme especificado pelo transporte de pacotes. No entanto, se o pacote não contiver um cabeçalho TCP ou UDP, a NIC deverá calcular o hash conforme especificado para o caso de NDIS_HASH_IPV6_EX.
Observação
Se um driver de miniporte relatar NDIS_RSS_CAPS_HASH_TYPE_TCP_IPV6_EX e/ou NDIS_RSS_CAPS_HASH_TYPE_UDP_IPV6_EX capacidade para uma NIC, a NIC deverá calcular valores de hash (em campos nos cabeçalhos de extensão IPv6) de acordo com os tipos de hash de extensão IPv6 definidos pelo driver de protocolo. A NIC pode armazenar o tipo de hash de extensão ou o tipo de hash regular na estrutura NET_BUFFER_LIST do pacote IPv6 para o qual um valor de hash é calculado.
Um driver de miniporte define o tipo de hash em uma estrutura NET_BUFFER_LIST antes de indicar os dados recebidos. Para obter mais informações, consulte Indicando que o RSS recebe dados.