Implementation of the E3 Agent for dApps and E3AP (no service models) (#204) These changes introduce an E3 Agent for dApps in the OAI codebase. dApps are real-time microservices designed to operate within the O-RAN ecosystem, enabling sub-10 ms Artificial Intelligence (AI) routines in the Radio Access Network (RAN). The E3 Agent enables spectrum sensing, frequency-domain signal logging, and dynamic PRB (Physical Resource Block) policies through IPC/ZMQ communication with dApps or xApps. The dApps are designed for co-location with the CU/DU, where it can interact directly with user-plane data to enable different network management scenarios such as optimizing network slicing, scheduling, and resource management. A python library for the creation of the dApps is available here [1]. Additional information about dApps: - Paper on the dApp architecture [2] - dApp framework presentation [3] - Tutorial on dApp deployment on OAI [4] As agreed in the original MR [5], this PR includes only the agent lifecycle, configuration parsing, build plumbing, and the nr-softmodem init/destroy hook. It registers zero service models, so it builds and runs as an idle agent. Concrete service models (e.g. spectrum sensing) and the PHY/MAC hooks that drive them follow in later PRs. Opt-in and dependencies - Gated behind the E3_AGENT CMake option (OFF by default) / the --build-e3 build flag. The default build is unaffected — e3ap is only compiled and linked into nr-softmodem when E3_AGENT=ON. - When enabled, requires the external libe3 library [6] (vendor-neutral E3AP C++ lib), discovered via pkg_check_modules(CLIBE3 REQUIRED libe3). It is not vendored. Install libe3 (Debian/Ubuntu): git clone https://github.com/wineslab/libe3 && cd libe3 ./build_libe3 -I # installs deps: build-essential cmake pkg-config libzmq3-dev asn1c nlohmann-json3-dev libsctp-dev ... ./build_libe3 --install # release build + installation Build & test Tested in RFsim: the gNB initializes the E3 agent, opens its setup socket (/tmp/dapps/setup), registers zero service models, and runs without crashing. Configuration The agent reads an optional E3Configuration section from the gNB config file (parsed only when E3_AGENT=ON). If absent, it falls back to built-in defaults (posix/ipc). E3Configuration : { link = "zmq"; # posix | zmq transport = "ipc"; # tcp | sctp | ipc }; The same parameters can be overridden on the command line (no config-file edit required): sudo ./nr-softmodem -O <gnb.conf> ... --E3Configuration.link zmq --E3Configuration.transport ipc Validated link/transport combinations: (zmq,ipc) (zmq,tcp) (posix,tcp) (posix,sctp) (posix,ipc). Notes - I have added a new log component E3AP specific for the ops performed by the E3 Agent. - This PR ships no gNB config file; the E3Configuration block / CLI override above is the documented way to enable the agent. Example configs follow in the next PRs. [1] https://pypi.org/project/dapps/ [2] https://arxiv.org/pdf/2501.16502 [3] https://openrangym.com/o-ran-frameworks/dapps [4] https://openrangym.com/tutorials/dapps-oai [5] https://gitlab.eurecom.fr/oai/openairinterface5g/-/merge_requests/3361 [6] https://github.com/wineslab/libe3 Reviewed-by: Teodora Vladić <teodora.vladic@openairinterface.org> Reviewed-by: Sagar Arora <sagar.arora@openairinterface.org> Reviewed-by: Robert Schmidt <robert.schmidt@openairinterface.org>
Duranta - OpenAirInterface
Duranta OpenAirInterface RAN delivers and maintains an open-source cellular wireless software stack for 4G, 5G and future networking technologies. It supports simulation, prototyping, and end-to-end deployments on Commercial-Off-The-Shelf (COTS) hardware. Built for research and experimentation, it provides standard-compliant interfaces and is released under the Collaborative Standards Software License (CSSL).
License
The source code is distributed under CSSL v1.0. Some files, such as for orchestration, are distributed under MIT license. Documentation is distributed under Creative Commons Attribution 4.0 International license.
All the files without an explicit copyright header have an implicit "Copyright of OpenAirInterface Authors".
Please see NOTICE for other licenses which are used in the software.
In the past OAI source code has been re-licensed sometimes, here is the history:
- CSSL v1.0 starting tag 2026.w14
- OAI Public License v1.1 starting tag v1.0 till
af4b0d53 - OAI Public License v1.0: starting tag v.04 till v1.0
- GPL 3: starting tag v.0 till v.04 (only initial implementation of 4G)
Where to Start
- General overview of documentation
- The implemented features
- System Requirements for Using OAI Stack
- How to build
- How to run the modems
Not all information is available in a central place, and information for specific sub-systems might be available in the corresponding sub-directories. To find all READMEs, this command might be handy:
find . -iname "readme*"
RAN repository structure
The OpenAirInterface (OAI) software is composed of the following parts:
openairinterface5g
├── charts
├── ci-scripts : Meta-scripts used by the OSA CI process. Contains also configuration files used day-to-day by CI.
├── CMakeLists.txt : Top-level CMakeLists.txt for building
├── cmake_targets : Build utilities to compile (simulation, emulation and real-time platforms), and generated build files.
├── common : Some common OAI utilities, some other tools can be found at openair2/UTILS.
├── doc : Documentation
├── docker : Dockerfiles to build for Ubuntu and RHEL
├── executables : Top-level executable source files (gNB, eNB, ...)
├── maketags : Script to generate emacs tags.
├── nfapi : (n)FAPI code for MAC-PHY interface
├── openair1 : Layer 1 (3GPP LTE Rel-10/12 PHY, NR Rel-15 PHY)
├── openair2 : Layer 2 (3GPP LTE Rel-10 MAC/RLC/PDCP/RRC/X2AP, LTE Rel-14 M2AP, NR Rel-15+ MAC/RLC/PDCP/SDAP/RRC/X2AP/F1AP/E1AP), E2AP
├── openair3 : Layer 3 (3GPP LTE Rel-10 S1AP/GTP, NR Rel-15 NGAP/GTP)
├── openshift : OpenShift helm charts for some deployment options of OAI
├── radio : Drivers for various radios such as USRP, AW2S, RFsim, 7.2 FHI, ...
├── targets : Some configuration files; only historical relevance, and might be deleted in the future
└── tools : Tools for use by the developers/ci machines: code analysis and formatting
How to get support from the Community
You can ask your question on the mailing lists.
Your email should contain below information:
- A clear subject in your email.
- For all the queries there should be [Query] in the subject of the email and for problems there should be [Problem].
- In case of a problem, add a small description.
- Do not share any photos unless you want to share a diagram.
- OAI gNB/DU/CU/CU-CP/CU-UP configuration file in
.confformat only. - Logs of OAI gNB/DU/CU/CU-CP/CU-UP in
.logor.txtformat only. - In case your question is related to performance, include a small description of the machine (Operating System, Kernel version, CPU, RAM and networking card) and diagram of your testing environment.
- Known/open issues are present on Github, so keep checking.
Always remember a structured email will help us understand your issues quickly.
