Unterstützung von NVGRE in Large Send Offload (LSO)
NDIS 6.30 (Windows Server 2012) führt die Netzwerkvirtualisierung mithilfe von Generic Routing Encapsulation (NVGRE) ein. NDIS-Miniport-, Protokoll- und Filtertreiber und NICs, die LSO-Version 2 (Large Send Offload, LSOV2) ausführen, sollten dies auf eine Weise tun, die NVGRE unterstützt.
Hinweis Auf dieser Seite wird davon ausgegangen, dass Sie mit den Informationen unter Ausladen der Segmentierung großer TCP-Pakete 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 weist darauf hin, dass NVGRE-Unterstützung erforderlich ist und die NIC LSOV2-Auslagerung für das NVGRE-formatierte Paket ausführen muss, wobei die folgenden Bedingungen erfüllt sind:
- Nur die Werte im NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. Die LsoV2Transmit-Struktur ist gültig. Der NIC- und der Miniporttreiber dürfen nicht auf die Werte im NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO verweisen. LsoV1Transmit-Struktur .
- Die NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. LsoV2Transmit. TcpHeaderOffset-Member verfügt nicht über den richtigen Offsetwert und darf nicht vom NIC- oder Miniporttreiber verwendet werden.
Um NVGRE in LSOV2 zu unterstützen, müssen Protokoll- und Filtertreiber die folgenden Änderungen vornehmen:
- Verringern Sie den MSS-Wert im NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. LsoV2Transmit-Struktur , um den neuen GRE-Header zu berücksichtigen.
- Senden Sie eine TCP-Nutzlastlänge nach unten, die möglicherweise kein exaktes Vielfaches des reduzierten MSS-Werts ist.
- Passen Sie die Werte InnerFrameOffset, TransportIpHeaderRelativeOffset und TcpHeaderRelativeOffset in der NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO-Struktur an, um den GRE-Header zu berücksichtigen.
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 Headerüberprüfungen für den (äußeren) IP-Header des Tunnels oder der nachfolgenden Header durchführen, um diese Offsets zu überprüfen.
Miniport-Treiber müssen den Fall behandeln, in dem NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. InnerFrameOffset befindet sich möglicherweise in einer anderen Punktsammlungsliste als der Anfang des Pakets. Der Protokolltreiber garantiert, dass alle vorangestellten Kapselungsheader (ETH, IP, GRE) physisch zusammenhängend sind und sich in der ersten MDL des Pakets befinden.
Protokoll- und Filtertreiber stellen nicht sicher, dass die Gesamtlänge der TCP-Nutzlast ein exaktes Vielfaches des reduzierten MSS-Werts ist. Aus diesem Grund müssen Miniporttreiber und NICs den (äußeren) IP-Header des Tunnels aktualisieren. NICs müssen so viele Segmente in voller Größe wie möglich generieren, basierend auf dem reduzierten MSS-Wert im NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. LsoV2Transmit OOB-Informationen. Pro LSOv2-Sendevorgang kann nur ein Unter-MSS-Segment generiert werden.
Miniport-Treiber müssen folgendes tun:
- Berechnen Sie die Prüfsumme für den IP-Header des Tunnels (äußeren).
- Erhöhen Sie den IP-Identifikationswert (IP-ID) des Tunnel-IP-Headers (äußeren) für jedes Paket. Das erste Paket muss die IP-ID im ip-Header des ursprünglichen Tunnels (äußeren) verwenden.
- Erhöhen Sie die IP-ID des Transport-IP-Headers (inner) für jedes Paket. Das erste Paket muss die IP-ID im ursprünglichen (inneren) Transport-IP-Header verwenden.
- Berechnen Sie die Prüfsumme für den TCP-Header und den (inneren) IP-Header des Transports.
- Stellen Sie sicher, dass jedem generierten Paket die vollständigen Header einschließlich der Kapselungstunnelheader (äußere Header) hinzugefügt werden.