Documentação da Interface Gx do Diameter
Função de Regras de Política e Cobrança (PCRF)
Índice
- Visão Geral
- Fundamentos da Interface Gx
- Protocolo Diameter
- Mensagens de Controle de Crédito
- Regras de Política e Cobrança
- Relatório de Mudança de Localização
- Configuração
- Fluxos de Mensagens
- Tratamento de Erros
- 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ção | Descrição |
|---|---|
| Provisionamento de Política | O PCRF fornece regras de PCC definindo como lidar com o tráfego |
| Controle de QoS | Ajuste dinâmico de taxas de bits e parâmetros de QoS |
| Controle de Cobrança | Autorização de crédito para cenários pré-pagos/pós-pagos |
| Controle de Gating | Habilitar/desabilitar fluxos de tráfego com base na pol��tica |
| Monitoramento de Uso | Rastrear 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_SUCCESS3xxx- Erros de protocolo4xxx- Falhas transitórias5xxx- 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 AVP | Código do AVP | Tipo | Descrição |
|---|---|---|---|
| Session-Id | 263 | UTF8String | Identificador único da sessão Gx |
| Auth-Application-Id | 258 | Unsigned32 | 16777238 (Gx) |
| Origin-Host | 264 | DiamIdent | Identidade Diameter do PGW-C |
| Origin-Realm | 296 | DiamIdent | Reino Diameter do PGW-C |
| Destination-Realm | 283 | DiamIdent | Reino do PCRF |
| CC-Request-Type | 416 | Enumerated | 1 = INITIAL_REQUEST |
| CC-Request-Number | 415 | Unsigned32 | Número da sequência (começa em 0) |
| Subscription-Id | 443 | Grouped | Identificador do UE (IMSI/MSISDN) |
| Called-Station-Id | 30 | UTF8String | Nome da APN |
| Framed-IP-Address | 8 | OctetString | Endereço IPv4 alocado ao UE (PDNs IPv4 e IPv4v6) |
| Framed-IPv6-Prefix | 97 | OctetString | Prefixo IPv6 alocado ao UE (PDNs somente IPv6) |
| 3GPP-User-Location-Info | 22 | OctetString | ULI inicial do assinante (TS 29.061) |
| User-Equipment-Info | 458 | Grouped | Identidade do UE (por exemplo, IMEISV), quando disponível |
| IP-CAN-Type | 1027 | Enumerated | 5 = 3GPP-EPS |
| RAT-Type | 1032 | Enumerated | Mapeado do tipo RAT GTP (por exemplo, 1004 = EUTRAN) |
| QoS-Information | 1016 | Grouped | QoS atual (APN-AMBR UL/DL) |
| Default-EPS-Bearer-QoS | 1049 | Grouped | QoS do portador padrão QCI/ARP (QCI 5) |
| Network-Request-Support | 1024 | Enumerated | Procedimentos iniciados pela rede |
| Supported-Features | 628 | Grouped | Lista de recursos Gx (Rel-8/9/10 Gx) |
O AVP framed-address é selecionado pela família de endereços do UE:
Framed-IP-Addresspara IPv4 (e o IPv4 de um PDN IPv4v6),Framed-IPv6-Prefixpara 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 AVP | Código do AVP | Descrição |
|---|---|---|
| Result-Code | 268 | Sucesso (2001) ou código de erro |
| Experimental-Result | 297 | Códigos de resultado específicos do fornecedor |
| QoS-Information | 1016 | QoS autorizada (pode diferir da solicitação) |
| Charging-Rule-Install | 1001 | Regras de PCC a serem ativadas |
| Charging-Rule-Definition | 1003 | Definições de regras inline |
| Default-EPS-Bearer-QoS | 1049 | QoS 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:
- a condição de um Event-Trigger armado realmente ocorre, e
- 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-Trigger | Valor | Dispara quando… | AVP Reportado |
|---|---|---|---|
RAT_CHANGE | 2 | Mudanças no tipo RAT (por exemplo, EUTRAN → UTRAN) | RAT-Type |
PLMN_CHANGE | 4 | Mudanças na rede de serviço (MCC/MNC) | 3GPP-SGSN-MCC-MNC |
USER_LOCATION_CHANGE | 13 | Qualquer mudança nas Informações de Localização do Usuário | 3GPP-User-Location-Info |
UE_TIME_ZONE_CHANGE | 25 | Mudanças no fuso horário do UE | 3GPP-MS-TimeZone |
TAI_CHANGE | 26 | Mudanças na Identidade da Área de Rastreamento | 3GPP-User-Location-Info |
ECGI_CHANGE | 27 | Mudanças na Identidade Global da Célula E-UTRAN | 3GPP-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-Infoinicial 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:
| Tipo | Valor | Conteúdo |
|---|---|---|
| CGI | 0 | PLMN + LAC + CI (2G) |
| SAI | 1 | PLMN + LAC + SAC (3G) |
| RAI | 2 | PLMN + LAC + RAC |
| TAI | 128 | PLMN + TAC (LTE) |
| ECGI | 129 | PLMN + ECI (LTE) |
| TAI e ECGI | 130 | PLMN + 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
gxsã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ódigo | Nome | Ação |
|---|---|---|
| 2001 | DIAMETER_SUCCESS | Continuar o estabelecimento da sessão |
Falhas Permanentes (5xxx):
| Código | Nome | Ação do PGW-C |
|---|---|---|
| 5002 | DIAMETER_UNKNOWN_SESSION_ID | Registrar erro, falhar sessão |
| 5030 | DIAMETER_USER_UNKNOWN | Rejeitar sessão (Usuário Desconhecido) |
| 5140 | DIAMETER_ERROR_INITIAL_PARAMETERS | Registrar erro, tentar novamente ou falhar |
| 5003 | DIAMETER_AUTHORIZATION_REJECTED | Rejeitar sessão (Não Autorizado) |
Falhas Transitórias (4xxx):
| Código | Nome | Ação do PGW-C |
|---|---|---|
| 4001 | DIAMETER_AUTHENTICATION_REJECTED | Tentar novamente ou falhar sessão |
| 4010 | DIAMETER_TOO_BUSY | Tentar novamente com espera |
| 4012 | DIAMETER_UNABLE_TO_COMPLY | Registrar 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ódigo | Nome | Significado |
|---|---|---|
| 5065 | IP_CAN_SESSION_NOT_AVAILABLE | PCRF não pode estabelecer sessão |
| 5143 | INVALID_SERVICE_INFORMATION | Dados 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:
- Verificar logs do PCRF para erros
- Verificar se o PCRF está processando solicitações
- Verificar latência da rede:
ping <pcrf_ip> - 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 Resultado | Causa Provável | Resolução |
|---|---|---|
| 5030 | IMSI não no banco de dados de assinantes | Provisionar assinante no HSS/SPR |
| 5003 | Autorização rejeitada | Verificar permissões do assinante |
| 4010 | PCRF muito ocupado | Tentar 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:
-
Verificar CCA-Initial:
- Verificar se o AVP
QoS-Informationestá presente - Verificar os valores de
APN-Aggregate-Max-Bitrate-UL/DL
- Verificar se o AVP
-
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
-
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:
| Campo | Descrição |
|---|---|
host | Identidade Diameter (Origin-Host) do par |
status | Estado da conexão (por exemplo, Conectado / Desconectado / Conectando) |
ip | Endereço IP do par |
port | Porta do par |
transport | TCP ou SCTP |
connection_initiation | Se o OmniPGW inicia (saída) ou aceita (entrada) a conexão |
realm | Reino Diameter reportado pelo par no CEA |
product_name | String do produto do fornecedor reportada pelo par no CEA |
application_ids | IDs 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, masrealmestá errado application_idsnão inclui Gx (16777238)product_namenã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
- Guia de Configuração - Configuração Diameter, configuração de pares PCRF
- Interface PFCP - Aplicação de QoS via QERs a partir de regras de PCC
- Gerenciamento de Sessão - Ciclo de vida da sessão com integração de política
- QoS & Gerenciamento de Portadores - Configuração detalhada de QoS e configuração de portadores
Integração de Cobrança
- Interface Diameter Gy - Cobrança online acionada por regras de PCC
- Formato de CDR de Dados - Registros de cobrança offline com informações de política
- Configuração PCO - Entrega P-CSCF para controle de política IMS
Operações
- Guia de Monitoramento - Métricas Gx, rastreamento de políticas, alertas de conectividade do PCRF
- Interface S5/S8 - Integração de gerenciamento de portadores com política