Localisation de l’en-tête de transport pour les paquets encapsulés dans le chemin de réception
Lors de la réception d’un paquet, une carte réseau qui prend en charge la virtualisation de réseau à l’aide de l’encapsulation de routage générique (NVGRE) doit d’abord déterminer si le paquet est encapsulé et, le cas échéant, le type d’encapsulation.
Note Dans le chemin d’envoi, un paquet est encapsulé si NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. IsEncapsulatedPacket a la valeur TRUE.
Dans le chemin de réception, la carte réseau doit déterminer si le paquet est encapsulé en vérifiant le numéro de protocole dans le champ Protocole de l’en-tête du tunnel IPv4 (externe) ou le champ NextHeader de l’en-tête de tunnel IPv6 (externe). La liste des numéros de protocole attribués se trouve à l’adresse https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml.
Une fois qu’un paquet est déterminé comme étant un paquet encapsulé, la carte réseau doit déterminer le décalage par rapport à l’en-tête IP de transport (interne) en analysant le protocole du paquet encapsulé.
Pour NDIS 6.30 (Windows Server 2012) et versions ultérieures, seule l’encapsulation IP GRE est prise en charge. Par conséquent, la carte réseau doit être en mesure d’analyser les éléments suivants, en fonction des fonctionnalités publiées :
- En-têtes GRE (RFC 2784: Generic Routing Encapsulation (GRE))
- RFC 2890 : Extensions de clé et de numéro de séquence pour GRE
- En-têtes IPv4 (RFC 791 : Protocole Internet)
- En-têtes IPv6 (RFC 2460 : Protocole Internet, version 6 (IPv6))
Si la carte réseau trouve un protocole d’encapsulation inconnu ou non pris en charge, elle doit passer le paquet inchangé à la pile hôte.
Ainsi, sur le chemin de réception, le miniport doit analyser l’en-tête IP de transport (interne) pour déterminer la version de l’adresse IP et pour accéder à l’en-tête TCP ou UDP. Il s’agit d’une nouvelle exigence pour NDIS 6.30 (Windows Server 2012) et versions ultérieures.