jrt-controller is a real-time controller for network functions instrumented with the jbpf framework. Like jbpf, the controller is part of Project Janus and provides functionalities envisaged by the concept of real-time RIC in O-RAN.
The overall jrt-controller architecture is shown in the figure below:
A typical deployment consists of the following components:
- Network function: An external, user-provided executable (e.g. virtualized RAN or any other network function) which we want to monitor and control and which has been instrumented using the jbpf framework.
- jbpf library: An external library that provides the functionality of deploying and executing codeletes, sending output data (output API) and receiving control data (input API).
- jrt-controller: The main component of this repository that runs user-provided applications (dApps in the O-RAN terminology), which consume telemetry data from the network functions and invoke control actions, all with latencies of a few microseconds.
- jrt-ctl: This is a collection of tools to load/unload user applications and codelets (codelet life-cycle management and secure codelet store). It can be optionally integrated with other management frameworks (e.g. nRT-RIC or SMO in O-RAN terminology).
The jrt-controller can connect to any network function already instrumented with the jbpf framework without any changes.
For a high-level overview of the framework functionality, please read this.
The first step is to initialize all git submodules:
./init_submodules.sh
A list of all the dependencies required for bare metal builds are listed in the Dockerfiles located here for several common Linux distributions.
To build you can use the following commands:
# source environment variables
source ./setup_jrtc_env.sh
mkdir build
cd build
cmake ../ && make
You can generate the documentation using Doxygen. To do so, run the following:
make doc
The documentation will be generated in the $JRTC_OUT_DIR/docs/html
directory, where $JRTC_OUT_DIR
is automatically set when sourcing setup_jrtc_env.sh
.
For more details about the capabilities of jrt-controller you can explore the documentation:
- High-level overview
- Example Apps
- Streams and messages
- Building with containers
- jrtc-ctl management tool
For more information, you can also check the following resources:
- jbpf technical paper: A technical research paper that describes the motivation behind the framework. The paper is focused on 5G RAN instrumentation, but most concepts extend to arbitrary applications.
- Distributed AI for RAN technical paper: A research paper that describes a blueprint for an AI-native RAN platform, and which could be realized using the jrt-controller and jbpf.
-
jbpf: the userspace eBPF instrumentation and control framework used to instrument network functions that communicate with jrt-controller.
-
Sample integration with srsRAN, which consists of two parts:
- A version of srsRAN integrated with jbpf.
- A number of sample applications for jbpf and jrt-controller on top of srsRAN.
-
jbpf-protobuf: The jbpf extension, used in jrt-controller, that demonstrates how to utilize protobuf serialization for sending and receiving data from codelets loaded in jbpf applications.
The jbpf framework is licensed under the MIT license.