Installation with RAN-Simulator and ONOS MHO xAPP

This document covers how to install ONOS RIC services with RAN-Simulator. With this option, RiaB will deploy ONOS RIC services including ONOS-KPIMON (KPM 2.0 supported), and ONOS-MHO xAPPs together with RAN-Simulator

Clone this repository

To begin with, clone this repository:

$ git clone https://github.com/onosproject/sdran-in-a-box

NOTE: If we want to use a specific release, we can change the branch with git checkout [args] command:

$ cd /path/to/sdran-in-a-box
$ git checkout v1.3.0 # for release 1.3
$ git checkout v1.4.0 # for release 1.4
$ git checkout master # for master

Deploy RiaB with RAN-Simulator

Command options

To deploy RiaB with RAN-Simulator, we should go to sdran-in-a-box directory and command below:

$ cd /path/to/sdran-in-a-box
# type one of below commands
# for "master-stable" version
$ make riab OPT=mho VER=stable # or just make riab OPT=mho
# for "latest" version
$ make riab OPT=mho VER=latest
# for a specific version
$ make riab OPT=mho VER=v1.3.0 # for release SD-RAN 1.3
$ make riab OPT=mho VER=v1.4.0 # for release SD-RAN 1.4
# for a "dev" version
$ make riab OPT=mho VER=dev # for dev version

Once we push one of above commands, the deployment procedure starts.

If we don’t see any error or failure messages, everything is deployed.

$ kubectl get po --all-namespaces
NAMESPACE     NAME                                              READY   STATUS    RESTARTS   AGE
kube-system   atomix-controller-99f978c7d-t6p79                 1/1     Running   0          3m13s
kube-system   atomix-raft-storage-controller-75979cfff8-vdqc6   1/1     Running   0          2m52s
kube-system   calico-kube-controllers-584ddbb8fb-nxb7l          1/1     Running   0          4h6m
kube-system   calico-node-s5czk                                 1/1     Running   1          4h6m
kube-system   coredns-dff8fc7d-nznzf                            1/1     Running   0          4h6m
kube-system   dns-autoscaler-5d74bb9b8f-cfwvp                   1/1     Running   0          4h6m
kube-system   kube-apiserver-node1                              1/1     Running   0          4h7m
kube-system   kube-controller-manager-node1                     1/1     Running   0          4h7m
kube-system   kube-multus-ds-amd64-r42zf                        1/1     Running   0          4h6m
kube-system   kube-proxy-vp7k7                                  1/1     Running   1          4h7m
kube-system   kube-scheduler-node1                              1/1     Running   0          4h7m
kube-system   kubernetes-dashboard-667c4c65f8-cr6q5             1/1     Running   0          4h6m
kube-system   kubernetes-metrics-scraper-54fbb4d595-t8rgz       1/1     Running   0          4h6m
kube-system   nodelocaldns-rc6w7                                1/1     Running   0          4h6m
kube-system   onos-operator-app-d56cb6f55-f5zp6                 1/1     Running   0          2m37s
kube-system   onos-operator-config-7986b568b-lmt8n              1/1     Running   0          2m37s
kube-system   onos-operator-topo-76fdf46db5-2k67g               1/1     Running   0          2m39s
riab          onos-a1t-84db77df99-gjqcx                         2/2     Running   0          2m5s
riab          onos-cli-6b746874c8-6qn27                         1/1     Running   0          2m5s
riab          onos-config-7bd4b6f7f6-brd68                      4/4     Running   0          2m5s
riab          onos-consensus-store-0                            1/1     Running   0          2m4s
riab          onos-e2t-58b4cd867-hskmq                          3/3     Running   0          2m5s
riab          onos-kpimon-966bdf77f-q4q5l                       2/2     Running   0          2m5s
riab          onos-mho-7859ffdd68-m85vf                         2/2     Running   0          2m5s
riab          onos-topo-7cc9d754d7-t7mqs                        3/3     Running   0          2m5s
riab          onos-uenib-779cb5dbd6-bvg8f                       3/3     Running   0          2m5s
riab          ran-simulator-5449b4c8f9-jqhm7                    1/1     Running   0          2m5s

