Merge "Memory handling fixes [Issue-ID: ODUHIGH-337]"
[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 5. Configure the netconf server details for VES PNF Event
72
73    $cd l2/build/config
74
75    Open the netconfConfig.xml and edit the desired MAC address, IP, Port, Username and Password for VES PNF Registration.
76
77 6. Configure the VES server details to send VES Events
78
79    $cd l2/build/config
80
81    Open the vesConfig.xml and edit the desired IP, Port, Username and Password to send VES Event.
82
83
84 D. How to Clean and Build:
85 --------------------------
86 1. Building ODU binary:
87    a. Build folder
88          cd l2/build/odu
89    b. Building ODU binary
90          make odu MACHINE=BIT64 MODE=FDD
91    c. Cleaning ODU binary
92          make clean_odu MACHINE=BIT64 MODE=FDD
93
94 2. Building CU Stub binary:
95    a. Build folder
96          cd l2/build/odu
97    b. Building CU Stub binary
98          make cu_stub NODE=TEST_STUB MACHINE=BIT64 MODE=FDD
99    c. Cleaning CU Stub binary
100          make clean_cu NODE=TEST_STUB MACHINE=BIT64 MODE=FDD
101
102 3. Building RIC Stub binary:
103    a. Build folder
104          cd l2/build/odu
105    b. Building RIC Stub binary
106          make ric_stub NODE=TEST_STUB MACHINE=BIT64 MODE=FDD
107    c. Cleaning RIC Stub binary
108          make clean_ric NODE=TEST_STUB MACHINE=BIT64 MODE=FDD
109
110 4. Cleaning ODU, CU Stub and RIC Stub:
111       make clean_all
112
113
114 E. How to Clean and Build with O1 interface enabled (Requires pre-requisite steps in section C)
115 ------------------------------------------------------------------------------------------------
116
117 1. Building ODU binary:
118    a. Build folder
119          cd l2/build/odu
120    b. Building ODU binary
121          make odu MACHINE=BIT64 MODE=FDD O1_ENABLE=YES
122    c. Cleaning ODU binary
123          make clean_odu MACHINE=BIT64 MODE=FDD O1_ENABLE=YES
124
125 2. Building CU Stub binary:
126    a. Build folder
127          cd l2/build/odu
128    b. Building CU Stub binary
129          make cu_stub NODE=TEST_STUB MACHINE=BIT64 MODE=FDD O1_ENABLE=YES
130    c. Cleaning CU Stub binary
131          make clean_cu NODE=TEST_STUB MACHINE=BIT64 MODE=FDD O1_ENABLE=YES
132
133 3. Building RIC Stub binary:
134    a. Build folder
135          cd l2/build/odu
136    b. Building RIC Stub binary
137          make ric_stub NODE=TEST_STUB MACHINE=BIT64 MODE=FDD O1_ENABLE=YES
138    c. Cleaning RIC Stub binary
139          make clean_ric NODE=TEST_STUB MACHINE=BIT64 MODE=FDD O1_ENABLE=YES
140
141 4. Cleaning ODU, CU Stub and RIC Stub:
142       make clean_all
143
144
145 F. How to execute:
146 ------------------
147 1. Assign virtual IP addresses as follows:
148    a. ifconfig <interface name>:ODU "192.168.130.81"
149    b. ifconfig <interface name>:CU_STUB "192.168.130.82"
150    c. ifconfig <interface name>:RIC_STUB "192.168.130.80"
151
152 PS: If O1 interface is enabled, IP should match those configured in step C.4.
153
154 2. Execute CU Stub:
155    a. CU execution folder:
156         cd l2/bin/cu_stub
157    b. Run CU Stub binary:
158         ./cu_stub
159
160 3. Execute RIC Stub:
161    a. RIC execution folder:
162         cd l2/bin/ric_stub
163    b. Run RIC Stub binary:
164         ./ric_stub
165
166 4. Execute DU:
167    a. DU execution folder:
168         cd l2/bin/odu
169    b. Run ODU binary:
170         ./odu
171
172 PS: CU stub and RIC stub must be run (in no particular sequence) before ODU
173
174
175 G. How to test with Intel L1:
176 -----------------------------
177
178 I. Compilation
179    1. Build ODU :
180       a. Create folder l2/src/wls_lib. Copy wls_lib.h from <intel_directory>/phy/wls_lib/ to l2/src/wls_lib.
181       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.
182                 rte_branch_prediction.h
183                 rte_common.h
184                 rte_config.h
185                 rte_dev.h
186                 rte_log.h
187                 rte_pci_dev_feature_defs.h
188                 rte_bus.h
189                 rte_compat.h
190                 rte_debug.h
191                 rte_eal.h
192                 rte_os.h
193                 rte_per_lcore.h
194       c. Build folder
195                 cd l2/build/odu
196       d. Build ODU Binary:
197                 make odu PHY=INTEL_L1 PHY_MODE=TIMER MACHINE=BIT64 MODE=FDD
198
199    2. Build CU Stub and RIC Stub:
200       a. Execute steps in sections D.2 and D.3.
201
202 II. Execution
203     1. Execute L1:
204        a. Setup environment:
205                 cd <intel_directory>/phy/
206                 source ./setupenv.sh
207        b. Run L1 binary :
208                 cd <intel_directory>/FlexRAN/l1/bin/nr5g/gnb/l1
209                 To run in timer mode : ./l1.sh -e
210                 L1 is up when console prints follow:
211
212                    Non BBU threads in application
213                    ===========================================================================================================
214                    nr5g_gnb_phy2mac_api_proc_stats_thread: [PID:   8659] binding on [CPU  0] [PRIO:  0] [POLICY:  1]
215                    wls_rx_handler (non-rt):                [PID:   8663] binding on [CPU  0]
216                    ===========================================================================================================
217                  
218                    PHY>welcome to application console
219
220     2. Execute FAPI Translator:
221        a. Setup environment:
222                 cd <intel_directory>/phy/
223                 source ./setupenv.sh
224        b. Run FAPI translator binary:
225                 cd <intel_directory>/phy/fapi_5g/bin/
226                 ./oran_5g_fapi --cfg=oran_5g_fapi.cfg
227
228     3. Execute CU Stub and RIC Stub:
229        a. Run steps in sections E.1-E.3
230
231     4. Execute DU:
232        a. DU execution folder
233                 cd l2/bin/odu
234        b. Export WLS library path
235                 export LD_LIBRARY_PATH=<intel_directory>/phy/wls_lib/lib:$LD_LIBRARY_PATH
236        c. Run ODU binary
237                 ./odu
238
239
240 H. How to execute the Health Check : get alarm-list
241 ----------------------------------------------------
242    
243    Steps:
244
245    1. Start Netconf netopeer client 
246    
247    2. Connect to the server with 
248
249         user: netconf
250         pwd:  netconf!
251
252    3. Send a Netconf get request for alarms xpath
253
254    Here are the steps as executed in the terminal 
255
256       $netopeer2-cli
257        > connect --login netconf
258        Interactive SSH Authentication
259        Type your password:
260        Password:
261        > get --filter-xpath /o-ran-sc-odu-alarm-v1:odu/alarms
262        DATA
263        <odu xmlns="urn:o-ran:odu:alarm:1.0">
264          <alarms>
265            <alarm>
266              <alarm-id>1009</alarm-id>
267              <alarm-text>cell id  [1] is up</alarm-text>
268              <severity>2</severity>
269              <status>Active</status>
270              <additional-info>cell UP</additional-info>
271            </alarm>
272          </alarms>
273        </odu>
274
275    The XML output is a list of active alarms in the O-DU High system.
276