Saltar al contenido principal

Carga en Línea por Diámetro (Interfaz Gy/Ro)

Interfaz del Sistema de Carga en Línea (OCS)


Tabla de Contenidos

  1. Descripción General
  2. Arquitectura de Carga 3GPP
  3. Conceptos Básicos de la Interfaz Gy/Ro
  4. Mensajes de Control de Crédito
  5. Flujos de Carga en Línea
  6. Control de Carga de Portadora
  7. Control de Crédito para Múltiples Servicios
  8. Configuración
  9. Flujos de Mensajes
  10. Manejo de Errores
  11. Integración con Gx
  12. Solución de Problemas

Descripción General

La interfaz Gy (también llamada interfaz Ro en contextos IMS) conecta PGW-C al Sistema de Carga en Línea (OCS) para el control de crédito en tiempo real. Esto permite:

  • Carga Prepagada - Autorización y deducción de crédito en tiempo real
  • Control de Crédito en Tiempo Real - Otorgar cuota antes de la entrega del servicio
  • Carga Basada en Servicios - Diferente carga para voz, datos, SMS, etc.
  • Actualizaciones Inmediatas de Cuenta - Actualizaciones del saldo de crédito en tiempo real
  • Negación de Servicio - Bloquear el servicio cuando se agota el crédito

Carga en Línea vs. Carga Fuera de Línea

AspectoCarga en Línea (Gy/Ro)Carga Fuera de Línea (Gz/Rf)
TiempoEn tiempo real, antes del servicioDespués de la entrega del servicio
Caso de UsoSuscriptores prepagadosSuscriptores postpagados
Verificación de CréditoSí, antes de otorgar el servicioNo, la factura se genera más tarde
SistemaOCS (Sistema de Carga en Línea)CGF/CDF (Función de Datos de Carga)
RiesgoSin pérdida de ingresosRiesgo de facturas impagas
ComplejidadAlta (requisitos en tiempo real)Menor (procesamiento por lotes)
Impacto en el UsuarioServicio denegado si no hay créditoServicio siempre disponible

Ver también: Formato de CDR de Datos para registros de carga fuera de línea (facturación postpaga)

Ver también: Gestión de Sesiones para el ciclo de vida completo de la sesión PDN, incluida la integración de carga

Gy en la Arquitectura de Red

Funciones Clave

FunciónDescripción
Autorización de CréditoSolicitar cuota al OCS antes de permitir el tráfico
Gestión de CuotasRastrear unidades otorgadas (bytes, tiempo, eventos)
Detección de Agotamiento de CréditoMonitorear la cuota restante
Re-autorizaciónSolicitar cuota adicional cuando se alcanza el umbral
Terminación del ServicioDetener el servicio cuando se agota el crédito
Liquidación FinalReportar el uso real al finalizar la sesión

Arquitectura de Carga 3GPP

Puntos de Referencia de Carga

Función de Activación de Carga (CTF)

PGW-C actúa como un CTF (Función de Activación de Carga), responsable de:

  1. Detectar eventos cobrables - Inicio de sesión, uso de datos, fin de sesión
  2. Solicitar autorización de crédito - Antes de permitir el servicio
  3. Rastrear el consumo de cuotas - Monitorear unidades otorgadas
  4. Generar eventos de carga - Activar solicitudes de crédito
  5. Hacer cumplir el control de crédito - Bloquear tráfico cuando se agota la cuota

Función de Carga en Línea (OCF)

El OCS implementa la OCF (Función de Carga en Línea):

  1. Gestión del saldo de cuentas - Rastrear el crédito del suscriptor
  2. Tarificación - Determinar el precio por unidad (por MB, por segundo, etc.)
  3. Reserva de crédito - Reservar crédito para la cuota otorgada
  4. Deducción de crédito - Deducir al informar el uso
  5. Decisiones de política - Otorgar o denegar según el saldo

Conceptos Básicos de la Interfaz Gy/Ro

