Unterstützung von NVGRE in der Prüfsummenauslagerung
NDIS 6.30 (Windows Server 2012) führt die Netzwerkvirtualisierung mithilfe der generischen Routing-Encapsulation (NVGRE) ein. NDIS-Miniport-, Protokoll- und Filtertreiber und NICs, die Prüfsummenaufgaben auslagern, sollten dies auf eine Weise tun, die NVGRE unterstützt.
Hinweis Auf dieser Seite wird davon ausgegangen, dass Sie mit den Informationen unter Auslagerung von Prüfsummentasks vertraut sind.
Wenn NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. IsEncapsulatedPacket ist TRUE und die TcpIpChecksumNetBufferListInfo-Out-of-Band-Informationen (OOB) sind gültig. Dies gibt an, dass NVGRE-Unterstützung erforderlich ist und die NIC die Prüfsumme für den (äußeren) IP-Header des Tunnels, den IP-Header transport (inner) und den TCP- oder UDP-Header berechnen muss.
Die IsIPv4 - und IsIPv6-Flags in der NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO Struktur geben die IP-Headerversion des (äußeren) IP-Headers des Tunnels an. Die NIC muss den (inneren) IP-Header des Transports analysieren, um die IP-Version dieses Headers zu bestimmen. Da Pakete im gemischten Modus zulässig sind (siehe NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD), darf die NIC nicht davon ausgehen, dass die inneren und äußeren IP-Header dieselbe IP-Headerversion aufweisen.
NiCs und Miniporttreiber können die Werte InnerFrameOffset, TransportIpHeaderRelativeOffset und TcpHeaderRelativeOffset verwenden, die in der NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO-Struktur bereitgestellt werden. Der NIC- oder Miniporttreiber kann alle erforderlichen Headerprüfungen für den (äußeren) IP-Header des Tunnels oder nachfolgende Header ausführen, um diese Offsets zu überprüfen.
Beachten Sie, dass beim NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. IsEncapsulatedPacket ist TRUE, die vorhandenen Headeroffsetfelder NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. LsoV2Transmit. TcpHeaderOffset und NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO. Übertragen. TcpHeaderOffset hat keine richtigen Werte und darf nicht von der NIC oder dem Treiber verwendet werden.
Miniporttreiber müssen den Fall behandeln, in dem NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. InnerFrameOffset befindet sich möglicherweise in einer anderen Scatter-Gather-Liste als der Anfang des Pakets. Der Protokolltreiber garantiert, dass alle vorab eingestellten Kapselungsheader (ETH, IP, GRE) physisch zusammenhängend sind und sich in der ersten MDL des Pakets befinden.
Überprüfung der Prüfsumme
Die Prüfsummenüberprüfung für NVGRE ist weitgehend identisch mit der andernfalls.
Wenn ein Miniport eine OID_TCP_OFFLOAD_PARAMETERS OID-Anforderung empfängt und diese für NDIS_ENCAPSULATION_TYPE_GRE_MAC erfolgreich ausführt (siehe NDIS_OFFLOAD_PARAMETERS), muss die NIC eine Überprüfung der Prüfsumme für den (äußeren) IP-Header des Tunnels, den (inneren) IP-Header des Tunnels, den (inneren) IP-Header und den TCP- oder UDP-Header durchführen.
Bei gekapselten Paketen mit einem IPv4-Tunnelheader (äußeren) und einem IPv4-Transportheader (inner) sollte ein Miniporttreiber das IpChecksumSucceeded-Flag in der NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO-Struktur nur festlegen, wenn beide Überprüfungen der IP-Header-Prüfsumme erfolgreich waren. Bei gekapselten Paketen, die sowohl einen IPv4-Tunnel (äußeren) als auch einen IPv4-Transportheader (inner) aufweisen, sollte der Miniporttreiber das IpChecksumFailed-Flag festlegen, wenn eine der Überprüfungen der IP-Header-Prüfsumme fehlgeschlagen ist.