# OSC O-DU at OAI PNF (Rel. D)
###### tags: `Construction`
### Basic requirement
| OS/Kernel | Version |
|:-------------------------- |:----------------------------------------|
| Host operating system | Linux Ubuntu 18.04 or 20.04 |
| Kernel | 4.15.0.142.lowlatency |
### Install libraries to compile and execute O-DU High
Pre-requisite for Compilation :
1. Linux 32-bit/64-bit machine
2. GCC version 4.6.3 and above : `gcc --version`
a. On Ubuntu : `sudo apt-get install -y build-essential`
b. On CentOS : `sudo yum groups mark install -y “Development Tools”`
3. Install LKSCTP
a. On Ubuntu : `sudo apt-get install -y libsctp-dev`
b. On CentOS : `sudo yum install -y lksctp-tools-devel`
4. Install PCAP:
a. On ubuntu : `sudo apt-get install -y libpcap-dev`
b. On CentOS : `sudo yum install -y libpcap-devel`
### A. Execution:
#### **I. Execution - On locally compiling O-DU High Source Code**
1. Assign virtual IP addresses as follows:
ifconfig <interface name>:ODU “192.168.130.81”
ifconfig <interface name>:CU_STUB “192.168.130.82”
ifconfig <interface name>:RIC_STUB “192.168.130.80”
```
[root@www ~]# ifconfig eth0:ODU 192.168.130.81
[root@www ~]# ifconfig eth0:CU_STUB 192.168.130.82
[root@www ~]# ifconfig eth0:RIC_STUB 192.168.130.80
```
如果要更改:
`[root@www ~]# ifconfig eth0:ODU down`
2. Execute CU Stub:
a. CU execution folder:
`cd l2/bin/cu_stub`
b. Run CU Stub binary:
`./cu_stub`
3. Execute RIC Stub:
再開一個terminal
a. RIC execution folder:
`cd l2/bin/ric_stub`
b. Run RIC Stub binary:
`./ric_stub`
4. Execute O-DU High:
再開一個terminal
a. DU execution folder:
`cd l2/bin/odu`
b. Run ODU binary:
`./odu`
PS: CU stub and RIC stub must be run (in no particular sequence) before ODU.

# Compile & Run (odu_at_oai)
```shell
$ cd /odu_at_oai/l2/build/odu
```
1. Build
```sh
# O-DU High
make clean_odu MACHINE=BIT64 MODE=FDD VNF_ENABLE=YES
make odu MACHINE=BIT64 MODE=FDD VNF_ENABLE=YES
make odu MACHINE=BIT64 MODE=FDD VNF_ENABLE=YES O1_ENABLE=YES
# CU Stub
make clean_cu NODE=TEST_STUB MACHINE=BIT64 MODE=FDD
make cu_stub NODE=TEST_STUB MACHINE=BIT64 MODE=FDD
make cu_stub NODE=TEST_STUB MACHINE=BIT64 MODE=FDD O1_ENABLE=YES
# RIC Stub
make clean_ric NODE=TEST_STUB MACHINE=BIT64 MODE=FDD
make ric_stub NODE=TEST_STUB MACHINE=BIT64 MODE=FDD
make ric_stub NODE=TEST_STUB MACHINE=BIT64 MODE=FDD O1_ENABLE=YES
```
2. Run
* Execute them as following order, at least the ODU must start at the last.
```sh
# Execute CU Stub
cd <O-DU High Directory>/odu_at_oai/l2/bin/cu_stub
sudo ./cu_stub
# Execute RIC Stub
cd <O-DU High Directory>/odu_at_oai/l2/bin/ric_stub
sudo ./ric_stub
# Execute O-DU High
cd <O-DU High Directory>/odu_at_oai/l2/bin/odu
sudo ./odu
```
# Build OAI gNB
#### Clone and build the dependency for the first time
```sh
$ cd openairinterface5g/
# Build ONLY FOR the FIRST time
$ source oaienv
$ cd cmake_targets
$ export BUILD_UHD_FROM_SOURCE=Ture
$ export UHD_VERSION=4.3.0.0-rc1 #(optional UHD_VERSION=4.4.0.0)
$ ./build_oai -I -c -C
$ ./build_oai -w USRP --gNB
$ cd ran_build/build
$ sudo ./nr-softmodem -O [where the config file is] --sa -E --gNBs.[0].min_rxtxtime 6 --nfapi 1 # 1 : PNF, 2 : VNF
# e.q. sudo ./nr-softmodem -O ../../../../../odu_at_oai/l2/mwnl/oai_pnf_conf/oaiL1.nfapi.usrpb210.conf --sa -E --gNBs.[0].min_rxtxtime 6 --continuous-tx --nfapi 1
# --gNBs.[0].min_rxtxtime 6 --> To ensure that the rx tx time advance is 6 slots
```