gnb_config.c 182 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
/*
 * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The OpenAirInterface Software Alliance licenses this file to You under
 * the OAI Public License, Version 1.1  (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.openairinterface.org/?page_id=698
 *
 * 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.
 *-------------------------------------------------------------------------------
 * For more information about the OpenAirInterface (OAI) Software Alliance:
 *      contact@openairinterface.org
 */

/*
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
23
  gnb_config.c
24
  -------------------
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
25 26 27
  AUTHOR  : Lionel GAUTHIER, navid nikaein, Laurent Winckel, WEI-TAI CHEN
  COMPANY : EURECOM, NTUST
  EMAIL   : Lionel.Gauthier@eurecom.fr, navid.nikaein@eurecom.fr, kroempa@gmail.com
28 29
*/

30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
#include <string.h>
#include <inttypes.h>

#include "log.h"
#include "log_extern.h"
#include "assertions.h"
#include "gnb_config.h"
#include "UTIL/OTG/otg.h"
#include "UTIL/OTG/otg_externs.h"
#if defined(ENABLE_ITTI)
# include "intertask_interface.h"
# if defined(ENABLE_USE_MME)
#   include "s1ap_eNB.h"
#   include "sctp_eNB_task.h"
# endif
#endif
#include "sctp_default_values.h"
// #include "SystemInformationBlockType2.h"
// #include "LAYER2/MAC/extern.h"
// #include "LAYER2/MAC/proto.h"
50 51
#include "PHY/phy_extern.h"
#include "PHY/INIT/phy_init.h"
52 53 54 55 56 57 58 59 60
#include "targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h"
#include "nfapi_vnf.h"
#include "nfapi_pnf.h"

#include "L1_paramdef.h"
#include "MACRLC_paramdef.h"
#include "common/config/config_userapi.h"
#include "RRC_config_tools.h"
#include "gnb_paramdef.h"
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
61
#include "LAYER2/NR_MAC_gNB/mac_proto.h"
62

63 64
extern uint16_t sf_ahead;

65
void RCconfig_nr_flexran()
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
{
  uint16_t  i;
  uint16_t  num_gnbs;
  char      aprefix[MAX_OPTNAME_SIZE*2 + 8];
  /* this will possibly truncate the cell id (RRC assumes int32_t).
   * Both Nid_cell and gnb_id are signed in RRC case, but we use unsigned for
   * the bitshifting to work properly */
  int32_t   Nid_cell = 0;
  uint16_t  Nid_cell_tr = 0;
  uint32_t  gnb_id = 0;

  /*
   * the only reason for all these variables is, that they are "hard-encoded"
   * into the CCPARAMS_DESC macro and we need it for the Nid_cell variable ...
   */
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
81 82 83
  char      *frame_type, *DL_prefix_type, *UL_prefix_type, *SIB1_frequencyOffsetSSB,
            *DL_SCS_SubcarrierSpacing, *DL_BWP_SubcarrierSpacing, *DL_BWP_prefix_type,
            *UL_frequencyShift7p5khz, *UL_SCS_SubcarrierSpacing, *UL_BWP_SubcarrierSpacing,
84 85
            *UL_BWP_prefix_type, *UL_timeAlignmentTimerCommon, 
            *ServingCellConfigCommon_ssb_PositionsInBurst_PR,
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
86 87 88 89 90 91 92 93 94 95 96 97 98
            *NIA_SubcarrierSpacing, *referenceSubcarrierSpacing, *dl_UL_TransmissionPeriodicity,
            *rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,
            *rach_groupBconfigured, *rach_messagePowerOffsetGroupB, 
            *prach_RootSequenceIndex_choice, *prach_msg1_SubcarrierSpacing,
            *restrictedSetConfig, *msg3_transformPrecoding, *prach_msg1_FDM,
            *powerRampingStep, *groupHoppingEnabledTransformPrecoding,
            *PUSCH_TimeDomainResourceAllocation_mappingType, *pucch_GroupHopping,
            *PDSCH_TimeDomainResourceAllocation_mappingType, *RateMatchPattern_patternType,
            *symbolsInResourceBlock, *RateMatchPattern_subcarrierSpacing, *RateMatchPattern_mode,
            *PDCCH_cce_REG_MappingType, *PDCCH_precoderGranularity,
            *tci_PresentInDCI, *SearchSpace_monitoringSlotPeriodicityAndOffset_choice,
            *SearchSpace_searchSpaceType, *ue_Specific__dci_Formats,
            *RateMatchPatternLTE_CRS_subframeAllocation_choice;
99 100 101 102 103 104

  long long int  downlink_frequency;

  int32_t   eutra_band, uplink_frequency_offset, N_RB_DL, nb_antenna_ports,
            MIB_subCarrierSpacingCommon, MIB_ssb_SubcarrierOffset, MIB_dmrs_TypeA_Position,
            pdcch_ConfigSIB1, SIB1_ssb_PeriodicityServingCell, SIB1_ss_PBCH_BlockPower,
105 106
            absoluteFrequencySSB, DL_FreqBandIndicatorNR,
            DL_absoluteFrequencyPointA, DL_offsetToCarrier,
107 108
            DL_carrierBandwidth, DL_locationAndBandwidth, UL_FreqBandIndicatorNR,
            UL_absoluteFrequencyPointA, UL_additionalSpectrumEmission, UL_p_Max,
109
            UL_offsetToCarrier, UL_carrierBandwidth,
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
            UL_locationAndBandwidth, ServingCellConfigCommon_ssb_periodicityServingCell,
            ServingCellConfigCommon_dmrs_TypeA_Position, ServingCellConfigCommon_ss_PBCH_BlockPower,
            nrofDownlinkSlots, nrofDownlinkSymbols, nrofUplinkSlots, nrofUplinkSymbols,
            rach_totalNumberOfRA_Preambles, rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth,
            rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth,
            rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf,
            rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one,
            rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two,
            rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four,
            rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight,
            rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen,
            rach_ra_Msg3SizeGroupA, rach_numberOfRA_PreamblesGroupA, rach_ra_ContentionResolutionTimer,
            rsrp_ThresholdSSB, rsrp_ThresholdSSB_SUL, prach_RootSequenceIndex_l839,
            prach_RootSequenceIndex_l139, prach_ConfigurationIndex, prach_msg1_FrequencyStart,
            zeroCorrelationZoneConfig, preambleReceivedTargetPower, preambleTransMax,
            ra_ResponseWindow, msg3_DeltaPreamble, p0_NominalWithGrant,
126 127 128
            PUSCH_TimeDomainResourceAllocation_k2,
            PUSCH_TimeDomainResourceAllocation_startSymbolAndLength,
            pucch_ResourceCommon, hoppingId, p0_nominal, PDSCH_TimeDomainResourceAllocation_k0,
129
            rateMatchPatternId, periodicityAndPattern, RateMatchPattern_controlResourceSet,
130
            controlResourceSetZero, searchSpaceZero,
131
            searchSpaceSIB1, searchSpaceOtherSystemInformation, pagingSearchSpace,
132
            ra_SearchSpace, PDCCH_common_controlResourceSetId,
133
            PDCCH_common_ControlResourceSet_duration, PDCCH_reg_BundleSize, PDCCH_interleaverSize,
134 135 136 137
            PDCCH_shiftIndex, PDCCH_TCI_StateId, PDCCH_DMRS_ScramblingID,
            SearchSpaceId, commonSearchSpaces_controlResourceSetId,
            SearchSpace_monitoringSlotPeriodicityAndOffset_value,
            SearchSpace_duration,
138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237
            SearchSpace_nrofCandidates_aggregationLevel1,
            SearchSpace_nrofCandidates_aggregationLevel2,
            SearchSpace_nrofCandidates_aggregationLevel4,
            SearchSpace_nrofCandidates_aggregationLevel8,
            SearchSpace_nrofCandidates_aggregationLevel16,
            Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1,
            Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2,
            Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4,
            Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8,
            Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16,
            Common_dci_Format2_3_monitoringPeriodicity,
            Common_dci_Format2_3_nrofPDCCH_Candidates,
            RateMatchPatternLTE_CRS_carrierFreqDL,
            RateMatchPatternLTE_CRS_carrierBandwidthDL,
            RateMatchPatternLTE_CRS_nrofCRS_Ports,
            RateMatchPatternLTE_CRS_v_Shift,
            RateMatchPatternLTE_CRS_radioframeAllocationPeriod,
            RateMatchPatternLTE_CRS_radioframeAllocationOffset
            ;

  /* get number of gNBs */
  paramdef_t GNBSParams[] = GNBSPARAMS_DESC;
  config_get(GNBSParams, sizeof(GNBSParams)/sizeof(paramdef_t), NULL);
  num_gnbs = GNBSParams[GNB_ACTIVE_GNBS_IDX].numelt;

  /* for gNB ID */
  paramdef_t GNBParams[]  = GNBPARAMS_DESC;
  paramlist_def_t GNBParamList = {GNB_CONFIG_STRING_GNB_LIST, NULL, 0};

  /* for Nid_cell */
  checkedparam_t config_check_CCparams[] = NRCCPARAMS_CHECK;
  paramdef_t CCsParams[] = NRCCPARAMS_DESC;
  paramlist_def_t CCsParamList = {GNB_CONFIG_STRING_COMPONENT_CARRIERS, NULL, 0};
  /* map parameter checking array instances to parameter definition array instances */
  for (int I = 0; I < (sizeof(CCsParams) / sizeof(paramdef_t)); I++) {
    CCsParams[I].chkPptr = &(config_check_CCparams[I]);
  }

  paramdef_t flexranParams[] = FLEXRANPARAMS_DESC;
  config_get(flexranParams, sizeof(flexranParams)/sizeof(paramdef_t), CONFIG_STRING_NETWORK_CONTROLLER_CONFIG);

  if (!RC.flexran) {
    RC.flexran = calloc(num_gnbs, sizeof(flexran_agent_info_t*));
    AssertFatal(RC.flexran,
                "can't ALLOCATE %zu Bytes for %d flexran agent info with size %zu\n",
                num_gnbs * sizeof(flexran_agent_info_t*),
                num_gnbs, sizeof(flexran_agent_info_t*));
  }

  for (i = 0; i < num_gnbs; i++) {
    RC.flexran[i] = calloc(1, sizeof(flexran_agent_info_t));
    AssertFatal(RC.flexran[i],
                "can't ALLOCATE %zu Bytes for flexran agent info (iteration %d/%d)\n",
                sizeof(flexran_agent_info_t), i + 1, num_gnbs);
    /* if config says "yes", enable Agent, in all other cases it's like "no" */
    RC.flexran[i]->enabled          = strcasecmp(*(flexranParams[FLEXRAN_ENABLED].strptr), "yes") == 0;
    /* if not enabled, simply skip the rest, it is not needed anyway */
    if (!RC.flexran[i]->enabled)
      continue;
    RC.flexran[i]->interface_name   = strdup(*(flexranParams[FLEXRAN_INTERFACE_NAME_IDX].strptr));
    //inet_ntop(AF_INET, &(enb_properties->properties[mod_id]->flexran_agent_ipv4_address), in_ip, INET_ADDRSTRLEN);
    RC.flexran[i]->remote_ipv4_addr = strdup(*(flexranParams[FLEXRAN_IPV4_ADDRESS_IDX].strptr));
    RC.flexran[i]->remote_port      = *(flexranParams[FLEXRAN_PORT_IDX].uptr);
    RC.flexran[i]->cache_name       = strdup(*(flexranParams[FLEXRAN_CACHE_IDX].strptr));
    RC.flexran[i]->node_ctrl_state  = strcasecmp(*(flexranParams[FLEXRAN_AWAIT_RECONF_IDX].strptr), "yes") == 0 ? ENB_WAIT : ENB_NORMAL_OPERATION;

    config_getlist(&GNBParamList, GNBParams, sizeof(GNBParams)/sizeof(paramdef_t),NULL);
    /* gNB ID from configuration, as read in by RCconfig_RRC() */
    if (!GNBParamList.paramarray[i][GNB_GNB_ID_IDX].uptr) {
      // Calculate a default gNB ID
# if defined(ENABLE_USE_MME)
      gnb_id = i + (s1ap_generate_eNB_id () & 0xFFFF8);
# else
      gnb_id = i;
# endif
    } else {
        gnb_id = *(GNBParamList.paramarray[i][GNB_GNB_ID_IDX].uptr);
    }

    /* cell ID */
    sprintf(aprefix, "%s.[%i]", GNB_CONFIG_STRING_GNB_LIST, i);
    config_getlist(&CCsParamList, NULL, 0, aprefix);
    if (CCsParamList.numelt > 0) {
      sprintf(aprefix, "%s.[%i].%s.[%i]", GNB_CONFIG_STRING_GNB_LIST, i, GNB_CONFIG_STRING_COMPONENT_CARRIERS, 0);
      config_get(CCsParams, sizeof(CCsParams)/sizeof(paramdef_t), aprefix);
      Nid_cell_tr = (uint16_t) Nid_cell;
    }

    RC.flexran[i]->mod_id   = i;
    RC.flexran[i]->agent_id = (((uint64_t)i) << 48) | (((uint64_t)gnb_id) << 16) | ((uint64_t)Nid_cell_tr);

    /* assume for the moment the monolithic case, i.e. agent can provide
     * information for all layers */
    RC.flexran[i]->capability_mask = FLEXRAN_CAP_LOPHY | FLEXRAN_CAP_HIPHY
                                   | FLEXRAN_CAP_LOMAC | FLEXRAN_CAP_HIMAC
                                   | FLEXRAN_CAP_RLC   | FLEXRAN_CAP_PDCP
                                   | FLEXRAN_CAP_SDAP  | FLEXRAN_CAP_RRC;
  }
}

238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259
void RCconfig_NR_L1(void) {
  int               i,j;
  paramdef_t L1_Params[] = L1PARAMS_DESC;
  paramlist_def_t L1_ParamList = {CONFIG_STRING_L1_LIST,NULL,0};


  if (RC.gNB == NULL) {
    RC.gNB                       = (PHY_VARS_gNB ***)malloc((1+NUMBER_OF_gNB_MAX)*sizeof(PHY_VARS_gNB**));
    LOG_I(NR_PHY,"RC.gNB = %p\n",RC.gNB);
    memset(RC.gNB,0,(1+NUMBER_OF_gNB_MAX)*sizeof(PHY_VARS_gNB**));
    RC.nb_nr_L1_CC = malloc((1+RC.nb_nr_L1_inst)*sizeof(int));
  }

  config_getlist( &L1_ParamList,L1_Params,sizeof(L1_Params)/sizeof(paramdef_t), NULL);

  if (L1_ParamList.numelt > 0) {

    for (j = 0; j < RC.nb_nr_L1_inst; j++) {
      RC.nb_nr_L1_CC[j] = *(L1_ParamList.paramarray[j][L1_CC_IDX].uptr);

      if (RC.gNB[j] == NULL) {
        RC.gNB[j]                       = (PHY_VARS_gNB **)malloc((1+MAX_NUM_CCs)*sizeof(PHY_VARS_gNB*));
260
        LOG_I(NR_PHY,"RC.gNB[%d] = %p\n",j,RC.gNB[j]);
261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347
        memset(RC.gNB[j],0,(1+MAX_NUM_CCs)*sizeof(PHY_VARS_gNB*));
      }

      for (i=0;i<RC.nb_nr_L1_CC[j];i++) {
        if (RC.gNB[j][i] == NULL) {
          RC.gNB[j][i] = (PHY_VARS_gNB *)malloc(sizeof(PHY_VARS_gNB));
          memset((void*)RC.gNB[j][i],0,sizeof(PHY_VARS_gNB));
          LOG_I(PHY,"RC.eNB[%d][%d] = %p\n",j,i,RC.gNB[j][i]);
          RC.gNB[j][i]->Mod_id  = j;
          RC.gNB[j][i]->CC_id   = i;
        }
      }

      if(strcmp(*(L1_ParamList.paramarray[j][L1_TRANSPORT_N_PREFERENCE_IDX].strptr), "local_mac") == 0) {
        sf_ahead = 4; // Need 4 subframe gap between RX and TX
      }else if (strcmp(*(L1_ParamList.paramarray[j][L1_TRANSPORT_N_PREFERENCE_IDX].strptr), "nfapi") == 0) {
        RC.gNB[j][0]->eth_params_n.local_if_name            = strdup(*(L1_ParamList.paramarray[j][L1_LOCAL_N_IF_NAME_IDX].strptr));
        RC.gNB[j][0]->eth_params_n.my_addr                  = strdup(*(L1_ParamList.paramarray[j][L1_LOCAL_N_ADDRESS_IDX].strptr));
        RC.gNB[j][0]->eth_params_n.remote_addr              = strdup(*(L1_ParamList.paramarray[j][L1_REMOTE_N_ADDRESS_IDX].strptr));
        RC.gNB[j][0]->eth_params_n.my_portc                 = *(L1_ParamList.paramarray[j][L1_LOCAL_N_PORTC_IDX].iptr);
        RC.gNB[j][0]->eth_params_n.remote_portc             = *(L1_ParamList.paramarray[j][L1_REMOTE_N_PORTC_IDX].iptr);
        RC.gNB[j][0]->eth_params_n.my_portd                 = *(L1_ParamList.paramarray[j][L1_LOCAL_N_PORTD_IDX].iptr);
        RC.gNB[j][0]->eth_params_n.remote_portd             = *(L1_ParamList.paramarray[j][L1_REMOTE_N_PORTD_IDX].iptr);
        RC.gNB[j][0]->eth_params_n.transp_preference        = ETH_UDP_MODE;

        sf_ahead = 2; // Cannot cope with 4 subframes betweem RX and TX - set it to 2

        RC.nb_nr_macrlc_inst = 1;  // This is used by mac_top_init_gNB()

        // This is used by init_gNB_afterRU()
        RC.nb_nr_CC = (int *)malloc((1+RC.nb_nr_inst)*sizeof(int));
        RC.nb_nr_CC[0]=1;

        RC.nb_nr_inst =1; // DJP - feptx_prec uses num_gNB but phy_init_RU uses nb_nr_inst

        LOG_I(PHY,"%s() NFAPI PNF mode - RC.nb_nr_inst=1 this is because phy_init_RU() uses that to index and not RC.num_gNB - why the 2 similar variables?\n", __FUNCTION__);
        LOG_I(PHY,"%s() NFAPI PNF mode - RC.nb_nr_CC[0]=%d for init_gNB_afterRU()\n", __FUNCTION__, RC.nb_nr_CC[0]);
        LOG_I(PHY,"%s() NFAPI PNF mode - RC.nb_nr_macrlc_inst:%d because used by mac_top_init_gNB()\n", __FUNCTION__, RC.nb_nr_macrlc_inst);

        mac_top_init_gNB();

        configure_nfapi_pnf(RC.gNB[j][0]->eth_params_n.remote_addr, RC.gNB[j][0]->eth_params_n.remote_portc, RC.gNB[j][0]->eth_params_n.my_addr, RC.gNB[j][0]->eth_params_n.my_portd, RC.gNB[j][0]->eth_params_n     .remote_portd);
      }else { // other midhaul
      } 
    }// for (j = 0; j < RC.nb_nr_L1_inst; j++)
    printf("Initializing northbound interface for L1\n");
    l1_north_init_gNB();
  }else{
    LOG_I(PHY,"No " CONFIG_STRING_L1_LIST " configuration found");    

    // DJP need to create some structures for VNF

    j = 0;

    RC.nb_nr_L1_CC = malloc((1+RC.nb_nr_L1_inst)*sizeof(int)); // DJP - 1 lot then???

    RC.nb_nr_L1_CC[j]=1; // DJP - hmmm

    if (RC.gNB[j] == NULL) {
      RC.gNB[j]                       = (PHY_VARS_gNB **)malloc((1+MAX_NUM_CCs)*sizeof(PHY_VARS_gNB**));
      LOG_I(PHY,"RC.gNB[%d] = %p\n",j,RC.gNB[j]);
      memset(RC.gNB[j],0,(1+MAX_NUM_CCs)*sizeof(PHY_VARS_gNB***));
    }

    for (i=0;i<RC.nb_nr_L1_CC[j];i++) {
      if (RC.gNB[j][i] == NULL) {
        RC.gNB[j][i] = (PHY_VARS_gNB *)malloc(sizeof(PHY_VARS_gNB));
        memset((void*)RC.gNB[j][i],0,sizeof(PHY_VARS_gNB));
        LOG_I(PHY,"RC.gNB[%d][%d] = %p\n",j,i,RC.gNB[j][i]);
        RC.gNB[j][i]->Mod_id  = j;
        RC.gNB[j][i]->CC_id   = i;
      }
    } // END for (i=0;i<RC.nb_nr_L1_CC[j];i++)
  
  }
}

