Skip to main content

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_SMPolicyControl lifecycle: SM policy association create, read, update, and delete, returning an SmPolicyDecision (session rules, PCC rules, QoS decisions, traffic control, policy-control triggers) per TS 29.512.
  • Full Npcf_AMPolicyControl lifecycle: AM policy association create, read, update, and delete, returning the authorized UE-AMBR and policy triggers per TS 29.507.
  • Npcf_PolicyAuthorization for 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: suppFeat is 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 7443 alongside 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.