OmniSMF
OmniSMF implementa a Função de Gerenciamento de Sessão (SMF) do Core 5G. O SMF possui todo o ciclo de vida das sessões PDU: alocação de endereços IP do UE, associação de políticas, programação e desmontagem do plano do usuário. Ele ancla a interface N4 (PFCP) em direção ao UPF, a interface N7 em direção ao PCF, a interface N10 em direção ao UDM, a interface N11 em direção ao AMF, e a interface de cobrança convergente N40 (Nchf) em direção ao CHF, e também serve como um caminho de interconexão interno N26 em direção ao PGW-C autônomo para mobilidade 4G/5G.
Cada sessão PDU é gerenciada por um processo de trabalhador de sessão dedicado sob um supervisor dinâmico (modelo de processo por sessão). Todo o estado da sessão (fluxos QoS, contexto PFCP, IP do UE, estado da conexão do plano do usuário) é de propriedade desse trabalhador, de modo que uma falha em uma sessão não afete as outras. Chamadas SBI de saída são feitas para URIs estáticas configuradas na inicialização; o SMF se registra no NRF e envia batimentos cardíacos, mas não realiza descoberta baseada em NRF para suas chamadas de saída.
Documentação
- Guia de Operações - papel 3GPP, interfaces SBI e N4, e os principais procedimentos de estabelecimento, modificação, liberação, solicitação de serviço e interconexão N26 da sessão PDU com diagramas de sequência.
- Referência de Configuração - Referência completa de configuração em tempo de execução, tabelas de parâmetros, pool de IP do UE e configuração PCO/P-CSCF, API de gerenciamento/OAM e registro.
- Métricas - Métricas Prometheus para sessões PDU, PFCP/UPF, registro NRF e saúde da VM BEAM, com exemplo PromQL.
- Solução de Problemas - Problemas comuns e suas resoluções.
Visão Geral da Arquitetura
Visão Geral dos Recursos
- Ciclo de vida da sessão PDU: estabelecimento, modificação, liberação e reativação de solicitação de serviço do UE ocioso, cada sessão é de propriedade de um processo de trabalhador dedicado.
- Pools de IP do UE cientes de DNN com correspondência exata/regex/padrão, múltiplos intervalos IPv4/IPv6 por DNN, alocação aleatória, deduplicação e liberação segura contra vazamentos em qualquer saída de trabalhador.
- IP estático do assinante respeitado a partir do UDM/UDR e reservado contra os pools.
- Reconciliação do tipo de sessão PDU: solicitações de pilha dupla atendidas a partir de um pool de uma única família são sinalizadas como essa família com a causa 5GSM correta (#50/#51).
- P-CSCF / PCO para VoNR: descoberta DNS SRV com verificação de saúde SIP OPTIONS mais fallback estático; paridade PCO com o PGW-C 4G.
- Fluxos QoS GBR dedicados (5QI-1): caminhos estáticos (provisionados) e dinâmicos (dirigidos por chamada via notificação de política do PCF), além de modificação de fluxo QoS pós-estabelecimento.
- N4 / PFCP: configuração de associação com batimentos cardíacos e estabelecimento, modificação e exclusão de sessão completos.
- N40 / Nchf cobrança convergente: atua como um consumidor de cobrança em direção ao CHF, abrindo uma Solicitação de Dados de Cobrança quando uma sessão PDU é estabelecida, atualizando-a durante a sessão a partir de relatórios de uso N4 URR e fechando-a na liberação. O CHF é resolvido via descoberta NRF com um URI de fallback estático. Desativado por padrão e ativado via configuração.
- Interconexão N26 EPS: adoção/troca/busca com preservação do IP do UE em 4G/5G.
- Tratamento do estado de transferência: transições
hoState(PREPARANDO / PREPARADO / COMPLETADO / CANCELADO) com reativação do plano do usuário na conclusão. - Registro JSON estruturado com metadados por sessão e um exportador de métricas Prometheus.
Início Rápido
OmniSMF lê sua configuração de operador de config/runtime.exs, que mapeia variáveis de ambiente no ambiente da aplicação :omnismf.
import Config
config :omnismf,
sbi_addr: System.get_env("SBI_ADDR", "127.0.0.4"),
sbi_port: String.to_integer(System.get_env("SBI_PORT", "7777")),
udm_uri: System.get_env("UDM_URI", "http://127.0.0.12:7777"),
pcf_uri: System.get_env("PCF_URI", "http://127.0.0.13:7777"),
amf_uri: System.get_env("AMF_URI", "http://127.0.0.5:7777"),
upf_addr: System.get_env("UPF_ADDR", "10.179.1.24"),
upf_pfcp_port: String.to_integer(System.get_env("UPF_PFCP_PORT", "8805")),
pfcp_addr: System.get_env("PFCP_ADDR", "0.0.0.0"),
mcc: System.get_env("MCC", "999"),
mnc: System.get_env("MNC", "70"),
ue_ip_pool: [subnet_map: %{default: ["10.45.0.0/16"]}]
config :logger, :default_formatter,
format: {OmniLogger.JsonFormatter, :format},
metadata: :all
sbi_addrepfcp_addrpadrão para loopback / todas as interfaces, respectivamente. Em qualquer implantação multi-host ou em contêiner,sbi_addrdeve ser um endereço que o AMF/PCF possa alcançar,pfcp_addrdeve ser roteável a partir do UPF, eupf_addrdeve apontar para o endpoint PFCP do UPF, caso contrário, nenhuma sessão PDU pode ser estabelecida.
A referência completa de parâmetros, incluindo cada variável de ambiente e padrão, está na Referência de Configuração.