# Installation OSC RIC (Near RT) & E2SIM Guide

:::info
## Background Knowledge
A **RAN Intelligent Controller (RIC)** is a crucial software-defined component within the Open Radio Access Network (Open RAN) architecture, designed to manage and enhance RAN functions. It promotes multivendor interoperability, intelligence, agility, and programmability, enabling the integration of third-party applications to automate and optimize RAN operations at scale. This results in reduced total cost of ownership (TCO) for mobile operators and improved quality of experience (QoE) for users, making the RIC a key element in the Open RAN strategy to create flexible, efficient, and cost-effective networks.
The **near-RT RIC** is a logical function that optimizes and controls O-CU and O-DU nodes in near-real-time (10 ms to 1 s), guided by policies and models from the non-RT RIC. It manages RAN infrastructure at the cloud edge, hosting cloud-native, microservice-based applications called xApps.
The **E2 interface** facilitates the RAN closed-loop control by enabling the RIC to enforce control and policy decisions towards the RAN. It also supports data collection and feedback mechanisms, providing critical information to the near-RT RIC for real-time optimization and management of the network.
**E2SIM** is a simulation tool used of Open Radio Access Networks (Open RAN) to emulate the E2 interface, which is essential for interactions between the RAN Intelligent Controller (RIC) and the underlying radio access network components, such as O-CU and O-DU nodes. E2sim allows developers and researchers to test, validate, and optimize the behavior of RAN functions and RIC applications (xApps) in a controlled and virtual environment.
:::
## Prerequisites
The steps below assume a clean installation of Ubuntu 20.04 (no k8s, no docker, no helm)
## Installing Near Realtime RIC in RIC Cluster
You can Install [Kubernetes](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/) cluster is installed, the next step is to install the (Near Realtime) RIC Platform.
### Deployment Script
To access Root:
```
sudo -i
```
Clone the repository :
```
git clone "https://gerrit.o-ran-sc.org/r/ric-plt/ric-dep" -b i-release
```
### Deployment Infrastructure
#### Install kubernetes, kubernetes-CNI, helm and docker
Change mirror repository
```
cd ric-dep/bin
nano install_k8s_and_helm.sh
### Insert this code
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
```

```
cd ric-dep/bin
./install_k8s_and_helm.sh
```
:::success
output:
```
root@ubuntu:~/ric-dep/bin# ./install_k8s_and_helm.sh
+ KUBEV=1.28.11
+ KUBECNIV=0.7.5
+ HELMV=3.14.4
+ DOCKERV=20.10.21
+ echo running ./install_k8s_and_helm.sh
running ./install_k8s_and_helm.sh
+ getopts :k:d:e:n:c o
+ [[ 3.14.4 == 2.* ]]
+ set -x
+ export DEBIAN_FRONTEND=noninteractive
+ DEBIAN_FRONTEND=noninteractive
++ hostname -I
++ hostname
.
.
.
++ hostname
+ '[' '' == ubuntu ']'
+ echo 'Done with master node setup'
Done with master node setup
+ [[ ! -z '' ]]
+ [[ ! -z '' ]]
+ [[ ! -z '' ]]
+ [[ 1 -gt 100 ]]
+ [[ 1 -gt 100 ]]
```
:::
#### Install chartmuseum into helm and add ric-common templates
```
./install_common_templates_to_helm.sh
```
:::success
output:
```
Installing servecm (Chart Manager) and common templates to helm3
Installed plugin: servecm
/root/.cache/helm/repository
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 15.0M 100 15.0M 0 0 11.4M 0 0:00:01 0:00:01 --:--:-- 11.4M
.
.
.
"local" has been added to your repositories
checking that ric-common templates were added
NAME CHART VERSION APP VERSION DESCRIPTION
local/ric-common 3.3.2 Common templates for inclusion in other charts
```
:::
### Modify the deployment recipe
#### Edit the recipe files ./RECIPE_EXAMPLE/example_recipe_latest_stable.yaml
```
nano ./RECIPE_EXAMPLE/example_recipe_oran_i_release.yaml
```
You can specify which docker registry will be used for each component. If the docker registry requires login credential, you can add the credential in the following section. Extsvcplt can fill your server IP.
:::success


