Configured cell list changes
[o-du/l2.git] / src / du_app / du_cfg.c
index d619686..cbebd46 100644 (file)
 *******************************************************************************/
 
 /* This file contains all utility functions */
-#include "du_cfg.h"
+#include "du_mgr.h"
+#include "MIB.h"
+#include "PLMN-IdentityInfo.h"
+#include "odu_common_codec.h"
 
 extern DuCfgParams duCfgParam;
+extern char encBuf[ENC_BUF_MAX_LEN];
 
 
 /* Filling Slot configuration as :
@@ -54,16 +58,16 @@ void FillSlotConfig()
    for(slot = 0; slot <= 3; slot++)
    {
       for(symbol = 0; symbol < MAX_SYMB_PER_SLOT; symbol++)
-         duCfgParam.clCellCfg.tddCfg.slotCfg[slot][symbol] = DL_SLOT;
+         duCfgParam.macCellCfg.tddCfg.slotCfg[slot][symbol] = DL_SLOT;
    }
 
-   duCfgParam.clCellCfg.tddCfg.slotCfg[3][10] = GUARD_SLOT;
-   duCfgParam.clCellCfg.tddCfg.slotCfg[3][11] = GUARD_SLOT;
-   duCfgParam.clCellCfg.tddCfg.slotCfg[3][12] = GUARD_SLOT;
-   duCfgParam.clCellCfg.tddCfg.slotCfg[3][13] = UL_SLOT;
+   duCfgParam.macCellCfg.tddCfg.slotCfg[3][10] = GUARD_SLOT;
+   duCfgParam.macCellCfg.tddCfg.slotCfg[3][11] = GUARD_SLOT;
+   duCfgParam.macCellCfg.tddCfg.slotCfg[3][12] = GUARD_SLOT;
+   duCfgParam.macCellCfg.tddCfg.slotCfg[3][13] = UL_SLOT;
 
    for(symbol = 0; symbol < MAX_SYMB_PER_SLOT; symbol++)
-      duCfgParam.clCellCfg.tddCfg.slotCfg[4][symbol] = UL_SLOT;
+      duCfgParam.macCellCfg.tddCfg.slotCfg[4][symbol] = UL_SLOT;
 
 }
 
@@ -73,7 +77,7 @@ void FillSlotConfig()
  *
  * @details
  *
- *    Function : readClCfg
+ *    Function : readMacCfg
  *
  *    Functionality:
  *       - Fills up the cell configuration for CL.
@@ -87,99 +91,125 @@ void FillSlotConfig()
 
 
 /* This function is used to fill up the cell configuration for CL */
