Pular para o conteúdo principal

Documentação da Interface Gx do Diameter

Função de Regras de Política e Cobrança (PCRF)


Índice

  1. Visão Geral
  2. Fundamentos da Interface Gx
  3. Protocolo Diameter
  4. Mensagens de Controle de Crédito
  5. Regras de Política e Cobrança
  6. Relatório de Mudança de Localização
  7. Configuração
  8. Fluxos de Mensagens
  9. Tratamento de Erros
  10. Solução de Problemas

Visão Geral

A interface Gx conecta o PGW-C ao PCRF (Função de Regras de Política e Cobrança) ou PCF (Função de Controle de Política) em redes 5G. Esta interface permite:

  • Controle Dinâmico de Política - Aplicação de QoS e políticas em tempo real
  • Controle de Cobrança - Autorização de crédito e rastreamento de uso
  • Consciência de Serviço - Diferenciação de tráfego em nível de aplicação
  • Gerenciamento de Perfil do Assinante - Aplicação de políticas por usuário

Gx na Arquitetura da Rede

Funções Principais

FunçãoDescrição
Provisionamento de PolíticaO PCRF fornece regras de PCC definindo como lidar com o tráfego
Controle de QoSAjuste dinâmico de taxas de bits e parâmetros de QoS
Controle de CobrançaAutorização de crédito para cenários pré-pagos/pós-pagos
Controle de GatingHabilitar/desabilitar fluxos de tráfego com base na pol��tica
Monitoramento de UsoRastrear consumo de dados por serviço

Fundamentos da Interface Gx

Referência 3GPP

  • Especificação: 3GPP TS 29.212
  • ID da Aplicação Diameter: 16777238 (Gx)
  • Protocolo: Protocolo Base Diameter (RFC 6733)

Conceito de Sessão

Cada conexão PDN do UE tem uma sessão Gx correspondente identificada por um Session-ID. Esta sessão:

  • Criada quando o UE se conecta (CCR-Initial)
  • Atualizada durante a vida útil da conexão (CCR-Update) - opcional, por exemplo, mudanças de política ou relatório de mudança de localização
  • Terminada quando o UE se desconecta (CCR-Termination)

Formato do ID da Sessão

Session-ID: <Origin-Host>;<high32>;<low32>[;<optional>]
Exemplo: omni-pgw_c.epc.mnc999.mcc999.3gppnetwork.org;1234567890;98765

Componentes:

  • Origin-Host: Identidade Diameter do PGW-C
  • high32: 32 bits altos do identificador único
  • low32: 32 bits baixos do identificador único

Protocolo Diameter

Estrutura da Mensagem

As mensagens Diameter são codificadas em binário com a seguinte estrutura:

Cabeçalho Diameter (20 bytes)
├── Versão (1 byte) = 1
├── Comprimento da Mensagem (3 bytes)
├── Flags (1 byte)
│ ├── R: Requisição (1) / Resposta (0)
│ ├── P: Proxiável
│ ├── E: Erro
│ └── T: Potencialmente retransmitido
├── Código do Comando (3 bytes)
├── ID da Aplicação (4 bytes) = 16777238 (Gx)
├── ID Hop-by-Hop (4 bytes)
└── ID End-to-End (4 bytes)

AVPs (Atributo-Valor Pares)
├── Cabeçalho AVP
│ ├── Código AVP
│ ├── Flags (V, M, P)
│ ├── Comprimento AVP
│ └── ID do Fornecedor (opcional)
└── Dados AVP

Conceitos Chave do Diameter

AVP (Atributo-Valor Par):

  • Unidade de dados básica no Diameter
  • Contém um código, flags e valor
  • Pode ser aninhado (AVP Agrupado)

Comando:

  • Par Requisição/Resposta
  • CCR (Credit-Control-Request) / CCA (Credit-Control-Answer)

Códigos de Resultado:

  • 2001 - DIAMETER_SUCCESS
  • 3xxx - Erros de protocolo
  • 4xxx - Falhas transitórias
  • 5xxx - Falhas permanentes

Mensagens de Controle de Crédito

O PGW-C usa a Aplicação de Controle de Crédito Diameter (RFC 4006) para Gx.

Tipos de Mensagens

CCR-Initial (Requisição de Controle de Crédito - Inicial)

Quando: O UE cria uma nova conexão PDN

Objetivo:

  • Solicitar regras de política e cobrança iniciais
  • Fornecer contexto do UE e da rede ao PCRF
  • Obter parâmetros de QoS e autorização de cobrança

Principais AVPs Enviados pelo PGW-C:

