変更の通知の受信
多くのクライアントはルーティング テーブルを同時に更新でき、ルーティング情報の変更が発生したときにクライアントに通知する必要があります。 たとえば、ルーティング テーブルに対する別のクライアントの変更が通知されないクライアントは、古いルート情報をアドバタイズする可能性があります。 これは、ルーティング テーブル マネージャーに登録するクライアントをプログラミングして、ルーティング テーブルの変更を通知することで回避できます。 ルーティング テーブル マネージャーは、変更を受信するために登録するすべてのクライアントに通知を送信します。
変更通知は宛先にのみ適用されます。 ルーティング テーブル マネージャーに対してクエリを実行して、特定のルートに対する変更を照会する方法はありません。
宛先へのルートのいずれかに変更が加えられた場合、ルーティング テーブル マネージャーは、変更が発生したことを示す通知を送信します。 この通知は、発生した変更の種類についてルーティング テーブル マネージャーに登録されているクライアントにのみ送信されます。 ルーティング テーブル マネージャーのルーティング情報に対するすべての変更は 1 つ以上のビューで行われ、変更通知メッセージはサポートされているビューの任意のサブセットで要求できます。
現在、クライアントが登録できる変更通知には、次の 3 種類があります。
宛先のルートに対する変更の通知。 この要求は、RTM_CHANGE_TYPE_ALL フラグを使用して行われます。
宛先への最適なルートが変更された場合、または現在の最適なルートに関する次のいずれかの情報が変更された場合の通知。
- 優先順位
- 次ホップ
- ルート フラグ
この要求は、RTM_CHANGE_TYPE_BEST フラグを使用して行われます。
最適なルートでの転送以外のフラグの変更を除き、RTM_CHANGE_TYPE_BEST型のすべての変更の通知。 たとえば、ルータ マネージャはユニキャスト ビューでこのタイプの変更を待機し、ユニキャスト フォワーダーの情報を更新します。 この要求は、RTM_CHANGE_TYPE_FORWARDING フラグを使用して行われます。
変更の通知の要求は、"マークされた" 宛先にのみ変更の通知を登録することで、宛先のサブセットに制限することもできます。 クライアントは RtmMarkDestForChangeNotification を呼び出すことによって、変更通知の宛先をマークできます。
変更が発生すると、ルーティング テーブル マネージャーは、この変更を通知する必要があるクライアントがあるかどうかを確認します。 次のすべての条件が満たされた場合、クライアントに変更の通知を受け取る必要があります。
- 発生した変更の種類は、クライアントが通知に登録した型です
- クライアントがすべての宛先に対して変更を要求した場合に、クライアントがマークした宛先への変更が発生したか、または任意の宛先に対する変更
- クライアントは、この変更が発生したビューの変更通知を要求しました
変更が上記のすべての条件を満たしている場合、変更はキャッシュされ、クライアントに通知されます。
通知では、実際の変更の内容は指定されず、変更が発生したことだけが示されます。 クライアントは、RtmRegisterForChangeNotification の以前の呼び出しから取得した通知ハンドルを使用して RtmGetChangedDests を呼び出して変更を取得する必要があります。