Bagikan melalui


Memulihkan NIC yang tidak responsif dengan NetAdapterCx PLDR

NetAdapterCx menyediakan cara efektif untuk mengatur ulang dan memulihkan perangkat jaringan yang tidak berfungsi melalui reset perangkat tingkat platform (PLDR). Tanpa me-reboot seluruh sistem Windows, operasi PLDR merobek tumpukan perangkat jaringan yang terpengaruh memastikan perangkat keras dan driver mereka dimulai ulang dari keadaan kosong. NetAdapterCx juga memungkinkan driver klien untuk mengumpulkan diagnostik dari perangkat yang gagal sebelum diatur ulang tingkat platform.

PLDR dipicu ketika perilaku perangkat abnormal terdeteksi. Ini dapat dipicu oleh:

  • Sistem operasi (OS). Misalnya, sisi OS dapat memicu PLDR ketika paket dalam transit terjebak di driver terlalu lama.

  • Driver klien vendor perangkat keras independen (IHV). Misalnya, driver klien dapat meminta NetAdapterCx untuk memicu PLDR ketika driver mendeteksi bahwa perangkat mereka tidak responsif terhadap perintah kontrolnya.

Untuk memberikan kegagalan dan pemulihan perangkat yang mudah digunakan, sebaiknya IHV dan produsen peralatan asli (OEM) mendukung PLDR untuk perangkat jaringan mereka. Untuk informasi selengkapnya tentang PLDR, lihat Mengatur ulang dan memulihkan perangkat. NetAdapterCx tidak memulihkan perangkat jaringan melalui reset perangkat tingkat fungsi.

Mendaftarkan panggilan balik pengumpulan diagnostik opsional

Sebagai bagian dari proses reset dan pemulihan NetAdapterCx, driver klien dapat mengumpulkan diagnostik khusus perangkat dari perangkat yang gagal sebelum perangkat diatur ulang tingkat platform. IHV dan Microsoft dapat menggunakan data ini dalam analisis pasca-kegagalan untuk meningkatkan kualitas produk mereka.

Daftar NET_DEVICE_RESET_CAPABILITIES

Driver klien perlu menginisialisasi dan mendaftarkan struktur NET_DEVICE_RESET_CAPABILITIES dalam fungsi panggilan balik EVT_WDF_DRIVER_DEVICE_ADD mereka untuk mengumpulkan diagnostik khusus perangkat.

NET_DEVICE_RESET_CAPABILITIES berisi:

  • GUID unik. IHV menentukan GUID ini dan menggunakannya nanti untuk mengidentifikasi dan mengambil diagnostik reset dari cadangan memori. Misalnya, perintah .enumtag dapat digunakan untuk mengambil diagnostik.

  • Fungsi panggilan balik peristiwa EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS . NetAdapterCx memanggil panggilan balik ini untuk mengumpulkan diagnostik. Jika driver klien menyediakan panggilan balik EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS , NetAdapterCx memanggilnya pada driver klien menggunakan utas khusus .

Contoh berikut menunjukkan cara mendaftarkan NET_DEVICE_RESET_CAPABILITIES ke NetAdapterCx:

EVT_WDF_DRIVER_DEVICE_ADD EvtWdfDriverDeviceAdd;
EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS EvtDeviceCollectResetDiagnostics;

NTSTATUS EvtWdfDriverDeviceAdd(
    WDFDRIVER Driver,
    PWDFDEVICE_INIT DeviceInit
)
{
    ...

    NET_DEVICE_RESET_CAPABILITIES resetCapabilities;
    NET_DEVICE_RESET_CAPABILITIES_INIT(
        &resetCapabilities,
        DUMMY_GUID,
        EvtDeviceCollectResetDiagnostics);
    NetDeviceInitSetResetCapabilities(DeviceInit, &resetCapabilities);

    ...
}

Untuk informasi tentang cara menginisialisasi struktur NET_DEVICE_RESET_CAPABILITIES , lihat NET_DEVICE_RESET_CAPABILITIES_INIT.

Untuk mempelajari cara mengiklankan struktur NET_DEVICE_RESET_CAPABILITIES ke NetAdapterCx, lihat NetDeviceInitSetResetCapabilities.

