Bagikan melalui


Mengelola Data Run-Time Sakelar yang Dapat Diperluas Hyper-V

Topik ini menjelaskan operasi penyimpanan dan pemulihan untuk ekstensi sakelar yang dapat diperluas Hyper-V. Operasi ini memungkinkan ekstensi untuk menyimpan dan memulihkan data run-time untuk masing-masing adaptor jaringan sakelar ekstensi (NIC). Operasi ini dilakukan ketika partisi anak Hyper-V yang memiliki koneksi adaptor jaringan ke port switch yang dapat diperluas sedang dihentikan atau diaktifkan.

Menyimpan Data Sakelar yang Dapat Diperluas Hyper-V Run-Time

Bagian ini menjelaskan operasi di mana ekstensi Hyper-V Extensible Switch dapat menyimpan data run-time untuk adaptor jaringan individu (NIC). Operasi ini dilakukan ketika partisi anak Hyper-V dengan koneksi adaptor jaringan ke port sakelar ekstensibel sedang dihentikan atau statusnya sedang disimpan.

Menangani Permintaan OID_SWITCH_NIC_SAVE

Ketika partisi anak Hyper-V dengan koneksi adaptor jaringan ke port sakelar yang dapat diperluas dihentikan atau statusnya disimpan, antarmuka sakelar yang dapat diperluas Hyper-V diberi tahu. Ini menyebabkan tepi protokol sakelar yang dapat diperluas untuk mengeluarkan permintaan metode pengidentifikasi objek (OID) OID_SWITCH_NIC_SAVE ke bawah tumpukan driver sakelar yang dapat diperluas. Ketika ekstensi sakelar yang dapat diperluas menerima permintaan OID ini, ekstensi ini dapat menyimpan data run-time-nya untuk koneksi adaptor jaringan yang ditentukan yang dilampirkan ke partisi anak.

InformationBuffer dari anggota struktur NDIS_OID_REQUEST untuk permintaan OID_SWITCH_NIC_SAVE berisi sebuah pointer ke struktur NDIS_SWITCH_NIC_SAVE_STATE. Struktur ini dialokasikan oleh ujung protokol sakelar yang dapat diperluas dan diinisialisasi dengan cara berikut:

  • Anggota Header diinisialisasi untuk berisi jenis saat ini, revisi struktur NDIS_SWITCH_NIC_SAVE_STATE. Ukuran diatur ke ukuran buffer penuh.

  • Anggota PortId berisi pengidentifikasi unik dari port sakelar yang dapat diperluas yang sedang dilakukan operasi penyimpanan padanya.

Ketika menerima permintaan metode OID_SWITCH_NIC_SAVE, ekstensi melakukan hal berikut:

  1. Ekstensi membaca PortId anggota struktur NDIS_SWITCH_NIC_SAVE_STATE.

  2. Jika ekstensi memiliki data run-time untuk disimpan untuk NIC yang ditentukan, ekstensi menyimpan datanya dalam struktur NDIS_SWITCH_NIC_SAVE_STATE yang dimulai dengan SaveDataOffset byte dari awal struktur. Ekstensi kemudian menyelesaikan permintaan metode OID dengan NDIS_STATUS_SUCCESS.

  3. Jika struktur NDIS_SWITCH_NIC_SAVE_STATE tidak menyediakan buffer yang memadai untuk menampung status runtime, ekstensi mengatur bidang BytesNeeded struktur metode ke NDIS_SIZEOF_NDIS_SWITCH_NIC_SAVE_STATE_REVISION_1 ditambah jumlah buffer yang diperlukan untuk menyimpan data, dan menyelesaikan OID menggunakan NDIS_STATUS_BUFFER_TOO_SHORT. OID akan diterbitkan ulang dengan ukuran yang diperlukan.

  4. Jika ekstensi tidak memiliki data run-time untuk disimpan untuk NIC yang ditentukan, ekstensi harus memanggil NdisFOidRequest. Ini meneruskan permintaan metode OID ke driver yang mendasar dalam tumpukan driver sakelar yang dapat diperluas. Untuk informasi lebih lanjut tentang prosedur ini, silakan lihat Penyaringan Permintaan OID dalam Driver Filter NDIS.

Jika ekstensi memiliki data port run-time untuk disimpan, ekstensi harus mengikuti panduan ini saat menyimpan data port run-time dalam struktur NDIS_SWITCH_NIC_SAVE_STATE:

  1. Ekstensi mengatur nilai anggota ExtensionId dengan nilai GUID yang mengidentifikasi driver secara unik.

  2. Ekstensi mengatur parameter ExtensionFriendlyName menjadi nama driver.

    Catatan Jenis data NDIS_SWITCH_EXTENSION_FRIENDLYNAME ditentukan oleh struktur IF_COUNTED_STRING. String yang didefinisikan oleh struktur ini tidak harus diakhiri dengan karakter null. Namun, panjang string harus diatur dalam Panjang anggota struktur ini. Jika string diakhiri dengan NULL, anggota Panjang tidak boleh menyertakan karakter NULL yang mengakhiri.

  3. Jika kelas fitur dikaitkan dengan data run-time yang telah disimpan, ekstensi mengatur FeatureClassId dengan GUID yang mengidentifikasi kelas secara unik.

    Catatan Jika kelas fitur tidak terkait dengan data run-time yang disimpan, ekstensi mengatur FeatureClassId ke nol.

  4. Ekstensi menyalin data run-time ke anggota SaveData dan mengatur anggota SaveDataSize ke ukuran, dalam byte, dari data run-time.

