Aller au contenu principal

OmniNRF

OmniNRF implémente la Fonction de Répertoire de Réseau (NRF) du cœur 5G. Le NRF est le registre central et le répertoire de services de l'Architecture Basée sur les Services (SBA) : chaque autre Fonction de Réseau (NF) enregistre son profil auprès du NRF au démarrage, maintient cette inscription active avec des signaux de vie périodiques, et interroge le NRF pour découvrir les points de terminaison des NF avec lesquels elle doit communiquer.

OmniNRF expose deux services SBI. Nnrf_NFManagement (nnrf-nfm/v1) gère l'enregistrement de profil NF, la mise à jour, le signal de vie, la désinscription, la récupération et les abonnements/notifications de changement d'état NF. Nnrf_NFDiscovery (nnrf-disc/v1) gère la résolution des instances NF cibles par type, service, S-NSSAI, DNN et PLMN. Tous les profils NF et abonnements sont conservés dans des magasins en m��moire (ETS) ; il n'y a pas de base de données externe, donc le registre est reconstruit lorsque les NF se réinscrivent après un redémarrage du NRF. Un balayage en arrière-plan expire continuellement les instances NF qui ont cessé d'envoyer des signaux de vie, de sorte que le registre ne fait jamais la publicité que des NF qui sont manifestement vivants.

Documentation

  • Guide des Opérations - rôle 3GPP, points de terminaison SBI, et les procédures clés d'enregistrement, de découverte et d'abonnement avec des diagrammes de séquence.
  • Référence de Configuration - Référence complète de configuration d'exécution, tables de paramètres, API de gestion/OAM, et journalisation.
  • Métriques - Métriques Prometheus pour les enregistrements, la découverte, les signaux de vie, et la santé de BEAM VM, avec un exemple de PromQL.
  • Dépannage - Problèmes courants et leurs résolutions.

Vue d'ensemble de l'Architecture

Le NRF se situe au centre de la SBA. Les producteurs (UDM, AUSF, PCF, …) s'enregistrent pour être trouvés ; les consommateurs (AMF, SMF, NSSF, …) les découvrent. Toute NF peut être à la fois producteur et consommateur, et tous envoient des signaux de vie.

Vue d'ensemble des Fonctionnalités

  • Nnrf_NFManagement : enregistrer (PUT), signal de vie et mise à jour JSON-Patch (PATCH, RFC 6902 avec des chemins JSON-Pointer imbriqués), désinscrire (DELETE), récupération unique et liste (GET). La liste des instances NF est renvoyée sous forme de 3gppHal+json UriList avec filtrage par nf-type et pagination par limit/page-number/page-size.
  • Nnrf_NFDiscovery : filtrage par type de NF, noms de services, PLMN, S-NSSAI et DNN ; ordonnancement des résultats par priorité/capacité/charge ; pagination offset/limit avec un en-tête Link: rel="next".
  • Vieillissement des signaux de vie : un balayage en arrière-plan continu expire les NF silencieux depuis plus longtemps que heartbeat_timeout et notifie les abonnés.
  • Abonnements d'état : filtrage par subscrCond.nfType, les notifications NF_REGISTERED portent le nfProfile complet, expiration automatique basée sur validityTime en option.
  • Contrôle de concurrence : ETag sur les réponses d'instance NF ; conditionnel If-Match sur PUT/PATCH (412 en cas de non-correspondance).
  • Application de type de contenu : les corps PATCH doivent être application/json-patch+json (415 sinon) ; un type de contenu absent est toléré pour les clients de signal de vie simples.
  • Journalisation JSON structurée avec des métadonnées par requête (ID d'instance NF, procédure).
  • Métriques Prometheus pour les enregistrements, la découverte, les signaux de vie, et la santé de BEAM VM.

Démarrage Rapide

OmniNRF lit sa configuration d'opérateur à partir de config/runtime.exs, qui mappe les variables d'environnement sur l'environnement d'application :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 par défaut à 127.0.0.1 (boucle). Dans tout déploiement multi-hôtes ou conteneurisé, cela doit être remplacé par une adresse que les autres NF peuvent atteindre, sinon aucun NF ne pourra s'enregistrer ou découvrir.

La référence complète des paramètres, y compris chaque variable d'environnement et valeur par défaut, se trouve dans la Référence de Configuration.