SD-RAN 1.4 Release Notes


The fifth release of the SD-RAN project brings significant improvements to the platform as well as several 3rd party integrations in xApps and RAN equipment. This is also the first release of SD-RAN to fully embrace open source - all code repositories, helm-charts and documentation are now Apache licensed and available to the public, together with older releases that were previously incubated under the ONF Member-only license.

A key feature of this release is the introduction of the A1-Termination (AIT) microservice, which is based on the official O-RAN A1TD v02.00 and A1AP v03.01 specifications. The main A1T goal is to manage policies in the SD-RAN environment via communication with an external non Real-Time RIC. The first implementation of such a use-case involved a Traffic Steering (TS) xApp introduced by RIMEDO Labs. The xApp interacts with A1T and dynamically manages UE to base-station connectivity taking into account radio conditions, cell-types and QoS profiles. The Mobile-Handover SM (MHO) was updated to its second version to implement the functionality required by the TS xApp.

Using an earlier version of the MHO-SM from SD-RAN 1.3, Intel has released a Connection Management xApp demonstrating the power of applying AI/ML to managing the RAN. Implementing a deep reinforcement learning (DRL) algorithm with a graph neural network (GNN) model, the xApp intelligently manages a wireless network and association of mobile user equipment with available radio cells, optimizing for user throughput, cell coverage, and load balancing.

On the RAN equipment front, Sercomm has recently announced integration of their 5G-SA gNB with SD-RAN nRT-RIC and KPM use case. Furthermore, our OAI based whitebox LTE CU/DU software has been upgraded to support O-RAN’s E2AP 2.0 interface, and has added Uplink slicing to complement Downlink RAN Slicing implemented in the previous SD-RAN release.

On the RIC platform front, in preparation for a comprehensive O-RAN O1T implementation in future releases, we put in significant effort into the onos-config microservice. The onos-config service internals were redesigned and reimplemented to address various instability issues and incorporate new patterns and architectures into the algorithms with which onos-config processes gNMI requests and manages network configuration. The controllers at the core of onos-config were redesigned in TLA+ – a machine-checked formal specification language – to develop a more stable and viable architecture long-term, and the controllers were reimplemented according to the new design. On the northbound, new gNMI extensions make onos-config’s handling of gNMI Set and Get requests configurable with support for various consistency strategies when propagating changes to gNMI targets. On the southbound, support was added for handling non-persistent targets (recovering target configuration after restarts). This refactoring effort also produced a new internal data model and outward facing abstractions (Transactions, Proposals, and Configurations) in the onos-config northbound API.

Finally, the Go APER library introduced in SD-RAN 1.3, was updated to support the E2AP protocol stack (previously it supported only E2-SMs). In particular, newly added features enable encoding and decoding of CHOICEs with Canonical Ordering (specific to E2AP definition and not that widely used in ASN.1 practice). Also, fixing potential race condition bugs in this library added more stability to the E2AP/E2SM communication process. The current distribution of Go APER library produces APER bytes identical to the one produced with Nokia’s asn1c tool distribution.

A helpful listing of the use-cases, xApps, SMs and their support in this release on various platforms is shown below.

Use Case


Service Model (developed by)

Radisys disaggregated 5G SA CU/DU

Sercomm 5G-SA gNB

Whitebox LTE CU/DU


KPI Monitoring

onos-kpimon, fb-kpimon, fb-ah

KPM v2 (O-RAN)

E2-AP v1.0.1

E2-AP v1.0.1

E2-AP v2.0

E2-AP v2.0

PCI Conflict Resolution

onos-pci, fb-ah

RC-PRE v2 (ONF / FB / AirHop / Radisys)

E2-AP v1.0.1

E2-AP v2.0

Mobility Load Balancing (MLB)

onos-mlb, fb-ah

RC-PRE v2 (ONF / FB / AirHop / Radisys)

E2-AP v1.0.1

E2-AP v2.0