NOTE: If we see any issue when deploying RiaB, please check Troubleshooting

End-to-End (E2E) tests for verification

In order to check whether everything is running, we should conduct some E2E tests and check their results. Since RAN-Sim does only generate SD-RAN control messages, we can run E2E tests on the SD-RAN control plane.

The E2E test on SD-RAN control plane

First, we can check E2 connections and subscriptions with make test-e2-subscription commands:

$ make test-e2-subscription
...
*** Get E2 subscriptions through CLI ***
Subscription ID                              Revision   Service Model ID      E2 NodeID   Encoding   Phase               State
76d79858affefc5ecef79683581f1561:e2:1/5153   116        oran-e2sm-mho:v2   e2:1/5153   ASN1_PER   SUBSCRIPTION_OPEN   SUBSCRIPTION_COMPLETE
bab81642e0e6d82c57a54060feeabe6f:e2:1/5153   127        oran-e2sm-mho:v2   e2:1/5153   ASN1_PER   SUBSCRIPTION_OPEN   SUBSCRIPTION_COMPLETE
1ef6855642744782186c9ba6626393a6:e2:1/5154   54         oran-e2sm-kpm:v2   e2:1/5154   ASN1_PER   SUBSCRIPTION_OPEN   SUBSCRIPTION_COMPLETE
84ce5613b27ac3b1e357879244014095:e2:1/5153   59         oran-e2sm-kpm:v2   e2:1/5153   ASN1_PER   SUBSCRIPTION_OPEN   SUBSCRIPTION_COMPLETE
14d96d88f13bba8ba7889bdf532c059d:e2:1/5153   71         oran-e2sm-mho:v2   e2:1/5153   ASN1_PER   SUBSCRIPTION_OPEN   SUBSCRIPTION_COMPLETE
bab81642e0e6d82c57a54060feeabe6f:e2:1/5154   78         oran-e2sm-mho:v2   e2:1/5154   ASN1_PER   SUBSCRIPTION_OPEN   SUBSCRIPTION_COMPLETE
76d79858affefc5ecef79683581f1561:e2:1/5154   102        oran-e2sm-mho:v2   e2:1/5154   ASN1_PER   SUBSCRIPTION_OPEN   SUBSCRIPTION_COMPLETE
14d96d88f13bba8ba7889bdf532c059d:e2:1/5154   111        oran-e2sm-mho:v2   e2:1/5154   ASN1_PER   SUBSCRIPTION_OPEN   SUBSCRIPTION_COMPLETE

Next, we can check KPIMON xAPP CLI and MHO xAPP CLI. In order to check KPIMON xAPP CLI, we should type make test-kpimon

$ make test-kpimon
...
*** Get KPIMON result through CLI ***
Node ID          Cell Object ID       Cell Global ID            Time    RRC.Conn.Avg    RRC.Conn.Max    RRC.ConnEstabAtt.Sum    RRC.ConnEstabSucc.Sum    RRC.ConnReEstabAtt.HOFail    RRC.ConnReEstabAtt.Other    RRC.ConnReEstabAtt.Sum    RRC.ConnReEstabAtt.reconfigFail
e2:1/5153       13842601454c001             1454c001      02:37:49.0               0               1                       0                        0                            0                           0                         0                                  0
e2:1/5154       138426014550001             14550001      02:37:49.0               1               1                       0                        0                            0                           0                         0                                  0

Note: It shows the current number of active UEs and the maximum number of active UEs. All other values should be 0.

Also, we should type make test-mho to check MHO xAPP CLI.

$ make test-mho
...
*** Get MHO result through CLI - Cells ***
CGI              Num UEs          Handovers-in     Handovers-out
13842601c054140  1                3                3
138426010055140  0                3                3
*** Get MHO result through CLI - UEs ***
UeID     CellGlobalID     RrcState
2a54d6   13842601c054140  CONNECTED

Note: The Handovers-in/out values should be changed in time.

Also, there are two more test Makefile targets make test-rnib and make test-uenib to check R-NIB and UE-NIB, which have cell and UE related monitoring information.