void RCconfig_nr_macrlc() {
  int               j;

  paramdef_t MacRLC_Params[] = MACRLCPARAMS_DESC;
  paramlist_def_t MacRLC_ParamList = {CONFIG_STRING_MACRLC_LIST,NULL,0};

  config_getlist( &MacRLC_ParamList,MacRLC_Params,sizeof(MacRLC_Params)/sizeof(paramdef_t), NULL);    
  
  if ( MacRLC_ParamList.numelt > 0) {

WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
348 349 350
    RC.nb_nr_macrlc_inst=MacRLC_ParamList.numelt; 
    mac_top_init_gNB();   
    RC.nb_nr_mac_CC = (int*)malloc(RC.nb_nr_macrlc_inst*sizeof(int));
351

WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
352 353 354 355
    for (j=0;j<RC.nb_nr_macrlc_inst;j++) {
      RC.nb_nr_mac_CC[j] = *(MacRLC_ParamList.paramarray[j][MACRLC_CC_IDX].iptr);
      //RC.nrmac[j]->phy_test = *(MacRLC_ParamList.paramarray[j][MACRLC_PHY_TEST_IDX].iptr);
      //printf("PHY_TEST = %d,%d\n", RC.nrmac[j]->phy_test, j);
356 357 358 359

      if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr), "local_RRC") == 0) {
  // check number of instances is same as RRC/PDCP
  
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
360 361 362 363 364 365 366 367 368 369 370
      }else if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr), "cudu") == 0) {
        RC.nrmac[j]->eth_params_n.local_if_name            = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_N_IF_NAME_IDX].strptr));
        RC.nrmac[j]->eth_params_n.my_addr                  = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_N_ADDRESS_IDX].strptr));
        RC.nrmac[j]->eth_params_n.remote_addr              = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_REMOTE_N_ADDRESS_IDX].strptr));
        RC.nrmac[j]->eth_params_n.my_portc                 = *(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_N_PORTC_IDX].iptr);
        RC.nrmac[j]->eth_params_n.remote_portc             = *(MacRLC_ParamList.paramarray[j][MACRLC_REMOTE_N_PORTC_IDX].iptr);
        RC.nrmac[j]->eth_params_n.my_portd                 = *(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_N_PORTD_IDX].iptr);
        RC.nrmac[j]->eth_params_n.remote_portd             = *(MacRLC_ParamList.paramarray[j][MACRLC_REMOTE_N_PORTD_IDX].iptr);;
        RC.nrmac[j]->eth_params_n.transp_preference        = ETH_UDP_MODE;
      }else { // other midhaul
        AssertFatal(1==0,"MACRLC %d: %s unknown northbound midhaul\n",j, *(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr));
371 372 373 374
      } 

      if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_S_PREFERENCE_IDX].strptr), "local_L1") == 0) {

WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
375 376 377 378 379 380 381 382 383
      }else if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_S_PREFERENCE_IDX].strptr), "nfapi") == 0) {
        RC.nrmac[j]->eth_params_s.local_if_name            = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_S_IF_NAME_IDX].strptr));
        RC.nrmac[j]->eth_params_s.my_addr                  = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_S_ADDRESS_IDX].strptr));
        RC.nrmac[j]->eth_params_s.remote_addr              = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_REMOTE_S_ADDRESS_IDX].strptr));
        RC.nrmac[j]->eth_params_s.my_portc                 = *(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_S_PORTC_IDX].iptr);
        RC.nrmac[j]->eth_params_s.remote_portc             = *(MacRLC_ParamList.paramarray[j][MACRLC_REMOTE_S_PORTC_IDX].iptr);
        RC.nrmac[j]->eth_params_s.my_portd                 = *(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_S_PORTD_IDX].iptr);
        RC.nrmac[j]->eth_params_s.remote_portd             = *(MacRLC_ParamList.paramarray[j][MACRLC_REMOTE_S_PORTD_IDX].iptr);
        RC.nrmac[j]->eth_params_s.transp_preference        = ETH_UDP_MODE;
384 385 386 387

        sf_ahead = 2; // Cannot cope with 4 subframes betweem RX and TX - set it to 2

        printf("**************** vnf_port:%d\n", RC.mac[j]->eth_params_s.my_portc);
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
388 389 390 391
        configure_nfapi_vnf(RC.nrmac[j]->eth_params_s.my_addr, RC.nrmac[j]->eth_params_s.my_portc);
        printf("**************** RETURNED FROM configure_nfapi_vnf() vnf_port:%d\n", RC.nrmac[j]->eth_params_s.my_portc);
      }else { // other midhaul
        AssertFatal(1==0,"MACRLC %d: %s unknown southbound midhaul\n",j,*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_S_PREFERENCE_IDX].strptr));
392
      } 
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
393 394 395
    }//  for (j=0;j<RC.nb_nr_macrlc_inst;j++)
  }else {// MacRLC_ParamList.numelt > 0
    AssertFatal (0,"No " CONFIG_STRING_MACRLC_LIST " configuration found");     
396
  }
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
397

398
}
399 400 401

int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) {

WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417
  int                    num_gnbs                                                      = 0;
  int                    num_component_carriers                                        = 0;
  int                    j,k                                                           = 0;
  int32_t                gnb_id                                                        = 0;

  int                    nb_cc                                                         = 0;
  char*                  frame_type                                                    = NULL;
  char*                  DL_prefix_type                                                = NULL;
  char*                  UL_prefix_type                                                = NULL;

  int32_t                eutra_band                                                    = 0;
  long long int          downlink_frequency                                            = 0;
  int32_t                uplink_frequency_offset                                       = 0;
  int32_t                Nid_cell                                                      = 0;
  int32_t                N_RB_DL                                                       = 0;
  int32_t                nb_antenna_ports                                              = 0;
418 419

  ///NR
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
420 421
  //MIB
  int32_t                MIB_subCarrierSpacingCommon                                   = 0;
422
  int32_t                MIB_ssb_SubcarrierOffset                                      = 0;
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
423
  int32_t                MIB_dmrs_TypeA_Position                                       = 0;
424
  int32_t                pdcch_ConfigSIB1                                              = 0;
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
425 426

  //SIB1
427
  char*                  SIB1_frequencyOffsetSSB                                       = NULL; 
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
428 429
  int32_t                SIB1_ssb_PeriodicityServingCell                               = 0;
  int32_t                SIB1_ss_PBCH_BlockPower                                       = 0;
430
  //DownlinkConfigCommon
431
  //NR FrequencyInfoDL
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
432 433 434
  int32_t                absoluteFrequencySSB                                          = 0;
  int32_t                DL_FreqBandIndicatorNR                                        = 0;
  int32_t                DL_absoluteFrequencyPointA                                    = 0;
435 436

  //NR DL SCS-SpecificCarrier
437 438 439
  int32_t                DL_offsetToCarrier                                            = 0;
  char*                  DL_SCS_SubcarrierSpacing                                      = 0;
  int32_t                DL_carrierBandwidth                                           = 0;
440 441

  // NR BWP-DownlinkCommon
442 443
  int32_t                DL_locationAndBandwidth                                       = 0;
  char*                  DL_BWP_SubcarrierSpacing                                      = 0;
444
  char*                  DL_BWP_prefix_type                                            = NULL;  
445
  
446
  //NR FrequencyInfoUL
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
447 448
  int32_t                UL_FreqBandIndicatorNR                                        = 0;
  int32_t                UL_absoluteFrequencyPointA                                    = 0;
449
  int32_t                UL_additionalSpectrumEmission                                 = 0;
450
  int32_t                UL_p_Max                                                      = 0;
451
  char*                  UL_frequencyShift7p5khz                                       = 0;
452 453

  //NR UL SCS-SpecificCarrier
454 455 456
  int32_t                UL_offsetToCarrier                                            = 0;
  char*                  UL_SCS_SubcarrierSpacing                                      = 0;
  int32_t                UL_carrierBandwidth                                           = 0;
457 458

  // NR BWP-UplinkCommon
459 460
  int32_t                UL_locationAndBandwidth                                       = 0;
  char*                  UL_BWP_SubcarrierSpacing                                      = 0;
461
  char*                  UL_BWP_prefix_type                                            = NULL; 
462
  char*                  UL_timeAlignmentTimerCommon                                   = 0;
463
  
464
  int32_t                ServingCellConfigCommon_n_TimingAdvanceOffset                 = 0;
465
  char*                  ServingCellConfigCommon_ssb_PositionsInBurst_PR               = 0;
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
466 467
  int32_t                ServingCellConfigCommon_ssb_periodicityServingCell            = 0;
  int32_t                ServingCellConfigCommon_dmrs_TypeA_Position                   = 0;
468
  char*                  NIA_SubcarrierSpacing                                         = 0; 
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
469
  int32_t                ServingCellConfigCommon_ss_PBCH_BlockPower                    = 0;
470 471

  //NR TDD-UL-DL-ConfigCommon
472 473
  char*                  referenceSubcarrierSpacing                                    = 0;
  char*                  dl_UL_TransmissionPeriodicity                                 = 0;
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
474 475 476 477
  int32_t                nrofDownlinkSlots                                             = 0;
  int32_t                nrofDownlinkSymbols                                           = 0;
  int32_t                nrofUplinkSlots                                               = 0;
  int32_t                nrofUplinkSymbols                                             = 0;
478 479

  //NR RACH-ConfigCommon
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
480
  int32_t                rach_totalNumberOfRA_Preambles                                = 0;
481
  char*                  rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice         = 0;
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
482 483 484 485 486
  int32_t                rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth      = 0;
  int32_t                rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth      = 0;
  int32_t                rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf        = 0;
  int32_t                rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one            = 0;
  int32_t                rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two            = 0;
487 488 489
  int32_t                rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four           = 0;
  int32_t                rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight          = 0;
  int32_t                rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen        = 0;
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
490 491
  char*                  rach_groupBconfigured                                         = NULL;
  int32_t                rach_ra_Msg3SizeGroupA                                        = 0;
492
  char*                  rach_messagePowerOffsetGroupB                                 = NULL;
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
493 494 495 496
  int32_t                rach_numberOfRA_PreamblesGroupA                               = 0;
  int32_t                rach_ra_ContentionResolutionTimer                             = 0;
  int32_t                rsrp_ThresholdSSB                                             = 0;
  int32_t                rsrp_ThresholdSSB_SUL                                         = 0;
497 498 499 500 501 502
  char*                  prach_RootSequenceIndex_choice                                = NULL;
  int32_t                prach_RootSequenceIndex_l839                                  = 0;
  int32_t                prach_RootSequenceIndex_l139                                  = 0;
  char*                  prach_msg1_SubcarrierSpacing                                  = NULL;
  char*                  restrictedSetConfig                                           = NULL;
  char*                  msg3_transformPrecoding                                       = NULL;
503 504 505
  //ssb-perRACH-OccasionAndCB-PreamblesPerSSB not sure

  //NR RACH-ConfigGeneric
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
506
  int32_t                prach_ConfigurationIndex                                      = 0;
507
  char*                  prach_msg1_FDM                                                = NULL;
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
508 509 510 511
  int32_t                prach_msg1_FrequencyStart                                     = 0;
  int32_t                zeroCorrelationZoneConfig                                     = 0;
  int32_t                preambleReceivedTargetPower                                   = 0;
  int32_t                preambleTransMax                                              = 0;
512
  char*                  powerRampingStep                                              = NULL;
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
513
  int32_t                ra_ResponseWindow                                             = 0;
514 515

  //PUSCH-ConfigCommon
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
516 517 518
  char*                  groupHoppingEnabledTransformPrecoding                         = NULL;
  int32_t                msg3_DeltaPreamble                                            = 0;
  int32_t                p0_NominalWithGrant                                           = 0;
519 520

  ///PUSCH-TimeDomainResourceAllocation
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
521
  int32_t                PUSCH_TimeDomainResourceAllocation_k2                         = 0;
522
  char*                  PUSCH_TimeDomainResourceAllocation_mappingType                = NULL;
523
  int32_t                PUSCH_TimeDomainResourceAllocation_startSymbolAndLength       = 0;
524 525

  //PUCCH-ConfigCommon
526
  int32_t                pucch_ResourceCommon                                          = 0;
527
  char*                  pucch_GroupHopping                                            = NULL;
528
  int32_t                hoppingId                                                     = 0;
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
529
  int32_t                p0_nominal                                                    = 0;
530 531 532

  //PDSCH-ConfigCOmmon
  //PDSCH-TimeDomainResourceAllocation
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
533
  int32_t                PDSCH_TimeDomainResourceAllocation_k0                         = 0;
534
  char*                  PDSCH_TimeDomainResourceAllocation_mappingType                = NULL;
535
  int32_t                PDSCH_TimeDomainResourceAllocation_startSymbolAndLength       = 0;
536 537

  //RateMatchPattern  is used to configure one rate matching pattern for PDSCH
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
538
  int32_t                rateMatchPatternId                                            = 0;
539 540
  char*                  RateMatchPattern_patternType                                  = NULL;
  char*                  symbolsInResourceBlock                                        = NULL;
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
541 542
  int32_t                periodicityAndPattern                                         = 0;
  int32_t                RateMatchPattern_controlResourceSet                           = 0;
543 544
  char*                  RateMatchPattern_subcarrierSpacing                            = NULL;
  char*                  RateMatchPattern_mode                                         = NULL;
545 546

  //PDCCH-ConfigCommon
547 548
  int32_t                controlResourceSetZero                                        = 0;
  int32_t                searchSpaceZero                                               = 0;
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
549 550 551 552
  int32_t                searchSpaceSIB1                                               = 0;
  int32_t                searchSpaceOtherSystemInformation                             = 0;
  int32_t                pagingSearchSpace                                             = 0;
  int32_t                ra_SearchSpace                                                = 0;
553
  
554
  //NR PDCCH-ConfigCommon commonControlResourcesSets
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
555 556
  int32_t                PDCCH_common_controlResourceSetId                             = 0;
  int32_t                PDCCH_common_ControlResourceSet_duration                      = 0;
557
  char*                  PDCCH_cce_REG_MappingType                                     = NULL;
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
558 559 560
  int32_t                PDCCH_reg_BundleSize                                          = 0;
  int32_t                PDCCH_interleaverSize                                         = 0;
  int32_t                PDCCH_shiftIndex                                              = 0;  
561
  char*                  PDCCH_precoderGranularity                                     = NULL;
562
  int32_t                PDCCH_TCI_StateId                                             = 0;
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
563
  char*                  tci_PresentInDCI                                              = NULL;
564
  int32_t                PDCCH_DMRS_ScramblingID                                       = 0;
565 566

  //NR PDCCH-ConfigCommon commonSearchSpaces
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
567 568
  int32_t                SearchSpaceId                                                 = 0;
  int32_t                commonSearchSpaces_controlResourceSetId                       = 0;
569
  char*                  SearchSpace_monitoringSlotPeriodicityAndOffset_choice         = NULL;
570 571
  int32_t                SearchSpace_monitoringSlotPeriodicityAndOffset_value          = 0;
  int32_t                SearchSpace_duration                                          = 0;
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
572 573 574 575 576
  int32_t                SearchSpace_nrofCandidates_aggregationLevel1                  = 0;
  int32_t                SearchSpace_nrofCandidates_aggregationLevel2                  = 0;
  int32_t                SearchSpace_nrofCandidates_aggregationLevel4                  = 0;
  int32_t                SearchSpace_nrofCandidates_aggregationLevel8                  = 0;
  int32_t                SearchSpace_nrofCandidates_aggregationLevel16                 = 0;
577
  char*                  SearchSpace_searchSpaceType                                   = NULL;
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
578 579 580 581 582 583 584
  int32_t                Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1     = 0;
  int32_t                Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2     = 0;
  int32_t                Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4     = 0;
  int32_t                Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8     = 0;
  int32_t                Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16    = 0; 
  int32_t                Common_dci_Format2_3_monitoringPeriodicity                    = 0;
  int32_t                Common_dci_Format2_3_nrofPDCCH_Candidates                     = 0;
585
  char*                  ue_Specific__dci_Formats                                      = NULL;
586
  //NR  RateMatchPatternLTE-CRS
587
  int32_t                RateMatchPatternLTE_CRS_carrierFreqDL                         = 0;
588 589 590 591
  int32_t                RateMatchPatternLTE_CRS_carrierBandwidthDL                    = 0;
  int32_t                RateMatchPatternLTE_CRS_nrofCRS_Ports                         = 0;
  int32_t                RateMatchPatternLTE_CRS_v_Shift                               = 0;
  int32_t                RateMatchPatternLTE_CRS_radioframeAllocationPeriod            = 0;
592 593
  int32_t                RateMatchPatternLTE_CRS_radioframeAllocationOffset            = 0;
  char*                  RateMatchPatternLTE_CRS_subframeAllocation_choice             = NULL;
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
594

595 596 597 598 599 600 601
  int32_t                srb1_timer_poll_retransmit    = 0;
  int32_t                srb1_timer_reordering         = 0;
  int32_t                srb1_timer_status_prohibit    = 0;
  int32_t                srb1_poll_pdu                 = 0;
  int32_t                srb1_poll_byte                = 0;
  int32_t                srb1_max_retx_threshold       = 0;

WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
602
  //int32_t             my_int;
603 604

  paramdef_t GNBSParams[] = GNBSPARAMS_DESC;
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
605
  ////////// Identification parameters
606 607
  paramdef_t GNBParams[]  = GNBPARAMS_DESC;
  paramlist_def_t GNBParamList = {GNB_CONFIG_STRING_GNB_LIST,NULL,0};
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
608
  ////////// Physical parameters
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
609
  checkedparam_t config_check_CCparams[] = NRCCPARAMS_CHECK;
610
  paramdef_t CCsParams[] = NRCCPARAMS_DESC;
611 612
  paramlist_def_t CCsParamList = {GNB_CONFIG_STRING_COMPONENT_CARRIERS,NULL,0};
  
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
613
  paramdef_t SRB1Params[] = SRB1PARAMS_DESC;  
614 615

  /* get global parameters, defined outside any section in the config file */
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
616
 
617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639
  config_get( GNBSParams,sizeof(GNBSParams)/sizeof(paramdef_t),NULL); 
  num_gnbs = GNBSParams[GNB_ACTIVE_GNBS_IDX].numelt;
  AssertFatal (i<num_gnbs,"Failed to parse config file no %ith element in %s \n",i, GNB_CONFIG_STRING_ACTIVE_GNBS);
  
  #if defined(ENABLE_ITTI) && defined(ENABLE_USE_MME)

    if (strcasecmp( *(GNBSParams[GNB_ASN1_VERBOSITY_IDX].strptr), GNB_CONFIG_STRING_ASN1_VERBOSITY_NONE) == 0) {
      asn_debug      = 0;
      asn1_xer_print = 0;
    } else if (strcasecmp( *(GNBSParams[GNB_ASN1_VERBOSITY_IDX].strptr), GNB_CONFIG_STRING_ASN1_VERBOSITY_INFO) == 0) {
      asn_debug      = 1;
      asn1_xer_print = 1;
    } else if (strcasecmp(*(GNBSParams[GNB_ASN1_VERBOSITY_IDX].strptr) , GNB_CONFIG_STRING_ASN1_VERBOSITY_ANNOYING) == 0) {
      asn_debug      = 1;
      asn1_xer_print = 2;
    } else {
      asn_debug      = 0;
      asn1_xer_print = 0;
    }

  #endif

  if (num_gnbs>0) {
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
640
    // Output a list of all gNBs. ////////// Identification parameters
641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691
    config_getlist( &GNBParamList,GNBParams,sizeof(GNBParams)/sizeof(paramdef_t),NULL); 

    if (GNBParamList.paramarray[i][GNB_GNB_ID_IDX].uptr == NULL) {
    // Calculate a default gNB ID
      # if defined(ENABLE_USE_MME)
        uint32_t hash;
        hash = s1ap_generate_eNB_id ();
        gnb_id = i + (hash & 0xFFFF8);
      # else
        gnb_id = i;
      # endif
    } else {
        gnb_id = *(GNBParamList.paramarray[i][GNB_GNB_ID_IDX].uptr);
    }

    printf("NRRRC %d: Southbound Transport %s\n",i,*(GNBParamList.paramarray[i][GNB_TRANSPORT_S_PREFERENCE_IDX].strptr));

    if (strcmp(*(GNBParamList.paramarray[i][GNB_TRANSPORT_S_PREFERENCE_IDX].strptr), "local_mac") == 0) {
  
    } else if (strcmp(*(GNBParamList.paramarray[i][GNB_TRANSPORT_S_PREFERENCE_IDX].strptr), "cudu") == 0) {
      rrc->eth_params_s.local_if_name            = strdup(*(GNBParamList.paramarray[i][GNB_LOCAL_S_IF_NAME_IDX].strptr));
      rrc->eth_params_s.my_addr                  = strdup(*(GNBParamList.paramarray[i][GNB_LOCAL_S_ADDRESS_IDX].strptr));
      rrc->eth_params_s.remote_addr              = strdup(*(GNBParamList.paramarray[i][GNB_REMOTE_S_ADDRESS_IDX].strptr));
      rrc->eth_params_s.my_portc                 = *(GNBParamList.paramarray[i][GNB_LOCAL_S_PORTC_IDX].uptr);
      rrc->eth_params_s.remote_portc             = *(GNBParamList.paramarray[i][GNB_REMOTE_S_PORTC_IDX].uptr);
      rrc->eth_params_s.my_portd                 = *(GNBParamList.paramarray[i][GNB_LOCAL_S_PORTD_IDX].uptr);
      rrc->eth_params_s.remote_portd             = *(GNBParamList.paramarray[i][GNB_REMOTE_S_PORTD_IDX].uptr);
      rrc->eth_params_s.transp_preference        = ETH_UDP_MODE;
    } else { // other midhaul
    }       

    // search if in active list

    for (k=0; k <num_gnbs ; k++) {
      if (strcmp(GNBSParams[GNB_ACTIVE_GNBS_IDX].strlistptr[k], *(GNBParamList.paramarray[i][GNB_GNB_NAME_IDX].strptr) )== 0) {
        
        char gnbpath[MAX_OPTNAME_SIZE + 8];

        NRRRC_CONFIGURATION_REQ (msg_p).cell_identity     = gnb_id;
        NRRRC_CONFIGURATION_REQ (msg_p).tac               = (uint16_t)atoi( *(GNBParamList.paramarray[i][GNB_TRACKING_AREA_CODE_IDX].strptr) );
        NRRRC_CONFIGURATION_REQ (msg_p).mcc               = (uint16_t)atoi( *(GNBParamList.paramarray[i][GNB_MOBILE_COUNTRY_CODE_IDX].strptr) );
        NRRRC_CONFIGURATION_REQ (msg_p).mnc               = (uint16_t)atoi( *(GNBParamList.paramarray[i][GNB_MOBILE_NETWORK_CODE_IDX].strptr) );
        NRRRC_CONFIGURATION_REQ (msg_p).mnc_digit_length  = strlen(*(GNBParamList.paramarray[i][GNB_MOBILE_NETWORK_CODE_IDX].strptr));
        AssertFatal((NRRRC_CONFIGURATION_REQ (msg_p).mnc_digit_length == 2) ||
                    (NRRRC_CONFIGURATION_REQ (msg_p).mnc_digit_length == 3),"BAD MNC DIGIT LENGTH %d",
                     NRRRC_CONFIGURATION_REQ (msg_p).mnc_digit_length);

        // Parse optional physical parameters
        sprintf(gnbpath,"%s.[%i]",GNB_CONFIG_STRING_GNB_LIST,k),
        config_getlist( &CCsParamList,NULL,0,gnbpath); 
    
692
        LOG_I(NR_RRC,"num component carriers %d \n", num_component_carriers); 
693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714

        if ( CCsParamList.numelt> 0) {
          
          char ccspath[MAX_OPTNAME_SIZE*2 + 16];

          for (j = 0; j < CCsParamList.numelt ;j++) {
            
            sprintf(ccspath,"%s.%s.[%i]",gnbpath,GNB_CONFIG_STRING_COMPONENT_CARRIERS,j);
            config_get( CCsParams,sizeof(CCsParams)/sizeof(paramdef_t),ccspath);        
 
            nb_cc++;

            // NRRRC_CONFIGURATION_REQ (msg_p).tdd_config[j] = tdd_config;
            // AssertFatal (tdd_config <= TDD_Config__subframeAssignment_sa6,
            //             "Failed to parse gNB configuration file %s, gnb %d illegal tdd_config %d (should be 0-%d)!",
            //             RC.config_file_name, i, tdd_config, TDD_Config__subframeAssignment_sa6);
        
            // NRRRC_CONFIGURATION_REQ (msg_p).tdd_config_s[j] = tdd_config_s;
            // AssertFatal (tdd_config_s <= TDD_Config__specialSubframePatterns_ssp8,
            //             "Failed to parse gNB configuration file %s, gnb %d illegal tdd_config_s %d (should be 0-%d)!",
            //             RC.config_file_name, i, tdd_config_s, TDD_Config__specialSubframePatterns_ssp8);

WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
715
            if (!DL_prefix_type){
716
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d define %s: NORMAL,EXTENDED!\n",
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
717 718 719 720 721
                           RC.config_file_name, i, GNB_CONFIG_STRING_DL_PREFIX_TYPE);
            }else if (strcmp(DL_prefix_type, "NORMAL") == 0) {
              NRRRC_CONFIGURATION_REQ (msg_p).DL_prefix_type[j] = NORMAL;
            }else if (strcmp(DL_prefix_type, "EXTENDED") == 0) {
              NRRRC_CONFIGURATION_REQ (msg_p).DL_prefix_type[j] = EXTENDED;
722
            }else {
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
723 724
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for DL_prefix_type choice: NORMAL or EXTENDED !\n",
                           RC.config_file_name, i, DL_prefix_type);
725 726
            }

WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
727 728 729 730 731 732 733 734 735 736 737 738
            if (!UL_prefix_type){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d define %s: NORMAL,EXTENDED!\n",
                           RC.config_file_name, i, GNB_CONFIG_STRING_UL_PREFIX_TYPE);
            }else if (strcmp(UL_prefix_type, "NORMAL") == 0) {
              NRRRC_CONFIGURATION_REQ (msg_p).UL_prefix_type[j] = NORMAL;
            }else if (strcmp(UL_prefix_type, "EXTENDED") == 0) {
              NRRRC_CONFIGURATION_REQ (msg_p).UL_prefix_type[j] = EXTENDED;
            }else {
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for UL_prefix_type choice: NORMAL or EXTENDED !\n",
                           RC.config_file_name, i, UL_prefix_type);
            }            

739 740 741 742 743 744 745 746 747 748 749
            NRRRC_CONFIGURATION_REQ (msg_p).eutra_band[j] = eutra_band;
            NRRRC_CONFIGURATION_REQ (msg_p).downlink_frequency[j] = (uint32_t) downlink_frequency;
            NRRRC_CONFIGURATION_REQ (msg_p).uplink_frequency_offset[j] = (unsigned int) uplink_frequency_offset;
            NRRRC_CONFIGURATION_REQ (msg_p).Nid_cell[j]= Nid_cell;

            if (Nid_cell>503) {
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Nid_cell choice: 0...503 !\n",
                           RC.config_file_name, i, Nid_cell);
            }
        
            NRRRC_CONFIGURATION_REQ (msg_p).N_RB_DL[j]= N_RB_DL;
750 751
            
            /*
752 753 754 755
            if ((N_RB_DL!=6) && (N_RB_DL!=15) && (N_RB_DL!=25) && (N_RB_DL!=50) && (N_RB_DL!=75) && (N_RB_DL!=100)) {
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for N_RB_DL choice: 6,15,25,50,75,100 !\n",
                           RC.config_file_name, i, N_RB_DL);
            }
756
            */
757 758 759 760 761 762 763 764 765 766
        
            if (strcmp(frame_type, "FDD") == 0) {
              NRRRC_CONFIGURATION_REQ (msg_p).frame_type[j] = FDD;
            }else  if (strcmp(frame_type, "TDD") == 0) {
              NRRRC_CONFIGURATION_REQ (msg_p).frame_type[j] = TDD;
            }else {
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for frame_type choice: FDD or TDD !\n",
                           RC.config_file_name, i, frame_type);
            }

