SD-RAN 1.1 Release Notes
Highlights
The second release of the SD-RAN project builds on the O-RAN and 3GPP consistent end-to-end mobile RAN stack introduced in the first release. This includes the micro-ONOS based nRT-RIC, a white-box based CU/DU/RU solution with LTE support, and a completely virtualized dev/test environment RiaB (sdRan-in-a-Box).
The main highlight of this release is the collaboration between ONF, Facebook and AirHop towards a demonstration of SON functionality as an xApp. AirHop’s eSON server, a commercial product, was integrated with ONF’s nRT-RIC via an app-SDK developed by Facebook. The SON use-case showcased in this release involves Physical Cell Identifier (PCI) conflict resolution, for which a pre-standard Service Model (RC-PRE) was jointly designed and developed. As part of this work, a Python based xApp-SDK that makes it easy for xApps to integrate with the RIC was developed. It complements ONF’s Go based SDK, both of which can be used simultaneously by different xApps.
Another highlight of this release is ONF’s RAN simulator (RANSim) which is now O-RAN compliant in its use of the E2 interface and Service Models (SMs) when interacting with the RIC. In this release, RANSim was completely rearchitected to simulate dozens of E2 nodes, and simultaneously support multiple Service Models such as KPM and RC-PRE SMs. Runtime gRPC APIs were added to support CRUD operations on E2 nodes, cells and their attributes, and a supporting utility was added that generates a hexagonal grid of cell-towers that can be loaded into RANSim to create a RAN topology.
Also in this release, the entire SD-RAN stack was upgraded to support O-RAN standardized KPM-SM v2.0.3 and E2-AP v1.0.1. Changes were made not only in the RIC and RanSim, but also to the OAI-based CU/DU in support of the new versions. The KPImon-xAPP developed by ONF, now simultaneously supports 4G statistics (from CU) and 5G statistics (from RanSim) via KPM-v2.
Finally, RiaB can now be used in 3 different modes depending on the use case
with OAI CU/DU enhanced by ONF to support E2AP and KPM-SM together with onos-kpimon xApp, OAI UE software and ONF’s mobile core (OMEC) - this option can also be deployed on white-box hardware as noted below;
with RANSim supporting KPM and RC-PRE SMs, and the RIC using onos-pci and onos-kpimon xApps via the Go SDK;
with RANSim supporting KPM and RC-PRE SMs, and the RIC using FB/AirHop’s xApp via the Python SDK and the onos-kpimon xApp via the Go SDK; note that the use of AirHop’s eSON server requires a commercial agreement with AirHop and is not included in the release. In its place a test-eson-server is included to showcase integration.
Features and Improvements
micro-ONOS based nRT-RIC (ONOS-RIC), SDKs & xApps
onos-e2t
Upgrades E2 Protocol to use E2AP v1.0.1
Implements control API to support E2 control procedure
Adds validation for control requests
Uses OID for creating the mapping between service models and RAN functions and registering service model plugins
Adds support for subscription deletes
Adds buffers for indication streams to avoid race conditions and preserve indications through xApp restarts
Adds validation for subscriptions
onos-e2-sm
Provides Protobuf interface to E2 Service Models
Translates to/from Protobuf to/from ASN.1 APER encoding
Accessible as a plugin (for onos-e2t) or a Go module (for xApps)
Supports KPM Service Model v1.0 and v2.0.3
Supports RC-PRE Service Model v1.0
Provides a utility (protoc-gen-cgo) for auto-generation of Go code wrappers for C code generated by asn1c tool. Generated code still requires some changes by hand.
onos-e2sub
Upgrades subscription API
onos-api
Supports E2 Control API
Updates E2 subscription API to define service model ID using service model name and version
Added a set of APIs for interacting with RAN simulator (see RANSim section below)
onos-ric-sdk-go
Supports E2 Control SDK
Adds capability to handle subscription failures
onos-kpimon-app
Monitors both 4G stats (from LTE CU) and 5G stats (from RANSim) including Max/Avg number of Active UE’s per cell
Makes the monitored result available through CLI
Monitors config changes (i.e. changes in report interval) and reacts to them by deleting old subscription and creating a new one using new configured report interval value
onos-pci
Reference xapp for resolving PCI conflicts using Go based SDK; can be used in place of fb-ah-xapp and AirHop’s eSON server, but does not support all the features of the latter
Provides capability to subscribe to RC-PRE service model and receives indication messages from E2 nodes
Provides capability to send control requests to change PCI values for cells
Supports listing of PCI resources such metrics, neighbors, PCI, and PCI conflicts of cell(s) using CLI that is integrated with onos-cli
Detects PCI conflicts and resolves them based on an algorithm that uses cell neighbors information
onos-config
Configuration model plugins are now compiled at deploy time and loaded in by onos-operator
Model plugin definitions (ric and e2node) have been moved to Helm charts
Added authentication and authorization and security logging
Improved handling for more complex YANG models with lists in lists
Upgraded version of YGOT and other libraries
onos-topo
Minor bug fixes to event notifications and CI improvements
Removed deprecated device APIs
onos-cli
Merged the sdran and onos CLIs into a single ONOS CLI
Integrated RANSim CLI capabilities (see RANSim section below)
Integrated PCI xApp CLI capabilities (see onos-pci section)
Added support for querying the config model registry
Python xApp SDK (tentatively called aiomsa)
SDK is used in fb-ah-xapp.
“Getting started” documentation here https://pypi.org/project/aiomsa/
Package available via “pip install aiomsa”.
Will be open sourced on github in the near future.
fb-ah-xapp
This xApp uses the Python SDK (aiomsa) to communicate with the ONF RIC, and a gRPC interface to communicate with AirHops eSON server
PCI xApp receives indication messages from the RIC and notifies the Airhop eSON service. Deploy with ah-eson-test-server if eSON service is not available (requires commercial agreement)
Receives change requests from the eSON service, and sends E2AP control messages to e2 node
Ignores FCN and PCI pool in the indication message
fb-ah-gui
GUI for viewing RAN simulator state, displaying a table with columns ECGI, PCI, neighbors.
Displays a map with cells as vertices, neighbor relationships as edges, and color codes edges to display conflicts and confusions
Sectors are not shown, so cells with identical coordinates will overlap
Neighbor relationship edges may overlap, hiding conflicts
Google maps API dev key is locked to localhost:8080. To access, port forward via ssh -L 8080:localhost:30095 <k8s_node> and browse to http://localhost:8080
ah-eson-test-server
Stand-in for commercial Airhop eSON service, responds to Airhop eSON gRPC service requests from fb-ah-xapp
Does not resolve PCI conflicts, but pushes down random PCI change requests
onos-operator
Provides a Kubernetes operator which extends the k8s control plane to automate configuration management in SD-RAN components
Consists of two component-specific operators: topo-operator and config-operator
Each operator extends the Kubernetes API and control plane with custom resources and control logic
topo-operator
Extends the Kubernetes API with custom resources for topology elements: Kind, Entity, and Relation
Propagates Kubernetes API resources defined in Helm charts to the onos-topo service
Enables load balancing between services with dynamic topology Entity and Relation elements linked to ReplicaSets
Automates management of topology elements (Entity and Relation) using Kubernetes failure detection and garbage collection algorithms
config-operator
Extends the Kubernetes API, adding a custom Model resource for defining YANG models in Helm charts
Injects config models into onos-config pods as Go plugins
Replaces finicky plugin build scripts with automated just-in-time compilation of Go plugins
Uses Go module system to eliminate problematic version conflicts when loading config model plugins
Enables rolling upgrades of onos-config by compiling plugins for multiple versions
Serves as a proof-of-concept for making other SD-RAN components extensible in Helm charts — particularly service model plugins
ONF/OAI CU-CP & White-Box RAN hardware
Ettus B210 USRP, Enclosure kit, Intel NUC10i7FNH, Taoglas TG.45.8113
Samsung Android smartphone (J5)
OAI UE and OAI RU/DU/CU (covered by OAI Public License v1.1) split mode over Band 7 FDD with ONF enhancements for CU-CP and E2 Agent (covered under ONF Member-only software license)
CU-CP E2 Agent supports for the relevant Ran Function (KPM-SM):
Upgrades E2SM-KPM to v02.00.02
E2 setup request and response
Subscription request and response
RIC Indication format choice -E2SM-KPM Indication Message Format 1
sdRan-in-a-Box (RiaB)
Deploys onos-pci (RC-PRE SM) and onos-kpimon (KPM 2.0 SM) with RANSim
Deploys onos-kpimon (KPM 2.0 SM) with CU-CP/OAI DU/OAI UE
Deploys Facebook-AirHop use case with RANSim to resolve PCI conflicts
Deploys ONF & OAI CU-CP / OAI-DU / OAI-UE for the USRP/Hardware scenario
Supports multiple OAI UEs deployment
Support test-user-plane, test-kpimon-v1/v2, and test-pci to test
“test-user-plane”: test user plane with OAI-UE and OMEC-UP
“test-kpimon-v1/v2”: test onos-kpimon-v1 (KPM 1.0) and onos-kpimon-v2 (KPM 2.0) applications
“test-pci”: test ONOS-PCI application
Minor bug fixes for RiaB reset and deployment
RanSim
Upgrades E2 Protocol to use E2AP v1.0.1
Supports simulation of multiple E2 nodes with ability to add/remove E2 nodes at runtime
Supports running of multiple service models for each simulated E2 node
Uses OID for registering of service models
Provides generic and use case specific simulation models for modeling of RAN environments
Implements data store interfaces for storing information about RAN entities and metrics.
Implements preliminary subscription and subscription delete handlers for KPM v2 service model
Supports a preliminary implementation of indication messages for KPM v2 service model
Implements subscription and subscription delete handlers for RC-PRE service model (i.e PCI use case)
Implements control procedure handler for RC-PRE service model (i.e. PCI use case)
Supports sending indication messages for RC-PRE service model based on two approaches: periodic and on cell attributes and metrics changes
Provides new APIs to:
manipulate SD-RAN nodes, their agents, cells and UEs to allow for simulating changing RAN environments
inject and retrieve arbitrary metrics on per-node, per-cell and per-UE basis
wholesale load new RAN simulation models and associated metrics
CLI integrated with onos-cli to allow command-line access to the above APIs
Implements auxiliary tools to:
generate large honeycomb RAN topologies with cell neighbor relationships based on distance and direction
generate PCI metrics for a given model and with desired number of PCI collisions and confusions
Test
CI infrastructure was moved from Travis CI to an internally hosted Jenkins instance. This gives us the ability to run CI jobs on hardware resources and offers more flexibility in the kinds of jobs we can run.
Automatically generated mocks for Golang are now released as part of the onos-api module
Robot tests for hardware based QA pods are under development
Deploy job runs off of an internally hosted Jenkins instance that cleans and deploys individual components to their respective QA pod (OMEC, RIC, OAI-ENB-USRP/CU and DU) using RiaB
Robot tests verifies the relevant pods are running for each component
Sanity tests attaches a UE using OAI-UE and verifies that it attached successfully, and runs a ping test with the UE
Increased unit test coverage in onos-e2t, onos-e2sub, and onos-config
Added new integration tests for onos-e2t functionality
Added new smoke test for the fp-ah-xapp
Added new integration test for onos-pci xApp
Deployment
sdran-helm-charts
ONOS RIC can be installed from the helm charts as shown below:
# Set up onos and sdran repos
helm repo add cord https://charts.opencord.org
helm repo add atomix https://charts.atomix.io
helm repo add onos https://charts.onosproject.org
helm repo add sdran --username "$repo_user" --password "$repo_password" https://sdrancharts.onosproject.org
helm repo update
# Create Atomix resources
helm install -n kube-system atomix-controller atomix/atomix-controller
helm install -n kube-system raft-storage-controller atomix/raft-storage-controller
helm install -n kube-system cache-storage-controller atomix/cache-storage-controller
# Create the ONOS operator
helm install -n kube-system onos-operator onos/onos-operator --wait
# Run the sdran chart
helm install sd-ran sdran/sd-ran
# Remove sdran and its dependencies
helm uninstall sd-ran
helm uninstall -n kube-system onos-operator atomix-controller raft-storage-controller cache-storage-controller
Please contact ONF for username and password credentials that allow access to the sdran helm chart repo
When using RiaB, please refer to the RiaB documentation
For hardware setups, please check the Hardware Installation docs
Documentation
All release documentation is available at: docs.sd-ran.org
Please contact ONF for username and password credentials
Known Issues
KPM v2 service model logic in RAN simulator is partially implemented
Some new features are required in E2T and SDK to fully support Action Definition in subscription requests
Decoding of unsuccessful outcome for control messages in E2AP v1.0.1 is not implemented yet
Component Versions
component |
version |
---|---|
onos-api |
v0.7.22 |
onos-ric-sdk-go |
v0.7.11 |
onos-lib-go |
v0.7.7 |
onos-e2-sm |
v0.7.19 |
onos-e2t |
v0.7.14 chart 1.0.14 |
onos-e2sub |
v0.7.3 chart 1.0.2 |
onos-topo |
v0.7.3 chart 1.0.4 |
onos-config |
v0.7.18 chart 1.0.13 |
onos-operator |
v0.4.0 chart 0.4.1 |
ran-simulator |
v0.7.24 chart 1.0.35 |
onos-cli |
v0.7.11 chart 1.0.9 |
onos-kpimon |
v0.1.7 chart 0.6.4 |
onos-pci |
v0.1.2 chart 0.6.3 |
cu-cp |
v0.1.4 chart 0.1.4 |
oai du |
v0.1.4 chart 0.1.4 |
oai ue |
v0.1.4 chart 0.1.4 |
sdran-in-a-box |
v1.1.0 |
fb-ah-gui |
v0.0.1 chart 0.0.1 |
ah-eson-test=server |
v0.0.1 chart 0.0.1 |
fb-ah-xapp |
v0.0.1 chart 0.0.1 |
atomix |
v3.1.9 chart 0.1.5 |