Menerima Pemberitahuan Perubahan

Banyak klien dapat memperbarui tabel perutean secara bersamaan, dan klien harus diberi tahu ketika perubahan pada informasi perutean terjadi. Misalnya, klien yang tidak diberi tahu tentang perubahan klien lain pada tabel perutean dapat mengiklankan informasi rute yang sudah kedaluarsa. Ini dapat dicegah dengan klien pemrograman untuk mendaftar dengan manajer tabel perutean untuk diberi tahu tentang perubahan dalam tabel perutean. Manajer tabel perutean mengirimkan pemberitahuan perubahan ke semua klien yang mendaftar untuk menerimanya.

Pemberitahuan perubahan hanya berlaku untuk tujuan. Tidak ada cara untuk mengkueri manajer tabel perutean untuk perubahan pada rute tertentu.

Saat perubahan dilakukan pada salah satu rute ke tujuan, manajer tabel perutean mengirimkan pemberitahuan bahwa perubahan telah terjadi. Pemberitahuan ini hanya masuk ke klien yang telah mendaftar dengan manajer tabel perutean untuk jenis perubahan yang telah terjadi. Semua perubahan pada informasi perutean di manajer tabel perutean terjadi dalam satu atau beberapa tampilan, dan mengubah pesan pemberitahuan dapat diminta di subset tampilan yang didukung.

Saat ini ada tiga jenis pemberitahuan perubahan yang dapat didaftarkan klien:

  • Pemberitahuan tentang setiap perubahan pada rute untuk tujuan. Permintaan ini dibuat menggunakan bendera RTM_CHANGE_TYPE_ALL.

  • Pemberitahuan jika rute terbaik ke tujuan berubah, atau salah satu informasi berikut untuk perubahan rute terbaik saat ini:

    • Preferensi
    • Lompatan berikutnya
    • Bendera rute

    Permintaan ini dibuat menggunakan bendera RTM_CHANGE_TYPE_BEST.

  • Pemberitahuan semua perubahan jenis RTM_CHANGE_TYPE_BEST, kecuali perubahan bendera non-penerusan di rute terbaik. Misalnya, manajer router menunggu perubahan jenis ini dalam tampilan unicast, dan memperbarui informasi di penerus unicast. Permintaan ini dibuat menggunakan bendera RTM_CHANGE_TYPE_FORWARDING.

Permintaan pemberitahuan perubahan juga dapat dibatasi untuk subset tujuan dengan mendaftar untuk pemberitahuan perubahan hanya ke tujuan "ditandai". Klien dapat menandai tujuan untuk pemberitahuan perubahan dengan memanggil RtmMarkDestForChangeNotification.

Ketika perubahan terjadi, manajer tabel perutean memeriksa untuk melihat apakah ada klien yang harus diberi tahu tentang perubahan ini. Klien harus diberi tahu tentang perubahan jika semua kondisi berikut terpenuhi:

  • Jenis perubahan yang terjadi adalah jenis yang telah didaftarkan klien untuk pemberitahuan
  • Perubahan pada tujuan yang telah ditandai klien telah terjadi atau tujuan apa pun, jika klien telah meminta perubahan untuk semua tujuan
  • Klien meminta pemberitahuan perubahan untuk tampilan di mana perubahan ini terjadi

Jika perubahan memenuhi semua kriteria di atas, perubahan di-cache dan klien diberi tahu.

Pemberitahuan tidak menentukan apa perubahan aktualnya, hanya yang telah terjadi. Klien harus mengambil perubahan dengan memanggil RtmGetChangedDests menggunakan handel pemberitahuan yang diperoleh dari panggilan sebelumnya ke RtmRegisterForChangeNotification.