767 768 769 770 771 772 773 774 775 776 777 778 779
            if (!DL_prefix_type){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d define %s: NORMAL,EXTENDED!\n",
                           RC.config_file_name, i, GNB_CONFIG_STRING_DL_PREFIX_TYPE);
            }else if (strcmp(DL_prefix_type, "NORMAL") == 0) {
              NRRRC_CONFIGURATION_REQ (msg_p).DL_prefix_type[j] = NORMAL;
            }else  if (strcmp(DL_prefix_type, "EXTENDED") == 0) {
              NRRRC_CONFIGURATION_REQ (msg_p).DL_prefix_type[j] = EXTENDED;
            }else {
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for DL_prefix_type choice: NORMAL or EXTENDED !\n",
                           RC.config_file_name, i, DL_prefix_type);
            }

            if (!UL_prefix_type){
780
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d define %s: NORMAL,EXTENDED!\n",
781 782 783 784 785
                           RC.config_file_name, i, GNB_CONFIG_STRING_UL_PREFIX_TYPE);
            }else if (strcmp(UL_prefix_type, "NORMAL") == 0) {
              NRRRC_CONFIGURATION_REQ (msg_p).UL_prefix_type[j] = NORMAL;
            }else  if (strcmp(UL_prefix_type, "EXTENDED") == 0) {
              NRRRC_CONFIGURATION_REQ (msg_p).UL_prefix_type[j] = EXTENDED;
786
            }else {
787 788
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for UL_prefix_type choice: NORMAL or EXTENDED !\n",
                           RC.config_file_name, i, UL_prefix_type);
789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812
            }

            NRRRC_CONFIGURATION_REQ (msg_p).eutra_band[j] = eutra_band;
            NRRRC_CONFIGURATION_REQ (msg_p).downlink_frequency[j] = (uint32_t) downlink_frequency;
            NRRRC_CONFIGURATION_REQ (msg_p).uplink_frequency_offset[j] = (unsigned int) uplink_frequency_offset;
        
            if (config_check_band_frequencies(j,
              NRRRC_CONFIGURATION_REQ (msg_p).eutra_band[j],
              NRRRC_CONFIGURATION_REQ (msg_p).downlink_frequency[j],
              NRRRC_CONFIGURATION_REQ (msg_p).uplink_frequency_offset[j],
              NRRRC_CONFIGURATION_REQ (msg_p).frame_type[j])) {
               AssertFatal(0, "error calling enb_check_band_frequencies\n");
            }

            if ((nb_antenna_ports <1) || (nb_antenna_ports > 2)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, enb %d unknown value \"%d\" for nb_antenna_ports choice: 1..2 !\n",
                           RC.config_file_name, i, nb_antenna_ports);
            }
            NRRRC_CONFIGURATION_REQ (msg_p).nb_antenna_ports[j] = nb_antenna_ports;


            ////////////////////////////////////////////////////////////////////////////////
            //---------------------------NR--------Configuration--------------------------//
            ////////////////////////////////////////////////////////////////////////////////
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
813 814 815 816 817 818 819
            /////////////////////////////////MIB///////////////////////////////
            NRRRC_CONFIGURATION_REQ (msg_p).MIB_subCarrierSpacingCommon[j] = MIB_subCarrierSpacingCommon;
            if ((MIB_subCarrierSpacingCommon !=15) && (MIB_subCarrierSpacingCommon !=30) && (MIB_subCarrierSpacingCommon !=60) && (MIB_subCarrierSpacingCommon !=120)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for MIB_subCarrierSpacingCommon choice: 15,30,60,120 !\n",
                           RC.config_file_name, i, MIB_subCarrierSpacingCommon);
            }

820 821 822 823 824 825
            NRRRC_CONFIGURATION_REQ (msg_p).MIB_ssb_SubcarrierOffset[j] = MIB_ssb_SubcarrierOffset;
            if ((MIB_ssb_SubcarrierOffset <0) || (MIB_ssb_SubcarrierOffset > 15)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for MIB_ssb_SubcarrierOffset choice: 1..23 !\n",
                           RC.config_file_name, i, MIB_ssb_SubcarrierOffset);
            }

WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844
            NRRRC_CONFIGURATION_REQ (msg_p).MIB_dmrs_TypeA_Position[j] = MIB_dmrs_TypeA_Position;
            if ((MIB_dmrs_TypeA_Position !=2) && (MIB_dmrs_TypeA_Position !=3)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for MIB_dmrs_TypeA_Position choice:2,3 !\n",
                           RC.config_file_name, i, MIB_dmrs_TypeA_Position);
            }          

            NRRRC_CONFIGURATION_REQ (msg_p).pdcch_ConfigSIB1[j] = pdcch_ConfigSIB1;
            if ((pdcch_ConfigSIB1 <0) || (pdcch_ConfigSIB1 > 255)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for pdcch_ConfigSIB1 choice: 0..3279165 !\n",
                           RC.config_file_name, i, pdcch_ConfigSIB1);
            }
            
            ////////////////////////////////SIB1//////////////////////////////

            if (strcmp(SIB1_frequencyOffsetSSB , "khz-5") == 0) {
              NRRRC_CONFIGURATION_REQ (msg_p).SIB1_frequencyOffsetSSB[j] = -5;                    
            }else if (strcmp(SIB1_frequencyOffsetSSB , "khz5") == 0) {
              NRRRC_CONFIGURATION_REQ (msg_p).SIB1_frequencyOffsetSSB[j] = 5;
            }else {
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
845
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for SIB1_frequencyOffsetSSB !\n",
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
846 847 848 849 850 851 852 853 854
                           RC.config_file_name, i, SIB1_frequencyOffsetSSB);
            }

            NRRRC_CONFIGURATION_REQ (msg_p).SIB1_ssb_PeriodicityServingCell[j] = SIB1_ssb_PeriodicityServingCell;
            if ((SIB1_ssb_PeriodicityServingCell !=5)  && 
                (SIB1_ssb_PeriodicityServingCell !=10) && 
                (SIB1_ssb_PeriodicityServingCell !=20) && 
                (SIB1_ssb_PeriodicityServingCell !=40) &&
                (SIB1_ssb_PeriodicityServingCell !=80) &&
855
                (SIB1_ssb_PeriodicityServingCell !=160)  ){
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
856 857 858 859 860 861 862 863 864
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SIB1_ssb_PeriodicityServingCell choice: 5,10,20,40,80,160 !\n",
                           RC.config_file_name, i, SIB1_ssb_PeriodicityServingCell);
            }            

            NRRRC_CONFIGURATION_REQ (msg_p).SIB1_ss_PBCH_BlockPower[j] = SIB1_ss_PBCH_BlockPower;
            if ((SIB1_ss_PBCH_BlockPower < -60) || (SIB1_ss_PBCH_BlockPower > 50)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SIB1_ss_PBCH_BlockPower choice: -60..50 !\n",
              RC.config_file_name, i, SIB1_ss_PBCH_BlockPower);
            }
865 866 867 868

            ////////////////////////////////NR FrequencyInfoDL//////////////////////////////
            NRRRC_CONFIGURATION_REQ (msg_p).absoluteFrequencySSB[j] = absoluteFrequencySSB;
            if ((absoluteFrequencySSB <0) || (absoluteFrequencySSB > 3279165)){
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
869
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for absoluteFrequencySSB choice: 0..3279165 !\n",
870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892
                           RC.config_file_name, i, absoluteFrequencySSB);
            }

            NRRRC_CONFIGURATION_REQ (msg_p).DL_FreqBandIndicatorNR[j] = DL_FreqBandIndicatorNR;
            if ((DL_FreqBandIndicatorNR <1) || (DL_FreqBandIndicatorNR > 1024)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for DL_FreqBandIndicatorNR choice: 1..1024 !\n",
                           RC.config_file_name, i, DL_FreqBandIndicatorNR);
            }

            NRRRC_CONFIGURATION_REQ (msg_p).DL_absoluteFrequencyPointA[j] = DL_absoluteFrequencyPointA;
            if ((DL_absoluteFrequencyPointA <0) || (DL_absoluteFrequencyPointA > 3279165)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for DL_absoluteFrequencyPointA choice: 0..3279165 !\n",
                           RC.config_file_name, i, DL_absoluteFrequencyPointA);
            }            
            

            /////////////////////////////////NR DL SCS-SpecificCarrier///////////////////////////
            NRRRC_CONFIGURATION_REQ (msg_p).DL_offsetToCarrier[j] = DL_offsetToCarrier;
            if ((DL_offsetToCarrier <0) || (DL_offsetToCarrier > 2199)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for DL_offsetToCarrier choice: 0..11 !\n",
                           RC.config_file_name, i, DL_offsetToCarrier);
            }

893
            if (strcmp(DL_SCS_SubcarrierSpacing,"kHz15")==0) {
894
              NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz15;
895
            }else if (strcmp(DL_SCS_SubcarrierSpacing,"kHz30")==0) {
896
              NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz30;
897
            }else if (strcmp(DL_SCS_SubcarrierSpacing,"kHz60")==0) {
898
              NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz60;
899
            }else if (strcmp(DL_SCS_SubcarrierSpacing,"kHz120")==0) {
900
              NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz120;
901
            }else if (strcmp(DL_SCS_SubcarrierSpacing,"kHz240")==0) {
902
              NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz240;
903
            }else { 
904 905
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for DL_SCS_SubcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n",
                           RC.config_file_name, i, DL_SCS_SubcarrierSpacing);