Nome do AVPCódigo do AVPTipoDescrição
Session-Id263UTF8StringIdentificador único da sessão Gx
Auth-Application-Id258Unsigned3216777238 (Gx)
Origin-Host264DiamIdentIdentidade Diameter do PGW-C
Origin-Realm296DiamIdentReino Diameter do PGW-C
Destination-Realm283DiamIdentReino do PCRF
CC-Request-Type416Enumerated1 = INITIAL_REQUEST
CC-Request-Number415Unsigned32Número da sequência (começa em 0)
Subscription-Id443GroupedIdentificador do UE (IMSI/MSISDN)
Called-Station-Id30UTF8StringNome da APN
Framed-IP-Address8OctetStringEndereço IPv4 alocado ao UE (PDNs IPv4 e IPv4v6)
Framed-IPv6-Prefix97OctetStringPrefixo IPv6 alocado ao UE (PDNs somente IPv6)
3GPP-User-Location-Info22OctetStringULI inicial do assinante (TS 29.061)
User-Equipment-Info458GroupedIdentidade do UE (por exemplo, IMEISV), quando disponível
IP-CAN-Type1027Enumerated5 = 3GPP-EPS
RAT-Type1032EnumeratedMapeado do tipo RAT GTP (por exemplo, 1004 = EUTRAN)
QoS-Information1016GroupedQoS atual (APN-AMBR UL/DL)
Default-EPS-Bearer-QoS1049GroupedQoS do portador padrão QCI/ARP (QCI 5)
Network-Request-Support1024EnumeratedProcedimentos iniciados pela rede
Supported-Features628GroupedLista de recursos Gx (Rel-8/9/10 Gx)

O AVP framed-address é selecionado pela família de endereços do UE: Framed-IP-Address para IPv4 (e o IPv4 de um PDN IPv4v6), Framed-IPv6-Prefix para um IPv6-only PDN. Para IPv4v6, o prefixo IPv6 não é transportado no Gx. Veja IPv6 / Dual-Stack.

Exemplo de Estrutura CCR-I:

CCR (Código do Comando: 272, Requisição)
├── Session-Id: "pgw_c.example.com;123;456"
├── Auth-Application-Id: 16777238
├── 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 (Agrupado)
│ ├── Subscription-Id-Type: END_USER_IMSI (1)
│ └── Subscription-Id-Data: "310260123456789"
├── Called-Station-Id: "internet"
├── Framed-IP-Address: 100.64.1.42
├── IP-CAN-Type: 3GPP-EPS (5)
├── RAT-Type: EUTRAN (1004)
├── QoS-Information (Agrupado)
│ ├── APN-Aggregate-Max-Bitrate-UL: 100000000 (100 Mbps)
│ └── APN-Aggregate-Max-Bitrate-DL: 50000000 (50 Mbps)
├── Network-Request-Support: 1
└── Supported-Features: [...]

CCA-Initial (Resposta de Controle de Crédito - Inicial)

Enviado por: PCRF em resposta ao CCR-I

Objetivo:

  • Autorizar ou rejeitar a sessão
  • Fornecer regras de PCC para tratamento de tráfego
  • Especificar parâmetros de QoS

Principais AVPs Recebidos pelo PGW-C:

Nome do AVPCódigo do AVPDescrição
Result-Code268Sucesso (2001) ou código de erro
Experimental-Result297Códigos de resultado específicos do fornecedor
QoS-Information1016QoS autorizada (pode diferir da solicitação)
Charging-Rule-Install1001Regras de PCC a serem ativadas
Charging-Rule-Definition1003Definições de regras inline
Default-EPS-Bearer-QoS1049QoS para portador padrão

Exemplo de Resposta de Sucesso:

CCA (Código do Comando: 272, Resposta)
├── Session-Id: "pgw_c.example.com;123;456"
├── Result-Code: DIAMETER_SUCCESS (2001)
├── Origin-Host: "pcrf.example.com"
├── Origin-Realm: "example.com"
├── Auth-Application-Id: 16777238
├── CC-Request-Type: INITIAL_REQUEST (1)
├── CC-Request-Number: 0
├── QoS-Information (Agrupado)
│ ├── APN-Aggregate-Max-Bitrate-UL: 50000000 (50 Mbps - reduzido)
│ └── APN-Aggregate-Max-Bitrate-DL: 100000000 (100 Mbps - aumentado)
├── Charging-Rule-Install (Agrupado)
│ ├── Charging-Rule-Name: "default_internet_rule"
│ └── Charging-Rule-Name: "video_streaming_rule"
└── Charging-Rule-Definition (Agrupado)
├── Charging-Rule-Name: "default_internet_rule"
├── QoS-Information: {...}
└── Precedence: 1000

