Prise en charge de NVGRE dans le déchargement de la somme de contrôle
NDIS 6.30 (Windows Server 2012) introduit la virtualisation de réseau à l’aide de l’encapsulation de routage générique (NVGRE). Les pilotes de miniport, de protocole et de filtre NDIS et les cartes réseau qui déchargent les tâches de somme de contrôle doivent le faire d’une manière qui prend en charge NVGRE.
Note Cette page suppose que vous êtes familiarisé avec les informations contenues dans Déchargement des tâches de somme de contrôle.
Si NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. IsEncapsulatedPacket a la valeur TRUE et les informations tcpIpChecksumNetBufferListInfo hors bande (OOB) sont valides, ce qui indique que la prise en charge NVGRE est requise et que la carte réseau doit calculer la somme de contrôle pour l’en-tête IP du tunnel (externe), l’en-tête IP de transport (interne) et l’en-tête TCP ou UDP.
Les indicateurs IsIPv4 et IsIPv6 dans la structure NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO indiquent la version d’en-tête IP de l’en-tête IP du tunnel (externe). La carte réseau doit analyser l’en-tête IP de transport (interne) pour déterminer la version IP de cet en-tête. Étant donné que les paquets en mode mixte sont autorisés (voir NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD), la carte réseau ne doit pas supposer que les en-têtes IP internes et externes auront la même version d’en-tête IP.
Les cartes réseau et les pilotes miniport peuvent utiliser les valeurs InnerFrameOffset, TransportIpHeaderRelativeOffset et TcpHeaderRelativeOffset fournies dans la structure NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO . La carte réseau ou le pilote miniport peut effectuer les vérifications d’en-tête nécessaires sur l’en-tête IP du tunnel (externe) ou sur les en-têtes suivants pour valider ces décalages.
Notez que lorsque NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. IsEncapsulatedPacket a la valeur TRUE, les champs de décalage d’en-tête existants , NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. LsoV2Transmit. TcpHeaderOffset et NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO. Transmettre. TcpHeaderOffset n’aura pas de valeurs correctes et ne doit pas être utilisé par la carte réseau ou le pilote.
Les pilotes miniport doivent gérer le cas où NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. InnerFrameOffset peut se trouver dans une liste de regroupement de points différente de celle du début du paquet. Le pilote de protocole garantit que tous les en-têtes d’encapsulation prédéfini (ETH, IP, GRE) seront physiquement contigus et se trouveront dans la première MDL du paquet.
Validation de la somme de contrôle
La validation de la somme de contrôle pour NVGRE est en grande partie la même que dans le cas contraire.
Si un miniport reçoit une requête OID OID_TCP_OFFLOAD_PARAMETERS et la réussit pour NDIS_ENCAPSULATION_TYPE_GRE_MAC (voir NDIS_OFFLOAD_PARAMETERS), la carte réseau doit effectuer la validation de la somme de contrôle sur l’en-tête IP du tunnel (externe), l’en-tête IP de transport (interne) et l’en-tête TCP ou UDP.
Pour les paquets encapsulés qui ont un en-tête de tunnel IPv4 (externe) et un en-tête de transport IPv4 (interne), un pilote miniport doit définir l’indicateur IpChecksumSucceeded dans la structure NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO uniquement si les deux validations de la somme de contrôle d’en-tête IP ont réussi. Pour les paquets encapsulés qui ont à la fois un en-tête IPv4 tunnel (externe) et un en-tête IPv4 de transport (interne), le pilote miniport doit définir l’indicateur IpChecksumFailed si l’une des validations de la somme de contrôle d’en-tête IP échoue.