OmniPCF
OmniPCF implements the Policy Control Function (PCF) of the Omnitouch 5G Core. It is the network's policy decision point: it tells the SMF how each PDU session must be treated (PCC rules, session-AMBR, per-flow QoS) and tells the AMF the access and mobility policy for each registered UE. It also exposes the Application-Function-facing policy authorization service that turns an IMS/VoNR call into a dedicated guaranteed-bitrate flow.
OmniPCF serves three SBI services: Npcf_SMPolicyControl (TS 29.512), Npcf_AMPolicyControl (TS 29.507), and Npcf_PolicyAuthorization (TS 29.514). It fetches per-subscriber policy data from the UDR (Nudr_DataRepository, TS 29.519), registers the UE-address-to-PCF binding in the BSF (Nbsf_Management, TS 29.521), and registers/heartbeats with the NRF. Policy associations are runtime state held in memory; the UDR is the authoritative source of subscriber policy data, and associations are re-established by the SMF and AMF as sessions and registrations are set up.
Documentation
- Operations Guide: Core concepts, 3GPP references, SBI endpoints, and the key policy procedures with sequence diagrams.
- Configuration Reference: Full runtime configuration reference, compiled policy defaults, the Management/OAM API, and logging.
- Metrics & Monitoring: Prometheus metrics reference and example PromQL queries.
- Troubleshooting: Common issues and resolutions.
Architecture Overview
Features Overview
- Full
Npcf_SMPolicyControllifecycle: SM policy association create, read, update, and delete, returning anSmPolicyDecision(session rules, PCC rules, QoS decisions, traffic control, policy-control triggers) per TS 29.512. - Full
Npcf_AMPolicyControllifecycle: AM policy association create, read, update, and delete, returning the authorized UE-AMBR and policy triggers per TS 29.507. Npcf_PolicyAuthorizationfor AF/IMS: Application Session Contexts, events-subscription sub-resource, and P-CSCF restoration; AF media components (AUDIO/VIDEO) are translated into dedicated GBR PCC rules and pushed to the owning SMF for VoNR.- UDR-driven policy: per-subscriber SM/AM policy data is fetched from the UDR (Nudr-DR v2); static dedicated-bearer charging rules provisioned in the UDR become dedicated 5G QoS flows. Falls back to safe default policy when the UDR is unavailable.
- BSF binding registration: the UE-address-to-PCF binding is registered in the BSF so an AF can discover this PCF for AF-initiated QoS.
- Policy-data change subscriptions: the PCF subscribes to UDR policy-data change notifications and reacts to changes for affected associations.
- Supported-feature negotiation:
suppFeatis negotiated by bitwise AND against each service's supported bitmap. - Operator management API and Prometheus metrics for observability and runtime control. A LiveView web Control Panel (Resources, Configuration, License, and Log views) is served over HTTPS on port
7443alongside the REST management API.
Quick Start
OmniPCF reads its configuration from the application environment key :omnipcf. The standard deployment mechanism is config/runtime.exs, which maps each value from an OS environment variable with a built-in default.
config :omnipcf,
sbi_scheme: System.get_env("SBI_SCHEME", "http"),
sbi_addr: System.get_env("SBI_ADDR", "127.0.0.13"),
sbi_port: String.to_integer(System.get_env("SBI_PORT", "7777")),
nrf_uri: System.get_env("NRF_URI", "http://127.0.0.1:7777"),
udr_uri: System.get_env("UDR_URI", "http://127.0.0.12:7777"),
bsf_uri: System.get_env("BSF_URI", "http://127.0.0.15:7777"),
mcc: System.get_env("MCC", "999"),
mnc: System.get_env("MNC", "70"),
heartbeat_interval: String.to_integer(System.get_env("HEARTBEAT_INTERVAL", "10000")),
prometheus_metrics_port: String.to_integer(System.get_env("PROMETHEUS_PORT", "9568"))
The full parameter reference, compiled policy defaults, the Management/OAM API, and logging notes live in the Configuration Reference.