7. Gestione degli errori
7. Gestione degli errori (Error Handling)
In Diameter esistono due tipi di errori: errori di protocollo (protocol errors) ed errori applicativi (application errors). Un errore di protocollo si verifica a livello del protocollo base e PUÒ richiedere attenzione per hop (per-hop) (ad es., un errore di instradamento del messaggio). Gli errori applicativi, invece, dipendono in genere da un problema con una funzione specificata in un'applicazione Diameter (ad es., autenticazione utente, AVP mancante).
I valori dell'AVP Result-Code usati per segnalare errori di protocollo DEVONO comparire solo in messaggi di risposta con bit 'E' impostato. Quando un messaggio di richiesta provoca un errore di protocollo, viene restituito un messaggio di risposta con bit 'E' impostato e AVP Result-Code al valore di errore appropriato. Mentre la risposta torna verso l'origine della richiesta, ogni agente proxy o relay PUÒ intervenire sul messaggio.
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 |-----------+
+---------+
Figura 7: Esempio di messaggio di risposta per errore di protocollo
La figura 7 mostra un messaggio inoltrato a monte da un relay Diameter. Quando Relay 2 riceve il messaggio e rileva di non poter inoltrare la richiesta al server home, viene restituito un messaggio di risposta con bit 'E' e AVP Result-Code DIAMETER_UNABLE_TO_DELIVER. Poiché l'errore rientra negli errori di protocollo, Relay 1 intraprende azioni specifiche e, in base all'errore, tenta di instradare tramite Relay 3 alternativo.
+---------+ 1. Request +---------+ 2. Request +---------+
| Access |------------>|Diameter |------------>|Diameter |
| | | | | Home |
| Device |<------------| Relay |<------------| Server |
+---------+ 4. Answer +---------+ 3. Answer +---------+
(Missing AVP) (Missing AVP)
Figura 8: Esempio di messaggio di risposta per errore applicativo
La figura 8 mostra un messaggio Diameter che ha causato un errore applicativo. In tal caso, l'entità Diameter che segnala l'errore azzera il bit 'R' nei flag di comando (Command Flags) e aggiunge l'AVP Result-Code con il valore corretto. Gli errori applicativi non richiedono coinvolgimento di proxy o relay; il messaggio torna quindi all'origine della richiesta.
Se il messaggio di risposta stesso contiene errori, qualsiasi sessione correlata DOVREBBE essere terminata con STR o ASR. L'AVP Termination-Cause nella STR PUÒ essere impostato al valore appropriato. Un'applicazione PUÒ anche inviare una richiesta specifica al posto di STR/ASR se non si mantiene stato o per consentire recupero errori con l'entità Diameter corrispondente.
Alcuni errori applicativi dell'AVP Result-Code richiedono AVP aggiuntivi nella risposta. In questi casi, il nodo Diameter che imposta l'AVP Result-Code DEVE aggiungere gli AVP. Esempi:
-
Richiesta con AVP non riconosciuto e bit 'M' (Mandatory bit) impostato: risposta con Result-Code DIAMETER_AVP_UNSUPPORTED e Failed-AVP contenente l'AVP in errore.
-
Richiesta con AVP dal valore non riconosciuto: risposta con DIAMETER_INVALID_AVP_VALUE e Failed-AVP con l'AVP responsabile.
-
Comando privo di AVP richiesti nel CCF (es. indicati come {AVP}): risposta con DIAMETER_MISSING_AVP e creazione di un AVP con codice e campi attesi per l'AVP mancante, aggiunto a Failed-AVP.
L'AVP Result-Code descrive l'errore riscontrato dal nodo. In caso di più errori, il nodo DEVE segnalare solo il primo (ordine di rilevamento possibilmente dipendente dall'implementazione). Gli errori descrivibili sono dettagliati nella sezione seguente.