Saltar al contenido principal

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+json UriList con filtrado por nf-type y paginación de limit/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/limit con un encabezado Link: rel="next".
  • Envejecimiento de latidos: un barrido continuo en segundo plano expira NFs que permanecen en silencio más de heartbeat_timeout y notifica a los suscriptores.
  • Suscripciones de estado: filtrado subscrCond.nfType, notificaciones NF_REGISTERED llevan el nfProfile completo, expiración automática opcional basada en validityTime.
  • Control de concurrencia: ETag en respuestas de instancias de NF; If-Match condicional 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_ADDR tiene como valor predeterminado 127.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.