Aller au contenu principal

OmniSMF

OmniSMF implémente la Fonction de Gestion de Session (SMF) du cœur 5G. Le SMF possède l'intégralité du cycle de vie des sessions PDU : allocation d'adresses IP UE, association de politiques, programmation et démantèlement du plan utilisateur. Il ancre l'interface N4 (PFCP) vers le UPF, l'interface N7 vers le PCF, l'interface N10 vers le UDM, l'interface N11 vers le AMF, et l'interface de facturation convergente N40 (Nchf) vers le CHF, et il sert également un chemin d'interconnexion interne N26 vers le PGW-C autonome pour la mobilité 4G/5G.

Chaque session PDU est gérée par un processus de travail de session dédié sous un superviseur dynamique (modèle de processus par session). Tout l'état de session (flux QoS, contexte PFCP, IP UE, état de connexion du plan utilisateur) est détenu par ce travailleur, de sorte qu'un échec de session n'affecte pas les autres. Des appels SBI sortants sont effectués vers des URI statiques configurées au démarrage ; le SMF s'enregistre auprès du NRF et envoie des signaux de vie, mais ne réalise pas de découverte basée sur le NRF pour ses appels sortants.

Documentation

  • Guide des opérations - Rôle 3GPP, interfaces SBI et N4, et les procédures clés d'établissement, de modification, de libération de session PDU, de demande de service et d'interconnexion N26 avec des diagrammes de séquence.
  • Référence de configuration - Référence complète de configuration à l'exécution, tables de paramètres, pool d'IP UE et configuration PCO/P-CSCF, API de gestion/OAM, et journalisation.
  • Métriques - Métriques Prometheus pour les sessions PDU, PFCP/UPF, enregistrement NRF, et santé de la VM BEAM, avec exemple de PromQL.
  • Dépannage - Problèmes courants et leurs résolutions.

Vue d'ensemble de l'architecture

Vue d'ensemble des fonctionnalités

  • Cycle de vie de la session PDU : établissement, modification, libération, et réactivation de la demande de service UP en mode veille UE, chaque session étant détenue par un processus de travail dédié.
  • Pools d'IP UE sensibles au DNN avec correspondance exacte/regex/par défaut, plusieurs plages IPv4/IPv6 par DNN, allocation aléatoire, dé-duplication, et libération sécurisée contre les fuites lors de la sortie de tout travailleur.
  • IP statique d'abonné respectée depuis le UDM/UDR et réservée contre les pools.
  • Réconciliation des types de session PDU : les demandes à double pile servies à partir d'un pool de famille unique sont signalées comme cette famille avec la cause 5GSM correcte (#50/#51).
  • P-CSCF / PCO pour VoNR : découverte DNS SRV avec vérification de santé SIP OPTIONS plus un retour statique ; parité PCO avec le PGW-C 4G.
  • Flux QoS GBR dédiés (5QI-1) : chemins statiques (provisionnés) et dynamiques (pilotés par appel via notification de politique PCF), plus modification de flux QoS après établissement.
  • N4 / PFCP : configuration d'association avec signaux de vie et établissement, modification, et suppression de session complète.
  • N40 / Nchf facturation convergente : agit en tant que consommateur de facturation vers le CHF, ouvrant une demande de données de facturation lorsqu'une session PDU est établie, la mettant à jour pendant la session à partir des rapports d'utilisation N4 URR, et la fermant lors de la libération. Le CHF est résolu via la découverte NRF avec une URI de retour statique. Désactivé par défaut et activé via configuration.
  • Interconnexion N26 EPS : adoption/changement/recherche avec préservation de l'IP UE à travers 4G/5G.
  • Gestion de l'état de transfert : transitions hoState (PREPARING / PREPARED / COMPLETED / CANCELLED) avec réactivation du plan utilisateur à l'achèvement.
  • Journalisation JSON structurée avec métadonnées par session et un exportateur de métriques Prometheus.

Démarrage rapide

OmniSMF lit sa configuration d'opérateur depuis config/runtime.exs, qui mappe les variables d'environnement sur l'environnement de l'application :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_addr et pfcp_addr par défaut à loopback / toutes les interfaces respectivement. Dans tout déploiement multi-hôte ou conteneurisé, sbi_addr doit être une adresse que l'AMF/PCF peut atteindre, pfcp_addr doit être routable depuis le UPF, et upf_addr doit pointer vers le point de terminaison PFCP du UPF, sinon aucune session PDU ne peut être établie.

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.