CCR-Termination (Requisição de Controle de Crédito - Término)

Quando: O UE se desconecta ou a conexão PDN é excluída

Objetivo:

  • Notificar o PCRF sobre a terminação da sessão
  • Registro final de contabilidade/cobrança

Principais Diferenças em Relação ao CCR-I:

  • CC-Request-Type: TERMINATION_REQUEST (3)
  • Pode incluir estatísticas de uso
  • Conjunto de AVPs simplificado

Exemplo CCR-T:

CCR (Código do Comando: 272, Requisição)
├── Session-Id: "pgw_c.example.com;123;456"
├── Auth-Application-Id: 16777238
├── 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: 1
└── Termination-Cause: DIAMETER_LOGOUT (1)

CCA-Termination

Enviado por: PCRF em resposta ao CCR-T

Objetivo:

  • Reconhecer a terminação da sessão
  • Nenhuma regra de política retornada

Exemplo CCA-T:

CCA (Código do Comando: 272, Resposta)
├── Session-Id: "pgw_c.example.com;123;456"
├── Result-Code: DIAMETER_SUCCESS (2001)
├── Origin-Host: "pcrf.example.com"
├── Origin-Realm: "example.com"
├── Auth-Application-Id: 16777238
├── CC-Request-Type: TERMINATION_REQUEST (3)
└── CC-Request-Number: 1

Regras de Política e Cobrança

Estrutura da Regra PCC

Uma Regra PCC (Controle de Política e Cobrança) define como lidar com fluxos de tráfego específicos:

Componentes da Regra

1. Nome da Regra:

  • Identificador único para a regra
  • Exemplo: "video_streaming_rule"

2. Precedência:

  • Número menor = maior prioridade
  • Intervalo: 0-65535
  • Usado quando várias regras correspondem

3. Filtros de Fluxo (TFT - Modelo de Fluxo de Tráfego):

  • Define quais pacotes correspondem a esta regra
  • Exemplos:
    • Tupla IP 5: Protocolo, IP Src/Dst, Porta Src/Dst
    • "permit out ip from any to 8.8.8.8 80"

4. Informações de QoS:

  • QCI (Identificador de Classe de QoS): 1-9 (padronizado), 128-254 (específico do operador)
    • QCI 1: Voz Conversacional
    • QCI 5: Sinalização IMS
    • QCI 9: Internet Padrão
  • ARP (Prioridade de Alocação e Retenção): Capacidade de preempção
  • MBR/GBR: Taxas de Bits Máximas/Garantidas

5. Informações de Cobrança:

  • Grupo de Avaliação: Identifica a categoria de cobrança (usado pelo OCS - veja Interface Diameter Gy)
  • Método de Medição: Baseado em volume, tempo ou evento
  • Cobrança Online/Offline: OCS (pré-pago via Diameter Gy) vs. CDRs offline (pós-pago - veja Formato de CDR de Dados)

6. Status de Gating:

  • ABERTO: Permitir tráfego
  • FECHADO: Bloquear tráfego

Provisionamento Dinâmico de Regras

O PCRF pode fornecer regras de duas maneiras:

1. Regras Predefinidas (por nome):

Charging-Rule-Install (Agrupado)
├── Charging-Rule-Name: "gold_subscriber_internet"
└── Charging-Rule-Name: "video_qos_boost"

2. Regras Dinâmicas (definição inline):

Charging-Rule-Definition (Agrupado)
├── Charging-Rule-Name: "dynamic_rule_123"
├── Precedence: 100
├── Flow-Information (Agrupado)
│ ├── Flow-Description: "permit out ip from any to 192.0.2.0/24"
│ └── Flow-Direction: DOWNLINK
├── QoS-Information (Agrupado)
│ ├── QoS-Class-Identifier: 5
│ ├── Max-Requested-Bandwidth-UL: 10000000
│ └── Max-Requested-Bandwidth-DL: 50000000
└── Rating-Group: 1000

AVP de Informações de QoS

APN-AMBR (Taxa de Bits Máxima Agregada):

Aplica-se a todos os portadores não-GBR para esta APN:

QoS-Information (Agrupado)
├── APN-Aggregate-Max-Bitrate-UL: 100000000 # 100 Mbps
└── APN-Aggregate-Max-Bitrate-DL: 200000000 # 200 Mbps

Resposta do PGW-C:

  • Atualiza o estado interno do AMBR
  • Envia uma Solicitação de Modificação de Sessão ao PGW-U com o QER atualizado

Relatório de Mudança de Localização

