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_O1.sh
51 $ ./install_lib_O1.sh -c
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
71 5. Configure the netconf server details for VES PNF Event
75 Open the netconfConfig.xml and edit the desired MAC address, IP, Port, Username and Password for VES PNF Registration.
77 6. Configure the VES server details to send VES Events
81 Open the vesConfig.xml and edit the desired IP, Port, Username and Password to send VES Event.
84 D. How to Clean and Build:
85 --------------------------
87 a. odu - Builds all components of ODU
88 b. cu_stub - Builds all CU Stub
89 c. ric_stub - Builds all RIC_Stub
90 d. clean_odu - clean up ODU
91 e. clean_cu - clean up CU Stub
92 f. clean_ric - clean up RIC Stub
93 g. clean_all - cleanup everything
95 i. MACHINE=BIT64/BIT32 - Specify underlying machine type. Default is BIT32
96 ii. NODE=TEST_STUB - Specify if it is a test node. Mandatory for cu_stub/ric_stub. Must not be used for odu
97 iii. MODE=FDD/TDD - Specify duplex mode. Default is FDD
98 iv. PHY=INTEL_L1 - Specify type of phy. If not specified, PHY stub is used
99 v. PHY_MODE=TIMER - Specify mode of phy. Used only if PHY=INTEL_L1. Default is radio mode
100 vi. O1_ENABLE=YES - Specify if O1 interface is enabled. If not specified, it is disabled
102 2. Building ODU binary:
105 b. Building ODU binary
106 make odu MACHINE=<refer section D.1.h> MODE=<refer section D.1.h>
107 c. Cleaning ODU binary
108 make clean_odu MACHINE=<refer section D.1.h> MODE=<refer section D.1.h>
110 3. Building CU Stub binary:
113 b. Building CU Stub binary
114 make cu_stub NODE=<refer section D.1.h> MACHINE=<refer section D.1.h> MODE=<refer section D.1.h>
115 c. Cleaning CU Stub binary
116 make clean_cu NODE=<refer section D.1.h> MACHINE=<refer section D.1.h> MODE=<refer section D.1.h>
118 4. Building RIC Stub binary:
121 b. Building RIC Stub binary
122 make ric_stub NODE=<refer section D.1.h> MACHINE=<refer section D.1.h> MODE=<refer section D.1.h>
123 c. Cleaning RIC Stub binary
124 make clean_ric NODE=<refer section D.1.h> MACHINE=<refer section D.1.h> MODE=<refer section D.1.h>
126 5. Cleaning ODU, CU Stub and RIC Stub:
130 E. How to Clean and Build with O1 interface enabled (Requires pre-requisite steps in section C)
131 ------------------------------------------------------------------------------------------------
133 1. Building ODU binary:
136 b. Building ODU binary
137 make odu MACHINE=<refer section D.1.h> MODE=<refer section D.1.h> O1_ENABLE=<refer section D.1.h>
138 c. Cleaning ODU binary
139 make clean_odu MACHINE=<refer section D.1.h> MODE=<refer section D.1.h> O1_ENABLE=<refer section D.1.h>
141 2. Building CU Stub binary:
144 b. Building CU Stub binary
145 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>
146 c. Cleaning CU Stub binary
147 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>
149 3. Building RIC Stub binary:
152 b. Building RIC Stub binary
153 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>
154 c. Cleaning RIC Stub binary
155 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>
157 4. Cleaning ODU, CU Stub and RIC Stub:
163 1. Assign virtual IP addresses as follows:
164 a. ifconfig <interface name>:ODU "192.168.130.81"
165 b. ifconfig <interface name>:CU_STUB "192.168.130.82"
166 c. ifconfig <interface name>:RIC_STUB "192.168.130.80"
168 PS: If O1 interface is enabled, IP should match those configured in step C.4.
171 a. CU execution folder:
173 b. Run CU Stub binary:
177 a. RIC execution folder:
179 b. Run RIC Stub binary:
183 a. DU execution folder:
188 PS: CU stub and RIC stub must be run (in no particular sequence) before ODU
191 G. How to test with Intel L1:
192 -----------------------------
196 a. Create folder l2/src/wls_lib. Copy wls_lib.h from <intel_directory>/phy/wls_lib/ to l2/src/wls_lib.
197 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.
198 rte_branch_prediction.h
203 rte_pci_dev_feature_defs.h
213 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>
215 2. Build CU Stub and RIC Stub:
216 a. Execute steps in sections D.3 and D.4
219 1. Refer to below link for assumptions, dependencies, pre-requisites etc for ODU-Low execution
220 https://docs.o-ran-sc.org/projects/o-ran-sc-o-du-phy/en/latest/
223 a. Setup environment:
224 cd <intel_directory>/phy/
227 cd <intel_directory>/FlexRAN/l1/bin/nr5g/gnb/l1
229 i. In timer mode : ./l1.sh -e
230 ii. In radio mode : ./l1.sh -xran
231 L1 is up when console prints follow:
233 Non BBU threads in application
234 ===========================================================================================================
235 nr5g_gnb_phy2mac_api_proc_stats_thread: [PID: 8659] binding on [CPU 0] [PRIO: 0] [POLICY: 1]
236 wls_rx_handler (non-rt): [PID: 8663] binding on [CPU 0]
237 ===========================================================================================================
239 PHY>welcome to application console
241 3. Execute FAPI Translator:
242 a. Setup environment:
243 cd <intel_directory>/phy/
245 b. Run FAPI translator binary:
246 cd <intel_directory>/phy/fapi_5g/bin/
247 ./oran_5g_fapi --cfg=oran_5g_fapi.cfg
249 4. Execute CU Stub and RIC Stub:
250 a. Run steps in sections E.1-E.3
253 a. DU execution folder
255 b. Export WLS library path
256 export LD_LIBRARY_PATH=<intel_directory>/phy/wls_lib/lib:$LD_LIBRARY_PATH
261 H. How to execute the Health Check : get alarm-list
262 ----------------------------------------------------
266 1. Start Netconf netopeer client
268 2. Connect to the server with
273 3. Send a Netconf get request for alarms xpath
275 Here are the steps as executed in the terminal
278 > connect --login netconf
279 Interactive SSH Authentication
282 > get --filter-xpath /o-ran-sc-odu-alarm-v1:odu/alarms
284 <odu xmlns="urn:o-ran:odu:alarm:1.0">
287 <alarm-id>1009</alarm-id>
288 <alarm-text>cell id [1] is up</alarm-text>
289 <severity>2</severity>
290 <status>Active</status>
291 <additional-info>cell UP</additional-info>
296 The XML output is a list of active alarms in the O-DU High system.