3.5.1. Notification メッセージ
LSR は, 重要なイベントを LDP ピアに通知するために Notification メッセージを送信する. Notification メッセージは, 致命的なエラーを通知するか, または LDP メッセージの処理結果や LDP セッションの状態といった勧告情報を提供する.
Notification メッセージの符号化は次のとおり:
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 ビット値.
Status TLV 通知されるイベントを示す. Status TLV の符号化はセクション「Status TLV」で規定される.
Optional Parameters この可変長フィールドは 0 個以上のパラメータを含み, 各パラメータは TLV として符号化される. 次の任意パラメータは汎用的であり, 任意の Notification メッセージに現れてよい:
Optional Parameter Type Length Value
Extended Status 0x0301 4 See below
Returned PDU 0x0302 var See below
Returned Message 0x0303 var See below
Notification メッセージが通知する特定のイベントに固有のその他の任意パラメータが現れることもある. これらは別の箇所で記述される.
Extended Status この 4 オクテットの値は Extended Status Code であり, Notification の Status Code に含まれるステータス情報を補足する追加情報を符号化する.
Returned PDU LSR はこのパラメータを使用して, LDP PDU の一部を, それを送信した LSR に返す. この TLV の値は PDU ヘッダと, Notification メッセージが通知する状況に応じて適切な, ヘッダに続く PDU データである.
Returned Message LSR はこのパラメータを使用して, LDP メッセージの一部を, それを送信した LSR に返す. この TLV の値は message type および length フィールドと, Notification メッセージが通知する状況に応じて適切な, それらのフィールドに続くメッセージデータである.
3.5.1.1. Notification メッセージの手順
LSR が, 勧告情報またはエラー情報をもってピアに通知することを要する状況に遭遇した場合, それはその情報を符号化する Status TLV と, 任意でその状況に関するより多くの情報を提供する追加の TLV とを含む Notification メッセージをピアに送信する.
その状況が致命的なエラーである場合, Notification で運ばれる Status Code がそれを示す. この場合, LSR は Notification メッセージを送信した後, セッションの TCP 接続を閉じることによって LDP セッションを終了し, そのセッションを介して学習したすべての label-FEC バインディングを含む, そのセッションに関連するすべての状態を破棄することが望ましい (SHOULD).
LSR が, 致命的なエラーを示す Status Code を運ぶ Notification メッセージを受信した場合, それはセッションの TCP 接続を閉じることによって直ちに LDP セッションを終了し, そのセッションを介して学習したすべての label-FEC バインディングを含む, そのセッションに関連するすべての状態を破棄することが望ましい (SHOULD).
上記の記述は, セッション初期化手順における Shutdown メッセージの処理には適用されない. LSR がセッション初期化中に Shutdown メッセージを受信した場合, それは Shutdown メッセージを送信した後にトランスポート接続を閉じることが望ましい (SHOULD).
3.5.1.2. Notification メッセージによって通知されるイベント
記述上の目的から, Notification メッセージによって通知されるイベントを次のカテゴリに分類すると有用である.
3.5.1.2.1. 不正な形式の PDU またはメッセージ
LDP Discovery メカニズムの一部である, 不正な形式の LDP PDU またはメッセージは, 黙って破棄することによって処理される.
LDP セッション用の TCP 接続上で受信された LDP PDU は, 次の場合に不正な形式である:
-
PDU ヘッダ内の LDP Identifier が受信側にとって未知であるか, または既知であるが, 受信側がこの LDP セッションの LDP ピアに関連付けた LDP Identifier ではない. これは Bad LDP Identifier Status Code によって通知される致命的なエラーである.
-
LDP プロトコルバージョンが受信側でサポートされていないか, またはサポートされているがセッション確立時にそのセッションでネゴシエートされたバージョンではない. これは Bad Protocol Version Status Code によって通知される致命的なエラーである.
-
PDU Length フィールドが小さすぎる (< 14) か, または大きすぎる (> 最大 PDU 長). これは Bad PDU Length Status Code によって通知される致命的なエラーである. セッションの最大 PDU 長がどのように決定されるかは, セクション「Initialization Message」で記述される.
LDP メッセージは, 次の場合に不正な形式である:
-
Message Type が未知である.
Message Type が < 0x8000 (最上位ビット = 0) の場合, それは Unknown Message Type Status Code によって通知されるエラーである.
Message Type が >= 0x8000 (最上位ビット = 1) の場合, それは黙って破棄される.
-
Message Length が大きすぎる, すなわち, メッセージがそれを含む LDP PDU の終端を越えて延びていることを示す. これは Bad Message Length Status Code によって通知される致命的なエラーである.
-
Message Length が小さすぎる, すなわち, 取り得る最小の値構成要素より小さい. これは Bad Message Length Status Code によって通知される致命的なエラーである.
-
メッセージに 1 つ以上の Mandatory Parameters が欠けている. これは Missing Message Parameters Status Code によって通知される非致命的なエラーである.
3.5.1.2.2. 未知または不正な形式の TLV
LDP Discovery メカニズムの一部である LDP メッセージに含まれる不正な形式の TLV は, それを含むメッセージを黙って破棄することによって処理される.
LDP の TCP 接続上で受信された LDP メッセージに含まれる TLV は, 次の場合に不正な形式である:
-
TLV Length が大きすぎる, すなわち, TLV がそれを含むメッセージの終端を越えて延びていることを示す. これは Bad TLV Length Status Code によって通知される致命的なエラーである.
-
TLV type が未知である.
TLV type が < 0x8000 (最上位ビット = 0) の場合, それは Unknown TLV Status Code によって通知されるエラーである.
TLV type が >= 0x8000 (最上位ビット = 1) の場合, その TLV は黙って破棄される.
-
TLV Value が不正な形式である. これは, 受信側がその TLV を扱うが TLV Value を復号できない場合に発生する. これは, 送信側または受信側のいずれかの LSR におけるバグを示すものと解釈される. これは Malformed TLV Value Status Code によって通知される致命的なエラーである.
3.5.1.2.3. セッション KeepAlive タイマの満了
これは KeepAlive Timer Expired Status Code によって通知される致命的なエラーである.
3.5.1.2.4. 一方的なセッションのシャットダウン
これは Shutdown Status Code によって通知される致命的なイベントである. Notification メッセージは, Shutdown の理由を提供するために Extended Status TLV を任意で含むことができる. 送信側 LSR は, Notification を送信した直後にセッションを終了する.
3.5.1.2.5. Initialization メッセージのイベント
セッション初期化ネゴシエーション (セクション「Session Initialization」を参照) は, Initialization メッセージで受信されたセッションパラメータが受け入れられない場合に失敗することがある. これは致命的なエラーである. 具体的な Status Code は, 受け入れられないと判断されたパラメータに依存し, セクション「Initialization Message」で定義される.
3.5.1.2.6. その他のメッセージに起因するイベント
Initialization メッセージ以外のメッセージは, Notification メッセージを介して LDP ピアに通知されなければならないイベントを引き起こすことがある. これらのイベントと, それらを通知するために Notification メッセージで使用される Status Code は, これらのメッセージを記述するセクションで記述される.
3.5.1.2.7. 内部エラー
LDP 実装は, その実装に固有の問題状況を検出できる場合がある. そのような状況が, 実装がピアと正しく相互作用することを妨げる場合, 実装はそれが可能なときには, Internal Error Status Code を使用してピアに通知すべきである. これは致命的なエラーである.
3.5.1.2.8. その他のイベント
これらは上記のいずれのカテゴリにも当てはまらないイベントである. このバージョンのプロトコルでは, その他のイベントは定義されていない.