msg3 and msg4 changes
[o-du/l2.git] / src / du_app / du_mgr_ex_ms.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 file contains message handling functionality for DU APP */
20
21 #include "du_sctp.h"
22 #include "du_f1ap_msg_hdl.h"
23 #include "du_e2ap_msg_hdl.h"
24 #include "lsctp.h"
25 #include "legtp.h"
26 #include "du_app_mac_inf.h"
27 #include "du_ue_mgr.h"
28 #include "kwu.x"
29
30 extern S16 cmUnpkLkwCfgCfm(LkwCfgCfm func,Pst *pst, Buffer *mBuf);
31 extern S16 cmUnpkLkwCntrlCfm(LkwCntrlCfm func,Pst *pst, Buffer *mBuf);
32 extern S16 cmUnpkLrgCfgCfm(LrgCfgCfm func,Pst *pst, Buffer *mBuf);
33 extern S16 cmUnpkKwuDatInd(KwuDatInd func,Pst *pst, Buffer *mBuf);
34 extern S16 cmUnpkLrgSchCfgCfm(LrgSchCfgCfm func,Pst *pst,Buffer *mBuf);
35 /**************************************************************************
36  * @brief Task Initiation callback function. 
37  *
38  * @details
39  *
40  *     Function : duActvInit 
41  *    
42  *     Functionality:
43  *             This function is supplied as one of parameters during DU APP's 
44  *             task registration. SSI will invoke this function once, after
45  *             it creates and attaches this TAPA Task to a system task.
46  *     
47  * @param[in]  Ent entity, the entity ID of this task.     
48  * @param[in]  Inst inst, the instance ID of this task.
49  * @param[in]  Region region, the region ID registered for memory 
50  *              usage of this task.
51  * @param[in]  Reason reason.
52  * @return ROK     - success
53  *         RFAILED - failure
54  ***************************************************************************/
55 S16 duActvInit(Ent entity, Inst inst, Region region, Reason reason)
56 {
57    uint8_t id;
58
59    duCb.init.procId  = SFndProcId();
60    duCb.init.ent     = entity;
61    duCb.init.inst    = inst;
62    duCb.init.region  = region;
63    duCb.init.reason  = reason;
64    duCb.init.cfgDone = FALSE;
65    duCb.init.pool    = DU_POOL;
66    duCb.init.acnt    = FALSE;
67    duCb.init.trc     = FALSE;
68    duCb.init.usta    = TRUE;
69    duCb.mem.region   = DFLT_REGION;
70    duCb.mem.pool     = DU_POOL;
71
72    duCb.f1Status     = FALSE;
73    duCb.e2Status     = FALSE;
74
75    for(id = 0; id < DU_MAX_CELLS; id ++)
76    {
77            duCb.cfgCellLst[id] = NULL;
78       duCb.actvCellLst[id] = NULL;
79    }
80    duCb.numUe = 0;
81         memset(duCb.ueCcchCtxt, 0, DU_MAX_UE * sizeof(UeCcchCtxt));
82
83    SSetProcId(DU_PROC);
84
85    return ROK;
86
87 }
88
89 /**************************************************************************
90  * @brief Task Activation callback function. 
91  *
92  * @details
93  *
94  *      Function : duActvTsk 
95  * 
96  *      Functionality:
97  *           Primitives invoked by DU APP's users/providers through
98  *           a loosely coupled interface arrive here by means of 
99  *           SSI's message handling. This API is registered with
100  *           SSI during the Task Registration of DU APP.
101  *     
102  * @param[in]  Pst     *pst, Post structure of the primitive.     
103  * @param[in]  Buffer *mBuf, Packed primitive parameters in the
104  *  buffer.
105  * @return ROK     - success
106  *         RFAILED - failure
107  *
108  ***************************************************************************/
109 S16 duActvTsk(Pst *pst, Buffer *mBuf)
110 {
111    S16 ret = ROK;
112
113    switch(pst->srcEnt)
114    {
115       case ENTDUAPP:
116          {
117             switch(pst->event)
118             {
119                case EVTCFG:
120                   {
121                      DU_LOG("\n****** Received initial configs at DU APP ******\n");
122                      duProcCfgComplete();
123                      SPutMsg(mBuf);
124                      break;
125                   }
126                default:
127                   {
128                      DU_LOG("\nDU_APP : Invalid event received at duActvTsk from ENTDUAPP");
129                      SPutMsg(mBuf);
130                      ret = RFAILED;
131                   }
132             }
133
134             break;
135          }
136       case ENTKW:
137          {
138             switch(pst->event)
139             {
140                case LKW_EVT_CFG_CFM:
141                   {
142                      ret = cmUnpkLkwCfgCfm(duHdlRlcCfgComplete, pst, mBuf);
143                      break;
144                   }
145                case LKW_EVT_CNTRL_CFM:
146                   {
147                      ret = cmUnpkLkwCntrlCfm(duHdlRlcCntrlCfgComplete, pst, mBuf);
148                      break;
149                   }
150                case LKW_EVT_STA_IND:
151                   {
152                      break;
153                   }
154                case KWU_EVT_DAT_IND:
155                   {
156                      ret = cmUnpkKwuDatInd(duHdlRlcUlData, pst, mBuf);
157                      break;
158                   }
159                default:
160                   {
161                      DU_LOG("\nDU_APP : Invalid event %d received at duActvTsk from ENTKW", \
162                            pst->event);
163                      SPutMsg(mBuf);
164                      ret = RFAILED;
165                   }
166             }
167             break;
168          }
169       case ENTRG:
170          {
171             switch(pst->event)
172             {
173                //Config complete
174                case EVTCFG:
175                   {
176                      SPutMsg(mBuf);
177                      break;
178                   }
179                case EVTLRGCFGCFM:
180                   {
181                      ret = cmUnpkLrgCfgCfm(duHdlMacCfgComplete, pst, mBuf);
182                      break;
183                   }
184                case EVTLRGCNTRLCFM:
185                   {
186                      break;
187                   }
188                case EVTMACSCHGENCFGCFM:
189                   {
190                      ret = cmUnpkLrgSchCfgCfm(duHdlSchCfgComplete, pst, mBuf);
191                      break;
192                   }
193                case EVENT_MAC_CELL_CONFIG_CFM:
194                   {
195                      ret = unpackMacCellCfgCfm(duHandleMacCellCfgCfm, pst, mBuf);
196                      break;
197                   }
198                case EVENT_MAC_SLOT_IND:
199                   {
200                      ret = unpackMacSlotInd(duHandleSlotInd, pst, mBuf);
201                      break;
202                   }
203                case EVENT_MAC_STOP_IND:
204                   {
205                      ret = unpackMacStopInd(duHandleStopInd, pst, mBuf);
206                      break;
207                   }
208                                         case EVENT_MAC_UL_CCCH_IND:
209                                                 {
210                                                         ret = unpackMacUlCcchInd(duHandleUlCcchInd, pst, mBuf);
211                                                         break;
212                                                 }
213
214                default:
215                   {
216                      DU_LOG("\nDU_APP : Invalid event received at duActvTsk from ENTRG");
217                      SPutMsg(mBuf);
218                      ret = RFAILED;
219                   }
220             }
221
222             break;
223          }
224       case ENTSCTP:
225          {
226             switch(pst->event)
227             {
228                case EVENT_CU_DATA:
229                {
230                   F1APMsgHdlr(mBuf);
231                   break;
232                }
233                case EVENT_SCTP_NTFY:
234                {
235                   ret = cmUnpkSctpNtfy(duSctpNtfyHdl, pst, mBuf);
236                   break;
237                }
238                case EVENT_RIC_DATA:
239                {
240                   E2APMsgHdlr(mBuf);
241                   break;
242                }
243                default:
244                {
245                   DU_LOG("\nDU_APP : Invalid event received at duActvTsk from ENTSCTP");
246                   ret = RFAILED;
247                }
248
249             }
250             SPutMsg(mBuf);
251             break;
252          }
253       case ENTEGTP:
254          {
255             switch(pst->event)
256             {
257                case EVTCFGCFM:
258                {
259                   unpackEgtpCfgCfm(duHdlEgtpCfgComplete, mBuf);
260                   break;
261                }
262                case EVTSRVOPENCFM:
263                {
264                   unpackEgtpSrvOpenCfm(duHdlEgtpSrvOpenComplete, mBuf);
265                   break;
266                }
267                case EVTTNLMGMTCFM:
268                {
269                   unpackEgtpTnlMgmtCfm(duHdlEgtpTnlMgmtCfm, mBuf);
270                   break;
271                }
272                default:
273                {
274                   DU_LOG("\nDU_APP : Invalid event[%d] received at duActvTsk from ENTEGTP", pst->event);
275                   ret = RFAILED;
276                }
277             }
278             SPutMsg(mBuf);
279             break;
280          }
281       default:
282          {
283             DU_LOG("\nDU_APP : DU APP can not process message from Entity %d", pst->srcEnt);
284             SPutMsg(mBuf);
285             ret = RFAILED;
286          }
287
288    }
289    SExitTsk();
290    return ret;
291 }
292
293 /**********************************************************************
294          End of file
295 **********************************************************************/