906 907 908 909 910 911 912 913 914 915 916 917 918 919 920
            }

            NRRRC_CONFIGURATION_REQ (msg_p).DL_carrierBandwidth[j] = DL_carrierBandwidth;
            if ((DL_carrierBandwidth <1) || (DL_carrierBandwidth > 275)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for DL_carrierBandwidth choice: 1..275 !\n",
              RC.config_file_name, i, DL_carrierBandwidth);
            }

            /////////////////////////////////NR BWP-DownlinkCommon///////////////////////////
            NRRRC_CONFIGURATION_REQ (msg_p).DL_locationAndBandwidth[j] = DL_locationAndBandwidth;
            if ((DL_locationAndBandwidth <0) || (DL_locationAndBandwidth > 37949)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for DL_locationAndBandwidth choice: 0..11 !\n",
              RC.config_file_name, i, DL_locationAndBandwidth);
            }

921
            if (strcmp(DL_BWP_SubcarrierSpacing,"kHz15")==0) {
922
              NRRRC_CONFIGURATION_REQ (msg_p).DL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz15;
923
            }else if (strcmp(DL_BWP_SubcarrierSpacing,"kHz30")==0) {
924
              NRRRC_CONFIGURATION_REQ (msg_p).DL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz30;
925
            }else if (strcmp(DL_BWP_SubcarrierSpacing,"kHz60")==0) {
926
              NRRRC_CONFIGURATION_REQ (msg_p).DL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz60;
927
            }else if (strcmp(DL_BWP_SubcarrierSpacing,"kHz120")==0) {
928
              NRRRC_CONFIGURATION_REQ (msg_p).DL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz120;
929
            }else if (strcmp(DL_BWP_SubcarrierSpacing,"kHz240")==0) {
930
              NRRRC_CONFIGURATION_REQ (msg_p).DL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz240;
931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947
            }else { 
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for DL_BWP_SubcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n",
                           RC.config_file_name, i, DL_BWP_SubcarrierSpacing);
            }

            if (!DL_BWP_prefix_type){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d define %s: NORMAL,EXTENDED!\n",
                           RC.config_file_name, i, GNB_CONFIG_STRING_DL_PREFIX_TYPE);
            }else if (strcmp(DL_BWP_prefix_type, "NORMAL") == 0) {
              NRRRC_CONFIGURATION_REQ (msg_p).DL_BWP_prefix_type[j] = NORMAL;
            }else if (strcmp(DL_BWP_prefix_type, "EXTENDED") == 0) {
              NRRRC_CONFIGURATION_REQ (msg_p).DL_BWP_prefix_type[j] = EXTENDED;
            }else {
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for DL_BWP_prefix_type choice: NORMAL or EXTENDED !\n",
                           RC.config_file_name, i, DL_BWP_prefix_type);
            }                        

948 949 950 951 952 953 954 955 956 957 958 959 960
            /////////////////////////////////NR FrequencyInfoUL//////////////////////////////
            NRRRC_CONFIGURATION_REQ (msg_p).UL_FreqBandIndicatorNR[j] = UL_FreqBandIndicatorNR;
            if ((UL_FreqBandIndicatorNR <1) || (UL_FreqBandIndicatorNR > 1024)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for UL_FreqBandIndicatorNR choice: 1..1024 !\n",
                           RC.config_file_name, i, UL_FreqBandIndicatorNR);
            }

            NRRRC_CONFIGURATION_REQ (msg_p).UL_absoluteFrequencyPointA[j] = UL_absoluteFrequencyPointA;
            if ((UL_absoluteFrequencyPointA <0) || (UL_absoluteFrequencyPointA > 3279165)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for UL_absoluteFrequencyPointA choice: 0..3279165 !\n",
                           RC.config_file_name, i, UL_absoluteFrequencyPointA);
            }       

961 962 963 964 965 966 967 968 969 970
            NRRRC_CONFIGURATION_REQ (msg_p).UL_additionalSpectrumEmission[j] = UL_additionalSpectrumEmission;
            if ((UL_additionalSpectrumEmission <0) || (UL_additionalSpectrumEmission > 7)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for UL_additionalSpectrumEmission choice: 0..7 !\n",
                           RC.config_file_name, i, UL_additionalSpectrumEmission);
            }            

            NRRRC_CONFIGURATION_REQ (msg_p).UL_p_Max[j] = UL_p_Max;
            if ((UL_p_Max <-30) || (UL_p_Max > 33)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for UL_p_Max choice: -30..33 !\n",
              RC.config_file_name, i, UL_p_Max);
971 972
            }

973 974 975 976
            if (strcmp(UL_frequencyShift7p5khz,"TRUE") == 0) {
              NRRRC_CONFIGURATION_REQ (msg_p).UL_frequencyShift7p5khz[j] = NR_FrequencyInfoUL__frequencyShift7p5khz_true; //enum true = 0
            }else{
              NRRRC_CONFIGURATION_REQ (msg_p).UL_frequencyShift7p5khz[j] = 1;//false               
977 978 979 980 981 982 983 984 985
            } 

            /////////////////////////////////NR UL SCS-SpecificCarrier///////////////////////////
            NRRRC_CONFIGURATION_REQ (msg_p).UL_offsetToCarrier[j] = UL_offsetToCarrier;
            if ((UL_offsetToCarrier <0) || (UL_offsetToCarrier > 2199)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for UL_offsetToCarrier choice: 0..11 !\n",
              RC.config_file_name, i, UL_offsetToCarrier);
            }

986
            if (strcmp(UL_SCS_SubcarrierSpacing,"kHz15")==0) {
987
              NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz15;
988
            }else if (strcmp(UL_SCS_SubcarrierSpacing,"kHz30")==0) {
989
              NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz30;
990
            }else if (strcmp(UL_SCS_SubcarrierSpacing,"kHz60")==0) {
991
              NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz60;
992
            }else if (strcmp(UL_SCS_SubcarrierSpacing,"kHz120")==0) {
993
              NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz120;
994
            }else if (strcmp(UL_SCS_SubcarrierSpacing,"kHz240")==0) {
995
              NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz240;
996 997
            }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for UL_SCS_SubcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n",
              RC.config_file_name, i, UL_SCS_SubcarrierSpacing);
998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012
            }

            NRRRC_CONFIGURATION_REQ (msg_p).UL_carrierBandwidth[j] = UL_carrierBandwidth;
            if ((UL_carrierBandwidth <1) || (UL_carrierBandwidth > 275)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for UL_carrierBandwidth choice: 1..275 !\n",
              RC.config_file_name, i, UL_carrierBandwidth);
            }

            /////////////////////////////////NR BWP-UplinkCommon///////////////////////////
            NRRRC_CONFIGURATION_REQ (msg_p).UL_locationAndBandwidth[j] = UL_locationAndBandwidth;
            if ((UL_locationAndBandwidth <0) || (UL_locationAndBandwidth > 37949)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for UL_locationAndBandwidth choice: 0..11 !\n",
              RC.config_file_name, i, UL_locationAndBandwidth);
            }

1013
            if (strcmp(UL_BWP_SubcarrierSpacing,"kHz15")==0) {
1014
              NRRRC_CONFIGURATION_REQ (msg_p).UL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz15;
1015
            }else if (strcmp(UL_BWP_SubcarrierSpacing,"kHz30")==0) {
1016
              NRRRC_CONFIGURATION_REQ (msg_p).UL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz30;
1017
            }else if (strcmp(UL_BWP_SubcarrierSpacing,"kHz60")==0) {
1018
              NRRRC_CONFIGURATION_REQ (msg_p).UL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz60;
1019
            }else if (strcmp(UL_BWP_SubcarrierSpacing,"kHz120")==0) {
1020
              NRRRC_CONFIGURATION_REQ (msg_p).UL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz120;
1021
            }else if (strcmp(UL_BWP_SubcarrierSpacing,"kHz240")==0) {
1022
              NRRRC_CONFIGURATION_REQ (msg_p).UL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz240;
1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039
            }else { 
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for UL_BWP_SubcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n",
                           RC.config_file_name, i, UL_BWP_SubcarrierSpacing);
            }

            if (!UL_BWP_prefix_type){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d define %s: NORMAL,EXTENDED!\n",
                           RC.config_file_name, i, GNB_CONFIG_STRING_DL_PREFIX_TYPE);
            }else if (strcmp(UL_BWP_prefix_type, "NORMAL") == 0) {
              NRRRC_CONFIGURATION_REQ (msg_p).UL_BWP_prefix_type[j] = NORMAL;
            }else if (strcmp(UL_BWP_prefix_type, "EXTENDED") == 0) {
              NRRRC_CONFIGURATION_REQ (msg_p).UL_BWP_prefix_type[j] = EXTENDED;
            }else {
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for UL_BWP_prefix_type choice: NORMAL or EXTENDED !\n",
                           RC.config_file_name, i, UL_BWP_prefix_type);
            }  

1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060
            if (strcmp(UL_timeAlignmentTimerCommon,"ms500")==0) {
              NRRRC_CONFIGURATION_REQ (msg_p).UL_timeAlignmentTimerCommon[j] = NR_TimeAlignmentTimer_ms500;
            }else if (strcmp(UL_timeAlignmentTimerCommon,"ms750")==0) {
              NRRRC_CONFIGURATION_REQ (msg_p).UL_timeAlignmentTimerCommon[j] = NR_TimeAlignmentTimer_ms750;
            }else if (strcmp(UL_timeAlignmentTimerCommon,"ms1280")==0) {
              NRRRC_CONFIGURATION_REQ (msg_p).UL_timeAlignmentTimerCommon[j] = NR_TimeAlignmentTimer_ms1280;
            }else if (strcmp(UL_timeAlignmentTimerCommon,"ms1920")==0) {
              NRRRC_CONFIGURATION_REQ (msg_p).UL_timeAlignmentTimerCommon[j] = NR_TimeAlignmentTimer_ms1920;
            }else if (strcmp(UL_timeAlignmentTimerCommon,"ms2560")==0) {
              NRRRC_CONFIGURATION_REQ (msg_p).UL_timeAlignmentTimerCommon[j] = NR_TimeAlignmentTimer_ms2560;
            }else if (strcmp(UL_timeAlignmentTimerCommon,"ms5120")==0) {
              NRRRC_CONFIGURATION_REQ (msg_p).UL_timeAlignmentTimerCommon[j] = NR_TimeAlignmentTimer_ms5120;
            }else if (strcmp(UL_timeAlignmentTimerCommon,"ms10240")==0) {
              NRRRC_CONFIGURATION_REQ (msg_p).UL_timeAlignmentTimerCommon[j] = NR_TimeAlignmentTimer_ms10240;
            }else if (strcmp(UL_timeAlignmentTimerCommon,"infinity")==0) {
              NRRRC_CONFIGURATION_REQ (msg_p).UL_timeAlignmentTimerCommon[j] = NR_TimeAlignmentTimer_infinity;
            }else { 
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for UL_timeAlignmentTimerCommon choice: ms500,ms750,ms1280,ms1920,ms2560,ms5120,ms10240,infinity!\n",
                           RC.config_file_name, i, UL_timeAlignmentTimerCommon);
            }

1061
            if (strcmp(ServingCellConfigCommon_ssb_PositionsInBurst_PR,"shortBitmap")==0) {
1062
              NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_PositionsInBurst_PR[j] = NR_ServingCellConfigCommon__ssb_PositionsInBurst_PR_shortBitmap;
1063
            }else if (strcmp(ServingCellConfigCommon_ssb_PositionsInBurst_PR,"mediumBitmap")==0) {
1064
              NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_PositionsInBurst_PR[j] = NR_ServingCellConfigCommon__ssb_PositionsInBurst_PR_mediumBitmap;
1065
            }else if (strcmp(ServingCellConfigCommon_ssb_PositionsInBurst_PR,"longBitmap")==0) {
1066
              NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_PositionsInBurst_PR[j] = NR_ServingCellConfigCommon__ssb_PositionsInBurst_PR_longBitmap;
1067
            }else if (strcmp(ServingCellConfigCommon_ssb_PositionsInBurst_PR,"NOTHING")==0) {
1068
              NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_PositionsInBurst_PR[j] = NR_ServingCellConfigCommon__ssb_PositionsInBurst_PR_NOTHING;
1069 1070 1071 1072 1073 1074
            }else { 
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for ServingCellConfigCommon_ssb_PositionsInBurst_PR choice !\n",
                           RC.config_file_name, i, ServingCellConfigCommon_ssb_PositionsInBurst_PR);
            }            


WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
1075
            switch (ServingCellConfigCommon_ssb_periodicityServingCell) {
1076
              case 5:
1077
                NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] =  NR_ServingCellConfigCommon__ssb_periodicityServingCell_ms5;
1078 1079 1080
                break;

              case 10:
1081
                NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] =  NR_ServingCellConfigCommon__ssb_periodicityServingCell_ms10;
1082 1083 1084
                break;

              case 20:
1085
                NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] =  NR_ServingCellConfigCommon__ssb_periodicityServingCell_ms20;
1086 1087 1088
                break;
              
              case 40:
1089
                NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] =  NR_ServingCellConfigCommon__ssb_periodicityServingCell_ms40;
1090 1091 1092
                break;
                          
              case 80:
1093
                NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] =  NR_ServingCellConfigCommon__ssb_periodicityServingCell_ms80;
1094 1095 1096
                break;

              case 160:
1097
                NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] =  NR_ServingCellConfigCommon__ssb_periodicityServingCell_ms160;
1098 1099 1100
                break;

               default:
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
1101 1102
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for ServingCellConfigCommon_ssb_periodicityServingCell choice: -6,0,6 !\n",
                             RC.config_file_name, i, ServingCellConfigCommon_ssb_periodicityServingCell);
1103 1104 1105
                break;
            }

WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
1106
            switch (ServingCellConfigCommon_dmrs_TypeA_Position) {
1107
              case 2:
1108
                NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_dmrs_TypeA_Position[j] =  NR_ServingCellConfigCommon__dmrs_TypeA_Position_pos2;
1109 1110 1111
                break;

              case 3:
1112
                NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_dmrs_TypeA_Position[j] =  NR_ServingCellConfigCommon__dmrs_TypeA_Position_pos3;
1113 1114 1115
                break;

               default:
1116
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for ServingCellConfigCommon_dmrs_TypeA_Position choice: 2,3 !\n",
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
1117
                             RC.config_file_name, i, ServingCellConfigCommon_dmrs_TypeA_Position);
1118 1119 1120 1121
                break;
            }

            if (strcmp(NIA_SubcarrierSpacing,"kHz15")==0) {
1122
              NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz15;
1123
            }else if (strcmp(NIA_SubcarrierSpacing,"kHz30")==0) {
1124
              NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz30;
1125
            }else if (strcmp(NIA_SubcarrierSpacing,"kHz60")==0) {
1126
              NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz60;
1127
            }else if (strcmp(NIA_SubcarrierSpacing,"kHz120")==0) {
1128
              NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz120;
1129
            }else if (strcmp(NIA_SubcarrierSpacing,"kHz240")==0) {
1130
              NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz240;
1131 1132 1133 1134
            }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for NIA_SubcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n",
              RC.config_file_name, i, NIA_SubcarrierSpacing);
            }

WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
1135 1136 1137 1138
            NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ss_PBCH_BlockPower[j] = ServingCellConfigCommon_ss_PBCH_BlockPower;
            if ((ServingCellConfigCommon_ss_PBCH_BlockPower < -60) || (ServingCellConfigCommon_ss_PBCH_BlockPower > 50)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for ServingCellConfigCommon_ss_PBCH_BlockPower choice: 0..11 !\n",
              RC.config_file_name, i, ServingCellConfigCommon_ss_PBCH_BlockPower);
