ODU_COPY_FIX_BUF_TO_MSG(fixBuf, mBuf, 0, len, (MsgLen *)©Len);
}
+/*******************************************************************
+ *
+ * @brief Builds PLMN ID
+ *
+ * @details
+ *
+ * Function : plmnBuildId
+ *
+ * Functionality: Building the PLMN ID
+ *
+ * @params[in] PLMNID plmn
+ * @params[out] PLMNID in string format
+ * @return ROK - success
+ * RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t buildPlmnId(Plmn plmn, uint8_t *buf)
+{
+ uint8_t mncCnt;
+ mncCnt = 2;
+ buf[0] = ((plmn.mcc[1] << 4) | (plmn.mcc[0]));
+ if(mncCnt == 2)
+ {
+ buf[1] = ((0xf0) | (plmn.mcc[2]));
+ buf[2] = ((plmn.mnc[1] << 4) | (plmn.mnc[0]));
+ }
+ else
+ {
+ buf[1] = ((plmn.mnc[0] << 4) | (plmn.mcc[2]));
+ buf[2] = ((plmn.mnc[2] << 4) | (plmn.mnc[1]));
+ }
+ return ROK;
+}
+
/**********************************************************************
End of file
void freqDomRscAllocType0(uint16_t startPrb, uint16_t prbSize, uint8_t *freqDomain);
void oduCpyFixBufToMsg(uint8_t *fixBuf, Buffer *mBuf, uint16_t len);
+uint8_t buildPlmnId(Plmn plmn, uint8_t *buf);
#endif
return 0;
} /* PrepFinalEncBuf */
-/*******************************************************************
- *
- * @brief Builds PLMN ID
- *
- * @details
- *
- * Function : plmnBuildId
- *
- * Functionality: Building the PLMN ID
- *
- * @params[in] PLMNID plmn
- * OCTET_STRING_t *octe
- * @return ROK - success
- * RFAILED - failure
- *
- * ****************************************************************/
-uint8_t buildPlmnId(Plmn plmn, uint8_t *buf)
-{
- uint8_t mncCnt;
- mncCnt = 2;
- buf[0] = ((plmn.mcc[1] << 4) | (plmn.mcc[0]));
- if(mncCnt == 2)
- {
- buf[1] = ((0xf0) | (plmn.mcc[2]));
- buf[2] = ((plmn.mnc[1] << 4) | (plmn.mnc[0]));
- }
- else
- {
- buf[1] = ((plmn.mnc[0] << 4) | (plmn.mcc[2]));
- buf[2] = ((plmn.mnc[2] << 4) | (plmn.mnc[1]));
- }
- return ROK;
-}
-
/*******************************************************************
*
* @brief Fills the RicId
int encBufSize;
int PrepFinalEncBuf(const void *buffer, size_t size, void *encodedBuf);
-uint8_t buildPlmnId(Plmn plmn, uint8_t *buf);
uint8_t fillBitString(BIT_STRING_t *id, uint8_t unusedBits, uint8_t byteSize, uint8_t val);
uint8_t bitStringToInt(BIT_STRING_t *bitString, void *val);
S16 BuildNrCellId(BIT_STRING_t *nrcell)
{
- uint8_t tmp;
- for (tmp = 0 ; tmp < nrcell->size-1; tmp++)
- {
- nrcell->buf[tmp] = 0;
- }
+ memset(nrcell->buf, 0, nrcell->size);
nrcell->buf[4] = 16;
nrcell->bits_unused = 4;
nrcell->size = 5 * sizeof(uint8_t);
dlRRCMsg->protocolIEs.list.array[idx]->criticality = Criticality_reject;
dlRRCMsg->protocolIEs.list.array[idx]->value.present = \
DLRRCMessageTransferIEs__value_PR_SRBID;
- dlRRCMsg->protocolIEs.list.array[idx]->value.choice.SRBID = SRB1;
+ dlRRCMsg->protocolIEs.list.array[idx]->value.choice.SRBID = SRB0;
/* RRCContainer */
idx++;
uint8_t BuildNrcgi(NRCGI_t *nrcgi)
{
uint8_t ret;
- uint8_t unused = 4;
+ uint8_t unused_bits = 4;
uint8_t byteSize = 5;
- uint8_t val = 16;
+ uint8_t val = 1;
/* Allocate Buffer Memory */
nrcgi->pLMN_Identity.size = 3 * sizeof(uint8_t);
CU_ALLOC(nrcgi->pLMN_Identity.buf, nrcgi->pLMN_Identity.size);
{
return RFAILED;
}
+#if 0
ret = fillBitString(&nrcgi->nRCellIdentity, unused, byteSize, val);
if(ret != ROK)
{
return RFAILED;
}
+#endif
+ memset(nrcgi->nRCellIdentity.buf, 0, nrcgi->nRCellIdentity.size);
+ nrcgi->nRCellIdentity.buf[0] |= val;
+ nrcgi->nRCellIdentity.bits_unused = unused_bits;
+
return ROK;
}
/*******************************************************************
#define CU_ID 1
#define CRNTI 17017
#define CELL_INDEX 0
+#define SRB0 0
#define SRB1 1
#define SRB2 2
#define DRB1 1
* RFAILED - failure
*
* ****************************************************************/
-uint8_t duProcCellsToBeActivated(uint16_t nci, uint16_t nRPci)
+uint8_t duProcCellsToBeActivated(uint8_t *plmnStr, uint16_t nci, uint16_t nRPci)
{
uint8_t ret = ROK;
DuCellCb *cellCb = NULLP;
+ uint8_t cfgIdx, tmpPlmn[4];
- cellCb = duCb.cfgCellLst[nci-1];
-
- if(!cellCb)
+ for(cfgIdx=0; cfgIdx<duCb.numCfgCells; cfgIdx++)
{
- DU_LOG("\nDU APP : No Cell found for NCI %d", nci);
- return RFAILED;
+ memset(tmpPlmn, 0, 4);
+ buildPlmnId(duCb.cfgCellLst[cfgIdx]->cellInfo.nrEcgi.plmn, tmpPlmn);
+ if(duCb.cfgCellLst[cfgIdx]->cellInfo.nrEcgi.cellId == nci &&
+ (strcmp((const char*)tmpPlmn, (const char*)plmnStr) == 0))
+ {
+ cellCb = duCb.cfgCellLst[cfgIdx];
+ break;
+ }
+ else
+ {
+ DU_LOG("\nDU APP : No Cell found for NCI %d", nci);
+ return RFAILED;
+ }
}
cellCb->cellStatus = ACTIVATION_IN_PROGRESS;
cellCb->cellInfo.nrPci = nRPci;
- /* Now remove this cell from configured list and move to active list */
- duCb.cfgCellLst[nci-1] = NULL;
- duCb.actvCellLst[nci-1] = cellCb;
- duCb.numActvCells++;
- /* Build and send Mac Cell Cfg for the number of active cells */
- ret = duBuildAndSendMacCellCfg();
- if(ret != ROK)
+ duCb.actvCellLst[duCb.numActvCells++] = cellCb;
+
+ if(duBuildAndSendMacCellCfg(cellCb->cellId) != ROK)
{
- DU_LOG("\nDU APP : MacCellCfg build and send failed at procCellsToBeActivated()");
- /* Move cellCb back to cfgCellList */
- duCb.cfgCellLst[nci-1] = duCb.actvCellLst[nci-1];
- duCb.actvCellLst[nci-1] = NULLP;
- duCb.numActvCells--;
- return RFAILED;
+ DU_LOG("\nDU APP : macCellCfg build and send failed");
+ /* Delete cell from actvCellList */
+ duCb.actvCellLst[--(duCb.numActvCells)] = NULLP;
+ ret = RFAILED;
}
return ret;
}
{
DU_LOG("\nDU APP: GNB-DU config update Ack received ");
}
+/*******************************************************************
+*
+* @brief Returns cellCb based on cell ID
+*
+* @details
+*
+* Function : duGetCellCb
+*
+* Functionality: Returns DU APP CellCb based on cell ID
+*
+* @params[in] F1AP_PDU_t ASN decoded F1AP message
+* @return ROK - success
+* RFAILED - failure
+*
+* ****************************************************************/
+uint8_t duGetCellCb(uint16_t cellId, DuCellCb **cellCb)
+{
+ uint8_t cellIdx;
+ for(cellIdx=0; cellIdx<duCb.numActvCells; cellIdx++)
+ {
+ if(duCb.actvCellLst[cellIdx]->cellId == cellId)
+ *cellCb = duCb.actvCellLst[cellIdx];
+ break;
+ }
+
+ if(!*cellCb)
+ {
+ DU_LOG("\nDU APP : Cell Id %d not found in DU APP", cellId);
+ return RFAILED;
+ }
+
+ return ROK;
+}
/**********************************************************************
End of file
#ifndef __DU_CELL_MGR_H__
#define __DU_CELL_MGR_H__
-uint8_t duBuildAndSendMacCellCfg();
-uint8_t duProcCellsToBeActivated(uint16_t nci, uint16_t nRPci);
+uint8_t duBuildAndSendMacCellCfg(uint16_t cellId);
+uint8_t duProcCellsToBeActivated(uint8_t *plmnStr, uint16_t nci, uint16_t nRPci);
void duProcGnbDuCfgUpdAckMsg();
void duProcF1SetupRsp();
+uint8_t duGetCellCb(uint16_t cellId, DuCellCb **cellCb);
#endif
/**********************************************************************
End of file
duCfgParam.mibParams = mib;
/* SIB1 Params */
+ memset(&sib1.plmn, 0, sizeof(Plmn));
sib1.plmn.mcc[0] = PLMN_MCC0;
sib1.plmn.mcc[1] = PLMN_MCC1;
sib1.plmn.mcc[2] = PLMN_MCC2;
sib1.plmn.mnc[0] = PLMN_MNC0;
sib1.plmn.mnc[1] = PLMN_MNC1;
- sib1.plmn.mnc[2] = PLMN_MNC2;
sib1.tac = DU_TAC;
sib1.ranac = DU_RANAC;
sib1.cellIdentity = CELL_IDENTITY;
for(i=0; i<DEFAULT_CELLS; i++)
{
+ memset(&duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.nrCgi.plmn, 0, sizeof(Plmn));
duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.nrCgi.plmn.mcc[0] = PLMN_MCC0;
duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.nrCgi.plmn.mcc[1] = PLMN_MCC1;
duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.nrCgi.plmn.mcc[2] = PLMN_MCC2;
duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.nrCgi.plmn.mnc[0] = PLMN_MNC0;
duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.nrCgi.plmn.mnc[1] = PLMN_MNC1;
- duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.nrCgi.plmn.mnc[2] = PLMN_MNC2;
/*Cell ID */
duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.nrCgi.cellId = NR_CELL_ID;
/* List of Available PLMN */
for(j=0;j<MAX_PLMN;j++)
{
+ memset(&duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.plmn[j], 0, sizeof(Plmn));
duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.plmn[j].mcc[0] = PLMN_MCC0;
duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.plmn[j].mcc[1] = PLMN_MCC1;
duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.plmn[j].mcc[2] = PLMN_MCC2;
duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.plmn[j].mnc[0] = PLMN_MNC0;
duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.plmn[j].mnc[1] = PLMN_MNC1;
- duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.plmn[j].mnc[2] = PLMN_MNC2;
}
/* List of Extended PLMN */
for(j=0;j<MAX_PLMN;j++)
{
+ memset(&duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.extPlmn[j], 0, sizeof(Plmn));
duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.extPlmn[j].mcc[0] = PLMN_MCC0;
duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.extPlmn[j].mcc[1] = PLMN_MCC1;
duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.extPlmn[j].mcc[2] = PLMN_MCC2;
duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.extPlmn[j].mnc[0] = PLMN_MNC0;
duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.extPlmn[j].mnc[1] = PLMN_MNC1;
- duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.extPlmn[j].mnc[2] = PLMN_MNC2;
}
/* TAC and EPSTAC */
/* NR Mode info */
duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.nrArfcn = NR_UL_ARFCN;
duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.sulInfo.sulArfcn = SUL_ARFCN;
- duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.sulInfo.sulTxBw.nrScs = SCS_120;
- duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.sulInfo.sulTxBw.nrb = NRB_66;
+ duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.sulInfo.sulTxBw.nrScs = SCS_15;
+ duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.sulInfo.sulTxBw.nrb = NRB_106;
#if 0
/* NR Mode info */
duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.nrArfcn = NR_ARFCN;
duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.sulInfo.sulArfcn = SUL_ARFCN;
duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.sulInfo.sulTxBw.nrScs = SCS_15;
- duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.sulInfo.sulTxBw.nrb = NRB_160;
+ duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.sulInfo.sulTxBw.nrb = NRB_106;
for(j=0;j<MAXNRCELLBANDS;j++)
{
}
duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.nrArfcn = NR_DL_ARFCN;
duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.sulInfo.sulArfcn = SUL_ARFCN;
- duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.sulInfo.sulTxBw.nrScs = SCS_120;
- duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.sulInfo.sulTxBw.nrb = NRB_66;
+ duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.sulInfo.sulTxBw.nrScs = SCS_15;
+ duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.sulInfo.sulTxBw.nrb = NRB_106;
for(j=0;j<MAXNRCELLBANDS;j++)
{
duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.freqBand[j].nrFreqBand = NR_FREQ_BAND;
}
}
- duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.ulTxBw.nrScs = SCS_120;
- duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.ulTxBw.nrb = NRB_66;
+ duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.ulTxBw.nrScs = SCS_15;
+ duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.ulTxBw.nrb = NRB_106;
- duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.dlTxBw.nrScs = SCS_120;
- duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.dlTxBw.nrb = NRB_66;
+ duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.dlTxBw.nrScs = SCS_15;
+ duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.dlTxBw.nrb = NRB_106;
#if 0
duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrTxBw.nrScs = SCS_15;
- duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrTxBw.nrb = NRB_160;
+ duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrTxBw.nrb = NRB_106;
#endif
/*Measurement Config and Cell Config */
duCfgParam.srvdCellLst[i].duCellInfo.measTimeCfg = TIME_CFG;
/* Broadcast PLMN Identity */
for(j=0;j<MAXBPLMNNRMINUS1;j++)
- {
+ {
for(k=0;k<MAX_PLMN;k++)
{
+ memset(&duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].plmn[k], 0, sizeof(Plmn));
duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].plmn[k].mcc[0] = PLMN_MCC0;
duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].plmn[k].mcc[1] = PLMN_MCC1;
duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].plmn[k].mcc[2] = PLMN_MCC2;
duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].plmn[k].mnc[0] = PLMN_MNC0;
duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].plmn[k].mnc[1] = PLMN_MNC1;
- duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].plmn[k].mnc[2] = PLMN_MNC2;
}
/* Extended PLMN List */
for(k=0;k<MAX_PLMN;k++)
{
+ memset(&duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].extPlmn[k], 0, sizeof(Plmn));
duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].extPlmn[k].mcc[0] = PLMN_MCC0;
duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].extPlmn[k].mcc[1] = PLMN_MCC1;
duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].extPlmn[k].mcc[2] = PLMN_MCC2;
duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].extPlmn[k].mnc[0] = PLMN_MNC0;
duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].extPlmn[k].mnc[1] = PLMN_MNC1;
- duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].extPlmn[k].mnc[2] = PLMN_MNC2;
}
duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].tac = DU_TAC;
/* Macro definitions for F1 procedures */
#define CU_DU_NAME_LEN_MAX 30 /* Max length of CU/DU name string */
#define MAX_F1_CONNECTIONS 65536 /* Max num of F1 connections */
-#define MAX_PLMN 6 /* Max num of broadcast PLMN ids */
+#define MAX_PLMN 1 /* Max num of broadcast PLMN ids */
#define MAXNRARFCN 3279165 /* Maximum values of NRAFCN */
#define MAXNRCELLBANDS 2 /* Maximum number of frequency bands */
#define MAX_NUM_OF_SLICE_ITEMS 1024 /* Maximum number of signalled slice support items */
return ROK;
}
+/*******************************************************************
+ *
+ * @brief Builds NRCell ID
+ *
+ * @details
+ *
+ * Function : BuildNrCellId
+ *
+ * Functionality: Building the NR Cell ID
+ *
+ * @params[in] BIT_STRING_t *nrcell
+ * @return ROK - success
+ * RFAILED - failure
+ *
+ * ****************************************************************/
+
+S16 BuildNrCellId(BIT_STRING_t *nrcell)
+{
+ memset(nrcell->buf, 0, nrcell->size);
+ nrcell->buf[4] = 16;
+ nrcell->bits_unused = 4;
+ return ROK;
+}
+
/*******************************************************************
*
* @brief Builds Nrcgi
uint8_t BuildNrcgi(NRCGI_t *nrcgi)
{
uint8_t ret;
- uint8_t unused = 4;
uint8_t byteSize = 5;
- uint8_t val = 16;
/* Allocate Buffer Memory */
nrcgi->pLMN_Identity.size = PLMN_SIZE * sizeof(uint8_t);
DU_ALLOC(nrcgi->pLMN_Identity.buf, nrcgi->pLMN_Identity.size);
return RFAILED;
}
/*nrCellIdentity*/
- //ret = BuildNrCellId(&nrcgi->nRCellIdentity);
nrcgi->nRCellIdentity.size = byteSize * sizeof(uint8_t);
DU_ALLOC(nrcgi->nRCellIdentity.buf, nrcgi->nRCellIdentity.size);
if(nrcgi->nRCellIdentity.buf == NULLP)
{
return RFAILED;
}
- ret = fillBitString(&nrcgi->nRCellIdentity, unused, byteSize, val);
- if(ret != ROK)
- {
- return RFAILED;
- }
+ BuildNrCellId(&nrcgi->nRCellIdentity);
+
return ROK;
}
/*******************************************************************
cell = cellsToActivate.list.array[idx]->value.choice.Cells_to_be_Activated_List_Item;
bitStringToInt(&cell.nRCGI.nRCellIdentity, &nci);
- if(nci <= 0 || nci > MAX_NUM_CELL)
- {
- DU_LOG("\nDU APP : Invalid NCI %d", nci);
- return RFAILED;
- }
if(cell.nRPCI)
{
pci = *cell.nRPCI;
}
- ret = duProcCellsToBeActivated(nci, pci);
+ ret = duProcCellsToBeActivated(cell.nRCGI.pLMN_Identity.buf, nci, pci);
}
return ret;
}
#include "legtp.h"
#include "lphy_stub.h"
#include "du_utils.h"
+#include "du_cell_mgr.h"
uint8_t rlcDlCfg = 0;
uint8_t numRlcDlSaps = 0;
{
DuCellCb *cell = NULLP;
DU_ALLOC(cell, sizeof(DuCellCb))
- if(cell == NULLP)
+ if(cell == NULLP)
+ {
+ DU_LOG("\nDU_APP : Memory Allocation failed in duProcCfgComplete");
+ ret = RFAILED;
+ }
+ else
+ {
+ uint8_t idx1;
+ memset(cell, 0, sizeof(DuCellCb));
+ cell->cellId = ++cellId;
+ memset(&cell->cellInfo.nrEcgi.plmn, 0, sizeof(Plmn));
+ cell->cellInfo.nrEcgi.plmn.mcc[0] = PLMN_MCC0;
+ cell->cellInfo.nrEcgi.plmn.mcc[1] = PLMN_MCC1;
+ cell->cellInfo.nrEcgi.plmn.mcc[2] = PLMN_MCC2;
+ cell->cellInfo.nrEcgi.plmn.mnc[0] = PLMN_MNC0;
+ cell->cellInfo.nrEcgi.plmn.mnc[1] = PLMN_MNC1;
+ cell->cellInfo.nrEcgi.cellId = NR_CELL_ID;
+ cell->cellInfo.nrPci = NR_PCI;
+ cell->cellInfo.fiveGsTac = DU_TAC;
+ memset(&cell->cellInfo.plmn[idx1], 0, sizeof(Plmn));
+ for(idx1=0; idx1<MAX_PLMN; idx1++)
{
- DU_LOG("\nDU_APP : Memory Allocation failed in duProcCfgComplete");
- ret = RFAILED;
+ cell->cellInfo.plmn[idx1].mcc[0] = PLMN_MCC0;
+ cell->cellInfo.plmn[idx1].mcc[1] = PLMN_MCC1;
+ cell->cellInfo.plmn[idx1].mcc[2] = PLMN_MCC2;
+ cell->cellInfo.plmn[idx1].mnc[0] = PLMN_MNC0;
+ cell->cellInfo.plmn[idx1].mnc[1] = PLMN_MNC1;
}
- else
- {
- uint32_t nci;
- uint8_t idx1;
- memset(cell, 0, sizeof(DuCellCb));
- cell->cellId = ++cellId;
- cell->cellInfo.nrEcgi.plmn.mcc[0] = PLMN_MCC0;
- cell->cellInfo.nrEcgi.plmn.mcc[1] = PLMN_MCC1;
- cell->cellInfo.nrEcgi.plmn.mcc[2] = PLMN_MCC2;
- cell->cellInfo.nrEcgi.plmn.mnc[0] = PLMN_MNC0;
- cell->cellInfo.nrEcgi.plmn.mnc[1] = PLMN_MNC1;
- cell->cellInfo.nrEcgi.plmn.mnc[2] = PLMN_MNC2;
- cell->cellInfo.nrEcgi.cellId = NR_CELL_ID;
- cell->cellInfo.nrPci = NR_PCI;
- cell->cellInfo.fiveGsTac = DU_TAC;
- for(idx1=0; idx1<MAX_PLMN; idx1++)
- {
- cell->cellInfo.plmn[idx1].mcc[0] = PLMN_MCC0;
- cell->cellInfo.plmn[idx1].mcc[1] = PLMN_MCC1;
- cell->cellInfo.plmn[idx1].mcc[2] = PLMN_MCC2;
- cell->cellInfo.plmn[idx1].mnc[0] = PLMN_MNC0;
- cell->cellInfo.plmn[idx1].mnc[1] = PLMN_MNC1;
- cell->cellInfo.plmn[idx1].mnc[2] = PLMN_MNC2;
- }
- cell->cellInfo.maxUe = duCfgParam.maxUe;
- cell->cellStatus = CELL_OUT_OF_SERVICE;
- nci = (uint16_t)cell->cellInfo.nrEcgi.cellId;
+ cell->cellInfo.maxUe = duCfgParam.maxUe;
+ cell->cellStatus = CELL_OUT_OF_SERVICE;
- duCb.cfgCellLst[nci-1] = cell;
- duCb.numCfgCells++;
- }
+ duCb.cfgCellLst[duCb.numCfgCells] = cell;
+ duCb.numCfgCells++;
}
+ }
if(ret != RFAILED)
{
//Start layer configs
***************************************************************************/
uint8_t duHandleMacCellCfgCfm(Pst *pst, MacCellCfgCfm *macCellCfgCfm)
{
- uint8_t actvCellIdx = 0;
- uint8_t ret = ROK;
+ uint8_t actvCellIdx = 0;
+ uint8_t ret = ROK;
for(actvCellIdx = 0; actvCellIdx < MAX_NUM_CELL; actvCellIdx++)
{
* ****************************************************************/
uint8_t duHandleSlotInd(Pst *pst, SlotIndInfo *slotInfo)
{
+ DuCellCb *cellCb = NULLP;
+
if(slotInfo->cellId <=0 || slotInfo->cellId > MAX_NUM_CELL)
{
DU_LOG("\nDU APP : Invalid Cell Id %d", slotInfo->cellId);
+ return RFAILED;
}
- if(!duCb.actvCellLst[slotInfo->cellId-1]->firstSlotIndRcvd)
+
+ if(duGetCellCb(slotInfo->cellId, &cellCb) != ROK)
+ return RFAILED;
+
+ if(!cellCb->firstSlotIndRcvd)
{
-#ifdef ODU_SLOT_IND_DEBUG_LOG
- DU_LOG("\nDU APP : Slot Indication received");
-#endif
- duCb.actvCellLst[slotInfo->cellId-1]->firstSlotIndRcvd = true;
- if((duCb.actvCellLst[slotInfo->cellId-1] != NULL) && \
- (duCb.actvCellLst[slotInfo->cellId-1]->cellStatus == \
- ACTIVATION_IN_PROGRESS))
+ DU_LOG("\nDU APP : Slot Indication received");
+ cellCb->firstSlotIndRcvd = true;
+ if((cellCb != NULL) && (cellCb->cellStatus == ACTIVATION_IN_PROGRESS))
{
DU_LOG("\nDU APP : 5G-NR Cell %d is UP", slotInfo->cellId);
- duCb.actvCellLst[slotInfo->cellId-1]->cellStatus = ACTIVATED;
+ cellCb->cellStatus = ACTIVATED;
}
-
}
/* TODO : Slot Indication to be moved out of EGTP_TEST when
return RFAILED;
}
- for(uint8_t id = 0; id < MAX_NUM_CELL; id++)
+ for(uint8_t id = 0; id < duCb.numActvCells; id++)
{
if(duCb.actvCellLst[id])
{
duCb.actvCellLst[id]->firstSlotIndRcvd = FALSE;
- cellStartInfo->cellId = duCb.actvCellLst[id]->cellInfo.nrEcgi.cellId;
+ cellStartInfo->cellId = duCb.actvCellLst[id]->cellId;
/* Fill Pst */
FILL_PST_DUAPP_TO_MAC(pst, EVENT_MAC_CELL_START_REQ);
* ****************************************************************/
uint8_t duHandleStopInd(Pst *pst, MacCellStopInfo *cellStopId)
{
+ DuCellCb *cellCb = NULLP;
+
if(cellStopId->cellId <=0 || cellStopId->cellId > MAX_NUM_CELL)
{
DU_LOG("\nDU APP : Invalid Cell Id %d", cellStopId->cellId);
}
- if(duCb.actvCellLst[cellStopId->cellId-1] != NULL)
+
+ if(duGetCellCb(cellStopId->cellId, &cellCb) != ROK)
+ return RFAILED;
+
+ if(cellCb->firstSlotIndRcvd)
{
- if(duCb.actvCellLst[cellStopId->cellId-1]->firstSlotIndRcvd)
+ cellCb->firstSlotIndRcvd = false;
+ if((cellCb->cellStatus == ACTIVATED))
{
- duCb.actvCellLst[cellStopId->cellId-1]->firstSlotIndRcvd = false;
- if((duCb.actvCellLst[cellStopId->cellId-1]->cellStatus == \
- ACTIVATED))
- {
- DU_LOG("\nDU APP : 5G-NR Cell %d is DOWN", cellStopId->cellId);
- duCb.actvCellLst[cellStopId->cellId-1]->cellStatus = DELETION_IN_PROGRESS;
- }
+ DU_LOG("\nDU APP : 5G-NR Cell %d is DOWN", cellStopId->cellId);
+ cellCb->cellStatus = DELETION_IN_PROGRESS;
}
}
if((pst->selector == ODU_SELECTOR_LWLC) || (pst->selector == ODU_SELECTOR_TC))
DU_FREE_SHRABL_BUF(MAC_MEM_REGION, pst->pool, cellStopId, sizeof(MacCellStopInfo));
+ cellCb->cellStatus = CELL_OUT_OF_SERVICE; //TODO: cell status must be set to OOS after all UE and cell cleanup which is not
+ //supported now
+
+
return ROK;
}
* ****************************************************************/
uint8_t DuProcRlcUlRrcMsgTrans(Pst *pst, RlcUlRrcMsgInfo *ulRrcMsgInfo)
{
+ DuCellCb *cellCb = NULLP;
DuUeCb ueCb;
+
+ if(duGetCellCb(ulRrcMsgInfo->cellId, &cellCb) != ROK)
+ return RFAILED;
- ueCb = duCb.actvCellLst[ulRrcMsgInfo->cellId -1]->ueCb[ulRrcMsgInfo->ueIdx -1];
+ ueCb = cellCb->ueCb[ulRrcMsgInfo->ueIdx -1];
+
+
BuildAndSendULRRCMessageTransfer(ueCb, ulRrcMsgInfo->lcId, ulRrcMsgInfo->msgLen, \
ulRrcMsgInfo->rrcMsg);
* ****************************************************************/
uint8_t DuProcRlcRrcDeliveryReport(Pst *pst, RrcDeliveryReport *rrcDeliveryReport)
{
- DuUeCb ueCb;
- uint8_t ret = RFAILED;
+ DuCellCb *cellCb = NULLP;
+ DuUeCb ueCb;
+ uint8_t ret = RFAILED;
- ueCb = duCb.actvCellLst[rrcDeliveryReport->cellId -1]->ueCb[rrcDeliveryReport->ueIdx -1];
- ret = BuildAndSendRrcDeliveryReport(ueCb.gnbCuUeF1apId, ueCb.gnbDuUeF1apId,rrcDeliveryReport);
+ if(duGetCellCb(rrcDeliveryReport->cellId, &cellCb) != ROK)
+ return RFAILED;
+
+ ueCb = cellCb->ueCb[rrcDeliveryReport->ueIdx -1];
+ ret = BuildAndSendRrcDeliveryReport(ueCb.gnbCuUeF1apId, ueCb.gnbDuUeF1apId,rrcDeliveryReport);
- DU_FREE_SHRABL_BUF(pst->region, pst->pool, rrcDeliveryReport, sizeof(RrcDeliveryReport));
- return ret;
+ DU_FREE_SHRABL_BUF(pst->region, pst->pool, rrcDeliveryReport, sizeof(RrcDeliveryReport));
+ return ret;
}
ret = ROK;
- if(dlRrcMsg->srbId == SRB1_LCID) //RRC connection setup
+ if(dlRrcMsg->srbId == SRB0_LCID) //RRC connection setup
{
for(ueIdx=0; ueIdx<duCb.numUe; ueIdx++)
{
*/
pdu[byteIdx++] = 0;
/* Hardcoding MAC PDU */
- pdu[byteIdx++] = 181;
- pdu[byteIdx++] = 99;
- pdu[byteIdx++] = 20;
- pdu[byteIdx++] = 170;
- pdu[byteIdx++] = 132;
- pdu[byteIdx++] = 96;
+ pdu[byteIdx++] = 16;
+ pdu[byteIdx++] = 00;
+ pdu[byteIdx++] = 00;
+ pdu[byteIdx++] = 00;
+ pdu[byteIdx++] = 00;
+ pdu[byteIdx++] = 103;
break;
}