Skip to main content

OmniSCP

OmniSCP is the Service Communication Proxy (SCP) of the Omnitouch 5G Core. It sits between NF consumers and NF producers in the 5G Service Based Architecture (SBA) and provides indirect communication (3GPP TS 23.501 models C and D): consumers send their Service Based Interface (SBI) requests to the SCP, which performs NRF-based discovery, load-balances across the discovered producer instances, retries failed requests, and enforces an upstream timeout, then returns the producer's response to the consumer.

The SCP itself registers with the NRF as an NF of type SCP and maintains that registration with periodic heartbeats.

Documentation

  • Operations: 3GPP role, interfaces/endpoints, routing/discovery modes, and key procedures with sequence diagrams.
  • Configuration: every runtime-tunable parameter, the management/OAM API, and logging.
  • Metrics: Prometheus metrics and example PromQL.
  • Troubleshooting: common failures and resolutions.

Architecture Overview

Features Overview

  • Indirect communication (Models C and D): delegated NRF discovery on behalf of consumers, plus direct forwarding when the consumer already knows the target.
  • Catch-all reverse proxy: every SBI path except the NRF status-notification callback is transparently forwarded to a resolved producer.
  • Discovery caching: ETS-backed cache of NRF discovery results with a configurable TTL. NRF status notifications evict the single affected instance (falling back to one NF type when no instance id is present), never the whole cache.
  • Load balancing: round_robin, weighted (capacity/load), or priority selection across discovered producer instances.
  • Overload control (OCI): reads producer Overload Control Information from responses and sheds overloaded producers from the candidate set before load-balancer selection (TS 29.500 §6.3).
  • Load control relay (LCI): relays producer 3gpp-Sbi-Lci and 3gpp-Sbi-Load response headers end to end so consumers receive producer load hints through the SCP (TS 29.500 §6.3).
  • Automatic failure health tracking: instances are marked unhealthy after consecutive failures and recover automatically after a cooldown.
  • Administrative drain: operators can take a producer out of rotation via the OAM API without deregistering it from the NRF.
  • Retry with upstream timeout: 5xx and connection/timeout failures are retried against other instances up to a configurable limit.
  • NRF self-registration: registers as an SCP NF and heartbeats to stay alive; forces re-registration on demand.
  • Prometheus metrics + live OAM control: proxy, cache, and registration metrics, plus runtime reconfiguration over HTTPS.

Quick Start

OmniSCP reads its runtime configuration from config/runtime.exs, each key backed by an environment variable. The primary settings are the SBI listener, the NRF location, and the PLMN:

import Config

config :omniscp,
sbi_scheme: System.get_env("SBI_SCHEME", "http"),
sbi_addr: System.get_env("SBI_ADDR", "127.0.0.17"),
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")

NF consumers point their SBI traffic at sbi_addr:sbi_port instead of directly at producers. The full parameter set (cache TTL, load-balancing strategy, retry and timeout tuning, and the OAM-tunable capacity/priority) is documented in Configuration.