Referencia 3GPP

  • Especificación: 3GPP TS 32.299 (Arquitectura de carga)
  • Protocolo: 3GPP TS 32.251 (Carga en el dominio PS)
  • ID de Aplicación de Diámetro: 4 (Gy/Ro - Aplicación de Control de Crédito)
  • Protocolo Base: RFC 4006 (Aplicación de Control de Crédito de Diámetro)

Concepto de Sesión

Cada conexión PDN de UE que requiere carga en línea tiene una sesión Gy/Ro identificada por un Session-ID. Esta sesión:

  • Se crea cuando la portadora requiere carga en línea (CCR-Initial)
  • Se actualiza cuando se consume la cuota (CCR-Update)
  • Se termina cuando finaliza la sesión (CCR-Termination)

Formato del ID de Sesión

Session-ID: <Origin-Host>;<high32>;<low32>[;<optional>]
Ejemplo: omni-pgw_c.epc.mnc999.mcc999.3gppnetwork.org;9876543210;12345;gy

Componentes:

  • Origin-Host: Identidad de Diámetro de PGW-C
  • high32: 32 bits altos del identificador único
  • low32: 32 bits bajos del identificador único
  • optional: Identificador adicional (por ejemplo, "gy" para distinguir de Gx)

Mensajes de Control de Crédito

Tipos de Mensajes

CCR-Initial (Solicitud de Control de Crédito - Inicial)

Cuando: UE crea una conexión PDN y la portadora requiere carga en línea

Propósito:

  • Solicitar autorización de crédito inicial al OCS
  • Reservar cuota para la entrega del servicio
  • Establecer sesión Gy/Ro

AVPs Clave Enviados por PGW-C:

Nombre de AVPCódigo de AVPTipoDescripción
Session-Id263UTF8StringIdentificador único de sesión Gy
Auth-Application-Id258Unsigned324 (Control de Crédito)
Origin-Host264DiamIdentIdentidad de Diámetro de PGW-C
Origin-Realm296DiamIdentReino de Diámetro de PGW-C
Destination-Realm283DiamIdentReino del OCS
CC-Request-Type416Enumerated1 = INITIAL_REQUEST
CC-Request-Number415Unsigned32Número de secuencia (comienza en 0)
Subscription-Id443GroupedIdentificador de UE (IMSI/MSISDN)
Service-Context-Id461UTF8StringIdentificador del contexto de carga
Multiple-Services-Credit-Control456GroupedSolicitudes de crédito específicas del servicio
Requested-Service-Unit437GroupedCuota solicitada (bytes, tiempo, etc.)
Used-Service-Unit446GroupedCuota utilizada (0 para inicial)
Service-Identifier439Unsigned32Identificador del tipo de servicio
Rating-Group432Unsigned32Identificador de la categoría de carga

Ejemplo de Estructura CCR-I:

CCR (Código de Comando: 272, Solicitud)
├── 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 (solicitar 10 MB)
└── Used-Service-Unit (Grouped)
└── CC-Total-Octets: 0 (sin uso aún)

CCA-Initial (Respuesta de Control de Crédito - Inicial)

Enviado por: OCS en respuesta a CCR-I

Propósito:

  • Otorgar o denegar autorización de crédito
  • Proporcionar cuota para la entrega del servicio
  • Especificar parámetros de tarificación y carga

AVPs Clave Recibidos por PGW-C:

Nombre de AVPCódigo de AVPDescripción
Result-Code268Éxito (2001) o código de error
Multiple-Services-Credit-Control456Otorgamientos de crédito específicos del servicio
Granted-Service-Unit431Cuota otorgada (bytes, tiempo, etc.)
Validity-Time448Período de validez de la cuota (segundos)
Result-Code268Código de resultado por servicio
Final-Unit-Indication430Acción cuando se agota la cuota
Volume-Quota-Threshold-Umbral para re-autorización

Ejemplo de Respuesta Exitosa:

CCA (Código de Comando: 272, Respuesta)
├── 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 (otorgados 10 MB)
├── Validity-Time: 3600 (cuota válida por 1 hora)
└── Volume-Quota-Threshold: 8000000 (re-autorización a 8 MB usados, 80%)

