7. エラー処理
7. エラー処理 (Error Handling)
Diameter には 2 種類のエラーがあります: プロトコルエラー (protocol errors) とアプリケーションエラー (application errors) です。プロトコルエラーはベースプロトコルレベルで発生し, ホップごと (per-hop) の対応が必要になる場合があります (例: メッセージのルーティングエラー)。一方, アプリケーションエラーは一般に Diameter アプリケーションで規定された機能の問題に起因します (例: ユーザー認証, 欠落 AVP)。
プロトコルエラーを報告する Result-Code AVP の値は, 'E' ビットが設定された応答メッセージにのみ存在しなければなりません。プロトコルエラーを引き起こす要求メッセージを受信した場合, 'E' ビットが設定された応答メッセージが返され, Result-Code AVP は適切なプロトコルエラー値に設定されます。応答が要求の発信者に向かって戻される際, 各プロキシまたはリレーエージェントはメッセージに対してアクションを取ることができます。
1. Request +---------+ Link Broken
+-------------------------->|Diameter |----///----+
| +---------------------| | v
+------+--+ | 2. answer + 'E' set | Relay 2 | +--------+
|Diameter |<-+ (Unable to Forward) +---------+ |Diameter|
| | | Home |
| Relay 1 |--+ +---------+ | Server |
+---------+ | 3. Request |Diameter | +--------+
+-------------------->| | ^
| Relay 3 |-----------+
+---------+
図 7: プロトコルエラーによる応答メッセージの例
図 7 は, Diameter リレーが上流にメッセージを転送する例です。Relay 2 がメッセージを受信し, ホームサーバーに要求を転送できないと判断した場合, 'E' ビットが設定され, Result-Code AVP が DIAMETER_UNABLE_TO_DELIVER に設定された応答メッセージが返されます。このエラーはプロトコルエラーカテゴリに属するため, Relay 1 は特別な処理を行い, 代替の Relay 3 経由でメッセージをルーティングしようとします。
+---------+ 1. Request +---------+ 2. Request +---------+
| Access |------------>|Diameter |------------>|Diameter |
| | | | | Home |
| Device |<------------| Relay |<------------| Server |
+---------+ 4. Answer +---------+ 3. Answer +---------+
(Missing AVP) (Missing AVP)
図 8: アプリケーションエラー応答メッセージの例
図 8 はアプリケーションエラーを引き起こした Diameter メッセージの例です。アプリケーションエラーが発生すると, エラーを報告する Diameter エンティティはコマンドフラグ (Command Flags) の 'R' ビットをクリアし, 適切な値を持つ Result-Code AVP を追加します。アプリケーションエラーではプロキシやリレーエージェントの関与は不要であるため, メッセージは要求の発信者に戻されます。
応答メッセージ自体にエラーがある場合, 関連セッションは STR または ASR メッセージを送信して終了すべきです。STR の Termination-Cause AVP には, エラーの原因を示す適切な値を入れてもよいです。状態を保持していない場合, または対応する Diameter エンティティとのエラー回復のために, アプリケーションは STR や ASR の代わりにアプリケーション固有の要求を送ってエラーを通知してもよいです。
一部の Result-Code AVP アプリケーションエラーでは, 応答に追加の AVP が必要です。この場合, Result-Code AVP をエラーを示す値に設定した Diameter ノードは, それらの AVP を追加しなければなりません。例は次のとおりです。
-
未認識の AVP を含み, その 'M' ビット (Mandatory bit) が設定された要求を受信した場合, Result-Code AVP を DIAMETER_AVP_UNSUPPORTED に設定し, 問題の AVP を含む Failed-AVP AVP を伴う応答を送信します。
-
値が認識できない AVP を含む要求を受信した場合, Result-Code AVP を DIAMETER_INVALID_AVP_VALUE に設定し, エラーの原因となった AVP を含む Failed-AVP AVP を伴う応答を返します。
-
コマンド CCF で必須と定義された AVP が欠落しているコマンドを受信した場合 (例: {AVP} と示された AVP)。受信者は Result-Code を DIAMETER_MISSING_AVP に設定した応答を出し, 欠落 AVP に期待される AVP Code およびその他のフィールドを設定した AVP を作成し, それを Failed-AVP AVP に追加します。
Result-Code AVP は, Diameter ノードが処理中に遭遇したエラーを記述します。複数のエラーがある場合, Diameter ノードは遭遇した最初のエラーのみを報告しなければなりません (検出順序は実装依存の場合があります)。この AVP で記述できる具体的なエラーは次節で説明します。