1139 1140 1141 1142
            }

            /////////////////////////////////NR TDD-UL-DL-ConfigCommon///////////////////////////
            if (strcmp(referenceSubcarrierSpacing,"kHz15")==0) {
1143
              NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz15;
1144
            }else if (strcmp(referenceSubcarrierSpacing,"kHz30")==0) {
1145
              NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz30;
1146
            }else if (strcmp(referenceSubcarrierSpacing,"kHz60")==0) {
1147
              NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz60;
1148
            }else if (strcmp(referenceSubcarrierSpacing,"kHz120")==0) {
1149
              NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz120;
1150
            }else if (strcmp(referenceSubcarrierSpacing,"kHz240")==0) {
1151
              NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz240;
1152 1153 1154 1155 1156 1157
            }else { 
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for referenceSubcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n",
                  RC.config_file_name, i, referenceSubcarrierSpacing);
            }

            if (strcmp(dl_UL_TransmissionPeriodicity,"ms0p5")==0) {
1158
              NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = NR_TDD_UL_DL_Pattern__dl_UL_TransmissionPeriodicity_ms0p5;
1159
            }else if (strcmp(dl_UL_TransmissionPeriodicity,"ms0p625")==0) {
1160
              NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = NR_TDD_UL_DL_Pattern__dl_UL_TransmissionPeriodicity_ms0p625;
1161
            }else if (strcmp(dl_UL_TransmissionPeriodicity,"ms1")==0) {
1162
              NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = NR_TDD_UL_DL_Pattern__dl_UL_TransmissionPeriodicity_ms1;
1163
            }else if (strcmp(dl_UL_TransmissionPeriodicity,"ms1p25")==0) {
1164
              NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = NR_TDD_UL_DL_Pattern__dl_UL_TransmissionPeriodicity_ms1p25;
1165
            }else if (strcmp(dl_UL_TransmissionPeriodicity,"ms2")==0) {
1166
              NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = NR_TDD_UL_DL_Pattern__dl_UL_TransmissionPeriodicity_ms2;
1167
            }else if (strcmp(dl_UL_TransmissionPeriodicity,"ms2p5")==0) {
1168
              NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = NR_TDD_UL_DL_Pattern__dl_UL_TransmissionPeriodicity_ms2p5;
1169
            }else if (strcmp(dl_UL_TransmissionPeriodicity,"ms5")==0) {
1170
              NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = NR_TDD_UL_DL_Pattern__dl_UL_TransmissionPeriodicity_ms5;
1171
            }else if (strcmp(dl_UL_TransmissionPeriodicity,"ms10")==0) {
1172
              NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = NR_TDD_UL_DL_Pattern__dl_UL_TransmissionPeriodicity_ms10;
1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211
            }else { 
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for dl_UL_TransmissionPeriodicity choice: minusinfinity,ms0p5,ms0p625,ms1,ms1p25,ms2,ms2p5,ms5,ms10 !\n",
                           RC.config_file_name, i, dl_UL_TransmissionPeriodicity);
            }

            NRRRC_CONFIGURATION_REQ (msg_p).nrofDownlinkSlots[j] = nrofDownlinkSlots;
            if ((nrofDownlinkSlots < 0) || (nrofDownlinkSlots > 320)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for nrofDownlinkSlots choice: 0..320 !\n",
                           RC.config_file_name, i, nrofDownlinkSlots);
            }

            NRRRC_CONFIGURATION_REQ (msg_p).nrofDownlinkSymbols[j] = nrofDownlinkSymbols;
            if ((nrofDownlinkSymbols < 0) || (nrofDownlinkSymbols > 13)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for nrofDownlinkSymbols choice: 0..13 !\n",
                           RC.config_file_name, i, nrofDownlinkSymbols);
            }

            NRRRC_CONFIGURATION_REQ (msg_p).nrofUplinkSlots[j] = nrofUplinkSlots;
            if ((nrofUplinkSlots < 0) || (nrofUplinkSlots > 320)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for nrofUplinkSlots choice: 0..320 !\n",
                           RC.config_file_name, i, nrofUplinkSlots);
            }
 
            NRRRC_CONFIGURATION_REQ (msg_p).nrofUplinkSymbols[j] = nrofUplinkSymbols;
            if ((nrofUplinkSymbols < 0) || (nrofUplinkSymbols > 13)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for nrofUplinkSymbols choice: 0..13 !\n",
                           RC.config_file_name, i, nrofUplinkSymbols);
            }

            /////////////////////////////////NR RACH-ConfigCommon///////////////////////////

            NRRRC_CONFIGURATION_REQ (msg_p).rach_totalNumberOfRA_Preambles[j] = rach_totalNumberOfRA_Preambles;
            if ((rach_totalNumberOfRA_Preambles <1) || (rach_totalNumberOfRA_Preambles>63)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_numberOfRA_Preambles choice: 1..63 !\n",
                           RC.config_file_name, i, rach_totalNumberOfRA_Preambles);
            }

            if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"oneEighth")==0) {
              
1212
              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneEighth;
1213 1214
              switch (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth){
                case 4:
1215
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n4;
1216 1217
                  break;
                case 8:
1218
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n8;
1219 1220
                  break;
                case 12:
1221
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n12;
1222 1223
                  break;
                case 16:
1224
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n16;
1225 1226
                  break;
                case 20:
1227
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n20;
1228 1229
                  break;
                case 24:
1230
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n24;
1231 1232
                  break;
                case 28:
1233
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n28;
1234 1235
                  break;
                case 32:
1236
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n32;
1237 1238
                  break;
                case 36:
1239
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n36;
1240 1241
                  break;
                case 40:
1242
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n40;
1243 1244
                  break;
                case 44:
1245
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n44;
1246 1247
                  break;
                case 48:
1248
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n48;
1249 1250
                  break;
                case 52:
1251
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n52;
1252 1253
                  break;
                case 56:
1254
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n56;
1255 1256
                  break;
                case 60:
1257
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n60;
1258 1259
                  break;
                case 64:
1260
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n64;
1261 1262 1263 1264 1265 1266 1267 1268 1269
                  break;
                default:
                  AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth choice: 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64!\n",
                               RC.config_file_name, i, rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth);
                  break;
              }//End oneEighth

            }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"oneFourth")==0) {
              
1270
              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneFourth;
1271 1272
              switch (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth){
                case 4:
1273
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n4;
1274 1275
                  break;
                case 8:
1276
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n8;
1277 1278
                  break;
                case 12:
1279
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n12;
1280 1281
                  break;
                case 16:
1282
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n16;
1283 1284
                  break;
                case 20:
1285
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n20;
1286 1287
                  break;
                case 24:
1288
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n24;
1289 1290
                  break;
                case 28:
1291
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n28;
1292 1293
                  break;
                case 32:
1294
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n32;
1295 1296
                  break;
                case 36:
1297
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n36;
1298 1299
                  break;
                case 40:
1300
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n40;
1301 1302
                  break;
                case 44:
1303
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n44;
1304 1305
                  break;
                case 48:
1306
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n48;
1307 1308
                  break;
                case 52:
1309
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n52;
1310 1311
                  break;
                case 56:
1312
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n56;
1313 1314
                  break;
                case 60:
1315
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n60;
1316 1317
                  break;
                case 64:
1318
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n64;
1319 1320 1321 1322 1323 1324 1325 1326 1327
                  break;
                default:
                  AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth choice: 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64!\n",
                               RC.config_file_name, i, rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth);
                  break;
              }//End oneFourth

            }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"oneHalf")==0) {
              
1328
              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneHalf;
1329 1330
              switch (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf){
                case 4:
1331
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n4;
1332 1333
                  break;
                case 8:
1334
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n8;
1335 1336
                  break;
                case 12:
1337
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n12;
1338 1339
                  break;
                case 16:
1340
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n16;
1341 1342
                  break;
                case 20:
1343
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n20;
1344 1345
                  break;
                case 24:
1346
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n24;
1347 1348
                  break;
                case 28:
1349
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n28;
1350 1351
                  break;
                case 32:
1352
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n32;
1353 1354
                  break;
                case 36:
1355
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n36;
1356 1357
                  break;
                case 40:
1358
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n40;
1359 1360
                  break;
                case 44:
1361
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n44;
1362 1363
                  break;
                case 48:
1364
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n48;
1365 1366
                  break;
                case 52:
1367
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n52;
1368 1369
                  break;
                case 56:
1370
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n56;
1371 1372
                  break;
                case 60:
1373
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n60;
1374 1375
                  break;
                case 64:
1376
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n64;
1377 1378 1379 1380 1381 1382 1383 1384 1385
                  break;
                default:
                  AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf choice: 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64!\n",
                               RC.config_file_name, i, rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf);
                  break;
              }//End oneHalf

            }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"one")==0) {
              
1386
              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_one;
1387 1388
              switch (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one){
                case 4:
1389
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n4;
1390 1391
                  break;
                case 8:
1392
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n8;
1393 1394
                  break;
                case 12:
1395
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n12;
1396 1397
                  break;
                case 16:
1398
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n16;
1399 1400
                  break;
                case 20:
1401
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n20;
1402 1403
                  break;
                case 24:
1404
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n24;
1405 1406
                  break;
                case 28:
1407
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n28;
1408 1409
                  break;
                case 32:
1410
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n32;
1411 1412
                  break;
                case 36:
1413
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n36;
1414 1415
                  break;
                case 40:
1416
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n40;
1417 1418
                  break;
                case 44:
1419
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n44;
1420 1421
                  break;
                case 48:
1422
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n48;
1423 1424
                  break;
                case 52:
1425
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n52;
1426 1427
                  break;
                case 56:
1428
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n56;
1429 1430
                  break;
                case 60:
1431
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n60;
1432 1433
                  break;
                case 64:
1434
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n64;
1435 1436 1437 1438 1439 1440 1441 1442 1443
                  break;
                default:
                  AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one choice: 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64!\n",
                               RC.config_file_name, i, rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one);
                  break;
              }//End one

            }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"two")==0) {
              
1444
              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_two;
1445 1446
              switch (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one){
                case 4:
1447
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n4;
1448 1449
                  break;
                case 8:
1450
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n8;
1451 1452
                  break;
                case 12:
1453
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n12;
1454 1455
                  break;
                case 16:
1456
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n16;
1457 1458
                  break;
                case 20:
1459
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n20;
1460 1461
                  break;
                case 24:
1462
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n24;
1463 1464
                  break;
                case 28:
1465
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n28;
1466 1467
                  break;
                case 32:
1468
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n32;
1469 1470 1471 1472 1473 1474 1475 1476 1477
                  break;
                default:
                  AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two choice: 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64!\n",
                               RC.config_file_name, i, rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two);
                  break;
              }//End two

            }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"four")==0) {
              
1478
              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_four;
1479 1480 1481 1482 1483 1484 1485 1486
              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four[j] = rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four;
              if ((rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four < 1) || (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four > 16)){
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four choice: 1..16 !\n",
                             RC.config_file_name, i, rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four);
              }//End four

            }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"eight")==0) {
              
1487
              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_eight;
1488 1489 1490 1491 1492 1493 1494 1495
              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight[j] = rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight;
              if ((rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight < 1) || (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight > 8)){
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight choice: 1..8 !\n",
                             RC.config_file_name, i, rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight);
              }//End eight 

            }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"sixteen")==0) {
              
1496
              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_sixteen;    
1497 1498 1499 1500 1501 1502 1503
              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen[j] = rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen;
              if ((rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen < 1) || (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen > 4)){
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen choice: 1..4 !\n",
                             RC.config_file_name, i, rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen);
              }//End sixteen

            }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"NOTHING")==0) {
1504
              NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_NOTHING;    
1505 1506 1507 1508 1509 1510 1511 1512 1513 1514
            }else { 
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice: oneEighth,oneFourth,oneHalf,one,two,four,eight,sixteen !\n",
                           RC.config_file_name, i, rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice);
            }

            if (strcmp(rach_groupBconfigured , "ENABLE") == 0) {
              NRRRC_CONFIGURATION_REQ (msg_p).rach_groupBconfigured [j] = TRUE;

              switch (rach_ra_Msg3SizeGroupA) {
                case 56:
1515
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = NR_RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b56;
1516 1517
                  break;
                case 144:
1518
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = NR_RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b144;
1519 1520
                  break;
                case 208:
1521
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = NR_RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b208;
1522 1523
                  break;
                case 256:
1524
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = NR_RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b256;
1525 1526
                  break;
                case 282:
1527
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = NR_RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b282;
1528 1529
                  break;
                case 480:
1530
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = NR_RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b480;
1531 1532
                  break;
                case 640:
1533
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = NR_RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b640;
1534 1535
                  break;
                case 800:
1536
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = NR_RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b800;
1537 1538
                  break;
                case 1000:
1539
                  NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = NR_RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b1000;
1540 1541 1542 1543 1544 1545 1546 1547
                  break;
                default:
                  AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ra_Msg3SizeGroupA choice: 56,144,208,256,282,480,640,800,1000!\n",
                               RC.config_file_name, i, rach_ra_Msg3SizeGroupA);
                  break;
              }// End switch (rach_ra_Msg3SizeGroupA)

              if (strcmp(rach_messagePowerOffsetGroupB,"minusinfinity")==0) {
1548
                RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = NR_RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_minusinfinity;
1549
              }else if (strcmp(rach_messagePowerOffsetGroupB,"dB0")==0) {
1550
                RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = NR_RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB0;
1551
              }else if (strcmp(rach_messagePowerOffsetGroupB,"dB5")==0) {
1552
                RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = NR_RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB5;
1553
              }else if (strcmp(rach_messagePowerOffsetGroupB,"dB8")==0) {
1554
                RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = NR_RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB8;
1555
              }else if (strcmp(rach_messagePowerOffsetGroupB,"dB10")==0) {
1556
                RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = NR_RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB10;
1557
              }else if (strcmp(rach_messagePowerOffsetGroupB,"dB12")==0) {
1558
                RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = NR_RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB12;
1559
              }else if (strcmp(rach_messagePowerOffsetGroupB,"dB15")==0) {
1560
                RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = NR_RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB15;
1561
              }else if (strcmp(rach_messagePowerOffsetGroupB,"dB18")==0) {
1562
                RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = NR_RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB18;
1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577
              }else{
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for rach_messagePowerOffsetGroupB choice: minusinfinity,dB0,dB5,dB8,dB10,dB12,dB15,dB18!\n",
                             RC.config_file_name, i, rach_messagePowerOffsetGroupB);
              }// End if (strcmp(rach_messagePowerOffsetGroupB,"minusinfinity")==0)

              NRRRC_CONFIGURATION_REQ (msg_p).rach_numberOfRA_PreamblesGroupA[j] = rach_numberOfRA_PreamblesGroupA;
              if ((rach_numberOfRA_PreamblesGroupA <1) || (rach_numberOfRA_PreamblesGroupA>64)){
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_numberOfRA_PreamblesGroupA choice: 1..63 !\n",
                             RC.config_file_name, i, rach_numberOfRA_PreamblesGroupA);
              }

            }// End if (strcmp(rach_groupBconfigured , "ENABLE") == 0) 

            switch (rach_ra_ContentionResolutionTimer) {
              case 8:
1578
                NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = NR_RACH_ConfigCommon__ra_ContentionResolutionTimer_sf8;
1579 1580
                break;
              case 16:
1581
                NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = NR_RACH_ConfigCommon__ra_ContentionResolutionTimer_sf16;
1582 1583
                break;
              case 24:
1584
                NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = NR_RACH_ConfigCommon__ra_ContentionResolutionTimer_sf24;
1585 1586
                break;
              case 32:
1587
                NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = NR_RACH_ConfigCommon__ra_ContentionResolutionTimer_sf32;
1588 1589
                break;
              case 40:
1590
                NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = NR_RACH_ConfigCommon__ra_ContentionResolutionTimer_sf40;
1591 1592
                break;
              case 48:
1593
                NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = NR_RACH_ConfigCommon__ra_ContentionResolutionTimer_sf48;
1594 1595
                break;
              case 56:
1596
                NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = NR_RACH_ConfigCommon__ra_ContentionResolutionTimer_sf56;
1597 1598
                break;
              case 64:
1599
                NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = NR_RACH_ConfigCommon__ra_ContentionResolutionTimer_sf64;
1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620
                break;
              default:
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ra_ContentionResolutionTimer choice: 8,16,24,32,40,48,56,64!\n",
                             RC.config_file_name, i, rach_ra_ContentionResolutionTimer);
                break;
            }// End switch (rach_ra_ContentionResolutionTimer)

            
            NRRRC_CONFIGURATION_REQ (msg_p).rsrp_ThresholdSSB[j] = rsrp_ThresholdSSB;
            if ((rsrp_ThresholdSSB <0) || (rsrp_ThresholdSSB>124)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rsrp_ThresholdSSB choice: 0..124 !\n",
                           RC.config_file_name, i, rsrp_ThresholdSSB);
            }

            NRRRC_CONFIGURATION_REQ (msg_p).rsrp_ThresholdSSB_SUL[j] = rsrp_ThresholdSSB_SUL;
            if ((rsrp_ThresholdSSB_SUL <0) || (rsrp_ThresholdSSB_SUL>124)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rsrp_ThresholdSSB_SUL choice: 0..124 !\n",
                           RC.config_file_name, i, rsrp_ThresholdSSB_SUL);
            }

            if (strcmp(prach_RootSequenceIndex_choice , "l839") == 0) {
1621
              NRRRC_CONFIGURATION_REQ (msg_p).prach_RootSequenceIndex_choice[j] = NR_RACH_ConfigCommon__prach_RootSequenceIndex_PR_l839;
1622 1623
              NRRRC_CONFIGURATION_REQ (msg_p).prach_RootSequenceIndex_l839[j] = prach_RootSequenceIndex_l839;              
            }else if (strcmp(prach_RootSequenceIndex_choice , "l139") == 0){
1624
              NRRRC_CONFIGURATION_REQ (msg_p).prach_RootSequenceIndex_choice[j] = NR_RACH_ConfigCommon__prach_RootSequenceIndex_PR_l139;
1625 1626
              NRRRC_CONFIGURATION_REQ (msg_p).prach_RootSequenceIndex_l139[j] = prach_RootSequenceIndex_l139;
            }else {
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
1627
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for prach_RootSequenceIndex_choice !\n",
1628
                           RC.config_file_name, i, prach_RootSequenceIndex_choice);
1629 1630 1631
            }

            if (strcmp(prach_msg1_SubcarrierSpacing,"kHz15")==0) {
1632
              NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz15;
1633
            }else if (strcmp(prach_msg1_SubcarrierSpacing,"kHz30")==0) {
1634
              NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz30;
1635
            }else if (strcmp(prach_msg1_SubcarrierSpacing,"kHz60")==0) {
1636
              NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz60;
1637
            }else if (strcmp(prach_msg1_SubcarrierSpacing,"kHz120")==0) {
1638
              NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz120;
1639
            }else if (strcmp(prach_msg1_SubcarrierSpacing,"kHz240")==0) {
1640
              NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz240;
1641 1642 1643 1644 1645 1646
            }else { 
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for prach_msg1_SubcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n",
                           RC.config_file_name, i, prach_msg1_SubcarrierSpacing);
            }

            if (strcmp(restrictedSetConfig , "unrestrictedSet") == 0) {
1647
              NRRRC_CONFIGURATION_REQ (msg_p).restrictedSetConfig[j] = NR_RACH_ConfigCommon__restrictedSetConfig_unrestrictedSet;                    
1648
            }else if (strcmp(restrictedSetConfig , "restrictedSetTypeA") == 0) {
1649
              NRRRC_CONFIGURATION_REQ (msg_p).restrictedSetConfig[j] = NR_RACH_ConfigCommon__restrictedSetConfig_restrictedSetTypeA;
1650
            }else if (strcmp(restrictedSetConfig , "restrictedSetTypeB") == 0) {
1651
              NRRRC_CONFIGURATION_REQ (msg_p).restrictedSetConfig[j] = NR_RACH_ConfigCommon__restrictedSetConfig_restrictedSetTypeB;
1652
            }else {
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
1653
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for restrictedSetConfig !\n",
1654 1655 1656 1657
                           RC.config_file_name, i, restrictedSetConfig);
            }

            if (strcmp(msg3_transformPrecoding , "ENABLE") == 0){
1658
              NRRRC_CONFIGURATION_REQ (msg_p).msg3_transformPrecoding[j] = TRUE;
1659 1660 1661 1662 1663 1664 1665 1666 1667 1668
            }

            ////////////////////////////////NR RACH-ConfigGeneric//////////////////////////////
            NRRRC_CONFIGURATION_REQ (msg_p).prach_ConfigurationIndex[j] = prach_ConfigurationIndex;
            if ((prach_ConfigurationIndex <0) || (prach_ConfigurationIndex>255)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for prach_ConfigurationIndex choice: 0..255 !\n",
                           RC.config_file_name, i, prach_ConfigurationIndex);
            }

            if (strcmp(prach_msg1_FDM , "one") == 0) {
1669
              NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_FDM[j] = NR_RACH_ConfigGeneric__msg1_FDM_one;                    
1670
            }else if (strcmp(prach_msg1_FDM , "two") == 0) {
1671
              NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_FDM[j] = NR_RACH_ConfigGeneric__msg1_FDM_two;
1672
            }else if (strcmp(prach_msg1_FDM , "four") == 0) {
1673
              NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_FDM[j] = NR_RACH_ConfigGeneric__msg1_FDM_four;
1674
            }else if (strcmp(prach_msg1_FDM , "eight") == 0) {
1675
              NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_FDM[j] = NR_RACH_ConfigGeneric__msg1_FDM_eight;
1676
            }else {
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
1677
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for prach_msg1_FDM !\n",
1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700
                           RC.config_file_name, i, prach_msg1_FDM);
            }            
            
            NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_FrequencyStart[j] = prach_msg1_FrequencyStart;
            if ((prach_msg1_FrequencyStart <0) || (prach_msg1_FrequencyStart>274)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for prach_msg1_FrequencyStart choice: 0..274 !\n",
                           RC.config_file_name, i, prach_msg1_FrequencyStart);
            }           

            NRRRC_CONFIGURATION_REQ (msg_p).zeroCorrelationZoneConfig[j] = zeroCorrelationZoneConfig;
            if ((zeroCorrelationZoneConfig <0) || (zeroCorrelationZoneConfig>15)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for zeroCorrelationZoneConfig choice: 0..15 !\n",
                           RC.config_file_name, i, zeroCorrelationZoneConfig);
            }

            NRRRC_CONFIGURATION_REQ (msg_p).preambleReceivedTargetPower[j] = preambleReceivedTargetPower;
            if ((preambleReceivedTargetPower <-200) || (preambleReceivedTargetPower>-74)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for preambleReceivedTargetPower choice: -200..-74 !\n",
                           RC.config_file_name, i, preambleReceivedTargetPower);
            }

            switch (preambleTransMax) {
              case 3:
1701
                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  NR_RACH_ConfigGeneric__preambleTransMax_n3;
1702 1703
                break;
              case 4:
1704
                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  NR_RACH_ConfigGeneric__preambleTransMax_n4;
1705 1706
                break;
              case 5:
1707
                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  NR_RACH_ConfigGeneric__preambleTransMax_n5;
1708 1709
                break;
              case 6:
1710
                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  NR_RACH_ConfigGeneric__preambleTransMax_n6;
1711 1712
                break;
              case 7:
1713
                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  NR_RACH_ConfigGeneric__preambleTransMax_n7;
1714 1715
                break;
              case 8:
1716
                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  NR_RACH_ConfigGeneric__preambleTransMax_n8;
1717 1718
                break;
              case 10:
1719
                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  NR_RACH_ConfigGeneric__preambleTransMax_n10;
1720 1721
                break;
              case 20:
1722
                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  NR_RACH_ConfigGeneric__preambleTransMax_n20;
1723 1724
                break;
              case 50:
1725
                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  NR_RACH_ConfigGeneric__preambleTransMax_n50;
1726 1727
                break;
              case 100:
1728
                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  NR_RACH_ConfigGeneric__preambleTransMax_n100;
1729 1730
                break;
              case 200:
1731
                NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] =  NR_RACH_ConfigGeneric__preambleTransMax_n200;