Mobile Handover (MHO)

onos-mho, Intel CM-xapp

MHO v1 (ONF/FB/Intel)

E2-AP v2.0

RAN Slice Management


RSM v1 (ONF)

E2-AP v2.0

Policy driven Traffic Steering


MHO v2 (ONF/FB/Intel/Rimedo-Labs)

E2-AP v2.0

Features & Improvements

micro-ONOS based nRT-RIC (ONOS-RIC) platform & app-SDKs

  • onos-e2t

    • Migrated service model plugins to use new versions that use Go APER library

    • Updated E2AP API to use Go APER library for encoding/decoding of E2AP messages

    • Fixed race condition bugs and memory leak

    • E2AP protobuf structure was changed to correspond strictly to the ASN.1 definition and C-structures generated by asn1c tool.

      • pdubuilder and pdudecoder packages for E2AP protocol stack were reworked.

    • All CGo dependencies (E2AP encoder) were removed.

  • onos-a1t

    • Implemented with support to A1 Policy Management interacting with xApps (A1 Enrichment Information not fully supported).

    • Realized the integration with onos-topo to interact with A1-enabled xApps for specific policy type IDs and EI job type IDs.

    • Implemented Open API auto generation of HTTP client and server source code for Policy Management and Enrichment Information services.

    • Implemented CLI to expose the xApp subscription information

    • Implemented A1T southbound interface being able to communicate with xApps

  • onos-a1-dm

    • Implemented A1 JSON schemas for O-RAN WG2 A1 data model version 2.0

      • Supported policy data model: QoE and Traffic Steering, QoE Target, QoS and Traffic Steering, QoS Target, Slice SLA Target, Traffic Steering Preference, and UE Level Target

  • onos-e2-sm

    • MHO SM was updated. Newer revision aligns existing MHO definition with common data structures defined by O-RAN in E2SM, in particular, UE-ID representation.

    • CGo-based plugins are not built and published anymore, but source code is still present.

      • They were substituted with Go-based plugins which use the Go APER library.

    • Default logger for Go-based SMs was changed to the ONF’s proprietary one.

    • Validate function was re-introduced (now support of optional fields is enabled).

    • Protoc-gen-choice plugin, which generates a CHOICE map for corresponding E2SM/E2AP (mandatory prerequisite for Go APER library) was updated to support multiple input Protobuf files and generate a single map.

    • How to create your own SM tutorial was added.

  • onos-api

    • Define new version of onos-config internal APIs and deprecate old APIs

    • Removed deprecated APIs

    • Defined A1T admin APIs for CLI and southbound APIs for both policy management and enrichment information

  • onos-topo (R-NIB)

    • Improved RelationFilter functionality to support RELATIONS_ONLY and RELATIONS_AND_TARGETS scopes

  • onos-config

    • Completely redesigned onos-config controllers to address instability and ensure long-term maintainability

    • Created a formal TLA+ specification of the new logic for processing, propagating, and rolling back configuration change requests in the controllers

    • Verified the new onos-config controller architecture and logic maintains using TLC (the TLA+ model checker)

      • Checked that transactions are always processed and applied to targets in the order in which they were received

      • Checked that the system maintains serializable isolation for transactions

      • Checked that no possible behavior of the system exists that leads to a deadlock

      • Ran model checked simulations of tens of millions of scenarios

    • Implemented/reimplemented various onos-config controllers based on the TLA+ spec

      • Transaction controller to reconcile transactions created by NB of onos-config for Set requests

      • Proposal controller to reconcile proposals created by transaction controller by creating gNMI Set requests and sending them to the targets

      • Configuration controller to reconcile configuration for ephemeral targets

      • Target controller to connect/disconnect to the targets as they added/removed from topology

      • Connection controller to manage control relations in topology

      • Mastership controller to create/update mastership state to target entities

      • Node controller to manage onos-config node entities in topo

    • Developed a prototype of model-based test case generation to verify the code correctly implements the TLA+ spec

    • Reimplemented the northbound Set API to use transactions to process requests

    • Reimplemented the northbound Get API to query configuration from the internal Configuration state

    • Added a passthrough for STATE variables on gNMI Get requests

    • Added a gNMI extension for synchronous Sets (wait for changes to be applied to targets)

    • Added a gNMI extension for synchronous Gets (passthrough to targets)

    • Added support for serializable isolation of multi-target Sets (any later change to one of the same targets must via a gNMI extension on northbound Sets

    • Added support for new persistent flag on target entities in onos-topo

    • Extended configuration protocol to support restoration of configuration on ephemeral (persistent=false) targets

    • Extended northbound API with a new data model (transactions/proposals/configurations) based on the TLA+ spec

    • Implemented new data stores to persist transactions, proposals, and configurations

    • Implemented a new SB to manage connections and detect connection failures

    • Implemented new NB to incorporate new changes with preserving the functionality

    • Implemented a new model plugin interface using gRPC and sidecar containers

  • onos-uenib (UE-NIB)

    • Stores 5QI information reported by MHO xApp.

  • onos-cli

    • Deprecated old onos-config CLI

    • Implemented new onos-config CLI for listing and watching transactions and configurations, rollback transactions, listing plugins.

  • onos-exporter

    • Fix the reference of opendistro-es in broken helm chart repo to opensearch for logging storage of fluentbit

    • The definition of the helm charts related to logging and monitoring (i.e., prometheus-stack, fluent-bit and opensearch) were moved to onos-exporter dependencies

  • onos-operator

    • Removed the unused onos-config operator

  • onos-proxy

    • Updated build dependencies

  • onos-lib-go

    • Go APER library was updated to support E2AP protocol stack

      • In particular, new features enable encoding of CHOICEs with Canonical Ordering.

      • Fix race condition bug.

      • Current distribution of Go APER library produces APER bytes identical to the one produced with Nokia’s asn1c tool.

    • Updated logger package to use package name by default for the name of logger

  • Atomix

    • Fixed memory leaks in session management state machine

    • Implemented session recovery protocol to handle expired sessions in drivers

  • Go xApp SDK (onos-ric-sdk-go)

    • Implements a1t API to enable xApps interact with onos-topo and onos-a1t

  • Python xApp SDK (onos-ric-sdk-py)

    • Upgraded to the latest version of the KPM service model


  • onos-kpimon-xapp

    • Updated to use new version of kpm v2 service model that uses Go APER library

  • onos-pci-xapp

    • Updated to use new version of rc-pre service model that uses Go APER library

    • Fixed minor bugs related to wrong PLMN ID

    • Updated to store cell type to onos-topo

  • onos-mlb-xapp

    • Fixed minor bugs related to wrong PLMN ID

  • onos-rsm-xapp

    • Updated to support E2AP v2.0 and latest RSM service model version

  • onos-mho-xapp

    • xApp was updated to use MHO SM v2.

      • MHO SM v2 is based on the Go APER library.

  • fb-kpimon-xapp

    • Upgraded to the latest version of the KPM service model

  • fb-ah-xapp

    • Upgraded to the latest version of the KPM service model

  • fb-ah-gui

    • No changes for this release

  • ah-eson-test-server

    • No changes for this release

  • rimedo-ts-xapp

    • Implements a traffic steering application utilizing the MHO Service Model

    • In the northbound defines the implementation of A1 Policy Management service supporting integration of onos-a1t for traffic steering policy definitions, in specific ORAN_TrafficSteeringPreference_2.0.0 policy type ID

    • By the A1 policy definitions via onos-a1t, rimedo-ts-xapp enforces the attachment of UEs with a defined profile to a specific cell by triggering handovers

    • In particular, the UE profile (i.e., 5QI) was extended in MHO service model to be reported in the Indication messages of MHO SM, and so this feature was implemented in the ran-simulator

ONF/OAI CU-CP & White-Box RAN hardware

sdRan-in-a-Box (RiaB)

  • Added Vagrant file for hardware installation and updated hardware installation documents accordingly

  • Supported E2AP 2.0 for OAI use-case

  • Removed all prompts asking credentials since RiaB and the deployments are now all open-source projects


  • Fix minor bugs in connection controller

  • Fixed wrong PLMN ID issue

  • Update E2AP client API to use Go APER library for encoding/decoding of E2AP messages

  • Embedded functionality to randomly generate 5QI value for each UE.

  • All CGo dependencies (E2AP encoder) were removed.

  • Adds the definition of 5QI to the UE profile, reported in Indication messages in MHO service model


  • Added UL tests to RSM functional robot tests

  • Added A1T integration test

  • Added RIMEDO Labs traffic steering xApp integration test

  • onos-config integration tests

    • Enhanced coverage of GNMI Get, Set, and Delete operations

    • Enhanced testing of failover operations for onos-config nodes and targets

  • Added new unit tests for onos-config


  • Sdran-helm-charts (prerequisites: a running kubernetes cluster, kubectl and helm installed)

  • Note that the SD-RAN umbrella chart version used below (v1.4.2) in the helm install command corresponds to a version of E2T microservice that uses O-RAN E2AP v2.0. For use of E2AP v1.01, use a different umbrella chart (v1.2.126). The two E2AP versions cannot be used at the same time.

# Add helm repositories
helm repo add cord
helm repo add atomix
helm repo add onos
helm repo add sdran
helm repo update

# Install atomix and onos-operator in kube-system namespace
helm install atomix-controller atomix/atomix-controller -n kube-system --wait --version 0.6.9
helm install atomix-raft-storage atomix/atomix-raft-storage -n kube-system --wait --version 0.1.25
helm install onos-operator onos/onos-operator -n kube-system --wait --version 0.5.2

# Install sd-ran (not in kube-system namespace)
kubectl create ns sdran 
helm -n sdran install sd-ran sdran/sd-ran --version 1.4.2

# Uninstall sd-ran, atomix and onos-operator
helm -n sdran uninstall sd-ran
helm -n kube-system uninstall onos-operator atomix-raft-storage atomix-controller
kubectl delete ns sdran


Known Issues

  • xApp A1 policy consistent problem: a new A1-enabled xApp should not be added if there are already A1 policies added. If it happens, the new xApp is unable to get the old A1 policies already added. The new xApp only has the A1 policies which are pushed after the xApp is deployed.

Component Versions


SD-RAN 1.4.0

sd-ran (umbrella chart)

1.4.2, 1.2.126 (for e2ap101)














v0.10.11 chart 1.3.10, v0.8.13 chart 1.1.12 (for e2ap101)


v0.2.5 chart 1.2.2


v0.9.4 chart 1.2.3


v0.10.28 chart 1.6.12


v0.5.0 chart 0.5.2


v0.9.6 chart 1.3.9


v0.9.11 chart 1.2.7


v0.3.5 chart 0.8.5


v0.3.5 chart 0.8.5


v0.2.2 chart 0.2.3


v0.2.0 chart 0.4.3


v0.1.13 chart 0.1.8


v0.2.5 chart 0.2.4


v0.1.11 chart 0.1.5



oai/onf cu

v0.1.10 chart 0.2.4

oai/onf du

v0.1.10 chart 0.2.4

oai ue

v0.1.7 chart 0.1.10 (for nFAPI); sdran-1.1.2 chart 0.1.10 (for USRP hardware)

sdran-in-a box (RiaB)



v0.0.5 chart 0.0.5


0.0.2 chart 0.0.5


0.0.3 chart 0.0.4


v0.0.18 chart 0.0.15


v0.0.19 chart 0.0.7


v0.6.2 chart 0.6.9


v0.9.19 chart 0.1.25