diff --git a/MakefileVar.mk b/MakefileVar.mk index 2b007ca..73c9d07 100644 --- a/MakefileVar.mk +++ b/MakefileVar.mk @@ -19,6 +19,7 @@ AETHERCHARTCID-V1.0.0 ?= 6b3a267e428402d6bb8531bd921c1d202bb338b2 AETHERCHARTCID-LATEST ?= 9f79ab87a96ae9ee2bb9a1540f4cd1574261611b SDRANCHARTCID-LATEST ?= origin/master SDRANCHARTCID-E2AP101-LATEST ?= origin/e2ap101 +SDRANCHARTCID-E2AP101-V1.3.0 ?= sd-ran-1.2.125 SDRANCHARTCID-V1.0.0 ?= v1.0.0 #branch: v1.0.0 SDRANCHARTCID-V1.1.0 ?= 6670e6da25129b665b024a7c6d0fd79cfda52f25 SDRANCHARTCID-V1.1.1 ?= 479ff0b59d4ae9f09cd9f7be6ea9a189f207b810 diff --git a/docs/Installation_OAI_nFAPI.md b/docs/Installation_OAI_nFAPI.md index 08b1d1a..b579af2 100644 --- a/docs/Installation_OAI_nFAPI.md +++ b/docs/Installation_OAI_nFAPI.md @@ -1,5 +1,5 @@ -# Installation with CU-CP and OAI nFAPI emulator -This document covers how to install ONOS RIC services with CU-CP and OAI nFAPI emulator. +# Installation with CU-CP and OAI nFAPI emulator for KPIMON & RSM +This document covers how to install ONOS RIC services with CU-CP and OAI nFAPI emulator for KPIMON and RSM use-cases. With this option, RiaB will deploy ONOS RIC services including ONOS-KPIMON (KPM 2.0 supported) together with CU-CP, OAI DU (nFAPI), and OAI UE (nFAPI). ## Clone this repository @@ -24,17 +24,18 @@ To deploy RiaB with OAI nFAPI emulator, we should go to `sdran-in-a-box` directo ```bash $ cd /path/to/sdran-in-a-box # type one of below commands -# for "master-stable" version +# for "master-stable" version (KPIMON and RSM) $ make riab OPT=oai VER=stable # or just make riab OPT=oai -# for "latest" version -$ make riab OPT=oai VER=latest +# for "latest" version (KPIMON and RSM) +$ make riab OPT=oai VER=latest # # for a specific version -$ make riab OPT=oai VER=v1.0.0 # for release SD-RAN 1.0 -$ make riab OPT=oai VER=v1.1.0 # for release SD-RAN 1.1 -$ make riab OPT=oai VER=v1.1.1 # for release SD-RAN 1.1.1 -$ make riab OPT=oai VER=v1.2.0 # for release SD-RAN 1.2 +$ make riab OPT=oai VER=v1.0.0 # for release SD-RAN 1.0 (KPIMON only) +$ make riab OPT=oai VER=v1.1.0 # for release SD-RAN 1.1 (KPIMON only) +$ make riab OPT=oai VER=v1.1.1 # for release SD-RAN 1.1.1 (KPIMON only) +$ make riab OPT=oai VER=v1.2.0 # for release SD-RAN 1.2 (KPIMON only) +$ make riab OPT=oai VER=v1.3.0 # for release SD-RAN 1.3 (KPIMON and RSM) # for a "dev" version -$ make riab OPT=oai VER=dev # for release SD-RAN 1.1 +$ make riab OPT=oai VER=dev # for dev (KPIMON and RSM) ``` Once we push one of above commands, the deployment procedure starts. @@ -79,42 +80,42 @@ touch /tmp/build/milestones/helm-ready If we don't see any error or failure messages, everything is deployed. ```bash $ kubectl get po --all-namespaces -NAMESPACE NAME READY STATUS RESTARTS AGE -default router 1/1 Running 0 42h -kube-system atomix-controller-7785674d5d-wnn8v 1/1 Running 0 42h -kube-system atomix-memory-storage-controller-66644577fb-qfs48 1/1 Running 0 42h -kube-system atomix-raft-storage-controller-687d8497d4-wbfx5 1/1 Running 0 42h -kube-system calico-kube-controllers-db474b467-jwbjj 1/1 Running 0 8d -kube-system calico-node-8jzz4 1/1 Running 0 8d -kube-system coredns-dff8fc7d-cvx65 1/1 Running 0 8d -kube-system dns-autoscaler-5d74bb9b8f-99ktb 1/1 Running 0 8d -kube-system kube-apiserver-node1 1/1 Running 0 8d -kube-system kube-controller-manager-node1 1/1 Running 0 8d -kube-system kube-multus-ds-amd64-5gvnf 1/1 Running 0 8d -kube-system kube-proxy-xmtkj 1/1 Running 0 8d -kube-system kube-scheduler-node1 1/1 Running 0 8d -kube-system kubernetes-dashboard-667c4c65f8-v2lvk 1/1 Running 0 8d -kube-system kubernetes-metrics-scraper-54fbb4d595-bd2w9 1/1 Running 0 8d -kube-system nodelocaldns-ppljr 1/1 Running 0 8d -kube-system onos-operator-config-9896789b8-bngw2 1/1 Running 0 42h -kube-system onos-operator-topo-6b44c56d8d-d5bwz 1/1 Running 0 42h -riab cassandra-0 1/1 Running 0 42h -riab hss-0 1/1 Running 0 42h -riab mme-0 4/4 Running 0 42h -riab oai-enb-cu-0 1/1 Running 0 8m31s -riab oai-enb-du-0 1/1 Running 0 7m20s -riab oai-ue-0 1/1 Running 0 6m9s -riab onos-cli-8584c45c84-wdrrq 1/1 Running 0 9m37s -riab onos-config-798b8c8579-cr6pq 4/4 Running 0 9m37s -riab onos-consensus-db-1-0 1/1 Running 0 9m37s -riab onos-consensus-store-1-0 1/1 Running 0 9m37s -riab onos-e2t-5c55869d6f-wpwdj 3/3 Running 0 9m37s -riab onos-kpimon-68549c5bb9-9fpnn 1/1 Running 0 9m37s -riab onos-topo-858d7999d-gdzkt 3/3 Running 0 9m37s -riab onos-uenib-55c568b444-5kvrg 3/3 Running 0 9m37s -riab pcrf-0 1/1 Running 0 42h -riab spgwc-0 2/2 Running 0 42h -riab upf-0 4/4 Running 0 42h +NAMESPACE NAME READY STATUS RESTARTS AGE +default router 1/1 Running 0 9m33s +kube-system atomix-controller-6b6d96775-smmft 1/1 Running 0 8m39s +kube-system atomix-raft-storage-controller-77bd965f8d-psqnt 1/1 Running 0 8m14s +kube-system calico-kube-controllers-6759976d49-zkvjt 1/1 Running 0 3d3h +kube-system calico-node-n22vw 1/1 Running 0 3d3h +kube-system coredns-dff8fc7d-b8lvl 1/1 Running 0 3d3h +kube-system dns-autoscaler-5d74bb9b8f-5948j 1/1 Running 0 3d3h +kube-system kube-apiserver-node1 1/1 Running 0 3d3h +kube-system kube-controller-manager-node1 1/1 Running 0 3d3h +kube-system kube-multus-ds-amd64-wg99f 1/1 Running 0 3d3h +kube-system kube-proxy-cvxz2 1/1 Running 1 3d3h +kube-system kube-scheduler-node1 1/1 Running 0 3d3h +kube-system kubernetes-dashboard-667c4c65f8-5kdcp 1/1 Running 0 3d3h +kube-system kubernetes-metrics-scraper-54fbb4d595-slnlv 1/1 Running 0 3d3h +kube-system nodelocaldns-55nr9 1/1 Running 0 3d3h +kube-system onos-operator-app-d56cb6f55-zhqb8 1/1 Running 0 7m48s +kube-system onos-operator-config-7986b568b-z85jh 1/1 Running 0 7m48s +kube-system onos-operator-topo-76fdf46db5-zfv68 1/1 Running 0 7m48s +riab cassandra-0 1/1 Running 0 7m19s +riab hss-0 1/1 Running 0 7m19s +riab mme-0 4/4 Running 0 7m19s +riab oai-enb-cu-0 1/1 Running 0 4m20s +riab oai-enb-du-0 1/1 Running 0 3m9s +riab oai-ue-0 1/1 Running 0 118s +riab onos-cli-9f75bc57c-k8q2p 1/1 Running 0 5m6s +riab onos-config-5d7cd9dd8c-7nbbs 4/4 Running 0 5m6s +riab onos-consensus-store-0 1/1 Running 0 5m5s +riab onos-e2t-65cddb59cc-tzxvr 3/3 Running 0 5m6s +riab onos-kpimon-6bdff5875c-dkvcs 2/2 Running 0 5m6s +riab onos-rsm-59f79876ff-v4kvk 2/2 Running 0 5m6s +riab onos-topo-775f5f946f-zq7rn 3/3 Running 0 5m6s +riab onos-uenib-5b6445d58f-xl2v9 3/3 Running 0 5m6s +riab pcrf-0 1/1 Running 0 7m19s +riab spgwc-0 2/2 Running 0 7m19s +riab upf-0 4/4 Running 0 5m54s ``` NOTE: If we see any issue when deploying RiaB, please check [Troubleshooting](./troubleshooting.md) @@ -164,25 +165,24 @@ In order to verify the SD-RAN control plane, we should command below for each ve * `make test-kpimon`: to see the number of active UEs ```bash $ make test-kpimon -... +Helm values.yaml file: /users/wkim/sdran-in-a-box//sdran-in-a-box-values-master-stable.yaml +HEAD is now at 9f79ab8 Fix the default SRIOV resource name for UPF user plane interfaces +HEAD is now at be1b9dd Fixing SM versions for E2T (#994) *** Get KPIMON result through CLI *** Node ID Cell Object ID Cell Global ID Time RRC.ConnEstabAtt.sum RRC.ConnEstabSucc.sum RRC.ConnMax RRC.ConnMean RRC.ConnReEstabAtt.sum -e00 1 e0000 22:39:24.0 1 1 1 0 0 +e2:4/e00/2/64 1 e0000 23:50:33.0 1 1 1 1 0 ``` -* `make test-e2-connection` and `make test-e2-subscription`: to see e2 connection and subscription +* `make test-e2-subscription`: to see e2 connection and subscription ```bash -$ make test-e2-connection -... -*** Get E2 connections through CLI *** -Connection ID PLMN ID Node ID Node Type IP Addr Port Status -3cc2a76c-10d8-47c2-a85a-18014234e02d 10f802 e00 E_NB 192.168.69.1 50671 8m52.352s - $ make test-e2-subscription -... +Helm values.yaml file: /users/wkim/sdran-in-a-box//sdran-in-a-box-values-master-stable.yaml +HEAD is now at 9f79ab8 Fix the default SRIOV resource name for UPF user plane interfaces +HEAD is now at be1b9dd Fixing SM versions for E2T (#994) *** Get E2 subscriptions through CLI *** -Subscription ID Revision Service Model ID E2 NodeID Encoding Phase State -9a8f85fa67a6ef913ef4c0fa8f8fdee4:e00 4 oran-e2sm-kpm:v2 e00 ASN1_PER SUBSCRIPTION_OPEN SUBSCRIPTION_COMPLETE +Subscription ID Revision Service Model ID E2 NodeID Encoding Phase State +43aa0af7ce9a05142e5235c7a8efbd9b:e2:4/e00/2/64 57 oran-e2sm-rsm:v1 e2:4/e00/2/64 ASN1_PER SUBSCRIPTION_OPEN SUBSCRIPTION_COMPLETE +9a8f85fa67a6ef913ef4c0fa8f8fdee4:e2:4/e00/2/64 62 oran-e2sm-kpm:v2 e2:4/e00/2/64 ASN1_PER SUBSCRIPTION_OPEN SUBSCRIPTION_COMPLETE ``` * `make test-rnib` and `make test-uenib`: to check information in R-NIB and UE-NIB @@ -190,53 +190,643 @@ Subscription ID Revision Service Model ID E2 NodeID $ make test-rnib ... *** Get R-NIB result through CLI *** -ID: e00 +ID: e2:4/e00/3/c8 +Kind ID: e2node +Labels: +Source Id's: +Target Id's: uuid:6065c5aa-4351-446d-82b4-7702b991c365 +Aspects: +- onos.topo.E2Node={"serviceModels":{"1.3.6.1.4.1.53148.1.1.2.102":{"oid":"1.3.6.1.4.1.53148.1.1.2.102","name":"ORAN-E2SM-RSM","ranFunctions":[{"@type":"type.googleapis.com/onos.topo.RSMRanFunction","ricSlicingNodeCapabilityList":[{"maxNumberOfSlicesDl":4,"maxNumberOfSlicesUl":4,"maxNumberOfUesPerSlice":4,"supportedConfig":[{},{"slicingConfigType":"E2_SM_RSM_COMMAND_SLICE_UPDATE"},{"slicingConfigType":"E2_SM_RSM_COMMAND_SLICE_DELETE"},{"slicingConfigType":"E2_SM_RSM_COMMAND_UE_ASSOCIATE"}]}]}]}}} +- onos.topo.MastershipState={"term":"1","nodeId":"uuid:6065c5aa-4351-446d-82b4-7702b991c365"} + +ID: e2:onos-e2t-65cddb59cc-6vmvd +Kind ID: e2t +Labels: +Source Id's: uuid:c796eee5-d44d-44bc-87ec-b4d31f7647be, uuid:6065c5aa-4351-446d-82b4-7702b991c365 +Target Id's: +Aspects: +- onos.topo.Lease={"expiration":"2021-10-29T22:03:25.917310765Z"} +- onos.topo.E2TInfo={"interfaces":[{"type":"INTERFACE_E2AP101","ip":"192.168.84.236","port":36421},{"type":"INTERFACE_E2T","ip":"192.168.84.236","port":5150}]} + +ID: e2:4/e00/2/64 Kind ID: e2node Labels: +Source Id's: uuid:74c614b5-8666-67e9-d1a5-97d95ae83dcd +Target Id's: uuid:c796eee5-d44d-44bc-87ec-b4d31f7647be Aspects: -- onos.topo.E2Node={"serviceModels":{"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":"O-CU-UP Measurement Container for the EPC connected deployment","type":6,"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.ConnMean"},{"id":"value:5","name":"RRC.ConnMax"}]}]}]}}} +- onos.topo.MastershipState={"term":"1","nodeId":"uuid:c796eee5-d44d-44bc-87ec-b4d31f7647be"} +- onos.topo.E2Node={"serviceModels":{"1.3.6.1.4.1.53148.1.1.2.102":{"oid":"1.3.6.1.4.1.53148.1.1.2.102","name":"ORAN-E2SM-RSM","ranFunctions":[{"@type":"type.googleapis.com/onos.topo.RSMRanFunction","ricSlicingNodeCapabilityList":[{"maxNumberOfSlicesDl":4,"maxNumberOfSlicesUl":4,"maxNumberOfUesPerSlice":4,"supportedConfig":[{"slicingConfigType":"E2_SM_RSM_COMMAND_EVENT_TRIGGERS"}]}]}]},"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":"O-CU-UP Measurement Container for the EPC connected deployment","type":6,"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.ConnMean"},{"id":"value:5","name":"RRC.ConnMax"}]}]}]}}} -ID: e0000 +ID: e2:4/e00/2/64/e0000 Kind ID: e2cell Labels: +Source Id's: +Target Id's: uuid:74c614b5-8666-67e9-d1a5-97d95ae83dcd Aspects: -- onos.topo.E2Cell={"cellObjectId":"1","cellGlobalId":{"value":"e0000","type":"ECGI"}} +- onos.topo.E2Cell={"cellObjectId":"1","cellGlobalId":{"value":"e0000","type":"ECGI"},"kpiReports":{"RRC.ConnEstabAtt.sum":1,"RRC.ConnEstabSucc.sum":1,"RRC.ConnMax":1,"RRC.ConnMean":1,"RRC.ConnReEstabAtt.sum":0}} -wkim@k8s-1:~/sdran-in-a-box$ make test-uenib +$ make test-uenib ... *** Get UE-NIB result through CLI *** -ID: e00:1 +ID: 455f5d5e-0f8e-4b8d-a857-c56e9bd455cb Aspects: -- RRC.ConnReEstabAtt.sum=0 -- RRC.ConnMean=1 -- RRC.ConnMax=1 -- RRC.ConnEstabAtt.sum=1 -- RRC.ConnEstabSucc.sum=1 +- onos.uenib.RsmUeInfo={"globalUeId":"455f5d5e-0f8e-4b8d-a857-c56e9bd455cb","ueIdList":{"duUeF1apId":{"value":"49781"},"cuUeF1apId":{"value":"49781"},"ranUeNgapId":{},"enbUeS1apId":{"value":14951620},"amfUeNgapId":{}},"bearerIdList":[{"drbID":{"fourGDrbID":{"value":5,"qci":{"value":9}}}}],"cellGlobalId":"e_utra_cgi:{p_lmnidentity:{value:\"\\x02\\xf8\\x10\"} e_utracell_identity:{value:{value:\"\\x00\\xe0\\x00\\x00\" len:28}}}","cuE2NodeId":"e2:4/e00/2/64","duE2NodeId":"e2:4/e00/3/c8","sliceList":[]} ``` * Run `make test-kpimon` before and after phone detached: to check the number of active UEs changed ```bash $ make test-kpimon -... +Helm values.yaml file: /users/wkim/sdran-in-a-box//sdran-in-a-box-values-master-stable.yaml +HEAD is now at 9f79ab8 Fix the default SRIOV resource name for UPF user plane interfaces +HEAD is now at be1b9dd Fixing SM versions for E2T (#994) *** Get KPIMON result through CLI *** Node ID Cell Object ID Cell Global ID Time RRC.ConnEstabAtt.sum RRC.ConnEstabSucc.sum RRC.ConnMax RRC.ConnMean RRC.ConnReEstabAtt.sum -e00 1 e0000 01:42:19.0 1 1 1 1 0 -wkim@k8s-1:~/sdran-in-a-box$ make detach-ue -... +e2:4/e00/2/64 1 e0000 23:52:01.0 1 1 1 1 0 + +$ make detach-ue +Helm values.yaml file: /users/wkim/sdran-in-a-box//sdran-in-a-box-values-master-stable.yaml +HEAD is now at 9f79ab8 Fix the default SRIOV resource name for UPF user plane interfaces +HEAD is now at be1b9dd Fixing SM versions for E2T (#994) echo -en "AT+CPIN=0000\r" | nc -u -w 1 localhost 10000 OK echo -en "AT+CGATT=0\r" | nc -u -w 1 localhost 10000 OK -wkim@k8s-1:~/sdran-in-a-box$ make test-kpimon -... + +$ make test-kpimon +Helm values.yaml file: /users/wkim/sdran-in-a-box//sdran-in-a-box-values-master-stable.yaml +HEAD is now at 9f79ab8 Fix the default SRIOV resource name for UPF user plane interfaces +HEAD is now at be1b9dd Fixing SM versions for E2T (#994) *** Get KPIMON result through CLI *** Node ID Cell Object ID Cell Global ID Time RRC.ConnEstabAtt.sum RRC.ConnEstabSucc.sum RRC.ConnMax RRC.ConnMean RRC.ConnReEstabAtt.sum -e00 1 e0000 01:42:40.0 1 1 1 0 0 +e2:4/e00/2/64 1 e0000 23:52:13.0 1 1 1 0 0 ``` + As we can see, `RRC.ConnMean` which shows the number of active UEs changed from 1 to 0, since a emulated UE is detached. +### The RSM E2E tests +If the following steps are all passed, RSM use-case is working fine. + +* Step 1. Check the default slice performance +```bash +$ make test-rsm-dataplane +Helm values.yaml file: /users/wkim/sdran-in-a-box//sdran-in-a-box-values-master-stable.yaml +HEAD is now at 9f79ab8 Fix the default SRIOV resource name for UPF user plane interfaces +Previous HEAD position was e61a87a Update e2ap101 umbrella chart for release 1.3 +HEAD is now at 0a2716d Releasing onos-rsm v0.1.9 (#992) +*** Test downlink traffic (UDP) *** +sudo apt install -y iperf3 +Reading package lists... Done +Building dependency tree +Reading state information... Done +iperf3 is already the newest version (3.1.3-1). +The following package was automatically installed and is no longer required: + ssl-cert +Use 'sudo apt autoremove' to remove it. +0 upgraded, 0 newly installed, 0 to remove and 173 not upgraded. +kubectl exec -it router -- apt install -y iperf3 +Reading package lists... Done +Building dependency tree +Reading state information... Done +The following extra packages will be installed: + libiperf0 +The following NEW packages will be installed: + iperf3 libiperf0 +0 upgraded, 2 newly installed, 0 to remove and 80 not upgraded. +Need to get 56.7 kB of archives. +After this operation, 236 kB of additional disk space will be used. +Get:1 http://archive.ubuntu.com/ubuntu/ trusty-backports/universe libiperf0 amd64 3.0.7-1~ubuntu14.04.1 [48.7 kB] +Get:2 http://archive.ubuntu.com/ubuntu/ trusty-backports/universe iperf3 amd64 3.0.7-1~ubuntu14.04.1 [7966 B] +Fetched 56.7 kB in 0s (114 kB/s) +Selecting previously unselected package libiperf0. +(Reading database ... 17318 files and directories currently installed.) +Preparing to unpack .../libiperf0_3.0.7-1~ubuntu14.04.1_amd64.deb ... +Unpacking libiperf0 (3.0.7-1~ubuntu14.04.1) ... +Selecting previously unselected package iperf3. +Preparing to unpack .../iperf3_3.0.7-1~ubuntu14.04.1_amd64.deb ... +Unpacking iperf3 (3.0.7-1~ubuntu14.04.1) ... +Setting up libiperf0 (3.0.7-1~ubuntu14.04.1) ... +Setting up iperf3 (3.0.7-1~ubuntu14.04.1) ... +Processing triggers for libc-bin (2.19-0ubuntu6.13) ... +iperf3 -s -B $(ip a show oaitun_ue1 | grep inet | grep -v inet6 | awk '{print $2}' | awk -F '/' '{print $1}') -p 5001 > /dev/null & +kubectl exec -it router -- iperf3 -u -c $(ip a show oaitun_ue1 | grep inet | grep -v inet6 | awk '{print $2}' | awk -F '/' '{print $1}') -p 5001 -b 20M -l 1450 -O 2 -t 12 --get-server-output +Connecting to host 172.250.255.254, port 5001 +[ 4] local 192.168.250.1 port 38444 connected to 172.250.255.254 port 5001 +[ ID] Interval Transfer Bandwidth Total Datagrams +[ 4] 0.00-1.00 sec 2.15 MBytes 18.1 Mbits/sec 1557 (omitted) +[ 4] 1.00-2.00 sec 2.38 MBytes 20.0 Mbits/sec 1722 (omitted) +[ 4] 0.00-1.00 sec 2.17 MBytes 18.2 Mbits/sec 1567 +[ 4] 1.00-2.00 sec 2.38 MBytes 20.0 Mbits/sec 1721 +[ 4] 2.00-3.00 sec 2.37 MBytes 19.9 Mbits/sec 1715 +[ 4] 3.00-4.00 sec 2.39 MBytes 20.0 Mbits/sec 1725 +[ 4] 4.00-5.00 sec 2.39 MBytes 20.0 Mbits/sec 1726 +[ 4] 5.00-6.00 sec 2.38 MBytes 20.0 Mbits/sec 1721 +[ 4] 6.00-7.00 sec 2.39 MBytes 20.0 Mbits/sec 1728 +[ 4] 7.00-8.00 sec 2.39 MBytes 20.1 Mbits/sec 1729 +[ 4] 8.00-9.00 sec 2.38 MBytes 19.9 Mbits/sec 1718 +[ 4] 9.00-10.00 sec 2.38 MBytes 20.0 Mbits/sec 1722 +[ 4] 10.00-11.00 sec 2.39 MBytes 20.0 Mbits/sec 1728 +[ 4] 11.00-12.00 sec 2.38 MBytes 19.9 Mbits/sec 1719 +- - - - - - - - - - - - - - - - - - - - - - - - - +[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams +[ 4] 0.00-12.00 sec 28.4 MBytes 19.8 Mbits/sec 0.645 ms 2145/20507 (10%) +[ 4] Sent 20507 datagrams + +Server output: +Accepted connection from 192.168.250.1, port 53510 +[ 5] local 172.250.255.254 port 5001 connected to 192.168.250.1 port 38444 +[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams +[ 5] 0.00-1.00 sec 1.76 MBytes 14.8 Mbits/sec 0.704 ms 7/1282 (0.55%) (omitted) +[ 5] 1.00-1.00 sec 2.10 MBytes 8.82 Mbits/sec 4.988 ms 0/3042 (0%) +[ 5] 1.00-2.00 sec 2.10 MBytes 17.7 Mbits/sec 0.630 ms 18/1540 (1.2%) +[ 5] 2.00-3.00 sec 2.10 MBytes 17.6 Mbits/sec 1.311 ms 242/1763 (14%) +[ 5] 3.00-4.00 sec 2.10 MBytes 17.6 Mbits/sec 2.584 ms 187/1708 (11%) +[ 5] 4.00-5.00 sec 2.10 MBytes 17.6 Mbits/sec 4.508 ms 192/1713 (11%) +[ 5] 5.00-6.00 sec 2.10 MBytes 17.7 Mbits/sec 0.621 ms 189/1711 (11%) +[ 5] 6.00-7.00 sec 2.10 MBytes 17.6 Mbits/sec 2.409 ms 228/1749 (13%) +[ 5] 7.00-8.00 sec 2.10 MBytes 17.6 Mbits/sec 2.778 ms 202/1723 (12%) +[ 5] 8.00-9.00 sec 2.10 MBytes 17.6 Mbits/sec 0.648 ms 181/1702 (11%) +[ 5] 9.00-10.00 sec 2.10 MBytes 17.6 Mbits/sec 1.325 ms 245/1766 (14%) +[ 5] 10.00-11.00 sec 2.10 MBytes 17.6 Mbits/sec 2.683 ms 183/1704 (11%) +[ 5] 11.00-12.00 sec 2.10 MBytes 17.7 Mbits/sec 4.491 ms 192/1714 (11%) +[ 5] 12.00-12.39 sec 835 KBytes 17.6 Mbits/sec 0.645 ms 79/669 (12%) +- - - - - - - - - - - - - - - - - - - - - - - - - +[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams +[ 5] 0.00-12.39 sec 0.00 Bytes 0.00 bits/sec 0.645 ms 2138/20983 (10%) + + +iperf Done. +pkill -9 -ef iperf3 +iperf3 killed (pid 1707) +``` +In this result, the performance is around 17.7 Mbps. + +**NOTE: depending on the iPerf3 version, the last result line in ther server output is mostly 0. We should check the performance in each step.** + +* Step 2. Create a slice +```bash +$ kubectl exec -it deployment/onos-cli -n riab -- onos rsm create slice --e2NodeID e2:4/e00/3/c8 --scheduler RR --sliceID 1 --weight 30 --sliceType DL +``` + +If there is no error message, we should check `onos-topo` result. +```bash +$ kubectl exec -it deployment/onos-cli -n riab -- onos topo get entity e2:4/e00/3/c8 -v + +ID: e2:4/e00/3/c8 +Kind ID: e2node +Labels: +Source Id's: +Target Id's: uuid:6065c5aa-4351-446d-82b4-7702b991c365 +Aspects: +- onos.topo.E2Node={"serviceModels":{"1.3.6.1.4.1.53148.1.1.2.102":{"oid":"1.3.6.1.4.1.53148.1.1.2.102","name":"ORAN-E2SM-RSM","ranFunctions":[{"@type":"type.googleapis.com/onos.topo.RSMRanFunction","ricSlicingNodeCapabilityList":[{"maxNumberOfSlicesDl":4,"maxNumberOfSlicesUl":4,"maxNumberOfUesPerSlice":4,"supportedConfig":[{},{"slicingConfigType":"E2_SM_RSM_COMMAND_SLICE_UPDATE"},{"slicingConfigType":"E2_SM_RSM_COMMAND_SLICE_DELETE"},{"slicingConfigType":"E2_SM_RSM_COMMAND_UE_ASSOCIATE"}]}]}]}}} +- onos.topo.RSMSliceItemList={"rsmSliceList":[{"id":"1","sliceDesc":"Slice created by onos-RSM xAPP","sliceParameters":{"weight":30},"ueIdList":[]}]} +- onos.topo.MastershipState={"term":"1","nodeId":"uuid:6065c5aa-4351-446d-82b4-7702b991c365"} +``` + +`RSMSliceItemList` should not be empty and have the correct values. + +* Step 3. Associate a UE with the created slice +Before we run it, we should check the `DU-UE-F1AP-ID` in `onos-uenib` (in the below example, the ID is 49871). +```bash +$ kubectl exec -it deployment/onos-cli -n riab -- onos uenib get ues -v +ID: 455f5d5e-0f8e-4b8d-a857-c56e9bd455cb +Aspects: +- onos.uenib.RsmUeInfo={"globalUeId":"455f5d5e-0f8e-4b8d-a857-c56e9bd455cb","ueIdList":{"duUeF1apId":{"value":"49781"},"cuUeF1apId":{"value":"49781"},"ranUeNgapId":{},"enbUeS1apId":{"value":14951620},"amfUeNgapId":{}},"bearerIdList":[{"drbID":{"fourGDrbID":{"value":5,"qci":{"value":9}}}}],"cellGlobalId":"e_utra_cgi:{p_lmnidentity:{value:\"\\x02\\xf8\\x10\"} e_utracell_identity:{value:{value:\"\\x00\\xe0\\x00\\x00\" len:28}}}","cuE2NodeId":"e2:4/e00/2/64","duE2NodeId":"e2:4/e00/3/c8","sliceList":[]} +$ kubectl exec -it deployment/onos-cli -n riab -- onos rsm set association --dlSliceID 1 --e2NodeID e2:4/e00/3/c8 --drbID 5 --DuUeF1apID 49871 +``` + +After association, we should check `onos-uenib` and `onos-topo`: +```bash +$ kubectl exec -it deployment/onos-cli -n riab -- onos topo get entity e2:4/e00/3/c8 -v + +ID: e2:4/e00/3/c8 +Kind ID: e2node +Labels: +Source Id's: +Target Id's: uuid:6065c5aa-4351-446d-82b4-7702b991c365 +Aspects: +- onos.topo.MastershipState={"term":"1","nodeId":"uuid:6065c5aa-4351-446d-82b4-7702b991c365"} +- onos.topo.E2Node={"serviceModels":{"1.3.6.1.4.1.53148.1.1.2.102":{"oid":"1.3.6.1.4.1.53148.1.1.2.102","name":"ORAN-E2SM-RSM","ranFunctions":[{"@type":"type.googleapis.com/onos.topo.RSMRanFunction","ricSlicingNodeCapabilityList":[{"maxNumberOfSlicesDl":4,"maxNumberOfSlicesUl":4,"maxNumberOfUesPerSlice":4,"supportedConfig":[{},{"slicingConfigType":"E2_SM_RSM_COMMAND_SLICE_UPDATE"},{"slicingConfigType":"E2_SM_RSM_COMMAND_SLICE_DELETE"},{"slicingConfigType":"E2_SM_RSM_COMMAND_UE_ASSOCIATE"}]}]}]}}} +- onos.topo.RSMSliceItemList={"rsmSliceList":[{"id":"1","sliceDesc":"Slice created by onos-RSM xAPP","sliceParameters":{"weight":30},"ueIdList":[{"duUeF1apId":{"value":"49781"},"cuUeF1apId":{},"ranUeNgapId":{},"enbUeS1apId":{},"amfUeNgapId":{},"drbId":{"fourGDrbID":{"value":5,"qci":{"value":9}}}}]}]} + +$ kubectl exec -it deployment/onos-cli -n riab -- onos uenib get ues -v +ID: 455f5d5e-0f8e-4b8d-a857-c56e9bd455cb +Aspects: +- onos.uenib.RsmUeInfo={"globalUeId":"455f5d5e-0f8e-4b8d-a857-c56e9bd455cb","ueIdList":{"duUeF1apId":{"value":"49781"},"cuUeF1apId":{"value":"49781"},"ranUeNgapId":{},"enbUeS1apId":{"value":14951620},"amfUeNgapId":{}},"bearerIdList":[{"drbID":{"fourGDrbID":{"value":5,"qci":{"value":9}}}}],"cellGlobalId":"e_utra_cgi:{p_lmnidentity:{value:\"\\x02\\xf8\\x10\"} e_utracell_identity:{value:{value:\"\\x00\\xe0\\x00\\x00\" len:28}}}","cuE2NodeId":"e2:4/e00/2/64","duE2NodeId":"e2:4/e00/3/c8","sliceList":[{"duE2NodeId":"e2:4/e00/3/c8","cuE2NodeId":"e2:4/e00/2/64","id":"1","sliceParameters":{"weight":30},"drbId":{"fourGDrbID":{"value":5,"qci":{"value":9}}}}]} +``` + +`ueIdList` in `onos-topo` and `sliceList` in `onos-uenib` should not be empty and have the correct values. + +Then, check the created slice's performance: +```bash +$ make test-rsm-dataplane +Helm values.yaml file: /users/wkim/sdran-in-a-box//sdran-in-a-box-values-master-stable.yaml +HEAD is now at 9f79ab8 Fix the default SRIOV resource name for UPF user plane interfaces +HEAD is now at 0a2716d Releasing onos-rsm v0.1.9 (#992) +*** Test downlink traffic (UDP) *** +sudo apt install -y iperf3 +Reading package lists... Done +Building dependency tree +Reading state information... Done +iperf3 is already the newest version (3.1.3-1). +The following package was automatically installed and is no longer required: + ssl-cert +Use 'sudo apt autoremove' to remove it. +0 upgraded, 0 newly installed, 0 to remove and 173 not upgraded. +kubectl exec -it router -- apt install -y iperf3 +Reading package lists... Done +Building dependency tree +Reading state information... Done +iperf3 is already the newest version. +0 upgraded, 0 newly installed, 0 to remove and 80 not upgraded. +iperf3 -s -B $(ip a show oaitun_ue1 | grep inet | grep -v inet6 | awk '{print $2}' | awk -F '/' '{print $1}') -p 5001 > /dev/null & +kubectl exec -it router -- iperf3 -u -c $(ip a show oaitun_ue1 | grep inet | grep -v inet6 | awk '{print $2}' | awk -F '/' '{print $1}') -p 5001 -b 20M -l 1450 -O 2 -t 12 --get-server-output +Connecting to host 172.250.255.254, port 5001 +[ 4] local 192.168.250.1 port 43898 connected to 172.250.255.254 port 5001 +[ ID] Interval Transfer Bandwidth Total Datagrams +[ 4] 0.00-1.00 sec 2.15 MBytes 18.0 Mbits/sec 1554 (omitted) +[ 4] 1.00-2.00 sec 2.39 MBytes 20.0 Mbits/sec 1725 (omitted) +[ 4] 0.00-1.00 sec 2.15 MBytes 18.0 Mbits/sec 1556 +[ 4] 1.00-2.00 sec 2.38 MBytes 20.0 Mbits/sec 1722 +[ 4] 2.00-3.00 sec 2.38 MBytes 20.0 Mbits/sec 1724 +[ 4] 3.00-4.00 sec 2.39 MBytes 20.0 Mbits/sec 1725 +[ 4] 4.00-5.00 sec 2.39 MBytes 20.0 Mbits/sec 1725 +[ 4] 5.00-6.00 sec 2.39 MBytes 20.0 Mbits/sec 1726 +[ 4] 6.00-7.00 sec 2.38 MBytes 20.0 Mbits/sec 1721 +[ 4] 7.00-8.00 sec 2.39 MBytes 20.0 Mbits/sec 1728 +[ 4] 8.00-9.00 sec 2.38 MBytes 20.0 Mbits/sec 1720 +[ 4] 9.00-10.00 sec 2.38 MBytes 20.0 Mbits/sec 1724 +[ 4] 10.00-11.00 sec 2.39 MBytes 20.1 Mbits/sec 1729 +[ 4] 11.00-12.00 sec 2.38 MBytes 20.0 Mbits/sec 1720 +- - - - - - - - - - - - - - - - - - - - - - - - - +[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams +[ 4] 0.00-12.00 sec 28.4 MBytes 19.8 Mbits/sec 2.662 ms 16625/20395 (82%) +[ 4] Sent 20395 datagrams + +Server output: +Accepted connection from 192.168.250.1, port 35320 +[ 5] local 172.250.255.254 port 5001 connected to 192.168.250.1 port 43898 +[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams +[ 5] 0.00-1.00 sec 556 KBytes 4.56 Mbits/sec 2.382 ms 0/393 (0%) (omitted) +[ 5] 1.00-2.00 sec 656 KBytes 5.37 Mbits/sec 6.754 ms 14/477 (2.9%) (omitted) +[ 5] 0.00-1.00 sec 656 KBytes 5.37 Mbits/sec 2.369 ms 1132/1595 (71%) +[ 5] 1.00-2.00 sec 656 KBytes 5.37 Mbits/sec 4.023 ms 1232/1695 (73%) +[ 5] 2.00-3.00 sec 656 KBytes 5.37 Mbits/sec 5.281 ms 1257/1720 (73%) +[ 5] 3.00-4.00 sec 656 KBytes 5.37 Mbits/sec 7.395 ms 1253/1716 (73%) +[ 5] 4.00-5.00 sec 656 KBytes 5.37 Mbits/sec 2.378 ms 1137/1600 (71%) +[ 5] 5.00-6.00 sec 656 KBytes 5.37 Mbits/sec 4.079 ms 1398/1861 (75%) +[ 5] 6.00-7.00 sec 656 KBytes 5.37 Mbits/sec 4.805 ms 1260/1723 (73%) +[ 5] 7.00-8.00 sec 656 KBytes 5.37 Mbits/sec 7.416 ms 1250/1713 (73%) +[ 5] 8.00-9.00 sec 656 KBytes 5.37 Mbits/sec 2.357 ms 1133/1596 (71%) +[ 5] 9.00-10.00 sec 653 KBytes 5.34 Mbits/sec 5.348 ms 1401/1862 (75%) +[ 5] 10.00-11.00 sec 658 KBytes 5.40 Mbits/sec 4.816 ms 1259/1724 (73%) +[ 5] 11.00-12.00 sec 656 KBytes 5.37 Mbits/sec 7.384 ms 1251/1714 (73%) +[ 5] 12.00-13.00 sec 656 KBytes 5.37 Mbits/sec 2.379 ms 1134/1597 (71%) +[ 5] 13.00-13.38 sec 246 KBytes 5.33 Mbits/sec 2.662 ms 514/688 (75%) +- - - - - - - - - - - - - - - - - - - - - - - - - +[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams +[ 5] 0.00-13.38 sec 0.00 Bytes 0.00 bits/sec 2.662 ms 16611/22804 (73%) + + +iperf Done. +pkill -9 -ef iperf3 +iperf3 killed (pid 9709) +``` + +The measured bandwidth is around 5.3 Mbps which is around 30% performance of the default slice. +Since we created the slice to have 30% weight, this performance is correct. + +* Step 4. Update the UE's slice +Next, update the slice to have 50% weight: +```bash +$ kubectl exec -it deployment/onos-cli -n riab -- onos rsm update slice --e2NodeID e2:4/e00/3/c8 --scheduler RR --sliceID 1 --weight 50 --sliceType DL +``` + +After that, check `onos-topo` and `onos-uenib`: +```bash +$ kubectl exec -it deployment/onos-cli -n riab -- onos topo get entity e2:4/e00/3/c8 -v + +ID: e2:4/e00/3/c8 +Kind ID: e2node +Labels: +Source Id's: +Target Id's: uuid:6065c5aa-4351-446d-82b4-7702b991c365 +Aspects: +- onos.topo.RSMSliceItemList={"rsmSliceList":[{"id":"1","sliceDesc":"Slice created by onos-RSM xAPP","sliceParameters":{"weight":50},"ueIdList":[{"duUeF1apId":{"value":"49781"},"cuUeF1apId":{},"ranUeNgapId":{},"enbUeS1apId":{},"amfUeNgapId":{},"drbId":{"fourGDrbID":{"value":5,"qci":{"value":9}}}}]}]} +- onos.topo.MastershipState={"term":"1","nodeId":"uuid:6065c5aa-4351-446d-82b4-7702b991c365"} +- onos.topo.E2Node={"serviceModels":{"1.3.6.1.4.1.53148.1.1.2.102":{"oid":"1.3.6.1.4.1.53148.1.1.2.102","name":"ORAN-E2SM-RSM","ranFunctions":[{"@type":"type.googleapis.com/onos.topo.RSMRanFunction","ricSlicingNodeCapabilityList":[{"maxNumberOfSlicesDl":4,"maxNumberOfSlicesUl":4,"maxNumberOfUesPerSlice":4,"supportedConfig":[{},{"slicingConfigType":"E2_SM_RSM_COMMAND_SLICE_UPDATE"},{"slicingConfigType":"E2_SM_RSM_COMMAND_SLICE_DELETE"},{"slicingConfigType":"E2_SM_RSM_COMMAND_UE_ASSOCIATE"}]}]}]}}} + +$ kubectl exec -it deployment/onos-cli -n riab -- onos uenib get ues -v +ID: 455f5d5e-0f8e-4b8d-a857-c56e9bd455cb +Aspects: +- onos.uenib.RsmUeInfo={"globalUeId":"455f5d5e-0f8e-4b8d-a857-c56e9bd455cb","ueIdList":{"duUeF1apId":{"value":"49781"},"cuUeF1apId":{"value":"49781"},"ranUeNgapId":{},"enbUeS1apId":{"value":14951620},"amfUeNgapId":{}},"bearerIdList":[{"drbID":{"fourGDrbID":{"value":5,"qci":{"value":9}}}}],"cellGlobalId":"e_utra_cgi:{p_lmnidentity:{value:\"\\x02\\xf8\\x10\"} e_utracell_identity:{value:{value:\"\\x00\\xe0\\x00\\x00\" len:28}}}","cuE2NodeId":"e2:4/e00/2/64","duE2NodeId":"e2:4/e00/3/c8","sliceList":[{"duE2NodeId":"e2:4/e00/3/c8","cuE2NodeId":"e2:4/e00/2/64","id":"1","sliceParameters":{"weight":50},"drbId":{"fourGDrbID":{"value":5,"qci":{"value":9}}}}]} +``` + +`ueIdList` in `onos-topo` and `sliceList` in `onos-uenib` should have weight `50%`. + +Then, check the updated slice's performance: +```bash +$ make test-rsm-dataplane +Helm values.yaml file: /users/wkim/sdran-in-a-box//sdran-in-a-box-values-master-stable.yaml +HEAD is now at 9f79ab8 Fix the default SRIOV resource name for UPF user plane interfaces +HEAD is now at 0a2716d Releasing onos-rsm v0.1.9 (#992) +*** Test downlink traffic (UDP) *** +sudo apt install -y iperf3 +Reading package lists... Done +Building dependency tree +Reading state information... Done +iperf3 is already the newest version (3.1.3-1). +The following package was automatically installed and is no longer required: + ssl-cert +Use 'sudo apt autoremove' to remove it. +0 upgraded, 0 newly installed, 0 to remove and 173 not upgraded. +kubectl exec -it router -- apt install -y iperf3 +Reading package lists... Done +Building dependency tree +Reading state information... Done +iperf3 is already the newest version. +0 upgraded, 0 newly installed, 0 to remove and 80 not upgraded. +iperf3 -s -B $(ip a show oaitun_ue1 | grep inet | grep -v inet6 | awk '{print $2}' | awk -F '/' '{print $1}') -p 5001 > /dev/null & +kubectl exec -it router -- iperf3 -u -c $(ip a show oaitun_ue1 | grep inet | grep -v inet6 | awk '{print $2}' | awk -F '/' '{print $1}') -p 5001 -b 20M -l 1450 -O 2 -t 12 --get-server-output +Connecting to host 172.250.255.254, port 5001 +[ 4] local 192.168.250.1 port 48644 connected to 172.250.255.254 port 5001 +[ ID] Interval Transfer Bandwidth Total Datagrams +[ 4] 0.00-1.00 sec 2.17 MBytes 18.2 Mbits/sec 1571 (omitted) +[ 4] 1.00-2.00 sec 2.39 MBytes 20.0 Mbits/sec 1725 (omitted) +[ 4] 0.00-1.00 sec 2.16 MBytes 18.1 Mbits/sec 1562 +[ 4] 1.00-2.00 sec 2.38 MBytes 20.0 Mbits/sec 1721 +[ 4] 2.00-3.00 sec 2.38 MBytes 20.0 Mbits/sec 1723 +[ 4] 3.00-4.00 sec 2.39 MBytes 20.0 Mbits/sec 1727 +[ 4] 4.00-5.00 sec 2.38 MBytes 20.0 Mbits/sec 1722 +[ 4] 5.00-6.00 sec 2.41 MBytes 20.2 Mbits/sec 1740 +[ 4] 6.00-7.00 sec 2.39 MBytes 20.0 Mbits/sec 1725 +[ 4] 7.00-8.00 sec 2.37 MBytes 19.8 Mbits/sec 1711 +[ 4] 8.00-9.00 sec 2.39 MBytes 20.0 Mbits/sec 1727 +[ 4] 9.00-10.00 sec 2.38 MBytes 20.0 Mbits/sec 1720 +[ 4] 10.00-11.00 sec 2.40 MBytes 20.1 Mbits/sec 1736 +[ 4] 11.00-12.00 sec 2.37 MBytes 19.9 Mbits/sec 1717 +- - - - - - - - - - - - - - - - - - - - - - - - - +[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams +[ 4] 0.00-12.00 sec 28.4 MBytes 19.8 Mbits/sec 1.299 ms 12476/20503 (61%) +[ 4] Sent 20503 datagrams + +Server output: +Accepted connection from 192.168.250.1, port 53640 +[ 5] local 172.250.255.254 port 5001 connected to 192.168.250.1 port 48644 +[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams +[ 5] 0.00-1.00 sec 913 KBytes 7.48 Mbits/sec 1.459 ms 0/645 (0%) (omitted) +[ 5] 1.00-2.00 sec 1.07 MBytes 8.96 Mbits/sec 1.554 ms 390/1162 (34%) (omitted) +[ 5] 0.00-1.00 sec 1.07 MBytes 8.95 Mbits/sec 1.315 ms 840/1612 (52%) +[ 5] 1.00-2.00 sec 1.07 MBytes 8.95 Mbits/sec 1.406 ms 901/1673 (54%) +[ 5] 2.00-3.00 sec 1.07 MBytes 8.94 Mbits/sec 1.347 ms 963/1734 (56%) +[ 5] 3.00-4.00 sec 1.07 MBytes 8.94 Mbits/sec 1.771 ms 925/1696 (55%) +[ 5] 4.00-5.00 sec 1.07 MBytes 8.96 Mbits/sec 1.540 ms 963/1735 (56%) +[ 5] 5.00-6.00 sec 1.07 MBytes 8.96 Mbits/sec 1.536 ms 952/1724 (55%) +[ 5] 6.00-7.00 sec 1.07 MBytes 8.96 Mbits/sec 1.772 ms 951/1723 (55%) +[ 5] 7.00-8.00 sec 1.05 MBytes 8.83 Mbits/sec 1.607 ms 961/1722 (56%) +[ 5] 8.00-9.00 sec 1.08 MBytes 9.04 Mbits/sec 1.416 ms 972/1751 (56%) +[ 5] 9.00-10.00 sec 1.07 MBytes 8.96 Mbits/sec 1.548 ms 941/1713 (55%) +[ 5] 10.00-11.00 sec 1.07 MBytes 8.94 Mbits/sec 1.475 ms 958/1729 (55%) +[ 5] 11.00-12.00 sec 1.07 MBytes 8.96 Mbits/sec 1.396 ms 954/1726 (55%) +[ 5] 12.00-12.84 sec 919 KBytes 8.96 Mbits/sec 1.299 ms 805/1454 (55%) +- - - - - - - - - - - - - - - - - - - - - - - - - +[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams +[ 5] 0.00-12.84 sec 0.00 Bytes 0.00 bits/sec 1.299 ms 12086/21992 (55%) + +iperf Done. +pkill -9 -ef iperf3 +iperf3 killed (pid 9709) +``` + +The measured bandwidth is around 8.96 Mbps which is around 50% performance of the default slice. +Since we updated the slice to have 50% weight, this performance is correct. + +* Step 5. Switch the UE's slice +To switch the slice, we should create one more slice. +```bash +$ kubectl exec -it deployment/onos-cli -n riab -- onos rsm create slice --e2NodeID e2:4/e00/3/c8 --scheduler RR --sliceID 2 --weight 10 --sliceType DL +``` + +After that, check `onos-topo`: +```bash +$ kubectl exec -it deployment/onos-cli -n riab -- onos topo get entity e2:4/e00/3/c8 -v + +ID: e2:4/e00/3/c8 +Kind ID: e2node +Labels: +Source Id's: +Target Id's: uuid:6065c5aa-4351-446d-82b4-7702b991c365 +Aspects: +- onos.topo.MastershipState={"term":"1","nodeId":"uuid:6065c5aa-4351-446d-82b4-7702b991c365"} +- onos.topo.RSMSliceItemList={"rsmSliceList":[{"id":"1","sliceDesc":"Slice created by onos-RSM xAPP","sliceParameters":{"weight":50},"ueIdList":[]},{"id":"2","sliceDesc":"Slice created by onos-RSM xAPP","sliceParameters":{"weight":10},"ueIdList":[{"duUeF1apId":{"value":"49781"},"cuUeF1apId":{},"ranUeNgapId":{},"enbUeS1apId":{},"amfUeNgapId":{},"drbId":{"fourGDrbID":{"value":5,"qci":{"value":9}}}}]}]} +- onos.topo.E2Node={"serviceModels":{"1.3.6.1.4.1.53148.1.1.2.102":{"oid":"1.3.6.1.4.1.53148.1.1.2.102","name":"ORAN-E2SM-RSM","ranFunctions":[{"@type":"type.googleapis.com/onos.topo.RSMRanFunction","ricSlicingNodeCapabilityList":[{"maxNumberOfSlicesDl":4,"maxNumberOfSlicesUl":4,"maxNumberOfUesPerSlice":4,"supportedConfig":[{},{"slicingConfigType":"E2_SM_RSM_COMMAND_SLICE_UPDATE"},{"slicingConfigType":"E2_SM_RSM_COMMAND_SLICE_DELETE"},{"slicingConfigType":"E2_SM_RSM_COMMAND_UE_ASSOCIATE"}]}]}]}}} +``` + +`RSMSliceItemList` should have two slices - one has 50% weight and the other one has 10% weight. + +Then, switch the slice from slice ID 1 to slice ID 2. (Before doing that, please double check the DU-UE-F1AP ID): +```bash +$ kubectl exec -it deployment/onos-cli -n riab -- onos rsm set association --dlSliceID 2 --e2NodeID e2:4/e00/3/c8 --drbID 5 --DuUeF1apID 49781 +``` + +After that, check `onos-uenib`: +```bash +$ kubectl exec -it deployment/onos-cli -n riab -- onos uenib get ues -v +ID: 455f5d5e-0f8e-4b8d-a857-c56e9bd455cb +Aspects: +- onos.uenib.RsmUeInfo={"globalUeId":"455f5d5e-0f8e-4b8d-a857-c56e9bd455cb","ueIdList":{"duUeF1apId":{"value":"49781"},"cuUeF1apId":{"value":"49781"},"ranUeNgapId":{},"enbUeS1apId":{"value":14951620},"amfUeNgapId":{}},"bearerIdList":[{"drbID":{"fourGDrbID":{"value":5,"qci":{"value":9}}}}],"cellGlobalId":"e_utra_cgi:{p_lmnidentity:{value:\"\\x02\\xf8\\x10\"} e_utracell_identity:{value:{value:\"\\x00\\xe0\\x00\\x00\" len:28}}}","cuE2NodeId":"e2:4/e00/2/64","duE2NodeId":"e2:4/e00/3/c8","sliceList":[{"duE2NodeId":"e2:4/e00/3/c8","cuE2NodeId":"e2:4/e00/2/64","id":"2","sliceParameters":{"weight":10},"drbId":{"fourGDrbID":{"value":5,"qci":{"value":9}}}}]} +``` + +The slice ID should be `2` and weight should be `10`. + +Then, check the updated slice's performance: +```bash +$ make test-rsm-dataplane +Helm values.yaml file: /users/wkim/sdran-in-a-box//sdran-in-a-box-values-master-stable.yaml +HEAD is now at 9f79ab8 Fix the default SRIOV resource name for UPF user plane interfaces +HEAD is now at 0a2716d Releasing onos-rsm v0.1.9 (#992) +*** Test downlink traffic (UDP) *** +sudo apt install -y iperf3 +Reading package lists... Done +Building dependency tree +Reading state information... Done +iperf3 is already the newest version (3.1.3-1). +The following package was automatically installed and is no longer required: + ssl-cert +Use 'sudo apt autoremove' to remove it. +0 upgraded, 0 newly installed, 0 to remove and 173 not upgraded. +kubectl exec -it router -- apt install -y iperf3 +Reading package lists... Done +Building dependency tree +Reading state information... Done +iperf3 is already the newest version. +0 upgraded, 0 newly installed, 0 to remove and 80 not upgraded. +iperf3 -s -B $(ip a show oaitun_ue1 | grep inet | grep -v inet6 | awk '{print $2}' | awk -F '/' '{print $1}') -p 5001 > /dev/null & +kubectl exec -it router -- iperf3 -u -c $(ip a show oaitun_ue1 | grep inet | grep -v inet6 | awk '{print $2}' | awk -F '/' '{print $1}') -p 5001 -b 20M -l 1450 -O 2 -t 12 --get-server-output +Connecting to host 172.250.255.254, port 5001 +[ 4] local 192.168.250.1 port 60165 connected to 172.250.255.254 port 5001 +[ ID] Interval Transfer Bandwidth Total Datagrams +[ 4] 0.00-1.00 sec 2.15 MBytes 18.0 Mbits/sec 1554 (omitted) +[ 4] 1.00-2.00 sec 2.38 MBytes 20.0 Mbits/sec 1724 (omitted) +[ 4] 0.00-1.00 sec 2.15 MBytes 18.0 Mbits/sec 1554 +[ 4] 1.00-2.00 sec 2.38 MBytes 20.0 Mbits/sec 1724 +[ 4] 2.00-3.00 sec 2.40 MBytes 20.1 Mbits/sec 1733 +[ 4] 3.00-4.00 sec 2.37 MBytes 19.9 Mbits/sec 1716 +[ 4] 4.00-5.00 sec 2.40 MBytes 20.1 Mbits/sec 1734 +[ 4] 5.00-6.00 sec 2.37 MBytes 19.9 Mbits/sec 1715 +[ 4] 6.00-7.00 sec 2.38 MBytes 20.0 Mbits/sec 1723 +[ 4] 7.00-8.00 sec 2.39 MBytes 20.0 Mbits/sec 1725 +[ 4] 8.00-9.00 sec 2.38 MBytes 20.0 Mbits/sec 1723 +[ 4] 9.00-10.00 sec 2.38 MBytes 20.0 Mbits/sec 1724 +[ 4] 10.00-11.00 sec 2.39 MBytes 20.0 Mbits/sec 1725 +[ 4] 11.00-12.00 sec 2.38 MBytes 20.0 Mbits/sec 1724 +- - - - - - - - - - - - - - - - - - - - - - - - - +[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams +[ 4] 0.00-12.00 sec 28.4 MBytes 19.8 Mbits/sec 8.400 ms 20849/20372 (1e+02%) +[ 4] Sent 20372 datagrams + +Server output: +Accepted connection from 192.168.250.1, port 55520 +[ 5] local 172.250.255.254 port 5001 connected to 192.168.250.1 port 60165 +[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams +[ 5] 0.00-1.00 sec 188 KBytes 1.54 Mbits/sec 6.480 ms 0/133 (0%) (omitted) +[ 5] 1.00-1.00 sec 218 KBytes 893 Kbits/sec 6.346 ms 0/309 (0%) +[ 5] 1.00-2.00 sec 218 KBytes 1.79 Mbits/sec 6.541 ms 0/154 (0%) +[ 5] 2.00-3.00 sec 219 KBytes 1.80 Mbits/sec 7.384 ms 139/294 (47%) +[ 5] 3.00-4.00 sec 218 KBytes 1.79 Mbits/sec 16.664 ms 1900/2054 (93%) +[ 5] 4.00-5.00 sec 218 KBytes 1.79 Mbits/sec 10.540 ms 1229/1383 (89%) +[ 5] 5.00-6.00 sec 219 KBytes 1.80 Mbits/sec 11.020 ms 1575/1730 (91%) +[ 5] 6.00-7.00 sec 218 KBytes 1.79 Mbits/sec 8.349 ms 1404/1558 (90%) +[ 5] 7.00-8.00 sec 218 KBytes 1.79 Mbits/sec 18.142 ms 1896/2050 (92%) +[ 5] 8.00-9.00 sec 219 KBytes 1.80 Mbits/sec 10.674 ms 1403/1558 (90%) +[ 5] 9.00-10.00 sec 218 KBytes 1.79 Mbits/sec 10.690 ms 1577/1731 (91%) +[ 5] 10.00-11.00 sec 218 KBytes 1.79 Mbits/sec 8.359 ms 1403/1557 (90%) +[ 5] 11.00-12.00 sec 219 KBytes 1.80 Mbits/sec 16.308 ms 1896/2051 (92%) +[ 5] 12.00-13.00 sec 218 KBytes 1.79 Mbits/sec 10.457 ms 1404/1558 (90%) +[ 5] 13.00-14.00 sec 218 KBytes 1.79 Mbits/sec 10.937 ms 1576/1730 (91%) +[ 5] 14.00-15.00 sec 219 KBytes 1.80 Mbits/sec 8.334 ms 1403/1558 (90%) +[ 5] 15.00-16.00 sec 218 KBytes 1.79 Mbits/sec 16.737 ms 1897/2051 (92%) +[ 5] 16.00-16.29 sec 62.3 KBytes 1.76 Mbits/sec 8.400 ms 147/191 (77%) +- - - - - - - - - - - - - - - - - - - - - - - - - +[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams +[ 5] 0.00-16.29 sec 0.00 Bytes 0.00 bits/sec 8.400 ms 20849/23362 (89%) + + +iperf Done. +pkill -9 -ef iperf3 +iperf3 killed (pid 3530) +``` + +The measured bandwidth is around 1.76 Mbps which is around 10% performance of the default slice. +Since we switched the slice to have 10% weight, this performance is correct. + +* Step 6. Delete the UE's slice +Then, delete the slice 2 that is associated with the UE in order to check if the UE's slice is switched from the slice 2 to the default slice. +```bash +$ kubectl exec -it deployment/onos-cli -n riab -- onos rsm delete slice --e2NodeID e2:4/e00/3/c8 --sliceID 2 --sliceType DL +``` + +After that, check `onos-topo` and `onos-uenib`: +```bash +$ kubectl exec -it deployment/onos-cli -n riab -- onos topo get entity e2:4/e00/3/c8 -v + +ID: e2:4/e00/3/c8 +Kind ID: e2node +Labels: +Source Id's: +Target Id's: uuid:6065c5aa-4351-446d-82b4-7702b991c365 +Aspects: +- onos.topo.E2Node={"serviceModels":{"1.3.6.1.4.1.53148.1.1.2.102":{"oid":"1.3.6.1.4.1.53148.1.1.2.102","name":"ORAN-E2SM-RSM","ranFunctions":[{"@type":"type.googleapis.com/onos.topo.RSMRanFunction","ricSlicingNodeCapabilityList":[{"maxNumberOfSlicesDl":4,"maxNumberOfSlicesUl":4,"maxNumberOfUesPerSlice":4,"supportedConfig":[{},{"slicingConfigType":"E2_SM_RSM_COMMAND_SLICE_UPDATE"},{"slicingConfigType":"E2_SM_RSM_COMMAND_SLICE_DELETE"},{"slicingConfigType":"E2_SM_RSM_COMMAND_UE_ASSOCIATE"}]}]}]}}} +- onos.topo.RSMSliceItemList={"rsmSliceList":[{"id":"1","sliceDesc":"Slice created by onos-RSM xAPP","sliceParameters":{"weight":50},"ueIdList":[]}]} +- onos.topo.MastershipState={"term":"1","nodeId":"uuid:6065c5aa-4351-446d-82b4-7702b991c365"} + +$ kubectl exec -it deployment/onos-cli -n riab -- onos uenib get ues -v +ID: 455f5d5e-0f8e-4b8d-a857-c56e9bd455cb +Aspects: +- onos.uenib.RsmUeInfo={"globalUeId":"455f5d5e-0f8e-4b8d-a857-c56e9bd455cb","ueIdList":{"duUeF1apId":{"value":"49781"},"cuUeF1apId":{"value":"49781"},"ranUeNgapId":{},"enbUeS1apId":{"value":14951620},"amfUeNgapId":{}},"bearerIdList":[{"drbID":{"fourGDrbID":{"value":5,"qci":{"value":9}}}}],"cellGlobalId":"e_utra_cgi:{p_lmnidentity:{value:\"\\x02\\xf8\\x10\"} e_utracell_identity:{value:{value:\"\\x00\\xe0\\x00\\x00\" len:28}}}","cuE2NodeId":"e2:4/e00/2/64","duE2NodeId":"e2:4/e00/3/c8","sliceList":[]} +``` + +`RSMSliceItemList` in `onos-topo` should have one slice item and `sliceList` in `onos-uenib` should be empty. + +Then, check the UE's performance: +```bash +$ make test-rsm-dataplane +Helm values.yaml file: /users/wkim/sdran-in-a-box//sdran-in-a-box-values-master-stable.yaml +HEAD is now at 9f79ab8 Fix the default SRIOV resource name for UPF user plane interfaces +HEAD is now at 0a2716d Releasing onos-rsm v0.1.9 (#992) +*** Test downlink traffic (UDP) *** +sudo apt install -y iperf3 +Reading package lists... Done +Building dependency tree +Reading state information... Done +iperf3 is already the newest version (3.1.3-1). +The following package was automatically installed and is no longer required: + ssl-cert +Use 'sudo apt autoremove' to remove it. +0 upgraded, 0 newly installed, 0 to remove and 173 not upgraded. +kubectl exec -it router -- apt install -y iperf3 +Reading package lists... Done +Building dependency tree +Reading state information... Done +iperf3 is already the newest version. +0 upgraded, 0 newly installed, 0 to remove and 80 not upgraded. +iperf3 -s -B $(ip a show oaitun_ue1 | grep inet | grep -v inet6 | awk '{print $2}' | awk -F '/' '{print $1}') -p 5001 > /dev/null & +kubectl exec -it router -- iperf3 -u -c $(ip a show oaitun_ue1 | grep inet | grep -v inet6 | awk '{print $2}' | awk -F '/' '{print $1}') -p 5001 -b 20M -l 1450 -O 2 -t 12 --get-server-output +Connecting to host 172.250.255.254, port 5001 +[ 4] local 192.168.250.1 port 41372 connected to 172.250.255.254 port 5001 +[ ID] Interval Transfer Bandwidth Total Datagrams +[ 4] 0.00-1.00 sec 2.15 MBytes 18.0 Mbits/sec 1554 (omitted) +[ 4] 1.00-2.00 sec 2.39 MBytes 20.0 Mbits/sec 1725 (omitted) +[ 4] 0.00-1.00 sec 2.16 MBytes 18.1 Mbits/sec 1560 +[ 4] 1.00-2.00 sec 2.38 MBytes 20.0 Mbits/sec 1721 +[ 4] 2.00-3.00 sec 2.39 MBytes 20.0 Mbits/sec 1726 +[ 4] 3.00-4.00 sec 2.38 MBytes 20.0 Mbits/sec 1721 +[ 4] 4.00-5.00 sec 2.38 MBytes 20.0 Mbits/sec 1723 +[ 4] 5.00-6.00 sec 2.38 MBytes 20.0 Mbits/sec 1724 +[ 4] 6.00-7.00 sec 2.39 MBytes 20.0 Mbits/sec 1727 +[ 4] 7.00-8.00 sec 2.38 MBytes 20.0 Mbits/sec 1723 +[ 4] 8.00-9.00 sec 2.38 MBytes 20.0 Mbits/sec 1722 +[ 4] 9.00-10.00 sec 2.39 MBytes 20.0 Mbits/sec 1726 +[ 4] 10.00-11.00 sec 2.38 MBytes 20.0 Mbits/sec 1724 +[ 4] 11.00-12.00 sec 2.39 MBytes 20.0 Mbits/sec 1727 +- - - - - - - - - - - - - - - - - - - - - - - - - +[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams +[ 4] 0.00-12.00 sec 28.4 MBytes 19.8 Mbits/sec 0.669 ms 2135/20489 (10%) +[ 4] Sent 20489 datagrams + +Server output: +Accepted connection from 192.168.250.1, port 35326 +[ 5] local 172.250.255.254 port 5001 connected to 192.168.250.1 port 41372 +[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams +[ 5] 0.00-1.00 sec 1.75 MBytes 14.7 Mbits/sec 0.810 ms 0/1265 (0%) (omitted) +[ 5] 1.00-2.00 sec 2.10 MBytes 17.6 Mbits/sec 2.008 ms 0/1521 (0%) (omitted) +[ 5] 0.00-1.00 sec 2.10 MBytes 17.6 Mbits/sec 0.641 ms 0/1521 (0%) +[ 5] 1.00-2.00 sec 2.10 MBytes 17.6 Mbits/sec 0.657 ms 5/1526 (0.33%) +[ 5] 2.00-3.00 sec 2.10 MBytes 17.6 Mbits/sec 0.656 ms 222/1743 (13%) +[ 5] 3.00-4.00 sec 2.10 MBytes 17.7 Mbits/sec 2.946 ms 237/1759 (13%) +[ 5] 4.00-5.00 sec 2.10 MBytes 17.6 Mbits/sec 3.615 ms 196/1717 (11%) +[ 5] 5.00-6.00 sec 2.10 MBytes 17.6 Mbits/sec 6.710 ms 192/1713 (11%) +[ 5] 6.00-7.00 sec 2.10 MBytes 17.6 Mbits/sec 0.656 ms 185/1706 (11%) +[ 5] 7.00-8.00 sec 2.10 MBytes 17.7 Mbits/sec 3.232 ms 235/1757 (13%) +[ 5] 8.00-9.00 sec 2.10 MBytes 17.6 Mbits/sec 6.728 ms 192/1713 (11%) +[ 5] 9.00-10.00 sec 2.10 MBytes 17.6 Mbits/sec 0.650 ms 183/1704 (11%) +[ 5] 10.00-11.00 sec 2.10 MBytes 17.6 Mbits/sec 3.110 ms 234/1755 (13%) +[ 5] 11.00-12.00 sec 2.10 MBytes 17.7 Mbits/sec 3.484 ms 200/1722 (12%) +[ 5] 12.00-12.39 sec 838 KBytes 17.6 Mbits/sec 0.669 ms 54/646 (8.4%) +- - - - - - - - - - - - - - - - - - - - - - - - - +[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams +[ 5] 0.00-12.39 sec 0.00 Bytes 0.00 bits/sec 0.669 ms 2135/20982 (10%) + + +iperf Done. +pkill -9 -ef iperf3 +iperf3 killed (pid 19333) +``` + +The measured bandwidth is around 17.6 Mbps which is the same as the default slice performance measured at step 1. +Since the UE was switched from the slice 2 to the default slice due to the slice deletion, the performance is correct. + ## Other commands ### Reset and delete RiaB environment If we want to reset our RiaB environment or delete RiaB compoents, we can use below commands: