CU testing fixes 26/5026/3
authorsphoorthi <sphoorthi.dayanand@radisys.com>
Tue, 10 Nov 2020 15:44:52 +0000 (21:14 +0530)
committersphoorthi <sphoorthi.dayanand@radisys.com>
Wed, 11 Nov 2020 16:44:09 +0000 (22:14 +0530)
Change-Id: I87c85607d4f614844d051ea51bac56b66929173a
Signed-off-by: sphoorthi <sphoorthi.dayanand@radisys.com>
14 files changed:
src/cm/common_def.c
src/cm/common_def.h
src/codec_utils/common/odu_common_codec.c
src/codec_utils/common/odu_common_codec.h
src/cu_stub/cu_f1ap_msg_hdl.c
src/cu_stub/cu_f1ap_msg_hdl.h
src/du_app/du_cell_mgr.c
src/du_app/du_cell_mgr.h
src/du_app/du_cfg.c
src/du_app/du_cfg.h
src/du_app/du_f1ap_msg_hdl.c
src/du_app/du_msg_hdl.c
src/du_app/du_ue_mgr.c
src/phy_stub/l1_bdy1.c

index 867a9c4..0e681d3 100644 (file)
@@ -107,6 +107,40 @@ void oduCpyFixBufToMsg(uint8_t *fixBuf, Buffer *mBuf, uint16_t len)
    ODU_COPY_FIX_BUF_TO_MSG(fixBuf, mBuf, 0, len, (MsgLen *)&copyLen);
 }
 
+/*******************************************************************
+ *
+ * @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
index f4e194e..b01b823 100644 (file)
@@ -180,6 +180,7 @@ typedef enum
 
 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
 
index 1f35317..5ea3c8d 100644 (file)
@@ -28,40 +28,6 @@ int PrepFinalEncBuf(const void *buffer, size_t size, void *encodedBuf)
    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
index 3a291d3..01e0d7a 100644 (file)
@@ -26,7 +26,6 @@ char encBuf[ENC_BUF_MAX_LEN];
 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);
 
index ac6a842..0cfc141 100644 (file)
@@ -224,11 +224,7 @@ S16 SendF1APMsg(Region region, Pool pool)
 
 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);
@@ -1639,7 +1635,7 @@ uint8_t BuildAndSendDLRRCMessageTransfer(uint8_t rrcMsgType)
    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++;
@@ -1815,9 +1811,9 @@ uint8_t procInitULRRCMsg(F1AP_PDU_t *f1apMsg)
 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);
@@ -1837,11 +1833,17 @@ uint8_t BuildNrcgi(NRCGI_t *nrcgi)
    {
       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;
 }
 /*******************************************************************
index 85f252a..d20e756 100644 (file)
@@ -46,6 +46,7 @@
 #define CU_ID           1
 #define CRNTI           17017
 #define CELL_INDEX      0
+#define SRB0 0
 #define SRB1 1
 #define SRB2 2
 #define DRB1 1
index e1f166e..e663525 100644 (file)
  *         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;
 }
@@ -120,6 +124,39 @@ void duProcGnbDuCfgUpdAckMsg()
 {
    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
index 0d310a2..37128df 100644 (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
index a0b3fdc..7dde83b 100644 (file)
@@ -561,12 +561,12 @@ uint8_t readCfg()
    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;
@@ -588,12 +588,12 @@ uint8_t readCfg()
 
    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;
@@ -602,22 +602,22 @@ uint8_t readCfg()
       /* 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 */
@@ -626,15 +626,15 @@ uint8_t readCfg()
       /* 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++)
       {
@@ -655,8 +655,8 @@ uint8_t readCfg()
       }
       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;
@@ -666,15 +666,15 @@ uint8_t readCfg()
         }
       }
 
-      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; 
@@ -685,25 +685,25 @@ uint8_t readCfg()
 
       /* 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;
index 7d2e4c9..5aa468a 100644 (file)
 /* 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 */
index fc537c2..21f3b70 100644 (file)
@@ -163,6 +163,30 @@ uint8_t BuildDLNRInfo(NRFreqInfo_t *dlnrfreq)
    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 
@@ -181,9 +205,7 @@ uint8_t BuildDLNRInfo(NRFreqInfo_t *dlnrfreq)
 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);
@@ -198,18 +220,14 @@ uint8_t BuildNrcgi(NRCGI_t *nrcgi)
       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;
 }
 /*******************************************************************
@@ -8311,16 +8329,11 @@ uint8_t extractCellsToBeActivated(Cells_to_be_Activated_List_t cellsToActivate)
       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;
 }
index 2a677d1..98e24a0 100644 (file)
@@ -38,6 +38,7 @@
 #include "legtp.h"
 #include "lphy_stub.h"
 #include "du_utils.h"
+#include "du_cell_mgr.h" 
 
 uint8_t rlcDlCfg = 0;
 uint8_t numRlcDlSaps = 0;
@@ -328,43 +329,41 @@ uint8_t duProcCfgComplete()
    {
       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
@@ -1585,8 +1584,8 @@ uint8_t duBuildAndSendMacCellCfg(uint16_t cellId)
  ***************************************************************************/
 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++)
    {
@@ -1633,24 +1632,26 @@ uint8_t  duHandleMacCellCfgCfm(Pst *pst, MacCellCfgCfm *macCellCfgCfm)
  * ****************************************************************/
 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
@@ -1696,12 +1697,12 @@ uint8_t duBuildAndSendMacCellStartReq()
       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);
@@ -1768,26 +1769,32 @@ uint8_t duBuildAndSendMacCellStopReq()
  * ****************************************************************/
 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;
 }
 
@@ -1834,9 +1841,15 @@ uint8_t duHandleUlCcchInd(Pst *pst, UlCcchIndInfo *ulCcchIndInfo)
  * ****************************************************************/
 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);
 
@@ -1863,14 +1876,18 @@ uint8_t DuProcRlcUlRrcMsgTrans(Pst *pst, RlcUlRrcMsgInfo *ulRrcMsgInfo)
 * ****************************************************************/
 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;
 }
 
 
index e1c0c62..60cd3c3 100644 (file)
@@ -300,7 +300,7 @@ uint8_t duProcDlRrcMsg(F1DlRrcMsg *dlRrcMsg)
 
    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++)
       {
index 5f31761..2c4fe46 100644 (file)
@@ -412,12 +412,12 @@ uint16_t l1BuildAndSendRxDataInd(uint16_t slot, uint16_t sfn, fapi_ul_pusch_pdu_
             */
            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;
         }