3.5.1. Notification-Nachricht
Ein LSR sendet eine Notification-Nachricht, um einen LDP-Peer über ein bedeutendes Ereignis zu informieren. Eine Notification-Nachricht signalisiert einen schwerwiegenden Fehler oder stellt Hinweisinformationen bereit, wie etwa das Ergebnis der Verarbeitung einer LDP-Nachricht oder den Zustand der LDP-Sitzung.
Die Kodierung für die Notification-Nachricht ist:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0| Notification (0x0001) | Message Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Message ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Status (TLV) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Optional Parameters |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Message ID 32-Bit-Wert, der verwendet wird, um diese Nachricht zu identifizieren.
Status TLV Zeigt das signalisierte Ereignis an. Die Kodierung für das Status TLV ist im Abschnitt "Status TLV" spezifiziert.
Optional Parameters Dieses Feld variabler Länge enthält 0 oder mehr Parameter, jeder als TLV kodiert. Die folgenden Optional Parameters sind generisch und können in jeder Notification-Nachricht erscheinen:
Optional Parameter Type Length Value
Extended Status 0x0301 4 See below
Returned PDU 0x0302 var See below
Returned Message 0x0303 var See below
Andere Optional Parameters, die für das jeweilige von den Notification-Nachrichten signalisierte Ereignis spezifisch sind, können erscheinen. Diese werden an anderer Stelle beschrieben.
Extended Status Der Wert aus 4 Oktetten ist ein Extended Status Code, der zusätzliche Informationen kodiert, die die im Notification Status Code enthaltenen Statusinformationen ergänzen.
Returned PDU Ein LSR verwendet diesen Parameter, um einen Teil einer LDP-PDU an den LSR zurückzugeben, der sie gesendet hat. Der Wert dieses TLV ist der PDU-Header und so viele auf den Header folgende PDU-Daten, wie es für die durch die Notification-Nachricht signalisierte Bedingung angemessen ist.
Returned Message Ein LSR verwendet diesen Parameter, um einen Teil einer LDP-Nachricht an den LSR zurückzugeben, der sie gesendet hat. Der Wert dieses TLV ist der Nachrichtentyp und das Längenfeld sowie so viele auf die Typ- und Längenfelder folgende Nachrichtendaten, wie es für die durch die Notification-Nachricht signalisierte Bedingung angemessen ist.
3.5.1.1. Notification-Nachrichtenverfahren
Wenn ein LSR auf eine Bedingung stößt, die erfordert, dass er seinen Peer mit Hinweis- oder Fehlerinformationen benachrichtigt, sendet er dem Peer eine Notification-Nachricht, die ein Status TLV enthält, das die Informationen kodiert, und optional zusätzliche TLVs, die weitere Informationen über die Bedingung bereitstellen.
Wenn die Bedingung ein schwerwiegender Fehler ist, zeigt der in der Notification mitgeführte Status Code dies an. In diesem Fall SOLLTE (SHOULD) der LSR nach dem Senden der Notification-Nachricht die LDP-Sitzung beenden, indem er die TCP-Verbindung der Sitzung schließt, und alle mit der Sitzung verbundenen Zustände verwerfen, einschließlich aller über die Sitzung erlernten Label-FEC-Bindungen.
Wenn ein LSR eine Notification-Nachricht empfängt, die einen Status Code mitführt, der einen schwerwiegenden Fehler anzeigt, SOLLTE (SHOULD) er die LDP-Sitzung sofort beenden, indem er die TCP-Verbindung der Sitzung schließt, und alle mit der Sitzung verbundenen Zustände verwerfen, einschließlich aller über die Sitzung erlernten Label-FEC-Bindungen.
Die obige Aussage gilt nicht für die Verarbeitung der Shutdown-Nachricht im Sitzungsinitialisierungsverfahren. Wenn ein LSR während der Sitzungsinitialisierung eine Shutdown-Nachricht empfängt, SOLLTE (SHOULD) er eine Shutdown-Nachricht übertragen und dann die Transportverbindung schließen.
3.5.1.2. Durch Notification-Nachrichten signalisierte Ereignisse
Für beschreibende Zwecke ist es nützlich, die durch Notification-Nachrichten signalisierten Ereignisse in die folgenden Kategorien zu unterteilen.
3.5.1.2.1. Fehlerhafte PDU oder Nachricht
Fehlerhafte LDP-PDUs oder Nachrichten, die Teil des LDP-Discovery-Mechanismus sind, werden dadurch behandelt, dass sie stillschweigend verworfen werden.
Eine LDP-PDU, die auf einer TCP-Verbindung für eine LDP-Sitzung empfangen wird, ist fehlerhaft, wenn:
-
der LDP Identifier im PDU-Header dem Empfänger unbekannt ist, oder er bekannt ist, aber nicht der LDP Identifier ist, den der Empfänger mit dem LDP-Peer für diese LDP-Sitzung assoziiert. Dies ist ein schwerwiegender Fehler, der durch den Status Code Bad LDP Identifier signalisiert wird.
-
die LDP-Protokollversion vom Empfänger nicht unterstützt wird oder sie unterstützt wird, aber nicht die für die Sitzung während des Sitzungsaufbaus ausgehandelte Version ist. Dies ist ein schwerwiegender Fehler, der durch den Status Code Bad Protocol Version signalisiert wird.
-
das Feld PDU Length zu klein (< 14) oder zu groß (> maximale PDU-Länge) ist. Dies ist ein schwerwiegender Fehler, der durch den Status Code Bad PDU Length signalisiert wird. Der Abschnitt "Initialization Message" beschreibt, wie die maximale PDU-Länge für eine Sitzung bestimmt wird.
Eine LDP-Nachricht ist fehlerhaft, wenn:
-
der Message Type unbekannt ist.
Wenn der Message Type < 0x8000 ist (höchstwertiges Bit = 0), ist dies ein Fehler, der durch den Status Code Unknown Message Type signalisiert wird.
Wenn der Message Type >= 0x8000 ist (höchstwertiges Bit = 1), wird sie stillschweigend verworfen.
-
die Message Length zu groß ist, das heißt anzeigt, dass die Nachricht über das Ende der sie enthaltenden LDP-PDU hinausreicht. Dies ist ein schwerwiegender Fehler, der durch den Status Code Bad Message Length signalisiert wird.
-
die Message Length zu klein ist, das heißt kleiner als die kleinste mögliche Wertkomponente. Dies ist ein schwerwiegender Fehler, der durch den Status Code Bad Message Length signalisiert wird.
-
in der Nachricht ein oder mehrere Mandatory Parameters fehlen. Dies ist ein nicht schwerwiegender Fehler, der durch den Status Code Missing Message Parameters signalisiert wird.
3.5.1.2.2. Unbekanntes oder fehlerhaftes TLV
Fehlerhafte TLVs, die in LDP-Nachrichten enthalten sind, die Teil des LDP-Discovery-Mechanismus sind, werden dadurch behandelt, dass die enthaltende Nachricht stillschweigend verworfen wird.
Ein TLV, das in einer LDP-Nachricht enthalten ist, die auf einer TCP-Verbindung eines LDP empfangen wird, ist fehlerhaft, wenn:
-
die TLV Length zu groß ist, das heißt anzeigt, dass das TLV über das Ende der es enthaltenden Nachricht hinausreicht. Dies ist ein schwerwiegender Fehler, der durch den Status Code Bad TLV Length signalisiert wird.
-
der TLV-Typ unbekannt ist.
Wenn der TLV-Typ < 0x8000 ist (höchstwertiges Bit = 0), ist dies ein Fehler, der durch den Status Code Unknown TLV signalisiert wird.
Wenn der TLV-Typ >= 0x8000 ist (höchstwertiges Bit = 1), wird das TLV stillschweigend verworfen.
-
der TLV Value fehlerhaft ist. Dies tritt auf, wenn der Empfänger das TLV verarbeitet, aber den TLV Value nicht dekodieren kann. Dies wird als Hinweis auf einen Fehler entweder im sendenden oder im empfangenden LSR interpretiert. Es ist ein schwerwiegender Fehler, der durch den Status Code Malformed TLV Value signalisiert wird.
3.5.1.2.3. Ablauf des Session KeepAlive-Timers
Dies ist ein schwerwiegender Fehler, der durch den Status Code KeepAlive Timer Expired signalisiert wird.
3.5.1.2.4. Einseitige Sitzungsbeendigung
Dies ist ein schwerwiegendes Ereignis, das durch den Status Code Shutdown signalisiert wird. Die Notification-Nachricht kann optional ein Extended Status TLV enthalten, um einen Grund für die Beendigung anzugeben. Der sendende LSR beendet die Sitzung sofort nach dem Senden der Notification.
3.5.1.2.5. Ereignisse der Initialization-Nachricht
Die Verhandlung der Sitzungsinitialisierung (siehe den Abschnitt "Session Initialization") kann fehlschlagen, wenn die in der Initialization-Nachricht empfangenen Sitzungsparameter nicht akzeptabel sind. Dies ist ein schwerwiegender Fehler. Der konkrete Status Code hängt von dem als nicht akzeptabel erachteten Parameter ab und ist in den Abschnitten "Initialization Message" definiert.
3.5.1.2.6. Ereignisse, die sich aus anderen Nachrichten ergeben
Andere Nachrichten als die Initialization-Nachricht können zu Ereignissen führen, die LDP-Peers über Notification-Nachrichten signalisiert werden müssen. Diese Ereignisse und die in den Notification-Nachrichten zu ihrer Signalisierung verwendeten Status Codes werden in den Abschnitten beschrieben, die diese Nachrichten beschreiben.
3.5.1.2.7. Interne Fehler
Eine LDP-Implementierung kann in der Lage sein, problemspezifische Bedingungen ihrer eigenen Implementierung zu erkennen. Wenn eine solche Bedingung eine Implementierung daran hindert, korrekt mit einem Peer zu interagieren, sollte die Implementierung, wenn sie dazu in der Lage ist, den Status Code Internal Error verwenden, um dies dem Peer zu signalisieren. Dies ist ein schwerwiegender Fehler.
3.5.1.2.8. Sonstige Ereignisse
Dies sind Ereignisse, die in keine der obigen Kategorien fallen. In dieser Version des Protokolls sind keine sonstigen Ereignisse definiert.