Repository files navigation

Introduction

Build StatusDocker Build and Test

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.

Architectural overview

The overall jrt-controller architecture is shown in the figure below:

Architectural overview

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.

Getting started

Instructions to build the controller

The first step is to initialize all git submodules:

./init_submodules.sh

Building on bare metal

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 variablessource ./setup_jrtc_env.sh
mkdir build
cd build
cmake ../ && make

Doxygen documentation

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.

Further documentation

For more details about the capabilities of jrt-controller you can explore the documentation:

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.

Related projects

  • 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:

  • 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.

License

The jbpf framework is licensed under the MIT license.

About

Real time controller for network functions instrumented with the jbpf framework

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Introduction

Build StatusDocker Build and Test

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.

Architectural overview

The overall jrt-controller architecture is shown in the figure below:

Architectural overview

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.

Getting started

Instructions to build the controller

The first step is to initialize all git submodules:

./init_submodules.sh

Building on bare metal

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 variablessource ./setup_jrtc_env.sh
mkdir build
cd build
cmake ../ && make

Doxygen documentation

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.

Further documentation

For more details about the capabilities of jrt-controller you can explore the documentation:

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.

Related projects

  • 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:

  • 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.

License

The jbpf framework is licensed under the MIT license.

About

Real time controller for network functions instrumented with the jbpf framework

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Introduction

Build StatusDocker Build and Test

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.

Architectural overview

The overall jrt-controller architecture is shown in the figure below:

Architectural overview

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.

Getting started

Instructions to build the controller

The first step is to initialize all git submodules:

./init_submodules.sh

Building on bare metal

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 variablessource ./setup_jrtc_env.sh
mkdir build
cd build
cmake ../ && make

Doxygen documentation

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.

Further documentation

For more details about the capabilities of jrt-controller you can explore the documentation:

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.

Related projects

  • 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:

  • 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.

License

The jbpf framework is licensed under the MIT license.

About

Real time controller for network functions instrumented with the jbpf framework

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Introduction

Build StatusDocker Build and Test

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.

Architectural overview

The overall jrt-controller architecture is shown in the figure below:

Architectural overview

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.

Getting started

Instructions to build the controller

The first step is to initialize all git submodules:

./init_submodules.sh

Building on bare metal

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 variablessource ./setup_jrtc_env.sh
mkdir build
cd build
cmake ../ && make

Doxygen documentation

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.

Further documentation

For more details about the capabilities of jrt-controller you can explore the documentation:

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.

Related projects

  • 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:

  • 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.

License

The jbpf framework is licensed under the MIT license.

About

Real time controller for network functions instrumented with the jbpf framework

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Introduction

Build StatusDocker Build and Test

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.

Architectural overview

The overall jrt-controller architecture is shown in the figure below:

Architectural overview

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.

Getting started

Instructions to build the controller

The first step is to initialize all git submodules:

./init_submodules.sh

Building on bare metal

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 variablessource ./setup_jrtc_env.sh
mkdir build
cd build
cmake ../ && make

Doxygen documentation

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.

Further documentation

For more details about the capabilities of jrt-controller you can explore the documentation:

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.

Related projects

  • 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:

  • 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.

License

The jbpf framework is licensed under the MIT license.

About

Real time controller for network functions instrumented with the jbpf framework

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Introduction

Build StatusDocker Build and Test

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.

Architectural overview

The overall jrt-controller architecture is shown in the figure below:

Architectural overview

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.

Getting started

Instructions to build the controller

The first step is to initialize all git submodules:

./init_submodules.sh

Building on bare metal

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 variablessource ./setup_jrtc_env.sh
mkdir build
cd build
cmake ../ && make

Doxygen documentation

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.

Further documentation

For more details about the capabilities of jrt-controller you can explore the documentation:

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.

Related projects

  • 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:

  • 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.

License

The jbpf framework is licensed under the MIT license.

About

Real time controller for network functions instrumented with the jbpf framework

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Introduction

Build StatusDocker Build and Test

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.

Architectural overview

The overall jrt-controller architecture is shown in the figure below:

Architectural overview

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.

Getting started

Instructions to build the controller

The first step is to initialize all git submodules:

./init_submodules.sh

Building on bare metal

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 variablessource ./setup_jrtc_env.sh
mkdir build
cd build
cmake ../ && make

Doxygen documentation

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.

Further documentation

For more details about the capabilities of jrt-controller you can explore the documentation:

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.

Related projects

  • 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:

  • 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.

License

The jbpf framework is licensed under the MIT license.

About

Real time controller for network functions instrumented with the jbpf framework

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Introduction

Build StatusDocker Build and Test

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.

Architectural overview

The overall jrt-controller architecture is shown in the figure below:

Architectural overview

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.

Getting started

Instructions to build the controller

The first step is to initialize all git submodules:

./init_submodules.sh

Building on bare metal

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 variablessource ./setup_jrtc_env.sh
mkdir build
cd build
cmake ../ && make

Doxygen documentation

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.

Further documentation

For more details about the capabilities of jrt-controller you can explore the documentation:

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.

Related projects

  • 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:

  • 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.

License

The jbpf framework is licensed under the MIT license.

About

Real time controller for network functions instrumented with the jbpf framework

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages