Chargement en Ligne par Diamètre (Interface Gy/Ro)
Interface du Système de Chargement en Ligne (OCS)
Table des Matières
- Aperçu
- Architecture de Chargement 3GPP
- Bases de l'Interface Gy/Ro
- Messages de Contrôle de Crédit
- Flux de Chargement en Ligne
- Contrôle de Chargement de Support
- Contrôle de Crédit pour Plusieurs Services
- Configuration
- Flux de Messages
- Gestion des Erreurs
- Intégration avec Gx
- Dépannage
Aperçu
L'interface Gy (également appelée interface Ro dans les contextes IMS) connecte le PGW-C au Système de Chargement en Ligne (OCS) pour le contrôle de crédit en temps réel. Cela permet :
- Chargement Prépayé - Autorisation de crédit et déduction en temps réel
- Contrôle de Crédit en Temps Réel - Accorder un quota avant la livraison du service
- Chargement Basé sur le Service - Chargement différent pour la voix, les données, les SMS, etc.
- Mises à Jour de Compte Immédiates - Mises à jour du solde de crédit en temps réel
- Refus de Service - Bloquer le service lorsque le crédit est épuisé
Chargement en Ligne vs. Chargement Hors Ligne
| Aspect | Chargement en Ligne (Gy/Ro) | Chargement Hors Ligne (Gz/Rf) |
|---|---|---|
| Temps | En temps réel, avant le service | Après la livraison du service |
| Cas d'Utilisation | Abonnés prépayés | Abonnés postpayés |
| Vérification de Crédit | Oui, avant d'accorder le service | Non, facture générée plus tard |
| Système | OCS (Système de Chargement en Ligne) | CGF/CDF (Fonction de Données de Chargement) |
| Risque | Pas de perte de revenus | Risque de factures impayées |
| Complexité | Élevée (exigences en temps réel) | Inférieure (traitement par lots) |
| Impact Utilisateur | Service refusé si pas de crédit | Service toujours disponible |
Voir aussi : Format CDR de Données pour les enregistrements de chargement hors ligne (facturation postpayée)
Voir aussi : Gestion des Sessions pour le cycle de vie complet de la session PDN, y compris l'intégration de chargement
Gy dans l'Architecture Réseau
Fonctions Clés
| Fonction | Description |
|---|---|
| Autorisation de Crédit | Demander un quota à l'OCS avant d'autoriser le trafic |
| Gestion de Quota | Suivre les unités accordées (octets, temps, événements) |
| Détection d'Épuisement de Crédit | Surveiller le quota restant |
| Ré-autorisation | Demander un quota supplémentaire lorsque le seuil est atteint |
| Résiliation de Service | Arrêter le service lorsque le crédit est épuisé |
| Règlement Final | Rapporter l'utilisation réelle à la fin de la session |
Architecture de Chargement 3GPP
Points de Référence de Chargement
Fonction de Déclenchement de Chargement (CTF)
Le PGW-C agit comme un CTF (Fonction de Déclenchement de Chargement), responsable de :
- Détecter les événements facturables - Début de session, utilisation des données, fin de session
- Demander l'autorisation de crédit - Avant d'autoriser le service
- Suivre la consommation de quota - Surveiller les unités accordées
- Générer des événements de chargement - Déclencher des demandes de crédit
- Appliquer le contrôle de crédit - Bloquer le trafic lorsque le quota est épuisé
Fonction de Chargement en Ligne (OCF)
L'OCS met en œuvre la OCF (Fonction de Chargement en Ligne) :
- Gestion du solde de compte - Suivre le crédit de l'abonné
- Tarification - Déterminer le prix par unité (par Mo, par seconde, etc.)
- Réservation de crédit - Réserver du crédit pour le quota accordé
- Déduction de crédit - Déduire lors du rapport d'utilisation
- Décisions de politique - Accorder ou refuser en fonction du solde
Bases de l'Interface Gy/Ro
Référence 3GPP
- Spécification : 3GPP TS 32.299 (Architecture de chargement)
- Protocole : 3GPP TS 32.251 (Chargement du domaine PS)
- ID d'Application Diamètre : 4 (Gy/Ro - Application de Contrôle de Crédit)
- Protocole de Base : RFC 4006 (Application de Contrôle de Crédit Diamètre)
Concept de Session
Chaque connexion PDN UE nécessitant un chargement en ligne a une session Gy/Ro identifiée par un Session-ID. Cette session :
- Créée lorsque le support nécessite un chargement en ligne (CCR-Initial)
- Mise à jour lorsque le quota est consommé (CCR-Update)
- Terminée lorsque la session se termine (CCR-Termination)
Format de l'ID de Session
Session-ID: <Origin-Host>;<high32>;<low32>[;<optional>]
Exemple: omni-pgw_c.epc.mnc999.mcc999.3gppnetwork.org;9876543210;12345;gy
Composants :
- Origin-Host : Identité Diamètre du PGW-C
- high32 : 32 bits supérieurs de l'identifiant unique
- low32 : 32 bits inférieurs de l'identifiant unique
- optional : Identifiant supplémentaire (par exemple, "gy" pour distinguer de Gx)
Messages de Contrôle de Crédit
Types de Messages
CCR-Initial (Demande de Contrôle de Crédit - Initial)
Quand : L'UE crée une connexion PDN et le support nécessite un chargement en ligne
But :
- Demander l'autorisation de crédit initiale à l'OCS
- Réserver un quota pour la livraison du service
- Établir une session Gy/Ro
AVPs Clés Envoyés par le PGW-C :
| Nom de l'AVP | Code de l'AVP | Type | Description |
|---|---|---|---|
| Session-Id | 263 | UTF8String | Identifiant unique de session Gy |
| Auth-Application-Id | 258 | Unsigned32 | 4 (Contrôle de Crédit) |
| Origin-Host | 264 | DiamIdent | Identité Diamètre du PGW-C |
| Origin-Realm | 296 | DiamIdent | Domaine Diamètre du PGW-C |
| Destination-Realm | 283 | DiamIdent | Domaine de l'OCS |
| CC-Request-Type | 416 | Enumerated | 1 = INITIAL_REQUEST |
| CC-Request-Number | 415 | Unsigned32 | Numéro de séquence (commence à 0) |
| Subscription-Id | 443 | Grouped | Identifiant de l'UE (IMSI/MSISDN) |
| Service-Context-Id | 461 | UTF8String | Identifiant de contexte de chargement |
| Multiple-Services-Credit-Control | 456 | Grouped | Demandes de crédit spécifiques au service |
| Requested-Service-Unit | 437 | Grouped | Quota demandé (octets, temps, etc.) |
| Used-Service-Unit | 446 | Grouped | Quota utilisé (0 pour initial) |
| Service-Identifier | 439 | Unsigned32 | Identifiant de type de service |
| Rating-Group | 432 | Unsigned32 | Identifiant de catégorie de chargement |
Exemple de Structure CCR-I :
CCR (Code de Commande : 272, Demande)
├── Session-Id: "pgw_c.example.com;123;456;gy"
├── Auth-Application-Id: 4
├── Origin-Host: "omni-pgw_c.epc.mnc999.mcc999.3gppnetwork.org"
├── Origin-Realm: "epc.mnc999.mcc999.3gppnetwork.org"
├── Destination-Realm: "epc.mnc999.mcc999.3gppnetwork.org"
├── CC-Request-Type: INITIAL_REQUEST (1)
├── CC-Request-Number: 0
├── Subscription-Id (Grouped)
│ ├── Subscription-Id-Type: END_USER_IMSI (1)
│ └── Subscription-Id-Data: "310260123456789"
├── Subscription-Id (Grouped)
│ ├── Subscription-Id-Type: END_USER_E164 (0)
│ └── Subscription-Id-Data: "15551234567"
├── Service-Context-Id: "32251@3gpp.org"
├── Multiple-Services-Credit-Control (Grouped)
│ ├── Service-Identifier: 1
│ ├── Rating-Group: 100
│ └── Requested-Service-Unit (Grouped)
│ └── CC-Total-Octets: 10000000 (demande 10 Mo)
└── Used-Service-Unit (Grouped)
└── CC-Total-Octets: 0 (aucune utilisation encore)
CCA-Initial (Réponse de Contrôle de Crédit - Initial)
Envoyé par : OCS en réponse à CCR-I
But :
- Accorder ou refuser l'autorisation de crédit
- Fournir un quota pour la livraison du service
- Spécifier les paramètres de tarification et de chargement
AVPs Clés Reçus par le PGW-C :
| Nom de l'AVP | Code de l'AVP | Description |
|---|---|---|
| Result-Code | 268 | Succès (2001) ou code d'erreur |
| Multiple-Services-Credit-Control | 456 | Accords de crédit spécifiques au service |
| Granted-Service-Unit | 431 | Quota accordé (octets, temps, etc.) |
| Validity-Time | 448 | Période de validité du quota (secondes) |
| Result-Code | 268 | Code de résultat par service |
| Final-Unit-Indication | 430 | Action lorsque le quota est épuisé |
| Volume-Quota-Threshold | - | Seuil pour ré-autorisation |
Exemple de Réponse de Succès :
CCA (Code de Commande : 272, Réponse)
├── Session-Id: "pgw_c.example.com;123;456;gy"
├── Result-Code: DIAMETER_SUCCESS (2001)
├── Origin-Host: "ocs.example.com"
├── Origin-Realm: "example.com"
├── Auth-Application-Id: 4
├── CC-Request-Type: INITIAL_REQUEST (1)
├── CC-Request-Number: 0
└── Multiple-Services-Credit-Control (Grouped)
├── Result-Code: DIAMETER_SUCCESS (2001)
├── Service-Identifier: 1
├── Rating-Group: 100
├── Granted-Service-Unit (Grouped)
│ └── CC-Total-Octets: 10000000 (accordé 10 Mo)
├── Validity-Time: 3600 (quota valide pour 1 heure)
└── Volume-Quota-Threshold: 8000000 (ré-auth à 8 Mo utilisés, 80%)
CCR-Update (Demande de Contrôle de Crédit - Mise à Jour)
Quand :
- Seuil de quota accordé atteint (par exemple, 80 % consommé)
- Temps de validité expiré
- Changement de service nécessite ré-autorisation
- Changement de temps de tarif
But :
- Demander un quota supplémentaire
- Rapporter l'utilisation du quota précédemment accordé
- Mettre à jour les paramètres de chargement
Différences Clés par Rapport à CCR-I :
CC-Request-Type: UPDATE_REQUEST (2)CC-Request-NumberincrémentéUsed-Service-Unitcontient l'utilisation réelleRequested-Service-Unitpour plus de quota
Exemple de Structure CCR-U :
CCR (Code de Commande : 272, Demande)
├── Session-Id: "pgw_c.example.com;123;456;gy"
├── Auth-Application-Id: 4
├── Origin-Host: "omni-pgw_c.epc.mnc999.mcc999.3gppnetwork.org"
├── Origin-Realm: "epc.mnc999.mcc999.3gppnetwork.org"
├── Destination-Realm: "epc.mnc999.mcc999.3gppnetwork.org"
├── CC-Request-Type: UPDATE_REQUEST (2)
├── CC-Request-Number: 1
��── Multiple-Services-Credit-Control (Grouped)
├── Service-Identifier: 1
├── Rating-Group: 100
├── Used-Service-Unit (Grouped)
│ └── CC-Total-Octets: 8000000 (8 Mo utilisés jusqu'à présent)
└── Requested-Service-Unit (Grouped)
└── CC-Total-Octets: 10000000 (demande encore 10 Mo)
CCA-Update (Réponse de Contrôle de Crédit - Mise à Jour)
Envoyé par : OCS en réponse à CCR-U
But :
- Accorder un quota supplémentaire (si crédit disponible)
- Accuser réception de l'utilisation
- Mettre à jour les paramètres de chargement
Résultats Possibles :
1. Plus de Quota Accordé :
CCA (Mise à Jour)
└── Multiple-Services-Credit-Control
├── Result-Code: DIAMETER_SUCCESS (2001)
├── Granted-Service-Unit
│ └── CC-Total-Octets: 10000000 (encore 10 Mo)
└── Validity-Time: 3600
2. Quota Final (Crédit Épuisé) :
CCA (Mise à Jour)
└── Multiple-Services-Credit-Control
├── Result-Code: DIAMETER_SUCCESS (2001)
├── Granted-Service-Unit
│ └── CC-Total-Octets: 1000000 (il ne reste que 1 Mo)
└── Final-Unit-Indication
└── Final-Unit-Action: TERMINATE (0)
3. Pas de Crédit Disponible :
CCA (Mise à Jour)
├── Result-Code: DIAMETER_CREDIT_LIMIT_REACHED (4012)
└── Multiple-Services-Credit-Control
├── Result-Code: DIAMETER_CREDIT_LIMIT_REACHED (4012)
└── Final-Unit-Indication
└── Final-Unit-Action: TERMINATE (0)
CCR-Termination (Demande de Contrôle de Crédit - Résiliation)
Quand :
- L'UE se détache
- Connexion PDN supprimée
- Session terminée pour une raison quelconque
But :
- Rapport final d'utilisation
- Fermer la session Gy/Ro
- Règlement final
Différences Clés :
CC-Request-Type: TERMINATION_REQUEST (3)Used-Service-Unitcontient l'utilisation finale- Pas de
Requested-Service-Unit(plus de quota nécessaire) - Inclut
Termination-Cause
Exemple de Structure CCR-T :
CCR (Code de Commande : 272, Demande)
├── Session-Id: "pgw_c.example.com;123;456;gy"
├── Auth-Application-Id: 4
├── Origin-Host: "omni-pgw_c.epc.mnc999.mcc999.3gppnetwork.org"
├── Origin-Realm: "epc.mnc999.mcc999.3gppnetwork.org"
├── Destination-Realm: "epc.mnc999.mcc999.3gppnetwork.org"
├── CC-Request-Type: TERMINATION_REQUEST (3)
├── CC-Request-Number: 5
├── Termination-Cause: DIAMETER_LOGOUT (1)
└─��� Multiple-Services-Credit-Control (Grouped)
├── Service-Identifier: 1
├── Rating-Group: 100
└── Used-Service-Unit (Grouped)
└── CC-Total-Octets: 18500000 (18,5 Mo d'utilisation totale)
CCA-Termination (Réponse de Contrôle de Crédit - Résiliation)
Envoyé par : OCS en réponse à CCR-T
But :
- Accuser réception de la résiliation de session
- Compléter la comptabilité
- Libérer le crédit réservé
Exemple CCA-T :
CCA (Code de Commande : 272, Réponse)
├── Session-Id: "pgw_c.example.com;123;456;gy"
├── Result-Code: DIAMETER_SUCCESS (2001)
├── Origin-Host: "ocs.example.com"
├── Origin-Realm: "example.com"
├── Auth-Application-Id: 4
├── CC-Request-Type: TERMINATION_REQUEST (3)
└── CC-Request-Number: 5
Flux de Chargement en Ligne
Types d'Unités de Service
L'OCS peut accorder un quota dans différentes unités :
| Type d'Unité | AVP | Description | Cas d'Utilisation |
|---|---|---|---|
| Temps | CC-Time | Secondes | Appels vocaux, durée de session |
| Volume | CC-Total-Octets | Octets (total montant + descendant) | Services de données |
| Volume (séparé) | CC-Input-Octets, CC-Output-Octets | Octets (séparés) | Chargement asymétrique |
| Spécifique au Service | CC-Service-Specific-Units | Unités personnalisées | SMS, MMS, appels API |
| Événements | - | Événements comptés | Services payants |
Gestion du Seuil de Quota
Problème : Comment le PGW-C sait-il quand demander plus de quota ?
Solution : L'OCS fournit un Volume-Quota-Threshold ou Time-Quota-Threshold. Le PGW-C surveille l'utilisation via les Rapports de Session PFCP du PGW-U (voir Interface PFCP).
Exemple de Flux :
1. L'OCS accorde un quota de 10 Mo avec un seuil de 80 % (8 Mo)
2. Le PGW-C surveille l'utilisation via les rapports d'utilisation du PGW-U (Rapports de Session PFCP)
3. Lorsque l'utilisation atteint 8 Mo :
→ Le PGW-C envoie CCR-Update
→ Continue à autoriser le trafic (n'attend pas de réponse)
4. L'OCS répond avec plus de quota
5. Si le quota est épuisé avant l'envoi de CCR-Update :
→ Le PGW-C doit bloquer le trafic
Calcul du Seuil :
Granted-Service-Unit: 10000000 octets (10 Mo)
Volume-Quota-Threshold: 8000000 octets (8 Mo)
Lorsque 8 Mo consommés → Déclencher CCR-Update
Tampon restant : 2 Mo (permet le temps pour la réponse de l'OCS)
Surveillance PGW-C :
Le PGW-C surveille l'utilisation via les Rapports de Session PFCP du PGW-U :
Indication de Dernière Unité
Que se passe-t-il lorsque le crédit est épuisé ?
L'OCS inclut l'AVP Final-Unit-Indication dans CCA pour spécifier l'action :
| Final-Unit-Action | Valeur | Comportement PGW-C |
|---|---|---|
| TERMINATE | 0 | Bloquer tout le trafic, initier la résiliation de session |
| REDIRECT | 1 | Rediriger le trafic vers le portail (par exemple, page de recharge) |
| RESTRICT_ACCESS | 2 | Autoriser l'accès uniquement à des services spécifiques (par exemple, serveur de recharge) |
Exemple : Dernière Unité avec Redirection
CCA (Mise à Jour)
└── Multiple-Services-Credit-Control
├── Result-Code: DIAMETER_SUCCESS (2001)
├── Granted-Service-Unit
│ └── CC-Total-Octets: 1000000 (dernière 1 Mo)
└── Final-Unit-Indication
├── Final-Unit-Action: REDIRECT (1)
└── Redirect-Server (Grouped)
├── Redirect-Address-Type: URL (2)
└── Redirect-Server-Address: "http://topup.example.com"
Actions PGW-C :
- TERMINATE : Envoyer CCR-T, supprimer le support
- REDIRECT : Installer la règle PFCP pour rediriger HTTP vers l'URL de recharge
- RESTRICT_ACCESS : Installer des règles PFCP permettant uniquement les IP autorisées
Contrôle de Chargement de Support
Qu'est-ce qui Contrôle si un Support est Chargé ?
Spécification 3GPP : TS 23.203, TS 29.212, TS 32.251
Le chargement de support est contrôlé par les Règles PCC fournies par le PCRF via l'interface Gx. Voir Interface Diamètre Gx pour la documentation complète des règles PCC.
Flux de Décision de Chargement :
Règle PCC avec Informations de Chargement
Réponse PCRF (CCA-I sur Gx) :
CCA (Interface Gx)
└── Charging-Rule-Definition (Grouped)
├── Charging-Rule-Name: "prepaid_data_rule"
├── Rating-Group: 100
├── Online: 1 (activer le chargement en ligne)
├── Offline: 0 (désactiver le chargement hors ligne)
├── Metering-Method: VOLUME (1)
├── Precedence: 100
├── Flow-Information: [...]
└── QoS-Information: [...]
AVPs de Chargement Clés dans les Règles PCC :
| Nom de l'AVP | Code de l'AVP | Valeurs | Description |
|---|---|---|---|
| Rating-Group | 432 | Unsigned32 | Catégorie de chargement (correspond à la tarification dans l'OCS) |
| Online | 1009 | 0=Désactiver, 1=Activer | Activer le chargement en ligne (Gy) |
| Offline | 1008 | 0=Désactiver, 1=Activer | Activer le chargement hors ligne (Gz) |
| Metering-Method | 1007 | 0=Durée, 1=Volume, 2=Les Deux | Ce qu'il faut mesurer |
| Reporting-Level | 1011 | 0=Service, 1=Groupe de Tarification | Granularité des rapports d'utilisation |
Matrice de Décision de Chargement de Support
| En Ligne | Hors Ligne | Rating-Group | Comportement |
|---|---|---|---|
| 1 | 0 | Présent | Chargement en ligne uniquement (prépayé) |
| 0 | 1 | Présent | Chargement hors ligne uniquement (postpayé) |
| 1 | 1 | Présent | Chargement en ligne et hors ligne (convergent) |
| 0 | 0 | - | Pas de chargement (service gratuit) |
Groupes de Tarification Multiples
Une seule connexion PDN peut avoir plusieurs supports avec différents groupes de tarification :
Exemple de Scénario :
Support par Défaut (Internet)
├── Rating-Group: 100 (Données Standards)
└── Online: 1
Support Dédié 1 (Streaming Vidéo)
├── Rating-Group: 200 (Service Vidéo)
└── Online: 1
Support Dédié 2 (Voix IMS)
├── Rating-Group: 300 (Voix)
└── Online: 1
Comportement PGW-C Gy :
- Un seul CCR-I avec plusieurs sections MSCC (Multiple-Services-Credit-Control) :
CCR-Initial
├── Session-Id: "..."
└── Multiple-Services-Credit-Control
├── [Rating-Group: 100] → Données Standards
├── [Rating-Group: 200] → Service Vidéo
└── [Rating-Group: 300] → Voix
Réponse OCS :
CCA-Initial
└── Multiple-Services-Credit-Control
├── [Rating-Group: 100] → Accordé : 10 Mo
├── [Rating-Group: 200] → Accordé : 5 Mo (vidéo plus cher)
└── [Rating-Group: 300] → Accordé : 60 secondes
Application de Chargement par Service
PGW-C suit le quota par Rating-Group :
# Pseudocode
state.charging_quotas = %{
100 => %{granted: 10_000_000, used: 0, threshold: 8_000_000},
200 => %{granted: 5_000_000, used: 0, threshold: 4_000_000},
300 => %{granted: 60_000, used: 0, threshold: 48_000} # millisecondes
}
Surveillance de l'Utilisation par Support :
Contrôle de Crédit pour Plusieurs Services
AVP MSCC (Multiple-Services-Credit-Control)
But : Regrouper les informations de chargement pour un service/groupe de tarification spécifique
Structure :
Multiple-Services-Credit-Control (Grouped, AVP 456)
├── Service-Identifier (Unsigned32, AVP 439)
├── Rating-Group (Unsigned32, AVP 432)
├── Requested-Service-Unit (Grouped, AVP 437)
│ ├── CC-Time (Unsigned32, AVP 420)
│ ├── CC-Total-Octets (Unsigned64, AVP 421)
│ ├── CC-Input-Octets (Unsigned64, AVP 412)
│ └── CC-Output-Octets (Unsigned64, AVP 414)
├── Used-Service-Unit (Grouped, AVP 446)
│ └── [Même structure que Requested-Service-Unit]
├── Granted-Service-Unit (Grouped, AVP 431)
│ └── [Même structure que Requested-Service-Unit]
├── Validity-Time (Unsigned32, AVP 448)
├── Result-Code (Unsigned32, AVP 268)
└── Final-Unit-Indication (Grouped, AVP 430)
└── Final-Unit-Action (Enumerated, AVP 449)
Service-Identifier vs. Rating-Group
| Attribut | Service-Identifier | Rating-Group |
|---|---|---|
| But | Identifie le type de service | Identifie la catégorie de chargement |
| Exemple | 1=Données, 2=Voix, 3=SMS | 100=Régulier, 200=Premium |
| Granularité | Classification large | Tarification spécifique |
| Requis | Optionnel | Requis pour le chargement |
| Mapping | Peut mapper à plusieurs RGs | Tarification unique dans l'OCS |
Exemple :
Service-Identifier: 1 (Service de Données)
├── Rating-Group: 100 (Données Standards - 0,01 $/Mo)
└── Rating-Group: 200 (Données Premium - 0,05 $/Mo)
Service-Identifier: 2 (Voix)
└── Rating-Group: 300 (Appels Vocaux - 0,10 $/min)
Configuration
Configuration de Base de Gy
Modifier config/runtime.exs :
config :pgw_c,
gy: %{
# Activer ou désactiver le chargement en ligne globalement
enabled: true,
# Délai de connexion OCS (millisecondes)
timeout_ms: 5000,
# Demande de quota par défaut (octets) si non spécifié par le PCRF
default_requested_quota: 10_000_000, # 10 Mo
# Pourcentage de seuil pour ré-autorisation
# (0.8 = déclencher CCR-Update à 80 % de quota consommé)
quota_threshold_percentage: 0.8,
# Action lorsque le délai d'attente de l'OCS se produit
# Options : :block, :allow
timeout_action: :block,
# Action lorsque l'OCS ne retourne pas de crédit
# Options : :terminate, :redirect
no_credit_action: :terminate,
# URL de redirection pour la recharge (utilisée si no_credit_action: :redirect)
topup_redirect_url: "http://topup.example.com"
},
diameter: %{
listen_ip: "0.0.0.0",
host: "omni-pgw_c.epc.mnc999.mcc999.3gppnetwork.org",
realm: "epc.mnc999.mcc999.3gppnetwork.org",
# Configuration du pair OCS
peer_list: [
# PCRF pour le contrôle de politique (Gx)
%{
host: "pcrf.epc.mnc999.mcc999.3gppnetwork.org",
realm: "epc.mnc999.mcc999.3gppnetwork.org",
ip: "10.0.0.30",
initiate_connection: true
},
# OCS pour le chargement en ligne (Gy)
%{
host: "ocs.epc.mnc999.mcc999.3gppnetwork.org",
realm: "epc.mnc999.mcc999.3gppnetwork.org",
ip: "10.0.0.40",
initiate_connection: true
}
]
}
Explication des Paramètres de Configuration
enabled
true: Chargement en ligne actif, messages CCR envoyés à l'OCSfalse: Chargement en ligne désactivé, pas de messages Gy
timeout_ms
- Temps d'attente pour la réponse CCA de l'OCS
- Recommandé : 3000-5000 ms
default_requested_quota
- Quota par défaut à demander si le PCRF ne spécifie pas
- Valeurs typiques : 1-100 Mo
quota_threshold_percentage
- Déclencher CCR-Update lorsque ce % de quota est consommé
- Recommandé : 0.75-0.85 (75%-85%)
- Plus élevé = moins de messages, mais risque d'épuisement de quota
- Plus bas = plus de messages, mais plus sûr
timeout_action
:block- Bloquer le trafic si l'OCS ne répond pas (plus sûr, empêche la perte de revenus):allow- Autoriser le trafic si l'OCS ne répond pas (meilleure expérience utilisateur, risque de revenus)
no_credit_action
:terminate- Supprimer le support lorsque le crédit est épuisé:redirect- Rediriger vers le portail de recharge
Configuration Spécifique à l'Environnement
Production (abonnés prépayés) :
config :pgw_c,
gy: %{
enabled: true,
timeout_action: :block,
no_credit_action: :terminate,
quota_threshold_percentage: 0.8
}
Test/Développement :
config :pgw_c,
gy: %{
enabled: false # Désactiver pour les tests
}
Hybride (certains prépayés, certains postpayés) :
config :pgw_c,
gy: %{
enabled: true, # Contrôlé par abonné par le PCRF
timeout_action: :allow, # Ne pas bloquer les postpayés en cas d'échec de l'OCS
no_credit_action: :terminate
}
Flux de Messages
Session Réussie avec Chargement en Ligne
Ré-autorisation de Quota (CCR-Update)
Épuisement de Crédit (Dernière Unité)
Gestion des Délai d'Attente de l'OCS
Gestion des Erreurs
Codes de Résultat
Codes de Succès :
| Code | Nom | Action |
|---|---|---|
| 2001 | DIAMETER_SUCCESS | Continuer avec le quota accordé |
Échecs Transitoires (4xxx) :
| Code | Nom | Action PGW-C |
|---|---|---|
| 4010 | DIAMETER_TOO_BUSY | Réessayer avec un délai |
| 4011 | DIAMETER_UNABLE_TO_COMPLY | Journaliser l'erreur, peut réessayer |
| 4012 | DIAMETER_CREDIT_LIMIT_REACHED | Résilier ou rediriger |
Échecs Permanents (5xxx) :
| Code | Nom | Action PGW-C |
|---|---|---|
| 5003 | DIAMETER_AUTHORIZATION_REJECTED | Rejeter la session |
| 5031 | DIAMETER_USER_UNKNOWN | Rejeter la session (abonné invalide) |
Codes de Résultat par Service
Important : Le Result-Code peut apparaître à deux niveaux :
- Niveau de message - Résultat global
- Niveau MSCC - Résultat par service
Exemple :
CCA-Initial
├── Result-Code: DIAMETER_SUCCESS (2001) ← Niveau de message : OK
└── Multiple-Services-Credit-Control
├── [Rating-Group: 100]
│ └── Result-Code: DIAMETER_SUCCESS (2001) ← RG 100 : OK
└── [Rating-Group: 200]
└── Result-Code: DIAMETER_CREDIT_LIMIT_REACHED (4012) ← RG 200 : Pas de crédit
Comportement PGW-C :
- Autoriser le trafic pour le Rating-Group 100
- Bloquer le trafic pour le Rating-Group 200
Intégration avec Gx
L'interface Gx (contrôle de politique PCRF) détermine si le chargement en ligne est requis et fournit le Rating-Group qui pilote le chargement Gy. Voir Interface Diamètre Gx pour la documentation complète du contrôle de politique.
Relation Gx et Gy
Flux d'Intégration
1. Configuration de Support :
PGW-C reçoit une Demande de Création de Session
↓
Envoyer CCR-I au PCRF (Gx)
↓
Recevoir CCA-I avec Règles PCC
↓
Analyser les Règles PCC :
- La règle a-t-elle un Rating-Group ?
- Est-ce que En Ligne = 1 ?
↓
Si OUI :
Envoyer CCR-I à l'OCS (Gy) avec Rating-Group
↓
Recevoir CCA-I avec quota
↓
Si quota accordé : Procéder
Si pas de crédit : Rejeter le support
Si NON :
Procéder sans chargement en ligne
2. Mise à Jour de Politique Dynamique (RAR du PCRF) :
Le PCRF envoie RAR (Re-Auth-Request) sur Gx
↓
Nouvelle Règle PCC ajoutée avec En Ligne=1, Rating-Group=200
↓
PGW-C envoie CCR-U à l'OCS (Gy)
- Ajouter MSCC pour Rating-Group 200
↓
L'OCS accorde un quota pour le nouveau service
↓
Installer un support dédié avec chargement en ligne
Dépannage
Problèmes Courants
1. Délai d'Attente de CCR-Initial à l'OCS
Symptômes :
- Les sessions échouent avec "délai d'attente OCS"
- Journal : "Délai d'attente CCR-Initial (Gy)"
Causes Possibles :
- OCS non accessible
- IP OCS incorrect dans la configuration
- Pare-feu bloquant le port Diamètre (3868)
- OCS surchargé
Résolution :
# Tester la connectivité réseau
ping <ocs_ip>
# Tester le port Diamètre (TCP 3868)
telnet <ocs_ip> 3868
# Vérifier la configuration
# Assurez-vous que le pair OCS est configuré dans peer_list
2. Sessions Rejetées par l'OCS
Symptômes :
- CCA-I avec Result-Code != 2001
- Échec de la Réponse à la Création de Session
Codes de Résultat Courants :
| Code de Résultat | Cause Probable | Résolution |
|---|---|---|
| 4012 | Limite de crédit atteinte | L'abonné doit recharger |
| 5003 | Autorisation rejetée | Vérifier les autorisations de l'abonné |
| 5031 | Utilisateur inconnu | Provisionner l'abonné dans l'OCS |
Étapes de Débogage :
- Vérifier les journaux de l'OCS pour la raison du rejet
- Vérifier le solde de l'abonné dans l'OCS
- Vérifier que l'IMSI/MSISDN dans CCR-I correspond à l'enregistrement de l'abonné
3. Épuisement de Quota Non Détecté
Symptômes :
- L'utilisateur continue d'utiliser des données après l'épuisement du solde
- Aucun CCR-Update envoyé
Causes Possibles :
- URR (Règle de Rapport d'Utilisation) non installée dans le PGW-U
- Seuil non configuré correctement
- Rapports de Session PFCP non reçus
Étapes de Débogage :
-
Vérifier URR dans l'Établissement de Session PFCP :
Créer URR
├── URR-ID: 1
├── Méthode de Mesure: VOLUME
├── Seuil de Volume: 8000000 (8 Mo)
└── Déclencheurs de Rapport: VOLUME_THRESHOLD -
Vérifier les journaux du PGW-U pour les rapports d'utilisation
-
Vérifier
quota_threshold_percentagedans la configuration
4. Rating-Group Incorrect
Symptômes :
- L'OCS rejette avec "Rating-Group Inconnu"
- Les sessions échouent
Cause :
- Rating-Group dans CCR-I ne correspond pas à la configuration de l'OCS
- Le PCRF a provisionné un Rating-Group invalide
Résolution :
- Vérifier le Rating-Group dans la Règle PCC du PCRF
- Vérifier la configuration de l'OCS pour les Rating-Groups valides
- Assurer le mapping entre les Règles PCC et les tarifs de l'OCS
Surveillance
Métriques Clés
# Taux de messages Gy
rate(gy_inbound_messages_total{message_type="cca"}[5m])
rate(gy_outbound_messages_total{message_type="ccr"}[5m])
# Taux d'erreurs Gy
rate(gy_inbound_errors_total[5m])
# Événements d'épuisement de quota
rate(gy_quota_exhausted_total[5m])
# Taux de délai d'attente de l'OCS
rate(gy_timeout_total[5m])
# Durée de traitement des messages Gy
histogram_quantile(0.95, rate(gy_inbound_handling_duration_bucket[5m]))
Alertes
# Alerte sur un taux d'erreur Gy élevé
- alert: GyErrorRateHigh
expr: rate(gy_inbound_errors_total[5m]) > 0.1
for: 5m
annotations:
summary: "Taux d'erreur Gy élevé détecté"
# Alerte sur délai d'attente de l'OCS
- alert: OcsTimeout
expr: rate(gy_timeout_total[5m]) > 0.05
for: 2m
annotations:
summary: "Délai d'attente de l'OCS en cours"
# Alerte sur pic d'épuisement de crédit
- alert: CreditExhaustionSpike
expr: rate(gy_quota_exhausted_total[5m]) > 10
for: 5m
annotations:
summary: "Taux élevé d'épuisement de crédit"
Contrôle de Crédit Gy (API OAM)
Le chargement en ligne est inspecté et exercé via l'API REST OAM, servie sur
HTTPS/TLS à https://<host>:8443. La documentation interactive de l'API (Swagger UI) est disponible
à https://<host>:8443/api/docs.
État du Chargement en Ligne
GET /api/charging # toutes les sessions de chargement en ligne + état de crédit en direct
GET /api/charging?search=<imsi> # filtrer les sessions par IMSI
GET /api/charging/<imsi> # état de contrôle de crédit d'une session par IMSI
Exemple :
curl -k https://localhost:8443/api/charging/310170123456789
GET /api/charging renvoie l'état de chargement en ligne (quota accordé vs. utilisé, validité, l'
action Final-Unit de l'OCS, et l'état de redirection de jardin clos / hors de crédit) pour chaque session active. Ajoutez ?search=<imsi> pour affiner la liste, ou ajoutez l'IMSI à
GET /api/charging/<imsi> pour récupérer l'état de contrôle de crédit d'un seul abonné.
Simulateur de Contrôle de Crédit Gy
POST /api/gy_simulator
Envoie une Demande de Contrôle de Crédit synthétique à l'OCS configuré et renvoie la réponse analysée — code de résultat au niveau de la commande, quota accordé, temps de validité, et toute
Indication de Dernière Unité — afin que le chargement en ligne puisse être exercé sans trafic d'abonné en direct. C'est le remplacement de l'API OAM pour l'ancien simulateur Gy basé sur le navigateur. Il
nécessite que Gy soit activé (gy.enabled: true) ; la demande est envoyée depuis l'hôte d'origine Gy du PGW-C vers le domaine OCS configuré.
Corps de la demande (application/json) :
| Champ | Type | Description |
|---|---|---|
imsi | string | Requis. IMSI de l'abonné. |
msisdn | string | MSISDN optionnel (E.164). Remplit User-Name comme <msisdn>@<apn>. |
apn | string | APN optionnel. |
requested_units | integer | Quota demandé en octets optionnel (Requested-Service-Unit → CC-Total-Octets). |
rating_group | integer | Groupe de Tarification / clé de chargement optionnel (par défaut 1). |
service_id | integer | Identifiant de Service optionnel. |
cc_request_type | string | initial (par défaut), update, ou terminate (ou les numériques 1/2/3). |
Exemple — demander 1 Mo de quota initial pour un abonné :
curl -k -X POST https://localhost:8443/api/gy_simulator \
-H 'content-type: application/json' \
-d '{"imsi":"310170123456789","msisdn":"14155551234","apn":"internet","requested_units":1000000,"rating_group":1}'
Exemple de réponse (CCA-Initial accordant 1 Mo, valide 1 heure) :
{
"session_id": "omni-pgw_c.epc...;734825199;app_gy_sim",
"cc_request_type": 1,
"cc_request_type_name": "initial",
"result_code": "diameter_success",
"accepted": true,
"ocs_host": "ocs.epc.example.org",
"ocs_realm": "epc.example.org",
"granted": { "total_octets": 1000000, "input_octets": null, "output_octets": null, "time": null },
"validity_time": 3600,
"final_unit_action": null,
"final_unit_redirect": null,
"mscc_result_code": "diameter_success"
}
En cas d'échec, le point de terminaison renvoie 422 (imsi manquant) ou 503 (Gy désactivé, ou l'OCS
n'a pas répondu — le champ reason contient l'erreur sous-jacente, par exemple :timeout).
Cas d'Utilisation Opérationnels
- Inspecter le quota d'un abonné —
GET /api/charging/<imsi>renvoie le quota accordé actuel de la session et l'état du crédit. - Tester l'intégration de l'OCS sans trafic —
POST /api/gy_simulatorpour confirmer que l'OCS accorde le quota / Final-Unit-Action attendu pour un IMSI donné, un groupe de tarification, ou un service. - Dépanner les problèmes de chargement — localiser un abonné affecté avec
GET /api/charging?search=<imsi>et examiner son état de contrôle de crédit en direct.
Pour les tendances historiques (taux de messages, épuisement de quota, délais d'attente de l'OCS), utilisez les métriques Prometheus décrites dans Surveillance ci-dessus.
Documentation Connexe
Chargement et Politique
- Interface Diamètre Gx - Contrôle de politique PCRF, règles PCC qui déclenchent le chargement en ligne
- Format CDR de Données - Enregistrements de chargement hors ligne pour la facturation postpayée
- Guide de Configuration - Paramètres de configuration complets pour le chargement en ligne
Gestion des Sessions
- Gestion des Sessions - Cycle de vie de la session PDN, gestion des supports
- Interface PFCP - Rapport d'utilisation du PGW-U via URRs
- Interface S5/S8 - Configuration et démontage de support GTP-C
Opérations
- Guide de Surveillance - Métriques Gy, suivi de quota, alertes de délai d'attente de l'OCS
- Attribution d'IP UE - Configuration de pool IP pour les sessions facturées