Skip to main content

← Overview

OmniAMF Configuration Reference

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.

Table of Contents


Example Configuration

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}

SBI Server Parameters

ParameterTypeRequiredDefaultEnv VarDescription
sbi_schemeStringNo"http"SBI_SCHEMEURI scheme advertised for the SBI HTTP server.
sbi_addrStringNo"127.0.0.5"SBI_ADDRIP address the SBI HTTP server binds to and advertises in Location headers and to the NRF.
sbi_portIntegerNo7777SBI_PORTTCP port the SBI HTTP server listens on.

NRF and Peer NF Parameters

Peer NF URIs are static fallbacks. When nrf_uri is configured, OmniAMF prefers NRF service discovery (cached, 60 s TTL) and only falls back to the static URI when discovery is unavailable. Setting a static URI does not disable discovery per NF unless discovery itself is unreachable.

ParameterTypeRequiredDefaultEnv VarDescription
nrf_uriStringNo"http://127.0.0.1:7777"NRF_URIBase URI of the NRF for NF registration, heartbeat, and discovery. When set, enables NRF-based discovery of peer NFs.
ausf_uriStringNo"http://127.0.0.12:7777"AUSF_URIStatic base URI of the AUSF for 5G-AKA authentication (Nausf_UEAuthentication, N12).
udm_uriStringNo"http://127.0.0.12:7777"UDM_URIStatic base URI of the UDM for subscription data (Nudm_SDM) and UE context registration (Nudm_UECM, N8).
smf_uriStringNo"http://127.0.0.4:7777"SMF_URIStatic base URI of the SMF for PDU session management (Nsmf_PDUSession, N11).
nssf_uriStringNo"http://127.0.0.14:7777"NSSF_URIStatic base URI of the NSSF for network slice selection (Nnssf_NSSelection, N22).
pcf_uriStringNo"http://127.0.0.7:7777"-Static base URI of the PCF for AM policy association (Npcf_AMPolicyControl, N15). Resolved via discovery/fallback like the other NFs. Set in application config only (no dedicated env var).
heartbeat_intervalInteger (ms)No10000HEARTBEAT_INTERVALInterval between NRF heartbeat (PATCH) requests to keep the NFProfile alive.

PLMN and AMF Identity Parameters

The GUAMI (Globally Unique AMF Identifier) is formed from the serving PLMN (mcc/mnc) plus the AMF Identifier, which is itself composed of region_id, set_id, and pointer. The GUAMI is advertised in NG Setup and used to allocate the 5G-GUTI to UEs.

ParameterTypeRequiredDefaultEnv VarDescription
mccStringNo"999"MCCMobile Country Code of the serving PLMN.
mncStringNo"70"MNCMobile Network Code of the serving PLMN.
amf_nameStringNo"OmniAMF"AMF_NAMEAMF name advertised in NG Setup and registered in the NRF NFProfile.
amf_id.region_idInteger (8-bit)No2AMF_REGION_IDAMF Region ID component of the AMF Identifier / GUAMI.
amf_id.set_idInteger (10-bit)No1AMF_SET_IDAMF Set ID component of the AMF Identifier / GUAMI.
amf_id.pointerInteger (6-bit)No0AMF_POINTERAMF Pointer component uniquely identifying this AMF within the set.

N2 / NGAP Parameters

ParameterTypeRequiredDefaultEnv VarDescription
ngap_addrStringNo"0.0.0.0"NGAP_ADDRIP address the SCTP/NGAP listener binds to. Use a specific interface address to restrict which gNBs can connect.
ngap_portIntegerNo38412NGAP_PORTSCTP port for NGAP. The well-known port is 38412 per TS 38.412.

N26 Interworking Parameters

The N26 interface enables inter-system mobility between 5GS and EPS by speaking GTPv2-C to a 4G MME (it reuses the S10-style Forward Relocation message set). It is started as a separate GTPv2-C endpoint only when n26_enabled is true.

ParameterTypeRequiredDefaultEnv VarDescription
n26_enabledBooleanNotrue (runtime.exs)N26_ENABLEDEnables the N26 GTPv2-C endpoint and interworking. Set env var to any value other than "true" to disable.
n26_addrStringNovalue of ngap_addrN26_ADDRThe AMF's advertised N26 IP placed in GTPv2-C F-TEIDs. Must be a routable address reachable by the MME - do not leave as 0.0.0.0 in production.
n26_mme_peer.ipStringNo"127.0.0.11"N26_MME_IPIP of the static target MME peer used for 5G→4G handover (fallback when DNS discovery yields nothing).
n26_mme_peer.portIntegerNo2123N26_MME_PORTGTPv2-C port of the static target MME peer.

The GTPv2-C listener bound by the shared gtpc library uses the following, also environment-driven:

ParameterTypeRequiredDefaultEnv VarDescription
listen IPStringNovalue of n26_addr (then ngap_addr)N26_ADDR / NGAP_ADDRLocal bind address for the N26 GTPv2-C socket.
listen portIntegerNo2123N26_PORTLocal UDP port for the N26 GTPv2-C socket (standard GTP-C port).

Observability Parameters

ParameterTypeRequiredDefaultEnv VarDescription
prometheus_metrics_portIntegerNo9569PROMETHEUS_PORTTCP port exposing the Prometheus /metrics scrape endpoint.

See the Metrics & Monitoring guide for the metrics exposed on this endpoint.


Advanced Parameters (application config)

These keys have sensible defaults and are not wired to environment variables in runtime.exs. Set them in application config only when overriding behaviour is required.

