Unterstützung von NVGRE in UDP Segmentation Offload (USO)
NDIS 6.85 führt die Netzwerkvirtualisierung mithilfe von Generic Routing Encapsulation (NVGRE) mit UDP-Segmentierungsauslagerung (USO) ein. NDIS-Miniport-, Protokoll- und Filtertreiber sowie NICs, die USO ausführen, sollten NVGRE- und VXLAN-Kapselungen unterstützen.
Hinweis: In diesem Artikel wird davon ausgegangen, dass Sie mit den Informationen in UDP Segmentation Offload (USO) vertraut sind.
Wenn NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. IsEncapsulatedPacket ist TRUE , und die OOB-Informationen ( UdpSegmentationOffloadInfo ) sind gültig, NVGRE- und VXLAN-Unterstützung ist erforderlich. Die NIC muss eine USO-Auslagerung für das NVGRE/VXLAN-gekapselte Paket mit der folgenden Bedingung ausführen:
- Die NDIS_UDP_SEGMENTATION_OFFLOAD_NET_BUFFER_LIST_INFO. Übertragen. UdpHeaderOffset-Member verfügt nicht über den richtigen Offsetwert und darf nicht vom NIC- oder Miniporttreiber verwendet werden.
Um NVGRE in USO zu unterstützen, müssen Protokoll- und Filtertreiber:
- Passen Sie die Werte InnerFrameOffset, TransportIpHeaderRelativeOffset und TcpHeaderRelativeOffset in der NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO-Struktur an, um den Kapselungsheader zu berücksichtigen. TcpHeaderRelativeOffset bezieht sich auf den UDP-Header.
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/VXLAN) physisch zusammenhängend sind und sich in der ersten MDL des Pakets befinden.
Protokoll- und Filtertreiber stellen nicht sicher, dass die Gesamtlänge der UDP-Nutzlast genau ein Vielfaches des reduzierten MSS-Werts ist, wenn UdpSegmentation.SubMssFinalSegmentSupported in den NDIS_OFFLOAD-Funktionen festgelegt ist. Aus diesem Grund müssen Miniporttreiber und NICs mit SubMssFinalSegmentSupported 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_UDP_SEGMENTATION_OFFLOAD_NET_BUFFER_LIST_INFO. Übertragen OOB-Informationen. Pro LSOv2-Sendevorgang kann nur ein Unter-MSS-Segment generiert werden.
Miniport-Treiber müssen:
- 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 UDP-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.