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.shA 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 ../ && makeYou 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.