-S16 readClCfg()
+S16 readMacCfg()
 {
-   duCfgParam.clCellCfg.carrierId = CARRIER_IDX;
+   duCfgParam.macCellCfg.carrierId = CARRIER_IDX;
 
    /* Cell configuration */
-   duCfgParam.clCellCfg.cellId = NR_CELL_ID;
-   duCfgParam.clCellCfg.phyCellId = NR_PCI;
-   duCfgParam.clCellCfg.dupType = DUPLEX_MODE;
+   duCfgParam.macCellCfg.cellId = NR_CELL_ID;
+   duCfgParam.macCellCfg.phyCellId = NR_PCI;
+   duCfgParam.macCellCfg.dupType = DUPLEX_MODE;
 
    /* DL carrier configuration */
-   duCfgParam.clCellCfg.dlCarrCfg.pres = TRUE;
-   duCfgParam.clCellCfg.dlCarrCfg.bw = SUL_ARFCN;
-   duCfgParam.clCellCfg.dlCarrCfg.freq = NR_ARFCN;
-   duCfgParam.clCellCfg.dlCarrCfg.k0[0] = 1;
-   duCfgParam.clCellCfg.dlCarrCfg.k0[1] = 1;
-   duCfgParam.clCellCfg.dlCarrCfg.k0[2] = 1;
-   duCfgParam.clCellCfg.dlCarrCfg.k0[3] = 1;
-   duCfgParam.clCellCfg.dlCarrCfg.k0[4] = 1;
-   duCfgParam.clCellCfg.dlCarrCfg.gridSize[0] = 1;
-   duCfgParam.clCellCfg.dlCarrCfg.gridSize[1] = 1;
-   duCfgParam.clCellCfg.dlCarrCfg.gridSize[2] = 1;
-   duCfgParam.clCellCfg.dlCarrCfg.gridSize[3] = 1;
-   duCfgParam.clCellCfg.dlCarrCfg.gridSize[4] = 1;
-   duCfgParam.clCellCfg.dlCarrCfg.numAnt = NUM_TX_ANT;
+   duCfgParam.macCellCfg.dlCarrCfg.pres = TRUE;
+   duCfgParam.macCellCfg.dlCarrCfg.bw = SUL_ARFCN;
+   duCfgParam.macCellCfg.dlCarrCfg.freq = NR_ARFCN;
+   duCfgParam.macCellCfg.dlCarrCfg.k0[0] = 1;
+   duCfgParam.macCellCfg.dlCarrCfg.k0[1] = 1;
+   duCfgParam.macCellCfg.dlCarrCfg.k0[2] = 1;
+   duCfgParam.macCellCfg.dlCarrCfg.k0[3] = 1;
+   duCfgParam.macCellCfg.dlCarrCfg.k0[4] = 1;
+   duCfgParam.macCellCfg.dlCarrCfg.gridSize[0] = 1;
+   duCfgParam.macCellCfg.dlCarrCfg.gridSize[1] = 1;
+   duCfgParam.macCellCfg.dlCarrCfg.gridSize[2] = 1;
+   duCfgParam.macCellCfg.dlCarrCfg.gridSize[3] = 1;
+   duCfgParam.macCellCfg.dlCarrCfg.gridSize[4] = 1;
+   duCfgParam.macCellCfg.dlCarrCfg.numAnt = NUM_TX_ANT;
 
    /* UL Carrier configuration */
-   duCfgParam.clCellCfg.ulCarrCfg.pres = TRUE;
-   duCfgParam.clCellCfg.ulCarrCfg.bw = SUL_ARFCN;
-   duCfgParam.clCellCfg.ulCarrCfg.freq = NR_ARFCN;
-   duCfgParam.clCellCfg.ulCarrCfg.k0[0] = 1;
-   duCfgParam.clCellCfg.ulCarrCfg.k0[1] = 1;
-   duCfgParam.clCellCfg.ulCarrCfg.k0[2] = 1;
-   duCfgParam.clCellCfg.ulCarrCfg.k0[3] = 1;
-   duCfgParam.clCellCfg.ulCarrCfg.k0[4] = 1;
-   duCfgParam.clCellCfg.ulCarrCfg.gridSize[0] = 1;
-   duCfgParam.clCellCfg.ulCarrCfg.gridSize[1] = 1;
-   duCfgParam.clCellCfg.ulCarrCfg.gridSize[2] = 1;
-   duCfgParam.clCellCfg.ulCarrCfg.gridSize[3] = 1;
-   duCfgParam.clCellCfg.ulCarrCfg.gridSize[4] = 1;
-   duCfgParam.clCellCfg.ulCarrCfg.numAnt = NUM_RX_ANT;
-
-   duCfgParam.clCellCfg.freqShft = FREQ_SHIFT_7P5KHZ;
+   duCfgParam.macCellCfg.ulCarrCfg.pres = TRUE;
+   duCfgParam.macCellCfg.ulCarrCfg.bw = SUL_ARFCN;
+   duCfgParam.macCellCfg.ulCarrCfg.freq = NR_ARFCN;
+   duCfgParam.macCellCfg.ulCarrCfg.k0[0] = 1;
+   duCfgParam.macCellCfg.ulCarrCfg.k0[1] = 1;
+   duCfgParam.macCellCfg.ulCarrCfg.k0[2] = 1;
+   duCfgParam.macCellCfg.ulCarrCfg.k0[3] = 1;
+   duCfgParam.macCellCfg.ulCarrCfg.k0[4] = 1;
+   duCfgParam.macCellCfg.ulCarrCfg.gridSize[0] = 1;
+   duCfgParam.macCellCfg.ulCarrCfg.gridSize[1] = 1;
+   duCfgParam.macCellCfg.ulCarrCfg.gridSize[2] = 1;
+   duCfgParam.macCellCfg.ulCarrCfg.gridSize[3] = 1;
+   duCfgParam.macCellCfg.ulCarrCfg.gridSize[4] = 1;
+   duCfgParam.macCellCfg.ulCarrCfg.numAnt = NUM_RX_ANT;
+
+   duCfgParam.macCellCfg.freqShft = FREQ_SHIFT_7P5KHZ;
 
    /* SSB configuration */
-   duCfgParam.clCellCfg.ssbCfg.ssbPbchPwr = SSB_PBCH_PWR;
-   duCfgParam.clCellCfg.ssbCfg.bchPayload = BCH_PAYLOAD;
-   duCfgParam.clCellCfg.ssbCfg.scsCmn = SUBCARRIER_SPACING;
-   duCfgParam.clCellCfg.ssbCfg.ssbPrbOffset = PRB_OFFSET;
-   duCfgParam.clCellCfg.ssbCfg.betaPss = BETA_PSS;
-   duCfgParam.clCellCfg.ssbCfg.ssbPeriod = SSB_PERIODICITTY;
-   duCfgParam.clCellCfg.ssbCfg.ssbSubcOffset = SSB_SUBCARRIER_OFFSET;
-   duCfgParam.clCellCfg.ssbCfg.mibPdu = 104;
-   duCfgParam.clCellCfg.ssbCfg.nSSBMask[0] = 2162721;
-   duCfgParam.clCellCfg.ssbCfg.nSSBMask[1] = 0;
-   duCfgParam.clCellCfg.ssbCfg.multCarrBand = SSB_MULT_CARRIER_BAND;
-   duCfgParam.clCellCfg.ssbCfg.multCellCarr = MULT_CELL_CARRIER;
+   duCfgParam.macCellCfg.ssbCfg.ssbPbchPwr = SSB_PBCH_PWR;
+   duCfgParam.macCellCfg.ssbCfg.bchPayloadOption = BCH_PAYLOAD;
+   duCfgParam.macCellCfg.ssbCfg.scsCmn = SUBCARRIER_SPACING;
+   duCfgParam.macCellCfg.ssbCfg.ssbPrbOffset = PRB_OFFSET;
+   duCfgParam.macCellCfg.ssbCfg.betaPss = BETA_PSS;
+   duCfgParam.macCellCfg.ssbCfg.ssbPeriod = SSB_PERIODICITTY;
+   duCfgParam.macCellCfg.ssbCfg.ssbSubcOffset = SSB_SUBCARRIER_OFFSET;
+   duCfgParam.macCellCfg.ssbCfg.mibPdu = 104;
+   duCfgParam.macCellCfg.ssbCfg.nSSBMask[0] = 2162721;
+   duCfgParam.macCellCfg.ssbCfg.nSSBMask[1] = 0;
+   duCfgParam.macCellCfg.ssbCfg.multCarrBand = SSB_MULT_CARRIER_BAND;
+   duCfgParam.macCellCfg.ssbCfg.multCellCarr = MULT_CELL_CARRIER;
 
    /* PRACH configuration */
-   duCfgParam.clCellCfg.prachCfg.pres = TRUE;
-   duCfgParam.clCellCfg.prachCfg.prachSeqLen = PRACH_SEQ_LEN;
-   duCfgParam.clCellCfg.prachCfg.prachSubcSpacing = PRACH_SUBCARRIER_SPACING;
-   duCfgParam.clCellCfg.prachCfg.prachRstSetCfg = PRACH_RESTRICTED_SET_CFG;
-   duCfgParam.clCellCfg.prachCfg.prachFdm = NUM_PRACH_FDM;
-   duCfgParam.clCellCfg.prachCfg.fdm[0].rootSeqIdx = ROOT_SEQ_IDX;
-   duCfgParam.clCellCfg.prachCfg.fdm[0].numRootSeq = NUM_ROOT_SEQ;
-   duCfgParam.clCellCfg.prachCfg.fdm[0].k1 = 1;
-   duCfgParam.clCellCfg.prachCfg.fdm[0].zeroCorrZoneCfg = ZERO_CORRELATION_ZONE_CFG;
-   duCfgParam.clCellCfg.prachCfg.fdm[0].numUnusedRootSeq = NUM_UNUSED_ROOT_SEQ;
-   DU_ALLOC(duCfgParam.clCellCfg.prachCfg.fdm[0].unsuedRootSeq, NUM_UNUSED_ROOT_SEQ * sizeof(U8));
-   if(duCfgParam.clCellCfg.prachCfg.fdm[0].unsuedRootSeq == NULLP)
+   duCfgParam.macCellCfg.prachCfg.pres = TRUE;
+   duCfgParam.macCellCfg.prachCfg.prachSeqLen = PRACH_SEQ_LEN;
+   duCfgParam.macCellCfg.prachCfg.prachSubcSpacing = PRACH_SUBCARRIER_SPACING;
+   duCfgParam.macCellCfg.prachCfg.prachRstSetCfg = PRACH_RESTRICTED_SET_CFG;
+   duCfgParam.macCellCfg.prachCfg.prachFdm = NUM_PRACH_FDM;
+   duCfgParam.macCellCfg.prachCfg.fdm[0].rootSeqIdx = ROOT_SEQ_IDX;
+   duCfgParam.macCellCfg.prachCfg.fdm[0].numRootSeq = NUM_ROOT_SEQ;
+   duCfgParam.macCellCfg.prachCfg.fdm[0].k1 = 1;
+   duCfgParam.macCellCfg.prachCfg.fdm[0].zeroCorrZoneCfg = ZERO_CORRELATION_ZONE_CFG;
+   duCfgParam.macCellCfg.prachCfg.fdm[0].numUnusedRootSeq = NUM_UNUSED_ROOT_SEQ;
+   DU_ALLOC(duCfgParam.macCellCfg.prachCfg.fdm[0].unsuedRootSeq, NUM_UNUSED_ROOT_SEQ * sizeof(U8));
+   if(duCfgParam.macCellCfg.prachCfg.fdm[0].unsuedRootSeq == NULLP)
    {
       DU_LOG("\nDU_APP : Memory allocation failed");
       RETVALUE(RFAILED);
    }
-   *(duCfgParam.clCellCfg.prachCfg.fdm[0].unsuedRootSeq) = UNUSED_ROOT_SEQ;
-   duCfgParam.clCellCfg.prachCfg.ssbPerRach = SSB_PER_RACH;
-   duCfgParam.clCellCfg.prachCfg.prachMultCarrBand = PRACH_MULT_CARRIER_BAND;
+   *(duCfgParam.macCellCfg.prachCfg.fdm[0].unsuedRootSeq) = UNUSED_ROOT_SEQ;
+   duCfgParam.macCellCfg.prachCfg.ssbPerRach = SSB_PER_RACH;
+   duCfgParam.macCellCfg.prachCfg.prachMultCarrBand = PRACH_MULT_CARRIER_BAND;
 
    /* TDD configuration */
-   duCfgParam.clCellCfg.tddCfg.pres = TRUE;
-   duCfgParam.clCellCfg.tddCfg.tddPeriod = TDD_PERIODICITY;
+   duCfgParam.macCellCfg.tddCfg.pres = TRUE;
+   duCfgParam.macCellCfg.tddCfg.tddPeriod = TDD_PERIODICITY;
 
    FillSlotConfig();
 
    /* RSSI Measurement configuration */
-   duCfgParam.clCellCfg.rssiUnit = RSS_MEASUREMENT_UNIT;
+   duCfgParam.macCellCfg.rssiUnit = RSS_MEASUREMENT_UNIT;
 
    /* This should be calculated based on
       (number of mandatory parameters) + (number of otional parameters being filled) */
-   duCfgParam.clCellCfg.numTlv = 39;
+   duCfgParam.macCellCfg.numTlv = 39;
 
    RETVALUE(ROK);
 }