CCR-Update (Solicitud de Control de Crédito - Actualización)

Cuando:

  • Se alcanza el umbral de cuota otorgada (por ejemplo, 80% consumido)
  • Expira el tiempo de validez
  • Un cambio de servicio requiere re-autorización
  • Cambio de tiempo de tarifa

Propósito:

  • Solicitar cuota adicional
  • Reportar uso de la cuota otorgada previamente
  • Actualizar parámetros de carga

Diferencias Clave con CCR-I:

  • CC-Request-Type: UPDATE_REQUEST (2)
  • CC-Request-Number incrementado
  • Used-Service-Unit contiene el uso real
  • Requested-Service-Unit para más cuota

Ejemplo de Estructura CCR-U:

CCR (Código de Comando: 272, Solicitud)
├── 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 MB usados hasta ahora)
└── Requested-Service-Unit (Grouped)
└── CC-Total-Octets: 10000000 (solicitar otros 10 MB)

CCA-Update (Respuesta de Control de Crédito - Actualización)

Enviado por: OCS en respuesta a CCR-U

Propósito:

  • Otorgar cuota adicional (si hay crédito disponible)
  • Reconocer el uso
  • Actualizar parámetros de carga

Resultados Posibles:

1. Más Cuota Otorgada:

CCA (Actualización)
└── Multiple-Services-Credit-Control
├── Result-Code: DIAMETER_SUCCESS (2001)
├── Granted-Service-Unit
│ └── CC-Total-Octets: 10000000 (otros 10 MB)
└── Validity-Time: 3600

2. Cuota Final (Crédito Agotado):

CCA (Actualización)
└── Multiple-Services-Credit-Control
├── Result-Code: DIAMETER_SUCCESS (2001)
├── Granted-Service-Unit
│ └── CC-Total-Octets: 1000000 (solo 1 MB restante)
└── Final-Unit-Indication
└── Final-Unit-Action: TERMINATE (0)

3. Sin Crédito Disponible:

CCA (Actualización)
├── 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 (Solicitud de Control de Crédito - Terminación)

Cuando:

  • UE se desconecta
  • Conexión PDN eliminada
  • Sesión terminada por cualquier motivo

Propósito:

  • Informe final de uso
  • Cerrar sesión Gy/Ro
  • Liquidación final

Diferencias Clave:

  • CC-Request-Type: TERMINATION_REQUEST (3)
  • Used-Service-Unit contiene el uso final
  • No hay Requested-Service-Unit (no se necesita más cuota)
  • Incluye Termination-Cause

Ejemplo de Estructura CCR-T:

CCR (Código de Comando: 272, Solicitud)
├── 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 MB de uso total)

CCA-Termination (Respuesta de Control de Crédito - Terminación)

Enviado por: OCS en respuesta a CCR-T

Propósito:

  • Reconocer la terminaci��n de la sesión
  • Completar la contabilidad
  • Liberar el crédito reservado

Ejemplo CCA-T:

CCA (Código de Comando: 272, Respuesta)
├── 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

Flujos de Carga en Línea

Tipos de Unidades de Servicio

El OCS puede otorgar cuota en diferentes unidades:

Tipo de UnidadAVPDescripciónCaso de Uso
TiempoCC-TimeSegundosLlamadas de voz, duración de sesión
VolumenCC-Total-OctetsBytes (total sube+baja)Servicios de datos
Volumen (separado)CC-Input-Octets, CC-Output-OctetsBytes (separados)Carga asimétrica
Específico del ServicioCC-Service-Specific-UnitsUnidades personalizadasSMS, MMS, llamadas API
Eventos-Eventos contadosServicios de pago por uso

Gestión del Umbral de Cuota

Problema: ¿Cómo sabe PGW-C cuándo solicitar más cuota?

Solución: El OCS proporciona un Volume-Quota-Threshold o Time-Quota-Threshold. PGW-C monitorea el uso a través de informes de sesión PFCP de PGW-U (ver Interfaz PFCP).

