Empfangen von Benachrichtigungen über Änderungen
Viele Clients können die Routingtabelle gleichzeitig aktualisieren, und Clients müssen benachrichtigt werden, wenn Änderungen an Routinginformationen auftreten. Beispielsweise kann ein Client, der nicht über Änderungen an der Routingtabelle eines anderen Clients benachrichtigt wird, veraltete Routeninformationen ankündigen. Dies kann durch Programmieren von Clients verhindert werden, die sich beim Routingtabellen-Manager registrieren, um über Änderungen in der Routingtabelle benachrichtigt zu werden. Der Routingtabellen-Manager sendet Benachrichtigungen über Änderungen an alle Clients, die sich für den Empfang registrieren.
Änderungsbenachrichtigung gilt nur für Ziele. Es gibt keine Möglichkeit, den Routingtabellen-Manager nach Änderungen an einer bestimmten Route abzufragen.
Wenn eine Änderung an einer der Routen zu einem Ziel vorgenommen wird, sendet der Routingtabellen-Manager eine Benachrichtigung, dass eine Änderung erfolgt ist. Diese Benachrichtigung geht nur an die Clients, die sich beim Routingtabellen-Manager für den Typ der aufgetretenen Änderung registriert haben. Alle Änderungen an Routinginformationen im Routingtabellen-Manager erfolgen in einer oder mehreren Ansichten, und Änderungsbenachrichtigungen können in jeder Teilmenge der unterstützten Ansichten angefordert werden.
Es gibt derzeit drei Arten von Änderungsbenachrichtigungen, für die sich ein Client registrieren kann:
Benachrichtigung über änderungen an den Routen für das Ziel. Diese Anforderung wird mithilfe des flags RTM_CHANGE_TYPE_ALL durchgeführt.
Benachrichtigung, wenn sich die beste Route zum Ziel ändert, oder eine der folgenden Informationen für die aktuellen besten Routenänderungen:
- Einstellung
- Nächste Hops
- Routenflags
Diese Anforderung wird mithilfe des RTM_CHANGE_TYPE_BEST-Flags durchgeführt.
Benachrichtigung über alle Änderungen des Typs RTM_CHANGE_TYPE_BEST, mit Ausnahme von Änderungen in Nichtweiterleitungsflags in der besten Route. Beispielsweise wartet der Router-Manager auf Änderungen dieses Typs in der Unicastansicht und aktualisiert Informationen in der Unicastweiterleitung. Diese Anforderung wird mithilfe des flags RTM_CHANGE_TYPE_FORWARDING durchgeführt.
Anforderungen für Änderungsbenachrichtigungen können auch auf eine Teilmenge von Zielen beschränkt werden, indem nur für "markierte" Ziele Benachrichtigungen über Änderungen registriert werden. Der Client kann ein Ziel für Änderungsbenachrichtigungen markieren, indem er RtmMarkDestForChangeNotification aufruft.
Wenn eine Änderung auftritt, überprüft der Routingtabellen-Manager, ob Clients vorhanden sind, die über diese Änderung benachrichtigt werden müssen. Ein Client muss über eine Änderung benachrichtigt werden, wenn alle der folgenden Bedingungen erfüllt sind:
- Der Typ der aufgetretenen Änderung ist ein Typ, für den sich der Client für die Benachrichtigung registriert hat.
- Änderungen an einem Ziel, das der Client markiert hat, oder an einem beliebigen Ziel, wenn der Client Änderungen für alle Ziele angefordert hat
- Der Client hat eine Änderungsbenachrichtigung für die Ansicht angefordert, in der diese Änderung aufgetreten ist.
Wenn die Änderung alle oben genannten Kriterien erfüllt, wird die Änderung zwischengespeichert, und der Client wird benachrichtigt.
Die Benachrichtigung gibt nicht an, was die tatsächlichen Änderungen sind, nur, dass sie aufgetreten sind. Der Client muss die Änderungen abrufen, indem er RtmGetChangedDests mithilfe des Benachrichtigungshandles aufruft , das aus einem vorherigen Aufruf von RtmRegisterForChangeNotification abgerufen wurde.