+
+/*******************************************************************
+ *
+ * @brief Configures the DU Parameters
+ *
+ * @details
+ *
+ *    Function : fillDuPort
+ *
+ *    Functionality:
+ *       - fills the DU Ports.  
+ *
+ * @params[in] duPort array to be filled
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+
+S16 fillDuPort(U16 *duPort)
+{
+   duPort[F1_INTERFACE]   = DU_PORT;     /* DU Port idx  0 38472 */
+   duPort[E2_INTERFACE]   = RIC_PORT;    /* RIC Port idx 1 38482 */
+
+   RETVALUE(ROK);
+}
+
 /*******************************************************************
  *
  * @brief Configures the DU Parameters
@@ -190,7 +220,7 @@ S16 readClCfg()
  *
  *    Functionality:
  *       - Initializes the DuCfg members.  
- *       - Calls readClCfg()  
+ *       - Calls readMacCfg()  
  *
  * @params[in] system task ID
  * @return ROK     - success
@@ -201,21 +231,26 @@ S16 readClCfg()
 S16 readCfg()
 {
    U8 i,j,k;
-   U32 ipv4_du, ipv4_cu;
+   U32 ipv4_du, ipv4_cu, ipv4_ric;
+       MibParams mib;
+   Sib1Params sib1;    
 
    cmInetAddr((S8*)DU_IP_V4_ADDR, &ipv4_du);
    cmInetAddr((S8*)CU_IP_V4_ADDR, &ipv4_cu);
+   cmInetAddr((S8*)RIC_IP_V4_ADDR, &ipv4_ric);
+   fillDuPort(duCfgParam.sctpParams.duPort);
 
    /* F1 DU IP Address and Port*/