$ make test-rnib
...
*** Get R-NIB result through CLI ***
ID: gnmi:onos-config-7bd4b6f7f6-brd68
Kind ID: onos-config
Labels: <None>
Source Id's:
Target Id's:
Aspects:
- onos.topo.Lease={"expiration":"2022-03-11T02:38:49.785658001Z"}

ID: e2:1/5154
Kind ID: e2node
Labels: <None>
Source Id's: uuid:03c782b8-d993-62d3-5ada-8cde9bcc8d64
Target Id's: uuid:8b340ee9-1aa0-492f-bd8c-2ffefeef8185
Aspects:
- onos.topo.MastershipState={"term":"1","nodeId":"uuid:8b340ee9-1aa0-492f-bd8c-2ffefeef8185"}
- onos.topo.E2Node={"serviceModels":{"1.3.6.1.4.1.53148.1.2.2.100":{"oid":"1.3.6.1.4.1.53148.1.2.2.100","name":"ORAN-E2SM-RC-PRE","ranFunctions":[{"@type":"type.googleapis.com/onos.topo.RCRanFunction","reportStyles":[{"name":"PCI and NRT update for eNB","type":1}]}],"ranFunctionIDs":[3]},"1.3.6.1.4.1.53148.1.2.2.101":{"oid":"1.3.6.1.4.1.53148.1.2.2.101","name":"ORAN-E2SM-MHO","ranFunctions":[{"@type":"type.googleapis.com/onos.topo.MHORanFunction","reportStyles":[{"name":"PCI and NRT update for eNB","type":1}]}],"ranFunctionIDs":[5]},"1.3.6.1.4.1.53148.1.2.2.2":{"oid":"1.3.6.1.4.1.53148.1.2.2.2","name":"ORAN-E2SM-KPM","ranFunctions":[{"@type":"type.googleapis.com/onos.topo.KPMRanFunction","reportStyles":[{"name":"Periodic Report","type":1,"measurements":[{"id":"value:1","name":"RRC.ConnEstabAtt.Sum"},{"id":"value:2","name":"RRC.ConnEstabSucc.Sum"},{"id":"value:3","name":"RRC.ConnReEstabAtt.Sum"},{"id":"value:4","name":"RRC.ConnReEstabAtt.reconfigFail"},{"id":"value:5","name":"RRC.ConnReEstabAtt.HOFail"},{"id":"value:6","name":"RRC.ConnReEstabAtt.Other"},{"id":"value:7","name":"RRC.Conn.Avg"},{"id":"value:8","name":"RRC.Conn.Max"}]}]}],"ranFunctionIDs":[4]}}}

ID: e2:1/5153/1454c001
Kind ID: e2cell
Labels: <None>
Source Id's:
Target Id's: uuid:e8d1924d-8a87-3840-ada0-0cacbef26cc5
Aspects:
- onos.topo.E2Cell={"cellObjectId":"13842601454c001","cellGlobalId":{"value":"1454c001"},"kpiReports":{"RRC.Conn.Avg":0,"RRC.Conn.Max":1,"RRC.ConnEstabAtt.Sum":0,"RRC.ConnEstabSucc.Sum":0,"RRC.ConnReEstabAtt.HOFail":0,"RRC.ConnReEstabAtt.Other":0,"RRC.ConnReEstabAtt.Sum":0,"RRC.ConnReEstabAtt.reconfigFail":0}}

ID: e2:1/5154/14550001
Kind ID: e2cell
Labels: <None>
Source Id's:
Target Id's: uuid:03c782b8-d993-62d3-5ada-8cde9bcc8d64
Aspects:
- onos.topo.E2Cell={"cellObjectId":"138426014550001","cellGlobalId":{"value":"14550001"},"kpiReports":{"RRC.Conn.Avg":1,"RRC.Conn.Max":1,"RRC.ConnEstabAtt.Sum":0,"RRC.ConnEstabSucc.Sum":0,"RRC.ConnReEstabAtt.HOFail":0,"RRC.ConnReEstabAtt.Other":0,"RRC.ConnReEstabAtt.Sum":0,"RRC.ConnReEstabAtt.reconfigFail":0}}

