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 *******************************************************************************/
19 /********************************************************************20**
21 Name: NR RLC - Configuration Manager file
25 Desc: It contains the following configuraiton primtives
38 *********************************************************************21*/
40 /** @file rlc_cfg_dl.c
41 @brief RLC Downlink Configuration Module
45 /* header (.h) include files */
46 #include "common_def.h"
48 #include "lkw.h" /* LKW defines */
49 #include "ckw.h" /* CKW defines */
50 #include "kwu.h" /* KWU defines */
51 #include "rgu.h" /* RGU defines */
52 #include "rlc_err.h" /* RLC error options */
53 #include "rlc_env.h" /* RLC environment options */
56 /* extern (.x) include files */
57 #include "lkw.x" /* LKW */
58 #include "ckw.x" /* CKW */
59 #include "kwu.x" /* KWU */
60 #include "rgu.x" /* RGU */
62 #include "rlc_utils.h" /* RLC defines */
63 #include "rlc_dl_ul_inf.h"
65 #include "du_app_rlc_inf.h"
67 #define RLC_MODULE RLC_DBGMASK_CFG
68 /*Added for adding new Ue in onging L2 Meas*/
72 * @brief Handle modification of UE ID for L2 Meas data structs
75 * @param[in] ueId ue ID
82 static S16 rlcHdlMeasDlUeIdChg(RlcCb *gCb, uint8_t cellId,uint8_t oldUeId, uint8_t newUeId)
84 RlcL2MeasEvtCb *measEvtCb = NULLP;
85 RlcL2MeasCb *measCb = NULLP;
89 for(cntr = 0; cntr < LKW_MAX_L2MEAS; cntr++)
91 measEvtCb = &(gCb->u.dlCb->rlcL2Cb.rlcL2EvtCb[cntr]);
92 measCb = &(measEvtCb->measCb);
95 if(measCb->measType & LKW_L2MEAS_DL_IP )
98 for(ueIdx = 0; ueIdx < measCb->val.ipThMeas.numUes; ueIdx++)
100 if((measCb->val.ipThMeas.ueInfoLst[ueIdx].ueId) == oldUeId)
102 measCb->val.ipThMeas.ueInfoLst[ueIdx].ueId = newUeId;
113 * @brief Handler to delete an UE's L2 Meas ctxt
116 * @param[in] ueId ue ID
123 static S16 rlcDelFrmDlL2Meas(RlcCb *gCb, uint8_t cellId,uint8_t ueId)
125 RlcL2MeasEvtCb *measEvtCb = NULLP;
126 RlcL2MeasCb *measCb = NULLP;
131 for(cntr = 0; cntr < LKW_MAX_L2MEAS; cntr++)
133 measEvtCb = &gCb->u.dlCb->rlcL2Cb.rlcL2EvtCb[cntr];
134 measCb = &(measEvtCb->measCb);
137 if(measCb->measType & LKW_L2MEAS_DL_IP )
140 for(ueIdx = 0; ((ueIdx < measCb->val.ipThMeas.numUes) &&
141 (ueIdx < gCb->genCfg.maxUe)); ueIdx++)
143 if((measCb->val.ipThMeas.ueInfoLst[ueIdx].ueId) == ueId)
145 measCb->val.ipThMeas.ueInfoLst[ueIdx].isValid = FALSE;
146 if (measCb->val.ipThMeas.numUes-1 == ueIdx)
148 measCb->val.ipThMeas.numUes--;
160 static S16 rlcAddToDlL2Meas(RlcCb *gCb, RlcDlRbCb *rlcRbCb,uint8_t cellId,uint8_t ueId)
162 RlcL2MeasEvtCb *measEvtCb = NULLP;
163 RlcL2MeasCb *measCb = NULLP;
169 #ifndef XEON_SPECIFIC_CHANGES
170 uint8_t freeIdx = gCb->genCfg.maxUe;
172 uint16_t freeIdx = LKW_MAX_UE;
176 for(cntr = 0; cntr < LKW_MAX_L2MEAS; cntr++)
178 measEvtCb = &gCb->u.dlCb->rlcL2Cb.rlcL2EvtCb[cntr];
179 measCb = &(measEvtCb->measCb);
181 freeIdx = gCb->genCfg.maxUe;
183 if(measCb->measType &
184 (LKW_L2MEAS_ACT_UE | LKW_L2MEAS_UU_LOSS | LKW_L2MEAS_DL_DELAY))
186 for(cntr1 =0;((cntr1 < measCb->val.nonIpThMeas.numQci) &&
187 (cntr1 < LKW_MAX_QCI));cntr1++)
189 if(measCb->val.nonIpThMeas.qci[cntr1] != rlcRbCb->qci)
191 measCb->val.nonIpThMeas.qci[cntr1] = rlcRbCb->qci;
192 gCb->u.dlCb->rlcL2Cb.measOn[rlcRbCb->qci] |=measCb->measType;
198 if(((rlcRbCb->rbL2Cb.measOn & measCb->measType) == LKW_L2MEAS_NONE))
200 if (measCb->measType & LKW_L2MEAS_ACT_UE)
202 if((rlcRbCb->mode == RLC_MODE_UM) &&
203 (rlcRbCb->dir & RLC_DIR_DL ))
205 if (rlcRbCb->m.umDl.sduQ.count)
207 if (rlcRbCb->ueCb->numActRb[rlcRbCb->qci] == 0)
209 rlcRbCb->ueCb->numActRb[rlcRbCb->qci]++;
210 gCb->u.dlCb->rlcL2Cb.numActUe[rlcRbCb->qci]++;
214 else if (rlcRbCb->mode == RLC_MODE_AM)
216 if ((rlcRbCb->m.amDl.cntrlBo) ||
217 (rlcRbCb->m.amDl.retxBo) ||
218 (rlcRbCb->m.amDl.bo))
220 if (rlcRbCb->ueCb->numActRb[rlcRbCb->qci] == 0)
222 rlcRbCb->ueCb->numActRb[rlcRbCb->qci]++;
223 gCb->u.dlCb->rlcL2Cb.numActUe[rlcRbCb->qci]++;
229 if((measCb->measType & LKW_L2MEAS_DL_IP))
232 for(ueIdx = 0; ((ueIdx < measCb->val.ipThMeas.numUes) &&
233 (ueIdx < gCb->genCfg.maxUe)); ueIdx++)
235 if ((freeIdx == gCb->genCfg.maxUe) &&
236 (measCb->val.ipThMeas.ueInfoLst[ueIdx].isValid == FALSE))
241 if((measCb->val.ipThMeas.ueInfoLst[ueIdx].ueId) == ueId)
247 if (ueIdx == measCb->val.ipThMeas.numUes)
249 if (gCb->genCfg.maxUe == measCb->val.ipThMeas.numUes)
253 if (gCb->genCfg.maxUe == freeIdx)
255 measCb->val.ipThMeas.numUes++;
261 measCb->val.ipThMeas.ueInfoLst[ueIdx].isValid = TRUE;
262 memset(&measCb->val.ipThMeas.ueInfoLst[ueIdx].measData[0],0x00,(sizeof(RlcL2Cntr) *LKW_MAX_QCI));
263 measCb->val.ipThMeas.ueInfoLst[ueIdx].numQci = 0;
265 measCb->val.ipThMeas.ueInfoLst[ueIdx].ueId = ueId;
266 measCb->val.ipThMeas.ueInfoLst[ueIdx].cellId = cellId;
267 numQci = &(measCb->val.ipThMeas.ueInfoLst[ueIdx].numQci);
269 for (qciIdx =0; ((qciIdx < *numQci) &&
270 (qciIdx < LKW_MAX_QCI)) ; qciIdx++)
272 if (measCb->val.ipThMeas.ueInfoLst[ueIdx].qci[qciIdx] == rlcRbCb->qci)
278 /* Fix Klock Warning */
279 if ((qciIdx == *numQci) && (qciIdx < LKW_MAX_QCI))
281 measCb->val.ipThMeas.ueInfoLst[ueIdx].qci[qciIdx] = rlcRbCb->qci;
285 rlcUtlPlcMeasDatInL2Sts(&measCb->val.ipThMeas.ueInfoLst[ueIdx].measData[rlcRbCb->qci],
286 &rlcRbCb->rbL2Cb, measCb->measType);
288 else if (measCb->measType &
289 (LKW_L2MEAS_DL_DISC | LKW_L2MEAS_DL_DELAY | LKW_L2MEAS_UU_LOSS))
291 rlcUtlPlcMeasDatInL2Sts(&measCb->val.nonIpThMeas.measData[rlcRbCb->qci],
292 &rlcRbCb->rbL2Cb, measCb->measType);
293 measCb->val.nonIpThMeas.qci[rlcRbCb->qci] = rlcRbCb->qci;
294 measCb->val.nonIpThMeas.measData[rlcRbCb->qci].totDrbsPerQci++;
296 rlcRbCb->rbL2Cb.measOn |= measCb->measType;
299 }/*rlcAddToDlL2Meas*/
300 #endif /*LTE_L2_MEAS*/
305 * This primitive fills the RbCb
307 * @param [in] gCb - RLC Instance Control Block
308 * @param [out] rbCb - RB Control Block
309 * @param [out] ueCb - UE Control Block
310 * @param [in] entCfg - RLC Entity configuration
316 static S16 rlcCfgFillDlRbCb(RlcCb *gCb,RlcDlRbCb *rbCb,RlcDlUeCb *ueCb,RlcEntCfgInfo *entCfg)
318 DU_LOG("\nDEBUG --> RLC_DL : rlcCfgFillRbCb(ueId(%d),cellId(%d) rbType(%d))",
323 /* Initialize according to entMode */
324 switch (entCfg->entMode)
328 rbCb->lch.lChId = entCfg->lCh[0].lChId;
329 rbCb->lch.lChType = entCfg->lCh[0].type;
330 rbCb->dir = entCfg->dir;
336 rbCb->lch.lChId = entCfg->lCh[0].lChId;
337 rbCb->lch.lChType = entCfg->lCh[0].type;
338 rbCb->dir = entCfg->dir;
340 /* Spec 38.322 Section 7.1
341 * All UM state variables can take values from 0 to 63 for 6 bit SN or
342 * from 0 to 4095 for 12 bit SN. All arithmetic operations on UM state
343 * variables are affected by the UM modulus
344 * (i.e. final value = [value from arithmetic operation] modulo 64
345 * for 6 bit SN and 4096 for 12 bit SN)
347 rbCb->m.umDl.snLen = entCfg->m.umInfo.dl.snLen;
348 if (entCfg->m.umInfo.dl.snLen == RLC_UM_CFG_6BIT_SN_LEN)
349 rbCb->m.umDl.modBitMask = 0x3f;
351 rbCb->m.umDl.modBitMask = 0xfff;
353 ueCb->lCh[rbCb->lch.lChId - 1].dlRbCb = rbCb;
359 /* Down Link Information
360 * indx = 0 as Down Link */
361 rbCb->lch.lChId = entCfg->lCh[0].lChId;
362 rbCb->lch.lChType = entCfg->lCh[0].type;
363 rbCb->dir = RLC_DIR_BOTH;
365 rbCb->m.amDl.pollPdu = entCfg->m.amInfo.dl.pollPdu;
366 rbCb->m.amDl.pollByte = entCfg->m.amInfo.dl.pollByte;
367 rbCb->m.amDl.maxRetx = entCfg->m.amInfo.dl.maxRetx;
368 rbCb->m.amDl.pollRetxTmrInt = entCfg->m.amInfo.dl.pollRetxTmr;
369 rbCb->m.amDl.snLen = entCfg->m.amInfo.dl.snLen;
371 if(RLC_AM_CFG_12BIT_SN_LEN == rbCb->m.amDl.snLen)
373 rbCb->m.amDl.snModMask = (1 << RLC_SN_LEN_12BITS) - 1; /* 5GNR */
377 rbCb->m.amDl.snModMask = (1 << RLC_SN_LEN_18BITS) - 1; /* 5GNR */
380 cmInitTimers(&(rbCb->m.amDl.pollRetxTmr), 1);
381 ueCb->lCh[rbCb->lch.lChId - 1].dlRbCb = rbCb;
386 rbCb->m.amDl.txBufLst,
387 (RLC_TX_BUF_BIN_SIZE * sizeof(CmLListCp)));
388 for(hashIndex = 0; hashIndex < RLC_TX_BUF_BIN_SIZE; hashIndex++)
390 cmLListInit(&(rbCb->m.amDl.txBufLst[hashIndex]));
397 DU_LOG("\nERROR --> RLC_DL : Invalid RB Mode ueId(%d),cellId(%d)",
406 RLC_ALLOC(gCb, rbCb->snssai, sizeof(Snssai));
407 if(rbCb->snssai == NULLP)
409 DU_LOG("\nERROR --> RLC_DL : rlcCfgFillDlRbCb(): Failed to allocate memory");
412 memcpy(rbCb->snssai, entCfg->snssai, sizeof(Snssai));
414 /*Create the entry of this SNSSAI if not exist in Snssai Tput list*/
415 if(rlcHandleSnssaiTputlist(gCb, rbCb->snssai, CREATE, DIR_DL) == NULLP)
417 DU_LOG("\nERROR --> RLC_DL : rlcCfgFillDlRbCb(): SNSSAI insertion in Tput list failed");
420 rbCb->mode = entCfg->entMode;
421 rbCb->discTmrInt = entCfg->discardTmr;
428 * @brief This primitive Initializes the RB Cb
430 * @param [in] gCb - RLC Instance Control Block
431 * @param [out] rbCb - RB Control Block
432 * @param [in] ptr - Void pointer
433 * @param [in] entCfg - Entity Configuration
439 static S16 rlcCfgUpdateDlRb
444 RlcEntCfgInfo *entCfg
448 if (rbCb->mode != entCfg->entMode)
450 DU_LOG("\nERROR --> RLC_DL : RB Mode Mismatch : exp [%d] rcv [%d] UEID:%d CELLID:%d",
455 return (CKW_CFG_REAS_RB_MODE_MIS);
462 RlcDlCellCb *cellCb = (RlcDlCellCb *)ptr;
464 rbCb->dir = entCfg->dir;
465 rbCb->lch.lChId = entCfg->lCh[0].lChId;
466 rbCb->lch.lChType = entCfg->lCh[0].type;
467 cellCb->lCh[rbCb->lch.lChId - 1].dlRbCb = rbCb;
473 RlcDlUeCb *ueCb = (RlcDlUeCb *)ptr;
475 if (entCfg->lCh[0].type == CM_LTE_LCH_DCCH)
477 return (CKW_CFG_REAS_LCHTYPE_MIS);
480 ueCb->lCh[rbCb->lch.lChId - 1].dlRbCb = NULLP;
481 ueCb->lCh[entCfg->lCh[0].lChId - 1].dlRbCb = rbCb;
483 rbCb->lch.lChId = entCfg->lCh[0].lChId;
484 rbCb->lch.lChType = entCfg->lCh[0].type;
485 rbCb->dir = entCfg->dir;
491 RlcDlUeCb *ueCb = (RlcDlUeCb *)ptr;
493 ueCb->lCh[rbCb->lch.lChId - 1].dlRbCb = NULLP;
494 ueCb->lCh[entCfg->lCh[1].lChId - 1].dlRbCb = rbCb;
497 rbCb->lch.lChId = entCfg->lCh[1].lChId;
498 rbCb->lch.lChType = entCfg->lCh[1].type;
499 rbCb->m.amDl.pollRetxTmrInt = entCfg->m.amInfo.dl.pollRetxTmr;
500 rbCb->m.amDl.pollPdu = entCfg->m.amInfo.dl.pollPdu;
501 rbCb->m.amDl.pollByte = entCfg->m.amInfo.dl.pollByte;
502 rbCb->m.amDl.maxRetx = entCfg->m.amInfo.dl.maxRetx;
512 RLC_ALLOC(gCb, rbCb->snssai, sizeof(Snssai));
513 if(rbCb->snssai == NULLP)
515 DU_LOG("\nERROR --> RLC_DL : rlcCfgFillDlRbCb(): Failed to allocate memory");
519 memcpy(rbCb->snssai,entCfg->snssai,sizeof(Snssai));
522 rbCb->discTmrInt = entCfg->discardTmr;
524 return (CKW_CFG_REAS_NONE);
530 * This primitive adds new RB in Ue/Cell Cb.
533 * This function does following steps -
534 * - If UE ID is 0 then
535 * - Check for CELL CB is present
536 * - If yes, Check for RB ID
537 * - If RB ID is present Status Indication with reason
538 * - Else, Create New RB CB in CELL CB
539 * - If no Create New CELL CB and RB CB
541 * - Check for UE CB is present
542 * - If yes Check for RB ID
543 * - If RB ID is present Status Indication with reason
544 * - Else, Create New RB CB in UE CB
545 * - If no Create New UE CB and RB CB
546 * - Fill entity confirmation
548 * @param [in] gCb - RLC Instance Control Block
549 * @param [in] ueId - UE Identifier
550 * @param [in] cellId - CELL Identifier
551 * @param [in] entCfg - Entity Configuration to be done.
552 * @param [out] entCfm - Entity Confirmation.
563 RlcEntCfgInfo *entCfg,
564 RlcEntCfgCfmInfo *entCfm
567 RlcDlUeCb *ueCb = NULLP; /* UE Control Block */
568 RlcDlCellCb *cellCb; /* Cell Control Block */
569 RlcDlRbCb *rlcRbCb; /* KW RB Control Block */
570 uint8_t reason; /* Rb Identifier */
572 DU_LOG("\nDEBUG --> RLC_DL : rlcCfgAddRb(cellId(%d),UEID:%d cfgType(%d))",
579 /* Fill entCfm structure */
580 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
581 CKW_CFG_REAS_CELL_UNKWN);
582 DU_LOG("\nERROR --> RLC_DL : Add DLRb,CellId is 0 for UEID:%d",
586 if ((entCfg->rguSapId >= gCb->genCfg.maxRguSaps) || (entCfg->rguSapId < 0))
588 RLCDBGP_ERROR(gCb, "rlcCfgAddDlRb(ueId(%u), cellId(%u), Invalid rguSapId (%d)\n",
589 ueId, cellId, entCfg->rguSapId);
594 /* Process Adding new RB */
597 if(entCfg->rbId >= RLC_MAX_RB_PER_CELL)
599 /* Fill entCfm structure */
600 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
602 CKW_CFG_REAS_RB_UNKWN);
603 DU_LOG("\nERROR --> RLC_DL : Invalid RbId ,Max is [%d] CELLID:%d UEID:%d",
610 if (((entCfg->lCh[0].type == CM_LTE_LCH_BCCH) ||
611 (entCfg->lCh[0].type == CM_LTE_LCH_PCCH) ||
612 (entCfg->lCh[0].type == CM_LTE_LCH_CCCH)) &&
613 (entCfg->entMode == RLC_MODE_TM))
615 /* Cell CB present */
616 rlcDbmFetchDlCellCb(gCb, cellId, &cellCb);
619 /* Get rbCb from cellCb->rbCb List */
620 if (( cellCb->rbCb[entCfg->rbId] != NULLP))
622 /* Fill entCfm structure */
623 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
625 CKW_CFG_REAS_RB_PRSNT);
626 DU_LOG("\nERROR --> RLC_DL : RbId [%d] already exists UEID:%d",
632 else /* Cell CB UNKNOWN */
635 if ( ROK != rlcDbmCreateDlCellCb(gCb,cellId, &cellCb))
637 /* Fill entCfm structure */
638 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
640 CKW_CFG_REAS_CELL_CREAT_FAIL);
641 DU_LOG("\nERROR --> RLC_DL : cellCb Creation failed RBID:%d UEID:%d",
649 if(entCfg->lCh[0].lChId <= 0)
651 DU_LOG("\nERROR --> RLC_DL : Invalid LcId CELLID:%d UEID:%d RBID:%d",
655 /* Fill entCfm structure */
656 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
657 CKW_CFG_CFM_NOK, CKW_CFG_REAS_INVALID_LCHID);
662 RLC_ALLOC(gCb,rlcRbCb, sizeof (RlcDlRbCb));
665 DU_LOG("\nERROR --> RLC_DL : Memory allocation failed for rbId:%d CELLID:%d",
668 /* Fill entCfm structure */
669 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
670 CKW_CFG_CFM_NOK, CKW_CFG_REAS_RB_CREAT_FAIL);
673 rlcRbCb->rlcId.rbId = entCfg->rbId;
674 cellCb->rbCb[entCfg->rbId] = rlcRbCb;
675 RLC_LMM_RB_STS_INC(gCb);
676 cellCb->lCh[entCfg->lCh[0].lChId - 1].dlRbCb = rlcRbCb;
680 reason= (entCfg->entMode != RLC_MODE_TM)? CKW_CFG_REAS_RB_MODE_MIS:
681 CKW_CFG_REAS_LCHTYPE_MIS;
682 /* Fill entCfm structure */
683 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
684 CKW_CFG_CFM_NOK, reason);
690 if (!(RLC_VALIDATE_UE_RBID(entCfg->rbType, entCfg->rbId)))
692 /* Fill entCfm structure */
693 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
694 CKW_CFG_REAS_RB_UNKWN);
695 DU_LOG("\nERROR --> RLC_DL : Invalid RbId for RbType[%d] UEID:%d",
700 if ((((entCfg->lCh[0].type == CM_LTE_LCH_DCCH) &&
701 (entCfg->entMode != RLC_MODE_UM) &&
702 (CM_LTE_SRB == entCfg->rbType)) ||
703 ((entCfg->lCh[0].type == CM_LTE_LCH_DTCH) &&
704 (CM_LTE_DRB == entCfg->rbType))) &&
705 (entCfg->entMode != RLC_MODE_TM))
708 if ( rlcDbmFetchDlUeCb(gCb,ueId, cellId, &ueCb) == ROK)
710 /* Get rbCb from ueCb->rbCb list */
711 RLC_DBM_GET_RBCB_FROM_UECB(entCfg->rbId, entCfg->rbType, ueCb, rlcRbCb);
713 if(( rlcRbCb != NULLP))
715 /* Fill entCfm structure */
716 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
717 CKW_CFG_REAS_RB_PRSNT);
718 DU_LOG("\nERROR --> RLC_DL : CellId[%u]:rbId [%d] already exists",
724 else /* UE CB UNKNOWN */
727 if ( rlcDbmCreateDlUeCb(gCb,ueId, cellId, &ueCb) != ROK)
729 /* Fill entCfm structure */
730 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
731 CKW_CFG_REAS_UE_CREAT_FAIL);
732 DU_LOG("\nERROR --> RLC_DL : UeId [%u]:ueCb Creation Failed RBID:%d",
737 /* Start throughput calculation for this UE */
738 gCb->rlcThpt.ueTputInfo.thptPerUe[ueId -1].ueId = ueId;
739 gCb->rlcThpt.ueTputInfo.thptPerUe[ueId -1].dataVol = 0;
740 gCb->rlcThpt.ueTputInfo.numActvUe++;
743 /* Validate LChId for UM and AM modes */
744 if ((entCfg->lCh[0].lChId <= 0) ||
745 ((entCfg->entMode == RLC_MODE_AM)&&
746 (entCfg->lCh[1].lChId <= 0)))
748 /* Fill entCfm structure */
749 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
750 CKW_CFG_CFM_NOK, CKW_CFG_REAS_INVALID_LCHID);
755 RLC_ALLOC(gCb,rlcRbCb, sizeof (RlcDlRbCb));
758 /* Fill entCfm structure */
759 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,CKW_CFG_CFM_NOK,
760 CKW_CFG_REAS_RB_CREAT_FAIL);
761 DU_LOG("\nERROR --> RLC_DL : Memory allocation failed RBID:%d CELLID:%d",
767 /* copy the RB Cb into UECb */
768 rlcRbCb->rlcId.rbId = entCfg->rbId;
769 if(entCfg->rbType == CM_LTE_SRB)
770 ueCb->srbCb[entCfg->rbId] = rlcRbCb;
772 ueCb->drbCb[entCfg->rbId] = rlcRbCb;
774 RLC_LMM_RB_STS_INC(gCb);
779 if (entCfg->entMode == RLC_MODE_TM)
781 reason = CKW_CFG_REAS_RB_MODE_MIS;
785 reason = CKW_CFG_REAS_LCHTYPE_MIS;
788 /* Fill entCfm structure */
789 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK, reason);
795 rlcRbCb->rlcId.cellId = cellId;
796 rlcRbCb->rlcId.ueId = ueId;
797 rlcRbCb->rlcId.rbType = entCfg->rbType;
798 rlcRbCb->inst = gCb->init.inst;
799 #ifdef TENB_MULT_CELL_SUPPRT
800 rlcRbCb->rguSapId = entCfg->rguSapId;
805 if (rlcCfgFillDlRbCb(gCb,rlcRbCb, ueCb, entCfg) != ROK)
807 /* Fill entCfm structure */
808 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
809 CKW_CFG_REAS_RB_CREAT_FAIL);
811 /* Delete RB CB created */
812 RLC_FREE(gCb,rlcRbCb, sizeof(RlcDlRbCb));
813 DU_LOG("\nERROR --> RLC_DL : Filling of RbCb failed UEID:%d CELLID:%d",
818 rlcRbCb->qci = entCfg->qci;
820 rlcRbCb->ueCb = ueCb;
821 if (entCfg->lCh[0].type == CM_LTE_LCH_DTCH)
824 rlcAddToDlL2Meas(gCb, rlcRbCb,cellId,ueId);
826 #endif /* LTE_L2_MEAS */
828 /* Fill entCfm structure */
829 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_OK, CKW_CFG_REAS_NONE);
837 * This primitive reconfigures the existing RB in Ue/Cell Cb.
840 * This primitive executes following steps in reconfiguration of existing
842 * - If UE ID is 0 then
843 * - Check for CELL CB is present
844 * - If yes, Check for RB ID
845 * - If RB ID is present Reconfigure the RB CB
846 * - Else, Status Indication with Reason
847 * - Else, Status Indication with Reason
849 * - Check for UE CB is present
850 * - If yes, Check for RB ID
851 * - If RB ID is prenset Reconfigure the CELL CB
852 * - Else, Status Indication with Reason
853 * - Else, Status Indication with Reason
854 * - Fill entity confirmation
856 * @param [in] gCb - RLC Instance Control Block
857 * @param [in] ueId - UE Identifier
858 * @param [in] cellId - CELL Identifier
859 * @param [in] entCfg - Entity Configuration to be done.
860 * @param [out] entCfm - Entity Confirmation
871 RlcEntCfgInfo *entCfg,
872 RlcEntCfgCfmInfo *entCfm
875 RlcDlRbCb *rbCb; /* RB Control Block */
876 RlcDlRbCb tRbCb; /* KW RB Control Block */
877 RlcDlCellCb *cellCb; /* Cell Control Block */
878 RlcDlUeCb *ueCb; /* Ue Control Block */
881 DU_LOG("\nDEBUG --> RLC_DL : rlcCfgReCfgRb(cellId(%d), cfgType(%d)) RBID:%d",
882 cellId, entCfg->cfgType,entCfg->rbId);
885 /* Check for UeCb or CellCb */
888 if(entCfg->rbId >= RLC_MAX_RB_PER_CELL)
890 /* Fill entCfm structure */
891 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
892 CKW_CFG_REAS_RB_UNKWN);
893 DU_LOG("\nERROR --> RLC_DL : Invalid RbId , Max is [%d] UEID:%d CELLID:%d",
900 rlcDbmFetchDlCellCb(gCb,cellId, &cellCb);
903 /* Fill entCfm structure */
904 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
905 CKW_CFG_REAS_CELL_UNKWN);
906 DU_LOG("\nERROR --> RLC_DL : CellCb not found ueId:%d RBID:%d CELLID:%d",
914 RLC_DBM_GET_CELL_RBCB(entCfg->rbId, cellCb->rbCb, rbCb);
918 /* Fill entCfm structure */
919 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
920 CKW_CFG_REAS_RB_UNKWN);
921 DU_LOG("\nERROR --> RLC_DL : CELLID:%d RBID:%d not found",
927 /* Take backup of rbCb before updating.
928 * Because in failure case restore original rbCb
930 memcpy(&tRbCb, rbCb, sizeof(RlcDlRbCb));
933 ret = rlcCfgUpdateDlRb(gCb,rbCb, cellCb,entCfg);
936 /* Fill entCfm structure */
937 RLC_CFG_FILL_CFG_CFM(entCfm,
943 DU_LOG("\nERROR --> RLC_DL : CELLID:%u RBID:%d updation failed",
946 memcpy(rbCb, &tRbCb, sizeof(RlcDlRbCb));
953 if (!(RLC_VALIDATE_UE_RBID(entCfg->rbType, entCfg->rbId)))
955 /* Fill entCfm structure */
956 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
957 CKW_CFG_REAS_RB_UNKWN);
958 DU_LOG("\nERROR --> RLC_DL : CELLID:%d Invalid RBID:%d for RbType[%d]",
965 ret = rlcDbmFetchDlUeCb(gCb,ueId, cellId, &ueCb);
968 /* Fill entCfm structure */
969 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
970 CKW_CFG_CFM_NOK, CKW_CFG_REAS_UE_UNKWN);
971 DU_LOG("\nERROR --> RLC_DL : UEID:%d UeCb not found RBID:%d",
978 RLC_DBM_GET_RBCB_FROM_UECB(entCfg->rbId, entCfg->rbType, ueCb, rbCb);
982 /* Fill entCfm structure */
983 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
984 CKW_CFG_REAS_RB_UNKWN);
985 DU_LOG("\nERROR --> RLC_DL : CELLID:%d RBID:%d not found",
991 /* Take backup of rbCb before updating.
992 * Because in failure case restore original rbCb
994 memcpy(&tRbCb, rbCb, sizeof(RlcDlRbCb));
997 ret = rlcCfgUpdateDlRb(gCb,rbCb,ueCb, entCfg);
998 if (ret != CKW_CFG_REAS_NONE)
1000 /* Fill entCfm structure */
1001 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
1003 DU_LOG("\nERROR --> RLC_DL : CELLID:%d RBID:%d updation failed",
1006 memcpy(rbCb, &tRbCb, sizeof(RlcDlRbCb));
1012 /* Fill entCfm structure */
1013 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_OK, CKW_CFG_REAS_NONE);
1020 * @brief This primitive deletes the existing RB in Ue/Cell Cb.
1023 * - If UE ID is 0 then
1024 * - Check for CELL CB is present
1025 * - If yes, Check for RB ID
1026 * - If RB ID is prenset Delete the RB CB
1027 * - If there is no RB CB exist in CELL CB then Delete CELL CB.
1028 * - Else, Status Indication with Reason
1029 * - Else, Status Indication with Reason
1031 * - Check for UE CB is present
1032 * - If yes, Check for RB ID
1033 * - If RB ID is prenset Delete the RB CB
1034 * - If there is no RB CB exist in UE CB then Delete UE CB.
1035 * - Else, Status Indication with Reason
1036 * - Else, Status Indication with Reason
1037 * - Fill entity confirmation
1039 * @param [in] gCb - RLC Instance Control Block
1040 * @param [in] ueId - UE Identifier
1041 * @param [in] cellId - CELL Identifier
1042 * @param [in] entCfg - Entity Configuration to be done.
1043 * @param [out] entCfm - Entity Confirmation
1054 RlcEntCfgInfo *entCfg,
1055 RlcEntCfgCfmInfo *entCfm
1058 S16 ret; /* Return Value */
1059 RlcDlUeCb *ueCb; /* UE Control Block */
1060 RlcDlCellCb *cellCb; /* UE Control Block */
1061 RlcDlRbCb *rlcRbCb; /* KW RB Control Block */
1063 DU_LOG("\nDEBUG --> RLC_DL : rlcCfgDelRb(RBID(%d), cellId(%d), cfgType(%d))",
1070 /* Get cellCb and delete rbCb from it */
1073 if(entCfg->rbId >= RLC_MAX_RB_PER_CELL)
1075 /* Fill entCfm structure */
1076 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1077 CKW_CFG_CFM_NOK, CKW_CFG_REAS_RB_UNKWN);
1078 DU_LOG("\nERROR --> RLC_DL : Invalid RbId, Max is [%d] UEID:%d CELLID:%d",
1079 RLC_MAX_RB_PER_CELL,
1085 rlcDbmFetchDlCellCb(gCb,cellId, &cellCb);
1088 /* Fill entCfm structure */
1089 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1090 CKW_CFG_CFM_NOK, CKW_CFG_REAS_RB_UNKWN);
1091 DU_LOG("\nERROR --> RLC_DL : CellCb not found UEID:%d RBID:%d",
1098 RLC_DBM_GET_CELL_RBCB(entCfg->rbId, cellCb->rbCb, rlcRbCb);
1100 if ( rlcRbCb == NULLP)
1102 /* Fill entCfm structure */
1103 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1104 CKW_CFG_CFM_NOK, CKW_CFG_REAS_RB_UNKWN);
1105 DU_LOG("\nERROR --> RLC_DL : CellId[%u]:RbId[%d] not found",
1111 /* Assign NULLP to rbCb in rbCbLst */
1112 cellCb->rbCb[entCfg->rbId] = NULLP;
1114 /* Assign NULLP to dlRbCb/ulRbCb.
1115 * Delete Hashlist allocated for it if any */
1116 cellCb->lCh[rlcRbCb->lch.lChId - 1].dlRbCb = NULLP;
1117 RLC_FREE(gCb,rlcRbCb->snssai, sizeof(Snssai));
1118 RLC_FREE(gCb,rlcRbCb, sizeof(RlcDlRbCb)); /*Vartika: Mem leak fix */
1120 /* Get ueCb and delete rbCb from it */
1123 if (!(RLC_VALIDATE_UE_RBID(entCfg->rbType, entCfg->rbId)))
1125 /* Fill entCfm structure */
1126 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1127 CKW_CFG_CFM_NOK, CKW_CFG_REAS_RB_UNKWN);
1128 DU_LOG("\nERROR --> RLC_DL : Invalid RbId for RbType[%d] UEID:%d CELLID:%d",
1136 ret = rlcDbmFetchDlUeCb(gCb,ueId, cellId, &ueCb);
1139 /* Fill entCfm structure */
1140 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1141 CKW_CFG_CFM_NOK, CKW_CFG_REAS_UE_UNKWN);
1142 DU_LOG("\nERROR --> RLC_DL : UeId [%d]: UeCb not found RBID:%d",
1149 RLC_DBM_GET_RBCB_FROM_UECB(entCfg->rbId, entCfg->rbType, ueCb, rlcRbCb);
1151 if ( rlcRbCb == NULLP)
1153 /* Fill entCfm structure */
1154 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
1155 CKW_CFG_REAS_RB_UNKWN);
1156 DU_LOG("\nERROR --> RLC_DL : CellId[%u]:RbId[%d] not found",
1161 ueCb->lCh[rlcRbCb->lch.lChId - 1].dlRbCb = NULLP;
1164 RLC_UPD_L2_DECR_NONIP_PER_QCI_RB_COUNT(gCb, rlcRbCb);
1166 /* Free the Buffers of RbCb */
1167 if( RLC_MODE_UM == rlcRbCb->mode)
1169 rlcUmmFreeDlRbCb(gCb,rlcRbCb);
1171 RLC_FREE(gCb,rlcRbCb, sizeof(RlcDlRbCb));
1173 else if( RLC_MODE_AM == rlcRbCb->mode)
1175 rlcAmmFreeDlRbCb(gCb,rlcRbCb);
1178 /* Assign NULLP to rbCb in rbCbLst */
1179 if ( entCfg->rbType == CM_LTE_SRB )
1181 ueCb->srbCb[entCfg->rbId] = NULLP;
1185 ueCb->drbCb[entCfg->rbId] = NULLP;
1189 RLC_LMM_RB_STS_DEC(gCb);
1191 /* Fill entCfm structure */
1192 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType, CKW_CFG_CFM_OK,
1200 * @brief This primitive re-establish the existing RB in Ue/Cell Cb.
1203 * - If UE ID is 0 then
1204 * - Check for CELL CB is present
1205 * - If yes, Check for RB ID
1206 * - If RB ID is prenset initialize the parameters of the RB CB
1207 * - Else, Status Indication with Reason
1208 * - Else, Status Indication with Reason
1210 * - Check for UE CB is present
1211 * - If yes, Check for RB ID
1212 * - If RB ID is prenset initialize the parameters of the RB CB
1213 * - Else, Status Indication with Reason
1214 * - Else, Status Indication with Reason
1215 * - Fill entity confirmation
1217 * @param [in] gCb - RLC Instance Control Block
1218 * @param [in] ueId - UE Identifier
1219 * @param [in] cellId - CELL Identifier
1220 * @param [in] entCfg - Entity Configuration to be done.
1221 * @param [out] entCfm - Entity Confirmation
1233 RlcEntCfgInfo *entCfg,
1234 RlcEntCfgCfmInfo *entCfm
1237 RlcDlRbCb *rbCb; /* RB Control Block */
1238 CmLteRlcId rlcId; /* RLC Identifier */
1240 DU_LOG("\nDEBUG --> RLC_DL : rlcCfgReEstDlRb(ueId(%d), cellId(%d), cfgType(%d))",
1247 rlcId.cellId = cellId;
1248 rlcId.rbId = entCfg->rbId;
1249 rlcId.rbType = entCfg->rbType;
1251 rlcDbmFetchDlRbCbByRbId(gCb,&rlcId, &rbCb);
1254 /* Fill entCfm structure */
1255 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, rlcId.rbType, CKW_CFG_CFM_NOK,
1256 CKW_CFG_REAS_RB_UNKWN);
1257 DU_LOG("\nERROR --> RLC_DL : CellId[%u]:RbId[%d] not found",
1263 rbCb->rlcId.ueId = ueId;
1269 rlcDlTmmReEstablish(gCb,rbCb);
1275 rlcDlUmmReEstablish(gCb,rlcId,sndReEstInd,rbCb);
1281 rlcAmmDlReEstablish(gCb, rlcId, rbCb);
1286 /* Fill entCfm structure */
1287 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1288 CKW_CFG_CFM_OK, CKW_CFG_REAS_NONE);
1295 * @brief This primitive deletes the RBs in Ue Cb.
1298 * - If UE ID is 0 then
1299 * - Status Indication with Reason
1301 * - Check for UE CB is present
1302 * - If yes, Delete all RB CB in UE CB and Delete UE CB also.
1303 * - Else, Status Indication with Reason
1304 * - Fill entity confirmation
1306 * @param [in] gCb - RLC Instance Control Block
1307 * @param [in] ueId - UE Identifier
1308 * @param [in] cellId - CELL Identifier
1309 * @param [in] entCfg - Entity Configuration to be done.
1310 * @param [out] entCfm - Entity Confirmation
1321 RlcEntCfgInfo *entCfg,
1322 RlcEntCfgCfmInfo *entCfm
1325 S16 ret; /* Return Value */
1326 RlcDlUeCb *ueCb; /* UE Control Block */
1328 DU_LOG("\nDEBUG --> RLC_DL : rlcCfgDelUe(ueId(%d), cellId(%d), cfgType(%d))",
1335 /* Check for ueId is present or not */
1338 /* Fill entCfm structure */
1339 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1340 CKW_CFG_CFM_NOK, CKW_CFG_REAS_UE_UNKWN);
1341 DU_LOG("\nERROR --> RLC_DL : ueId(%d), cellId(%d)",
1348 ret = rlcDbmFetchDlUeCb(gCb,ueId, cellId, &ueCb);
1351 /* Fill entCfm structure */
1352 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1353 CKW_CFG_CFM_NOK, CKW_CFG_REAS_UE_UNKWN);
1354 DU_LOG("\nERROR --> RLC_DL : UEID:%d UeCb not found RBID:%d",
1361 rlcDelFrmDlL2Meas(gCb,cellId,ueId);
1362 rlcDbmDelAllDlL2MeasTbFrmUe(gCb,ueCb);
1365 rlcDbmDelDlUeCb(gCb,ueCb, FALSE);
1367 /* Fill entCfm structure */
1368 RLC_CFG_FILL_CFG_CFM(entCfm, entCfg->rbId, entCfg->rbType,
1369 CKW_CFG_CFM_OK, CKW_CFG_REAS_NONE);
1376 * @brief This primitive deletes the RBs in Ue Cb.
1379 * - If CELL ID is 0 then
1380 * - Status Indication with Reason
1382 * - Check for CELL CB is present
1383 * - If yes, Delete all RB CB in CELL CB and Delete CELL CB also.
1384 * - Else, Status Indication with Reason
1385 * - Fill entity confirmation
1387 * @param [in] cellId - CELL Identifier
1388 * @param [in] entCfg - Entity Configuration to be done.
1389 * @param [out] entCfm - Entity Confirmation
1399 RlcEntCfgInfo *entCfg,
1400 RlcEntCfgCfmInfo *entCfm
1403 RlcDlCellCb *cellCb; /* UE Control Block */
1404 uint8_t rbId; /* RB Identifier */
1406 DU_LOG("\nDEBUG --> RLC_DL : rlcCfgDelCell( cellId(%d), cfgType(%d)",
1411 rbId = entCfg->rbId;
1413 /* Check for ueId is present or not */
1416 /* Fill entCfm structure */
1417 RLC_CFG_FILL_CFG_CFM(entCfm, rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
1418 CKW_CFG_REAS_CELL_UNKWN);
1419 DU_LOG("\nERROR --> RLC_DL : cellId is 0 (%d) ",
1425 rlcDbmFetchDlCellCb(gCb,cellId, &cellCb);
1428 /* Fill entCfm structure */
1429 RLC_CFG_FILL_CFG_CFM(entCfm, rbId, entCfg->rbType, CKW_CFG_CFM_NOK,
1430 CKW_CFG_REAS_CELL_UNKWN);
1431 DU_LOG("\nERROR --> RLC_DL : CellCb not found for RBID:%d",
1437 rlcDbmDelDlCellCb(gCb,cellCb);
1439 /* Fill entCfm structure */
1440 /* kw005.201 added support for L2 Measurement */
1441 RLC_CFG_FILL_CFG_CFM(entCfm, rbId, entCfg->rbType, CKW_CFG_CFM_OK,
1448 * @brief This primitive changes the ueId of Ue Cb.
1451 * - If oldUeId and newUeId are
1452 * - Confirm the Status with Reason
1453 * - If UeId not present
1454 * - Confirm the Status with Reason
1456 * - Copy rbCbs from old UeCb to new UeCb
1458 * - Fill entity confirmation
1460 * @param [in] ueInfo - Old UE Information
1461 * @param [in] newUeInfo - New UE Information
1462 * @param [out] status - Status
1468 S16 rlcCfgDlUeIdChng
1472 CkwUeInfo *newUeInfo,
1477 /*kw004.201 Adding of Missing Trace in RLC PDCP*/
1479 if ( (ueInfo->ueId == newUeInfo->ueId) &&
1480 (ueInfo->cellId == newUeInfo->cellId))
1482 status->reason = CKW_CFG_REAS_SAME_UEID;
1483 status->status = CKW_CFG_CFM_NOK;
1484 DU_LOG("\nERROR --> RLC_DL : Old UeId[%d] same as new UeId[%d]",
1490 if(ROK == rlcDbmFetchDlUeCb(gCb,newUeInfo->ueId, newUeInfo->cellId, &ueCb))
1492 DU_LOG("\nERROR --> RLC_DL : NewUeId[%d]:ueCb already exists",
1494 status->reason = CKW_CFG_REAS_UE_EXISTS;
1495 status->status = CKW_CFG_CFM_NOK;
1499 if(ROK != rlcDbmFetchDlUeCb(gCb,ueInfo->ueId, ueInfo->cellId, &ueCb))
1502 DU_LOG("\nERROR --> RLC_DL : UeId [%d]: UeCb not found",
1504 status->reason = CKW_CFG_REAS_UE_UNKWN;
1505 status->status = CKW_CFG_CFM_NOK;
1510 rlcHdlMeasDlUeIdChg(gCb, ueInfo->cellId, ueInfo->ueId, newUeInfo->ueId);
1512 if(ROK != cmHashListDelete(&(gCb->u.dlCb->ueLstCp), (PTR) ueCb))
1514 DU_LOG("\nERROR --> RLC_DL : UeId[%u] HashList Deletion Failed",
1516 status->reason = CKW_CFG_REAS_UE_CREAT_FAIL;
1517 status->status = CKW_CFG_CFM_NOK;
1521 /* update the hash key with new values */
1522 ueCb->ueId = newUeInfo->ueId;
1523 ueCb->cellId = newUeInfo->cellId;
1525 if(ROK != cmHashListInsert(&(gCb->u.dlCb->ueLstCp),
1526 (PTR)ueCb, (uint8_t *)&(ueCb->ueId),
1527 (uint16_t) sizeof(CmLteRnti)))
1530 DU_LOG("\nERROR --> RLC_DL : UeId[%u] HashList Insertion Failed",
1532 status->reason = CKW_CFG_REAS_UE_CREAT_FAIL;
1533 status->status = CKW_CFG_CFM_NOK;
1540 /********************************************************************30**
1543 **********************************************************************/