1732 1733 1734 1735 1736 1737 1738 1739
                break;
               default:
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for preambleTransMax choice: 3,4,5,6,7,8,10,20,50,100,200 !\n",
                             RC.config_file_name, i, preambleTransMax);
                break;
            }            

            if (strcmp(powerRampingStep , "dB0") == 0) {
1740
              NRRRC_CONFIGURATION_REQ (msg_p).powerRampingStep[j] = NR_RACH_ConfigGeneric__powerRampingStep_dB0;                    
1741
            }else if (strcmp(powerRampingStep , "dB2") == 0) {
1742
              NRRRC_CONFIGURATION_REQ (msg_p).powerRampingStep[j] = NR_RACH_ConfigGeneric__powerRampingStep_dB2;
1743
            }else if (strcmp(powerRampingStep , "dB4") == 0) {
1744
              NRRRC_CONFIGURATION_REQ (msg_p).powerRampingStep[j] = NR_RACH_ConfigGeneric__powerRampingStep_dB4;
1745
            }else if (strcmp(powerRampingStep , "dB6") == 0) {
1746
              NRRRC_CONFIGURATION_REQ (msg_p).powerRampingStep[j] = NR_RACH_ConfigGeneric__powerRampingStep_dB6;
1747
            }else {
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
1748
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for powerRampingStep !\n",
1749 1750 1751 1752 1753
                           RC.config_file_name, i, powerRampingStep);
            }

            switch (ra_ResponseWindow) {
              case 1:
1754
                NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] =  NR_RACH_ConfigGeneric__ra_ResponseWindow_sl1;
1755 1756
                break;
              case 2:
1757
                NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] =  NR_RACH_ConfigGeneric__ra_ResponseWindow_sl2;
1758 1759
                break;
              case 4:
1760
                NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] =  NR_RACH_ConfigGeneric__ra_ResponseWindow_sl4;
1761 1762
                break;
              case 8:
1763
                NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] =  NR_RACH_ConfigGeneric__ra_ResponseWindow_sl8;
1764 1765
                break;
              case 10:
1766
                NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] =  NR_RACH_ConfigGeneric__ra_ResponseWindow_sl10;
1767 1768
                break;
              case 20:
1769
                NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] =  NR_RACH_ConfigGeneric__ra_ResponseWindow_sl20;
1770 1771
                break;
              case 40:
1772
                NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] =  NR_RACH_ConfigGeneric__ra_ResponseWindow_sl40;
1773 1774
                break;
              case 80:
1775
                NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] =  NR_RACH_ConfigGeneric__ra_ResponseWindow_sl80;
1776 1777 1778 1779 1780 1781 1782 1783 1784
                break;
               default:
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for ra_ResponseWindow choice: 1,2,4,8,10,20,40,80 !\n",
                             RC.config_file_name, i, ra_ResponseWindow);
                break;
            }  

            /////////////////////////////////NR PUSCH-ConfigCommon///////////////////////////
            if (strcmp(groupHoppingEnabledTransformPrecoding , "ENABLE") == 0){
1785
              NRRRC_CONFIGURATION_REQ (msg_p).groupHoppingEnabledTransformPrecoding[j] =  TRUE;
1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801
            }

            NRRRC_CONFIGURATION_REQ (msg_p).msg3_DeltaPreamble[j] = msg3_DeltaPreamble;
            if ((msg3_DeltaPreamble <-1) || (msg3_DeltaPreamble>6)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for msg3_DeltaPreamble choice: -1..6 !\n",
                           RC.config_file_name, i, msg3_DeltaPreamble);
            }

            NRRRC_CONFIGURATION_REQ (msg_p).p0_NominalWithGrant[j] = p0_NominalWithGrant;
            if ((p0_NominalWithGrant <-202) || (p0_NominalWithGrant>24)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for p0_NominalWithGrant choice: -202..24 !\n",
                           RC.config_file_name, i, p0_NominalWithGrant);
            }

            /////////////////////////////////NR PUSCH-TimeDomainResourceAllocation///////////////////////////
            NRRRC_CONFIGURATION_REQ (msg_p).PUSCH_TimeDomainResourceAllocation_k2[j] = PUSCH_TimeDomainResourceAllocation_k2;
1802
            if ((PUSCH_TimeDomainResourceAllocation_k2 <0) || (PUSCH_TimeDomainResourceAllocation_k2>32)){
1803 1804 1805 1806 1807
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PUSCH_TimeDomainResourceAllocation_k2 choice: 0..7 !\n",
                           RC.config_file_name, i, PUSCH_TimeDomainResourceAllocation_k2);
            }

            if (strcmp(PUSCH_TimeDomainResourceAllocation_mappingType , "typeA") == 0){
1808
              NRRRC_CONFIGURATION_REQ (msg_p).PUSCH_TimeDomainResourceAllocation_mappingType[j] =  NR_PUSCH_TimeDomainResourceAllocation__mappingType_typeA;
1809
            }else if (strcmp(PUSCH_TimeDomainResourceAllocation_mappingType , "typeB") == 0){
1810
              NRRRC_CONFIGURATION_REQ (msg_p).PUSCH_TimeDomainResourceAllocation_mappingType[j] =  NR_PUSCH_TimeDomainResourceAllocation__mappingType_typeB;
1811
            }else {
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
1812
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for PUSCH_TimeDomainResourceAllocation_mappingType !\n",
1813 1814 1815
                           RC.config_file_name, i, PUSCH_TimeDomainResourceAllocation_mappingType);
            }

1816 1817 1818 1819 1820 1821
            NRRRC_CONFIGURATION_REQ (msg_p).PUSCH_TimeDomainResourceAllocation_startSymbolAndLength[j] = PUSCH_TimeDomainResourceAllocation_startSymbolAndLength;
            if ((PUSCH_TimeDomainResourceAllocation_startSymbolAndLength <0) || (PUSCH_TimeDomainResourceAllocation_startSymbolAndLength>127)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PUSCH_TimeDomainResourceAllocation_startSymbolAndLength choice: 0..127 !\n",
                           RC.config_file_name, i, PUSCH_TimeDomainResourceAllocation_startSymbolAndLength);
            }

1822
            /////////////////////////////////NR PUCCH-ConfigCommon///////////////////////////
1823 1824 1825 1826 1827 1828
            NRRRC_CONFIGURATION_REQ (msg_p).pucch_ResourceCommon[j] = pucch_ResourceCommon;
            if ((pucch_ResourceCommon <0) || (pucch_ResourceCommon>15)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for pucch_ResourceCommon choice: 0..15 !\n",
                           RC.config_file_name, i, pucch_ResourceCommon);
            }

1829
            if (strcmp(pucch_GroupHopping , "neither") == 0){
1830
              NRRRC_CONFIGURATION_REQ (msg_p).pucch_GroupHopping[j] =  NR_PUCCH_ConfigCommon__pucch_GroupHopping_neither;
1831
            }else if (strcmp(pucch_GroupHopping , "enable") == 0){
1832
              NRRRC_CONFIGURATION_REQ (msg_p).pucch_GroupHopping[j] =  NR_PUCCH_ConfigCommon__pucch_GroupHopping_enable;
1833
            }else if (strcmp(pucch_GroupHopping , "disable") == 0){
1834
              NRRRC_CONFIGURATION_REQ (msg_p).pucch_GroupHopping[j] =  NR_PUCCH_ConfigCommon__pucch_GroupHopping_disable;
1835
            }else {
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
1836
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for pucch_GroupHopping !\n",
1837 1838 1839
                           RC.config_file_name, i, pucch_GroupHopping);
            }

1840 1841 1842 1843 1844 1845
            NRRRC_CONFIGURATION_REQ (msg_p).hoppingId[j] = hoppingId;
            if ((hoppingId <0) || (hoppingId>1024)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for hoppingId choice: 0..1024 !\n",
                           RC.config_file_name, i, hoppingId);
            }

1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859
            NRRRC_CONFIGURATION_REQ (msg_p).p0_nominal[j] = p0_nominal;
            if ((p0_nominal <-202) || (p0_nominal>24)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for p0_nominal choice: -202..24 !\n",
                           RC.config_file_name, i, p0_nominal);
            }

            //////////////////////////////////NR PDSCH-TimeDomainResourceAllocation///////////////////////////
            NRRRC_CONFIGURATION_REQ (msg_p).PDSCH_TimeDomainResourceAllocation_k0[j] = PDSCH_TimeDomainResourceAllocation_k0;
            if ((PDSCH_TimeDomainResourceAllocation_k0 <1) || (PDSCH_TimeDomainResourceAllocation_k0>3)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDSCH_TimeDomainResourceAllocation_k0 choice: 0..7 !\n",
                           RC.config_file_name, i, PDSCH_TimeDomainResourceAllocation_k0);
            }

            if (strcmp(PDSCH_TimeDomainResourceAllocation_mappingType , "typeA") == 0){
1860
              NRRRC_CONFIGURATION_REQ (msg_p).PDSCH_TimeDomainResourceAllocation_mappingType[j] =  NR_PDSCH_TimeDomainResourceAllocation__mappingType_typeA;
1861
            }else if (strcmp(PDSCH_TimeDomainResourceAllocation_mappingType , "typeB") == 0){
1862
              NRRRC_CONFIGURATION_REQ (msg_p).PDSCH_TimeDomainResourceAllocation_mappingType[j] =  NR_PDSCH_TimeDomainResourceAllocation__mappingType_typeB;
1863
            }else {
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
1864
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for PDSCH_TimeDomainResourceAllocation_mappingType !\n",
1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875
                           RC.config_file_name, i, PDSCH_TimeDomainResourceAllocation_mappingType);
            }

            //////////////////////////////////NR RateMatchPattern///////////////////////////
            NRRRC_CONFIGURATION_REQ (msg_p).rateMatchPatternId[j] = rateMatchPatternId;
            if ((rateMatchPatternId <0) || (rateMatchPatternId>3)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rateMatchPatternId choice: 0..3 !\n",
                           RC.config_file_name, i, rateMatchPatternId);
            }

            if (strcmp(RateMatchPattern_patternType , "NOTHING") == 0){
1876
              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_patternType[j] =  NR_RateMatchPattern__patternType_PR_NOTHING;
1877
            }else if (strcmp(RateMatchPattern_patternType , "bitmaps") == 0){
1878
              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_patternType[j] =  NR_RateMatchPattern__patternType_PR_bitmaps;
1879
            }else if (strcmp(RateMatchPattern_patternType , "controlResourceSet") == 0){
1880
              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_patternType[j] =  NR_RateMatchPattern__patternType_PR_controlResourceSet;
1881
            }else {
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
1882
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for RateMatchPattern_patternType !\n",
1883 1884 1885 1886
                           RC.config_file_name, i, RateMatchPattern_patternType);
            }

            if (strcmp(symbolsInResourceBlock , "NOTHING") == 0){
1887
              NRRRC_CONFIGURATION_REQ (msg_p).symbolsInResourceBlock[j] =  NR_RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_NOTHING;
1888
            }else if (strcmp(symbolsInResourceBlock , "oneSlot") == 0){
1889
              NRRRC_CONFIGURATION_REQ (msg_p).symbolsInResourceBlock[j] =  NR_RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_oneSlot;
1890
            }else if (strcmp(symbolsInResourceBlock , "twoSlots") == 0){
1891
              NRRRC_CONFIGURATION_REQ (msg_p).symbolsInResourceBlock[j] =  NR_RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_twoSlots;
1892
            }else {
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
1893
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for symbolsInResourceBlock !\n",
1894 1895 1896 1897 1898
                           RC.config_file_name, i, symbolsInResourceBlock);
            }

            switch(periodicityAndPattern){
              case 2:
1899
                NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] =  NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n2;
1900 1901
                break;
              case 4:
1902
                NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] =  NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n4;
1903 1904
                break;
              case 5:
1905
                NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] =  NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n5;
1906 1907
                break;
              case 8:
1908
                NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] =  NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n8;
1909 1910
                break;
              case 10:
1911
                NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] =  NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n10;
1912 1913
                break;
              case 20:
1914
                NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] =  NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n20;
1915 1916
                break;
              case 40:
1917
                NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] =  NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n40;
1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931
                break;
              default:
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for periodicityAndPattern choice: 2,4,5,8,10,20,40 !\n",
                             RC.config_file_name, i, periodicityAndPattern);
                break;
            }

            NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_controlResourceSet[j] = RateMatchPattern_controlResourceSet;
            if ((RateMatchPattern_controlResourceSet <0) || (RateMatchPattern_controlResourceSet>11)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPattern_controlResourceSet choice: 0..3 !\n",
                           RC.config_file_name, i, RateMatchPattern_controlResourceSet);
            }

            if (strcmp(RateMatchPattern_subcarrierSpacing,"kHz15")==0) {
1932
              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = NR_SubcarrierSpacing_kHz15;
1933
            }else if (strcmp(RateMatchPattern_subcarrierSpacing,"kHz30")==0) {
1934
              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = NR_SubcarrierSpacing_kHz30;
1935
            }else if (strcmp(RateMatchPattern_subcarrierSpacing,"kHz60")==0) {
1936
              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = NR_SubcarrierSpacing_kHz60;
1937
            }else if (strcmp(RateMatchPattern_subcarrierSpacing,"kHz120")==0) {
1938
              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = NR_SubcarrierSpacing_kHz120;
1939
            }else if (strcmp(RateMatchPattern_subcarrierSpacing,"kHz240")==0) {
1940
              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = NR_SubcarrierSpacing_kHz240;
1941 1942 1943 1944 1945 1946
            }else { 
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for RateMatchPattern_subcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n",
                           RC.config_file_name, i, RateMatchPattern_subcarrierSpacing);
            }            
            
            if (strcmp(RateMatchPattern_mode , "dynamic") == 0){
1947
              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_mode[j] =  NR_RateMatchPattern__mode_dynamic;
1948
            }else if (strcmp(RateMatchPattern_mode , "semiStatic") == 0){
1949
              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_mode[j] =  NR_RateMatchPattern__mode_semiStatic;
1950
            }else {
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
1951
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for RateMatchPattern_mode !\n",
1952 1953 1954 1955
                           RC.config_file_name, i, RateMatchPattern_mode);
            }

            //////////////////////////////////NR PDCCH-ConfigCommon///////////////////////////
1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967
            NRRRC_CONFIGURATION_REQ (msg_p).controlResourceSetZero[j] = controlResourceSetZero;
            if ((controlResourceSetZero <0) || (controlResourceSetZero>15)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for controlResourceSetZero choice: 0..15 !\n",
                           RC.config_file_name, i, controlResourceSetZero);
            }

            NRRRC_CONFIGURATION_REQ (msg_p).searchSpaceZero[j] = searchSpaceZero;
            if ((searchSpaceZero <0) || (searchSpaceZero>15)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for searchSpaceZero choice: 0..15 !\n",
                           RC.config_file_name, i, searchSpaceZero);
            }

1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005
            NRRRC_CONFIGURATION_REQ (msg_p).searchSpaceSIB1[j] = searchSpaceSIB1;
            if ((searchSpaceSIB1 <0) || (searchSpaceSIB1>39)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for searchSpaceSIB1 choice: 0..39 !\n",
                           RC.config_file_name, i, searchSpaceSIB1);
            }

            NRRRC_CONFIGURATION_REQ (msg_p).searchSpaceOtherSystemInformation[j] = searchSpaceOtherSystemInformation;
            if ((searchSpaceOtherSystemInformation <0) || (searchSpaceOtherSystemInformation>39)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for searchSpaceOtherSystemInformation choice: 0..39 !\n",
                           RC.config_file_name, i, searchSpaceOtherSystemInformation);
            }            

            NRRRC_CONFIGURATION_REQ (msg_p).pagingSearchSpace[j] = pagingSearchSpace;
            if ((pagingSearchSpace <0) || (pagingSearchSpace>39)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for pagingSearchSpace choice: 0..39 !\n",
                           RC.config_file_name, i, pagingSearchSpace);
            }

            NRRRC_CONFIGURATION_REQ (msg_p).ra_SearchSpace[j] = ra_SearchSpace;
            if ((ra_SearchSpace <0) || (ra_SearchSpace>39)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for ra_SearchSpace choice: 0..39 !\n",
                           RC.config_file_name, i, ra_SearchSpace);
            }

            //////////////////////////////////NR PDCCH commonControlResourcesSets///////////////////////////
            NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_common_controlResourceSetId[j] = PDCCH_common_controlResourceSetId;
            if ((PDCCH_common_controlResourceSetId <0) || (PDCCH_common_controlResourceSetId>11)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDCCH_common_controlResourceSetId choice: 0..11 !\n",
                           RC.config_file_name, i, PDCCH_common_controlResourceSetId);
            }

            NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_common_ControlResourceSet_duration[j] = PDCCH_common_ControlResourceSet_duration;
            if ((PDCCH_common_ControlResourceSet_duration <0) || (PDCCH_common_ControlResourceSet_duration>3)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDCCH_common_ControlResourceSet_duration choice: 0..11 !\n",
                           RC.config_file_name, i, PDCCH_common_ControlResourceSet_duration);
            }            
            
            if (strcmp(PDCCH_cce_REG_MappingType , "NOTHING") == 0){
2006
              NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_cce_REG_MappingType[j] =  NR_ControlResourceSet__cce_REG_MappingType_PR_NOTHING;
2007
            }else if (strcmp(PDCCH_cce_REG_MappingType , "interleaved") == 0){
2008
              NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_cce_REG_MappingType[j] =  NR_ControlResourceSet__cce_REG_MappingType_PR_interleaved;
2009
            }else if (strcmp(PDCCH_cce_REG_MappingType , "nonInterleaved") == 0){
2010
              NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_cce_REG_MappingType[j] =  NR_ControlResourceSet__cce_REG_MappingType_PR_nonInterleaved;
2011
            }else {
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
2012
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for PDCCH_cce_REG_MappingType !\n",
2013 2014 2015 2016 2017
                           RC.config_file_name, i, PDCCH_cce_REG_MappingType);
            }

            switch(PDCCH_reg_BundleSize){
              case 2:
2018
                NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_reg_BundleSize[j] =  NR_ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n2;
2019 2020
                break;
              case 3:
2021
                NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_reg_BundleSize[j] =  NR_ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n3;
2022 2023
                break;
              case 6:
2024
                NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_reg_BundleSize[j] =  NR_ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n6;
2025 2026 2027 2028 2029 2030 2031 2032 2033
                break;
              default:
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDCCH_reg_BundleSize choice: 2,3,6 !\n",
                             RC.config_file_name, i, PDCCH_reg_BundleSize);
                break;
            }            

            switch(PDCCH_interleaverSize){
              case 2:
2034
                NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_interleaverSize[j] =  NR_ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n2;
2035 2036
                break;
              case 3:
2037
                NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_interleaverSize[j] =  NR_ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n3;
2038 2039
                break;
              case 6:
2040
                NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_interleaverSize[j] =  NR_ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n6;
2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054
                break;
              default:
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDCCH_interleaverSize choice: 2,3,6 !\n",
                             RC.config_file_name, i, PDCCH_interleaverSize);
                break;
            }               

            NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_shiftIndex[j] = PDCCH_shiftIndex;
            if ((PDCCH_shiftIndex <0) || (PDCCH_shiftIndex>274)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDCCH_shiftIndex choice: 0..274 !\n",
                           RC.config_file_name, i, PDCCH_shiftIndex);
            }

            if (strcmp(PDCCH_precoderGranularity , "sameAsREG-bundle") == 0){
2055
              NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_precoderGranularity[j] =  NR_ControlResourceSet__precoderGranularity_sameAsREG_bundle;
2056
            }else if (strcmp(PDCCH_precoderGranularity , "allContiguousRBs") == 0){
2057
              NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_precoderGranularity[j] =  NR_ControlResourceSet__precoderGranularity_allContiguousRBs;
2058
            }else {
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
2059
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for PDCCH_precoderGranularity !\n",
2060 2061 2062
                           RC.config_file_name, i, PDCCH_precoderGranularity);
            }            

