OmniAMF
OmniAMF is the Access and Mobility Management Function (AMF) for the Omnitouch 5G Core. It terminates the N1 (NAS) and N2 (NGAP) interfaces from the 5G radio access network (gNBs) and orchestrates UE registration, authentication, mobility, connection management, paging, and PDU session signalling relay.
It participates in the 5G Service Based Architecture (SBA) over the SBI, both producing and consuming Namf and other NF services, and provides N26 EPS↔5GS interworking with a 4G MME. OmniAMF is the mobility and connection anchor for every UE in the 5G Core: it accepts SCTP/NGAP associations from gNBs, terminates NAS signalling relayed inside NGAP, and coordinates with peer NFs to authenticate the UE, retrieve subscription data, select slices, and manage PDU sessions.
Documentation
- Operations Guide - Core concepts, 3GPP references, interfaces / SBI endpoints, and key procedures with their sequence diagrams.
- Configuration Reference - Complete parameter documentation, the management/OAM API endpoints, and logging notes.
- Management API - Operator OAM REST API: status/inventory, runtime config, and UE/gNB/NRF/maintenance control actions.
- Metrics & Monitoring - Prometheus metrics and example PromQL queries.
- Troubleshooting - Common issues and resolutions.
Architecture Overview
Each UE is handled by a dedicated UeWorker process supervised under a UE supervisor. NGAP messages are demultiplexed by NGAP UE identifiers to the owning worker, so UE state machines run in isolation. A separate ETS-backed GUTI Context Store persists each UE's native 5G NAS security context (SUPI, K_AMF, NAS counts, security capabilities) keyed by 5G-TMSI, independent of worker lifetime. This survives worker churn and lets a UE returning from idle mode resume without re-authentication.
Features Overview
- NGAP / N2 termination - accepts SCTP associations from gNBs; handles NG Setup, Initial UE Message, UE context setup/release, NAS transport, paging, and handover preparation (TS 38.413).
- UE registration and 5G-AKA - orchestrates authentication with the AUSF and subscription retrieval / UECM registration with the UDM.
- NAS security: derives K_AMF and NAS keys, runs Security Mode Control, and negotiates NAS integrity (NIA) and ciphering (NEA) against UE capabilities, preferring NIA2/NEA2 and falling back to NIA0/NEA0. Set
force_null_cipheringto force NEA0 (null ciphering) regardless of UE capabilities. - GUAMI-based GUTI allocation - allocates 5G-GUTIs from the configured GUAMI and supports idle-mode GUTI resume via the ETS-backed context store.
- Paging and Service Request - pages CM-IDLE UEs across their TAI list and reactivates the user plane on Service Request.
- PDU session relay (N11) - relays 5GSM NAS to/from the SMF and drives N2 PDU Session Resource Setup/Modify toward the gNB.
- PCF AM policy (N15) - creates and deletes Access & Mobility policy associations during registration and deregistration.
- NF discovery - resolves peer NF URIs via NRF discovery with per-NF static fallback (60 s cache).
- N26 EPS↔5GS interworking - optional GTPv2-C endpoint for inter-system handover with a 4G MME, including S-NAPTR MME discovery.
- Namf services - produces Namf_Communication (N1N2 transfer, context transfer, EBI assignment, status subscriptions) and Namf_EventExposure.
- Operator management - management REST API and web Control Panel for status inspection and OAM actions.
Quick Start
OmniAMF reads operator configuration from the Elixir application environment under the :omniamf key, populated at boot from config/runtime.exs. Every runtime key is driven by an environment variable with a built-in default, so a deployment can be tuned entirely through environment variables.
config :omniamf,
# SBI HTTP server (produced Namf services)
sbi_scheme: "http",
sbi_addr: "127.0.0.5",
sbi_port: 7777,
# NRF (registration, heartbeat, discovery)
nrf_uri: "http://127.0.0.1:7777",
# Consumed peer NF base URIs (static fallbacks; NRF discovery preferred)
ausf_uri: "http://127.0.0.12:7777",
udm_uri: "http://127.0.0.12:7777",
smf_uri: "http://127.0.0.4:7777",
nssf_uri: "http://127.0.0.14:7777",
# Serving PLMN
mcc: "999",
mnc: "70",
# AMF identity (GUAMI)
amf_name: "OmniAMF",
amf_id: %{region_id: 2, set_id: 1, pointer: 0},
# Observability
prometheus_metrics_port: 9569,
# N2 / NGAP (SCTP listener for gNBs)
ngap_addr: "0.0.0.0",
ngap_port: 38412,
# NRF heartbeat cadence
heartbeat_interval: 10_000,
# N26 EPS↔5GS interworking with a 4G MME
n26_enabled: true,
n26_addr: "0.0.0.0",
n26_mme_peer: %{ip: "127.0.0.11", port: 2123}
Full documentation of every parameter, including advanced application-config keys and the management/OAM API, lives in the Configuration Reference.