.. http://creativecommons.org/licenses/by/4.0
User Guide
-==========
+***********
This is the user guide for Cherry release of O-DU/l2.
+Follow installation-guide to get all the dependencies ready.
.. contents::
:depth: 3
:local:
-A. Compilation:
----------------
-1. Build O-DU High:
+A. Execution:
+-------------
- a. Build folder
+I. Execution - On locally compiling O-DU High Source Code
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- - cd <rsys_directory>/l2/build/odu
+1. Assign virtual IP addresses as follows:
- b. Build O-DU High binary
-
- - make odu MACHINE=BIT64 MODE=FDD
+ a. ifconfig <interface name>:ODU "192.168.130.81"
+ b. ifconfig <interface name>:CU_STUB "192.168.130.82"
+ c. ifconfig <interface name>:RIC_STUB "192.168.130.80"
- c. Clean O-DU High binary
+2. Execute O1 (only if O-DU is built with O1 interface enabled):
- - make clean_odu MACHINE=BIT64 MODE=FDD
+ a. Navigate to O1 build folder
-2. Build CU Stub :
+ - cd <O-DU High Directory>/l2/build/o1
+
+ b. Create a new netconf user and install the YANG module
+
+ Switch to root user and run following commands
+
+ | adduser --system netconf && \\
+ | echo "netconf:netconf" | chpasswd
- a. Build folder
-
- - cd <rsys_directory>/l2/build/odu
+ | mkdir -p /home/netconf/.ssh && \\
+ | ssh-keygen -A && \\
+ | ssh-keygen -t dsa -P '' -f /home/netconf/.ssh/id_dsa && \\
+ | cat /home/netconf/.ssh/id_dsa.pub > /home/netconf/.ssh/authorized_keys
- b. Build CU Stub binary
-
- - make cu_stub NODE=TEST_STUB MACHINE=BIT64 MODE=FDD
+ sysrepoctl -i ./yang/o-ran-sc-odu-alarm-v1.yang
- c. Clean CU Stub binary
-
- - make clean_cu NODE=TEST_STUB MACHINE=BIT64 MODE=FDD
+ c. Navigate to O1 execution folder
-3. Build RIC Stub :
+ - cd <O-DU High Directory>/l2/build/o1/bin/o1
- a. Build folder
-
- - cd <rsys_directory>/l2/build/odu
+ d. Run O1 binary
+
+ - ./o1
- b. Build RIC Stub binary
-
- - make ric_stub NODE=TEST_STUB MACHINE=BIT64 MODE=FDD
+3. Execute CU Stub:
- c. Clean RIC Stub binary
-
- - make clean_ric NODE=TEST_STUB MACHINE=BIT64 MODE=FDD
+ a. Navigate to CU execution folder
-4. Clean ODU, CU Stub and RIC Stub together
+ - cd <O-DU High Directory>/l2/bin/cu_stub
- a. make clean_all
+ b. Run CU Stub binary
+ - ./cu_stub
-B. Execution:
--------------
+4. Execute RIC Stub:
-1. Assign virtual IP addresses as follows:
+ a. Navigate to RIC execution folder
- a. ifconfig <interface name>:ODU "192.168.130.81"
- b. ifconfig <interface name>:CU_STUB "192.168.130.82"
- c. ifconfig <interface name>:RIC_STUB "192.168.130.80"
+ - cd <O-DU High Directory>/l2/bin/ric_stub
-2. Execute CU Stub:
+ b. Run RIC Stub binary
- a. CU execution folder
+ - ./ric_stub
- - cd <rsys_directory>/l2/bin/cu_stub
+5. Execute O-DU High:
- b. Run CU Stub binary
+ a. Navigate to ODU execution folder
- - ./cu_stub
+ - cd <O-DU High Directory>/l2/bin/odu
-3. Execute RIC Stub:
+ b. Run ODU binary
- a. RIC execution folder
+ - ./odu
- - cd <rsys_directory>/l2/bin/ric_stub
+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.
- b. Run RIC Stub binary
+II. Execution - Using Docker Images
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- - ./ric_stub
+The call flow between O-DU High and CU Stub can be achieved by executing docker containers.
-4. Execute DU:
+- Pull the last built docker images:
+ - docker pull nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2:3.0.1
+ - docker pull nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2-cu-stub:3.0.1
- a. DU execution folder
+- Run CU Stub docker:
+ - docker run -it --privileged --net=host --entrypoint bash
+ nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2-cu-stub:3.0.1
+ - ./cu_stub
- - cd <rsys_directory>/l2/bin/odu
+- Run ODU docker:
+ - docker run -it --privileged --net=host --entrypoint bash
+ nexus3.o-ran-sc.org:10004/o-ran-sc/o-du-l2:3.0.1
+ - ./odu
- b. Run ODU binary
- - ./odu
+B. Pairwise testing with Intel O-DU Low:
+-----------------------------------------
+
+This section describes the changes required in compilation and execution of O-DU High binaries to successfully integrate
+with Intel O-DU Low in timer mode.
-PS: CU stub and RIC stub must be run (in no particular sequence) before ODU
+I. Pre-requisites
+^^^^^^^^^^^^^^^^^^
-C. Testing with Intel O-DU Low:
--------------------------------
+ 1. Install O-DU High as per installation-guide .
-I. Compilation
-^^^^^^^^^^^^^^
+ 2. Clone O-DU Low code in <O-DU Low Directory> from
+
+ a. https://gerrit.o-ran-sc.org/r/admin/repos/o-du/phy and,
+
+ b. https://github.com/intel/FlexRAN
+
+ 3. Install O-DU Low as per https://docs.o-ran-sc.org/projects/o-ran-sc-o-du-phy/en/latest/index.html .
+
+
+II. Compilation
+^^^^^^^^^^^^^^^^
1. Build ODU :
- a. Create folder <rsys_directory>/l2/src/wls_lib. Copy wls_lib.h from <intel_directory>/phy/wls_lib/ to
- <rsys_directory>/l2/src/wls_lib.
+ a. Create folder <O-DU High Directory>/l2/src/wls_lib. Copy wls_lib.h from <O-DU Low Directory>/phy/wls_lib/ to
+ <O-DU High Directory>/l2/src/wls_lib.
- b. Create folder <rsys_directory>/l2/src/dpdk_lib. Copy following files from
- <intel_directory>/dpdk-19.11/x86_64-native-linuxapp-gcc/include/ to <rsys_directory>/l2/src/dpdk_lib.
+ b. Create folder <O-DU High Directory>/l2/src/dpdk_lib. Copy following files from
+ <O-DU Low Directory>/dpdk-19.11/x86_64-native-linuxapp-gcc/include/ to <O-DU High Directory>/l2/src/dpdk_lib.
- rte_branch_prediction.h
- rte_common.h
- rte_os.h
- rte_per_lcore.h
- c. Build folder
+ c. Navigate to build folder
- - cd <rsys_directory>/l2/build/odu
+ - cd <O-DU High Directory>/l2/build/odu
d. Build ODU Binary:
- make odu PHY=INTEL_L1 PHY_MODE=TIMER MACHINE=BIT64 MODE=FDD
- 2. Build CU Stub and RIC Stub:
-
- a. Execute steps in sections A.2 and A.3.
-II. Execution
-^^^^^^^^^^^^^
+III. Execution
+^^^^^^^^^^^^^^^
1. Execute O-DU Low:
a. Setup environment:
- - cd <intel_directory>/phy/
+ - cd <O-DU Low Directory>/phy/
- source ./setupenv.sh
b. Run O-DU Low binary :
- - cd <intel_directory>/FlexRAN/l1/bin/nr5g/gnb/l1
+ - cd <O-DU Low Directory>/FlexRAN/l1/bin/nr5g/gnb/l1
- To run in timer mode : ./l1.sh -e
- L1 is up when following prints are seen on console:
a. Setup environment:
- - cd <intel_directory>/phy/
+ - cd <O-DU Low Directory>/phy/
- source ./setupenv.sh
b. Run FAPI translator binary:
- - cd <intel_directory>/phy/fapi_5g/bin/
+ - cd <O-DU Low Directory>/phy/fapi_5g/bin/
- ./oran_5g_fapi --cfg=oran_5g_fapi.cfg
3. Execute CU Stub and RIC Stub:
- a. Run steps in sections B.1-B.3.
+ a. Run steps in sections A.I.1 through A.I.3 .
4. Execute DU:
a. DU execution folder
- - cd <rsys_directory>/l2/bin/odu
+ - cd <O-DU High Directory>/l2/bin/odu
b. Export WLS library path
- - export LD_LIBRARY_PATH=<intel_directory>/phy/wls_lib/lib:$LD_LIBRARY_PATH
+ - export LD_LIBRARY_PATH=<O-DU Low Directory>/phy/wls_lib/lib:$LD_LIBRARY_PATH
c. Run ODU binary
- ./odu
-D. Message Flow:
+C. Message Flow:
----------------
O-DU High opens WLS interface during bring up. Message exchanges can begin once the interface is ready.
-Following diagram shows P5 messages exchange with O-DU Low in timer mode.
+Following diagram shows P5 messages exchanged with O-DU Low in timer mode.
-.. figure:: L1-L2_Message_Flow.jpg
+.. figure:: O-DU_High_Low_Flow.jpg
:width: 600
- :alt: Figure 1 O-DU High - O-DU Low Message Flow Diagram
+ :alt: Figure 7 O-DU High - O-DU Low Message Flow Diagram
- Figure 1 - O-DU High - O-DU Low Message Flow Diagram
+ Figure 7 - O-DU High - O-DU Low Message Flow Diagram
Note: UL IQ-Sample request and response are needed by Intel O-DU Low in timer mode(testing mode) only. Code changes for
-these are guarded under INTEL_TIMER_MODE flag which can be enabled using compilation option "PHY_MODE=TIMER", as mention
-in section C.I.1.d .
+these are guarded under INTEL_TIMER_MODE flag which can be enabled using compilation option "PHY_MODE=TIMER", as
+mentioned in section B.I.1.d .
+
+
+D. Health Check execution: get alarm-list
+-------------------------------------------
+
+To execute the get alarm-list flow, following steps are required to be executed:
+
+ 1. Start Netconf netopeer client
+
+ 2. Connect to the server with
+
+ | user: netconf
+ | pwd: netconf
+
+ 3. Send a Netconf get request for alarms xpath
+
+Here are the steps as executed in the terminal
+
+ | netopeer2-cli
+ | > connect --login netconf
+ | Interactive SSH Authentication
+ | Type your password:
+ | Password:
+ | > get --filter-xpath /o-ran-sc-odu-alarm-v1\:odu/alarms
+ | DATA
+ | <odu xmlns=\"urn\:o-ran\:odu\:alarm\:1.0\">
+ | <alarms>
+ | <alarm>
+ | <alarm-id>1009</alarm-id>
+ | <alarm-text>cell id [1] is up</alarm-text>
+ | <severity>2</severity>
+ | <status>Active</status>
+ | <additional-info>cell UP</additional-info>
+ | </alarm>
+ | </alarms>
+ | </odu>
+
+The XML output is a list of active alarms in the O-DU High system.
+
+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.