2063 2064 2065 2066 2067 2068
            NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_TCI_StateId[j] = PDCCH_TCI_StateId;
            if ((PDCCH_TCI_StateId <0) || (PDCCH_TCI_StateId>63)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDCCH_TCI_StateId choice: 0..63 !\n",
                           RC.config_file_name, i, PDCCH_TCI_StateId);
            }

2069
            if (strcmp(tci_PresentInDCI , "ENABLE") == 0){
2070
              NRRRC_CONFIGURATION_REQ (msg_p).tci_PresentInDCI[j] = TRUE;
2071 2072
            }

2073 2074 2075 2076 2077 2078
            NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_DMRS_ScramblingID[j] = PDCCH_DMRS_ScramblingID;
            if ((PDCCH_DMRS_ScramblingID <0) || (PDCCH_DMRS_ScramblingID>65535)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDCCH_DMRS_ScramblingID choice: 0..65535 !\n",
                           RC.config_file_name, i, PDCCH_DMRS_ScramblingID);
            }

2079
            //////////////////////////////////NR PDCCH commonSearchSpaces///////////////////////////
2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092
            NRRRC_CONFIGURATION_REQ (msg_p).SearchSpaceId[j] = SearchSpaceId;
            if ((SearchSpaceId <0) || (SearchSpaceId>39)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpaceId choice: 0..39 !\n",
                           RC.config_file_name, i, SearchSpaceId);
            }            

            NRRRC_CONFIGURATION_REQ (msg_p).commonSearchSpaces_controlResourceSetId[j] = commonSearchSpaces_controlResourceSetId;
            if ((commonSearchSpaces_controlResourceSetId <0) || (commonSearchSpaces_controlResourceSetId>11)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for commonSearchSpaces_controlResourceSetId choice: 0..11 !\n",
                           RC.config_file_name, i, commonSearchSpaces_controlResourceSetId);
            }

            if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl1") == 0){
2093
              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] =  NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1;
2094
              
2095
              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_value[j] = 0;                 
2096 2097

            }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl2") == 0){
2098
              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] =  NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl2;
2099
              
2100 2101 2102 2103
              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_value[j] = SearchSpace_monitoringSlotPeriodicityAndOffset_value;
              if ((SearchSpace_monitoringSlotPeriodicityAndOffset_value <0) || (SearchSpace_monitoringSlotPeriodicityAndOffset_value>1)){
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_monitoringSlotPeriodicityAndOffset_value choice: 0..1 !\n",
                             RC.config_file_name, i, SearchSpace_monitoringSlotPeriodicityAndOffset_value);
2104 2105 2106
              }   

            }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl4") == 0){
2107
              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] =  NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl4;
2108
            
2109 2110 2111 2112
              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_value[j] = SearchSpace_monitoringSlotPeriodicityAndOffset_value;
              if ((SearchSpace_monitoringSlotPeriodicityAndOffset_value <0) || (SearchSpace_monitoringSlotPeriodicityAndOffset_value>3)){
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_monitoringSlotPeriodicityAndOffset_value choice: 0..3 !\n",
                             RC.config_file_name, i, SearchSpace_monitoringSlotPeriodicityAndOffset_value);
2113 2114 2115
              }                 

            }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl5") == 0){
2116
              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] =  NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl5;
2117
            
2118 2119 2120 2121
              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_value[j] = SearchSpace_monitoringSlotPeriodicityAndOffset_value;
              if ((SearchSpace_monitoringSlotPeriodicityAndOffset_value <0) || (SearchSpace_monitoringSlotPeriodicityAndOffset_value>4)){
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_monitoringSlotPeriodicityAndOffset_value choice: 0..4 !\n",
                             RC.config_file_name, i, SearchSpace_monitoringSlotPeriodicityAndOffset_value);
2122 2123 2124
              }   

            }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl8") == 0){
2125
              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] =  NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl8;
2126
            
2127 2128 2129 2130
              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_value[j] = SearchSpace_monitoringSlotPeriodicityAndOffset_value;
              if ((SearchSpace_monitoringSlotPeriodicityAndOffset_value <0) || (SearchSpace_monitoringSlotPeriodicityAndOffset_value>7)){
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_monitoringSlotPeriodicityAndOffset_value choice: 0..7 !\n",
                             RC.config_file_name, i, SearchSpace_monitoringSlotPeriodicityAndOffset_value);
2131 2132 2133
              }   

            }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl10") == 0){
2134
              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] =  NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl10;
2135
            
2136 2137 2138 2139
              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_value[j] = SearchSpace_monitoringSlotPeriodicityAndOffset_value;
              if ((SearchSpace_monitoringSlotPeriodicityAndOffset_value <0) || (SearchSpace_monitoringSlotPeriodicityAndOffset_value>9)){
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_monitoringSlotPeriodicityAndOffset_value choice: 0..9 !\n",
                             RC.config_file_name, i, SearchSpace_monitoringSlotPeriodicityAndOffset_value);
2140 2141 2142
              } 

            }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl16") == 0){
2143
              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] =  NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl16;
2144
            
2145 2146 2147 2148
              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_value[j] = SearchSpace_monitoringSlotPeriodicityAndOffset_value;
              if ((SearchSpace_monitoringSlotPeriodicityAndOffset_value <0) || (SearchSpace_monitoringSlotPeriodicityAndOffset_value>15)){
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_monitoringSlotPeriodicityAndOffset_value choice: 0..15 !\n",
                             RC.config_file_name, i, SearchSpace_monitoringSlotPeriodicityAndOffset_value);
2149 2150 2151
              } 

            }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl20") == 0){
2152
              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] =  NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl20;
2153
            
2154 2155 2156 2157
              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_value[j] = SearchSpace_monitoringSlotPeriodicityAndOffset_value;
              if ((SearchSpace_monitoringSlotPeriodicityAndOffset_value <0) || (SearchSpace_monitoringSlotPeriodicityAndOffset_value>19)){
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_monitoringSlotPeriodicityAndOffset_value choice: 0..19 !\n",
                             RC.config_file_name, i, SearchSpace_monitoringSlotPeriodicityAndOffset_value);
2158 2159 2160
              } 

            }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "UNABLE") == 0){
2161
              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] =  NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_NOTHING;
2162 2163
            
            }else {
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
2164
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for SearchSpace_monitoringSlotPeriodicityAndOffset_choice !\n",
2165 2166 2167
                           RC.config_file_name, i, SearchSpace_monitoringSlotPeriodicityAndOffset_choice);
            }// End if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl1")

2168 2169 2170 2171 2172 2173
            NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_duration[j] = SearchSpace_duration;
            if ((SearchSpace_duration <2) || (SearchSpace_duration>2559)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_duration choice: 2..2559 !\n",
                           RC.config_file_name, i, SearchSpace_duration);
            }

2174 2175
            switch(SearchSpace_nrofCandidates_aggregationLevel1){
              case 0:
2176
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel1_n0;
2177 2178
                break;
              case 1:
2179
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel1_n1;
2180 2181
                break;
              case 2:
2182
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel1_n2;
2183 2184
                break;
              case 3:
2185
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel1_n3;
2186 2187
                break;
              case 4:
2188
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel1_n4;
2189 2190
                break;
              case 5:
2191
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel1_n5;
2192 2193
                break;
              case 6:
2194
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel1_n6;
2195 2196
                break;
              case 8:
2197
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel1_n8;
2198 2199 2200 2201 2202 2203 2204 2205 2206
                break;
              default:
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_nrofCandidates_aggregationLevel1 choice: 0,1,2,3,4,5,6,8 !\n",
                             RC.config_file_name, i, SearchSpace_nrofCandidates_aggregationLevel1);
                break;
            }  

            switch(SearchSpace_nrofCandidates_aggregationLevel2){
              case 0:
2207
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel2_n0;
2208 2209
                break;
              case 1:
2210
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel2_n1;
2211 2212
                break;
              case 2:
2213
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel2_n2;
2214 2215
                break;
              case 3:
2216
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel2_n3;
2217 2218
                break;
              case 4:
2219
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel2_n4;
2220 2221
                break;
              case 5:
2222
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel2_n5;
2223 2224
                break;
              case 6:
2225
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel2_n6;
2226 2227
                break;
              case 8:
2228
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel2_n8;
2229 2230 2231 2232 2233 2234 2235 2236 2237
                break;
              default:
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_nrofCandidates_aggregationLevel2 choice: 0,1,2,3,4,5,6,8 !\n",
                             RC.config_file_name, i, SearchSpace_nrofCandidates_aggregationLevel2);
                break;
            }  

            switch(SearchSpace_nrofCandidates_aggregationLevel4){
              case 0:
2238
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel4_n0;
2239 2240
                break;
              case 1:
2241
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel4_n1;
2242 2243
                break;
              case 2:
2244
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel4_n2;
2245 2246
                break;
              case 3:
2247
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel4_n3;
2248 2249
                break;
              case 4:
2250
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel4_n4;
2251 2252
                break;
              case 5:
2253
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel4_n5;
2254 2255
                break;
              case 6:
2256
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel4_n6;
2257 2258
                break;
              case 8:
2259
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel4_n8;
2260 2261 2262 2263 2264 2265 2266 2267 2268
                break;
              default:
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_nrofCandidates_aggregationLevel4 choice: 0,1,2,3,4,5,6,8 !\n",
                             RC.config_file_name, i, SearchSpace_nrofCandidates_aggregationLevel4);
                break;
            }

            switch(SearchSpace_nrofCandidates_aggregationLevel8){
              case 0:
2269
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel8_n0;
2270 2271
                break;
              case 1:
2272
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel8_n1;
2273 2274
                break;
              case 2:
2275
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel8_n2;
2276 2277
                break;
              case 3:
2278
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel8_n3;
2279 2280
                break;
              case 4:
2281
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel8_n4;
2282 2283
                break;
              case 5:
2284
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel8_n5;
2285 2286
                break;
              case 6:
2287
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel8_n6;
2288 2289
                break;
              case 8:
2290
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel8_n8;
2291 2292 2293 2294 2295 2296 2297 2298 2299
                break;
              default:
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_nrofCandidates_aggregationLevel8 choice: 0,1,2,3,4,5,6,8 !\n",
                             RC.config_file_name, i, SearchSpace_nrofCandidates_aggregationLevel8);
                break;
            }

            switch(SearchSpace_nrofCandidates_aggregationLevel16){
              case 0:
2300
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel16_n0;
2301 2302
                break;
              case 1:
2303
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel16_n1;
2304 2305
                break;
              case 2:
2306
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel16_n2;
2307 2308
                break;
              case 3:
2309
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel16_n3;
2310 2311
                break;
              case 4:
2312
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel16_n4;
2313 2314
                break;
              case 5:
2315
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel16_n5;
2316 2317
                break;
              case 6:
2318
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel16_n6;
2319 2320
                break;
              case 8:
2321
                NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] =  NR_SearchSpace__nrofCandidates__aggregationLevel16_n8;
2322 2323 2324 2325 2326 2327 2328 2329
                break;
              default:
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_nrofCandidates_aggregationLevel16 choice: 0,1,2,3,4,5,6,8 !\n",
                             RC.config_file_name, i, SearchSpace_nrofCandidates_aggregationLevel16);
                break;
            }

            if (strcmp(SearchSpace_searchSpaceType , "NOTHING") == 0){
2330
              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_searchSpaceType[j] =  NR_SearchSpace__searchSpaceType_PR_NOTHING;
2331
            }else if (strcmp(SearchSpace_searchSpaceType , "common") == 0){
2332
              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_searchSpaceType[j] =  NR_SearchSpace__searchSpaceType_PR_common;
2333
            }else if (strcmp(SearchSpace_searchSpaceType , "ue_Specific") == 0){
2334
              NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_searchSpaceType[j] =  NR_SearchSpace__searchSpaceType_PR_ue_Specific;
2335
            }else {
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
2336
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for SearchSpace_searchSpaceType !\n",
2337 2338 2339 2340 2341
                           RC.config_file_name, i, SearchSpace_searchSpaceType);
            }

            switch(Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1){
              case 1:
2342
                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel1_n1;
2343 2344
                break;
              case 2:
2345
                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel1_n2;
2346 2347 2348 2349 2350 2351 2352 2353 2354
                break;
              default:
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1 choice: 1,2 !\n",
                             RC.config_file_name, i, Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1);
                break;
            }

            switch(Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2){
              case 1:
2355
                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel2_n1;
2356 2357
                break;
              case 2:
2358
                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel2_n2;
2359 2360 2361 2362 2363 2364 2365 2366 2367
                break;
              default:
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2 choice: 1,2 !\n",
                             RC.config_file_name, i, Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2);
                break;
            }

            switch(Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4){
              case 1:
2368
                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel4_n1;
2369 2370
                break;
              case 2:
2371
                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel4_n2;
2372 2373 2374 2375 2376 2377 2378 2379 2380
                break;
              default:
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4 choice: 1,2 !\n",
                             RC.config_file_name, i, Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4);
                break;
            }

            switch(Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8){
              case 1:
2381
                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel8_n1;
2382 2383
                break;
              case 2:
2384
                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel8_n2;
2385 2386 2387 2388 2389 2390 2391 2392 2393
                break;
              default:
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8 choice: 1,2 !\n",
                             RC.config_file_name, i, Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8);
                break;
            }

            switch(Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16){
              case 1:
2394
                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel16_n1;
2395 2396
                break;
              case 2:
2397
                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel16_n2;
2398 2399 2400 2401 2402 2403 2404 2405 2406
                break;
              default:
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16 choice: 1,2 !\n",
                             RC.config_file_name, i, Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16);
                break;
            }

            switch(Common_dci_Format2_3_monitoringPeriodicity){
              case 1:
2407
                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n1;
2408 2409
                break;
              case 2:
2410
                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n2;
2411 2412
                break;
              case 4:
2413
                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n4;
2414 2415
                break;
              case 5:
2416
                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n5;
2417 2418
                break;
              case 8:
2419
                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n8;
2420 2421
                break;
              case 10:
2422
                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n10;
2423 2424
                break;
              case 16:
2425
                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n16;
2426 2427
                break;
              case 20:
2428
                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n20;
2429 2430 2431 2432 2433 2434 2435 2436 2437
                break;
              default:
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Common_dci_Format2_3_monitoringPeriodicity choice: 1,2,4,5,8,10,16,20 !\n",
                             RC.config_file_name, i, Common_dci_Format2_3_monitoringPeriodicity);
                break;
            }

            switch(Common_dci_Format2_3_nrofPDCCH_Candidates){
              case 1:
2438
                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_nrofPDCCH_Candidates[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_3__nrofPDCCH_Candidates_n1;
2439 2440
                break;
              case 2:
2441
                NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_nrofPDCCH_Candidates[j] =  NR_SearchSpace__searchSpaceType__common__dci_Format2_3__nrofPDCCH_Candidates_n2;
2442 2443 2444 2445 2446 2447 2448 2449
                break;
              default:
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Common_dci_Format2_3_nrofPDCCH_Candidates choice: 1,2 !\n",
                             RC.config_file_name, i, Common_dci_Format2_3_nrofPDCCH_Candidates);
                break;
            }

            if (strcmp(ue_Specific__dci_Formats , "formats0-0-And-1-0") == 0){
2450
              NRRRC_CONFIGURATION_REQ (msg_p).ue_Specific__dci_Formats[j] =  NR_SearchSpace__searchSpaceType__ue_Specific__dci_Formats_formats0_0_And_1_0;
2451
            }else if (strcmp(ue_Specific__dci_Formats , "formats0-1-And-1-1") == 0){
2452
              NRRRC_CONFIGURATION_REQ (msg_p).ue_Specific__dci_Formats[j] =  NR_SearchSpace__searchSpaceType__ue_Specific__dci_Formats_formats0_1_And_1_1;
2453
            }else {
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
2454
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for ue_Specific__dci_Formats !\n",
2455 2456 2457
                           RC.config_file_name, i, ue_Specific__dci_Formats);
            }

2458 2459
            //////////////////////////////////NR RateMatchPatternLTE-CRS///////////////////////////

2460 2461 2462 2463 2464 2465 2466
            NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierFreqDL[j] = RateMatchPatternLTE_CRS_carrierFreqDL;
            if ((RateMatchPatternLTE_CRS_carrierFreqDL <0) || (RateMatchPatternLTE_CRS_carrierFreqDL>16383)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPatternLTE_CRS_carrierFreqDL choice: 0..16383 !\n",
                           RC.config_file_name, i, RateMatchPatternLTE_CRS_carrierFreqDL);
            }


2467 2468
            switch(RateMatchPatternLTE_CRS_carrierBandwidthDL){
              case 6:
2469
                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] =  NR_RateMatchPatternLTE_CRS__carrierBandwidthDL_n6;
2470 2471
                break;
              case 15:
2472
                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] =  NR_RateMatchPatternLTE_CRS__carrierBandwidthDL_n15;
2473 2474
                break;
              case 25:
2475
                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] =  NR_RateMatchPatternLTE_CRS__carrierBandwidthDL_n25;
2476 2477
                break;
              case 50:
2478
                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] =  NR_RateMatchPatternLTE_CRS__carrierBandwidthDL_n50;
2479 2480
                break;
              case 75:
2481
                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] =  NR_RateMatchPatternLTE_CRS__carrierBandwidthDL_n75;
2482 2483
                break;
              case 100:
2484
                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] =  NR_RateMatchPatternLTE_CRS__carrierBandwidthDL_n100;
