7. Gestion des erreurs
7. Gestion des erreurs (Error Handling)
Il existe deux types d'erreurs dans Diameter: les erreurs de protocole (protocol errors) et les erreurs d'application (application errors). Une erreur de protocole survient au niveau du protocole de base et PEUT nécessiter une attention par saut (per-hop) (par ex., une erreur de routage de message). Les erreurs d'application, en revanche, résultent généralement d'un problème avec une fonction définie dans une application Diameter (par ex., authentification utilisateur, AVP manquant).
Les valeurs de l'AVP Result-Code utilisées pour signaler des erreurs de protocole NE DOIVENT être présentes que dans les messages de réponse dont le bit 'E' est positionné. Lorsqu'un message de requête provoque une erreur de protocole, un message de réponse est renvoyé avec le bit 'E' positionné et l'AVP Result-Code défini à la valeur d'erreur de protocole appropriée. Lorsque la réponse est renvoyée vers l'initiateur de la requête, chaque agent mandataire (proxy) ou relais PEUT agir sur le message.
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 |-----------+
+---------+
Figure 7: Exemple de message de réponse dû à une erreur de protocole
La figure 7 illustre un message transmis en amont par un relais Diameter. Lorsque le Relay 2 reçoit le message et constate qu'il ne peut pas transmettre la requête au serveur d'origine, un message de réponse est renvoyé avec le bit 'E' positionné et l'AVP Result-Code défini à DIAMETER_UNABLE_TO_DELIVER. Comme cette erreur relève des erreurs de protocole, le Relay 1 prend des mesures spécifiques et tente, compte tenu de l'erreur, d'acheminer le message via le Relay 3 de secours.
+---------+ 1. Request +---------+ 2. Request +---------+
| Access |------------>|Diameter |------------>|Diameter |
| | | | | Home |
| Device |<------------| Relay |<------------| Server |
+---------+ 4. Answer +---------+ 3. Answer +---------+
(Missing AVP) (Missing AVP)
Figure 8: Exemple de message de réponse d'erreur d'application
La figure 8 illustre un message Diameter ayant provoqué une erreur d'application. En cas d'erreur d'application, l'entité Diameter qui signale l'erreur efface le bit 'R' des drapeaux de commande (Command Flags) et ajoute l'AVP Result-Code avec la valeur appropriée. Les erreurs d'application n'impliquent aucun agent mandataire ou relais; le message est donc renvoyé à l'initiateur de la requête.
Lorsque le message de réponse lui-même contient des erreurs, toute session associée DEVRAIT être terminée en envoyant un message STR ou ASR. L'AVP Termination-Cause dans le STR PEUT être renseignée avec la valeur appropriée pour indiquer la cause de l'erreur. Une application PEUT également envoyer une requête spécifique à l'application au lieu d'un STR ou ASR pour signaler l'erreur lorsqu'aucun état n'est maintenu ou pour permettre une forme de récupération d'erreur avec l'entité Diameter correspondante.
Certaines erreurs d'application de l'AVP Result-Code exigent la présence d'AVP supplémentaires dans la réponse. Dans ces cas, le nœud Diameter qui définit l'AVP Result-Code pour indiquer l'erreur DOIT ajouter les AVP. Exemples:
-
Une requête avec un AVP non reconnu dont le bit 'M' (Mandatory bit) est positionné provoque l'envoi d'une réponse avec l'AVP Result-Code défini à DIAMETER_AVP_UNSUPPORTED et l'AVP Failed-AVP contenant l'AVP fautif.
-
Une requête avec un AVP dont la valeur est non reconnue provoque une réponse avec l'AVP Result-Code défini à DIAMETER_INVALID_AVP_VALUE, l'AVP Failed-AVP contenant l'AVP à l'origine de l'erreur.
-
Une commande reçue à laquelle manquent des AVP définis comme obligatoires dans le CCF de la commande; par ex. des AVP indiqués comme {AVP}. Le récepteur émet une réponse avec le Result-Code défini à DIAMETER_MISSING_AVP et crée un AVP dont le code et les autres champs correspondent à l'AVP manquant attendu. L'AVP ainsi créé est ajouté à l'AVP Failed-AVP.
L'AVP Result-Code décrit l'erreur rencontrée par le nœud Diameter lors du traitement. S'il y a plusieurs erreurs, le nœud Diameter NE DOIT signaler que la première erreur rencontrée (éventuellement dans un ordre dépendant de l'implémentation). Les erreurs détaillées que peut décrire cet AVP sont présentées dans la section suivante.