cc9d63803bf199504caaedc569fae6f9c0bd8efa
[o-du/l2.git] / docs / README
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
9
10 2. l2/docs/  : contains README and other configuration files for building docs
11         
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
21    i. o1       : o1 module
22
23
24 B. Pre-requisite for Compilation :
25 ----------------------------------
26 1. Linux 32-bit/64-bit machine
27 2. GCC version 4.6.3 and above
28 3. Install LKSCTP
29    a. On Ubuntu : sudo apt-get install -y libsctp-dev
30    b. On CentOS : sudo yum install -y lksctp-tools-devel
31 4. Install PCAP:
32    a. On ubuntu : sudo apt-get install -y libpcap-dev
33    b. On CentOS : sudo yum install -y libpcap-devel
34
35
36 C. Pre-requisite for O1 Interface (Required only if run with O1 interface enabled) 
37 -----------------------------------------------------------------------------------
38 1. Setup netconf server
39
40         Create new netconf user (login with root user and run following commands)
41         $adduser --system netconf && \
42         echo "netconf:netconf" | chpasswd
43
44         $mkdir -p /home/netconf/.ssh && \
45         ssh-keygen -A && \
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. 
49         $cd l2/build/scripts
50         $chmod +x install_lib.sh
51         $ ./install_lib.sh -c
52
53 2. Start Netopeer2-server:
54    $cd l2/build/scripts
55    $./netopeer-server.sh start
56
57 3. Install the yang modules
58    $cd l2/build/yang
59    $sysrepoctl -i o-ran-sc-odu-alarm-v1.yang
60    $sysrepoctl -i o-ran-sc-odu-interface-v1.yang
61
62 4. Configure the startup IP and Port configurations for DU, CU and RIC
63
64    $cd l2/build/config
65
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
68
69    $sysrepocfg --import=startup_config.xml --datastore running --module  o-ran-sc-odu-interface-v1 
70
71
72 D. How to Clean and Build:
73 --------------------------
74 1. Building ODU binary:
75    a. Build folder
76          cd l2/build/odu
77    b. Building ODU binary
78          make odu MACHINE=BIT64 MODE=FDD
79    c. Cleaning ODU binary
80          make clean_odu MACHINE=BIT64 MODE=FDD
81
82 2. Building CU Stub binary:
83    a. Build folder
84          cd l2/build/odu
85    b. Building CU Stub binary
86          make cu_stub NODE=TEST_STUB MACHINE=BIT64 MODE=FDD
87    c. Cleaning CU Stub binary
88          make clean_cu NODE=TEST_STUB MACHINE=BIT64 MODE=FDD
89
90 3. Building RIC Stub binary:
91    a. Build folder
92          cd l2/build/odu
93    b. Building RIC Stub binary
94          make ric_stub NODE=TEST_STUB MACHINE=BIT64 MODE=FDD
95    c. Cleaning RIC Stub binary
96          make clean_ric NODE=TEST_STUB MACHINE=BIT64 MODE=FDD
97
98 4. Cleaning ODU, CU Stub and RIC Stub:
99       make clean_all
100
101
102 E. How to Clean and Build with O1 interface enabled (Requires pre-requisite steps in section C)
103 ------------------------------------------------------------------------------------------------
104
105 1. Building ODU binary:
106    a. Build folder
107          cd l2/build/odu
108    b. Building ODU binary
109          make odu MACHINE=BIT64 MODE=FDD O1_ENABLE=YES
110    c. Cleaning ODU binary
111          make clean_odu MACHINE=BIT64 MODE=FDD O1_ENABLE=YES
112
113 2. Building CU Stub binary:
114    a. Build folder
115          cd l2/build/odu
116    b. Building CU Stub binary
117          make cu_stub NODE=TEST_STUB MACHINE=BIT64 MODE=FDD O1_ENABLE=YES
118    c. Cleaning CU Stub binary
119          make clean_cu NODE=TEST_STUB MACHINE=BIT64 MODE=FDD O1_ENABLE=YES
120
121 3. Building RIC Stub binary:
122    a. Build folder
123          cd l2/build/odu
124    b. Building RIC Stub binary
125          make ric_stub NODE=TEST_STUB MACHINE=BIT64 MODE=FDD O1_ENABLE=YES
126    c. Cleaning RIC Stub binary
127          make clean_ric NODE=TEST_STUB MACHINE=BIT64 MODE=FDD O1_ENABLE=YES
128
129 4. Cleaning ODU, CU Stub and RIC Stub:
130       make clean_all
131
132
133 F. How to execute:
134 ------------------
135 1. Assign virtual IP addresses as follows:
136    a. ifconfig <interface name>:ODU "192.168.130.81"
137    b. ifconfig <interface name>:CU_STUB "192.168.130.82"
138    c. ifconfig <interface name>:RIC_STUB "192.168.130.80"
139
140 PS: If O1 interface is enabled, IP should match those configured in step C.4.
141
142 2. Execute CU Stub:
143    a. CU execution folder:
144         cd l2/bin/cu_stub
145    b. Run CU Stub binary:
146         ./cu_stub
147
148 3. Execute RIC Stub:
149    a. RIC execution folder:
150         cd l2/bin/ric_stub
151    b. Run RIC Stub binary:
152         ./ric_stub
153
154 4. Execute DU:
155    a. DU execution folder:
156         cd l2/bin/odu
157    b. Run ODU binary:
158         ./odu
159
160 PS: CU stub and RIC stub must be run (in no particular sequence) before ODU
161
162
163 G. How to test with Intel L1:
164 -----------------------------
165
166 I. Compilation
167    1. Build ODU :
168       a. Create folder l2/src/wls_lib. Copy wls_lib.h from <intel_directory>/phy/wls_lib/ to l2/src/wls_lib.
169       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.
170                 rte_branch_prediction.h
171                 rte_common.h
172                 rte_config.h
173                 rte_dev.h
174                 rte_log.h
175                 rte_pci_dev_feature_defs.h
176                 rte_bus.h
177                 rte_compat.h
178                 rte_debug.h
179                 rte_eal.h
180                 rte_os.h
181                 rte_per_lcore.h
182       c. Build folder
183                 cd l2/build/odu
184       d. Build ODU Binary:
185                 make odu PHY=INTEL_L1 PHY_MODE=TIMER MACHINE=BIT64 MODE=FDD
186
187    2. Build CU Stub and RIC Stub:
188       a. Execute steps in sections D.2 and D.3.
189
190 II. Execution
191     1. Execute L1:
192        a. Setup environment:
193                 cd <intel_directory>/phy/
194                 source ./setupenv.sh
195        b. Run L1 binary :
196                 cd <intel_directory>/FlexRAN/l1/bin/nr5g/gnb/l1
197                 To run in timer mode : ./l1.sh -e
198                 L1 is up when console prints follow:
199
200                    Non BBU threads in application
201                    ===========================================================================================================
202                    nr5g_gnb_phy2mac_api_proc_stats_thread: [PID:   8659] binding on [CPU  0] [PRIO:  0] [POLICY:  1]
203                    wls_rx_handler (non-rt):                [PID:   8663] binding on [CPU  0]
204                    ===========================================================================================================
205                  
206                    PHY>welcome to application console
207
208     2. Execute FAPI Translator:
209        a. Setup environment:
210                 cd <intel_directory>/phy/
211                 source ./setupenv.sh
212        b. Run FAPI translator binary:
213                 cd <intel_directory>/phy/fapi_5g/bin/
214                 ./oran_5g_fapi --cfg=oran_5g_fapi.cfg
215
216     3. Execute CU Stub and RIC Stub:
217        a. Run steps in sections E.1-E.3
218
219     4. Execute DU:
220        a. DU execution folder
221                 cd l2/bin/odu
222        b. Export WLS library path
223                 export LD_LIBRARY_PATH=<intel_directory>/phy/wls_lib/lib:$LD_LIBRARY_PATH
224        c. Run ODU binary
225                 ./odu
226
227
228 H. How to execute the Health Check : get alarm-list
229 ----------------------------------------------------
230    
231    Steps:
232
233    1. Start Netconf netopeer client 
234    
235    2. Connect to the server with 
236
237         user: netconf
238         pwd:  netconf
239
240    3. Send a Netconf get request for alarms xpath
241
242    Here are the steps as executed in the terminal 
243
244       $netopeer2-cli
245        > connect --login netconf
246        Interactive SSH Authentication
247        Type your password:
248        Password:
249        > get --filter-xpath /o-ran-sc-odu-alarm-v1:odu/alarms
250        DATA
251        <odu xmlns="urn:o-ran:odu:alarm:1.0">
252          <alarms>
253            <alarm>
254              <alarm-id>1009</alarm-id>
255              <alarm-text>cell id  [1] is up</alarm-text>
256              <severity>2</severity>
257              <status>Active</status>
258              <additional-info>cell UP</additional-info>
259            </alarm>
260          </alarms>
261        </odu>
262
263    The XML output is a list of active alarms in the O-DU High system.
264