:::
### Installing the RIC
In this section we use [I release] because latest release have error in installations.
```
cd ric-dep/bin
./install -f ../RECIPE_EXAMPLE/example_recipe_oran_i_release.yaml
```
:::success
```
configmap "ricplt-recipe" deleted
configmap/ricplt-recipe created
Add cluster roles
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "local" chart repository
Update Complete. ⎈Happy Helming!⎈
.
.
.
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "local" chart repository
Update Complete. ⎈Happy Helming!⎈
Saving 1 charts
Downloading ric-common from repo http://127.0.0.1:8879/charts
Deleting outdated charts
NAME: r4-jaegeradapter
LAST DEPLOYED: Mon Jul 8 04:11:17 2024
NAMESPACE: ricplt
STATUS: deployed
REVISION: 1
TEST SUITE: None
```
:::
#### Check installation platform
```
kubectl get pods -n ricplt
```
:::success
output:
```
root@ubuntu:~# kubectl get pods -n ricplt
NAME READY STATUS RESTARTS AGE
deployment-ricplt-a1mediator-7d5b85ff7d-5xkmw 1/1 Running 0 13h
deployment-ricplt-alarmmanager-6bd5fccfc8-7hx8m 1/1 Running 0 13h
deployment-ricplt-appmgr-77986c9cbb-n9hh4 1/1 Running 0 13h
deployment-ricplt-e2mgr-78c987559f-xx6l6 1/1 Running 0 13h
deployment-ricplt-e2term-alpha-5dc768bcb7-k9dr4 1/1 Running 0 13h
deployment-ricplt-jaegeradapter-76ddbf9c9-8hkz7 1/1 Running 0 13h
deployment-ricplt-o1mediator-97fb6759b-zcgsw 1/1 Running 0 13h
deployment-ricplt-rtmgr-78f768474-vgkkh 1/1 Running 3 13h
deployment-ricplt-submgr-56bb776b68-88fzw 1/1 Running 0 13h
deployment-ricplt-vespamgr-84f7d87dfb-jdvtr 1/1 Running 0 13h
r4-influxdb-influxdb2-0 1/1 Running 0 13h
r4-infrastructure-kong-7995f4679b-7x2lk 2/2 Running 2 13h
r4-infrastructure-prometheus-alertmanager-5798b78f48-xfcfr 2/2 Running 0 13h
r4-infrastructure-prometheus-server-c8ddcfdf5-szkc6 1/1 Running 0 13h
statefulset-ricplt-dbaas-server-0 1/1 Running 0 13h
```
:::
:::danger
##### Problem Influxdb not running because PVC
```
nano pv-ricplt.yaml
```
fill this file with :
```
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-ricplt-influxdb
labels:
type: local
spec:
storageClassName: "manual"
capacity:
storage: 50Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
```
then create file pvc
```
nano pvc-ricplt.yaml
```
fill this file with :
```
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: r4-influxdb-influxdb2
namespace: ricplt
spec:
storageClassName: "manual" # Empty string must be explicitly set otherwise default StorageClass will be set
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
```
after that build pv and pvc :
```
kubectl apply -f pv-ricplt.yaml
kubectl apply -f pvc-ricplt.yaml
```
After this you can see your influxdb running.
:::
##### Add User for database
```
kubectl exec -it r4-influxdb-influxdb2-0 -n ricplt -- /bin/sh
```
```
root@ubuntu:~# kubectl exec -it r4-influxdb-influxdb2-0 -n ricplt -- /bin/sh
/ # env | grep INFLUXDB
R4_INFLUXDB_INFLUXDB2_PORT_80_TCP_ADDR=10.103.101.32
R4_INFLUXDB_INFLUXDB2_PORT_80_TCP_PORT=80
R4_INFLUXDB_INFLUXDB2_PORT_80_TCP_PROTO=tcp
DOCKER_INFLUXDB_INIT_BUCKET=default
DOCKER_INFLUXDB_INIT_MODE=setup
DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=NFmbiS66DaV9fIoTYTJFqxfveUO4RJzU
R4_INFLUXDB_INFLUXDB2_PORT_80_TCP=tcp://10.103.101.32:80
DOCKER_INFLUXDB_INIT_USERNAME=admin
R4_INFLUXDB_INFLUXDB2_SERVICE_PORT_HTTP=80
DOCKER_INFLUXDB_INIT_RETENTION=0s
R4_INFLUXDB_INFLUXDB2_SERVICE_HOST=10.103.101.32
DOCKER_INFLUXDB_INIT_ORG=influxdata
DOCKER_INFLUXDB_INIT_CLI_CONFIG_NAME=default
DOCKER_INFLUXDB_INIT_PASSWORD=64VrxG940K0Npg1bEFUAVSuaZCMnQWO6
R4_INFLUXDB_INFLUXDB2_SERVICE_PORT=80
R4_INFLUXDB_INFLUXDB2_PORT=tcp://10.103.101.32:80
INFLUXDB_VERSION=2.2.0
```
```
influx config create --active \
-n config-name \
-u http://localhost:8086 \
-t <token admin> \
-o influxdata
```
#### Check installation infrastructure
```
kubectl get pods -n ricinfra
```
:::success
```
root@ubuntu:~/ric-dep/bin# kubectl get pods -n ricinfra
NAME READY STATUS RESTARTS AGE
deployment-tiller-ricxapp-676dfd8664-lscnb 1/1 Running 0 43m
tiller-secret-generator-mlml7 0/1 Completed 0 43m
```
:::
## Installation E2SIM

