---
# System prepended metadata

title: OpenAirInterface

---

# OpenAirInterface 

---

## Requirements 

- I will use 2 VM for gNodeB and CORE 
- 4-2-40 flavor 
- Use CPU from Hardware OS who running hypervisor AVX2
- `grep -i "avx2" /proc/cpuinfo` Command to check or make sure if AVX2 CPU is used by the VM 
---

## gNodeB instalation (VM1)

1. Update and Upgrade the system 
```bash 
sudo apt-get update && sudo apt-get -y upgrade
```

2. Install kernel low-latency 
```bash 
sudo apt-get -y install linux-image-lowlatency-hwe-22.04 linux-headers-lowlatency-hwe-22.04
# Update bootloader dan reboot
sudo update-grub
sudo reboot
uname -r
```

3. install git if we dont have
```bash
sudo apt-get -y install git
```

4. Cloning and create working directory
```bash
mkdir OAI-GnodeB
cd OAI-GnodeB
# cloning oai from source
git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git
cd openairinterface5g
git fetch --all --tags
git checkout v2.1.0
source oaienv
cd cmake_targets
```

5. Installing gNodeB 
```bash
sudo ./build_oai -I --gNB --nrUE -w SIMU
```
**Note** : 
- `-I` is for install all the dependency that needed
- `--gNB` is for build gnodeb
- `nrUE` is for build simulator UE for testing
- `-w SIMU` is for build RF simulator


---
## Open5gs core Instalation (VM2)

1. Install mongoDB for the database 
```bash 
# impor mongoDB gpg key 
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | sudo gpg --dearmor -o /usr/share/keyrings/mongodb-server-7.0.gpg

# add mongoDB repository
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list

# Instal MongoDB
sudo apt-get update
sudo apt-get install -y mongodb-org
```

2. Install open5GS core 
```bash
# Add PPA Open5GS
sudo add-apt-repository ppa:open5gs/latest
sudo apt-get update

# Instal all the component of open5gs
sudo apt-get install -y open5gs
```

3. Install open5gs web-ui 
```bash 
 # Download and import the Nodesource GPG key
 $ sudo apt update
 $ sudo apt install -y ca-certificates curl gnupg
 $ sudo mkdir -p /etc/apt/keyrings
 $ curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg

 # Create deb repository
 $ NODE_MAJOR=20
 $ echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list

 # Run Update and Install
 $ sudo apt update
 $ sudo apt install nodejs -y
```

You can now install open5gs WebUI 
```bash 
$ curl -fsSL https://open5gs.org/open5gs/assets/webui/install | sudo -E bash -
```

to check and troubleshoot u can check in 
`/lib/systemd/system/open5gs-webui.service`

to acces web-ui u can check in 
`http://localhost:9999`

4. If u want to use NGINX for Reverse Proxy 

```bash
# Install NGINX
sudo apt-get update
sudo apt-get install -y nginx
```

```bash 
# Create file for the sevice
sudo nano /etc/nginx/sites-available/open5gs-webui
```

```bash 
server {
    listen 3000;
    server_name _;

    location / {
        proxy_pass http://127.0.0.1:9999;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
#Copy and paste this into this file
```

```bash 
# Activate our situs
sudo ln -s /etc/nginx/sites-available/open5gs-webui /etc/nginx/sites-enabled/

# (Opsional) Hapus link situs default agar tidak bentrok
sudo rm /etc/nginx/sites-enabled/default

# Cek konfigurasi and restart NGINX
sudo nginx -t
sudo systemctl restart nginx
```

Acces it in `http://<IP_VM_Core_Anda>:3000`


# Running the scenario 



---

we will running OAI as a GNB and     UE creator. Open5gs will be the core. Before we run a scenario make sure that u have connected between each vm. if u use in local computer like VMware u can check in this section.
![image](https://hackmd.io/_uploads/Hyam9vgOxe.png)

U can setting the network adapter like that.


1. First step is we have to create subscriber in open5gs webui. 
![image](https://hackmd.io/_uploads/r17OJdguge.png)
- add the IMSI and save 

2. Create a file for GNB in VM gnodeb or u can copy from 
`/home/rafi/oai-new/openairinterface5g/targets/PROJECTS/GENERIC-NR-5GC/CONF` there is many templates for the project in openairinterfaces 

3. get match or u can use by default of mcc and mnc 
![image](https://hackmd.io/_uploads/BJn3H_edel.png)

- and dont forget to change the IP of `amf_ip_address` with your IP VM open5gs, `for the NETWORK_INTERFACE` U can use IP from VM OAI or gnb.
![image](https://hackmd.io/_uploads/BJGkF_gdex.png)

4. Set up ur file for UE 
- u can use format file like this 
```bash 
# Hanya USIM & NAS; RF di-set via CLI
uicc0 = {
  imsi = "001010123456789";
  key  = "465B5CE8B199B49FAA5F0A2EE238A6BC";
  opc  = "E8ED289DEBA952E4283B54E88E6183CA";
  dnn  = "internet";
  nssai_sst  = 1;
#  sd   = 000000;  # opsio 
};
 #use_suci = false;

```

5. if the UE and the GNB already set up we can run it with manual CLI or bash script 
- Bash script for UE 
```bash 
#!/usr/bin/env bash
set -euo pipefail

BUILD_DIR=~/oai-new/openairinterface5g/cmake_targets/ran_build/build
USIM_CONF=~/oai-new/openairinterface5g/RISET5G/nr-ue/oai_test.conf

cd "$BUILD_DIR"

# UE sebagai CLIENT rfsim (pastikan bukan server)
unset RFSIMULATOR || true

# Cek file USIM ada
if [[ ! -f "$USIM_CONF" ]]; then
  echo "ERROR: USIM config tidak ditemukan di: $USIM_CONF"
  echo "Buat dulu file-nya seperti contoh yang kuberi di langkah (1)."
  exit 1
fi

echo "Menjalankan UE rfsim (client) dengan USIM config: $USIM_CONF"
echo "Pastikan gNB rfsim (server) sudah jalan lebih dulu dan listen di 127.0.0.1:4043."

exec sudo ./nr-uesoftmodem --rfsim --rfsimulator.serveraddr 127.0.0.1 \
  -C 3619200000 --CO 0 --band 78 -r 51 --numerology 1 \
  --ue-scan-carrier \
  -O "$USIM_CONF"
```

- Bash script for gnb
```bash 
_gnb_rfsim.sh 
#!/usr/bin/env bash
set -euo pipefail
cd ~/oai-new/openairinterface5g/cmake_targets/ran_build/build

# gNB sebagai SERVER rfsim
exec sudo -E env RFSIMULATOR=server ./nr-softmodem \
  --sa \
  -O /home/rafi/oai-new/openairinterface5g/RISET5G/gnodeb/gnb_rfsim_new.conf \
  -r 51 --numerology 1 --rfsim
```

6. Setting up the core components
- First thing u have to know is u have to make sure the NRF is running before the other components.
- Change the IP in amf with ur ip VM core and matching up the mcc and mnc 
![image](https://hackmd.io/_uploads/ryarSjl_xl.png)
- also check in `upf.yaml` and change the IP with urs 
![image](https://hackmd.io/_uploads/rJXy8jx_el.png)
- now u can save it and restart the component 