+++ /dev/null
-/*******************************************************************************
-################################################################################
-# Copyright (c) [2017-2019] [Radisys] #
-# #
-# Licensed under the Apache License, Version 2.0 (the "License"); #
-# you may not use this file except in compliance with the License. #
-# You may obtain a copy of the License at #
-# #
-# http://www.apache.org/licenses/LICENSE-2.0 #
-# #
-# Unless required by applicable law or agreed to in writing, software #
-# distributed under the License is distributed on an "AS IS" BASIS, #
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
-# See the License for the specific language governing permissions and #
-# limitations under the License. #
-################################################################################
-*******************************************************************************/
-
-/* This file contains all utility functions */
-#include "du_cfg_hdl.h"
-
-extern DuCfgParams duCfgParam;
-
-
-/* Filling Slot configuration as :
- * Slot Sym 0 Sym 1 Sym 2 Sym 3 Sym 4 Sym 5 Sym 6 Sym 7 Sym 8 Sym 9 Sym10 Sym11 Sym12 Sym13
- * 0 DL DL DL DL DL DL DL DL DL DL DL DL DL DL
- * 1 DL DL DL DL DL DL DL DL DL DL DL DL DL DL
- * 2 DL DL DL DL DL DL DL DL DL DL DL DL DL DL
- * 3 DL DL DL DL DL DL DL DL DL DL GD GD GD UL
- * 4 UL UL UL UL UL UL UL UL UL UL UL UL UL UL
-*/
-
-/*******************************************************************
- *
- * @brief Fills the Slot configuration
- *
- * @details
- *
- * Function : fillSlotConfig
- *
- * Functionality:Fill the Slot configuration values
- *
- * @params[in] void
- * @return ROK - success
- * RFAILED - failure
- *
- * ****************************************************************/
-void fillSlotConfig()
-{
- U8 slot;
- U8 symbol;
-
- for(slot = 0; slot <= 3; slot++)
- {
- for(symbol = 0; symbol < MAX_SYMB_PER_SLOT; symbol++)
- duCfgParam.clCellCfg.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;
-
- for(symbol = 0; symbol < MAX_SYMB_PER_SLOT; symbol++)
- duCfgParam.clCellCfg.tddCfg.slotCfg[4][symbol] = UL_SLOT;
-
-}
-
-/*******************************************************************
- *
- * @brief Reads the CL Configuration.
- *
- * @details
- *
- * Function : readClCfg
- *
- * Functionality:
- * - Fills up the cell configuration for CL.
- * - Calls fillSlotConfig()
- *
- * @params[in] void
- * @return ROK - success
- * RFAILED - failure
- *
- * ****************************************************************/
-
-
-/* This function is used to fill up the cell configuration for CL */
-S16 readClCfg()
-{
- duCfgParam.clCellCfg.carrierId = CARRIER_IDX;
-
- /* Cell configuration */
- duCfgParam.clCellCfg.cellId = NR_CELL_ID;
- duCfgParam.clCellCfg.phyCellId = NR_PCI;
- duCfgParam.clCellCfg.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;
-
- /* 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;
-
- /* 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;
-
- /* 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)
- {
- 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;
-
- /* TDD configuration */
- duCfgParam.clCellCfg.tddCfg.pres = TRUE;
- duCfgParam.clCellCfg.tddCfg.tddPeriod = TDD_PERIODICITY;
-
- fillSlotConfig();
-
- /* RSSI Measurement configuration */
- duCfgParam.clCellCfg.rssiUnit = RSS_MEASUREMENT_UNIT;
-
- /* This should be calculated based on
- (number of mandatory parameters) + (number of otional parameters being filled) */
- duCfgParam.clCellCfg.numTlv = 39;
-
- RETVALUE(ROK);
-}
-/*******************************************************************
- *
- * @brief Configures the DU Parameters
- *
- * @details
- *
- * Function : readCfg
- *
- * Functionality:
- * - Initializes the DuCfg members.
- * - Calls readClCfg()
- *
- * @params[in] system task ID
- * @return ROK - success
- * RFAILED - failure
- *
- * ****************************************************************/
-
-S16 readCfg()
-{
- U8 i,j,k;
- U32 ipv4_du, ipv4_cu;
-
- cmInetAddr((S8*)DU_IP_V4_ADDR, &ipv4_du);
- cmInetAddr((S8*)CU_IP_V4_ADDR, &ipv4_cu);
-
- /* 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;
-
-
- /* EGTP Parameters */
- duCfgParam.egtpParams.localIp.ipV4Pres = TRUE;
- duCfgParam.egtpParams.localIp.ipV4Addr = ipv4_du;
- duCfgParam.egtpParams.localPort = DU_EGTP_PORT;
- duCfgParam.egtpParams.destIp.ipV4Pres = TRUE;
- duCfgParam.egtpParams.destIp.ipV4Addr = ipv4_cu;
- duCfgParam.egtpParams.destPort = CU_EGTP_PORT;
- duCfgParam.egtpParams.minTunnelId = 0;
- duCfgParam.egtpParams.maxTunnelId = 10;
-
- duCfgParam.maxUe = 32; //TODO: Check
- /* DU Info */
- duCfgParam.duId = DU_ID;
- strcpy((char*)duCfgParam.duName,DU_NAME);
-
- for(i=0; i<DEFAULT_CELLS; i++)
- {
- 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;
- duCfgParam.srvdCellLst[i].duCellInfo.cellInfo.nrPci = NR_PCI;
-
- /* List of Available PLMN */
- for(j=0;j<MAX_PLMN;j++)
- {
- 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++)
- {
- 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 */
- duCfgParam.srvdCellLst[i].duCellInfo.tac = DU_TAC;
- duCfgParam.srvdCellLst[i].duCellInfo.epsTac = DU_TAC; //to check and fill
- /* NR Mode info */
- duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.nrArfcn = NR_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;
-
-#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;
-
- for(j=0;j<MAXNRCELLBANDS;j++)
- {
- duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.freqBand[j].nrFreqBand = NR_FREQ_BAND;
- for(k=0;k<MAXNRCELLBANDS;k++)
- {
- duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.freqBand[j].sulBand[k] = SUL_BAND;
- }
- }
-#endif
- for(j=0;j<MAXNRCELLBANDS;j++)
- {
- duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.freqBand[j].nrFreqBand = NR_FREQ_BAND;
- for(k=0;k<MAXNRCELLBANDS;k++)
- {
- duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.freqBand[j].sulBand[k] = SUL_BAND;
- }
- }
- duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.nrArfcn = NR_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;
- for(j=0;j<MAXNRCELLBANDS;j++)
- {
- duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.freqBand[j].nrFreqBand = NR_FREQ_BAND;
- for(k=0;k<MAXNRCELLBANDS;k++)
- {
- duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.dlNrFreqInfo.freqBand[j].sulBand[k] = SUL_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.dlTxBw.nrScs = SCS_120;
- duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.fdd.dlTxBw.nrb = NRB_66;
-
-#if 0
- duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrTxBw.nrScs = SCS_15;
- duCfgParam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrTxBw.nrb = NRB_160;
-#endif
- /*Measurement Config and Cell Config */
- duCfgParam.srvdCellLst[i].duCellInfo.measTimeCfg = TIME_CFG;
-
- duCfgParam.srvdCellLst[i].duCellInfo.cellDir = DL_UL;
-
- duCfgParam.srvdCellLst[i].duCellInfo.cellType=CELL_TYPE;
-
- /* Broadcast PLMN Identity */
- for(j=0;j<MAXBPLMNNRMINUS1;j++)
- {
- for(k=0;k<MAX_PLMN;k++)
- {
- 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++)
- {
- 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;
- duCfgParam.srvdCellLst[i].duCellInfo.brdcstPlmnInfo[j].nrCellId = NR_CELL_ID;
- 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
- }
-
- /* RRC Version,Extended RRC Version */
- //TODO: uncomment duCfgParam.rrcVersion.rrcVer; //to do
- //TODO: uncomment duCfgParam.rrcVersion.extRrcVer; //to do
-
- if(readClCfg() != ROK)
- {
- DU_LOG("\nDU_APP : Failed while reading CL config");
- RETVALUE(RFAILED);
- }
-
- RETVALUE(ROK);
-}
-
-/*******************************************************************
- *
- * @brief Reads config and posts message to du_app on completion
- *
- * @details
- *
- * Function : main
- *
- * Functionality:
- * - Calls readCfg()
- * - Post to du_app for further processing
- *
- * @params[in] void
- * @return ROK - success
- * RFAILED - failure
- *
- * ****************************************************************/
-S16 duReadCfg()
-{
- Pst pst;
- Buffer *mBuf;
-
- cmMemset((U8 *)&duCfgParam, 0, sizeof(DuCfgParams));
- //Read configs into duCfgParams
- if(readCfg() != ROK)
- {
- DU_LOG("\nDU_APP : Reading configuration failed");
- RETVALUE(RFAILED);
- }
-
- //Fill pst structure
- cmMemset((U8 *)&(pst), 0, sizeof(Pst));
- pst.srcEnt = (Ent)ENTDUAPP;
- pst.srcInst = (Inst)DU_INST;
- pst.srcProcId = DU_PROC;
- pst.dstEnt = pst.srcEnt;
- pst.dstInst = pst.srcInst;
- pst.dstProcId = pst.srcProcId;
- pst.event = EVTCFG;
- pst.selector = DU_SELECTOR_TC;
- pst.pool= DU_POOL;
-
-
- if(SGetMsg(DFLT_REGION, DU_POOL, &mBuf) != ROK)
- {
- DU_LOG("\nDU_APP : Memory allocation failed in duReadCfg");
- return RFAILED;
- }
-
- if (SPstTsk(&pst, mBuf) != ROK)
- {
- DU_LOG("\nDU_APP : SPstTsk failed in duReadCfg");
- return RFAILED;
- }
-
- return ROK;
-}
-
-/*******************************************************************
- *
- * @brief Converts bit strings to integer
- *
- * @details
- *
- * Function : bitStringToInt
- *
- * Functionality:
- * - Converts ASN bit string format IEs to integer type
- *
- * @params[in] void
- * @return ROK - success
- * RFAILED - failure
- *
- * ****************************************************************/
-S16 bitStringToInt(BIT_STRING_t *bitString, U16 *val)
-{
- U16 numOctets, idx;
- if(bitString->buf == NULL || bitString->size <= 0)
- {
- DU_LOG("\nDU_APP : Bit string is empty");
- return RFAILED;
- }
-
- numOctets = (bitString->size + 7 )/8;
- for(idx=0; idx< numOctets; idx++)
- {
- *val |= bitString->buf[idx];
- *val <<= 8;
- }
-
- *val |= bitString->buf[numOctets -1];
- *val >>= ((numOctets * 8) - bitString->size);
-
- return ROK;
-}
-
-
-/**********************************************************************
- End of file
- **********************************************************************/
-
+++ /dev/null
-/*******************************************************************************
-################################################################################
-# Copyright (c) [2017-2019] [Radisys] #
-# #
-# Licensed under the Apache License, Version 2.0 (the "License"); #
-# you may not use this file except in compliance with the License. #
-# You may obtain a copy of the License at #
-# #
-# http://www.apache.org/licenses/LICENSE-2.0 #
-# #
-# Unless required by applicable law or agreed to in writing, software #
-# distributed under the License is distributed on an "AS IS" BASIS, #
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
-# See the License for the specific language governing permissions and #
-# limitations under the License. #
-################################################################################
-*******************************************************************************/
-
-#ifndef __DU_CONFIG_H_
-#define __DU_CONFIG_H__
-
-#include "du_mgr.h"
-#include "lcl.h"
-#include "du_log.h"
-#include "BIT_STRING.h"
-
-/* MACROS */
-#define DU_INST 0
-#define DU_ID 1
-#define DU_IP_V4_ADDR "10.0.2.20"
-#define CU_IP_V4_ADDR "10.0.2.25"
-#define DU_PORT 38472
-#define CU_PORT 38472
-#define DU_EGTP_PORT 39001
-#define CU_EGTP_PORT 39002
-#define NR_PCI 1
-#define NR_CELL_ID 1
-#define DU_NAME "ORAN_OAM_DU"
-#define CELL_TYPE SMALL
-#define DUPLEX_MODE DUP_MODE_TDD
-#define DU_TAC 1
-#define PLMN_MCC0 3
-#define PLMN_MCC1 1
-#define PLMN_MCC2 1
-#define PLMN_MNC0 4
-#define PLMN_MNC1 8
-#define PLMN_MNC2 0
-#define NR_ARFCN 2079427
-#define SUL_ARFCN 100
-#define NR_FREQ_BAND 257
-#define SUL_BAND 2
-#define TIME_CFG 0
-#define CARRIER_IDX 1
-#define NUM_TX_ANT 2
-#define NUM_RX_ANT 2
-#define FREQ_SHIFT_7P5KHZ FALSE
-#define SSB_PBCH_PWR 0
-#define BCH_PAYLOAD MAC_GEN_FULL_PBCH_PAYLD
-#define SUBCARRIER_SPACING 3
-#define PRB_OFFSET 0
-#define BETA_PSS BETA_PSS_0DB
-#define SSB_PERIODICITTY SSB_PRDCTY_MS_20
-#define SSB_SUBCARRIER_OFFSET 0
-#define SSB_MULT_CARRIER_BAND FALSE
-#define MULT_CELL_CARRIER FALSE
-
-#define PRACH_SEQ_LEN SHORT_SEQUENCE
-#define PRACH_SUBCARRIER_SPACING 3
-#define PRACH_RESTRICTED_SET_CFG UNRESTRICTED
-#define NUM_PRACH_FDM 1
-#define ROOT_SEQ_IDX 0
-#define NUM_ROOT_SEQ 1
-#define ZERO_CORRELATION_ZONE_CFG 2
-#define NUM_UNUSED_ROOT_SEQ 1
-#define UNUSED_ROOT_SEQ 1
-#define SSB_PER_RACH 3
-#define PRACH_MULT_CARRIER_BAND FALSE
-#define TDD_PERIODICITY TX_PRDCTY_MS_2P5
-#define RSS_MEASUREMENT_UNIT DONT_REPORT_RSSI
-
-#define DU_PROC 0
-#define DU_INST 0
-#define DU_POOL 1
-
-#define SCTP_INST 0
-#define EGTP_INST 0
-
-/* Events */
-#define EVTCFG 0
-
-/* Selector */
-#define DU_SELECTOR_LC 0
-#define DU_SELECTOR_TC 1
-#define DU_SELECTOR_LWLC 2
-
-#ifdef EGTP_TEST
-/* Macro definitions for EGTP procedures */
-#define EGTP_LCL_TEID 1 /* EGTP local tunnel id */
-#define EGTP_REM_TEID 10 /* EGTP remote tinnel id */
-#endif
-
-
-/* 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 DU_MAX_CELLS 512 /* Max num of cells served by gNB-DU */
-#define MAX_PLMN 6 /* Max num of broadcast PLMN ids */
-#define MAXNRARFCN 3279165 /* Maximum values of NRAFCN */
-#define MAXNRCELLBANDS 2 /* Maximum number of frequency bands */
-#define MAXNUMOFSLICEITEMS 1024 /* Maximum number of signalled slice support items */
-#define MAXBPLMNNRMINUS1 1 /* Maximum number of PLMN Ids broadcast in an NR cell minus 1 */
-#define MAXNUMOFSIBTYPES 32 /* Maximum number of SIB types */
-#define MAX_UEID 512 /* Maximum number of UE Ids */
-#define MAX_TNL_ASSOC 32 /* Max num of TNL Assoc between CU and DU */
-#define MAXCELLINENB 256 /* Max num of cells served by eNB */
-#define MAXNUMOFUEID 65536 /* Max num of UEs served by DU */
-#define MAXNUMOFUACPLMN 12 /* Maximum number of PLMN ids*/
-#define MAXNUMOFUACPERPLMN 64 /* Maximum number of signalled categories per PLMN */
-#define DEFAULT_CELLS 1 /* Max num of broadcast PLMN ids */
-
-typedef enum
-{
- GNBDU,
- GNBCU
-}F1Entity;
-
-typedef enum
-{
- UNSPECIFIED,
- RL_FAILURE_RLC,
- INVALID_CU_UE_F1AP_ID,
- INVALID_DU_UE_F1AP_ID,
- INTERACTION_WITH_OTHER_PROC,
- INVALID_QCI_VALUE,
- RADIO_RELATED_REASON,
- INSUFFICIENT_RADIO_RESOURCE,
- PROCEDURE_CANCELLED,
- NORMAL_RELEASE,
- UNAVAILABLE_CELL,
- RL_FAILURE_OTHERS,
- UE_ACCESS_REJECTED,
- SLICE_RESOURCE_UNAVAILABLE,
- AMF_ABNORMAL_RELEASE,
- INVALID_PLMN
-}RadioNwCause;
-
-typedef enum
-{
- TRANS_CAUSE_UNSPECIFIED,
- TRANSPORT_RESOURCE_UNAVAIL
-}TransLayerCause;
-
-typedef enum
-{
- TRANSFER_SYNTAX_ERR,
- ABSTRACT_SYNTAX_ERR_REJECT,
- ABSTRACT_SYNTAX_ERR_NOTIFY,
- INCOMPATIBLE_MESSAGE,
- SEMANTIC_ERROR,
- ABSTRACT_SYNTAX_ERR_MSG_CONSTRUCT,
- PROTOCOL_CAUSE_UNSPECIFIED
-}ProtocolCause;
-
-typedef enum
-{
- CONTROL_PROC_OVERLOAD,
- INSUFF_USER_PLANE_RESOURCE,
- HARDWARE_FAILURE,
- O_AND_M_INTERVENTION,
- MISC_CAUSE_UNSPECIFIED
-}MiscCause;
-
-typedef enum
-{
- ALL
-}F1ResetAll;
-
-typedef enum
-{
- IN_SERVICE,
- OUT_OF_SERVICE
-}SrvState;
-
-typedef enum
-{
- INITIATING_MSG,
- SUCCESSFUL_OUTCOME,
- UNSUCCESSFUL_OUTCOME
-}F1TriggMsgVal;
-
-typedef enum
-{
- CRIT_REJECT,
- CRIT_IGNORE,
- CRIT_NOTIFY
-}F1ProcCritVal;
-
-typedef enum
-{
- NOT_UNDERSTOOD,
- MISSING_IE
-}F1ErrorType;
-
-typedef enum
-{
- SCS_15,
- SCS_30,
- SCS_60,
- SCS_120
-}F1NrScs;
-
-typedef enum
-{
- NRB_11,
- NRB_18,
- NRB_24,
- NRB_25,
- NRB_31,
- NRB_32,
- NRB_38,
- NRB_51,
- NRB_52,
- NRB_65,
- NRB_66,
- NRB_78,
- NRB_79,
- NRB_93,
- NRB_106,
- NRB_107,
- NRB_121,
- NRB_132,
- NRB_133,
- NRB_135,
- NRB_160,
- NRB_162,
- NRB_189,
- NRB_216,
- NRB_217,
- NRB_245,
- NRB_264,
- NRB_270,
- NRB_273
-}F1Nrb;
-
-typedef enum
-{
- VERY_SMALL,
- SMALL,
- MEDIUM,
- LARGE
-}F1CellType;
-
-typedef enum
-{
- DL,
- UL,
- DL_UL
-}F1CellDir;
-
-typedef enum
-{
- UE_USAGE,
- NON_UE_USAGE,
- BOTH
-}F1AssocUsage;
-
-typedef enum
-{
- BARRED,
- NOT_BARRED
-}CellBarred;
-
-typedef enum
-{
- OFFER,
- EXECUTION
-}F1ReqType;
-
-typedef enum
-{
- IGNORE_YES,
- IGNORE_NO
-}F1IgnoreReq;
-
-typedef enum
-{
- OVERLOADED,
- NOT_OVERLOADED
-}F1GnbDuOvrloadInfo;
-
-typedef enum
-{
- REJECT_RRC_CONN_NON_EMERG_MODT,
- REJECT_RRC_CONN_SIGNALLING,
- PERMIT_EMERG_SESSION_AND_MOBILE_TERM_SERVICE,
- PERMIT_HIGH_PRIOR_SESSION_AND_MOBILE_TERM_SERVICE
-}F1UacStandardAction;
-
-typedef struct f1RrcVersion
-{
- char rrcVer[30]; /* Latest RRC Version */
- U32 extRrcVer; /* Latest RRC version extended */
-}F1RrcVersion;
-
-typedef struct f1FailCause
-{
- union
- {
- RadioNwCause radioNwCause; /* Radio Network Layer Cause */
- TransLayerCause transLayerCause; /* Transport Layer Cause */
- ProtocolCause protCause; /* Protocol Cause */
- MiscCause miscCause; /* Miscellaneous Cause */
- }cause;
-}F1FailCause;
-
-typedef struct f1ProcCode
-{
- Bool pres;
- U8 value;
-}F1ProcCode;
-
-typedef struct f1TriggMsg
-{
- Bool pres;
- F1TriggMsgVal value;
-}F1TriggMsg;
-
-typedef struct f1ProcCrit
-{
- Bool pres;
- F1ProcCritVal value;
-}F1ProcCrit;
-
-typedef struct f1CritDignosIE
-{
- F1ProcCritVal ieCritVal;
- U16 ieId;
- F1ErrorType type;
-}F1CritDignosIE;
-
-typedef struct f1CritDiagnostic
-{
- Bool pres;
- F1ProcCode procCode; /* Procedure Code */
- F1TriggMsg triggeringMsg; /* Triggering Message */
- F1ProcCrit procCrit; /* Criticality of Triggering msg/proc */
- U32 transId;
- F1CritDignosIE diagnosIE;
-}F1CritDiagnostic;
-
-typedef struct f1FailureIE
-{
- U32 transId; /* Uniquely identify transaction */
- F1FailCause cause; /* Failure cause */
- U8 timeToWait; /* Seconds to be waited before retry */
- F1CritDiagnostic critDiagnostic; /* Critical diagnostics */
-}F1FailureIE;
-
-typedef struct f1LogicalConnUeAssoc
-{
- U32 gnbCuUeF1apId;
- U32 gnbDuUeF1apId;
-}F1LogicalConnUeAssoc;
-
-typedef struct f1ResetType
-{
- union
- {
- F1ResetAll resetAll; /* Reset All */
- F1LogicalConnUeAssoc ueAssocLogicalConn[MAX_F1_CONNECTIONS]; /* In case of Partial Reset : UE associated logical F1 conn list*/
- }type;
-}F1ResetType;
-
-typedef struct f1PLMN
-{
- U8 mcc[3];
- U8 mnc[3];
-}PlmnId;
-
-typedef struct nrEcgi
-{
- PlmnId plmn;
- U16 cellId;
-}NrEcgi;
-
-typedef struct f1SibType
-{
- U8 sibType;
- U8 sibMsg;
- U8 value;
-}F1SibType;
-
-typedef struct f1TxBw
-{
- F1NrScs nrScs; /* NR subcarrier spacing */
- F1Nrb nrb; /* Transmission bandwidth expressed in units of RBs */
-}F1TxBw;
-
-typedef struct f1SulInfo
-{
- U32 sulArfcn; /* SUL ARFCN */
- F1TxBw sulTxBw; /* SUL transmission bandwidth */
-}F1SulInfo;
-
-typedef struct f1FreqBand
-{
- U16 nrFreqBand;
- U16 sulBand[MAXNRCELLBANDS];
-}F1FreqBand;
-
-typedef struct f1NrFreqInfo
-{
- U32 nrArfcn;
- F1SulInfo sulInfo;
- F1FreqBand freqBand[MAXNRCELLBANDS];
-}F1NrFreqInfo;
-
-typedef struct f1NrFddInfo
-{
- F1NrFreqInfo ulNrFreqInfo; /* UL NR Frequency Info */
- F1NrFreqInfo dlNrFreqInfo; /* DL NR Frequency Info */
- F1TxBw ulTxBw; /* UL Transmission bandwidth */
- F1TxBw dlTxBw; /* DL Transmission bandwidth */
-}F1NrFddInfo;
-
-typedef struct f1NrTddInfo
-{
- F1NrFreqInfo nrFreqInfo; /* NR Frequency Info */
- F1TxBw nrTxBw; /* NR Transmission Bandwidth */
-}F1NrTddInfo;
-
-typedef struct f1NrModeInfo
-{
- union
- {
- F1NrFddInfo fdd;
- F1NrTddInfo tdd;
- }mode;
-}NrModeInfo;
-
-typedef struct f1EutraFddInfo
-{
- U16 ulOffset; /* UL offset to Point A */
- U16 dlOffset; /* DL offset to Point A */
-}F1EutraFDDInfo;
-
-typedef struct f1EutraTddInfo
-{
- U16 tddOffset; /* Offset to Point A */
-}F1EutraTDDInfo;
-
-typedef struct f1EutraModeInfo
-{
- union
- {
- F1EutraFDDInfo fdd;
- F1EutraTDDInfo tdd;
- }mode;
-}F1EutraModeInfo;
-
-typedef struct f1Snsaai
-{
- U8 sst;
- U32 sd;
-}F1Snsaai;
-
-typedef struct epIpAddr
-{
- char transportAddr[20]; /* Transport Layer Address */
-}EpIpAddr;
-
-typedef struct epIpAddrPort
-{
- EpIpAddr epIpAddr;
- char port[2];
-}EpIpAddrPort;
-
-typedef struct f1TaiSliceSuppLst
-{
- Bool pres;
- F1Snsaai snssai[MAXNUMOFSLICEITEMS];
-}F1TaiSliceSuppLst;
-
-typedef struct f1SrvdPlmn
-{
- PlmnId plmn;
- F1TaiSliceSuppLst taiSliceSuppLst;
-}F1SrvdPlmn;
-
-typedef struct f1BrdcstPlmnInfo
-{
- PlmnId plmn[MAX_PLMN]; /* PLMN id list */
- PlmnId extPlmn[MAX_PLMN]; /* Extended PLMN id list */
- U16 tac; /* 5GS-TAC */
- U32 nrCellId; /* NR Cell id */
- U8 ranac; /* RAN Area code */
-}F1BrdcstPlmnInfo;
-
-typedef struct f1CellInfo
-{
- NrEcgi nrCgi; /* Cell global Identity */
- U32 nrPci; /* Physical Cell Identity */
- PlmnId plmn[MAX_PLMN]; /* Available PLMN list */
- PlmnId extPlmn[MAX_PLMN]; /* Extended available PLMN list */
-}F1CellInfo;
-
-typedef struct f1DuCellInfo
-{
- F1CellInfo cellInfo; /* cell info */
- U16 tac; /* tracking area code */
- U16 epsTac; /* Configured EPS TAC */
- NrModeInfo f1Mode; /* NR mode info : FDD/TDD */
- U8 measTimeCfg; /* Measurement timing configuration */
- F1CellDir cellDir; /* Cell Direction */
- F1CellType cellType; /* Cell Type */
- F1BrdcstPlmnInfo brdcstPlmnInfo[MAXBPLMNNRMINUS1]; /* Broadcast PLMN Identity Info List */
-}F1DuCellInfo;
-
-typedef struct f1DuSysInfo
-{
- U8 *mibMsg; /* MIB message */
- U8 *sib1Msg; /* SIB1 message */
-}F1DuSysInfo;
-
-typedef struct f1CuSysInfo
-{
- F1SibType sibTypeToUpd[MAXNUMOFSIBTYPES]; /* SIB types to be updated */
-}F1CuSysInfo;
-
-typedef struct f1DuSrvdCellInfo
-{
- F1DuCellInfo duCellInfo; /* gNB-DU served cell info */
- F1DuSysInfo duSysInfo; /* gNB-DU System Information */
-}F1DuSrvdCellInfo;
-
-typedef struct f1DuSrvdCellToDel
-{
- NrEcgi oldNrCgi; /* Old NR CGI */
- F1DuSrvdCellInfo srvdCellInfo; /* Info of served cell to be deleted */
-}F1DuSrvdCellToDel;
-
-typedef struct f1CuActCellInfo
-{
- F1CellInfo cuCellInfo; /* gNB-CU available cell info */
- F1CuSysInfo cuSysInfo; /* gNB-CU System Information */
-}F1CuActCellInfo;
-
-typedef struct f1ActCellFail
-{
- NrEcgi nrCgi;
- F1FailCause cause;
-}F1ActCellFail;
-
-typedef struct srvStatus
-{
- SrvState state;
- Bool switchOffOngoing;
-}SrvStatus;
-
-typedef struct f1CellStatus
-{
- NrEcgi nrEcgi;
- SrvStatus status; /* Service status */
-}F1CellStatus;
-
-typedef struct f1DedSIDelUE
-{
- U32 gnbCuUeF1apId;
- NrEcgi nrEcgi;
-}F1DedSIDelUE;
-
-typedef struct tnlAssocInfo
-{
- Bool pres;
- EpIpAddr epIpAddr; /* Endpoint-IP Address */
- EpIpAddrPort epIpAddrport; /* Endpoint-IP Address and Port */
-}F1TnlAssocAddr;
-
-typedef struct f1TnlAssocUsage
-{
- Bool pres;
- F1AssocUsage usage;
-}F1TnlAssocUsage;
-
-typedef struct f1TnlAssoc
-{
- F1TnlAssocAddr assocInfo; /* TNL Assoc Transport Layer Info */
- F1TnlAssocUsage assocUsage; /* TNL Assoc usage */
-}F1TnlAssoc;
-
-typedef struct f1TnlAssocToRmv
-{
- F1TnlAssocAddr assocInfoCu; /* TNL Assoc Transport Layer Info of CU */
- F1TnlAssocAddr assocInfoDu; /* TNL Assoc Transport Layer Info of DU */
-}F1TnlAssocToRmv;
-
-typedef struct f1TnlAssocSetupFail
-{
- F1TnlAssocAddr assocInfo;
- F1FailCause cause;
-}F1TnlAssocSetupFail;
-
-
-typedef struct f1CellBarred
-{
- NrEcgi nrcgi;
- CellBarred cellBarred;
-}F1CellBarred;
-
-typedef struct f1EutraCell
-{
- U32 eutraCellId; /* EUTRA cell id */
- F1EutraModeInfo mode; /* EUTRA mode info : FDD/TDD */
- U8 rsrcInd; /* Protected EUTRA resource Indication */
-}F1EutraCell;
-
-typedef struct f1ProtectEUTRARsrc
-{
- U32 specShareGrpId; /* Spectrum sharing group id */
- F1EutraCell eutraCellList[MAXCELLINENB]; /* EUTRA cells list */
-}F1ProtectEUTRARsrc;
-
-typedef struct f1UacOperatorDefined
-{
- U8 accessCategory;
- U8 accessId;
-}F1UacOperatorDefined;
-
-typedef struct f1UacCategoryType
-{
- union
- {
- F1UacStandardAction action; /* UAC standardized action */
- F1UacOperatorDefined operatorDef; /* UAC operator defined */
- }type;
-}F1UacCategoryType;
-
-typedef struct f1UacType
-{
- U8 uacReducInd; /* Value 0 means no access rate reduction. Value 100 means full access rate reduction */
- F1UacCategoryType uacCategoryType; /* UAC Category type */
-}F1UacType;
-
-/* Unified Access Class Assistance Information */
-typedef struct f1UacAssistInfo
-{
- PlmnId plmn[MAXNUMOFUACPLMN]; /* UAC PLMN list */
- F1UacType uacType[MAXNUMOFUACPERPLMN]; /* UAC Type list */
-}F1UacAssistInfo;
-
-/* F1 setup related structures */
-
-typedef struct f1SetupReq
-{
- U32 transId; /* Uniquely identify transaction */
- U32 duId; /* DU ID */
- char duName[CU_DU_NAME_LEN_MAX]; /* DU name */
- F1DuSrvdCellInfo srvdCellLst[DU_MAX_CELLS]; /* Serving cell list */
- F1RrcVersion rrcVersion; /* RRC version */
-}F1SetupReq;
-
-typedef struct f1setupRsp
-{
- U32 transId; /* Uniquely identify transaction */
- char cuName[CU_DU_NAME_LEN_MAX]; /* CU Name */
- F1CuActCellInfo actCellInfo; /* cells to be activated */
- F1RrcVersion rrcVersion; /* RRC version */
-}F1SetupRsp;
-
-typedef struct f1SetupFail
-{
- F1FailureIE setupFail;
-}F1SetupFail;
-
-/* At reception of the RESET message the gNB-DU shall release all allocated resources on F1
- * and radio resources related to the UE association(s) indicated explicitly or implicitly in
- * the RESET message and remove the indicated UE contexts including F1AP ID. */
-typedef struct f1Reset
-{
- U32 transId; /* Uniquely identify transaction */
- F1FailCause cause; /* Failure cause */
- F1ResetType resetType; /* type of reset */
-}F1Reset;
-
-/* After the gNB-CU has released all assigned F1 resources and the UE F1AP IDs for all indicated
- * UE associations which can be used for new UE-associated logical F1-connections over the F1 interface,
- * the gNB-CU shall respond with the RESET ACKNOWLEDGE message. */
-typedef struct f1ResetAck
-{
- U32 transId; /* Uniquely identify transaction */
- F1LogicalConnUeAssoc ueAssocLogicalConn[MAX_F1_CONNECTIONS]; /* UE associated logical F1-connection list */
- F1CritDiagnostic critDiagnostic; /* Critical diagnostics */
-}F1ResetAck;
-
-typedef struct f1ErrorInd
-{
- U32 transId; /* Uniquely identify transaction */
- F1Entity errorOrigin; /* Specifies if error is originated at DU or CU */
- F1FailCause cause; /* Failure cause */
-/* If failure is due to Ue related message. */
- U32 gnbCuUeF1apId; /* gNB-CU UE F1AP Id */
- U32 gnbDuUeF1apId; /* gNB-DU UE F1AP Id */
- F1CritDiagnostic critDiagnostic; /* Critical diagnostics */
-}F1ErrorInd;
-
-typedef struct f1GnbDuCfgUpd
-{
- U32 transId; /* Uniquely identify transaction */
- F1DuSrvdCellInfo srvdCellLstAdd[DU_MAX_CELLS]; /* Served cell list to be added */
- F1DuSrvdCellToDel srvdCellLstMod[DU_MAX_CELLS]; /* Served cell list to be modified */
- NrEcgi srvdCellLstDel[DU_MAX_CELLS]; /* Served cell list to be deleted */
- F1CellStatus cellStatus[DU_MAX_CELLS]; /* Cell status */
- F1DedSIDelUE ueLst[MAX_UEID]; /* Ue list that requires dedicated SI delivery */
- U32 gnbDuId;
- F1TnlAssocToRmv gnbDuTnlAssocRmv[MAX_TNL_ASSOC]; /* TNL Assoc list to remove */
-}F1GnbDuCfgUpd;
-
-typedef struct f1GnbDuCfgUpdAck
-{
- U32 transId; /* Uniquely identify transaction */
- F1CuActCellInfo cellLstAct[DU_MAX_CELLS]; /* List of cells to be activated */
- F1CritDiagnostic critDiagnostic; /* Critical diagnostics */
- NrEcgi cellLstDeact[DU_MAX_CELLS]; /* List of cells to be deactivated */
-}F1GnbDuCfgUpdAck;
-
-typedef struct f1GnbDuCfgUpdFail
-{
- F1FailureIE gnbDuCfgUpdFail;
-}F1GnbDuCfgUpdFail;
-
-/* Sent by the gNB-CU to transfer updated information associated to an F1-C interface instance */
-typedef struct f1GnbCuCfgUpd
-{
- U32 transId; /* Uniquely identifies transaction */
- F1CuActCellInfo cellLstAct[DU_MAX_CELLS]; /* List of cells to be activated */
- NrEcgi cellLstDeact[DU_MAX_CELLS]; /* List of cells to be deactivated */
- F1TnlAssoc assocLstAdd[MAX_TNL_ASSOC]; /* List of TNL assocs to be added */
- F1TnlAssoc assocLstUpd[MAX_TNL_ASSOC]; /* List of TNL assocs to be updated */
- F1TnlAssocToRmv assocLstRmv[MAX_TNL_ASSOC]; /* List of TNL assocs to be removed */
- F1CellBarred cellToBarList[DU_MAX_CELLS]; /* List of Cells to be barred */
- F1ProtectEUTRARsrc protectEutraRsrcList[MAXCELLINENB]; /* List of Protected EUTRA resources */
-}F1GnbCuCfgUpd;
-
-/* Sent by a gNB-DU to a gNB-CU to acknowledge update of information
- * associated to an F1-C interface instance */
-typedef struct f1GnbCuCfgUpdAck
-{
- U32 transId; /* Uniquely identify transaction */
- F1ActCellFail actCellFailList[DU_MAX_CELLS]; /* Cells failed to be activated list */
- F1CritDiagnostic critDiagnostic; /* Critical diagnostics */
- F1TnlAssocAddr assocSetupList[MAX_TNL_ASSOC]; /* TNL Assoc Setup list */
- F1TnlAssocSetupFail assocSetupFailList[MAX_TNL_ASSOC]; /* TNL Assoc Setup fail list */
- F1DedSIDelUE dedSiDelUelist[MAXNUMOFUEID]; /* Dedicated SI delivery needed UE list */
-}F1GnbCuCfgUpdAck;
-
-typedef struct f1GnbCuCfgUpdFail
-{
- F1FailureIE gnbCuCfgUpdFail;
-}F1GnbCuCfgUpdFail;
-
-/* This procedure enables coordination of radio resource allocation between a gNB-CU and
- * a gNB-DU. Coordination request is sent by CU to DU */
-typedef struct f1GnbDuRsrcCoordReq
-{
- U32 transId; /* Uniquely identifies transaction */
- F1ReqType reqType; /* Request type */
- U8 cellResCoordReqCont; /* Container for X2AP E-UTRA - NR cell resource coordination request */
- F1IgnoreReq ignoreReq; /* Ignore coordination request */
-}F1GnbDuRsrcCoordReq;
-
-/* This message is sent by a gNB-DU to a gNB-CU, to express the desired resource allocation
- * for data traffic, as a response to the GNB-DU RESOURCE COORDINATION REQUEST. */
-typedef struct f1GnbDuRsrcCoordRsp
-{
- U32 transId; /* Uniquely identifies transaction */
- U8 cellResCoordRspCont; /* Container for X2AP E-UTRA - NR cell resource coordination response */
-}F1GnbDuRsrcCoordRsp;
-
-/* This message is sent by the gNB-DU to indicate to the gNB-CU its status of overload */
-typedef struct f1GnbDuStatusInd
-{
- U32 transId; /* Uniquely identifies transaction */
- F1GnbDuOvrloadInfo ovrloadInfo; /* gNB-DU overloaded information */
-}F1GnbDuStatusInd;
-
-/* This message is sent by either the gNB-DU or the gNB-CU to intiate the removal
- * of the interface instance and the related resources */
-typedef struct f1RmvReq
-{
- U32 transId; /* Uniquely identifies transaction */
-}F1RmvReq;
-
-/* This message acknowledges the initiation of removal of the interface
- * instance and the related resources */
-typedef struct f1RmvRsp
-{
- U32 transId; /* Uniquely identifies transaction */
- F1CritDiagnostic critDiagnos; /* Crititcality diagnostics */
-}F1RmvRsp;
-
-/* This message indicates that removing the interface instance and the related
- * resources cannot be accepted */
-typedef struct f1RmvFail
-{
- U32 transId; /* Uniquely identifies transaction */
- F1FailCause cause; /* Failure cause */
- F1CritDiagnostic critDiagnostic; /* Criticality diagnostics */
-}F1RmvFail;
-
-/* This message is sent by the gNB-CU to indicate to the gNB-DU a need to reduce
- * the rate at which UEs access the network. */
-typedef struct f1NwkAccessRateRed
-{
- U32 transId; /* Uniquely identifies transaction */
- F1UacAssistInfo uacAssistInfo; /* UAC Assistance Information */
-}F1NwkAccessRateRed;
-
-typedef struct f1Ipaddr
-{
- Bool ipV4Pres;
- U32 ipV4Addr;
-}F1IpAddr;
-
-typedef struct f1SctpParams
-{
- F1IpAddr duIpAddr;
- U16 duPort;
- F1IpAddr cuIpAddr;
- U16 cuPort;
-}F1SctpParams;
-
-typedef struct f1EgtpParams
-{
- F1IpAddr localIp; /* Ip address of local node */
- U16 localPort; /* Sender Port at local node */
- F1IpAddr destIp; /* Ip address of peer node */
- U16 destPort; /* Sender port at peer node */
- U32 minTunnelId;
- U32 maxTunnelId;
-}F1EgtpParams;
-
-typedef struct cellCfgParams
-{
- NrEcgi nrEcgi; /* ECGI */
- U16 nrPci; /* PCI */
- U16 fiveGsTac; /* 5gSTac */
- PlmnId plmn[MAX_PLMN]; /* List of serving PLMN IDs */
- U8 ranac; /* RAN Area Code */
- U32 maxUe; /* max UE per slot */
-}CellCfgParams;
-
-typedef struct schedulerCfg
-{
- U8 numTxAntPorts; /*!< Number of Tx antenna ports */
- U8 ulSchdType; /*!< Indicates which UL scheduler to use, range
- * is 0..(number of schedulers - 1) */
- U8 dlSchdType; /*!< Indicates which DL scheduler to use, range
- * is 0..(number of schedulers - 1) */
- U8 numCells; /*!< Max number of cells */
- U8 maxUlUePerTti; /*!< Max number of UE in UL per TTI */
- U8 maxDlUePerTti; /*!< Max number of UE in DL per TTI */
-}SchedulerCfg;
-
-typedef struct duCfgParams
-{
- F1SctpParams sctpParams; /* SCTP Params */
- F1EgtpParams egtpParams; /* EGTP Params */
- U32 maxUe;
- U32 duId;
- U8 duName[CU_DU_NAME_LEN_MAX];
- SchedulerCfg schedCfg;
- CellCfgParams cellCfg[DU_MAX_CELLS]; /* Cell info config*/
- F1DuSrvdCellInfo srvdCellLst[DU_MAX_CELLS]; /* Serving cell list *///TODO: this must be removed eventually
- F1RrcVersion rrcVersion; /* RRC version */
- ClCellCfg clCellCfg; /* CL cell configuration */
-
-}DuCfgParams;
-
-typedef struct duCellCb
-{
- U32 cellId; /* Internal cell Id */
- CellCfgParams cellInfo; /* Cell info */
- CellStatus cellStatus; /*Cell status */
-}DuCellCb;
-
-/*function declarations */
-void fillSlotConfig();
-S16 readClCfg();
-S16 readCfg();
-S16 duReadCfg();
-S16 bitStringToInt(BIT_STRING_t *bitString, U16 *val);
-
-#endif /* __DU_CONFIG_H__ */
-
-/**********************************************************************
- End of file
-**********************************************************************/