Skip to main content

OmniNSSF

OmniNSSF implements the Network Slice Selection Function (NSSF) of the 5G Core. The NSSF is the authority for network slicing decisions: it tells the AMF which slices a UE is allowed to use, where slice-specific NF discovery should be directed (the target NRF for a Network Slice Instance), and which AMF set can serve a given slice. It also collects and authorizes the per-Tracking-Area slice availability reported by AMFs.

OmniNSSF exposes two 5G Service Based Interface (SBI) services - Nnssf_NSSelection (nnssf-nsselection/v2), queried by the AMF at UE registration and PDU session establishment to resolve a Requested / Subscribed S-NSSAI into an Allowed NSSAI, NSI information (target NRF), a target AMF set, and (for roaming UEs) a Configured NSSAI mapping; and Nnssf_NSSAIAvailability (nnssf-nssaiavailability/v1), which receives per-Tracking-Area-Identity (TAI) S-NSSAI availability updates pushed by AMFs and manages subscription/notification of availability changes. Slice topology and per-AMF availability are held in in-memory stores that are rebuilt from configuration and from live AMF reports after a restart.

Documentation

  • Operations Guide - 3GPP role, SBI endpoints, and the key slice-selection and NSSAI-availability procedures with sequence diagrams.
  • Configuration Reference - Full runtime configuration reference, slice-topology parameter tables, management/OAM API, and logging.
  • Metrics - Prometheus metrics for slice selection, availability updates, NRF registration, and BEAM VM health, with example PromQL.
  • Troubleshooting - Common issues and their resolutions.

Architecture Overview

Features Overview

  • Slice selection for registration and PDU session - resolves Requested / Subscribed S-NSSAI into NSI information, Allowed NSSAI, target AMF set, and Configured NSSAI.
  • NSI to NRF mapping - directs slice-specific NF discovery to the correct NRF per slice.
  • Per-PLMN Allowed NSSAI with home-PLMN fallback.
  • TAI-aware availability filtering - Allowed NSSAI and slice selection honour per-TAI availability reported by AMFs; permissive when no availability data exists.
  • NSSAI availability management - PUT/PATCH/DELETE per-AMF availability, with JSON Patch (RFC 6902) support.
  • Availability subscriptions and notifications - POST/PATCH/DELETE subscriptions with change notifications delivered off the request path with bounded retries.
  • Optional dynamic NRF discovery - when enabled, the NSSF resolves the slice-serving NRF at runtime from the root NRF via Nnrf_NFDiscovery, falling back to the statically configured nsi_list when discovery yields nothing. Disabled by default (static nsi_list only).
  • Supported-features negotiation - advertises the NssaiAvailability feature bit and returns the negotiated intersection.
  • NRF registration and heartbeat - automatic registration on startup with periodic heartbeats; advertises both nnssf-nsselection (v2) and nnssf-nssaiavailability (v1).
  • Runtime OAM - inspect and adjust slice topology, NRF URI, capacity/priority, and log level without restart.
  • Structured JSON logging and Prometheus metrics.

Quick Start

OmniNSSF is configured through OS environment variables read at startup. The primary runtime configuration is:

config :omnissf,
sbi_scheme: System.get_env("SBI_SCHEME", "http"),
sbi_addr: System.get_env("SBI_ADDR", "127.0.0.14"),
sbi_port: String.to_integer(System.get_env("SBI_PORT", "7777")),
nrf_uri: System.get_env("NRF_URI", "http://127.0.0.1:7777"),
mcc: System.get_env("MCC", "999"),
mnc: System.get_env("MNC", "70"),
prometheus_metrics_port: String.to_integer(System.get_env("PROMETHEUS_PORT", "9568")),
heartbeat_interval: String.to_integer(System.get_env("HEARTBEAT_INTERVAL", "10000"))

The slice topology (NSI list, allowed NSSAI, AMF-set mapping, configured NSSAI) is supplied through structural application configuration. The full parameter reference, including the slice-topology tables and the management/OAM API, is in the Configuration Reference.