Bagikan melalui


W_TCP_OFFLOAD_DISCONNECT_HANDLER fungsi panggilan balik (ndischimney.h)

[Fitur offload cerobong asap TCP tidak digunakan lagi dan tidak boleh digunakan.]

Fungsi MiniportTcpOffloadDisconnect menutup setengah pengiriman koneksi TCP yang dilepas. Selain itu, jika pemutusan yang akan dilakukan adalah pemutusan sambungan dengan anggun, NDIS dapat menyediakan data aplikasi ke fungsi MiniportTcpOffloadDisconnect yang harus ditransmisikan fungsi sebelum mengirim segmen FIN.

Sintaks

W_TCP_OFFLOAD_DISCONNECT_HANDLER WTcpOffloadDisconnectHandler;

NDIS_STATUS WTcpOffloadDisconnectHandler(
  [in] IN NDIS_HANDLE MiniportAdapterContext,
  [in] IN PVOID MiniportOffloadContext,
  [in] IN PNET_BUFFER_LIST NetBufferList,
  [in] IN ULONG Flags
)
{...}

Parameter

[in] MiniportAdapterContext

Handel ke area konteks yang dialokasikan target offload tempat target offload mempertahankan informasi status tentang instans adaptor ini. Target offload memberikan handel ini ke NDIS ketika dipanggil NdisMSetMiniportAttributes dari Fungsi MiniportInitializeEx .

[in] MiniportOffloadContext

Penunjuk ke lokasi memori yang berisi nilai PVOID. Nilai PVOID ini mereferensikan konteks offload miniport yang berisi objek status agar koneksi TCP terputus. Target offload memasok nilai PVOID ini ketika membongkar objek status koneksi TCP.

[in] NetBufferList

Penunjuk ke struktur NET_BUFFER_LIST tunggal. Hanya satu struktur NET_BUFFER yang terkait dengan struktur NET_BUFFER_LIST ini.

[in] Flags

Sebagai salah satu nilai berikut, jenis pemutusan sambungan yang harus dilakukan target offload:

TCP_DISCONNECT_ABORTIVE_CLOSE

Target offload harus melakukan pemutusan sambungan abortif dengan mengirim segmen RST.

TCP_DISCONNECT_GRACEFUL_CLOSE

Target offload harus melakukan pemutusan sambungan dengan anggun dengan mengirim segmen FIN.

Nilai kembali

Fungsi MiniportTcpOffloadDisconnect selalu mengembalikan NDIS_STATUS_PENDING. Target offload menyelesaikan permintaan pemutusan sambungan secara asinkron dengan memanggil NdisTcpOffloadDisconnectComplete.

Keterangan

Bergantung pada pengaturan Bendera , fungsi MiniportTcpOffloadDisconnect melakukan pemutusan sambungan abortif atau pemutusan sambungan dengan baik pada koneksi TCP yang ditentukan.

Putuskan Sambungan Abortif

Jika Bendera diatur ke TCP_DISCONNECT_ABORTIVE_CLOSE, target offload melakukan pemutusan sambungan abortif dengan mengirim segmen RST pada koneksi TCP yang ditentukan.

Catatan Ini adalah satu-satunya instans di mana target offload dapat mengirim segmen RST.
 
Sebelum memanggil Fungsi NdisTcpOffloadDisconnectComplete untuk menyelesaikan pemutusan abortif, target offload harus menyelesaikan semua permintaan pengiriman yang luar biasa pada koneksi dengan nilai status NDIS_STATUS_REQUEST_ABORTED. Target offload menulis nilai status ini ke anggota Status dari setiap struktur NET_BUFFER_LIST dalam daftar tertaut yang diteruskannya ke Fungsi NdisTcpOffloadSendComplete .

Tidak masalah apakah target offload mengakhiri permintaan pengiriman yang terutang sebelum atau sesudah mengirim segmen RST.

