1 A. Directory Structure :
2 ------------------------
3 1. l2/build/ : contains files required to compile the code
4 a. common : contains individual module's makefile
5 b. odu : contains main makefile to generate an executable binary
6 c. scripts: contains scripts for logging, installing netconf libraries and starting netopeer server
7 d. config : contains the configuration files
8 e. yang : contains the YANG modules
10 2. l2/docs/ : contains README and other configuration files for building docs
12 3. l2/src/ : contains layer specific source code
13 a. 5gnrmac : MAC source code
14 b. 5gnrrlc : RLC source code
15 c. cm : common, environment and interface files
16 d. cu_stub : Stub code for CU
17 e. du_app : DU application and F1 code
18 f. mt : wrapper functions over OS
19 g. phy_stub : Stub code for Physical layer
20 h. rlog : logging module
24 B. Pre-requisite for Compilation :
25 ----------------------------------
26 1. Linux 32-bit/64-bit machine
27 2. GCC version 4.6.3 and above
29 a. On Ubuntu : sudo apt-get install -y libsctp-dev
30 b. On CentOS : sudo yum install -y lksctp-tools-devel
32 a. On ubuntu : sudo apt-get install -y libpcap-dev
33 b. On CentOS : sudo yum install -y libpcap-devel
36 C. Pre-requisite for O1 Interface (Required only if run with O1 interface enabled)
37 -----------------------------------------------------------------------------------
38 1. Setup netconf server
40 Create new netconf user (login with root user and run following commands)
41 $adduser --system netconf && \
42 echo "netconf:netconf" | chpasswd
44 $mkdir -p /home/netconf/.ssh && \
46 ssh-keygen -t dsa -P '' -f /home/netconf/.ssh/id_dsa && \
47 cat /home/netconf/.ssh/id_dsa.pub > /home/netconf/.ssh/authorized_keys
48 Install netconf packages.
50 $chmod +x install_lib.sh
53 2. Start Netopeer2-server:
55 $./netopeer-server.sh start
57 3. Install the yang modules
59 $sysrepoctl -i o-ran-sc-odu-alarm-v1.yang
60 $sysrepoctl -i o-ran-sc-odu-interface-v1.yang
62 4. Configure the startup IP and Port configurations for DU, CU and RIC
66 Open the startup_config.xml and edit the desired IP and Port for CU, DU and RIC.
67 Then load the configuration in the sysrepo running datastore using the command below
69 $sysrepocfg --import=startup_config.xml --datastore running --module o-ran-sc-odu-interface-v1
72 D. How to Clean and Build:
73 --------------------------
75 a. odu - Builds all components of ODU
76 b. cu_stub - Builds all CU Stub
77 c. ric_stub - Builds all RIC_Stub
78 d. clean_odu - clean up ODU
79 e. clean_cu - clean up CU Stub
80 f. clean_ric - clean up RIC Stub
81 g. clean_all - cleanup everything
83 i. MACHINE=BIT64/BIT32 - Specify underlying machine type. Default is BIT32
84 ii. NODE=TEST_STUB - Specify if it is a test node. Mandatory for cu_stub/ric_stub. Must not be used for odu
85 iii. MODE=FDD/TDD - Specify duplex mode. Default is FDD
86 iv. PHY=INTEL_L1 - Specify type of phy. If not specified, PHY stub is used
87 v. PHY_MODE=TIMER - Specify mode of phy. Used only if PHY=INTEL_L1. Default is radio mode
88 vi. O1_ENABLE=YES - Specify if O1 interface is enabled. If not specified, it is disabled
90 2. Building ODU binary:
93 b. Building ODU binary
94 make odu MACHINE=<refer section D.1.h> MODE=<refer section D.1.h>
95 c. Cleaning ODU binary
96 make clean_odu MACHINE=<refer section D.1.h> MODE=<refer section D.1.h>
98 3. Building CU Stub binary:
101 b. Building CU Stub binary
102 make cu_stub NODE=<refer section D.1.h> MACHINE=<refer section D.1.h> MODE=<refer section D.1.h>
103 c. Cleaning CU Stub binary
104 make clean_cu NODE=<refer section D.1.h> MACHINE=<refer section D.1.h> MODE=<refer section D.1.h>
106 4. Building RIC Stub binary:
109 b. Building RIC Stub binary
110 make ric_stub NODE=<refer section D.1.h> MACHINE=<refer section D.1.h> MODE=<refer section D.1.h>
111 c. Cleaning RIC Stub binary
112 make clean_ric NODE=<refer section D.1.h> MACHINE=<refer section D.1.h> MODE=<refer section D.1.h>
114 5. Cleaning ODU, CU Stub and RIC Stub:
118 E. How to Clean and Build with O1 interface enabled (Requires pre-requisite steps in section C)
119 ------------------------------------------------------------------------------------------------
121 1. Building ODU binary:
124 b. Building ODU binary
125 make odu MACHINE=<refer section D.1.h> MODE=<refer section D.1.h> O1_ENABLE=<refer section D.1.h>
126 c. Cleaning ODU binary
127 make clean_odu MACHINE=<refer section D.1.h> MODE=<refer section D.1.h> O1_ENABLE=<refer section D.1.h>
129 2. Building CU Stub binary:
132 b. Building CU Stub binary
133 make cu_stub NODE=<refer section D.1.h> MACHINE=<refer section D.1.h> MODE=<refer section D.1.h> O1_ENABLE=<refer section D.1.h>
134 c. Cleaning CU Stub binary
135 make clean_cu NODE=<refer section D.1.h> MACHINE=<refer section D.1.h> MODE=<refer section D.1.h> O1_ENABLE=<refer section D.1.h>
137 3. Building RIC Stub binary:
140 b. Building RIC Stub binary
141 make ric_stub NODE=<refer section D.1.h> MACHINE=<refer section D.1.h> MODE=<refer section D.1.h> O1_ENABLE=<refer section D.1.h>
142 c. Cleaning RIC Stub binary
143 make clean_ric NODE=<refer section D.1.h> MACHINE=<refer section D.1.h> MODE=<refer section D.1.h> O1_ENABLE=<refer section D.1.h>
145 4. Cleaning ODU, CU Stub and RIC Stub:
151 1. Assign virtual IP addresses as follows:
152 a. ifconfig <interface name>:ODU "192.168.130.81"
153 b. ifconfig <interface name>:CU_STUB "192.168.130.82"
154 c. ifconfig <interface name>:RIC_STUB "192.168.130.80"
156 PS: If O1 interface is enabled, IP should match those configured in step C.4.
159 a. CU execution folder:
161 b. Run CU Stub binary:
165 a. RIC execution folder:
167 b. Run RIC Stub binary:
171 a. DU execution folder:
176 PS: CU stub and RIC stub must be run (in no particular sequence) before ODU
179 G. How to test with Intel L1:
180 -----------------------------
184 a. Create folder l2/src/wls_lib. Copy wls_lib.h from <intel_directory>/phy/wls_lib/ to l2/src/wls_lib.
185 b. Create folder l2/src/dpdk_lib. Copy following files from <intel_directory>/dpdk-19.11/x86_64-native-linuxapp-gcc/include/ to l2/sr c/dpdk_lib.
186 rte_branch_prediction.h
191 rte_pci_dev_feature_defs.h
201 make odu PHY=<refer section D.1.h> PHY_MODE=<refer section D.1.h> MACHINE=<refer section D.1.h> MODE=<refer section D.1.h>
203 2. Build CU Stub and RIC Stub:
204 a. Execute steps in sections D.3 and D.4
207 1. Refer to below link for assumptions, dependencies, pre-requisites etc for ODU-Low execution
208 https://docs.o-ran-sc.org/projects/o-ran-sc-o-du-phy/en/latest/
211 a. Setup environment:
212 cd <intel_directory>/phy/
215 cd <intel_directory>/FlexRAN/l1/bin/nr5g/gnb/l1
217 i. In timer mode : ./l1.sh -e
218 ii. In radio mode : ./l1.sh -xran
219 L1 is up when console prints follow:
221 Non BBU threads in application
222 ===========================================================================================================
223 nr5g_gnb_phy2mac_api_proc_stats_thread: [PID: 8659] binding on [CPU 0] [PRIO: 0] [POLICY: 1]
224 wls_rx_handler (non-rt): [PID: 8663] binding on [CPU 0]
225 ===========================================================================================================
227 PHY>welcome to application console
229 3. Execute FAPI Translator:
230 a. Setup environment:
231 cd <intel_directory>/phy/
233 b. Run FAPI translator binary:
234 cd <intel_directory>/phy/fapi_5g/bin/
235 ./oran_5g_fapi --cfg=oran_5g_fapi.cfg
237 4. Execute CU Stub and RIC Stub:
238 a. Run steps in sections E.1-E.3
241 a. DU execution folder
243 b. Export WLS library path
244 export LD_LIBRARY_PATH=<intel_directory>/phy/wls_lib/lib:$LD_LIBRARY_PATH
249 H. How to execute the Health Check : get alarm-list
250 ----------------------------------------------------
254 1. Start Netconf netopeer client
256 2. Connect to the server with
261 3. Send a Netconf get request for alarms xpath
263 Here are the steps as executed in the terminal
266 > connect --login netconf
267 Interactive SSH Authentication
270 > get --filter-xpath /o-ran-sc-odu-alarm-v1:odu/alarms
272 <odu xmlns="urn:o-ran:odu:alarm:1.0">
275 <alarm-id>1009</alarm-id>
276 <alarm-text>cell id [1] is up</alarm-text>
277 <severity>2</severity>
278 <status>Active</status>
279 <additional-info>cell UP</additional-info>
284 The XML output is a list of active alarms in the O-DU High system.