Service Models
A Service Model (SM) defines what an xApp can observe and control on an
E2 node. airpuls ships six SM plugins, each a standalone static
library (libe2sm_<sm>.a) that is the single source of truth for that
SM's IE structs, codec, and builders — linked identically by the RIC, the
agent, the emulator, and the SDK.
This page is the operator-facing catalogue: which SMs exist, what they carry, and which styles are implemented today. For the xApp-author's guide to each SM — subscription builders, indication data models, code in Python / Go / C — see the SDK Service Model Guides.
The RAN Function ID is node-local
Each SM has a globally-unique OID. The "RAN Function ID" below is only the default the in-tree agents and emulator advertise — per E2AP §9.2.8 the ID is node-local, and the RIC resolves each node's functions to plugins by the advertised OID at E2 Setup / RIC Service Update. A conformant peer may advertise an SM under any ID, so xApps resolve capabilities by OID, never by a hard-coded ID.
The three axes
A Near-RT RIC observes and acts on the RAN along complementary axes, one per SM:
| Service model | Axis | What it gives an xApp |
|---|---|---|
| E2SM-KPM | Measurement | Aggregated performance counters (throughput, PRB usage, delay) |
| E2SM-RC | Radio control | Per-UE observation and decisions (RRC events, handover, cell info) |
| E2SM-CCC | Configuration | Observe and change managed-object config (energy saving, cell config) |
| E2SM-LLC | Lower layers | Raw lower-layer info & measurements (SRS/CSI copy, DL RLC buffer status) |
| E2SM-EPI | Latency probe | Full-trip RTT measurement (airpuls vendor SM) |
| E2SM-AIR | Sensing | Per-UE SRS channel estimates — SNR, timing advance, channel (airpuls vendor SM) |
Catalogue at a glance
| SM | OID | Default RAN Func ID | Wire | Implemented services |
|---|---|---|---|---|
| KPM | 1.3.6.1.4.1.53148.1.3.2.2 |
2 | APER | REPORT (Styles 1–5) |
| RC | 1.3.6.1.4.1.53148.1.1.2.3 |
3 | APER | REPORT (1–4), INSERT (3/1), CONTROL (3/1), QUERY (2) |
| CCC | 1.3.6.1.4.1.53148.1.1.2.4 |
4 | JSON | REPORT (1–2), CONTROL (1–2) |
| LLC | 1.3.6.1.4.1.53148.1.1.2.5 |
5 | APER | REPORT (1–2) |
| EPI | 1.3.6.1.4.1.99999.3.1.1 |
100 | APER | CONTROL (1) |
| AIR | 1.3.6.1.4.1.99999.3.1.2 |
101 | APER | REPORT (1), QUERY (1) |
The two …99999… OIDs are placeholder Private Enterprise Numbers pending
an IANA allocation for the airpuls vendor SMs.
E2SM-KPM — Key Performance Measurement
Spec: O-RAN.WG3.E2SM-KPM v03.00. REPORT-only per spec.
Full v03.00 coverage — all five REPORT styles:
| Style | Name | UE scope |
|---|---|---|
| 1 | E2 Node Measurement | Cell-level |
| 2 | E2 Node Measurement for a single UE | Exactly 1 UE |
| 3 | Condition-based, UE-level | Per-measurement conditions |
| 4 | Common condition-based, UE-level | ≥1 global condition |
| 5 | E2 Node Measurement for multiple UEs | ≥2 UEs |
E2SM-RC — RAN Control
Spec: O-RAN.WG3.E2SM-RC-v01.03 (QUERY on R004-v09.00).
| Service | Implemented |
|---|---|
| REPORT | Styles 1–4 (full coverage): Message Copy, Call Process Outcome, E2 Node Information, UE Information |
| INSERT | Style 3 / Action 1 (Connected Mode Mobility Control — Handover) with full drop / accept / manipulate round-trip |
| CONTROL | Style 3 / Action 1 (Handover) — standalone and as the INSERT response |
| QUERY | Style 2 (UE Information Query) — one-shot snapshot of known UEs, over the RIC Query procedure |
The RC INSERT round-trip lets an xApp intercept a gNB-initiated handover before it fires and drop it, accept it, or manipulate it (accept toward a different target cell). Deferred: RC CONTROL Styles 1/2/4–7, INSERT Styles 1/2/4, and the POLICY service.
E2SM-CCC — Cell Configuration and Control
Spec: O-RAN.WG3.TS.E2SM-CCC-R004-v06.00 — JSON on the wire (the
spec's §9.5 ASN.1 transfer syntax is Void; the normative model is the
§9.4 JSON Schema). The RIC routes CCC by RAN Function ID and forwards the
JSON OCTET STRINGs untouched.
| Service | Implemented |
|---|---|
| REPORT | Style 1 (node-level config), Style 2 (cell-level config) |
| CONTROL | Style 1 (node config & control), Style 2 (cell config & control) |
CCC exposes the RAN's configuration state — the same managed objects an
O1/NETCONF manager touches — and lets an xApp read it and write the
writable parts (e.g. cell energy saving). QUERY is deferred; INSERT and
POLICY are Void in the spec.
E2SM-LLC — Lower Layers Control
Spec: O-RAN.WG3.TS.E2SM-LLC-R004-v01.00.
| Style | Name | Trigger | Carries |
|---|---|---|---|
| 1 | LLI Copy | On SRS / CSI arrival | Raw SRS and/or CSI, copied verbatim |
| 2 | Periodic | Every N ms | DL RLC buffer status (per UE, per LCID) |
LLC exposes the RAN's lower layers directly — raw PHY bytes and buffer
depths that live below the measurement-counter layer. REPORT-only today;
CONTROL is deferred, INSERT/POLICY/QUERY are Void in the spec.
E2SM-EPI — Echo Probe Indicator (vendor SM)
Spec: airpuls vendor SM (E2SM-EPI-v01.00-airpuls.asn). A
single-purpose, CONTROL-only SM: the probe is a Control Request and the
response is a Control Outcome carrying timestamps.
| Style | Name |
|---|---|
| 1 | Echo Probe |
EPI exists for end-to-end full-trip latency measurement. The Control Outcome carries eight timestamps across three clocks (xApp, RIC, agent) compressed into five single-clock deltas, so the RIC's latency histograms can attribute RTT to the southbound leg, the northbound leg, agent service time, and RIC routing. The SDK runs a default-on EPI probe driver, so these histograms populate without a dedicated xApp.
E2SM-AIR — SRS Channel Estimates (vendor SM)
Spec: airpuls vendor SM (E2SM-AIR-v01.00-airpuls.asn).
| Service | Style | Name |
|---|---|---|
| REPORT | 1 | SRS UE Estimate |
| QUERY | 1 | UE PHY Configuration |
AIR exposes per-UE SRS-derived measurements the gNB PHY already computes
during uplink channel estimation: wideband and per-RB SNR, SRS-based
Timing Advance, and the estimated frequency-domain channel per receive
antenna / SRS port. It complements LLC's Style 1 raw pre-estimation
SRS tap — AIR taps after channel estimation. The QUERY Style 1 pulls a
per-UE CellGroupConfig (the source of per-UE SRS-Config and UE
discovery).
Deferred styles
The core protocol set is complete; notable SM-level gaps tracked for future releases:
- RC — CONTROL Styles 1/2/4–7 and Style 3 Actions 2–7; INSERT Styles 1/2/4; the POLICY service
- CCC — QUERY Styles 1–2 (needs the RIC Query procedure)
- LLC — CONTROL Styles 1–2
- KPM — R004 v07 extensions (Event Trigger Format 2, Style 255)
The authoritative, always-current catalogue — with every Action
Definition / Header / Message format number and the cross-field
validation each style enforces — is
docs/specs/compliance/supported-service-models.md in the source tree.