OmniBSF
OmniBSF implements the Binding Support Function (BSF) of the 5G Core. The BSF maintains a registry of PCF bindings: for each PDU session it stores the mapping between a UE identity (IPv4 address, IPv6 prefix, MAC address, or SUPI) plus the DNN and S-NSSAI, and the PCF instance that serves that session's policy. Other network functions - an AF/NEF, an SMF, or another PCF - query the BSF to discover which PCF is responsible for a given session, so that all policy signalling for that session is directed to the same PCF instance.
OmniBSF exposes the Nbsf_Management service (3GPP TS 29.521) under the SBI base path /nbsf-management/v1. Bindings are held entirely in-memory in ETS tables and are indexed for concurrent, low-latency lookup. Bindings carry a configurable time-to-live (TTL); a background cleaner periodically removes expired entries. OmniBSF registers its NF profile with the NRF at startup and sends periodic heartbeats.
Documentation
- Operations Guide - Core concepts, 3GPP references, SBI endpoints, and the key binding lifecycle procedures with sequence diagrams.
- Configuration Reference - Full runtime configuration reference with parameter tables, binding lifetime tuning, and logging.
- Metrics & Monitoring - Prometheus metrics reference and example PromQL queries.
- Troubleshooting - Common issues and resolutions.
- Management API - Operator-facing OAM REST interface for status, statistics, binding inspection/removal, and runtime configuration controls.
Architecture Overview
Features Overview
- Full
Nbsf_Managementlifecycle - register, discover, update (merge-patch), and deregister PCF bindings per TS 29.521. - Multi-key discovery - bindings are resolvable by UE IPv4, UE IPv6 prefix, MAC address, SUPI, or DNN+S-NSSAI, with a defined resolution priority.
- Duplicate protection - a second registration for a UE IP that already has a binding is rejected with a
403 ExtProblemDetailsthat returns the incumbent PCF's address, letting the caller reuse it. - Supported-feature negotiation - the
suppFeatbitmap is negotiated by bitwise AND against the BSF's supported set (0x01, BindingUpdate). - Binding TTL and automatic cleanup - every binding is stamped with an expiry; a background cleaner removes expired bindings on a fixed interval.
- Concurrent ETS storage - bindings and their indices are held in read-concurrent ETS tables for low-latency lookup under load.
- NRF integration - automatic NF registration and heartbeat, with runtime-adjustable capacity/priority.
- Operator management API and Prometheus metrics for observability and runtime control.
Quick Start
OmniBSF reads its configuration from the application environment key :omnibsf. The standard deployment mechanism is config/runtime.exs, which maps each value from an OS environment variable with a built-in default.
config :omnibsf,
sbi_scheme: System.get_env("SBI_SCHEME", "http"),
sbi_addr: System.get_env("SBI_ADDR", "127.0.0.15"),
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", "9571")),
heartbeat_interval: String.to_integer(System.get_env("HEARTBEAT_INTERVAL", "10000"))
Full parameter documentation, binding lifetime tuning, and logging notes live in the Configuration Reference.