-   duCfgParam.sctpParams.duIpAddr.ipV4Pres = TRUE;
    duCfgParam.sctpParams.duIpAddr.ipV4Addr = ipv4_du;
-   duCfgParam.sctpParams.duPort = DU_PORT;
 
    /* F1 CU IP Address and Port*/
-   duCfgParam.sctpParams.cuIpAddr.ipV4Pres = TRUE;
    duCfgParam.sctpParams.cuIpAddr.ipV4Addr = ipv4_cu;
    duCfgParam.sctpParams.cuPort = CU_PORT;
 
+   /* Fill RIC Params */
+   duCfgParam.sctpParams.ricIpAddr.ipV4Addr = ipv4_ric;
+   duCfgParam.sctpParams.ricPort            = RIC_PORT;
+
 
    /* EGTP Parameters */
    duCfgParam.egtpParams.localIp.ipV4Pres = TRUE;
@@ -232,6 +267,32 @@ S16 readCfg()
    duCfgParam.duId = DU_ID;    
    strcpy((char*)duCfgParam.duName,DU_NAME);
 
+   /* Mib Params */
+       mib.sysFrmNum = SYS_FRAME_NUM;
+       mib.subCarrierSpacingCommon = MIB__subCarrierSpacingCommon_scs15or60;
+       mib.ssb_SubcarrierOffset = SSB_SC_OFFSET; 
+       mib.dmrs_TypeA_Position = MIB__dmrs_TypeA_Position_pos2;
+       mib.controlResourceSetZero = CORESET_ZERO;
+       mib.searchSpaceZero = SEARCH_SPACE_ZERO;
+       mib.cellBarred = MIB__cellBarred_barred;
+       mib.intraFreqReselection =
+               MIB__intraFreqReselection_notAllowed;
+       duCfgParam.mibParams = mib;
+
+   /* SIB1 Params */
+       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;
+       sib1.cellResvdForOpUse =\ 
+               PLMN_IdentityInfo__cellReservedForOperatorUse_notReserved;
+       duCfgParam.sib1Params = sib1;
+
    for(i=0; i<DEFAULT_CELLS; i++)
    { 
       duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.nrCgi.plmn.mcc[0] = PLMN_MCC0;
@@ -357,18 +418,37 @@ S16 readCfg()
          duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].ranac = NR_RANAC;
       }
 
