Compatibilidad con NVGRE en la descarga de envío grande (LSO)
NDIS 6.30 (Windows Server 2012) presenta la virtualización de red mediante la encapsulación de enrutamiento genérico (NVGRE). Los controladores de minipuerto, protocolo y filtrado de NDIS y NIC que realizan una descarga de envío grande (LSO) versión 2 (LSOV2) deben hacerlo de una manera que admita NVGRE.
Nota En esta página se supone que está familiarizado con la información de Descarga de la segmentación de paquetes TCP grandes.
Si NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. IsEncapsulatedPacket es TRUE y la información tcpIpChecksumNetBufferListInfo fuera de banda (OOB) es válida, esto indica que se requiere compatibilidad con NVGRE y que la NIC debe realizar la descarga de LSOV2 en el paquete con formato NVGRE, con las siguientes condiciones:
- Solo los valores de la NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. La estructura LsoV2Transmit es válida. La NIC y el controlador de minipuerto no deben hacer referencia a los valores de la NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. Estructura LsoV1Transmit .
- El NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. LsoV2Transmit. El miembro TcpHeaderOffset no tiene el valor de desplazamiento correcto y no debe ser utilizado por el controlador NIC o miniport.
Para admitir NVGRE en LSOV2, los controladores de protocolo y filtro deben realizar los siguientes cambios:
- Reduzca el valor de MSS en el NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. Estructura LsoV2Transmit para tener en cuenta el nuevo encabezado GRE.
- Envíe una longitud de carga TCP que puede no ser un múltiplo exacto del valor de MSS reducido.
- Ajuste los valores InnerFrameOffset, TransportIpHeaderRelativeOffset y TcpHeaderRelativeOffset de la estructura NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO para tener en cuenta el encabezado GRE.
Las NIC y los controladores de minipuerto pueden usar los valores InnerFrameOffset, TransportIpHeaderRelativeOffset y TcpHeaderRelativeOffset proporcionados en la estructura de NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO . El controlador NIC o miniporte puede realizar las comprobaciones de encabezado necesarias en el encabezado IP del túnel (externo) o en los encabezados posteriores para validar estos desplazamientos.
Los controladores de minipuerto deben controlar el caso en el que NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. InnerFrameOffset puede estar en una lista de recopilación de dispersión diferente que el principio del paquete. El controlador de protocolo garantizará que todos los encabezados de encapsulación antepuestos (ETH, IP, GRE) serán físicamente contiguos y estarán en la primera MDL del paquete.
Los controladores de protocolo y filtro no garantizan que la longitud total de la carga TCP sea un múltiplo exacto del valor de MSS reducido. Por este motivo, los controladores de minipuerto y las NIC deben actualizar el encabezado IP del túnel (externo). Las NIC deben generar tantos segmentos de tamaño completo como sea posible en función del valor de MSS reducido en el NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. LsoV2Transmit Información de OOB. Solo se puede generar un segmento de sub-MSS por envío LSOv2.
Los controladores de minipuerto deben hacer lo siguiente:
- Calcule la suma de comprobación para el encabezado IP del túnel (externo).
- Incremente el valor de identificación IP (ID de IP) del encabezado IP del túnel (externo) para cada paquete. El primer paquete debe usar el identificador ip en el encabezado IP del túnel original (externo).
- Incremente el identificador IP del encabezado IP de transporte (interno) para cada paquete. El primer paquete debe usar el identificador IP en el encabezado IP de transporte original (interno).
- Calcule la suma de comprobación para el encabezado TCP y el encabezado IP de transporte (interno).
- Asegúrese de que los encabezados completos, incluidos los encabezados del túnel de encapsulación (externo) se agregan a cada paquete generado.