Suporte a NVGRE no LSO (Descarregamento de Envio Grande)
O NDIS 6.30 (Windows Server 2012) introduz a Virtualização de Rede usando o NVGRE (Encapsulamento de Roteamento Genérico). Os drivers de miniporto, protocolo e filtro NDIS e NICs que executam LSO (descarregamento de envio grande) versão 2 (LSOV2) 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 Descarregando a segmentação de pacotes TCP grandes.
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 executar o descarregamento LSOV2 no pacote formatado em NVGRE, com as seguintes condições:
- Somente os valores no NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. A estrutura LsoV2Transmit é válida. O driver NIC e o miniportor não devem se referir aos valores no NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. Estrutura LsoV1Transmit .
- O NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. LsoV2Transmit. O membro TcpHeaderOffset não tem o valor de deslocamento correto e não deve ser usado pelo driver NIC ou miniport.
Para dar suporte a NVGRE em LSOV2, os drivers de protocolo e filtro devem fazer as seguintes alterações:
- Reduza o valor do MSS no NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. Estrutura LsoV2Transmit para considerar o novo cabeçalho GRE.
- Envie um comprimento de carga TCP que pode não ser um múltiplo exato do valor reduzido do MSS .
- Ajuste os valores InnerFrameOffset, TransportIpHeaderRelativeOffset e TcpHeaderRelativeOffset na estrutura NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO para considerar o cabeçalho GRE.
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.
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.
Os drivers de protocolo e filtro não garantem que o comprimento total da carga TCP seja um múltiplo exato do valor reduzido do MSS . Por esse motivo, os drivers de miniporto e as NICs devem atualizar o cabeçalho IP do túnel (externo). As NICs devem gerar o máximo possível de segmentos de tamanho completo com base no valor reduzido do MSS no NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. LsoV2Transmit Informações de OOB. Somente um segmento sub MSS pode ser gerado por LSOv2 send.
Os drivers de miniport devem fazer o seguinte:
- Compute a soma de verificação do cabeçalho IP do túnel (externo).
- Incremente o valor de identificação de IP (ID de IP) do cabeçalho IP do túnel (externo) para cada pacote. O primeiro pacote deve usar a ID de IP no cabeçalho IP do túnel original (externo).
- Incremente a ID de IP do cabeçalho IP de transporte (interno) para cada pacote. O primeiro pacote deve usar a ID de IP no cabeçalho IP de transporte original (interno).
- Compute a soma de verificação para o cabeçalho TCP e o cabeçalho IP de transporte (interno).
- Verifique se os cabeçalhos completos, incluindo os cabeçalhos de túnel de encapsulamento (externos), são adicionados a cada pacote gerado.