A. Directory Structure : ------------------------ 1. l2/build/ : contains files required to compile the code a. common : contains individual module's makefile b. odu : contains main makefile to generate an executable binary c. scripts: contains scripts for logging d. o1 : contains main makefile to generate an executable binary 2. l2/docs/ : contains README and other configuration files for building docs 3. l2/src/ : contains layer specific source code a. 5gnrmac : MAC source code b. 5gnrrlc : RLC source code c. cm : common, environment and interface files d. cu_stub : Stub code for CU e. du_app : DU application and F1 code f. mt : wrapper functions over OS g. phy_stub : Stub code for Physical layer h. rlog : logging module i. o1 : o1 module B. Pre-requisite for Compilation : ---------------------------------- 1. Linux 32-bit/64-bit machine 2. GCC version 4.6.3 and above 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 C. Pre-requisite for running O1 module: --------------------------------------- Install netconf server ---------------------- 1. Create new netconf user (login with root user and run following command) $adduser --system netconf && \ echo "netconf:netconf" | chpasswd $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 2. Install netconf packages. $cd l2/build/o1/ $chmod +x install_lib.sh $ ./install_lib.sh Install the yang module ----------------------- 1. cd l2/build/o1/yang sysrepoctl -i o-ran-sc-odu-alarm-v1.yang D. How to Clean and Build: -------------------------- 1. Building ODU binary: a. Build folder cd l2/build/odu b. Building ODU binary make odu MACHINE=BIT64 MODE=FDD c. Cleaning ODU binary make clean_odu MACHINE=BIT64 MODE=FDD 2. Building CU Stub binary: a. Build folder cd l2/build/odu b. Building CU Stub binary make cu_stub NODE=TEST_STUB MACHINE=BIT64 MODE=FDD c. Cleaning CU Stub binary make clean_cu NODE=TEST_STUB MACHINE=BIT64 MODE=FDD 3. Building RIC Stub binary: a. Build folder cd l2/build/odu b. Building RIC Stub binary make ric_stub NODE=TEST_STUB MACHINE=BIT64 MODE=FDD c. Cleaning RIC Stub binary make clean_ric NODE=TEST_STUB MACHINE=BIT64 MODE=FDD 4. Cleaning ODU, CU Stub and RIC Stub: make clean_all 5. Building ODU binary with O1 interface enabled: a. Build folder cd l2/build/odu b. Building ODU with O1 module enabled: make odu MACHINE=BIT64 MODE=FDD O1_ENABLE=YES c. Cleaning ODU binary make clean_odu MACHINE=BIT64 MODE=FDD d. Build folder cd l2/build/o1 e. Building O1 binary make o1 MACHINE=BIT64 f. Cleaning O1 binary make clean_o1 E. How to execute: ------------------ 1. Assign virtual IP addresses as follows: a. ifconfig :ODU "192.168.130.81" b. ifconfig :CU_STUB "192.168.130.82" c. ifconfig :RIC_STUB "192.168.130.80" 2. Execute O1 (only if O-DU is built with O1 interface enabled): a. O1 execution folder: cd l2/build/o1/bin/o1 b. Run O1 binary: ./o1 3. Execute CU Stub: a. CU execution folder: cd l2/bin/cu_stub b. Run CU Stub binary: ./cu_stub 4. Execute RIC Stub: a. RIC execution folder: cd l2/bin/ric_stub b. Run RIC Stub binary: ./ric_stub 5. Execute DU: 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 If O1 module is enabled it must be run before ODU F. How to test with Intel L1: ----------------------------- I. Compilation 1. Build ODU : a. Create folder l2/src/wls_lib. Copy wls_lib.h from /phy/wls_lib/ to l2/src/wls_lib. b. Create folder l2/src/dpdk_lib. Copy following files from /dpdk-19.11/x86_64-native-linuxapp-gcc/include/ to l2/sr c/dpdk_lib. rte_branch_prediction.h rte_common.h rte_config.h rte_dev.h rte_log.h rte_pci_dev_feature_defs.h rte_bus.h rte_compat.h rte_debug.h rte_eal.h rte_os.h rte_per_lcore.h c. Build folder cd 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 D.2 and D.3. II. Execution 1. Execute L1: a. Setup environment: cd /phy/ source ./setupenv.sh b. Run L1 binary : cd /FlexRAN/l1/bin/nr5g/gnb/l1 To run in timer mode : ./l1.sh -e L1 is up when console prints follow: Non BBU threads in application =========================================================================================================== nr5g_gnb_phy2mac_api_proc_stats_thread: [PID:   8659] binding on [CPU  0] [PRIO:  0] [POLICY:  1] wls_rx_handler (non-rt):                [PID:   8663] binding on [CPU  0] ===========================================================================================================   PHY>welcome to application console 2. Execute FAPI Translator: a. Setup environment: cd /phy/ source ./setupenv.sh b. Run FAPI translator binary: cd /phy/fapi_5g/bin/ ./oran_5g_fapi --cfg=oran_5g_fapi.cfg 3. Execute CU Stub and RIC Stub: a. Run steps in sections E.1-E.3 4. Execute DU: a. DU execution folder cd l2/bin/odu b. Export WLS library path export LD_LIBRARY_PATH=/phy/wls_lib/lib:$LD_LIBRARY_PATH c. Run ODU binary ./odu G. How to execute the Health Check : get alarm-list ---------------------------------------------------- Steps: 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 1009 cell id [1] is up 2 Active cell UP The XML output is a list of active alarms in the O-DU High system.