Suporte a NVGRE no descarregamento de soma de verificação
O NDIS 6.30 (Windows Server 2012) introduz a Virtualização de Rede usando o NVGRE (Encapsulamento de Roteamento Genérico). Drivers de miniporto, protocolo e filtro NDIS e NICs que descarregam tarefas de soma de verificação devem fazer isso de uma maneira que dê suporte a NVGRE.
Nota Esta página pressupõe que você esteja familiarizado com as informações em Tarefas de Soma de Verificação de Descarregamento.
Se NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. IsEncapsulatedPacket é TRUE e as informações de OOB (fora de banda) de TcpIpChecksumNetBufferListInfo são válidas, isso indica que o suporte a NVGRE é necessário e a NIC deve calcular a soma de verificação para o cabeçalho IP do túnel (externo), o cabeçalho IP de transporte (interno) e o cabeçalho TCP ou UDP.
Os sinalizadores IsIPv4 e IsIPv6 na estrutura NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO indicam a versão do cabeçalho IP do cabeçalho IP do túnel (externo). A NIC deve analisar o cabeçalho IP de transporte (interno) para determinar a versão ip do cabeçalho. Como os pacotes de modo misto são permitidos (consulte NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD), a NIC não deve assumir que os cabeçalhos IP interno e externo terão a mesma versão de cabeçalho IP.
Os drivers NICs e miniport podem usar os valores InnerFrameOffset, TransportIpHeaderRelativeOffset e TcpHeaderRelativeOffset fornecidos na estrutura NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO . O driver NIC ou miniport pode executar as verificações de cabeçalho necessárias no cabeçalho IP do túnel (externo) ou cabeçalhos subsequentes para validar esses deslocamentos.
Observe que quando NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. IsEncapsulatedPacket é TRUE, os campos de deslocamento de cabeçalho existentes NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. LsoV2Transmit. TcpHeaderOffset e NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO. Transmita. TcpHeaderOffset, não terá valores corretos e não deve ser usado pela NIC ou pelo driver.
Os drivers de miniporta devem lidar com o caso em que NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. InnerFrameOffset pode estar em uma lista de dispersão diferente do início do pacote. O driver de protocolo garantirá que todos os cabeçalhos de encapsulamento anexados (ETH, IP, GRE) sejam fisicamente contíguos e estarão no primeiro MDL do pacote.
Validação de soma de verificação
A validação de soma de verificação para NVGRE é em grande parte a mesma que seria de outra forma.
Se um miniporto receber um OID_TCP_OFFLOAD_PARAMETERS solicitação OID e for bem-sucedido para NDIS_ENCAPSULATION_TYPE_GRE_MAC (consulte NDIS_OFFLOAD_PARAMETERS), a NIC deverá executar a validação de soma de verificação no cabeçalho IP do túnel (externo), no cabeçalho IP de transporte (interno) e no cabeçalho TCP ou UDP.
Para pacotes encapsulados que têm um cabeçalho de túnel IPv4 (externo) e um cabeçalho de transporte IPv4 (interno), um driver de miniporto deve definir o sinalizador IpChecksumSucceeded na estrutura NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO somente se ambas as validações de soma de verificação de cabeçalho IP tiverem êxito. Para pacotes encapsulados que têm um cabeçalho IPv4 de túnel (externo) e um cabeçalho IPv4 de transporte (interno), o driver de miniporto deverá definir o sinalizador IpChecksumFailed se uma das validações da soma de verificação do cabeçalho IP falhar.