Ejemplo de Flujo:

1. OCS otorga 10 MB de cuota con umbral del 80% (8 MB)
2. PGW-C monitorea el uso a través de informes de uso de PGW-U (Informes de Sesión PFCP)
3. Cuando el uso alcanza 8 MB:
→ PGW-C envía CCR-Update
→ Continuar permitiendo tráfico (no esperar respuesta)
4. OCS responde con más cuota
5. Si la cuota se agota antes de que se envíe CCR-Update:
→ PGW-C debe bloquear el tráfico

Cálculo del Umbral:

Granted-Service-Unit: 10000000 bytes (10 MB)
Volume-Quota-Threshold: 8000000 bytes (8 MB)

Cuando se consumen 8 MB → Activar CCR-Update
Buffer restante: 2 MB (permite tiempo para la respuesta del OCS)

Monitoreo de PGW-C:

PGW-C monitorea el uso a través de Informes de Sesión PFCP de PGW-U:

Indicación de Unidad Final

¿Qué sucede cuando se agota el crédito?

El OCS incluye el AVP Final-Unit-Indication en CCA para especificar la acción:

Acción de Unidad FinalValorComportamiento de PGW-C
TERMINATE0Bloquear todo el tráfico, iniciar la terminación de la sesión
REDIRECT1Redirigir el tráfico a un portal (por ejemplo, página de recarga)
RESTRICT_ACCESS2Permitir acceso solo a servicios específicos (por ejemplo, servidor de recarga)

Ejemplo: Unidad Final con Redirección

CCA (Actualización)
└── Multiple-Services-Credit-Control
├── Result-Code: DIAMETER_SUCCESS (2001)
├── Granted-Service-Unit
│ └── CC-Total-Octets: 1000000 (último 1 MB)
└── Final-Unit-Indication
├── Final-Unit-Action: REDIRECT (1)
└── Redirect-Server (Grouped)
├── Redirect-Address-Type: URL (2)
└── Redirect-Server-Address: "http://topup.example.com"

Acciones de PGW-C:

  1. TERMINATE: Enviar CCR-T, eliminar portadora
  2. REDIRECT: Instalar regla PFCP para redirigir HTTP a la URL de recarga
  3. RESTRICT_ACCESS: Instalar reglas PFCP que permitan solo IPs en la lista blanca

Control de Carga de Portadora

¿Qué Controla si se Carga una Portadora?

Especificación 3GPP: TS 23.203, TS 29.212, TS 32.251

La carga de portadora se controla mediante Reglas PCC proporcionadas por el PCRF a través de la interfaz Gx. Ver Interfaz Diámetro Gx para la documentación completa de reglas PCC.

Flujo de Decisión de Carga:

Regla PCC con Información de Carga

Respuesta PCRF (CCA-I en Gx):

CCA (Interfaz Gx)
└── Charging-Rule-Definition (Grouped)
├── Charging-Rule-Name: "prepaid_data_rule"
├── Rating-Group: 100
├── Online: 1 (habilitar carga en línea)
├── Offline: 0 (deshabilitar carga fuera de línea)
├── Metering-Method: VOLUME (1)
├── Precedence: 100
├── Flow-Information: [...]
└── QoS-Information: [...]

AVPs Clave de Carga en Reglas PCC:

Nombre de AVPCódigo de AVPValoresDescripción
Rating-Group432Unsigned32Categoría de carga (se mapea a tarifa en OCS)
Online10090=Deshabilitar, 1=HabilitarHabilitar carga en línea (Gy)
Offline10080=Deshabilitar, 1=HabilitarHabilitar carga fuera de línea (Gz)
Metering-Method10070=Duración, 1=Volumen, 2=AmbosQué medir
Reporting-Level10110=Servicio, 1=Grupo de TarificaciónGranularidad de informes de uso

Matriz de Decisión de Carga de Portadora

OnlineOfflineRating-GroupComportamiento
10PresenteSolo carga en línea (prepagada)
01PresenteSolo carga fuera de línea (postpagada)
11PresenteCarga en línea y fuera de línea (convergente)
00-Sin carga (servicio gratuito)