O PGW-C pode notificar o PCRF quando a localização do assinante, tecnologia de acesso rádio (RAT), PLMN de serviço ou fuso horário do UE mudam durante a vida de uma sessão. A mudança é transportada em um CCR-Update como o 3GPP-User-Location-Info e AVPs relacionados.

O relatório é opt-in (controlado pelo PCRF)

Esse relatório é condicional à solicitação do PCRF — exatamente como exigido pelo 3GPP TS 29.212 §4.5.7 / §5.3.7. O PCRF arma os eventos que deseja ouvir incluindo um ou mais AVPs Event-Trigger em um CCA (ou em um RAR). O PGW-C armazena o conjunto armado por sessão Gx e só envia um CCR-Update quando:

  1. a condição de um Event-Trigger armado realmente ocorre, e
  2. uma sessão Gx existe para o assinante.

Se o PCRF não armar nenhum Event-Trigger relacionado à localização, o PGW-C permanece silencioso sobre mudanças de localização — ele simplesmente atualiza seu estado interno e responde à Solicitação de Modificação de Portador GTP-C. Isso mantém a interface silenciosa para PCRFs que não se importam com mobilidade e em conformidade para aqueles que se importam.

O conjunto armado pode mudar a qualquer momento durante a sessão. O PGW-C o atualiza a partir de cada conjunto de AVPs Event-Trigger que o PCRF envia — no CCA-Initial, em um CCA-Update ou em um RAR iniciado pelo PCRF. Um conjunto de Event-Trigger presente substitui o conjunto armado atual; uma mensagem que não transporta AVP Event-Trigger deixa o conjunto armado inalterado. Assim, um PCRF pode iniciar uma sessão sem relatório de localização e depois ativá-lo (ou desativá-lo) com um RAR, e vice-versa.

Event-Triggers Suportados

Event-TriggerValorDispara quando…AVP Reportado
RAT_CHANGE2Mudanças no tipo RAT (por exemplo, EUTRAN → UTRAN)RAT-Type
PLMN_CHANGE4Mudanças na rede de serviço (MCC/MNC)3GPP-SGSN-MCC-MNC
USER_LOCATION_CHANGE13Qualquer mudança nas Informações de Localização do Usuário3GPP-User-Location-Info
UE_TIME_ZONE_CHANGE25Mudanças no fuso horário do UE3GPP-MS-TimeZone
TAI_CHANGE26Mudanças na Identidade da Área de Rastreamento3GPP-User-Location-Info
ECGI_CHANGE27Mudanças na Identidade Global da Célula E-UTRAN3GPP-User-Location-Info

Múltiplos triggers podem disparar ao mesmo tempo (por exemplo, mover para uma nova célula em uma nova área de rastreamento dispara USER_LOCATION_CHANGE, TAI_CHANGE e ECGI_CHANGE); todos os triggers disparados e armados são listados nos AVPs Event-Trigger do CCR-Update.

De onde vem a localização

  • CCR-Initial agora inclui o 3GPP-User-Location-Info inicial do assinante, dando ao PCRF uma linha de base.
  • Durante a sessão, uma Solicitação de Modificação de Portador GTP-C (S5/S8) transporta as Informações de Localização do Usuário atualizadas, RAT-Type, Rede de Serviço e Fuso Horário do UE. O PGW-C analisa esses dados, compara-os com os valores armazenados e relata qualquer mudança armada.
  • IEs ausentes de uma Solicitação de Modificação de Portador mantêm seu valor anterior, de modo que uma Solicitação de Modificação de Portador parcial nunca parece uma mudança de localização espúria.

Codificação do 3GPP-User-Location-Info

O AVP é codificado de acordo com 3GPP TS 29.061 §16.4.7.2: um tipo de Localização Geográfica de um octeto seguido pelos campos de localização, com identidades PLMN codificadas de acordo com 3GPP TS 24.008 §10.5.1.3. Tipos suportados:

TipoValorConteúdo
CGI0PLMN + LAC + CI (2G)
SAI1PLMN + LAC + SAC (3G)
RAI2PLMN + LAC + RAC
TAI128PLMN + TAC (LTE)
ECGI129PLMN + ECI (LTE)
TAI e ECGI130PLMN + TAC + PLMN + ECI (LTE, preferido)

Fluxo de Mensagens

Robustez: relatar a mudança ao PCRF nunca bloqueia a Resposta de Modificação de Portador GTP-C. Se o CCR-Update expirar ou o PCRF retornar um erro, o PGW-C registra e ainda responde ao SGW-C — o caminho de dados do assinante não é interrompido por uma falha de relatório de política.

Inspecionando os triggers armados via API