### Flow Function
* Upon startup, Simulator generates E2 Setup Request
* For each E2SM that is registered, include RAN function definition
* Upon receiving incoming requests, decode
* Identify RAN function ID
* Call appropriate callback function for RAN function ID and request type
* Provide entire encoded request
* If no callback is provided, we return an error response
* Upon receiving responses, decode:
* Identify RAN function ID
* If a callback is registered for this message type, call it based on RAN function ID and request type
* Provide entire encoded response
* If no callback is registered, no action is taken
### Components Function
E2 Simulator enables a specific E2SM to be supported by the calling application in the following way:
* E2SM must be registered by the calling application
* E2SM-specific code uses callbacks to handle interaction from xApp
* E2SM-specific code must continuously implement simulation logic
Registration of an E2SM with the E2 Simulator entails the following:
* RAN function definition
* Callback functions for any of the following:
1. Subscription
2. Control
3. Any Responses
* Callback functions are responsible for sending responses
* They may also need to set up ongoing simulation messaging
* REPORT Service sends back periodic Indication messages containing REPORT
* INSERT Service sends back periodic Indication messages containing INSERT
* They may need to associate incoming messages with existing service invocation
* Modify Subscription
* CONTROL message associated with INSERT
* Base E2 simulator should not be concerned with these details; only specific E2SM code should be responsible for any messaging
## Install E2SIM
### Clone Repo:
```
git clone -b https://github.com/o-ran-sc/sim-e2-interface.git
```
:::success
output:
```
root@ubuntu:~# git clone -b https://gerrit.o-ran-sc.org/r/sim/e2-interface.git
sc.org/r/sim/e2-interface"Cloning into 'e2-interface'...
remote: Total 4964 (delta 0), reused 4964 (delta 0)
Receiving objects: 100% (4964/4964), 4.49 MiB | 880.00 KiB/s, done.
Resolving deltas: 100% (3911/3911), done.
```
:::
### Install dependencies:
```
sudo apt-get install -y build-essential git cmake libsctp-dev lksctp-tools autoconf automake libtool bison flex libboost-all-dev
sudo apt-get clean
```
:::success
Output:
```
Reading package lists... Done
Building dependency tree
Reading state information... Done
libtool is already the newest version (2.4.6-14).
0 upgraded, 0 newly installed, 0 to remove and 72 not upgraded.
```
:::
### Build the official e2sim:
```
cd ~/e2-interface/e2sim/
mkdir build
cd build
cmake ..
make package
```
:::success
Output:
```
root@ubuntu:~/e2-interface/e2sim# mkdir build
root@ubuntu:~/e2-interface/e2sim# cd build
root@ubuntu:~/e2-interface/e2sim/build# cmake ..
-- The C compiler identification is GNU 9.4.0
-- The CXX compiler identification is GNU 9.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
.
.
.
root@ubuntu:~/e2-interface/e2sim/build# make package
Scanning dependencies of target encoding_objects
[ 0%] Building CXX object src/encoding/CMakeFiles/encoding_objects.dir/encode_e2apv1.cpp.o
/root/e2-interface/e2sim/src/encoding/encode_e2apv1.cpp: In function ‘long int encoding::get_function_id_from_subscription(E2AP_PDU_t*)’:
.
.
.
[100%] Built target asn1_objects
Run CPack packaging tool...
CPack: Create package using DEB
CPack: Install projects
CPack: - Run preinstall target for: e2sim
CPack: - Install project: e2sim []
CPack: Create package
-- CPACK_DEBIAN_PACKAGE_DEPENDS not set, the package will have no dependencies.
CPack: - package: /root/e2-interface/e2sim/build/e2sim_1.0.0_amd64.deb generated.
.
.
.
root@ubuntu:~/e2-interface/e2sim/build# cmake .. -DDEV_PKG=1
+++ pkg name: e2sim-dev_1.0.0_amd64.deb
### make package will generate only deb package; cannot find support to generate rpm packages
+++ profiling is off
-- Configuring done
-- Generating done
-- Build files have been written to: /root/e2-interface/e2sim/build
.
.
.
root@ubuntu:~/e2-interface/e2sim/build# make package
[ 0%] Built target encoding_objects
[ 0%] Built target def_objects
[ 1%] Built target sctp_objects
[ 1%] Built target messagerouting_objects
[ 1%] Built target base_objects
Scanning dependencies of target e2sim_static
[ 2%] Linking CXX static library libe2sim.a
[ 2%] Built target e2sim_static
[ 2%] Built target e2sim_shared
[100%] Built target asn1_objects
Run CPack packaging tool...
CPack: Create package using DEB
CPack: Install projects
CPack: - Run preinstall target for: e2sim
CPack: - Install project: e2sim []
CPack: Create package
-- CPACK_DEBIAN_PACKAGE_DEPENDS not set, the package will have no dependencies.
CPack: - package: /root/e2-interface/e2sim/build/e2sim-dev_1.0.0_amd64.deb generated.
```
:::
### Generate .deb packages and move it:
* On plain Ubuntu you might need to install apt install cmake c++ libsctp-dev
* To start building docker image one should generate the .deb packages using following
* Generate .deb packages and move it to e2sm_examples/kpm_e2sm folder :
```
cmake .. && make package
cp *.deb ../e2sm_examples/kpm_e2sm/
```
:::success
output:
```
root@ubuntu:~/e2-interface/e2sim/build# cmake .. && make package && cmake .. -DDEV_PKG=1 && make package
+++ pkg name: e2sim_1.0.0_amd64.deb
### make package will generate only deb package; cannot find support to generate rpm packages
+++ profiling is off
-- Configuring done
-- Generating done
-- Build files have been written to: /root/e2-interface/e2sim/build
[ 0%] Built target encoding_objects
[ 0%] Built target def_objects
.
.
.
root@ubuntu:~/e2-interface/e2sim/build# cp *.deb ../e2sm_examples/kpm_e2sm/
```
:::
### Change the e2tern-sctp-alpha address to connect
if you wish to change the e2t address to connect then modify the Dockerfile in e2sm_examples/kpm_e2sm/ path.
#### View E2term SCTP IP
```
kubectl get service -n ricplt
```
:::success
output:
```
root@ubuntu:~# kubectl get service -n ricplt
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
aux-entry ClusterIP 10.104.205.40 <none> 80/TCP,443/TCP 119m
r4-infrastructure-kong-manager NodePort 10.97.41.103 <none> 8002:31384/TCP,8445:31954/TCP 119m
r4-infrastructure-kong-proxy LoadBalancer 10.104.247.169 <pending> 80:32080/TCP,443:32443/TCP 119m
r4-infrastructure-kong-validation-webhook ClusterIP 10.108.111.106 <none> 443/TCP 119m
r4-infrastructure-prometheus-alertmanager ClusterIP 10.101.42.179 <none> 80/TCP 119m
r4-infrastructure-prometheus-server ClusterIP 10.96.156.175 <none> 80/TCP 119m
service-ricplt-a1mediator-http ClusterIP 10.111.141.65 <none> 10000/TCP 118m
service-ricplt-a1mediator-rmr ClusterIP 10.103.222.251 <none> 4561/TCP,4562/TCP 118m
service-ricplt-alarmmanager-http ClusterIP 10.107.254.187 <none> 8080/TCP 117m
service-ricplt-alarmmanager-rmr ClusterIP 10.103.145.41 <none> 4560/TCP,4561/TCP 117m
service-ricplt-appmgr-http ClusterIP 10.107.105.148 <none> 8080/TCP 119m
service-ricplt-appmgr-rmr ClusterIP 10.109.187.173 <none> 4561/TCP,4560/TCP 119m
service-ricplt-dbaas-tcp ClusterIP None <none> 6379/TCP 119m
service-ricplt-e2mgr-http ClusterIP 10.99.1.23 <none> 3800/TCP 118m
service-ricplt-e2mgr-rmr ClusterIP 10.107.185.182 <none> 4561/TCP,3801/TCP 118m
service-ricplt-e2term-prometheus-alpha ClusterIP 10.106.81.203 <none> 8088/TCP 118m
service-ricplt-e2term-rmr-alpha ClusterIP 10.110.221.177 <none> 4561/TCP,38000/TCP 118m
service-ricplt-e2term-sctp-alpha NodePort 10.110.72.147 <none> 36422:32222/SCTP 118m
service-ricplt-o1mediator-http ClusterIP 10.96.147.72 <none> 9001/TCP,8080/TCP,3000/TCP 117m
service-ricplt-o1mediator-tcp-netconf NodePort 10.107.202.218 <none> 830:30830/TCP 117m
service-ricplt-rtmgr-http ClusterIP 10.96.141.107 <none> 3800/TCP 119m
service-ricplt-rtmgr-rmr ClusterIP 10.100.163.198 <none> 4561/TCP,4560/TCP 119m
service-ricplt-submgr-http ClusterIP None <none> 3800/TCP 118m
service-ricplt-submgr-rmr ClusterIP None <none> 4560/TCP,4561/TCP 118m
service-ricplt-vespamgr-http ClusterIP 10.97.31.72 <none> 8080/TCP,9095/TCP 117m
```
:::
### Edit file with address to connect
```
nano Dockerfile
```

