Mendukung NVGRE dalam Offload Segmentasi UDP (USO)
NDIS 6.85 memperkenalkan Virtualisasi Jaringan menggunakan Generic Routing Encapsulation (NVGRE) dengan offload segmentasi UDP (USO). Miniport, protokol, dan driver filter NDIS, serta NIC yang melakukan USO, harus mendukung enkaplasi NVGRE dan VXLAN.
Catatan: Artikel ini mengasumsikan Anda terbiasa dengan informasi dalam UDP Segmentation Offload (USO).
Jika NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. IsEncapsulatedPacket adalah TRUE dan informasi UdpSegmentationOffloadInfo out-of-band (OOB) valid, dukungan NVGRE dan VXLAN diperlukan. NIC harus melakukan offload USO pada paket NVGRE/VXLAN-enkapsulated dengan kondisi berikut:
- NDIS_UDP_SEGMENTATION_OFFLOAD_NET_BUFFER_LIST_INFO. Kirimkan. Anggota UdpHeaderOffset tidak memiliki nilai offset yang benar dan tidak boleh digunakan oleh driver NIC atau miniport.
Untuk mendukung NVGRE di USO, driver protokol dan filter harus:
- Sesuaikan nilai InnerFrameOffset, TransportIpHeaderRelativeOffset, dan TcpHeaderRelativeOffset dalam struktur NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO untuk memperhitungkan header enkapsulasi. TcpHeaderRelativeOffset mengacu pada header UDP.
NIC dan driver miniport dapat menggunakan nilai InnerFrameOffset, TransportIpHeaderRelativeOffset, dan TcpHeaderRelativeOffset yang disediakan dalam struktur NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO . NIC atau driver miniport dapat melakukan pemeriksaan header yang diperlukan pada header IP terowongan (luar) atau header berikutnya untuk memvalidasi offset ini.
Driver Miniport harus menangani kasus di mana NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. InnerFrameOffset mungkin berada dalam daftar pengumpulan sebar yang berbeda dari awal paket. Driver protokol akan menjamin bahwa semua header enkapulasi yang telah ditentukan sebelumnya (ETH, IP, GRE/VXLAN) akan berdekatan secara fisik dan akan berada di MDL pertama paket.
Driver protokol dan filter tidak memastikan bahwa total panjang payload UDP adalah kelipatan yang tepat dari pengurangan nilai MSS ketika UdpSegmentation.SubMssFinalSegmentSupported diatur dalam kemampuan NDIS_OFFLOAD . Untuk alasan ini, driver miniport dan NIC dengan SubMssFinalSegmentSupported harus memperbarui header IP terowongan (luar). NIC harus menghasilkan segmen berukuran penuh sebanyak mungkin berdasarkan pengurangan nilai MSS dalam NDIS_UDP_SEGMENTATION_OFFLOAD_NET_BUFFER_LIST_INFO. Mengirimkan Informasi OOB. Hanya satu segmen sub-MSS yang dapat dihasilkan per pengiriman LSOv2.
Driver Miniport harus:
- Komputasi checksum untuk header IP terowongan (luar).
- Tingkatkan nilai identifikasi IP (ID IP) header IP terowongan (luar) untuk setiap paket. Paket pertama harus menggunakan ID IP di header IP terowongan asli (luar).
- Tambahkan ID IP header IP transportasi (dalam) untuk setiap paket. Paket pertama harus menggunakan ID IP di header IP transportasi asli (dalam).
- Komputasi checksum untuk header UDP dan header IP transportasi (dalam).
- Pastikan header lengkap, termasuk header terowongan enkapsulasi (luar) ditambahkan ke setiap paket yang dihasilkan.