ParameterTypeDefaultDescription
relative_amf_capacityInteger (0–255)255Relative AMF capacity advertised in NG Setup Response; also mutable at runtime via the management API. Influences gNB load balancing across AMFs.
served_guami_listList of maps[{plmn_id, amf_id}] derived from mcc/mnc/amf_idGUAMI list this AMF serves; viewable and settable via the management API. The NG Setup Response advertises every GUAMI in this list (mapped from each entry's plmn_id/amf_id), so a multi-GUAMI configuration is honoured toward the gNB.
served_nssaiList of maps[{sst:1}, {sst:1,sd:000001}, {sst:2,sd:000002}, {sst:3,sd:000003}]S-NSSAIs this AMF supports. These also drive the SliceSupportList advertised in the NG Setup Response PLMN support item (TS 38.413 §8.7.1).
supported_ta_listList of maps[{tac:1, plmn_list:[{mcc,mnc}]}]Tracking areas this AMF serves. A gNB's NG Setup SupportedTAList/PLMN is validated against this list; a gNB serving no matching TAC/PLMN is rejected with an NG Setup Failure (cause unknown-PLMN-or-SNPN).
force_null_cipheringBooleanfalseDefault (false) selects the AMF's preferred NAS ciphering algorithm that the UE also supports, preferring NEA2 and falling back to NEA0 (null) when the UE does not offer NEA2. Integrity is negotiated the same way, preferring NIA2 (falling back to NIA0). Set true to force NEA0 regardless of UE capabilities, for debugging/interop.
dns_portInteger53UDP/TCP port used for the N26 S-NAPTR DNS queries described under n26_dns_servers. Rarely changed; primarily a test/interop override.
maintenance_modeBooleanfalsePersisted maintenance-mode flag. When true, the AMF deregisters from the NRF and rejects new UE registrations (drain for restart). Normally toggled at runtime via the management API rather than set here.
n26_selection_methodAtom:dns_lookupTarget-MME discovery for 5G→4G handover. :dns_lookup performs an S-NAPTR query (service x-3gpp-mme:x-s10) on the target EPS TAI FQDN per TS 29.303 §5.4, falling back to n26_mme_peer if DNS yields nothing. :static (any value other than :dns_lookup) skips DNS and uses n26_mme_peer directly. See Target MME discovery.
n26_dns_serversList of maps[%{server: "127.0.0.53", domain: "3gppnetwork.org"}]DNS resolvers queried (in order) for N26 S-NAPTR MME discovery when n26_selection_method is :dns_lookup. Each entry has server (resolver IP, queried over TCP) and domain (the base home-network domain appended to the EPS TAI FQDN, e.g. 3gppnetwork.org).
n26_smf_uriString"http://127.0.0.4:8443"SMF internal interworking API base URL, queried during 5G→4G handover for the UE's real EPS PDN connection data (IP, EBI, PGW-C address).

Structured Config Sub-Fields

Several advanced keys are lists of maps. Their sub-fields and semantics are:

served_guami_list - the GUAMIs this AMF serves. Each entry:

Sub-fieldTypeDescription
plmn_id.mcc / plmn_id.mncStringServing PLMN of the GUAMI (defaults to top-level mcc/mnc).
amf_id.region_idInteger (8-bit)AMF Region ID.
amf_id.set_idInteger (10-bit)AMF Set ID.
amf_id.pointerInteger (6-bit)AMF Pointer within the set.

served_nssai - the S-NSSAIs this AMF supports. Each entry is a map with string keys:

Sub-fieldTypeDescription
"sst"Integer (0–255)Slice/Service Type. Standardised values: 1 eMBB, 2 URLLC, 3 MIoT.
"sd"String (6 hex digits)Optional Slice Differentiator. Omit for an SST-only slice (e.g. %{"sst" => 1}).

supported_ta_list - the Tracking Areas this AMF serves. Each entry:

Sub-fieldTypeDescription
tacIntegerTracking Area Code.
plmn_listList of mapsPLMNs served in this TA; each is %{mcc: ..., mnc: ...}.

A gNB's SupportedTAList is matched against this list (a TA matches when both tac and one PLMN match). A gNB advertising no matching TA is rejected at NG Setup with an NG Setup Failure - see gNB NG Setup rejected.

n26_dns_servers - resolvers for N26 S-NAPTR MME discovery. Each entry:

Sub-fieldTypeDescription
serverStringResolver IP, queried over TCP.
domainStringBase home-network domain appended to the EPS TAI FQDN (e.g. 3gppnetwork.org).

Management API and Control Panel

OmniAMF exposes an operator management REST API and a web Control Panel over HTTPS. These are configured in application (compiled) config rather than runtime.exs; the runtime-relevant knobs are the listen address, ports, and TLS material.

ParameterTypeDefaultDescription
management API portInteger8443HTTPS port for the operator management/status API (status, UE/gNB inventory, OAM actions).
management API listen_ipString"0.0.0.0"Bind address for the management API.
management API enable_tlsBooleantrueServe the management API over TLS.
management API tls_cert_path / tls_key_pathStringpriv/cert/omnitouch.crt / .pemTLS certificate and private key for the management API.
Control Panel HTTPS portInteger7443HTTPS port for the web Control Panel UI.

The management API surfaces read-only status (NRF/NF/license status, gNB and UE inventory, per-UE PDU sessions, statistics) and OAM actions (runtime config view/update, cache clear, log level change, maintenance mode, NRF re-registration, diagnostics, and forced UE/PDU/gNB teardown). The full endpoint list, per-action semantics, and preconditions are documented in the Management API guide.