Prise en charge de NVGRE dans le déchargement d’envoi volumineux (LSO)
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 effectuent un déchargement d’envoi volumineux (LSO) version 2 (LSOV2) 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 de la segmentation des paquets TCP volumineux.
Si NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. IsEncapsulatedPacket a la valeur TRUE et les informations OOB (TcpIpChecksumNetBufferListInfo ) sont valides, ce qui indique que la prise en charge de NVGRE est requise et que la carte réseau doit effectuer le déchargement LSOV2 sur le paquet au format NVGRE, avec les conditions suivantes :
- Seules les valeurs du NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. La structure LsoV2Transmit est valide. La carte réseau et le pilote miniport ne doivent pas faire référence aux valeurs du NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. Structure LsoV1Transmit .
- Le NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. LsoV2Transmit. Le membre TcpHeaderOffset n’a pas la valeur de décalage correcte et ne doit pas être utilisé par la carte réseau ou le pilote miniport.
Pour prendre en charge NVGRE dans LSOV2, les pilotes de protocole et de filtre doivent apporter les modifications suivantes :
- Réduisez la valeur MSS dans le NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. Structure LsoV2Transmit pour prendre en compte le nouvel en-tête GRE.
- Envoyez une longueur de charge utile TCP qui peut ne pas être un multiple exact de la valeur MSS réduite.
- Ajustez les valeurs InnerFrameOffset, TransportIpHeaderRelativeOffset et TcpHeaderRelativeOffset dans la structure NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO pour prendre en compte l’en-tête GRE.
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 . Le pilote de carte réseau ou de miniport peut effectuer toutes les vérifications d’en-tête d’en-tête d’en-tête d’en-tête du tunnel (externe) ou des en-têtes suivants pour valider ces décalages.
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 collecte de points différente du début du paquet. Le pilote de protocole garantit que tous les en-têtes d’encapsulation ajoutés (ETH, IP, GRE) seront physiquement contigus et se trouveront dans la première MDL du paquet.
Les pilotes de protocole et de filtre ne garantissent pas que la longueur totale de la charge utile TCP est un multiple exact de la valeur MSS réduite. Pour cette raison, les pilotes de miniport et les cartes réseau doivent mettre à jour l’en-tête IP du tunnel (externe). Les cartes réseau doivent générer autant de segments de taille que possible en fonction de la valeur MSS réduite dans le NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. LsoV2Transmit Informations OOB. Un seul segment de sous-MSS peut être généré par envoi LSOv2.
Les pilotes miniport doivent effectuer les opérations suivantes :
- Calculez la somme de contrôle pour l’en-tête IP du tunnel (externe).
- Incrémentez la valeur d’identification IP (ID IP) de l’en-tête IP (externe) du tunnel pour chaque paquet. Le premier paquet doit utiliser l’ID IP dans l’en-tête IP (externe) du tunnel d’origine.
- Incrémentez l’ID IP de l’en-tête IP de transport (interne) pour chaque paquet. Le premier paquet doit utiliser l’ID IP dans l’en-tête d’adresse IP (interne) de transport d’origine.
- Calculez la somme de contrôle pour l’en-tête TCP et l’en-tête IP de transport (interne).
- Vérifiez que les en-têtes complets, y compris les en-têtes du tunnel d’encapsulation (externe) sont ajoutés à chaque paquet généré.