Merge "Classification of CM logs [JIRA ID - ODUHIGH-275]"
[o-du/l2.git] / src / cu_stub / cu_stub.c
1 /*******************************************************************************
2 ################################################################################
3 #   Copyright (c) [2017-2019] [Radisys]                                        #
4 #                                                                              #
5 #   Licensed under the Apache License, Version 2.0 (the "License");            #
6 #   you may not use this file except in compliance with the License.           #
7 #   You may obtain a copy of the License at                                    #
8 #                                                                              #
9 #       http://www.apache.org/licenses/LICENSE-2.0                             #
10 #                                                                              #
11 #   Unless required by applicable law or agreed to in writing, software        #
12 #   distributed under the License is distributed on an "AS IS" BASIS,          #
13 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
14 #   See the License for the specific language governing permissions and        #
15 #   limitations under the License.                                             #
16 ################################################################################
17 *******************************************************************************/
18
19 /* This functions contains main() for cu_app */
20 #include "common_def.h"
21 #include "cu_stub.h"
22 #include "cu_stub_sctp.h"
23 #include "cu_stub_egtp.h"
24 #include "du_log.h"
25
26 #define CU_ID 1
27 #define CU_NAME "ORAN_OAM_CU"
28 #define DU_IP_V4_ADDR "192.168.130.81"
29 #define CU_IP_V4_ADDR "192.168.130.82"
30 #define DU_IP_V6_ADDR "0000:0000:0000:0000:0000:0000:0000:0001"
31 #define CU_IP_V6_ADDR "0000:0000:0000:0000:0000:0000:0000:0011"
32 #define DU_PORT 38472
33 #define CU_PORT 38472 
34 #define DU_EGTP_PORT 39001
35 #define CU_EGTP_PORT 39002
36 #define RRC_VER 0
37 #define EXT_RRC_VER 5
38 #define PLMN_MCC0 3
39 #define PLMN_MCC1 1
40 #define PLMN_MCC2 1
41 #define PLMN_MNC0 4
42 #define PLMN_MNC1 8
43 #define PLMN_MNC2 0
44
45 /*******************************************************************
46  *
47  * @brief Handles SCTP notification 
48  *
49  * @details
50  *
51  *    Function : sctpNtfyInd
52  *
53  *    Functionality:
54  *         Handles SCTP notification
55  *
56  * @params[in] sctp notification
57  * @return void
58  *
59  ******************************************************************/
60 void sctpNtfyInd(CmInetSctpNotification *ntfy)
61 {
62 //TODO
63 }
64
65 void init_log()
66 {
67     openlog("CU_STUB",LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);
68 }
69 /*******************************************************************
70  *
71  * @brief Main function of CU APP
72  *
73  * @details
74  *
75  *    Function : main
76  *
77  *    Functionality:
78  *         - Reads CU related configurations
79  *         - Initialize SCTP Parameters
80  *         - Start SCTP receiver thread
81  *
82  * @params[in] 
83  * @return ROK     - success
84  *         RFAILED - failure
85  *
86  * ****************************************************************/
87
88 uint8_t tst()
89 {
90    int retVal=0;
91    pthread_t conThrdId;
92    pthread_attr_t attr;
93
94    init_log();   
95    DU_LOG("\nINFO   -->  CU_STUB : Starting CU_STUB\n");
96
97    /* Start thread to receive console input */
98    pthread_attr_init(&attr);
99    pthread_attr_setstacksize(&attr, (size_t)NULLD);
100    pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);
101    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
102    retVal = pthread_create(&conThrdId, &attr, cuConsoleHandler, NULLP);
103    if(retVal != 0)
104    {
105       DU_LOG("\nERROR  -->  CU_STUB :  Thread creation failed. Cause %d", retVal);
106    }
107    pthread_attr_destroy(&attr);
108
109    /* Read CU configurations */
110    readCuCfg();
111
112    /* Start CU-EGTP */
113    egtpActvInit();
114    egtpInitReq();
115
116    /* Initializing SCTP global parameters */
117    sctpActvInit();
118  
119    /* Start CU-SCTP to listen on incoming connection */
120    sctpCfgReq();
121    sctpStartReq();
122
123    return ROK;
124 }
125
126 /*******************************************************************
127  *
128  * @brief Read CU related configuration
129  *
130  * @details
131  *
132  *    Function : readCuCfg
133  *
134  *    Functionality:
135  *            - RRead CU related configuration
136  *
137  * @params[in] 
138  * @return ROK     - success
139  *         RFAILED - failure
140  *
141  * ****************************************************************/
142
143 void readCuCfg()
144 {
145    uint32_t ipv4_du, ipv4_cu;
146
147    DU_LOG("\nDEBUG  -->  CU_STUB : Reading CU configurations");
148
149    cmInetAddr((S8*)DU_IP_V4_ADDR, &ipv4_du);
150    cmInetAddr((S8*)CU_IP_V4_ADDR, &ipv4_cu);
151  
152    cuCfgParams.cuId = CU_ID;
153    strcpy(cuCfgParams.cuName, CU_NAME);
154  
155    /* DU IP Address and Port*/
156    cuCfgParams.sctpParams.duIpAddr.ipV4Addr = ipv4_du;
157    cuCfgParams.sctpParams.duIpAddr.ipV6Pres = false;
158    cuCfgParams.sctpParams.duPort = DU_PORT;
159
160    /* CU IP Address and Port*/
161    cuCfgParams.sctpParams.cuIpAddr.ipV4Addr = ipv4_cu;
162    cuCfgParams.sctpParams.cuIpAddr.ipV6Pres = false;
163    cuCfgParams.sctpParams.cuPort = CU_PORT;
164
165    /*PLMN*/
166    cuCfgParams.plmn.mcc[0] = PLMN_MCC0;
167    cuCfgParams.plmn.mcc[1] = PLMN_MCC1;
168    cuCfgParams.plmn.mcc[2] = PLMN_MCC2;
169    cuCfgParams.plmn.mnc[0] = PLMN_MNC0;
170    cuCfgParams.plmn.mnc[1] = PLMN_MNC1;
171    cuCfgParams.plmn.mnc[2] = PLMN_MNC2;
172
173    /*RRC Version*/
174    cuCfgParams.rrcVersion.rrcVer = RRC_VER;
175    cuCfgParams.rrcVersion.extRrcVer = EXT_RRC_VER;
176
177
178    /* EGTP Parameters */
179    cuCfgParams.egtpParams.localIp.ipV4Pres = TRUE;
180    cuCfgParams.egtpParams.localIp.ipV4Addr = ipv4_cu;
181    cuCfgParams.egtpParams.localPort = CU_EGTP_PORT;
182    cuCfgParams.egtpParams.destIp.ipV4Pres = TRUE;
183    cuCfgParams.egtpParams.destIp.ipV4Addr = ipv4_du;
184    cuCfgParams.egtpParams.destPort = DU_EGTP_PORT;
185    cuCfgParams.egtpParams.minTunnelId = 0;
186    cuCfgParams.egtpParams.maxTunnelId = 10;
187
188 } /* End of readCuCfg */
189
190 /*******************************************************************
191  *
192  * @brief Handles Console input
193  *
194  * @details
195  *
196  *    Function : cuConsoleHandler
197  *
198  *    Functionality: Handles Console input
199  *
200  * @params[in] 
201  * @return ROK     - success
202  *         RFAILED - failure
203  *
204  * ****************************************************************/
205 void *cuConsoleHandler(void *args)
206 {
207    char ch;
208    while(true) 
209    {
210       /* Send DL user data to CU when user enters 'd' on console */
211       if((ch = getchar()) == 'd')
212       {
213          /* Start Pumping data from CU to DU */
214          DU_LOG("\nDEBUG  -->  EGTP: Sending DL User Data");
215          cuEgtpDatReq();      
216       } 
217    }
218 }
219 /**********************************************************************
220          End of file
221 **********************************************************************/