X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrrlc%2Frlc_msg_hdl.c;h=e7085d0bd290cb6108a8ea75241598a38d2dd226;hb=def50dc175cebc67238db5f1acd5ff322a2279bd;hp=0e296ce237747050e3b49e7ae9e60acab5847bf3;hpb=82fed26a7029a52cb9add31cb57451e2a0073437;p=o-du%2Fl2.git diff --git a/src/5gnrrlc/rlc_msg_hdl.c b/src/5gnrrlc/rlc_msg_hdl.c index 0e296ce23..e7085d0bd 100644 --- a/src/5gnrrlc/rlc_msg_hdl.c +++ b/src/5gnrrlc/rlc_msg_hdl.c @@ -49,7 +49,7 @@ * * @details * - * Function : fillRlcUlUeCfgRsp + * Function : fillRlcUeCfgRsp * * Functionality: * Fills RLC UL UE Cfg Rsp from RlcCRsp @@ -57,13 +57,14 @@ * @params[in] Pointer to RlcCfgCfm * Pointer to RlcUeCfgRsp * - * @return void + * @return ROK/RFAILED * *****************************************************************/ -void fillRlcUlUeCfgRsp(RlcUeCfgRsp *rlcCfgRsp, RlcCfgCfmInfo *rlcCRsp) +uint8_t fillRlcUeCfgRsp(RlcUeCfgRsp *rlcCfgRsp, RlcCfgCfmInfo *rlcCRsp) { uint8_t idx; + uint8_t ret = ROK; rlcCfgRsp->cellId = rlcCRsp->cellId; rlcCfgRsp->ueIdx = rlcCRsp->ueId; @@ -73,13 +74,17 @@ void fillRlcUlUeCfgRsp(RlcUeCfgRsp *rlcCfgRsp, RlcCfgCfmInfo *rlcCRsp) { rlcCfgRsp->result = RLC_DU_APP_RSP_OK; rlcCfgRsp->reason = rlcCRsp->entCfgCfm[idx].status.reason; + ret = ROK; } else { rlcCfgRsp->result = RLC_DU_APP_RSP_NOK; rlcCfgRsp->reason = rlcCRsp->entCfgCfm[idx].status.reason; + ret = RFAILED; + break; } } + return ret; } /******************************************************************* @@ -124,13 +129,111 @@ void fillEntModeAndDir(uint8_t *entMode, uint8_t *direction, RlcMode rlcMode) break; } } + +/******************************************************************* + * + * @brief fills LC Cfgs to be Added in RLC + * + * @details + * + * Function : fillLcCfg + * + * Functionality: + * fills LC Cfgs to be Added in RLC + * + * @params[in] + * RlcEntCfgInfo pointer + * RlcBearerCfg pointer + * Config Type + * @return void + * + * ****************************************************************/ +void fillLcCfg(RlcEntCfgInfo *rlcUeCfg, RlcBearerCfg *duRlcUeCfg, uint8_t cfgType) +{ + uint8_t lChRbIdx = 0; + + rlcUeCfg->rbId = duRlcUeCfg->rbId; + rlcUeCfg->rbType = duRlcUeCfg->rbType; // SRB or DRB + rlcUeCfg->lCh[lChRbIdx].lChId = duRlcUeCfg->lcId; + rlcUeCfg->lCh[lChRbIdx].type = duRlcUeCfg->lcType; + fillEntModeAndDir(&rlcUeCfg->entMode, &rlcUeCfg->dir, duRlcUeCfg->rlcMode); + rlcUeCfg->cfgType = cfgType; + switch(rlcUeCfg->entMode) + { + + case CM_LTE_MODE_AM: + { + /* DL AM INFO */ + rlcUeCfg->m.amInfo.dl.snLen = duRlcUeCfg->u.amCfg->dlAmCfg.snLenDl; + rlcUeCfg->m.amInfo.dl.pollRetxTmr = duRlcUeCfg->u.amCfg->dlAmCfg.pollRetxTmr; + rlcUeCfg->m.amInfo.dl.pollPdu = duRlcUeCfg->u.amCfg->dlAmCfg.pollPdu; + rlcUeCfg->m.amInfo.dl.pollByte = duRlcUeCfg->u.amCfg->dlAmCfg.pollByte; + rlcUeCfg->m.amInfo.dl.maxRetx = duRlcUeCfg->u.amCfg->dlAmCfg.maxRetxTh; + + /* UL AM INFO */ + lChRbIdx++; //lChRbIdx = 1, indicates UL AM + rlcUeCfg->lCh[lChRbIdx].lChId = duRlcUeCfg->lcId; + rlcUeCfg->lCh[lChRbIdx].type = duRlcUeCfg->lcType; + rlcUeCfg->m.amInfo.ul.snLen = duRlcUeCfg->u.amCfg->ulAmCfg.snLenUl; + rlcUeCfg->m.amInfo.ul.staProhTmr = duRlcUeCfg->u.amCfg->ulAmCfg.statProhTmr; + rlcUeCfg->m.amInfo.ul.reOrdTmr = duRlcUeCfg->u.amCfg->ulAmCfg.reAssemTmr; + break; + } + case CM_LTE_MODE_UM: + { + /* UL UM CONFIG */ + rlcUeCfg->m.umInfo.ul.snLen = duRlcUeCfg->u.umBiDirCfg->ulUmCfg.snLenUlUm; + rlcUeCfg->m.umInfo.ul.reOrdTmr = duRlcUeCfg->u.umBiDirCfg->ulUmCfg.reAssemTmr; + + /* DL UM CONFIG */ + rlcUeCfg->m.umInfo.dl.snLen = duRlcUeCfg->u.umBiDirCfg->dlUmCfg.snLenDlUm; + break; + } + default: + break; + }/* End of switch(entMode) */ +} + +/******************************************************************* + * + * @brief fills LC Cfgs to be Added in RLC + * + * @details + * + * Function : fillRlcCfg + * + * Functionality: + * fills LC Cfgs to be Add/Mod/Del in RLC + * + * @params[in] + * RlcEntCfgInfo pointer + * RlcBearerCfg pointer + * @return void + * + ******************************************************************/ + +void fillRlcCfg(RlcCfgInfo *rlcUeCfg, RlcUeCfg *ueCfg) +{ + uint8_t lcIdx; + + rlcUeCfg->ueId = ueCfg->ueIdx; + rlcUeCfg->cellId = ueCfg->cellId; + rlcUeCfg->numEnt = ueCfg->numLcs; + rlcUeCfg->transId = getTransId(); + + for(lcIdx = 0; lcIdx < rlcUeCfg->numEnt; lcIdx++) + { + fillLcCfg(&rlcUeCfg->entCfg[lcIdx], &ueCfg->rlcLcCfg[lcIdx], ueCfg->rlcLcCfg[lcIdx].configType); + } +} + /******************************************************************* * * @brief Handles Ue Create Request from DU APP * * @details * - * Function : RlcUlProcUeCreateReq + * Function : RlcProcUeCreateReq * * Functionality: * Handles Ue create Request from DU APP @@ -141,80 +244,32 @@ void fillEntModeAndDir(uint8_t *entMode, uint8_t *direction, RlcMode rlcMode) * RFAILED - failure * * ****************************************************************/ -uint8_t RlcUlProcUeCreateReq(Pst *pst, RlcUeCfg *ueCfg) +uint8_t RlcProcUeCreateReq(Pst *pst, RlcUeCfg *ueCfg) { - uint8_t idx; uint8_t ret = ROK; - uint8_t lChRbIdx; RlcCfgInfo *rlcUeCfg = NULLP; RlcCb *rlcUeCb = NULLP; rlcUeCb = RLC_GET_RLCCB(pst->dstInst); RLC_ALLOC(rlcUeCb, rlcUeCfg, sizeof(RlcCfgInfo)); - if(rlcUeCfg) + if(rlcUeCfg == NULLP) + { + DU_LOG("\nRLC: Failed to allocate memory at RlcProcUeCreateReq()"); + ret = RFAILED; + } + else { memset(rlcUeCfg, 0, sizeof(RlcCfgInfo)); - - rlcUeCfg->ueId = ueCfg->ueIdx; - rlcUeCfg->cellId = ueCfg->cellId; - rlcUeCfg->numEnt = ueCfg->numLcs; - rlcUeCfg->transId = getTransId(); - - for(idx = 0; idx < ueCfg->numLcs; idx++) - { - lChRbIdx = 0; - rlcUeCfg->entCfg[idx].rbId = ueCfg->rlcBearerCfg[idx].rbId; - rlcUeCfg->entCfg[idx].rbType = ueCfg->rlcBearerCfg[idx].rbType; // SRB or DRB - rlcUeCfg->entCfg[idx].lCh[lChRbIdx].lChId = ueCfg->rlcBearerCfg[idx].lcId; - rlcUeCfg->entCfg[idx].lCh[lChRbIdx].type = ueCfg->rlcBearerCfg[idx].lcType; - fillEntModeAndDir(&rlcUeCfg->entCfg[idx].entMode, &rlcUeCfg->entCfg[idx].dir,\ - ueCfg->rlcBearerCfg[idx].rlcMode); - rlcUeCfg->entCfg[idx].cfgType = CKW_CFG_ADD; - switch(rlcUeCfg->entCfg[idx].entMode) - { - - case CM_LTE_MODE_AM: - { - /* DL AM INFO */ - rlcUeCfg->entCfg[idx].m.amInfo.dl.snLen = ueCfg->rlcBearerCfg[idx].u.amCfg.dlAmCfg.snLenDl; - rlcUeCfg->entCfg[idx].m.amInfo.dl.pollRetxTmr = ueCfg->rlcBearerCfg[idx].u.amCfg.dlAmCfg.pollRetxTmr; - rlcUeCfg->entCfg[idx].m.amInfo.dl.pollPdu = ueCfg->rlcBearerCfg[idx].u.amCfg.dlAmCfg.pollPdu; - rlcUeCfg->entCfg[idx].m.amInfo.dl.pollByte = ueCfg->rlcBearerCfg[idx].u.amCfg.dlAmCfg.pollByte; - rlcUeCfg->entCfg[idx].m.amInfo.dl.maxRetx = ueCfg->rlcBearerCfg[idx].u.amCfg.dlAmCfg.maxRetxTh; - - /* UL AM INFO */ - lChRbIdx++; //lChRbIdx = 1, indicates UL AM - rlcUeCfg->entCfg[idx].lCh[lChRbIdx].lChId = ueCfg->rlcBearerCfg[idx].lcId; - rlcUeCfg->entCfg[idx].lCh[lChRbIdx].type = ueCfg->rlcBearerCfg[idx].lcType; - rlcUeCfg->entCfg[idx].m.amInfo.ul.snLen = ueCfg->rlcBearerCfg[idx].u.amCfg.ulAmCfg.snLenUl; - rlcUeCfg->entCfg[idx].m.amInfo.ul.staProhTmr = ueCfg->rlcBearerCfg[idx].u.amCfg.ulAmCfg.statProhTmr; - rlcUeCfg->entCfg[idx].m.amInfo.ul.reOrdTmr = ueCfg->rlcBearerCfg[idx].u.amCfg.ulAmCfg.reAssemTmr; - break; - } - case CM_LTE_MODE_UM: - { - /* UL UM CONFIG */ - rlcUeCfg->entCfg[idx].m.umInfo.ul.snLen = ueCfg->rlcBearerCfg[idx].u.umBiDirCfg.ulUmCfg.snLenUlUm; - rlcUeCfg->entCfg[idx].m.umInfo.ul.reOrdTmr = ueCfg->rlcBearerCfg[idx].u.umBiDirCfg.ulUmCfg.reAssemTmr; - - /* DL UM CONFIG */ - rlcUeCfg->entCfg[idx].m.umInfo.dl.snLen = ueCfg->rlcBearerCfg[idx].u.umBiDirCfg.dlUmCfg.snLenDlUm; - break; - } - default: - break; - }/* End of switch(entMode) */ - } + fillRlcCfg(rlcUeCfg, ueCfg); ret = RlcProcCfgReq(pst, rlcUeCfg); - } - else - { - DU_LOG("\nRLC: Failed to allocate memory "); - ret = RFAILED; - } - RLC_FREE_SHRABL_BUF(pst->region, pst->pool, ueCfg, sizeof(RlcUeCfg)); - return ret; + if(ret != ROK) + DU_LOG("\nRLC: Failed to configure Add/Mod/Del entities at RlcProcUeCreateReq()"); + + } + RLC_FREE_SHRABL_BUF(pst->region, pst->pool, ueCfg, sizeof(RlcUeCfg)); + return ret; } + /******************************************************************* * * @brief filling the structure of rrc delivery msg info @@ -565,6 +620,52 @@ uint8_t RlcProcSchedResultRpt(Pst *pst, RlcSchedResultRpt *schRep) return ret; } + +/******************************************************************* + * + * @brief Handles Ue Reconfig Request from DU APP + * + * @details + * + * Function : RlcProcUeReconfigReq + * + * Functionality: + * Handles Ue Reconfig Request from DU APP + * + * @params[in] Post structure pointer + * RlcUeCfg pointer + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +uint8_t RlcProcUeReconfigReq(Pst *pst, RlcUeCfg *ueCfg) +{ + uint8_t ret = ROK; + RlcCfgInfo *rlcUeCfg = NULLP; //Seed code Rlc cfg struct + RlcCb *rlcUeCb = NULLP; + + DU_LOG("\nRLC: UE reconfig request received. CellID[%d] UEIDX[%d]",ueCfg->cellId, ueCfg->ueIdx); + + rlcUeCb = RLC_GET_RLCCB(pst->dstInst); + RLC_ALLOC(rlcUeCb, rlcUeCfg, sizeof(RlcCfgInfo)); + if(rlcUeCfg == NULLP) + { + DU_LOG("\nRLC: Failed to allocate memory at RlcProcUeReconfigReq()"); + ret = RFAILED; + } + else + { + memset(rlcUeCfg, 0, sizeof(RlcCfgInfo)); + fillRlcCfg(rlcUeCfg, ueCfg); + ret = RlcProcCfgReq(pst, rlcUeCfg); + if(ret != ROK) + DU_LOG("\nRLC: Failed to configure Add/Mod/Del entities at RlcProcUeReconfigReq()"); + } + + RLC_FREE_SHRABL_BUF(pst->region, pst->pool, ueCfg, sizeof(RlcUeCfg)); + return ret; +} + /********************************************************************** End of file **********************************************************************/