Child pages
  • SD-RAN 1.1 Release
Skip to end of metadata
Go to start of metadata

Welcome to the open source release version 1.1.1 of ONF's SD-RAN project. Please note that this is a read only release of the source code for the nRT-RIC and RANSim. We will not be accepting pull requests in these repos, and the source code that is contained in the sdran GitHub organization cannot be used to build functional binaries because it refers back to a number of private repositories. But executables - docker containers referencing the released code - are available on Docker Hub, referenced in the Component Versions below and readily downloadable via the Helm charts. SD-RAN is currently a member-only project, and ONF membership is required to access the most current release, the master branch, and to do development with SD-RAN. 

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 & 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

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

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

sdRan-in-a-Box (RiaB)

  • Not a part of the open source release - added for completeness
  • 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

Test

  • Test infrastructure and test cases are not part of the open source release - added for completeness
  • 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

These deployment instructions are for the RIC used with RANSim. 

prerequisites - a running kubernetes cluster, kubectl and helm installed


# 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 https://publicsdrancharts.onosproject.org
helm repo update

# Create Atomix resources 
helm install -n kube-system atomix-controller atomix/atomix-controller --version 0.6.7 --wait
helm install -n kube-system raft-storage-controller atomix/atomix-raft-storage --version 0.1.8 --wait

 # Create the ONOS operator 
helm install -n kube-system onos-operator onos/onos-operator --version 0.4.9 --wait
  

At this point  we are ready to install the Helm charts for RIC components using the SD-RAN "umbrella chart".
Note that the umbrella chart version is 1.1.4 for the 1.1 release.

In addition we also enable the umbrella chart to run the RAN Simulator (RANSim) and a version of the KPIMon xApp.

If you wish to just deploy the RIC, leave the RANSim flag out of the install command below

# Run the sdran umbrella chart for the 1.1.1 release 
helm install sd-ran sdran/sd-ran --set import.ran-simulator.enabled=true --set import.onos-kpimon-v2.enabled=true --version 1.1.4  

RANSim will by default simulate two E2 nodes (gNBs) each with 3 cells, and automatically connect to the RIC.

To learn about RIC state, we can use the onos-cli shell

kubectl exec -it deploy/onos-cli -- /bin/sh

Enable tab completions, and then check that the RANSim simulated E2 nodes have connected to the onos-e2t RIC microservice

onos-cli:~$ source <(onos completion bash)
onos-cli:~$ onos e2t list connections 
Global ID            PLNM ID   IP Addr      Port    Conn Type
0000000000340422:0   1279014   10.244.0.9   43229   G_NB
00000000003020f9:0   1279014   10.244.0.9   47863   G_NB 

At this point the KPIMon xApp will make subscription requests as per the O-RAN KPM Service Model (SM) to the E2 nodes for various performance metrics. These subscriptions can be viewed in the onos-e2sub RIC microservice again via the onos-cli

onos-cli:~$ onos e2sub list subscriptions
ID                                     Revision   App ID           Service Model ID   E2 NodeID            Status
3a8a0447-0cd3-11ec-aa52-6f6e6f732d6b   41         onos-kpimon-v2   oran-e2sm-kpm:v2   0000000000340422:0   0
3a91566c-0cd3-11ec-aa52-6f6e6f732d6b   46         onos-kpimon-v2   oran-e2sm-kpm:v2   0000000000340422:0   0
3a90f431-0cd3-11ec-aa52-6f6e6f732d6b   46         onos-kpimon-v2   oran-e2sm-kpm:v2   00000000003020f9:0   0
3a942406-0cd3-11ec-aa52-6f6e6f732d6b   49         onos-kpimon-v2   oran-e2sm-kpm:v2   0000000000340422:0   0
3a89e4d1-0cd3-11ec-aa52-6f6e6f732d6b   38         onos-kpimon-v2   oran-e2sm-kpm:v2   00000000003020f9:0   0
3a8ed478-0cd3-11ec-aa52-6f6e6f732d6b   41         onos-kpimon-v2   oran-e2sm-kpm:v2   00000000003020f9:0   0

