1 .. This work is licensed under a Creative Commons Attribution 4.0 International License.
2 .. http://creativecommons.org/licenses/by/4.0
7 This is the user guide for Cherry release of O-DU/l2.
8 Follow installation-guide to get all the dependencies ready.
18 I. Execution - On locally compiling O-DU High Source Code
19 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
21 1. Assign virtual IP addresses as follows:
23 a. ifconfig <interface name>:ODU "192.168.130.81"
24 b. ifconfig <interface name>:CU_STUB "192.168.130.82"
25 c. ifconfig <interface name>:RIC_STUB "192.168.130.80"
27 2. Execute O1 (only if O-DU is built with O1 interface enabled):
29 a. Navigate to O1 build folder
31 - cd <O-DU High Directory>/l2/build/o1
33 b. Create a new netconf user and install the YANG module
35 Switch to root user and run following commands
37 | adduser --system netconf && \\
38 | echo "netconf:netconf" | chpasswd
40 | mkdir -p /home/netconf/.ssh && \\
42 | ssh-keygen -t dsa -P '' -f /home/netconf/.ssh/id_dsa && \\
43 | cat /home/netconf/.ssh/id_dsa.pub > /home/netconf/.ssh/authorized_keys
45 sysrepoctl -i ./yang/o-ran-sc-odu-alarm-v1.yang
46 sysrepoctl -i ./yang/o-ran-sc-odu-interface-v1.yang
48 c. Navigate to O1 execution folder
50 - cd <O-DU High Directory>/l2/build/o1/bin/o1
58 a. Navigate to CU execution folder
60 - cd <O-DU High Directory>/l2/bin/cu_stub
68 a. Navigate to RIC execution folder
70 - cd <O-DU High Directory>/l2/bin/ric_stub
72 b. Run RIC Stub binary
78 a. Navigate to ODU execution folder
80 - cd <O-DU High Directory>/l2/bin/odu
86 PS: CU stub and RIC stub must be run (in no particular sequence) before ODU. If O-DU High is built with O1 interface enabled, the O1 binary must be run before all other binaries.
88 II. Execution - Using Docker Images
89 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
91 The call flow between O-DU High and CU Stub can be achieved by executing docker containers.
93 - Pull the last built docker images:
94 - docker pull nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2:3.0.1
95 - docker pull nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2-cu-stub:3.0.1
98 - docker run -it --privileged --net=host --entrypoint bash
99 nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2-cu-stub:3.0.1
103 - docker run -it --privileged --net=host --entrypoint bash
104 nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2:3.0.1
108 B. Pairwise testing with Intel O-DU Low:
109 -----------------------------------------
111 This section describes the changes required in compilation and execution of O-DU High binaries to successfully integrate
112 with Intel O-DU Low in timer mode.
118 1. Install O-DU High as per installation-guide .
120 2. Clone O-DU Low code in <O-DU Low Directory> from
122 a. https://gerrit.o-ran-sc.org/r/admin/repos/o-du/phy and,
124 b. https://github.com/intel/FlexRAN
126 3. Install O-DU Low as per https://docs.o-ran-sc.org/projects/o-ran-sc-o-du-phy/en/latest/index.html .
134 a. Create folder <O-DU High Directory>/l2/src/wls_lib. Copy wls_lib.h from <O-DU Low Directory>/phy/wls_lib/ to
135 <O-DU High Directory>/l2/src/wls_lib.
137 b. Create folder <O-DU High Directory>/l2/src/dpdk_lib. Copy following files from
138 <O-DU Low Directory>/dpdk-19.11/x86_64-native-linuxapp-gcc/include/ to <O-DU High Directory>/l2/src/dpdk_lib.
140 - rte_branch_prediction.h
145 - rte_pci_dev_feature_defs.h
153 c. Navigate to build folder
155 - cd <O-DU High Directory>/l2/build/odu
159 - make odu PHY=INTEL_L1 PHY_MODE=TIMER MACHINE=BIT64 MODE=FDD
167 a. Setup environment:
169 - cd <O-DU Low Directory>/phy/
170 - source ./setupenv.sh
172 b. Run O-DU Low binary :
174 - cd <O-DU Low Directory>/FlexRAN/l1/bin/nr5g/gnb/l1
175 - To run in timer mode : ./l1.sh -e
176 - L1 is up when following prints are seen on console:
178 | Non BBU threads in application
179 | \==================================================================
180 | nr5g_gnb_phy2mac_api_proc_stats_thread: [PID: 8659] binding on [CPU 0] [PRIO: 0] [POLICY: 1]
181 | wls_rx_handler (non-rt): [PID: 8663] binding on [CPU 0]
182 | \==================================================================
184 PHY>welcome to application console
186 2. Execute FAPI Translator:
188 a. Setup environment:
190 - cd <O-DU Low Directory>/phy/
191 - source ./setupenv.sh
193 b. Run FAPI translator binary:
195 - cd <O-DU Low Directory>/phy/fapi_5g/bin/
196 - ./oran_5g_fapi --cfg=oran_5g_fapi.cfg
198 3. Execute CU Stub and RIC Stub:
200 a. Run steps in sections A.I.1 through A.I.3 .
204 a. DU execution folder
206 - cd <O-DU High Directory>/l2/bin/odu
208 b. Export WLS library path
210 - export LD_LIBRARY_PATH=<O-DU Low Directory>/phy/wls_lib/lib:$LD_LIBRARY_PATH
220 O-DU High opens WLS interface during bring up. Message exchanges can begin once the interface is ready.
221 Following diagram shows P5 messages exchanged with O-DU Low in timer mode.
223 .. figure:: O-DU_High_Low_Flow.jpg
225 :alt: Figure 7 O-DU High - O-DU Low Message Flow Diagram
227 Figure 7 - O-DU High - O-DU Low Message Flow Diagram
229 Note: UL IQ-Sample request and response are needed by Intel O-DU Low in timer mode(testing mode) only. Code changes for
230 these are guarded under INTEL_TIMER_MODE flag which can be enabled using compilation option "PHY_MODE=TIMER", as
231 mentioned in section B.I.1.d .
234 D. Health Check execution: get alarm-list
235 -------------------------------------------
237 To execute the get alarm-list flow, following steps are required to be executed:
239 1. Start Netconf netopeer client
241 2. Connect to the server with
246 3. Send a Netconf get request for alarms xpath
248 Here are the steps as executed in the terminal
251 | > connect --login netconf
252 | Interactive SSH Authentication
253 | Type your password:
255 | > get --filter-xpath /o-ran-sc-odu-alarm-v1\:odu/alarms
257 | <odu xmlns=\"urn\:o-ran\:odu\:alarm\:1.0\">
260 | <alarm-id>1009</alarm-id>
261 | <alarm-text>cell id [1] is up</alarm-text>
262 | <severity>2</severity>
263 | <status>Active</status>
264 | <additional-info>cell UP</additional-info>
269 The XML output is a list of active alarms in the O-DU High system.
271 Note: Integration with SMO/OAM is not yet done so a Netconf CLI client(netopeer2-cli) is used to connect to the Netconf server and send the get request.