Skip to content

Getting Started

Build and run the RIC server on Linux. The RIC and its C dependencies build with a standard CMake toolchain; no OAI code is involved.

Dependencies

sudo apt install -y \
    build-essential cmake pkg-config \
    libsctp-dev libglib2.0-dev libcyaml-dev libyaml-dev libssl-dev check
Package Purpose
build-essential GCC, make
cmake Build system
pkg-config Dependency resolution
libsctp-dev SCTP transport (E2AP southbound)
libglib2.0-dev GLib main loop, async I/O
libcyaml-dev Schema-driven YAML config parsing
libyaml-dev YAML parser (libcyaml dependency)
libssl-dev Ed25519 licence verification
check Unit-test framework

libssl-dev is checked when the tree is configured, not when it is linked: without it cmake stops at Could NOT find OpenSSL, even for a build that never reaches the server binary.

cJSON (used by the E2SM-CCC JSON codec) is vendored in-tree — no system package is needed.

At runtime the server needs only the shared libraries:

sudo apt install -y libsctp1 libglib2.0-0 libcyaml1 libyaml-0-2 libssl3

Building

mkdir build && cd build
cmake ..
make -j$(nproc)

The binary is build/airpuls-ric.

Release builds

Production images build with -DCMAKE_BUILD_TYPE=Release, which compiles the whole hot path at -O3 -DNDEBUG plus Link-Time Optimization (with -ffat-lto-objects so the static archives stay linkable by the Python and Go bindings). The default (unspecified) build type is fine for development and testing.

Installing the config

The default config path is /etc/airpuls/nrtric.yml. Seed it from the in-tree default:

sudo mkdir -p /etc/airpuls
sudo cp src/nrtric.yml /etc/airpuls/nrtric.yml

See Configuration for every field.

Running

./airpuls-ric                          # default config (/etc/airpuls/nrtric.yml)
./airpuls-ric -c my-config.yml         # custom config
./airpuls-ric -c my-config.yml -v      # verbose logging
./airpuls-ric -c my-config.yml -q      # quiet (warnings + errors only)

On startup the RIC binds the SCTP listener (default :36421), the xApp IPC endpoint (default tcp://127.0.0.1:36422), and the metrics endpoint (default :9090). Point an E2 node at the SCTP address and an xApp at the IPC endpoint.

Log-level precedence

The effective log level is resolved highest-priority first:

  1. CLI flags-v (verbose) or -q (warnings + errors only)
  2. Config filelogging.level in nrtric.yml
  3. Defaultinfo

CLI flags always override the config file.

Verifying it runs

With no E2 node attached yet, the metrics endpoint already answers:

curl -s localhost:9090/metrics | grep airpuls_sm_plugins_loaded

Once a node connects and completes E2 Setup, the live registry gauges move — see Observability.

Testing

The unit suite (~80 ctest targets, Check framework) covers the E2AP codecs, the registries, the subscription manager, every SM plugin, the agent, the emulator mocks, the xApp IPC, and the lock-free primitives:

cd build && ctest --output-on-failure

Next steps