Múltiples Grupos de Tarificación

Una sola conexión PDN puede tener múltiples portadoras con diferentes grupos de tarificación:

Ejemplo de Escenario:

Portadora Predeterminada (Internet)
├── Rating-Group: 100 (Datos Estándar)
└── Online: 1

Portadora Dedicada 1 (Streaming de Video)
├── Rating-Group: 200 (Servicio de Video)
└── Online: 1

Portadora Dedicada 2 (Voz IMS)
├── Rating-Group: 300 (Voz)
└── Online: 1

Comportamiento de PGW-C Gy:

  • Un solo CCR-I con múltiples secciones MSCC (Control de Crédito para Múltiples Servicios):
CCR-Initial
├── Session-Id: "..."
└── Multiple-Services-Credit-Control
├── [Rating-Group: 100] → Datos Estándar
├── [Rating-Group: 200] → Servicio de Video
└── [Rating-Group: 300] → Voz

Respuesta del OCS:

CCA-Initial
└── Multiple-Services-Credit-Control
├── [Rating-Group: 100] → Otorgado: 10 MB
├── [Rating-Group: 200] → Otorgado: 5 MB (video más caro)
└── [Rating-Group: 300] → Otorgado: 60 segundos

Aplicación de Carga por Servicio

PGW-C rastrea la cuota por Grupo de Tarificación:

# Pseudocódigo
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} # milisegundos
}

Monitoreo de Uso por Portadora:


Control de Crédito para Múltiples Servicios

AVP MSCC (Control de Crédito para Múltiples Servicios)

Propósito: Agrupar información de carga para un servicio/grupo de tarificación específico

