Aller au contenu principal

Chargement en Ligne par Diamètre (Interface Gy/Ro)

Interface du Système de Chargement en Ligne (OCS)


Table des Matières

  1. Aperçu
  2. Architecture de Chargement 3GPP
  3. Bases de l'Interface Gy/Ro
  4. Messages de Contrôle de Crédit
  5. Flux de Chargement en Ligne
  6. Contrôle de Chargement de Support
  7. Contrôle de Crédit pour Plusieurs Services
  8. Configuration
  9. Flux de Messages
  10. Gestion des Erreurs
  11. Intégration avec Gx
  12. 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

AspectChargement en Ligne (Gy/Ro)Chargement Hors Ligne (Gz/Rf)
TempsEn temps réel, avant le serviceAprès la livraison du service
Cas d'UtilisationAbonnés prépayésAbonnés postpayés
Vérification de CréditOui, avant d'accorder le serviceNon, facture générée plus tard
SystèmeOCS (Système de Chargement en Ligne)CGF/CDF (Fonction de Données de Chargement)
RisquePas de perte de revenusRisque de factures impayées
ComplexitéÉlevée (exigences en temps réel)Inférieure (traitement par lots)
Impact UtilisateurService refusé si pas de créditService 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

FonctionDescription
Autorisation de CréditDemander un quota à l'OCS avant d'autoriser le trafic
Gestion de QuotaSuivre les unités accordées (octets, temps, événements)
Détection d'Épuisement de CréditSurveiller le quota restant
Ré-autorisationDemander un quota supplémentaire lorsque le seuil est atteint
Résiliation de ServiceArrêter le service lorsque le crédit est épuisé
Règlement FinalRapporter 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 :

  1. Détecter les événements facturables - Début de session, utilisation des données, fin de session
  2. Demander l'autorisation de crédit - Avant d'autoriser le service
  3. Suivre la consommation de quota - Surveiller les unités accordées
  4. Générer des événements de chargement - Déclencher des demandes de crédit
  5. 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) :

  1. Gestion du solde de compte - Suivre le crédit de l'abonné
  2. Tarification - Déterminer le prix par unité (par Mo, par seconde, etc.)
  3. Réservation de crédit - Réserver du crédit pour le quota accordé
  4. Déduction de crédit - Déduire lors du rapport d'utilisation
  5. 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'AVPCode de l'AVPTypeDescription
Session-Id263UTF8StringIdentifiant unique de session Gy
Auth-Application-Id258Unsigned324 (Contrôle de Crédit)
Origin-Host264DiamIdentIdentité Diamètre du PGW-C
Origin-Realm296DiamIdentDomaine Diamètre du PGW-C
Destination-Realm283DiamIdentDomaine de l'OCS
CC-Request-Type416Enumerated1 = INITIAL_REQUEST
CC-Request-Number415Unsigned32Numéro de séquence (commence à 0)
Subscription-Id443GroupedIdentifiant de l'UE (IMSI/MSISDN)
Service-Context-Id461UTF8StringIdentifiant de contexte de chargement
Multiple-Services-Credit-Control456GroupedDemandes de crédit spécifiques au service
Requested-Service-Unit437GroupedQuota demandé (octets, temps, etc.)
Used-Service-Unit446GroupedQuota utilisé (0 pour initial)
Service-Identifier439Unsigned32Identifiant de type de service
Rating-Group432Unsigned32Identifiant 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'AVPCode de l'AVPDescription
Result-Code268Succès (2001) ou code d'erreur
Multiple-Services-Credit-Control456Accords de crédit spécifiques au service
Granted-Service-Unit431Quota accordé (octets, temps, etc.)
Validity-Time448Période de validité du quota (secondes)
Result-Code268Code de résultat par service
Final-Unit-Indication430Action 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-Number incrémenté
  • Used-Service-Unit contient l'utilisation réelle
  • Requested-Service-Unit pour 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-Unit contient 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éAVPDescriptionCas d'Utilisation