2485 2486 2487 2488 2489 2490 2491 2492 2493
                break;
              default:
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPatternLTE_CRS_carrierBandwidthDL choice: 6,15,25,50,75,100 !\n",
                             RC.config_file_name, i, RateMatchPatternLTE_CRS_carrierBandwidthDL);
                break;
            }

            switch(RateMatchPatternLTE_CRS_nrofCRS_Ports){
              case 1:
2494
                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_nrofCRS_Ports[j] =  NR_RateMatchPatternLTE_CRS__nrofCRS_Ports_n1;
2495 2496
                break;
              case 2:
2497
                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_nrofCRS_Ports[j] =  NR_RateMatchPatternLTE_CRS__nrofCRS_Ports_n2;
2498 2499
                break;
              case 4:
2500
                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_nrofCRS_Ports[j] =  NR_RateMatchPatternLTE_CRS__nrofCRS_Ports_n4;
2501 2502 2503 2504 2505 2506 2507 2508 2509
                break;
              default:
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPatternLTE_CRS_nrofCRS_Ports choice: 1,2,4 !\n",
                             RC.config_file_name, i, RateMatchPatternLTE_CRS_nrofCRS_Ports);
                break;
            }

            switch(RateMatchPatternLTE_CRS_v_Shift){
              case 0:
2510
                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] =  NR_RateMatchPatternLTE_CRS__v_Shift_n0;
2511 2512
                break;
              case 1:
2513
                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] =  NR_RateMatchPatternLTE_CRS__v_Shift_n1;
2514 2515
                break;
              case 2:
2516
                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] =  NR_RateMatchPatternLTE_CRS__v_Shift_n2;
2517 2518
                break;
              case 3:
2519
                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] =  NR_RateMatchPatternLTE_CRS__v_Shift_n3;
2520 2521
                break;
              case 4:
2522
                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] =  NR_RateMatchPatternLTE_CRS__v_Shift_n4;
2523 2524
                break;
              case 5:
2525
                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] =  NR_RateMatchPatternLTE_CRS__v_Shift_n5;
2526 2527 2528 2529 2530 2531 2532 2533 2534
                break;
              default:
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPatternLTE_CRS_v_Shift choice: 0,1,2,3,4,5 !\n",
                             RC.config_file_name, i, RateMatchPatternLTE_CRS_v_Shift);
                break;
            }

            switch(RateMatchPatternLTE_CRS_radioframeAllocationPeriod){
              case 1:
2535
                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] =  NR_EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n1;
2536 2537
                break;
              case 2:
2538
                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] =  NR_EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n2;
2539 2540
                break;
              case 4:
2541
                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] =  NR_EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n4;
2542 2543
                break;
              case 8:
2544
                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] =  NR_EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n8;
2545 2546
                break;
              case 16:
2547
                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] =  NR_EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n16;
2548 2549
                break;
              case 32:
2550
                NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] =  NR_EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n32;
2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564
                break;
              default:
                AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPatternLTE_CRS_radioframeAllocationPeriod choice: 1,2,4,8,16,32 !\n",
                             RC.config_file_name, i, RateMatchPatternLTE_CRS_radioframeAllocationPeriod);
                break;
            }

            NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationOffset[j] = RateMatchPatternLTE_CRS_radioframeAllocationOffset;
            if ((RateMatchPatternLTE_CRS_radioframeAllocationOffset <0) || (RateMatchPatternLTE_CRS_radioframeAllocationOffset>7)){
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPatternLTE_CRS_radioframeAllocationOffset choice: 0..7 !\n",
                           RC.config_file_name, i, RateMatchPatternLTE_CRS_radioframeAllocationOffset);
            }

            if (strcmp(RateMatchPatternLTE_CRS_subframeAllocation_choice , "oneFrame") == 0){
2565
              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_subframeAllocation_choice[j] =  NR_EUTRA_MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame;
2566
            }else if (strcmp(RateMatchPatternLTE_CRS_subframeAllocation_choice , "fourFrames") == 0){
2567
              NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_subframeAllocation_choice[j] =  NR_EUTRA_MBSFN_SubframeConfig__subframeAllocation_PR_fourFrames;
2568
            }else {
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
2569
              AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for RateMatchPatternLTE_CRS_subframeAllocation_choice !\n",
2570 2571 2572
                           RC.config_file_name, i, RateMatchPatternLTE_CRS_subframeAllocation_choice);
            }

2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587

          }//End for (j = 0; j < CCsParamList.numelt ;j++)

        }//End if ( CCsParamList.numelt> 0) 

      }//End for (k=0; k <num_gnbs ; k++)

    }//End for (k=0; k <num_gnbs ; k++)


  }//End if (num_gnbs>0)


}//End RCconfig_NRRRC function

2588 2589 2590 2591 2592 2593
int RCconfig_nr_gtpu(void ) {

  int               num_gnbs                      = 0;



WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
2594 2595 2596
  char*             gnb_interface_name_for_S1U    = NULL;
  char*             gnb_ipv4_address_for_S1U      = NULL;
  uint32_t          gnb_port_for_S1U              = 0;
2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618
  char             *address                       = NULL;
  char             *cidr                          = NULL;
  char gtpupath[MAX_OPTNAME_SIZE*2 + 8];
    

  paramdef_t GNBSParams[] = GNBSPARAMS_DESC;
  
  paramdef_t GTPUParams[]  = GTPUPARAMS_DESC;
  LOG_I(GTPU,"Configuring GTPu\n");

/* get number of active eNodeBs */
  config_get( GNBSParams,sizeof(GNBSParams)/sizeof(paramdef_t),NULL); 
  num_gnbs = GNBSParams[GNB_ACTIVE_GNBS_IDX].numelt;
  AssertFatal (num_gnbs >0,
           "Failed to parse config file no active gNodeBs in %s \n", GNB_CONFIG_STRING_ACTIVE_GNBS);


  sprintf(gtpupath,"%s.[%i].%s",GNB_CONFIG_STRING_GNB_LIST,0,GNB_CONFIG_STRING_NETWORK_INTERFACES_CONFIG);
  config_get( GTPUParams,sizeof(GTPUParams)/sizeof(paramdef_t),gtpupath);    



WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
2619
    cidr = gnb_ipv4_address_for_S1U;
2620 2621 2622 2623 2624 2625 2626 2627 2628
    address = strtok(cidr, "/");
    
    if (address) {
      IPV4_STR_ADDR_TO_INT_NWBO ( address, RC.gtpv1u_data_g->enb_ip_address_for_S1u_S12_S4_up, "BAD IP ADDRESS FORMAT FOR eNB S1_U !\n" );

      LOG_I(GTPU,"Configuring GTPu address : %s -> %x\n",address,RC.gtpv1u_data_g->enb_ip_address_for_S1u_S12_S4_up);

    }

WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
2629
    RC.gtpv1u_data_g->enb_port_for_S1u_S12_S4_up = gnb_port_for_S1U;
2630 2631 2632
return 0;
}

2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646
int RCconfig_NR_S1(MessageDef *msg_p, uint32_t i) {

  int               j,k = 0;
  int               gnb_id;
  int32_t           my_int;
  const char*       active_gnb[MAX_GNB];
  char             *address                       = NULL;
  char             *cidr                          = NULL;

  // for no gcc warnings 

  (void)  my_int;

  memset((char*)active_gnb,0,MAX_GNB* sizeof(char*));
2647 2648

  paramdef_t GNBSParams[] = GNBSPARAMS_DESC;
2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825
  paramdef_t GNBParams[]  = GNBPARAMS_DESC;
  paramlist_def_t GNBParamList = {GNB_CONFIG_STRING_GNB_LIST,NULL,0};

/* get global parameters, defined outside any section in the config file */
  
  config_get( GNBSParams,sizeof(GNBSParams)/sizeof(paramdef_t),NULL); 

#if defined(ENABLE_ITTI) && defined(ENABLE_USE_MME)
    if (strcasecmp( *(GNBSParams[GNB_ASN1_VERBOSITY_IDX].strptr), GNB_CONFIG_STRING_ASN1_VERBOSITY_NONE) == 0) {
      asn_debug      = 0;
      asn1_xer_print = 0;
    } else if (strcasecmp( *(GNBSParams[GNB_ASN1_VERBOSITY_IDX].strptr), GNB_CONFIG_STRING_ASN1_VERBOSITY_INFO) == 0) {
      asn_debug      = 1;
      asn1_xer_print = 1;
    } else if (strcasecmp(*(GNBSParams[GNB_ASN1_VERBOSITY_IDX].strptr) , GNB_CONFIG_STRING_ASN1_VERBOSITY_ANNOYING) == 0) {
      asn_debug      = 1;
      asn1_xer_print = 2;
    } else {
      asn_debug      = 0;
      asn1_xer_print = 0;
    }

#endif

    AssertFatal (i<GNBSParams[GNB_ACTIVE_GNBS_IDX].numelt,
     "Failed to parse config file %s, %uth attribute %s \n",
     RC.config_file_name, i, GNB_CONFIG_STRING_ACTIVE_GNBS);
    
  
  if (GNBSParams[GNB_ACTIVE_GNBS_IDX].numelt>0) {
    // Output a list of all gNBs.
       config_getlist( &GNBParamList,GNBParams,sizeof(GNBParams)/sizeof(paramdef_t),NULL); 
    
    
      
      
    
    if (GNBParamList.numelt > 0) {
      for (k = 0; k < GNBParamList.numelt; k++) {
  if (GNBParamList.paramarray[k][GNB_GNB_ID_IDX].uptr == NULL) {
    // Calculate a default gNB ID

# if defined(ENABLE_USE_MME)
    uint32_t hash;
    
    hash = s1ap_generate_eNB_id ();
    gnb_id = k + (hash & 0xFFFF8);
# else
    gnb_id = k;
# endif
  } else {
          gnb_id = *(GNBParamList.paramarray[k][GNB_GNB_ID_IDX].uptr);
        }
  
  
  // search if in active list
  for (j=0; j < GNBSParams[GNB_ACTIVE_GNBS_IDX].numelt; j++) {
    if (strcmp(GNBSParams[GNB_ACTIVE_GNBS_IDX].strlistptr[j], *(GNBParamList.paramarray[k][GNB_GNB_NAME_IDX].strptr)) == 0) {
             paramdef_t S1Params[]  = S1PARAMS_DESC;
             paramlist_def_t S1ParamList = {GNB_CONFIG_STRING_MME_IP_ADDRESS,NULL,0};

             paramdef_t SCTPParams[]  = SCTPPARAMS_DESC;
             paramdef_t NETParams[]  =  NETPARAMS_DESC;
             char aprefix[MAX_OPTNAME_SIZE*2 + 8];
      
      S1AP_REGISTER_ENB_REQ (msg_p).eNB_id = gnb_id;
      
      if (strcmp(*(GNBParamList.paramarray[k][GNB_CELL_TYPE_IDX].strptr), "CELL_MACRO_GNB") == 0) {
        S1AP_REGISTER_ENB_REQ (msg_p).cell_type = CELL_MACRO_ENB;
      } else  if (strcmp(*(GNBParamList.paramarray[k][GNB_CELL_TYPE_IDX].strptr), "CELL_HOME_GNB") == 0) {
        S1AP_REGISTER_ENB_REQ (msg_p).cell_type = CELL_HOME_ENB;
      } else {
        AssertFatal (0,
         "Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for cell_type choice: CELL_MACRO_GNB or CELL_HOME_GNB !\n",
         RC.config_file_name, i, *(GNBParamList.paramarray[k][GNB_CELL_TYPE_IDX].strptr));
      }
      
      S1AP_REGISTER_ENB_REQ (msg_p).eNB_name         = strdup(*(GNBParamList.paramarray[k][GNB_GNB_NAME_IDX].strptr));
      S1AP_REGISTER_ENB_REQ (msg_p).tac              = (uint16_t)atoi(*(GNBParamList.paramarray[k][GNB_TRACKING_AREA_CODE_IDX].strptr));
      S1AP_REGISTER_ENB_REQ (msg_p).mcc              = (uint16_t)atoi(*(GNBParamList.paramarray[k][GNB_MOBILE_COUNTRY_CODE_IDX].strptr));
      S1AP_REGISTER_ENB_REQ (msg_p).mnc              = (uint16_t)atoi(*(GNBParamList.paramarray[k][GNB_MOBILE_NETWORK_CODE_IDX].strptr));
      S1AP_REGISTER_ENB_REQ (msg_p).mnc_digit_length = strlen(*(GNBParamList.paramarray[k][GNB_MOBILE_NETWORK_CODE_IDX].strptr));
      S1AP_REGISTER_ENB_REQ (msg_p).default_drx      = 0;
      AssertFatal((S1AP_REGISTER_ENB_REQ (msg_p).mnc_digit_length == 2) ||
      (S1AP_REGISTER_ENB_REQ (msg_p).mnc_digit_length == 3),
      "BAD MNC DIGIT LENGTH %d",
      S1AP_REGISTER_ENB_REQ (msg_p).mnc_digit_length);
      
      sprintf(aprefix,"%s.[%i]",GNB_CONFIG_STRING_GNB_LIST,k);
            config_getlist( &S1ParamList,S1Params,sizeof(S1Params)/sizeof(paramdef_t),aprefix); 
      
      S1AP_REGISTER_ENB_REQ (msg_p).nb_mme = 0;

      for (int l = 0; l < S1ParamList.numelt; l++) {

        S1AP_REGISTER_ENB_REQ (msg_p).nb_mme += 1;

        strcpy(S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[l].ipv4_address,*(S1ParamList.paramarray[l][GNB_MME_IPV4_ADDRESS_IDX].strptr));
        strcpy(S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[l].ipv6_address,*(S1ParamList.paramarray[l][GNB_MME_IPV6_ADDRESS_IDX].strptr));

        if (strcmp(*(S1ParamList.paramarray[l][GNB_MME_IP_ADDRESS_ACTIVE_IDX].strptr), "yes") == 0) {
#if defined(ENABLE_USE_MME)
    EPC_MODE_ENABLED = 1;
#endif
        } 
        if (strcmp(*(S1ParamList.paramarray[l][GNB_MME_IP_ADDRESS_PREFERENCE_IDX].strptr), "ipv4") == 0) {
    S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[j].ipv4 = 1;
        } else if (strcmp(*(S1ParamList.paramarray[l][GNB_MME_IP_ADDRESS_PREFERENCE_IDX].strptr), "ipv6") == 0) {
    S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[j].ipv6 = 1;
        } else if (strcmp(*(S1ParamList.paramarray[l][GNB_MME_IP_ADDRESS_PREFERENCE_IDX].strptr), "no") == 0) {
    S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[j].ipv4 = 1;
    S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[j].ipv6 = 1;
        }
      }

    
      // SCTP SETTING
      S1AP_REGISTER_ENB_REQ (msg_p).sctp_out_streams = SCTP_OUT_STREAMS;
      S1AP_REGISTER_ENB_REQ (msg_p).sctp_in_streams  = SCTP_IN_STREAMS;
# if defined(ENABLE_USE_MME)
      sprintf(aprefix,"%s.[%i].%s",GNB_CONFIG_STRING_GNB_LIST,k,GNB_CONFIG_STRING_SCTP_CONFIG);
            config_get( SCTPParams,sizeof(SCTPParams)/sizeof(paramdef_t),aprefix); 
            S1AP_REGISTER_ENB_REQ (msg_p).sctp_in_streams = (uint16_t)*(SCTPParams[GNB_SCTP_INSTREAMS_IDX].uptr);
            S1AP_REGISTER_ENB_REQ (msg_p).sctp_out_streams = (uint16_t)*(SCTPParams[GNB_SCTP_OUTSTREAMS_IDX].uptr);
#endif

            sprintf(aprefix,"%s.[%i].%s",GNB_CONFIG_STRING_GNB_LIST,k,GNB_CONFIG_STRING_NETWORK_INTERFACES_CONFIG);
      // NETWORK_INTERFACES
            config_get( NETParams,sizeof(NETParams)/sizeof(paramdef_t),aprefix); 

    //    S1AP_REGISTER_ENB_REQ (msg_p).enb_interface_name_for_S1U = strdup(enb_interface_name_for_S1U);
    cidr = *(NETParams[GNB_IPV4_ADDRESS_FOR_S1_MME_IDX].strptr);
    address = strtok(cidr, "/");

    S1AP_REGISTER_ENB_REQ (msg_p).enb_ip_address.ipv6 = 0;
    S1AP_REGISTER_ENB_REQ (msg_p).enb_ip_address.ipv4 = 1;

    strcpy(S1AP_REGISTER_ENB_REQ (msg_p).enb_ip_address.ipv4_address, address);

    /*
    in_addr_t  ipv4_address;

        if (address) {
      IPV4_STR_ADDR_TO_INT_NWBO ( address, ipv4_address, "BAD IP ADDRESS FORMAT FOR eNB S1_U !\n" );
    }
    strcpy(S1AP_REGISTER_ENB_REQ (msg_p).enb_ip_address.ipv4_address, inet_ntoa(ipv4_address));
    //    S1AP_REGISTER_ENB_REQ (msg_p).enb_port_for_S1U = enb_port_for_S1U;


    S1AP_REGISTER_ENB_REQ (msg_p).enb_interface_name_for_S1_MME = strdup(enb_interface_name_for_S1_MME);
    cidr = enb_ipv4_address_for_S1_MME;
    address = strtok(cidr, "/");
    
    if (address) {
      IPV4_STR_ADDR_TO_INT_NWBO ( address, S1AP_REGISTER_ENB_REQ(msg_p).enb_ipv4_address_for_S1_MME, "BAD IP ADDRESS FORMAT FOR eNB S1_MME !\n" );
    }
*/
    



      break;
    }
  }
      }
    }
  }
return 0;
}

void NRRCConfig(void) {

  paramlist_def_t MACRLCParamList = {CONFIG_STRING_MACRLC_LIST,NULL,0};
  paramlist_def_t L1ParamList     = {CONFIG_STRING_L1_LIST,NULL,0};
  paramlist_def_t RUParamList     = {CONFIG_STRING_RU_LIST,NULL,0};
  paramdef_t GNBSParams[]         = GNBSPARAMS_DESC;
  paramlist_def_t CCsParamList    = {GNB_CONFIG_STRING_COMPONENT_CARRIERS,NULL,0};
2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838
  
  char aprefix[MAX_OPTNAME_SIZE*2 + 8];  
  


/* get global parameters, defined outside any section in the config file */
 
  printf("Getting GNBSParams\n");
 
  config_get( GNBSParams,sizeof(GNBSParams)/sizeof(paramdef_t),NULL); 
  RC.nb_nr_inst = GNBSParams[GNB_ACTIVE_GNBS_IDX].numelt;
 
  if (RC.nb_nr_inst > 0) {
2839
    RC.nb_nr_CC = (int *)malloc((1+RC.nb_nr_inst)*sizeof(int));
2840 2841 2842
    for (int i=0;i<RC.nb_nr_inst;i++) {
      sprintf(aprefix,"%s.[%i]",GNB_CONFIG_STRING_GNB_LIST,i);
      config_getlist( &CCsParamList,NULL,0, aprefix);
2843
      RC.nb_nr_CC[i]   = CCsParamList.numelt;
2844 2845 2846
    }
  }

2847

2848 2849 2850 2851 2852
	// Get num MACRLC instances
    config_getlist( &MACRLCParamList,NULL,0, NULL);
    RC.nb_macrlc_inst  = MACRLCParamList.numelt;
    // Get num L1 instances
    config_getlist( &L1ParamList,NULL,0, NULL);
WEI-TAI CHEN's avatar
WEI-TAI CHEN committed
2853
    RC.nb_nr_L1_inst = L1ParamList.numelt;
2854 2855 2856 2857

    // Get num RU instances
    config_getlist( &RUParamList,NULL,0, NULL);  
    RC.nb_RU     = RUParamList.numelt; 
2858
 
2859 2860 2861
 

}