Estructura:

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)
│ └── [Misma estructura que Requested-Service-Unit]
├── Granted-Service-Unit (Grouped, AVP 431)
│ └── [Misma estructura 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

AtributoService-IdentifierRating-Group
PropósitoIdentifica el tipo de servicioIdentifica la categoría de carga
Ejemplo1=Datos, 2=Voz, 3=SMS100=Regular, 200=Premium
GranularidadClasificación ampliaTarifa específica
RequeridoOpcionalRequerido para la carga
MapeoPuede mapear a múltiples RGsTarifa única en OCS

Ejemplo:

Service-Identifier: 1 (Servicio de Datos)
├── Rating-Group: 100 (Datos Estándar - $0.01/MB)
└── Rating-Group: 200 (Datos Premium - $0.05/MB)

Service-Identifier: 2 (Voz)
└── Rating-Group: 300 (Llamadas de Voz - $0.10/min)

Configuración

Configuración Básica de Gy

Edita config/runtime.exs:

config :pgw_c,
gy: %{
# Habilitar o deshabilitar la carga en línea globalmente
enabled: true,

# Tiempo de espera de conexión OCS (milisegundos)
timeout_ms: 5000,

# Cuota de solicitud predeterminada (bytes) si no se especifica por PCRF
default_requested_quota: 10_000_000, # 10 MB

# Porcentaje de umbral para re-autorización
# (0.8 = activar CCR-Update al 80% de cuota consumida)
quota_threshold_percentage: 0.8,

# Acción cuando ocurre un tiempo de espera de OCS
# Opciones: :block, :allow
timeout_action: :block,

# Acción cuando OCS no devuelve crédito
# Opciones: :terminate, :redirect
no_credit_action: :terminate,

# URL de redirección para recarga (usada 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",

# Configuración del par OCS
peer_list: [
# PCRF para control de políticas (Gx)
%{
host: "pcrf.epc.mnc999.mcc999.3gppnetwork.org",
realm: "epc.mnc999.mcc999.3gppnetwork.org",
ip: "10.0.0.30",
initiate_connection: true
},
# OCS para carga en línea (Gy)
%{
host: "ocs.epc.mnc999.mcc999.3gppnetwork.org",
realm: "epc.mnc999.mcc999.3gppnetwork.org",
ip: "10.0.0.40",
initiate_connection: true
}
]
}

Parámetros de Configuración Explicados

enabled

  • true: Carga en línea activa, mensajes CCR enviados al OCS
  • false: Carga en línea deshabilitada, sin mensajes Gy

timeout_ms

  • Tiempo a esperar por respuesta CCA del OCS
  • Recomendado: 3000-5000 ms

default_requested_quota

  • Cuota predeterminada a solicitar si el PCRF no especifica
  • Valores típicos: 1-100 MB

quota_threshold_percentage

  • Activar CCR-Update cuando se consuma este % de cuota
  • Recomendado: 0.75-0.85 (75%-85%)
  • Más alto = menos mensajes, pero riesgo de agotamiento de cuota
  • Más bajo = más mensajes, pero más seguro

timeout_action

  • :block - Bloquear tráfico si OCS no responde (más seguro, previene pérdida de ingresos)
  • :allow - Permitir tráfico si OCS no responde (mejor UX, riesgo de ingresos)

no_credit_action

  • :terminate - Eliminar portadora cuando se agota el crédito
  • :redirect - Redirigir a portal de recarga

Configuración Específica del Entorno

Producción (suscriptores prepagados):

config :pgw_c,
gy: %{
enabled: true,
timeout_action: :block,
no_credit_action: :terminate,
quota_threshold_percentage: 0.8
}

Prueba/Desarrollo:

config :pgw_c,
gy: %{
enabled: false # Deshabilitar para pruebas
}

Híbrido (algunos prepagados, algunos postpagados):

config :pgw_c,
gy: %{
enabled: true, # Controlado por suscriptor por PCRF
timeout_action: :allow, # No bloquear postpago en fallo de OCS
no_credit_action: :terminate
}

Flujos de Mensajes

Sesión Exitosa con Carga en Línea

Re-autorización de Cuota (CCR-Update)

Agotamiento de Crédito (Unidad Final)

Manejo de Tiempo de Espera de OCS


Manejo de Errores

Códigos de Resultado

Códigos de Éxito:

CódigoNombreAcción
2001DIAMETER_SUCCESSContinuar con la cuota otorgada

Fallos Transitorios (4xxx):

CódigoNombreAcción de PGW-C
4010DIAMETER_TOO_BUSYReintentar con retroceso
4011DIAMETER_UNABLE_TO_COMPLYRegistrar error, puede reintentar
4012DIAMETER_CREDIT_LIMIT_REACHEDTerminar o redirigir

Fallos Permanentes (5xxx):

CódigoNombreAcción de PGW-C
5003DIAMETER_AUTHORIZATION_REJECTEDRechazar sesión
5031DIAMETER_USER_UNKNOWNRechazar sesión (suscriptor inválido)

Códigos de Resultado por Servicio

Importante: El código de resultado puede aparecer en dos niveles:

  1. Nivel de mensaje - Resultado general
  2. Nivel de MSCC - Resultado por servicio

Ejemplo:

CCA-Initial
├── Result-Code: DIAMETER_SUCCESS (2001) ← Nivel de mensaje: 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: Sin crédito

Comportamiento de PGW-C:

  • Permitir tráfico para Rating-Group 100
  • Bloquear tráfico para Rating-Group 200

Integración con Gx

La interfaz Gx (control de políticas PCRF) determina si se requiere carga en línea y proporciona el Rating-Group que impulsa la carga Gy. Ver Interfaz Diámetro Gx para la documentación completa de control de políticas.

Relación entre Gx y Gy

Flujo de Integración

1. Configuración de Portadora:

PGW-C recibe Solicitud de Crear Sesión

Enviar CCR-I a PCRF (Gx)

Recibir CCA-I con Reglas PCC

Analizar Reglas PCC:
- ¿La regla tiene Rating-Group?
- ¿Es Online = 1?

Si SÍ:
Enviar CCR-I a OCS (Gy) con Rating-Group

Recibir CCA-I con cuota

Si cuota otorgada: Proceder
Si sin crédito: Rechazar portadora
Si NO:
Proceder sin carga en línea

2. Actualización de Política Din��mica (RAR de PCRF):

PCRF envía RAR (Re-Auth-Request) en Gx

Nueva Regla PCC añadida con Online=1, Rating-Group=200

PGW-C envía CCR-U a OCS (Gy)
- Añadir MSCC para Rating-Group 200

OCS otorga cuota para el nuevo servicio

Instalar portadora dedicada con carga en línea

Solución de Problemas

Problemas Comunes

1. Tiempos de Espera de CCR-Initial a OCS

Síntomas:

  • Las sesiones fallan con "tiempo de espera de OCS"
  • Registro: "Tiempo de espera de CCR-Initial (Gy)"

Causas Posibles:

  • OCS no accesible
  • IP de OCS incorrecta en la configuración
  • Cortafuegos bloqueando el puerto de Diámetro (3868)
  • OCS sobrecargado

Resolución:

# Probar conectividad de red
ping <ocs_ip>

# Probar puerto de Diámetro (TCP 3868)
telnet <ocs_ip> 3868

# Verificar configuración
# Asegurarse de que el par OCS esté configurado en peer_list

2. Sesiones Rechazadas por OCS

Síntomas:

  • CCA-I con Result-Code != 2001
  • Fallo en la Respuesta de Crear Sesión

Códigos de Resultado Comunes:

Código de ResultadoCausa ProbableResolución
4012Límite de crédito alcanzadoEl suscriptor necesita recargar
5003Autorización rechazadaVerificar permisos del suscriptor
5031Usuario desconocidoProvisionar suscriptor en OCS

Pasos de Depuración:

  1. Verificar registros de OCS para la razón del rechazo
  2. Verificar saldo del suscriptor en OCS
  3. Comprobar que IMSI/MSISDN en CCR-I coincida con el registro del suscriptor

3. Agotamiento de Cuota No Detectado

Síntomas:

  • El usuario continúa usando datos después de que se agota el saldo
  • No se envió CCR-Update

Causas Posibles:

  • URR (Regla de Informe de Uso) no instalada en PGW-U
  • Umbral no configurado correctamente
  • No se recibieron Informes de Sesión PFCP

Pasos de Depuración:

  1. Verificar URR en Establecimiento de Sesión PFCP:

    Crear URR
    ├── URR-ID: 1
    ├── Measurement-Method: VOLUME
    ├── Volume-Threshold: 8000000 (8 MB)
    └── Reporting-Triggers: VOLUME_THRESHOLD
  2. Comprobar registros de PGW-U para informes de uso

  3. Verificar quota_threshold_percentage en la configuración

4. Grupo de Tarificación Incorrecto

Síntomas:

  • OCS rechaza con "Grupo de Tarificación Desconocido"
  • Las sesiones fallan

Causa:

  • Grupo de Tarificación en CCR-I no coincide con la configuración de OCS
  • PCRF provisionó un Grupo de Tarificación inválido

Resolución:

  1. Verificar Grupo de Tarificación en la Regla PCC del PCRF
  2. Comprobar configuración de OCS para Grupos de Tarificación válidos
  3. Asegurarse de que el mapeo entre Reglas PCC y tarifas de OCS sea correcto

Monitoreo

Métricas Clave

# Tasas de mensajes Gy
rate(gy_inbound_messages_total{message_type="cca"}[5m])
rate(gy_outbound_messages_total{message_type="ccr"}[5m])

# Tasas de errores Gy
rate(gy_inbound_errors_total[5m])

# Eventos de agotamiento de cuota
rate(gy_quota_exhausted_total[5m])

# Tasa de tiempo de espera de OCS
rate(gy_timeout_total[5m])

# Duración del manejo de mensajes Gy
histogram_quantile(0.95, rate(gy_inbound_handling_duration_bucket[5m]))

Alertas

# Alerta sobre alta tasa de errores Gy
- alert: GyErrorRateHigh
expr: rate(gy_inbound_errors_total[5m]) > 0.1
for: 5m
annotations:
summary: "Se detectó una alta tasa de errores Gy"

# Alerta sobre tiempo de espera de OCS
- alert: OcsTimeout
expr: rate(gy_timeout_total[5m]) > 0.05
for: 2m
annotations:
summary: "Se están produciendo tiempos de espera de OCS"

# Alerta sobre pico de agotamiento de crédito
- alert: CreditExhaustionSpike
expr: rate(gy_quota_exhausted_total[5m]) > 10
for: 5m
annotations:
summary: "Alta tasa de agotamiento de crédito"

Control de Crédito Gy (API OAM)

La carga en línea se inspecciona y ejerce a través de la API REST OAM, servida sobre HTTPS/TLS en https://<host>:8443. La documentación interactiva de la API (Swagger UI) está disponible en https://<host>:8443/api/docs.

Estado de Carga en Línea

GET /api/charging                # todas las sesiones de carga en línea + estado de crédito en vivo
GET /api/charging?search=<imsi> # filtrar sesiones por IMSI
GET /api/charging/<imsi> # estado de control de crédito de una sesión por IMSI

Ejemplo:

curl -k https://localhost:8443/api/charging/310170123456789

GET /api/charging devuelve el estado de carga en línea (cuota otorgada vs. usada, validez, la acción Final-Unit del OCS, y estado de redirección / sin crédito) para cada sesión activa. Agrega ?search=<imsi> para reducir la lista, o agrega el IMSI a GET /api/charging/<imsi> para obtener el estado de control de crédito de un solo suscriptor.

Simulador de Control de Crédito Gy

POST /api/gy_simulator

Envía una Solicitud de Control de Crédito sintética al OCS configurado y devuelve la respuesta analizada: código de resultado a nivel de comando, cuota otorgada, tiempo de validez, y cualquier Indicación de Unidad Final, para que la carga en línea se pueda ejercer sin tráfico de suscriptor en vivo. Esta es la API OAM que reemplaza al antiguo simulador Gy basado en navegador. Requiere que Gy esté habilitado (gy.enabled: true); la solicitud se envía desde el propio host de origen Gy de PGW-C al reino OCS configurado.

Cuerpo de la solicitud (application/json):

CampoTipoDescripción
imsistringRequerido. IMSI del suscriptor.
msisdnstringMSISDN opcional (E.164). Población User-Name como <msisdn>@<apn>.
apnstringAPN opcional.
requested_unitsintegerCuota solicitada opcional en octetos (Requested-Service-Unit → CC-Total-Octets).
rating_groupintegerGrupo de Tarificación / clave de carga opcional (predeterminado 1).
service_idintegerIdentificador de Servicio opcional.
cc_request_typestringinitial (predeterminado), update, o terminate (o el numérico 1/2/3).

Ejemplo: solicitar 1 MB de cuota inicial para un suscriptor:

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}'

Ejemplo de respuesta (CCA-Initial otorgando 1 MB, válido por 1 hora):

{
"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 caso de fallo, el punto final devuelve 422 (imsi faltante) o 503 (Gy deshabilitado, o el OCS no respondió — el campo reason lleva el error subyacente, por ejemplo, :timeout).

Casos de Uso Operativos

  • Inspeccionar la cuota de un suscriptorGET /api/charging/<imsi> devuelve la cuota actual y estado de crédito de la sesión.
  • Probar la integración de OCS sin tráficoPOST /api/gy_simulator para confirmar que el OCS otorga la cuota esperada / Acción Final-Unit para un IMSI, grupo de tarificación o servicio dado.
  • Solucionar problemas de carga — localizar un suscriptor afectado con GET /api/charging?search=<imsi> y revisar su estado de control de crédito en vivo.

Para tendencias históricas (tasas de mensajes, agotamiento de cuota, tiempos de espera de OCS) utiliza las métricas de Prometheus descritas en Monitoreo arriba.


Documentación Relacionada

Carga y Política

Gestión de Sesiones

Operaciones


Volver a la Guía de Operaciones