ID: e2:1/5153
Kind ID: e2node
Labels: <None>
Source Id's: uuid:e8d1924d-8a87-3840-ada0-0cacbef26cc5
Target Id's: uuid:7c05ca75-a88d-433b-bf2c-997292cd60e8
Aspects:
- onos.topo.E2Node={"serviceModels":{"1.3.6.1.4.1.53148.1.2.2.100":{"oid":"1.3.6.1.4.1.53148.1.2.2.100","name":"ORAN-E2SM-RC-PRE","ranFunctions":[{"@type":"type.googleapis.com/onos.topo.RCRanFunction","reportStyles":[{"name":"PCI and NRT update for eNB","type":1}]}],"ranFunctionIDs":[3]},"1.3.6.1.4.1.53148.1.2.2.101":{"oid":"1.3.6.1.4.1.53148.1.2.2.101","name":"ORAN-E2SM-MHO","ranFunctions":[{"@type":"type.googleapis.com/onos.topo.MHORanFunction","reportStyles":[{"name":"PCI and NRT update for eNB","type":1}]}],"ranFunctionIDs":[5]},"1.3.6.1.4.1.53148.1.2.2.2":{"oid":"1.3.6.1.4.1.53148.1.2.2.2","name":"ORAN-E2SM-KPM","ranFunctions":[{"@type":"type.googleapis.com/onos.topo.KPMRanFunction","reportStyles":[{"name":"Periodic Report","type":1,"measurements":[{"id":"value:1","name":"RRC.ConnEstabAtt.Sum"},{"id":"value:2","name":"RRC.ConnEstabSucc.Sum"},{"id":"value:3","name":"RRC.ConnReEstabAtt.Sum"},{"id":"value:4","name":"RRC.ConnReEstabAtt.reconfigFail"},{"id":"value:5","name":"RRC.ConnReEstabAtt.HOFail"},{"id":"value:6","name":"RRC.ConnReEstabAtt.Other"},{"id":"value:7","name":"RRC.Conn.Avg"},{"id":"value:8","name":"RRC.Conn.Max"}]}]}],"ranFunctionIDs":[4]}}}
- onos.topo.MastershipState={"term":"1","nodeId":"uuid:7c05ca75-a88d-433b-bf2c-997292cd60e8"}

ID: e2:onos-e2t-58b4cd867-hskmq
Kind ID: e2t
Labels: <None>
Source Id's: uuid:7c05ca75-a88d-433b-bf2c-997292cd60e8, uuid:8b340ee9-1aa0-492f-bd8c-2ffefeef8185
Target Id's:
Aspects:
- onos.topo.E2TInfo={"interfaces":[{"type":"INTERFACE_E2AP200","ip":"192.168.84.87","port":36421},{"type":"INTERFACE_E2T","ip":"192.168.84.87","port":5150}]}
- onos.topo.Lease={"expiration":"2022-03-11T02:38:54.250647685Z"}

ID: a1:onos-a1t-84db77df99-gjqcx
Kind ID: a1t
Labels: <None>
Source Id's:
Target Id's:
Aspects:
- onos.topo.A1TInfo={"interfaces":[{"type":"INTERFACE_A1AP","ip":"192.168.84.79","port":9639}]}

$ make test-uenib
*** Get UE-NIB result through CLI ***
ID: 2774230
Aspects:
- RSRP-Neighbors=138426010055140:-117
- 5QI=166
- RSRP-Serving=-100
- RRCState=RRCSTATUS_CONNECTED
- CGI=13842601c054140

Other commands

Reset and delete RiaB environment

If we want to reset our RiaB environment or delete RiaB compoents, we can use below commands:

  • make reset-test: It deletes ONOS RIC services and RAN-Simulator but Kubernetes is still running

  • make clean: It just deletes Kubernets environment; Eventually, all ONOS RIC and RAN-Simulator are terminated; The Helm chart directory is not deleted

  • make clean-all: It deletes all including Kubernetes environment, all componentes/PODs which RiaB deployed, and even the Helm chart directory

Deploy or reset a chart/service

If we want to only deploy or reset a chart/service, we can use below command:

  • make atomix: It deploys Atomix controllers

  • make reset-atomix: It deletes Atomix controllers

  • make ric: It deploys ONOS RIC services

  • make reset-ric: It deletes ONOS RIC services