OmniSMF
OmniSMF implementa la Función de Gestión de Sesiones (SMF) del núcleo 5G. El SMF posee el ciclo de vida completo de las sesiones PDU: asignación de direcciones IP a UE, asociación de políticas, programación y desmantelamiento del plano de usuario. Ancla la interfaz N4 (PFCP) hacia el UPF, la interfaz N7 hacia el PCF, la interfaz N10 hacia el UDM, la interfaz N11 hacia el AMF, y la interfaz de carga convergente N40 (Nchf) hacia el CHF, y también sirve como un camino de interconexión interno N26 hacia el PGW-C autónomo para movilidad 4G/5G.
Cada sesión PDU es gestionada por un proceso de trabajo de sesión dedicado bajo un supervisor dinámico (modelo de proceso por sesión). Todo el estado de la sesión (flujos QoS, contexto PFCP, IP de UE, estado de conexión del plano de usuario) es propiedad de ese trabajador, por lo que una sesión que falla no afecta a las demás. Las llamadas SBI salientes se realizan a URIs estáticos configurados al inicio; el SMF se registra con el NRF y envía latidos, pero no realiza descubrimiento basado en NRF para sus llamadas salientes.
Documentación
- Guía de Operaciones - rol de 3GPP, interfaces SBI y N4, y los procedimientos clave de establecimiento, modificación, liberación, solicitud de servicio y interconexión N26 de sesiones PDU con diagramas de secuencia.
- Referencia de Configuración - referencia completa de configuración en tiempo de ejecución, tablas de parámetros, grupo de IP de UE y configuración de PCO/P-CSCF, API de gestión/OAM y registro.
- Métricas - métricas de Prometheus para sesiones PDU, PFCP/UPF, registro NRF y salud de BEAM VM, con ejemplo de PromQL.
- Resolución de Problemas - problemas comunes y sus resoluciones.
Visión General de la Arquitectura
Visión General de las Características
- Ciclo de vida de la sesión PDU: establecimiento, modificación, liberación y reactivación de solicitud de servicio / inactividad de UE, cada sesión es propiedad de un proceso de trabajo dedicado.
- Grupos de IP de UE conscientes de DNN con coincidencia exacta/regex/default, múltiples rangos IPv4/IPv6 por DNN, asignación aleatoria, deduplicación y liberación segura contra fugas en cualquier salida de trabajador.
- IP estática de suscriptor respetada desde el UDM/UDR y reservada contra los grupos.
- Reconciliación de tipo de sesión PDU: solicitudes de doble pila servidas desde un grupo de una sola familia son señaladas como esa familia con la causa 5GSM correcta (#50/#51).
- P-CSCF / PCO para VoNR: descubrimiento DNS SRV con verificación de salud SIP OPTIONS más retroceso estático; paridad de PCO con el PGW-C 4G.
- Flujos QoS GBR dedicados (5QI-1): caminos estáticos (provisionados) y dinámicos (impulsados por llamadas a través de notificación de políticas de PCF), más modificación de flujo QoS posterior al establecimiento.
- N4 / PFCP: configuración de asociación con latidos y establecimiento, modificación y eliminación de sesión completa.
- N40 / Nchf carga convergente: actúa como consumidor de carga hacia el CHF, abriendo una Solicitud de Datos de Carga cuando se establece una sesión PDU, actualizándola durante la sesión a partir de informes de uso N4 URR, y cerrándola en la liberación. El CHF se resuelve mediante descubrimiento NRF con un URI de retroceso estático. Deshabilitado por defecto y habilitado a través de configuración.
- Interconexión N26 EPS: adopción/cambio/búsqueda con preservación de IP de UE a través de 4G/5G.
- Manejo del estado de traspaso: transiciones
hoState(PREPARANDO / PREPARADO / COMPLETADO / CANCELADO) con reactivación del plano de usuario al completar. - Registro JSON estructurado con metadatos por sesión y un exportador de métricas de Prometheus.
Inicio Rápido
OmniSMF lee su configuración de operador desde config/runtime.exs, que mapea variables de entorno en el entorno de la aplicación :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_addrypfcp_addrse configuran por defecto a bucle invertido / todas las interfaces respectivamente. En cualquier implementación de múltiples hosts o en contenedores,sbi_addrdebe ser una dirección a la que el AMF/PCF pueda acceder,pfcp_addrdebe ser enrutable desde el UPF, yupf_addrdebe apuntar al punto final PFCP del UPF, de lo contrario, no se puede establecer ninguna sesión PDU.
La referencia completa de parámetros, incluyendo cada variable de entorno y su valor por defecto, se encuentra en la Referencia de Configuración.