Note that while there are two E2 nodes, each node reports 3 cells. In this version of the RIC and xApp, a subscription request is sent for each cell individually to the two E2 Nodes resulting in 6 subscriptions.

To view the results of the stats reported to the xApp, again we leverage onos-cli

onos-cli:~$ onos kpimonv2 list metrics
PlmnID    egNB ID   Cell ID           Time         RRC.Conn.Avg   RRC.Conn.Max   RRC.ConnEstabAtt.Tot   RRC.ConnEstabSucc.Tot   RRC.ConnReEstabAtt.HOFail   RRC.ConnReEstabAtt.Other   RRC.ConnReEstabAtt.Tot   RRC.ConnReEstabAtt.reconfigFail
1279014   5153      343332707639553   16:24:50.0   5              5              0                      0                       0                           0                          0                        0
1279014   5154      343332707639809   16:24:50.0   5              5              0                      0                       0                           0                          0                        0
1279014   5153      343332707639554   16:24:50.0   5              5              0                      0                       0                           0                          0                        0
1279014   5154      343332707639810   16:24:50.0   5              5              0                      0                       0                           0                          0                        0
1279014   5153      343332707639555   16:24:50.0   5              5              0                      0                       0                           0                          0                        0
1279014   5154      343332707639811   16:24:50.0   5              5              0                      0                       0                           0                          0                        0


Other combinations of xApps, E2 nodes and cells are possible. Please refer to the README/documentation for RANSim and other xApps in their respective repos.

To uninstall the RIC, we use the helm release names used in the installation above

# Remove sdran and its dependencies
helm uninstall sd-ran
helm uninstall -n kube-system onos-operator atomix-controller raft-storage-controller

Known Issues

  • KPM v2 service model logic in RAN simulator is partially implemented. RANSim does not support granularity period in subscription requests; CU-CP does accurately report Collection Start Time in Indication Header

  • Decoding of unsuccessful outcome for control messages in E2AP v1.0.1 is not implemented yet

Component Versions

Components versions below refer to the container-image-tag and the helm-chart-version. Libraries refer to the git-repo tag

componentSD-RAN 1.1.1Repo
sd-ran (umbrella chart)v1.1.1 chart 1.1.4https://github.com/sdran/sdran-helm-charts
onos-apiv0.7.24https://github.com/onosproject/onos-api
onos-ric-sdk-gov0.7.11https://github.com/onosproject/onos-ric-sdk-go

onos-lib-go

v0.7.7

https://github.com/onosproject/onos-lib-go

onos-e2-sm

v0.7.19

https://github.com/sdran/onos-e2-sm

onos-e2t

v0.7.15 chart 1.0.16

https://github.com/sdran/onos-e2t

onos-e2sub

v0.7.3 chart 1.0.2

https://github.com/sdran/onos-e2sub

onos-topo

v0.7.3 chart 1.0.4

https://github.com/onosproject/onos-topo

onos-config

v0.7.18 chart 1.0.13

https://github.com/onosproject/onos-config

onos-operator

v0.4.0 chart 0.4.1

https://github.com/onosproject/onos-operator

ran-simulator (RANSim)

v0.7.26 chart 1.0.38

https://github.com/sdran/ran-simulator

onos-cli

v0.7.12 chart 1.0.11

https://github.com/onosproject/onos-cli

onos-kpimon

v0.1.8 chart v0.6.5

https://github.com/sdran/onos-kpimon

onos-pci

v0.1.3 chart 0.6.4

https://github.com/sdran/onos-pci

atomix

v3.1.9 chart 0.1.5

https://github.com/atomix

cu-cp

v0.1.5 chart 0.1.6

not available in open source

oai du

v0.1.5 chart 0.1.6

not available in open source

oai ue

v0.1.5 chart 0.1.6

not available in open source

sdran-in-a-box

v1.1.1

not available in open source

fb-ah-gui

v0.0.1 chart 0.0.1

not available in open source

ah-eson-test-server

v0.0.1 chart 0.0.1

not available in open source

fb-ah-xapp

v0.0.1 chart 0.0.1

not available in open source

  • No labels