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_listwhen discovery yields nothing. Disabled by default (staticnsi_listonly). - 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) andnnssf-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.