UDP セグメンテーション オフロード (USO) における NVGRE のサポート
NDIS 6.85 では、UDP セグメンテーション オフロード (USO) で汎用ルート指定カプセル化 (NVGRE) を使用するネットワーク仮想化が導入されています。 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.Transmit.UdpHeaderOffset メンバーに正しいオフセット値がないため、NIC またはミニポート ドライバーで使用しないでください。
USO で NVGRE をサポートするには、プロトコル ドライバーとフィルター ドライバーで次の手順を実行する必要があります。
- NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO 構造の InnerFrameOffset、TransportIpHeaderRelativeOffset、TcpHeaderRelativeOffset の値を、カプセル化ヘッダーを考慮して調整します。 TcpHeaderRelativeOffset は UDP ヘッダーを参照します。
NIC とミニポート ドライバーは、innerFrameOffset、TransportIpHeaderRelativeOffset、および TcpHeaderRelativeOffset、NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO 構造体で提供される値を使用できます。 NIC またはミニポート ドライバーは、トンネル (外部) IP ヘッダーまたは後続のヘッダーで必要なヘッダー チェックを実行することにより、これらのオフセットを検証できます。
ミニポート ドライバーは、NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO.InnerFrameOffset がパケットの先頭とは異なる scatter-gather リストに含まれる場合も処理する必要があります。 プロトコル ドライバーは、先頭に付加されたすべてのカプセル化ヘッダー (ETH、IP、GRE/VXLAN) が物理的に連続し、パケットの最初の MDL に含まれることを保証します。
UdpSegmentation.SubMssFinalSegmentSupported が NDIS_OFFLOAD 機能に設定されている場合、プロトコルドライバーとフィルター ドライバーは、UDP ペイロードの合計長が縮小された MSS 値の正確な倍数であることを保証しません。 このため、SubMssFinalSegmentSupported を持つミニポート ドライバーと NIC は、トンネル (外部) IP ヘッダーを更新する必要があります。 NIC は、NDIS_UDP_SEGMENTATION_OFFLOAD_NET_BUFFER_LIST_INFO.Transmit OOB 情報内の縮小された MSS 値に基づいて、可能な限り多くのフルサイズのセグメントを生成する必要があります。 サブ MSS セグメントは、LSOv2 送信ごとに 1 つだけ生成できます。
ミニポート ドライバーは、次の手順を実行する必要があります。
- トンネル (外部) IP ヘッダーの チェックサムを計算します。
- パケットごとにトンネル (外部) IP ヘッダーの IP 識別 (IP ID) 値をインクリメントします。 最初のパケットは、元のトンネル (外部) IP ヘッダーの IP ID を使用する必要があります。
- パケットごとにトランスポート (内部) IP ヘッダーの IP ID をインクリメントします。 最初のパケットは、元のトランスポート (内部) IP ヘッダーの IP ID を使用する必要があります。
- UDP ヘッダーとトランスポート (内部) IP ヘッダーのチェックサムを計算します。
- カプセル化トンネル (外部) ヘッダーを含む完全なヘッダーが、生成されたすべてのパケットに追加されていることを確認します。