A API de Sessões (GET /api/sessions e GET /api/sessions/:imsi) retorna um despejo completo e seguro em JSON da sessão sob a chave state, além dos campos de nível superior curados. Os Event-Triggers armados pelo PCRF são visíveis em state.gx.requested_event_triggers, juntamente com o restante do estado da sessão Gx (session_id, cc_request_number, host/reino de destino) e o atual state.uli. Isso torna possível confirmar a partir de ferramentas de operações se um assinante está realmente inscrito para o relatório de localização.

Substituindo os triggers armados via API

O conjunto armado também pode ser alterado diretamente em uma sessão ativa com PATCH /api/sessions/:imsi (útil para testar o recurso sem um PCRF, ou para forçar o relatório ligado/desligado). O corpo é mesclado profundamente no estado da sessão, então o caminho reflete a estrutura retornada por GET — os triggers armados vivem sob gx:

PATCH /api/sessions/310260000000001
Content-Type: application/json

{ "gx": { "requested_event_triggers": [13, 26, 27] } }
  • O valor é uma lista de códigos de Event-Trigger Gx; ele substitui o conjunto armado (outros campos gx são deixados inalterados pela mesclagem).
  • Uma lista vazia ([]) desarma todo o relatório de localização para a sessão.
  • A resposta ecoa o estado da sessão atualizado e sanitizado.

Este endpoint não possui proteções: o corpo é mesclado profundamente na sessão ativa, então qualquer campo pode ser alterado — incluindo para um valor que quebra a sessão. Alterações que têm efeitos a jusante são propagadas para o UPF. Atualizar o APN-AMBR ou a QoS do portador padrão recalcula o QER do portador padrão (QCI / MBR / GBR) e o empurra como um QER de Atualização em uma Modificação de Sessão PFCP:

PATCH /api/sessions/310260000000001
Content-Type: application/json

{ "ambr": { "uplink": 200000, "downlink": 200000 } }
PATCH /api/sessions/310260000000001
Content-Type: application/json

{ "default_bearer_qos": { "qci": 5, "mbr_ul": 300000, "mbr_dl": 250000 } }

Quando default_bearer_qos fornece MBR/GBR explícitos (portadores GBR), esses dirigem os limites de taxa do QER; caso contrário, o APN-AMBR é usado como o MBR do portador padrão.

Nota: substituir os triggers armados altera a visão local do PGW-C sobre o que o PCRF armou. O PCRF ainda pode rearmar o conjunto mais tarde via um CCA ou RAR, o que substituirá uma substituição manual.


Configuração

Configuração Básica do Gx

Edite config/runtime.exs:

config :pgw_c,
diameter: %{
# Endereço IP para escutar conexões Diameter
listen_ip: "0.0.0.0",

# Identidade Diameter do PGW-C (Origin-Host)
host: "omni-pgw_c.epc.mnc999.mcc999.3gppnetwork.org",

# Reino Diameter do PGW-C (Origin-Realm)
realm: "epc.mnc999.mcc999.3gppnetwork.org",

# Lista de pares PCRF
peer_list: [
%{
# Identidade Diameter do PCRF
host: "pcrf.epc.mnc999.mcc999.3gppnetwork.org",

# Reino do PCRF (geralmente o mesmo que o reino do PGW-C)
realm: "epc.mnc999.mcc999.3gppnetwork.org",

# Endereço IP do PCRF
ip: "10.0.0.30",

# Se o PGW-C inicia a conexão com o PCRF
# true = PGW-C conecta ao PCRF
# false = Espera o PCRF se conectar
initiate_connection: true
}
]
}

Múltiplos Pares PCRF

Para redundância ou distribuição geográfica:

config :pgw_c,
diameter: %{
listen_ip: "0.0.0.0",
host: "omni-pgw_c.epc.mnc999.mcc999.3gppnetwork.org",
realm: "epc.mnc999.mcc999.3gppnetwork.org",
peer_list: [
%{
host: "pcrf-primary.example.com",
realm: "epc.mnc999.mcc999.3gppnetwork.org",
ip: "10.0.1.30",
initiate_connection: true
},
%{
host: "pcrf-backup.example.com",
realm: "epc.mnc999.mcc999.3gppnetwork.org",
ip: "10.0.2.30",
initiate_connection: true
}
]
}

Balanceamento de Carga:

  • O protocolo Diameter lida com a seleção de pares
  • Solicitações distribuídas com base na disponibilidade
  • Failover automático em caso de falha do par

Resolução de Nome de Host

Identidades Diameter devem ser FQDNs (Nomes de Domínio Totalmente Qualificados):

# CORRETO - formato FQDN
host: "pgw_c.epc.mnc999.mcc999.3gppnetwork.org"

