1 /*******************************************************************************
2 ################################################################################
3 # Copyright (c) [2017-2019] [Radisys] #
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 #
9 # http://www.apache.org/licenses/LICENSE-2.0 #
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 /* This file contains UE management handling functionality for SCH */
20 #include "common_def.h"
27 #include "du_app_mac_inf.h"
28 #include "mac_sch_interface.h"
32 SchUeCfgRspFunc SchUeCfgRspOpts[] =
34 packSchUeCfgRsp, /* LC */
35 MacProcSchUeCfgRsp, /* TC */
36 packSchUeCfgRsp /* LWLC */
40 /*******************************************************************
42 * @brief Fill and send UE cfg response to MAC
46 * Function : SchSendUeCfgRspToMac
48 * Functionality: Fill and send UE cfg response to MAC
51 * @return ROK - success
54 * ****************************************************************/
55 void SchSendUeCfgRspToMac(SchUeCfg *ueCfg, Inst inst,\
56 SchMacRsp result, SchUeCfgRsp *cfgRsp)
60 DU_LOG("\nSCH: Sending UE Create response to MAC");
62 cfgRsp->cellId = ueCfg->cellId;
63 cfgRsp->crnti = ueCfg->crnti;
64 GET_UE_IDX(ueCfg->crnti, cfgRsp->ueIdx);
67 /* Filling response post */
68 memset(&rspPst, 0, sizeof(Pst));
69 SCH_FILL_RSP_PST(rspPst, inst);
70 rspPst.event = EVENT_UE_CREATE_RSP_TO_MAC;
72 SchUeCfgRspOpts[rspPst.selector](&rspPst, cfgRsp);
75 /*******************************************************************
77 * @brief Hanles Ue create request from MAC
81 * Function : macSchUeCreateReq
83 * Functionality: Hanles Ue create request from MAC
86 * @return ROK - success
89 * ****************************************************************/
90 uint8_t macSchUeCreateReq(Pst *pst, SchUeCfg *ueCfg)
97 Inst inst = pst->dstInst - 1;
99 DU_LOG("\nSCH : UE Create Request for CRNTI[%d]", ueCfg->crnti);
101 memset(&cfgRsp, 0, sizeof(SchUeCfgRsp));
105 DU_LOG("\nSCH : UE create request failed");
109 /* Search of cell cb */
110 for(idx = 0; idx < SCH_MAX_CELLS; idx++)
112 cellCb = schCb[inst].cells[idx];
113 if(cellCb->cellId == ueCfg->cellId)
116 if(idx == SCH_MAX_CELLS)
118 DU_LOG("\nSCH : Ue create request failed. Invalid cell id %d", ueCfg->cellId);
119 SchSendUeCfgRspToMac(ueCfg, inst, RSP_NOK, &cfgRsp);
123 /* Check if max number of UE configured */
124 if(cellCb->numActvUe > SCH_MAX_UE)
126 DU_LOG("SCH : Max number of UE [%d] already configured", SCH_MAX_UE);
127 SchSendUeCfgRspToMac(ueCfg, inst, RSP_NOK, &cfgRsp);
131 /* Search if UE already configured */
132 GET_UE_IDX(ueCfg->crnti, ueIdx);
133 ueCb = &cellCb->ueCb[ueIdx];
136 if((ueCb->crnti == ueCfg->crnti) && (ueCb->state == SCH_UE_STATE_ACTIVE))
138 DU_LOG("\n SCH : CRNTI %d already configured ", ueCfg->crnti);
139 SchSendUeCfgRspToMac(ueCfg, inst, RSP_OK, &cfgRsp);
144 /* Fill received Ue Configuration in UeCb */
145 memset(ueCb, 0, sizeof(SchUeCb));
147 GET_UE_IDX(ueCfg->crnti, ueCb->ueIdx);
148 ueCb->crnti = ueCfg->crnti;
149 memcpy(&ueCb->ueCfg, ueCfg, sizeof(SchUeCfg));
150 ueCb->state = SCH_UE_STATE_ACTIVE;
153 SchSendUeCfgRspToMac(ueCfg, inst, RSP_OK, &cfgRsp);
157 /**********************************************************************
159 **********************************************************************/