Jika ada indikasi penerimaan atau indikasi peristiwa yang luar biasa pada koneksi, target offload tidak boleh menunggu indikasi ini selesai sebelum mengirim segmen RST. Target offload harus segera berhenti memproses segmen penerima pada koneksi dan tidak mengakui segmen penerima apa pun, termasuk data penerima yang ditunjukkan yang belum digunakan oleh aplikasi klien.

Saat Bendera = TCP_DISCONNECT_ABORTIVE_CLOSE, struktur NET_BUFFER yang terkait dengan struktur NET_BUFFER_LIST yang dirujuk oleh penunjuk NetBufferList tidak berisi data. Artinya, anggota DataLength dari struktur NET_BUFFER_DATA di NetBufferHeader dari struktur NET_BUFFER adalah nol.

Pemutusan Sambungan Dengan Anggun

Jika Bendera diatur ke TCP_DISCONNECT_GRACEFUL_CLOSE, target offload melakukan pemutusan sambungan dengan anggun dengan mengirim segmen FIN pada koneksi TCP yang ditentukan.

Jika tidak ada data pengguna yang akan dikirim sebelum segmen FIN, struktur NET_BUFFER yang terkait dengan struktur NET_BUFFER_LIST yang dirujuk oleh penunjuk NetBufferList tidak berisi data. Jika ada data pengguna yang akan dikirim, daftar deskriptor memori (MDL) yang terkait dengan struktur NET_BUFFER berisi data pengguna yang akan dikirim.

Target offload tidak boleh menunggu pengakuan data pengguna yang dikirimkan sebelum mengirim segmen FIN. Target offload dapat mengirim segmen FIN terpisah setelah mengirimkan data pengguna, atau target offload dapat mengatur bit FIN di header TCP dari segmen terakhir data pengguna yang dikirimnya.

Dari perspektif target offload, mengirim segmen FIN menutup setengah pengiriman koneksi. Namun, mengirim segmen FIN, tidak menutup setengah dari koneksi yang diterima. Host jarak jauh mengakhiri setengah penerimaan koneksi dengan mengirim salah satu hal berikut ke target offload:

  • Segmen FIN, yang meminta pemutusan sambungan dengan anggun.
  • Segmen RST, yang meminta pemutusan sambungan abortif.
Setelah mengirim segmen FIN, target offload dapat menerima segmen pada koneksi sampai host jarak jauh memulai pemutusan anggun atau abortif atau sampai host lokal menghentikan offload koneksi atau memulai pemutusan sambungan yang dibatalkan.

Sebelum panggilan target offload NdisTcpOffloadDisconnectComplete, itu harus menyelesaikan semua permintaan pengiriman yang luar biasa pada koneksi dalam urutan yang sama di mana mereka dikirimkan ke target offload.

Respons Wajib terhadap Permintaan Putuskan Sambungan

Target offload tidak boleh menggagalkan permintaan pemutusan sambungan kecuali koneksi TCP yang ditentukan sedang diunggah atau dibatalkan (misalnya, karena host jarak jauh mengirim segmen RST pada koneksi). Jika target offload gagal memutuskan permintaan pemutusan, tumpukan host tidak akan mengeluarkan kembali permintaan pemutusan sambungan nanti.

Membebaskan Sumber Daya Koneksi

Target offload tidak boleh membebaskan sumber daya untuk koneksi di mana ia telah mengeluarkan pemutusan sambungan abortif atau anggun sampai tumpukan host mengakhiri offload koneksi.

Persyaratan

Persyaratan Nilai
Target Platform Windows
Header ndischimney.h (termasuk Ndischimney.h)
IRQL Tingkat apa pun

Lihat juga

MiniportInitializeEx

MiniportTerminateOffload

NET_BUFFER

NET_BUFFER_DATA

NET_BUFFER_LIST

NET_BUFFER_LIST_INFO

NdisAdvanceNetBufferDataStart

NdisMSetMiniportAttributes

NdisTcpOffloadDisconnectComplete

NdisTcpOffloadSendComplete