# INCORRETO - Não é uma Identidade Diameter válida
host: "pgw_c"
host: "10.0.0.20" # Endereços IP não são permitidos

Formato do Reino:

  • Deve ser um nome de domínio válido
  • Normalmente corresponde ao formato PLMN 3GPP: epc.mncXXX.mccYYY.3gppnetwork.org

Fluxos de Mensagens

Estabelecimento de Sessão Bem-Sucedido

Nota: Os parâmetros de QoS do PCRF são traduzidos em QERs (Regras de Aplicação de QoS) e programados no PGW-U via PFCP. Veja Interface PFCP para detalhes do QER.

Atualização de Política (Iniciada pela Rede)

Término da Sessão


Tratamento de Erros

Códigos de Resultado

O PGW-C lida com vários códigos de resultado Diameter nas mensagens CCA:

Códigos de Sucesso:

CódigoNomeAção
2001DIAMETER_SUCCESSContinuar o estabelecimento da sessão

Falhas Permanentes (5xxx):

CódigoNomeAção do PGW-C
5002DIAMETER_UNKNOWN_SESSION_IDRegistrar erro, falhar sessão
5030DIAMETER_USER_UNKNOWNRejeitar sessão (Usuário Desconhecido)
5140DIAMETER_ERROR_INITIAL_PARAMETERSRegistrar erro, tentar novamente ou falhar
5003DIAMETER_AUTHORIZATION_REJECTEDRejeitar sessão (Não Autorizado)

Falhas Transitórias (4xxx):

CódigoNomeAção do PGW-C
4001DIAMETER_AUTHENTICATION_REJECTEDTentar novamente ou falhar sessão
4010DIAMETER_TOO_BUSYTentar novamente com espera
4012DIAMETER_UNABLE_TO_COMPLYRegistrar erro, pode tentar novamente

Códigos de Resultado Experimentais

Códigos de erro específicos do fornecedor:

Experimental-Result (Agrupado)
├── Vendor-Id: 10415 (3GPP)
└── Experimental-Result-Code: <código específico do fornecedor>

Códigos Experimentais Comuns do 3GPP:

CódigoNomeSignificado
5065IP_CAN_SESSION_NOT_AVAILABLEPCRF não pode estabelecer sessão
5143INVALID_SERVICE_INFORMATIONDados de serviço inválidos

Tratamento de Timeouts

Timeout do CCR-I:

Se o PCRF não responder ao CCR-Initial dentro do timeout:

1. PGW-C aguarda o timeout configurado (por exemplo, 5 segundos)
2. Se nenhum CCA recebido:
- Registrar: "timeout CCR-Initial para Session-ID: ..."
- Responder ao SGW-C com causa de erro
- Limpar recursos alocados
3. SGW-C recebe: Resposta de Criação de Sessão (Causa: Par Remoto Não Respondendo)

Resposta de Erro ao SGW-C:

Quando o CCR-Initial expira, o PGW-C envia uma Resposta de Criação de Sessão com o código de causa :remote_peer_not_responding para o SGW-C.

Cenários de Falha

Cenário 1: PCRF Rejeita a Sessão (Usuário Desconhecido)

Cenário 2: PCRF Temporariamente Indisponível


Solução de Problemas

Problemas Comuns

1. Falha na Conexão do Par Diameter

Sintomas:

  • Log: "Par Diameter não conectado"
  • Nenhum CCR-Initial enviado

Possíveis Causas:

  • PCRF não acessível
  • IP do PCRF incorreto na configuração
  • Firewall bloqueando a porta Diameter (3868)
  • Identidades Diameter incorretas (host/reino)

Resolução:

# Testar conectividade de rede
ping <pcrf_ip>

# Testar porta Diameter (TCP 3868)
telnet <pcrf_ip> 3868

# Verificar configuração da identidade Diameter
# Garantir que host e reino sejam FQDNs, não IPs

Verificar Configuração:

config :pgw_c,
diameter: %{
# Deve ser FQDN, não IP
host: "pgw_c.epc.mnc999.mcc999.3gppnetwork.org",
realm: "epc.mnc999.mcc999.3gppnetwork.org",
peer_list: [
%{
host: "pcrf.epc.mnc999.mcc999.3gppnetwork.org",
ip: "10.0.0.30"
}
]
}

2. Timeouts do CCR-Initial

Sintomas:

  • Falha na Solicitação de Criação de Sessão
  • Log: "timeout CCR-Initial"

Possíveis Causas:

  • PCRF sobrecarregado
  • Latência de rede
  • PCRF não respondendo a este Session-ID

Resolução:

  1. Verificar logs do PCRF para erros
  2. Verificar se o PCRF está processando solicitações
  3. Verificar latência da rede: ping <pcrf_ip>
  4. Aumentar o timeout se a latência da rede for alta