-      /*gnb DU System Info */
-      //TODO: uncomment duCfgParam.srvdCellLst[i].duSysInfo.mibMsg;  //to do
-      //TODO: uncomment duCfgParam.srvdCellLst[i].duSysInfo.sib1Msg; //to do
-   }
+      /*gnb DU System Info mib msg*/
+          BuildMibMsg();
+               DU_ALLOC(duCfgParam.srvdCellLst[i].duSysInfo.mibMsg,\
+                               strlen(encBuf));
+          if(!(duCfgParam.srvdCellLst[i].duSysInfo.mibMsg))
+               {
+         DU_LOG("\nDU_APP: Memory allocation failure");
+                       return RFAILED;
+               }
+               strcpy(duCfgParam.srvdCellLst[i].duSysInfo.mibMsg, encBuf);
+
+      /*gnb DU System Info mib msg*/
+      BuildSib1Msg();
+               DU_ALLOC(duCfgParam.srvdCellLst[i].duSysInfo.sib1Msg,\
+                               encBufSize);
+          if(!(duCfgParam.srvdCellLst[i].duSysInfo.sib1Msg))
+               {
+         DU_LOG("\nDU_APP: Memory allocation failure");
+                       return RFAILED;
+               }
+               for(int x=0; x<encBufSize; x++)
+               {
+                  duCfgParam.srvdCellLst[i].duSysInfo.sib1Msg[x]=\
+                       encBuf[x];
+          }
 
-   /* RRC Version,Extended RRC Version */
-   //TODO: uncomment duCfgParam.rrcVersion.rrcVer; //to do
-   //TODO: uncomment duCfgParam.rrcVersion.extRrcVer; //to do
+   }
 
-   if(readClCfg() != ROK)
+   if(readMacCfg() != ROK)
    {
-      DU_LOG("\nDU_APP : Failed while reading CL config");
+      DU_LOG("\nDU_APP : Failed while reading MAC config");
       RETVALUE(RFAILED);
    }
 
@@ -458,15 +538,14 @@ S16 bitStringToInt(BIT_STRING_t *bitString, U16 *val)
       return RFAILED;
    }
 
-   numOctets = (bitString->size + 7 )/8;
-   for(idx=0; idx< numOctets; idx++)
+   for(idx=0; idx<bitString->size-1; idx++)
    {
       *val |= bitString->buf[idx];
       *val <<= 8;
    }
 
-   *val |= bitString->buf[numOctets -1];
-   *val >>= ((numOctets * 8) - bitString->size);
+   *val |= bitString->buf[idx];
+   *val >>= bitString->bits_unused;
 
    return ROK;
 }