OmniNRF
OmniNRF implementa la Función de Repositorio de Red (NRF) del núcleo 5G. El NRF es el registro central y directorio de servicios de la Arquitectura Basada en Servicios (SBA): cada otra Función de Red (NF) registra su perfil con el NRF al inicio, mantiene esa inscripción activa con latidos periódicos y consulta al NRF para descubrir los puntos finales de las NFs con las que necesita comunicarse.
OmniNRF expone dos servicios SBI. Nnrf_NFManagement (nnrf-nfm/v1) maneja el registro, actualización, latido, desregistro, recuperación y suscripciones/notificaciones de cambios de estado de NF. Nnrf_NFDiscovery (nnrf-disc/v1) maneja la resolución de instancias de NF objetivo por tipo, servicio, S-NSSAI, DNN y PLMN. Todos los perfiles de NF y suscripciones se mantienen en almacenes en memoria (ETS); no hay base de datos externa, por lo que el registro se reconstruye a medida que las NFs se vuelven a registrar después de un reinicio del NRF. Un barrido en segundo plano elimina continuamente las instancias de NF que han dejado de enviar latidos, por lo que el registro solo publicita NFs que están demostrablemente activas.
Documentación
- Guía de Operaciones - Rol de 3GPP, puntos finales de SBI y los procedimientos clave de registro, descubrimiento y suscripción con diagramas de secuencia.
- Referencia de Configuración - Referencia completa de configuración en tiempo de ejecución, tablas de parámetros, API de gestión/OAM y registro.
- Métricas - Métricas de Prometheus para registros, descubrimiento, latidos y salud de BEAM VM, con ejemplo de PromQL.
- Resolución de Problemas - Problemas comunes y sus resoluciones.
Descripción General de la Arquitectura
El NRF se sitúa en el centro de la SBA. Los productores (UDM, AUSF, PCF, …) se registran para que puedan ser encontrados; los consumidores (AMF, SMF, NSSF, …) los descubren. Cualquier NF puede ser ambos, y todos ellos envían latidos.
Descripción General de las Características
- Nnrf_NFManagement: registrar (PUT), latido y actualización JSON-Patch (PATCH, RFC 6902 con rutas JSON-Pointer anidadas), desregistrar (DELETE), recuperación única y lista (GET). La lista de instancias de NF se devuelve como una
3gppHal+jsonUriList con filtrado pornf-typey paginación delimit/page-number/page-size. - Nnrf_NFDiscovery: filtrado por tipo de NF, nombres de servicios, PLMN, S-NSSAI y DNN; ordenación de resultados por prioridad/capacidad/carga; paginación
offset/limitcon un encabezadoLink: rel="next". - Envejecimiento de latidos: un barrido continuo en segundo plano expira NFs que permanecen en silencio más de
heartbeat_timeouty notifica a los suscriptores. - Suscripciones de estado: filtrado
subscrCond.nfType, notificacionesNF_REGISTEREDllevan elnfProfilecompleto, expiración automática opcional basada envalidityTime. - Control de concurrencia:
ETagen respuestas de instancias de NF;If-Matchcondicional en PUT/PATCH (412 en caso de desajuste). - Aplicación de tipo de contenido: los cuerpos PATCH deben ser
application/json-patch+json(415 de lo contrario); se tolera la ausencia de Content-Type para clientes de latido simples. - Registro JSON estructurado con metadatos por solicitud (ID de instancia de NF, procedimiento).
- Métricas de Prometheus para registros, descubrimiento, latidos y salud de BEAM VM.
Inicio Rápido
OmniNRF lee su configuración de operador desde config/runtime.exs, que mapea variables de entorno en el entorno de la aplicación :omninrf.
import Config
config :omninrf,
sbi_addr: System.get_env("SBI_ADDR", "127.0.0.1"),
sbi_port: String.to_integer(System.get_env("SBI_PORT", "7777")),
mcc: System.get_env("MCC", "999"),
mnc: System.get_env("MNC", "70"),
heartbeat_timeout: String.to_integer(System.get_env("HEARTBEAT_TIMEOUT", "30000")),
prometheus_metrics_port: String.to_integer(System.get_env("PROMETHEUS_PORT", "9568"))
config :logger, :default_formatter,
format: {OmniLogger.JsonFormatter, :format},
metadata: :all
SBI_ADDRtiene como valor predeterminado127.0.0.1(bucle). En cualquier implementación de múltiples hosts o contenedores, esto debe ser sobrescrito con una dirección que las otras NFs puedan alcanzar, de lo contrario, ninguna NF podrá registrarse o descubrirse.
La referencia completa de parámetros, incluyendo cada variable de entorno y su valor predeterminado, se encuentra en la Referencia de Configuración.