3. Sessões Rejeitadas pelo PCRF

Sintomas:

  • CCA-Initial com Result-Code != 2001
  • Falha na Resposta de Criação de Sessão

Códigos de Resultado Comuns:

Código de ResultadoCausa ProvávelResolução
5030IMSI não no banco de dados de assinantesProvisionar assinante no HSS/SPR
5003Autorização rejeitadaVerificar permissões do assinante
4010PCRF muito ocupadoTentar novamente ou adicionar capacidade ao PCRF

Verificar Logs:

# Logs do PGW-C mostram:
[error] Erro Diameter Gx: Result-Code 5030 (DIAMETER_USER_UNKNOWN)
[error] IMSI 310260999999999 rejeitado pelo PCRF

4. QoS Não Aplicada

Sintomas:

  • Sessão estabelecida, mas QoS errada
  • Taxas de bits não correspondem aos valores esperados

Etapas de Depuração:

  1. Verificar CCA-Initial:

    • Verificar se o AVP QoS-Information está presente
    • Verificar os valores de APN-Aggregate-Max-Bitrate-UL/DL
  2. Verificar Estabelecimento de Sessão PFCP:

    • Verificar se o QER foi criado com os valores de MBR corretos
    • Verificar logs do PGW-U para instalação do QER
  3. Verificar Política do PCRF:

    • Verificar configuração do PCRF
    • Verificar se o perfil do assinante inclui QoS correta

5. Problemas de Roteamento Diameter

Sintomas:

  • Mensagens Diameter não chegam ao PCRF
  • Log: "Sem rota para Destination-Realm"

Causa:

  • Desvio entre configuração e mensagens

Resolução:

Garantir consistência:

# Todos devem corresponder
config :pgw_c,
diameter: %{
realm: "epc.mnc999.mcc999.3gppnetwork.org", # Reino do PGW-C
peer_list: [
%{
realm: "epc.mnc999.mcc999.3gppnetwork.org" # Reino do PCRF (geralmente o mesmo)
}
]
}

No CCR-Initial:

Origin-Realm: "epc.mnc999.mcc999.3gppnetwork.org"
Destination-Realm: "epc.mnc999.mcc999.3gppnetwork.org"

Monitorando a Saúde do Gx

Métricas Chave:

# Taxas de mensagens Gx
rate(gx_inbound_messages_total{message_type="gx_CCA"}[5m])
rate(gx_outbound_messages_total{message_type="gx_CCR"}[5m])

# Taxas de erro Gx
rate(gx_inbound_errors_total[5m])

# Taxa de sucesso de respostas Gx (nova métrica)
sum(rate(gx_outbound_responses_total{result_code_class="2xxx"}[5m])) /
sum(rate(gx_outbound_responses_total[5m])) * 100

# Falhas de resposta Gx por host do PCRF
rate(gx_outbound_responses_total{result_code_class!="2xxx"}[5m]) by (diameter_host)

# Contagem de sessões Gx
session_id_registry_count

# Duração do tratamento de mensagens Gx
histogram_quantile(0.95, rate(gx_inbound_handling_duration_bucket[5m]))

Métricas de Resposta por Classe de Código de Resultado:

A métrica gx_outbound_responses_total fornece visibilidade detalhada sobre as respostas Diameter enviadas para pares PCRF, categorizadas por:

  • message_type: Tipo de mensagem de resposta (gx_RAA, gx_CCA)
  • result_code_class: Categoria do código de resultado (2xxx, 3xxx, 4xxx, 5xxx)
  • diameter_host: Par PCRF recebendo a resposta

Exemplos de Alertas:

# Alerta sobre alta taxa de erro Gx
- alert: GxErrorRateHigh
expr: rate(gx_inbound_errors_total[5m]) > 0.1
for: 5m
annotations:
summary: "Alta taxa de erro Gx detectada"

# Alerta sobre alta taxa de falhas de resposta Gx
- alert: GxResponseFailureRate
expr: |
sum(rate(gx_outbound_responses_total{result_code_class!="2xxx"}[5m])) /
sum(rate(gx_outbound_responses_total[5m])) > 0.1
for: 5m
annotations:
summary: "Alta taxa de falhas de resposta Gx"
description: "Mais de 10% das respostas Gx são falhas"

# Alerta sobre falhas específicas do PCRF
- alert: GxPCRFFailures
expr: rate(gx_outbound_responses_total{result_code_class=~"4xxx|5xxx"}[5m]) by (diameter_host) > 0.05
for: 3m
annotations:
summary: "PCRF {{ $labels.diameter_host }} recebendo respostas de falha"
description: "Alta taxa de falha para o host PCRF"

