支援 UDP 分割卸載中的 NVGRE (USO)
NDIS 6.85 引進 使用一般路由封裝的網路虛擬化, (NVGRE) 搭配 UDP 分割卸載 (USO) 。 NDIS 迷你埠、通訊協定和篩選驅動程式,以及執行 USO 的 NIC 應該支援 NVGRE 和 VXLAN 封裝。
注意:本文假設您已熟悉 UDP 分割卸載 (USO) 中的資訊。
如果 NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO。IsEncapsulatedPacket 為 TRUE ,而 UdpSegmentationOffloadInfo 頻外 (OOB) 資訊有效,需要 NVGRE 和 VXLAN 支援。 NIC 必須在 NVGRE/VXLAN 封裝封包上執行 USO 卸載,條件如下:
- NDIS_UDP_SEGMENTATION_OFFLOAD_NET_BUFFER_LIST_INFO。傳輸。UdpHeaderOffset成員沒有正確的位移值,而且不得由 NIC 或迷你埠驅動程式使用。
若要在 USO 中支援 NVGRE,通訊協定和篩選驅動程式必須:
- 調整 NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO結構中的InnerFrameOffset、TransportIpHeaderRelativeOffset和TcpHeaderRelativeOffset值,以考慮封裝標頭。 TcpHeaderRelativeOffset指的是 UDP 標頭。
NIC 和迷你埠驅動程式可以使用NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO結構中提供的InnerFrameOffset、TransportIpHeaderRelativeOffset和TcpHeaderRelativeOffset值。 NIC 或迷你埠驅動程式可能會在通道上執行任何所需的標頭檢查, (外部) IP 標頭或後續標頭來驗證這些位移。
迷你埠驅動程式必須處理 NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO的情況。InnerFrameOffset 可能位於與封包開頭不同的散佈收集清單中。 通訊協定驅動程式會保證所有前面加上的封裝標頭 (ETH、IP、GRE/VXLAN) 會實際連續,而且會位於封包的第一個 MDL 中。
當udpSegmentation.SubMssFinalSegmentSupported在NDIS_OFFLOAD功能中設定時,通訊協定和篩選驅動程式不會確保 UDP 承載長度總計是減少的MSS值的倍數。 因此, 具有 SubMssFinalSegmentSupported 的迷你埠驅動程式和 NIC 必須更新通道 (外部) IP 標頭。 NIC 必須根據NDIS_UDP_SEGMENTATION_OFFLOAD_NET_BUFFER_LIST_INFO中減少的MSS值,產生盡可能多的完整大社區段。傳輸OOB 資訊。 每個LSOv2 傳送只能產生一個子 MSS 區段。
迷你埠驅動程式必須:
- 計算通道總和檢查碼, (外部) IP 標頭。
- 為每個封包遞增通道 (外部) IP 標頭的 IP 識別碼 (IP 識別碼) 值。 第一個封包必須使用原始通道中的 IP 識別碼, (外部) IP 標頭。
- 遞增每個封包之傳輸 (內部) IP 標頭的 IP 識別碼。 第一個封包必須使用原始傳輸 (內部) IP 標頭中的 IP 識別碼。
- 計算 UDP 標頭和傳輸 (內部) IP 標頭總和檢查碼。
- 請確定完整的標頭,包括封裝通道 (外部) 標頭新增至每個產生的封包。