Bagikan melalui


Mendukung NVGRE di Checksum Offload

NDIS 6.30 (Windows Server 2012) memperkenalkan Virtualisasi Jaringan menggunakan Enkapulasi Perutean Generik (NVGRE). Miniport NDIS, protokol, dan driver filter dan NIC yang melakukan tugas checksum offload harus melakukannya dengan cara yang mendukung NVGRE.

Catatan Halaman ini mengasumsikan bahwa Anda terbiasa dengan informasi dalam Tugas Offloading Checksum.

Jika NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. IsEncapsulatedPacket adalah TRUE dan informasi TcpIpChecksumNetBufferListInfo out-of-band (OOB) valid, ini menunjukkan bahwa dukungan NVGRE diperlukan dan NIC harus menghitung checksum untuk header IP terowongan (luar), header IP transportasi (dalam), dan header TCP atau UDP.

Bendera IsIPv4 dan IsIPv6 dalam struktur NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO menunjukkan versi header IP dari header IP terowongan (luar). NIC harus mengurai header IP transportasi (dalam) untuk menentukan versi IP header tersebut. Karena paket mode campuran diizinkan (lihat NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD), NIC tidak boleh berasumsi bahwa header IP dalam dan luar akan memiliki versi header IP yang sama.

NIC dan driver miniport dapat menggunakan nilai InnerFrameOffset, TransportIpHeaderRelativeOffset, dan TcpHeaderRelativeOffset yang disediakan dalam struktur NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO . Driver NIC atau miniport dapat melakukan pemeriksaan header yang diperlukan pada header IP terowongan (luar) atau header berikutnya untuk memvalidasi offset ini.

Perhatikan bahwa ketika NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO. IsEncapsulatedPacket adalah TRUE, bidang offset header yang ada, NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO. LsoV2Transmit. TcpHeaderOffset dan NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO. Kirimkan. TcpHeaderOffset, tidak akan memiliki nilai yang benar dan tidak boleh digunakan oleh NIC atau driver.

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) akan berdekatan secara fisik dan akan berada di MDL pertama paket.

Validasi Checksum

Validasi checksum untuk NVGRE sebagian besar sama dengan sebaliknya.

Jika miniport menerima permintaan OID OID_TCP_OFFLOAD_PARAMETERS dan berhasil untuk NDIS_ENCAPSULATION_TYPE_GRE_MAC (lihat NDIS_OFFLOAD_PARAMETERS), NIC harus melakukan validasi checksum pada header IP terowongan (luar), header IP transportasi (dalam), dan header TCP atau UDP.

Untuk paket enkapsultasi yang memiliki header terowongan IPv4 (luar) dan header transportasi IPv4 (dalam), driver miniport harus mengatur bendera IpChecksumSucceeded di struktur NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO hanya jika kedua validasi checksum header IP berhasil. Untuk paket enkapsultasi yang memiliki header IPv4 terowongan (luar) dan header IPv4 transportasi (dalam), driver miniport harus mengatur bendera IpChecksumFailed jika salah satu validasi checksum header IP gagal.