# Alerta sobre rejeição de sessão
- alert: GxSessionRejection
expr: rate(gx_inbound_errors_total{result_code="5030"}[5m]) > 0.01
for: 5m
annotations:
summary: "PCRF rejeitando sessões (USER_UNKNOWN)"

Registro de Depuração

Ativar registro verbose do Diameter:

# config/runtime.exs
config :logger, level: :debug

# Ou em tempo de execução
iex> Logger.configure(level: :debug)

Procurar por:

  • [debug] Enviando CCR-Initial para Session-ID: ...
  • [debug] Recebido CCA-Initial: Result-Code 2001
  • [error] Erro Diameter: ...

Monitoramento de Pares Diameter

A conectividade Diameter Gx com o PCRF é monitorada através da API OAM REST. A API é servida sobre HTTPS/TLS em https://<host>:8443 com todas as rotas sob o prefixo /api. A documentação interativa da API (Swagger UI) está disponível em https://<host>:8443/api/docs.

Endpoints de Par Diameter

GET /api/diameter                     # todos os pares configurados + estado ao vivo
GET /api/diameter?status=disconnected # filtrar por estado de conexão
GET /api/diameter/<origin-host> # um par por Origin-Host

Exemplo:

curl -k https://localhost:8443/api/diameter

GET /api/diameter retorna cada par Diameter configurado e seu estado de conexão atual. Adicione ?status=connected ou ?status=disconnected para filtrar por estado de conexão, ou anexe o Origin-Host do par a GET /api/diameter/<origin-host> para buscar um único par.

Para cada par, os seguintes campos são retornados:

CampoDescrição
hostIdentidade Diameter (Origin-Host) do par
statusEstado da conexão (por exemplo, Conectado / Desconectado / Conectando)
ipEndereço IP do par
portPorta do par
transportTCP ou SCTP
connection_initiationSe o OmniPGW inicia (saída) ou aceita (entrada) a conexão
realmReino Diameter reportado pelo par no CEA
product_nameString do produto do fornecedor reportada pelo par no CEA
application_idsIDs de aplicação Diameter negociados no CEA (Gx = 16777238)

Uma implantação saudável mostra todos os pares PCRF configurados como Conectados. A perda de todos os pares Gx impede a instalação de políticas e bloqueia a criação de novas sessões.

Casos de Uso Operacionais

Monitorar Conectividade do PCRF:

curl -k https://localhost:8443/api/diameter

Verifique se todos os pares PCRF mostram Conectado, se connection_initiation corresponde à configuração, e se application_ids incluem Gx (16777238).

Solução de Problemas de Falhas na Criação de Sessões (Problemas Gx): Quando sessões de usuários falham com erros de "timeout do PCRF", consulte o par afetado:

curl -k https://localhost:8443/api/diameter/<origin-host>
  • status é Disconnected → verifique a conectividade de rede, verifique se o PCRF está em execução e confirme se as regras de firewall permitem TCP 3868.
  • status é Connected, mas as sessões ainda falham → o problema está no nível da aplicação (verifique os logs); o PCRF pode estar rejeitando assinantes.

Verificar Configuração Diameter: Após configurar um novo par PCRF, confirme se ele aparece e alcança Connected:

curl -k https://localhost:8443/api/diameter/<origin-host>

Verifique se realm corresponde à configuração, se application_ids incluem Gx, e se product_name mostra o identificador esperado do PCRF.

Monitorar Failover: Quando um PCRF primário falha, GET /api/diameter?status=disconnected lista-o como Disconnected enquanto o PCRF de backup permanece Connected. Novas sessões usam automaticamente o backup; quando o primário se recupera, seu status retorna a Connected.

Detectar Problemas de Roteamento Diameter:

  • O par mostra Connected, mas realm está errado
  • application_ids não inclui Gx (16777238)
  • product_name não corresponde ao esperado do PCRF

Identificar Incompatibilidades de Configuração: Se connection_initiation reporta que o par está iniciando enquanto a configuração define initiate_connection: true, ambos os lados estão tentando iniciar, o que pode causar condições de corrida de conexão.

Integração com Métricas

A API OAM fornece o estado do par em tempo real; combine-a com o Prometheus para:

  • Taxas históricas de erro Gx
  • Contagens de mensagens CCR/CCA
  • Tendências de latência

GET /api/diameter responde "Está funcionando agora?"; métricas respondem "Como tem funcionado ao longo do tempo?"


Documentação Relacionada

Configuração e Política

Integração de Cobrança

Operações


Voltar ao Guia de Operações