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.
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.
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 |