airpuls Near-RT RIC
airpuls is a clean-room, spec-compliant Near-RT RAN Intelligent Controller implementing the O-RAN E2 interface for near-real-time control loops (10 ms – 1 s). The RIC server, the Service Model (SM) plugins, the E2 agent, the E2 emulator, the xApp SDK, and the language bindings are all written from scratch. The only generated code is the asn1c E2AP / E2SM codec, regenerated in-tree from the O-RAN ASN.1 schemas.
Its whole positioning is spec-compliance: airpuls implements what the O-RAN specifications and the ASN.1 contract say, and never bends its schemas, codecs, or behaviour to accommodate a non-conformant peer.
The three things you deploy
-
The RIC server process (
airpuls-ric). It terminates the E2 SCTP interface southbound (gNBs / eNBs) and serves xApps over a length-framed IPC protocol northbound. Start here to build, configure, deploy, and operate the RIC. -
libric-client(C) plus the Python (CFFI) and Go (cgo) bindings, and theairpuls-sdkCLI that scaffolds, runs, and deploys a project. Everything you need to write your own xApp — lifecycle, subscriptions, control, A1 policy enforcement, telemetry sinks, and a per-service-model author's guide. -
The reference xApps that ship in-tree — monitoring, control, sensing, benchmark, and gateway apps. Use them as working examples or run them as-is.
What the RIC implements
| Area | Coverage |
|---|---|
| E2AP | All core elementary procedures — E2 Setup, RIC Subscription (+ Delete, + Modification), RIC Indication (REPORT + INSERT), RIC Control, E2 Reset, E2 Removal, RIC Service Update / Query, E2 Node / Connection Update, Error Indication |
| Service Models | E2SM-KPM, E2SM-RC, E2SM-CCC, E2SM-LLC, and the airpuls vendor SMs E2SM-EPI and E2SM-AIR — see the Service Models catalogue |
| xApp API | Out-of-process C / Python / Go client, callback-based, with a client-side reconnect FSM and telemetry sinks (file / Redis / InfluxDB) |
| A1 policy | A companion A1-P Producer terminates the O-RAN A1 policy interface (toward the Non-RT RIC), distributes accepted policies to enforcing xApps over Redis, and reports status — xApps enforce via the SDK |
| Runtime | Partitioned multi-threaded event loop (independent SB / NB worker pools), stateful E2 node + subscription registries, three-phase graceful shutdown |
| Observability | Prometheus metrics endpoint (aggregate + per-node + per-SM), structured 5-level logging, bundled Grafana dashboard |
Quick start
Build the RIC and run it against the bundled emulator or a real gNB:
# Build the RIC
mkdir build && cd build && cmake .. && make -j$(nproc)
# Run it (default config on SCTP :36421, xApp IPC :36422, metrics :9090)
./airpuls-ric
Then bring up an xApp — for example the KPM monitor:
Or generate your own from scratch, with no checkout required:
See Near-RT RIC → Getting Started to build
and run the server, SDK → The airpuls-sdk CLI for the
project workflow, and SDK → Getting Started
to build the bindings from source.