Catatan Ekstensi tidak boleh mengubah Header atau anggota PortId dari struktur NDIS_SWITCH_NIC_SAVE_STATE.

Permintaan metode OID OID_SWITCH_NIC_SAVE pada akhirnya ditangani oleh ujung miniport di dalam sakelar ekstensi yang dapat diperluas. Setelah permintaan metode OID ini diteruskan ke driver miniport melalui stack driver sakelar yang ekstensibel, driver miniport menyempurnakan permintaan OID dengan NDIS_STATUS_SUCCESS. Ini memberi tahu tepi protokol dari sakelar yang dapat diperluas bahwa semua ekstensi dalam tumpukan driver sakelar yang dapat diperluas telah dikueri untuk data port run-time. Sisi protokol sakelar yang dapat diperluas kemudian mengeluarkan permintaan penetapan OID OID_SWITCH_NIC_SAVE_COMPLETE untuk menyelesaikan operasi penyimpanan.

Menangani Permintaan OID_SWITCH_NIC_SAVE_COMPLETE (Permintaan Penyimpanan Lengkap NIC)

Ketika partisi anak Hyper-V yang memiliki koneksi adaptor jaringan ke port sakelar yang dapat diperluas dijeda atau statusnya sedang disimpan, antarmuka sakelar yang dapat diperluas Hyper-V akan diberi tahu. Ini menyebabkan tepi protokol sakelar yang dapat diperluas untuk mengeluarkan permintaan metode pengidentifikasi objek (OID) OID_SWITCH_NIC_SAVE ke bawah tumpukan driver sakelar yang dapat diperluas.

Ketika setiap ekstensi sakelar yang dapat diperluas Hyper-V telah menyimpan data run-time-nya, tepi protokol sakelar yang dapat diperluas memberi tahu ekstensi yang mendasari bahwa operasi penyimpanan telah selesai. Tepi protokol melakukan ini dengan mengeluarkan permintaan penyetelan OID OID_SWITCH_NIC_SAVE_COMPLETE ke bawah tumpukan driver sakelar yang dapat diperluas.

Catatan Ketika operasi penyimpanan run-time dimulai untuk koneksi adaptor jaringan sakelar ekstensi, operasi penyimpanan lain untuk koneksi adaptor jaringan yang sama tidak akan dilakukan hingga permintaan OID_SWITCH_NIC_SAVE_COMPLETE diterbitkan. Namun, operasi penyimpanan untuk koneksi adaptor jaringan lainnya dapat terjadi selama waktu ini.

InformationBuffer, yang merupakan anggota dari struktur NDIS_OID_REQUEST untuk permintaan OID_SWITCH_NIC_SAVE_COMPLETE, berisi penunjuk ke struktur NDIS_SWITCH_NIC_SAVE_STATE. Struktur ini dialokasikan oleh ujung protokol dari sakelar yang dapat diperluas.

Ketika ekstensi menerima permintaan pengaturan OID OID_SWITCH_NIC_SAVE_COMPLETE, ekstensi diwajibkan mengikuti panduan berikut:

  • Ekstensi tidak boleh mengubah struktur NDIS_SWITCH_NIC_SAVE_STATE yang terkait dengan permintaan OID.

  • Ekstensi harus memanggil NdisFOidRequest untuk meneruskan permintaan OID ini melalui stack ekstensi sakelar yang dapat diperluas. Ekstensi tidak boleh gagal memenuhi permintaan OID.

    Catatan Ekstensi harus memantau status penyelesaian permintaan OID ini. Ekstensi melakukan ini untuk mendeteksi apakah operasi penyimpanan telah berhasil diselesaikan.

Permintaan OID method OID_SWITCH_NIC_SAVE_COMPLETE pada akhirnya ditangani oleh lapisan miniport bawah dari sakelar ekstensible. Setelah permintaan metode OID ini diterima oleh miniport edge, permintaan OID diselesaikan dengan status NDIS_STATUS_SUCCESS. Ini memberi tahu tepi protokol sakelar ekstensi bahwa semua ekstensi dalam tumpukan driver sakelar ekstensi telah menyempurnakan operasi penyimpanan.

Memulihkan Data Hyper-V Sakelar yang Dapat Diperluas Run-Time