Menerapkan EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS

Urutan reset dan pemulihan dapat terjadi kapan saja. Oleh karena itu, implementasi callback EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS driver klien harus mempertimbangkan hal-hal berikut:

  • NetAdapterCx menyinkronkan panggilan balik EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS dengan panggilan balik lain yang mungkin terjadi selama urutan power-down. Driver klien dapat mengasumsikan bahwa NetAdapterCx tidak akan memanggil panggilan balik seperti pembatalan/penghentian antrean paket, rilis perangkat keras, dan penghapusan objek perangkat hingga EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS kembali.

  • Driver klien harus berhati-hati saat menangani pengumpulan diagnostik untuk menghindari kebuntuan. Perlu diperingatkan bahwa perangkat keras mungkin sudah dalam status gagal.

  • Sangat penting bagi EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS untuk menyelesaikan sesegera mungkin sehingga sisa proses PLDR dapat dilanjutkan. EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS harus dapat diandalkan dan harus kembali dalam waktu 3 detik.

  • NetAdapterCx selalu memanggil EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS pada PASSIVE_LEVEL.

Untuk mengirimkan diagnostik ke NetAdapterCx, driver klien melakukan langkah-langkah berikut:

  1. Melakukan pra-alokasi buffer datar dari kumpulan halaman atau non-halaman untuk mengumpulkan diagnostik reset. Driver harus melakukan pra-alokasi buffer ini untuk menghindari kesalahan kehabisan memori selama reset perangkat.

  2. Dalam panggilan balik EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS , kirimkan diagnostik sebagai buffer datar dengan memanggil NETDeviceStoreResetDiagnostics API. Driver klien harus memanggil NETDeviceStoreResetDiagnostics API di PASSIVE_LEVEL.

  3. Bebaskan buffer data setelah NetDeviceStoreResetDiagnostics kembali.

Penting

NETDeviceStoreResetDiagnostics API hanya boleh dipanggil dalam panggilan balik EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS. Ini juga tidak dapat digunakan untuk mengirimkan ulang data diagnostik setelah netDeviceStoreResetDiagnostics sebelumnya kembali. Melanggar salah satu kasus ini akan mengakibatkan pemeriksaan bug.

Penting

Batasan ukuran untuk diagnostik reset adalah 1 MB.

Bagaimana driver klien meminta PLDR

Driver klien memicu PLDR menggunakan NETAdapterCx NetDeviceRequestReset API saat mendeteksi kegagalan perangkat. NetDeviceRequestReset segera kembali ke driver klien. Urutan reset dan pemulihan yang dijelaskan dalam urutan reset dan pemulihan NetAdapterCx dipicu dan asinkron dengan panggilan NetDeviceRequestReset .

Hanya satu operasi PLDR yang dapat terjadi pada waktu tertentu. Oleh karena itu, panggilan berikutnya dari NetDeviceRequestReset tidak berpengaruh ketika operasi PLDR telah dimulai.

Memanggil NetDeviceRequestReset juga tidak berpengaruh jika urutan power-down telah dimulai.

NetAdapterCx mengatur ulang dan memulihkan urutan

Ketika OS atau driver klien memicu PLDR, urutan berikut terjadi:

  1. Mengumpulkan diagnostik reset: NetAdapterCx memanggil panggilan balik EVT_NET_DEVICE_COLLECT_RESET_DIAGNOSTICS driver klien untuk mengumpulkan diagnostik dari perangkat yang gagal. Misalnya, driver dapat mengumpulkan rekam jepret firmware perangkat. Langkah ini bersifat opsional dan hanya terjadi jika driver klien telah mendaftarkan struktur NET_DEVICE_RESET_CAPABILITIES . Jika tidak, NetAdapterCx akan melewati langkah ini.

  2. Melakukan PLDR: NetAdapterCx melakukan operasi reset perangkat tingkat platform. Daya NetAdapterCx mendaur ulang perangkat keras dan merobek tumpukan perangkat perangkat lunak.

Diagram berikut mengilustrasikan urutan reset dan pemulihan NetAdapterCx:

Diagram alur yang mengilustrasikan urutan reset dan pemulihan NetAdapterCx.