Compatibilidad con NVGRE en la descarga de suma de comprobación
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 descargan las tareas de suma de comprobación 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 tareas de suma de comprobación.
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 calcular la suma de comprobación para el encabezado IP del túnel (externo), el encabezado IP de transporte (interno) y el encabezado TCP o UDP.
Las marcas IsIPv4 e IsIPv6 de la estructura NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO indican la versión del encabezado IP del encabezado IP del túnel (exterior). La NIC debe analizar el encabezado IP de transporte (interno) para determinar la versión de IP del encabezado. Dado que se permiten paquetes en modo mixto (consulte NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD), la NIC no debe suponer que los encabezados IP internos y externos tendrán la misma versión del encabezado IP.
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.
Tenga en cuenta que, cuando NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. IsEncapsulatedPacket es TRUE, los campos de desplazamiento de encabezado existentes NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. LsoV2Transmit. TcpHeaderOffset y NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO. Transmitir. TcpHeaderOffset, no tendrá valores correctos y no debe ser utilizado por la NIC o el controlador.
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.
Validación de suma de comprobación
La validación de suma de comprobación para NVGRE es en gran medida la misma que en caso contrario.
Si un miniporte recibe una solicitud de OID de OID_TCP_OFFLOAD_PARAMETERS y la realiza correctamente para NDIS_ENCAPSULATION_TYPE_GRE_MAC (consulte NDIS_OFFLOAD_PARAMETERS), la NIC debe realizar la validación de suma de comprobación en el encabezado IP del túnel (externo), el encabezado IP de transporte (interno) y el encabezado TCP o UDP.
En el caso de los paquetes encapsulados que tienen un encabezado de túnel IPv4 (externo) y un encabezado de transporte IPv4 (interno), un controlador de miniporte debe establecer la marca IpChecksumSucceed en la estructura NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO solo si ambas validaciones de suma de comprobación de encabezado IP se realizaron correctamente. En el caso de los paquetes encapsulados que tienen un encabezado IPv4 de túnel (externo) y un encabezado IPv4 de transporte (interno), el controlador de miniporte debe establecer la marca IpChecksumFailed si se produjo un error en alguna de las validaciones de suma de comprobación del encabezado IP.