Ketika partisi anak Hyper-V yang memiliki koneksi adaptor jaringan ke port sakelar yang dapat diperluas dilanjutkan dari jeda, antarmuka sakelar yang dapat diperluas Hyper-V diberi tahu. Ini menyebabkan batas protokol sakelar yang dapat diperluas mengeluarkan permintaan set pengidentifikasi objek (OID) OID_SWITCH_NIC_RESTORE melalui susunan driver sakelar yang dapat diperluas. Ketika ekstensi menerima permintaan OID ini, ekstensi dapat memulihkan data run-time untuk port sakelar yang dapat diperluas yang digunakan oleh partisi anak.

InformationBuffer anggota struktur NDIS_OID_REQUEST untuk permintaan OID_SWITCH_NIC_RESTORE berisi penunjuk ke struktur NDIS_SWITCH_NIC_SAVE_STATE. Struktur ini dialokasikan oleh ujung protokol dari sakelar yang dapat diperluas.

Saat menerima permintaan pengaturan OID untuk OID_SWITCH_NIC_RESTORE, ekstensi dari sakelar yang dapat diperluas harus terlebih dahulu menentukan apakah ia memiliki data run-time tersebut. Ekstensi melakukan ini dengan membandingkan nilai ExtensionId anggota struktur NDIS_SWITCH_NIC_SAVE_STATE dengan nilai GUID yang digunakan ekstensi untuk mengidentifikasi dirinya sendiri.

Jika ekstensi memiliki data run-time untuk NIC sakelar yang dapat diperluas, ekstensi akan memulihkan data ini dengan cara sebagai berikut:

  1. Ekstensi menyalin data run-time dari anggota SaveData ke penyimpanan yang dialokasikan driver.

    Catatan Nilai dari anggota PortId dalam struktur NDIS_SWITCH_NIC_SAVE_STATE mungkin berbeda dari nilai PortId pada saat data run-time disimpan. Ini dapat terjadi jika data run-time disimpan selama Migrasi Langsung dari satu host ke host lainnya. Namun, konfigurasi NIC sakelar yang dapat diperluas tetap terjaga selama proses Live Migration. Ini memungkinkan ekstensi untuk mengembalikan data run-time ke NIC sakelar yang dapat diperluas dengan menggunakan PortId baru nilai .

  2. Ekstensi menyelesaikan permintaan pengaturan OID dengan NDIS_STATUS_SUCCESS.

Jika ekstensi tidak memiliki data run-time yang ditentukan untuk disimpan, ekstensi memanggil NdisFOidRequest. Ini meneruskan permintaan pengaturan OID ke driver dasar dalam tumpukan driver switch yang dapat diperluas. Dalam hal ini, ekstensi tidak boleh mengubah struktur NDIS_SWITCH_NIC_SAVE_STATE yang terkait dengan permintaan OID. Untuk informasi selengkapnya tentang cara meneruskan permintaan OID, lihat Memfilter Permintaan OID di Driver Filter NDIS.

Jika permintaan set OID OID_SWITCH_NIC_RESTORE diselesaikan dengan NDIS_STATUS_SUCCESS, maka protokol tepi dari sakelar dapat diperluas akan mengeluarkan permintaan set OID yang lain. Ketika menerima permintaan set OID baru ini, ekstensi dapat melakukan salah satu hal berikut:

  • Jika ekstensi memiliki data run-time dalam permintaan OID baru, maka ekstensi tersebut memulihkan data run-time tambahan dalam struktur NDIS_SWITCH_NIC_SAVE_STATE. Ekstensi kemudian menyelesaikan permintaan OID dengan NDIS_STATUS_SUCCESS.

  • Jika tidak memiliki data run-time dalam permintaan OID baru, ekstensi memanggil NdisFOidRequest untuk meneruskan permintaan set OID ini ke driver yang mendasarinya.

OID_SWITCH_NIC_RESTORE_COMPLETE
Antarmuka sakelar yang dapat diperluas menandakan tepi protokol sakelar yang dapat diperluas untuk mengeluarkan OID ini pada penyelesaian operasi pemulihan data run-time untuk adaptor jaringan sakelar yang dapat diperluas.

Permintaan OID ini memberi tahu ekstensi bahwa proses pemulihan telah selesai hanya untuk NIC sakelar ekstensi yang spesifik.

Untuk informasi selengkapnya tentang permintaan OID ini, lihat OID_SWITCH_NIC_RESTORE_COMPLETE.

Catatan Jika permintaan pengaturan OID_SWITCH_NIC_RESTORE diterima oleh batas miniport dari sakelar yang dapat diperluas, maka permintaan OID tersebut akan dipenuhi dengan NDIS_STATUS_SUCCESS. Ini memberi tahu tepi sakelar protokol yang dapat diperpanjang bahwa tidak ada ekstensi yang memiliki data run-time. Jika ini terjadi, antarmuka sakelar yang dapat diperluas akan mencatat sebuah peristiwa yang mendokumentasikan nilai anggota ExtensionId dan PortId untuk ekstensi yang awalnya menyimpan data port run-time.