### Ready to build the docker image
```
cd ../e2sm_examples/kpm_e2sm/
docker build -t e2simul:0.0.2 .
```
:::success
output:
```
root@ubuntu:~/e2-interface/e2sim/e2sm_examples/kpm_e2sm# root@ubuntu:~/e2-interface/e2sim/e2sm_examples/kpm_e2sm#
root@ubuntu:~/e2-interface/e2sim/e2sm_examples/kpm_e2sm# docker build -t e2simul:0.0.2 .
Sending build context to Docker daemon 1.172MB
Step 1/17 : ARG CONTAINER_PULL_REGISTRY=nexus3.o-ran-sc.org:10002
Step 2/17 : FROM ${CONTAINER_PULL_REGISTRY}/o-ran-sc/bldr-ubuntu18-c-go:1.9.0 as buildenv
1.9.0: Pulling from o-ran-sc/bldr-ubuntu18-c-go
f22ccc0b8772: Pull complete
3cf8fb62ba5f: Pull complete
e80c964ece6a: Pull complete
d4194511dbdc: Pull complete
2d489c440bae: Pull complete 33ee3c77506b: Pull complete
7cdf3f1d17d0: Pull complete
cf153de296b0: Pull complete
e1920709a3af: Pull complete
6cdcae3380c6: Pull complete
6dbdb1c3e5fd: Pull complete
1710cd1faa0e: Pull complete
d44308ed4b3e: Extracting [=======
```
:::
## Run docker container
### docker run <simulator-image-name>
```
docker run e2simul:0.0.2
```
:::success
output:
```
root@ubuntu:~/sim-e2-interface/e2sim/e2sm_examples/kpm_e2sm# docker run e2simul:0.0.2
[kpm_callbacks.cpp:65] [INFO] Starting KPM simulator
[encode_kpm.cpp:49] [INFO] short_name: ORAN-E2SM-KPM, func_desc: KPM Monitor, e2sm_odi: OID123
[encode_kpm.cpp:72] [INFO] Initialize event trigger style list structure
[encode_kpm.cpp:91] [INFO] Initialize report style structure
[e2sim.cpp:65] [INFO] About to register E2SM RAN function description with ID 2
[e2sim.cpp:43] [INFO] About to register callback for subscription for RAN function with ID 2
[e2sim.cpp:104] [INFO] Start E2 Agent (E2 Simulator)
[e2sim.cpp:125] [INFO] After reading input options
[e2sim_sctp.cpp:180] [INFO] [SCTP] Binding client socket to source port 36422
[e2sim_sctp.cpp:187] [INFO] [SCTP] Connecting to server at 10.109.135.184:36422 ...
[e2sim_sctp.cpp:194] [INFO] [SCTP] Connection established
[e2sim.cpp:133] [INFO] SCTP client has been started
[e2sim.cpp:143] [INFO] Constructing a list of RAN functions based on registered information
[e2sim.cpp:149] [INFO] Adding RAN function ID 2, description: h0ORAN-E2SM-KPM to the list
[e2sim.cpp:161] [INFO] Generate E2AP v1 setup request for all registered RAN functions
.
.
.
[kpm_callbacks.cpp:651] [INFO] Encode and sending E2AP subscription success response via SCTP
[e2ap_asn1c_codec.c:175] [DEBUG] [E2AP ASN] Encoded succesfully, encoded size = 33
[kpm_callbacks.cpp:654] [INFO] Now generating data for subscription request
[kpm_callbacks.cpp:167] [INFO] Current line: {"ueMeasReport":{"du-id":1002,"measTimeStampRf":"2020-11-05T15:39:58.858734","ueMeasReportList":[{"ue-id":"Pedestrian-11","nrCellIdentity":2,"targetTput":0.3,"servingCellRfReport":{"rsrp":74,"rsrq":65,"rssinr":113},"neighbourCellList":[{"nbCellIdentity":8,"nbCellRfReport":{"rsrp":67,"rsrq":65,"rssinr":112}},{"nbCellIdentity":7,"nbCellRfReport":{"rsrp":65,"rsrq":65,"rssinr":107}},{"nbCellIdentity":9,"nbCellRfReport":{"rsrp":64,"rsrq":65,"rssinr":106}},{"nbCellIdentity":1,"nbCellRfReport":{"rsrp":63,"rsrq":65,"rssinr":104}},{"nbCellIdentity":3,"nbCellRfReport":{"rsrp":62,"rsrq":65,"rssinr":101}},{"nbCellIdentity":10,"nbCellRfReport":{"rsrp":61,"rsrq":65,"rssinr":100}},{"nbCellIdentity":6,"nbCellRfReport":{"rsrp":59,"rsrq":65,"rssinr":95}}],"throughput":0.3,"prb_usage":23}]}}
[kpm_callbacks.cpp:182] [INFO] First key is ueMeasReport
[kpm_callbacks.cpp:189] [INFO] Start sending UE measurement reports with DU id 1002
[kpm_callbacks.cpp:205] [INFO] Preparing report data for UE 0 with id P:��
[kpm_callbacks.cpp:297] [INFO] This is neighbor str [{"CID" : "37343722511136087", "Cell-RF" : {"rsrp": 67, "rsrq": 65, "rssinr": 112}},{"CID" : "37343722511136077", "Cell-RF" : {"rsrp": 65, "rsrq": 65, "rssinr": 107}},{"CID" : "37343722511136097", "Cell-RF" : {"rsrp": 64, "rsrq": 65, "rssinr": 106}},{"CID" : "37343722511136017", "Cell-RF" : {"rsrp": 63, "rsrq": 65, "rssinr": 104}},{"CID" : "37343722511136037", "Cell-RF" : {"rsrp": 62, "rsrq": 65, "rssinr": 101}},{"CID" : "373437225111360107", "Cell-RF" : {"rsrp": 61, "rsrq": 65, "rssinr": 100}},{"CID" : "37343722511136067", "Cell-RF" : {"rsrp": 59, "rsrq": 65, "rssinr": 95}}]
```
:::
## Build pods with helm
you can build e2sim to ricplt with this command:
```
helm install e2sim ./helm -n ricplt
```
and e2sim will show in your pods ricplt