TempsCC-TimeSecondesAppels vocaux, durée de session
VolumeCC-Total-OctetsOctets (total montant + descendant)Services de données
Volume (séparé)CC-Input-Octets, CC-Output-OctetsOctets (séparés)Chargement asymétrique
Spécifique au ServiceCC-Service-Specific-UnitsUnités personnaliséesSMS, MMS, appels API
Événements-Événements comptésServices 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-ActionValeurComportement PGW-C
TERMINATE0Bloquer tout le trafic, initier la résiliation de session
REDIRECT1Rediriger le trafic vers le portail (par exemple, page de recharge)
RESTRICT_ACCESS2Autoriser 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 :

  1. TERMINATE : Envoyer CCR-T, supprimer le support
  2. REDIRECT : Installer la règle PFCP pour rediriger HTTP vers l'URL de recharge
  3. 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'AVPCode de l'AVPValeursDescription
Rating-Group432Unsigned32Catégorie de chargement (correspond à la tarification dans l'OCS)
Online10090=Désactiver, 1=ActiverActiver le chargement en ligne (Gy)
Offline10080=Désactiver, 1=ActiverActiver le chargement hors ligne (Gz)
Metering-Method10070=Durée, 1=Volume, 2=Les DeuxCe qu'il faut mesurer
Reporting-Level10110=Service, 1=Groupe de TarificationGranularité des rapports d'utilisation

Matrice de Décision de Chargement de Support

En LigneHors LigneRating-GroupComportement
10PrésentChargement en ligne uniquement (prépayé)
01PrésentChargement hors ligne uniquement (postpayé)
11PrésentChargement en ligne et hors ligne (convergent)
00-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

AttributService-IdentifierRating-Group
ButIdentifie le type de serviceIdentifie la catégorie de chargement
Exemple1=Données, 2=Voix, 3=SMS100=Régulier, 200=Premium
GranularitéClassification largeTarification spécifique
RequisOptionnelRequis pour le chargement
MappingPeut mapper à plusieurs RGsTarification 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'OCS
  • false : 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 :

CodeNomAction
2001DIAMETER_SUCCESSContinuer avec le quota accordé

Échecs Transitoires (4xxx) :

CodeNomAction PGW-C
4010DIAMETER_TOO_BUSYRéessayer avec un délai
4011DIAMETER_UNABLE_TO_COMPLYJournaliser l'erreur, peut réessayer
4012DIAMETER_CREDIT_LIMIT_REACHEDRésilier ou rediriger

Échecs Permanents (5xxx) :

CodeNomAction PGW-C
5003DIAMETER_AUTHORIZATION_REJECTEDRejeter la session
5031DIAMETER_USER_UNKNOWNRejeter la session (abonné invalide)

Codes de Résultat par Service

Important : Le Result-Code peut apparaître à deux niveaux :

  1. Niveau de message - Résultat global
  2. 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ésultatCause ProbableRésolution
4012Limite de crédit atteinteL'abonné doit recharger
5003Autorisation rejetéeVérifier les autorisations de l'abonné
5031Utilisateur inconnuProvisionner l'abonné dans l'OCS

Étapes de Débogage :

  1. Vérifier les journaux de l'OCS pour la raison du rejet
  2. Vérifier le solde de l'abonné dans l'OCS
  3. 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 :

  1. 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
  2. Vérifier les journaux du PGW-U pour les rapports d'utilisation

  3. Vérifier quota_threshold_percentage dans 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 :

  1. Vérifier le Rating-Group dans la Règle PCC du PCRF
  2. Vérifier la configuration de l'OCS pour les Rating-Groups valides
  3. 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) :

ChampTypeDescription
imsistringRequis. IMSI de l'abonné.
msisdnstringMSISDN optionnel (E.164). Remplit User-Name comme <msisdn>@<apn>.
apnstringAPN optionnel.
requested_unitsintegerQuota demandé en octets optionnel (Requested-Service-Unit → CC-Total-Octets).
rating_groupintegerGroupe de Tarification / clé de chargement optionnel (par défaut 1).
service_idintegerIdentifiant de Service optionnel.
cc_request_typestringinitial (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 traficPOST /api/gy_simulator pour 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

Gestion des Sessions

Opérations


Retour au Guide des Opérations