diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c index f941d8a8db..b819bfd5bc 100755 --- a/openair2/ENB_APP/enb_config.c +++ b/openair2/ENB_APP/enb_config.c @@ -351,7 +351,8 @@ void RCconfig_macrlc() { "No " CONFIG_STRING_MACRLC_LIST " configuration found"); } } - + +#include int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) { int num_enbs = 0; @@ -448,7 +449,88 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) int32_t my_int; + int si_Narrowband_r13 = 0; + int si_TBS_r13 = 0; + int systemInfoValueTagSi_r13 = 0; + + int firstPreamble_r13 = 0; + int lastPreamble_r13 = 0; + const char* ra_ResponseWindowSize_r13 = NULL; + const char* mac_ContentionResolutionTimer_r13 = NULL; + const char* rar_HoppingConfig_r13 = NULL; + int rsrp_range_br = 0; + int prach_config_index_br = 0; + int prach_freq_offset_br = 0; + int prach_StartingSubframe_r13 = 0; + const char* maxNumPreambleAttemptCE_r13 = NULL; + const char* numRepetitionPerPreambleAttempt_r13 = NULL; + const char* mpdcch_NumRepetition_RA_r13 = NULL; + const char* prach_HoppingConfig_r13 = NULL; + int maxavailablenarrowband = 0; + int pucch_info_value = 0; + + int paging_narrowbands_r13 = 0; + const char* mpdcch_numrepetition_paging_r13 = NULL; + const char* nb_v1310 = NULL; + + + const char* pucch_NumRepetitionCE_Msg4_Level0_r13 = NULL; + const char* pucch_NumRepetitionCE_Msg4_Level1_r13 = NULL; + const char* pucch_NumRepetitionCE_Msg4_Level2_r13 = NULL; + const char* pucch_NumRepetitionCE_Msg4_Level3_r13 = NULL; + + const char* sib2_mpdcch_pdsch_hoppingNB_r13 = NULL; + const char* sib2_interval_DLHoppingConfigCommonModeA_r13 = NULL; + const char* sib2_interval_DLHoppingConfigCommonModeA_r13_val = NULL; + const char* sib2_interval_DLHoppingConfigCommonModeB_r13 = NULL; + const char* sib2_interval_DLHoppingConfigCommonModeB_r13_val = NULL; + + const char* sib2_interval_ULHoppingConfigCommonModeA_r13 = NULL; + const char* sib2_interval_ULHoppingConfigCommonModeA_r13_val = NULL; + const char* sib2_interval_ULHoppingConfigCommonModeB_r13 = NULL; + const char* sib2_interval_ULHoppingConfigCommonModeB_r13_val = NULL; + libconfig_int sib2_mpdcch_pdsch_hoppingOffset_r13 = 0; + + const char* pdsch_maxNumRepetitionCEmodeA_r13 = NULL; + const char* pdsch_maxNumRepetitionCEmodeB_r13 = NULL; + + const char* pusch_maxNumRepetitionCEmodeA_r13 = 0; + const char* pusch_maxNumRepetitionCEmodeB_r13 = 0; + int pusch_HoppingOffset_v1310 = 0; + + int hyperSFN_r13 = 0; + int eDRX_Allowed_r13 = 0; + int q_RxLevMinCE_r13 = 0; + int q_QualMinRSRQ_CE_r13 = 0; + const char* si_WindowLength_BR_r13 = NULL; + const char* si_RepetitionPattern_r13 = NULL; + int startSymbolBR_r13 = 0; + const char* si_HoppingConfigCommon_r13 = NULL; + const char* si_ValidityTime_r13 = NULL; + const char* mpdcch_pdsch_HoppingNB_r13 = NULL; + int interval_DLHoppingConfigCommonModeA_r13_val = 0; + int interval_DLHoppingConfigCommonModeB_r13_val = 0; + int mpdcch_pdsch_HoppingOffset_r13 = 0; + const char* preambleTransMax_CE_r13 = NULL; + const char* rach_numberOfRA_Preambles_br = NULL; + const char* mpdcch_startSF_CSS_RA_r13_val = NULL; + int prach_HoppingOffset_r13 = 0; + int schedulingInfoSIB1_BR_r13 = 0; + uint64_t fdd_DownlinkOrTddSubframeBitmapBR_val_r13 = 0; + + char* cellSelectionInfoCE_r13 = NULL; + char* bandwidthReducedAccessRelatedInfo_r13 = NULL; + char* fdd_DownlinkOrTddSubframeBitmapBR_r13 = NULL; + char* fdd_UplinkSubframeBitmapBR_r13 = NULL; + char* freqHoppingParametersDL_r13 = NULL; + char* interval_DLHoppingConfigCommonModeA_r13 = NULL; + char* interval_DLHoppingConfigCommonModeB_r13 = NULL; + char* prach_ConfigCommon_v1310 = NULL; + char* mpdcch_startSF_CSS_RA_r13 = NULL; + + printf("[KOGO][TESTING] Start of RCConfig_RCC"); + getchar(); @@ -462,7 +544,7 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) paramdef_t CCsParams[] = CCPARAMS_DESC; paramlist_def_t CCsParamList = {ENB_CONFIG_STRING_COMPONENT_CARRIERS,NULL,0}; - //paramdef_t brParams[] = BRPARAMS_DESC; + paramdef_t brParams[] = BRPARAMS_DESC; //paramdef_t siInfoBRParams[] = SI_INFO_BR_DESC; //paramdef_t rsrprangeParams[] = RSRP_RANGE_LIST_DESC; //paramdef_t rachcelevelParams[] = RACH_CE_LEVELINFOLIST_R13_DESC; @@ -594,6 +676,8 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) sprintf(enbpath,"%s.[%i]",ENB_CONFIG_STRING_ENB_LIST,k), config_getlist( &CCsParamList,NULL,0,enbpath); + printf("[KOGO][TESTING]: CC List count: %d \n", CCsParamList.numelt); + getchar(); LOG_I(RRC,"num component carriers %d \n", num_component_carriers); if ( CCsParamList.numelt> 0) { @@ -614,7 +698,8 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) //printf("Component carrier %d\n",component_carrier); - + printf("[KOGO][TESTING]: tdd_config: %d \n",tdd_config); + getchar(); nb_cc++; RRC_CONFIGURATION_REQ (msg_p).tdd_config[j] = tdd_config; @@ -1679,7 +1764,2089 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) +#ifdef Rel14 + char brparamspath[MAX_OPTNAME_SIZE*2 + 16]; + sprintf(brparamspath,"%s.%s",ccspath,ENB_CONFIG_STRING_COMPONENT_BR_PARAMETERS); + config_get( brParams,sizeof(brParams)/sizeof(paramdef_t),brparamspath); + /*setting_br13 = config_setting_get_member(component_carrier, ENB_CONFIG_STRING_BR); + + if (setting_br13 != NULL) {*/ + int cnt = 0; + + + /*if (!config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_schedulingInfoSIB1, &schedulingInfoSIB1_BR_r13)) { + AssertFatal(0, "Failed to parse eNB configuration file %s, enb %d schedulingInfoSIB1_BR_r13!\n", RC.config_file_name, i); + } else {*/ + RRC_CONFIGURATION_REQ(msg_p).schedulingInfoSIB1_BR_r13[j] = schedulingInfoSIB1_BR_r13; + //} + + /*system_info_value_tag_SI_list = config_setting_get_member(setting_br13, ENB_CONFIG_STRING_SYSTEM_INFO_VALUE_TAG_LIST); + int num_system_info; + if (system_info_value_tag_SI_list != NULL) + { + num_system_info = config_setting_length(system_info_value_tag_SI_list); + for (sys_info_idx = 0; sys_info_idx < num_system_info; ++sys_info_idx) + { + system_info_value_tag_SI = config_setting_get_elem(system_info_value_tag_SI_list, sys_info_idx); + if ( !(config_setting_lookup_int(system_info_value_tag_SI, ENB_CONFIG_STRING_SYSTEM_INFO_VALUE_TAG_SI_R13, &systemInfoValueTagSi_r13)) ) + { + AssertFatal (0, "Failed to parse eNB configuration file %s, system info value tag %d!\n", RC.config_file_name, nb_cc++); + } + RRC_CONFIGURATION_REQ (msg_p).systemInfoValueTagSi_r13[j][sys_info_idx] = systemInfoValueTagSi_r13; + } + } + else + { + num_system_info = 0; + } + RRC_CONFIGURATION_REQ (msg_p).system_info_value_tag_SI_size[j] = num_system_info; + + + if (config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_CELLSELECTIONINFOCE, &cellSelectionInfoCE_r13) && !strcmp(cellSelectionInfoCE_r13, "ENABLE")) + { + RRC_CONFIGURATION_REQ(msg_p).cellSelectionInfoCE_r13[j] = TRUE; + if (!config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_Q_RXLEVMINCE, &q_RxLevMinCE_r13)) + { + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d q_RxLevMinCE_r13!\n", + RC.config_file_name, i); + + } + RRC_CONFIGURATION_REQ(msg_p).q_RxLevMinCE_r13[j]= q_RxLevMinCE_r13; + + if (config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_Q_QUALMINRSRQ_CE, &q_QualMinRSRQ_CE_r13)) + { + RRC_CONFIGURATION_REQ(msg_p).q_QualMinRSRQ_CE_r13[j]= calloc(1, sizeof(long)); + *RRC_CONFIGURATION_REQ(msg_p).q_QualMinRSRQ_CE_r13[j]= q_QualMinRSRQ_CE_r13; + + } + else + RRC_CONFIGURATION_REQ(msg_p).q_QualMinRSRQ_CE_r13[j]= NULL; + + } + else + RRC_CONFIGURATION_REQ(msg_p).cellSelectionInfoCE_r13[j] = FALSE; + + if (config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_BRAccessRelatedInfo, &bandwidthReducedAccessRelatedInfo_r13) && !strcmp(bandwidthReducedAccessRelatedInfo_r13, "ENABLE")) + { + printf("Enabling BR access SI scheduling parameters\n"); + RRC_CONFIGURATION_REQ(msg_p).bandwidthReducedAccessRelatedInfo_r13[j] = TRUE; + if (!config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_SI_WINDOWLENGTH_BR, &si_WindowLength_BR_r13) || + !config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_SI_REPETITIONPATTERN, &si_RepetitionPattern_r13) || + !config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_STARTSYMBOLBR, &startSymbolBR_r13) || + !config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_SI_HOPPINGCONFIGCOMMON, &si_HoppingConfigCommon_r13)) + { + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d si_WindowLength_BR_r13, si_RepetitionPattern_r13, fdd_DownlinkOrTddSubframeBitmapBR_r13, fdd_UplinkSubframeBitmapBR_r13!\n", + RC.config_file_name, i); + + } + + + + if (!strcmp(si_WindowLength_BR_r13, "ms20")) { + RRC_CONFIGURATION_REQ(msg_p).si_WindowLength_BR_r13[j] = 0; + } else if (!strcmp(si_WindowLength_BR_r13, "ms40")) { + RRC_CONFIGURATION_REQ(msg_p).si_WindowLength_BR_r13[j] = 1; + } else if (!strcmp(si_WindowLength_BR_r13, "ms60")) { + RRC_CONFIGURATION_REQ(msg_p).si_WindowLength_BR_r13[j] = 2; + } else if (!strcmp(si_WindowLength_BR_r13, "ms80")) { + RRC_CONFIGURATION_REQ(msg_p).si_WindowLength_BR_r13[j] = 3; + } else if (!strcmp(si_WindowLength_BR_r13, "ms120")) { + RRC_CONFIGURATION_REQ(msg_p).si_WindowLength_BR_r13[j] = 4; + } else if (!strcmp(si_WindowLength_BR_r13, "ms160")) { + RRC_CONFIGURATION_REQ(msg_p).si_WindowLength_BR_r13[j] = 5; + } else if (!strcmp(si_WindowLength_BR_r13, "ms200")) { + RRC_CONFIGURATION_REQ(msg_p).si_WindowLength_BR_r13[j] = 6; + } else if (!strcmp(si_WindowLength_BR_r13, "spare")) { + RRC_CONFIGURATION_REQ(msg_p).si_WindowLength_BR_r13[j] = 7; + } + + + if (!strcmp(si_RepetitionPattern_r13, "everyRF")) { + RRC_CONFIGURATION_REQ(msg_p).si_RepetitionPattern_r13[j] = 0; + } else if (!strcmp(si_RepetitionPattern_r13, "every2ndRF")) { + RRC_CONFIGURATION_REQ(msg_p).si_RepetitionPattern_r13[j] = 1; + } else if (!strcmp(si_RepetitionPattern_r13, "every4thRF")) { + RRC_CONFIGURATION_REQ(msg_p).si_RepetitionPattern_r13[j] = 2; + } else if (!strcmp(si_RepetitionPattern_r13, "every8thRF")) { + RRC_CONFIGURATION_REQ(msg_p).si_RepetitionPattern_r13[j] = 3; + } + + + RRC_CONFIGURATION_REQ(msg_p).startSymbolBR_r13[j] = startSymbolBR_r13; + + if (!strcmp(si_HoppingConfigCommon_r13, "off")) { + RRC_CONFIGURATION_REQ(msg_p).si_HoppingConfigCommon_r13[j] = 1; + } else if (!strcmp(si_HoppingConfigCommon_r13, "on")) { + RRC_CONFIGURATION_REQ(msg_p).si_HoppingConfigCommon_r13[j] = 0; + } + + + printf("DEBUGGING][KOGO][CHAR*]: window length: %s - %d\n", si_WindowLength_BR_r13, RRC_CONFIGURATION_REQ(msg_p).si_WindowLength_BR_r13[j]); + printf("DEBUGGING][KOGO][CHAR*]: repetition pattern: %s - %d\n", si_RepetitionPattern_r13, RRC_CONFIGURATION_REQ(msg_p).si_RepetitionPattern_r13[j]); + printf("DEBUGGING][KOGO][CHAR*]: hopping config common: %s - %d\n", si_HoppingConfigCommon_r13, RRC_CONFIGURATION_REQ(msg_p).si_HoppingConfigCommon_r13[j]); + + scheduling_info_br_list = config_setting_get_member(setting_br13, ENB_CONFIG_STRING_SCHEDULING_INFO_LIST); + int num_scheduling_info = config_setting_length(scheduling_info_br_list); + RRC_CONFIGURATION_REQ (msg_p).scheduling_info_br_size[j] = num_scheduling_info; + + for (sched_info_idx = 0; sched_info_idx < num_scheduling_info; ++sched_info_idx) + { + scheduling_info_br = config_setting_get_elem(scheduling_info_br_list, sched_info_idx); + if (!( + config_setting_lookup_int(scheduling_info_br, ENB_CONFIG_STRING_SI_NARROWBAND_R13, &si_Narrowband_r13) + && config_setting_lookup_int(scheduling_info_br, ENB_CONFIG_STRING_SI_TBS_R13, &si_TBS_r13) + ) + ){ + AssertFatal (0, "Failed to parse eNB configuration file %s, scheduking info br %d!\n", RC.config_file_name, nb_cc++); + } + RRC_CONFIGURATION_REQ (msg_p).si_Narrowband_r13[j][sched_info_idx] = si_Narrowband_r13; + RRC_CONFIGURATION_REQ (msg_p).si_TBS_r13[j][sched_info_idx] = si_TBS_r13; + } + + bool fdd_downlink_exist = config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_FDD_DLORTDD_SFB_BR, &fdd_DownlinkOrTddSubframeBitmapBR_r13); + if (fdd_downlink_exist) + { + RRC_CONFIGURATION_REQ(msg_p).fdd_DownlinkOrTddSubframeBitmapBR_r13[j] = CALLOC(1, sizeof(BOOLEAN_t)); + if (!strcmp(fdd_DownlinkOrTddSubframeBitmapBR_r13, "subframePattern40-r13")) + *RRC_CONFIGURATION_REQ(msg_p).fdd_DownlinkOrTddSubframeBitmapBR_r13[j] = FALSE; + else + *RRC_CONFIGURATION_REQ(msg_p).fdd_DownlinkOrTddSubframeBitmapBR_r13[j] = TRUE; + + config_setting_lookup_int64(setting_br13, ENB_CONFIG_STRING_FDD_DLORTDDSFB_BR_VAL, &fdd_DownlinkOrTddSubframeBitmapBR_val_r13); + RRC_CONFIGURATION_REQ(msg_p).fdd_DownlinkOrTddSubframeBitmapBR_val_r13[j] = fdd_DownlinkOrTddSubframeBitmapBR_val_r13; + } + else + { + RRC_CONFIGURATION_REQ(msg_p).fdd_DownlinkOrTddSubframeBitmapBR_r13[j] = NULL; + } + + if (config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_SI_VALIDITYTIME, &si_ValidityTime_r13)) + { + RRC_CONFIGURATION_REQ(msg_p).si_ValidityTime_r13[j] = calloc(1, sizeof(long)); + if (!strcmp(si_ValidityTime_r13, "true")) { + *RRC_CONFIGURATION_REQ(msg_p).si_ValidityTime_r13[j] = 0; + } else { + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d si_ValidityTime_r13 unknown value!\n", + RC.config_file_name, i); + } + printf("DEBUGGING][KOGO][CHAR*]: si_ValidityTime_r13: %s - %d\n", si_ValidityTime_r13, *RRC_CONFIGURATION_REQ(msg_p).si_ValidityTime_r13[j]); + } + else + { + RRC_CONFIGURATION_REQ(msg_p).si_ValidityTime_r13[j] = NULL; + } + + + if (config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_FREQHOPPINGPARAMETERSDL, &freqHoppingParametersDL_r13) && !strcmp(freqHoppingParametersDL_r13, "ENABLE")) + { + RRC_CONFIGURATION_REQ(msg_p).freqHoppingParametersDL_r13[j] = TRUE; + if (!config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_INTERVAL_DLHOPPINGCONFIGCOMMONMODEB, &interval_DLHoppingConfigCommonModeA_r13) || + !config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_INTERVAL_DLHOPPINGCONFIGCOMMONMODEB_VAL, &interval_DLHoppingConfigCommonModeA_r13_val) || + !config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_INTERVAL_DLHOPPINGCONFIGCOMMONMODEB, &interval_DLHoppingConfigCommonModeB_r13) || + !config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_INTERVAL_DLHOPPINGCONFIGCOMMONMODEB_VAL, &interval_DLHoppingConfigCommonModeB_r13_val)) + { + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d si_WindowLength_BR_r13, si_RepetitionPattern_r13, fdd_DownlinkOrTddSubframeBitmapBR_r13, fdd_UplinkSubframeBitmapBR_r13!\n", + RC.config_file_name, i); + + } + + + if (!strcmp(interval_DLHoppingConfigCommonModeA_r13, "interval-TDD-r13")) + RRC_CONFIGURATION_REQ(msg_p).interval_DLHoppingConfigCommonModeA_r13[j] = FALSE; + else + RRC_CONFIGURATION_REQ(msg_p).interval_DLHoppingConfigCommonModeA_r13[j] = TRUE; + RRC_CONFIGURATION_REQ(msg_p).interval_DLHoppingConfigCommonModeA_r13_val[j] = interval_DLHoppingConfigCommonModeA_r13_val; + + if (!strcmp(interval_DLHoppingConfigCommonModeB_r13, "interval-TDD-r13")) + RRC_CONFIGURATION_REQ(msg_p).interval_DLHoppingConfigCommonModeB_r13[j] = FALSE; + else + RRC_CONFIGURATION_REQ(msg_p).interval_DLHoppingConfigCommonModeB_r13[j] = TRUE; + RRC_CONFIGURATION_REQ(msg_p).interval_DLHoppingConfigCommonModeB_r13_val[j] = interval_DLHoppingConfigCommonModeB_r13_val; + + + + + if (config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_MPDCCH_PDSCH_HOPPINGNB, &mpdcch_pdsch_HoppingNB_r13)) + { + RRC_CONFIGURATION_REQ(msg_p).mpdcch_pdsch_HoppingNB_r13[j] = calloc(1, sizeof(long)); + if (!strcmp(mpdcch_pdsch_HoppingNB_r13, "nb2")) { + *RRC_CONFIGURATION_REQ(msg_p).mpdcch_pdsch_HoppingNB_r13[j] = 0; + } else if (!strcmp(mpdcch_pdsch_HoppingNB_r13, "nb4")) { + *RRC_CONFIGURATION_REQ(msg_p).mpdcch_pdsch_HoppingNB_r13[j] = 1; + } else { + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d mpdcch_pdsch_HoppingNB_r13 unknown value!\n", + RC.config_file_name, i); + } + } + else { + RRC_CONFIGURATION_REQ(msg_p).mpdcch_pdsch_HoppingNB_r13[j] = NULL; + } + + if (config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_MPDCCH_PDSCH_HOPPINGOFFSET, &mpdcch_pdsch_HoppingOffset_r13)) + { + RRC_CONFIGURATION_REQ(msg_p).mpdcch_pdsch_HoppingOffset_r13[j] = calloc(1, sizeof(long)); + *RRC_CONFIGURATION_REQ(msg_p).mpdcch_pdsch_HoppingOffset_r13[j] = mpdcch_pdsch_HoppingOffset_r13; + } + else + RRC_CONFIGURATION_REQ(msg_p).mpdcch_pdsch_HoppingOffset_r13[j] = NULL; + + } + else + { + RRC_CONFIGURATION_REQ(msg_p).freqHoppingParametersDL_r13[j] = FALSE; + } + + // SIB23 parameters --------------------------------------------------------------------------------------------------------------------------- + + if (config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_PREAMBLETRANSMAX_CE_R13, &preambleTransMax_CE_r13)) + { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].preambleTransMax_CE_r13 = calloc(1, sizeof(long)); + if (!strcmp(preambleTransMax_CE_r13, "n3")) { + *RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].preambleTransMax_CE_r13 = 0; + } else if (!strcmp(preambleTransMax_CE_r13, "n4")) { + *RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].preambleTransMax_CE_r13 = 1; + } else if (!strcmp(preambleTransMax_CE_r13, "n5")) { + *RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].preambleTransMax_CE_r13 = 2; + } else if (!strcmp(preambleTransMax_CE_r13, "n6")) { + *RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].preambleTransMax_CE_r13 = 3; + } else if (!strcmp(preambleTransMax_CE_r13, "n7")) { + *RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].preambleTransMax_CE_r13 = 4; + } else if (!strcmp(preambleTransMax_CE_r13, "n8")) { + *RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].preambleTransMax_CE_r13 = 5; + } else if (!strcmp(preambleTransMax_CE_r13, "n10")) { + *RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].preambleTransMax_CE_r13 = 6; + } else if (!strcmp(preambleTransMax_CE_r13, "n20")) { + *RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].preambleTransMax_CE_r13 = 7; + } else if (!strcmp(preambleTransMax_CE_r13, "n50")) { + *RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].preambleTransMax_CE_r13 = 8; + } else if (!strcmp(preambleTransMax_CE_r13, "n100")) { + *RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].preambleTransMax_CE_r13 = 9; + } else if (!strcmp(preambleTransMax_CE_r13, "n200")) { + *RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].preambleTransMax_CE_r13 = 10; + } else { + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d preambleTransMax_CE_r13 unknown value!\n", + RC.config_file_name, i); + } + } + else + { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].preambleTransMax_CE_r13 = NULL; + } + + printf("DEBUGGING][KOGO][CHAR*]: preambleTransMax_CE_r13: %s - %d\n", preambleTransMax_CE_r13, *RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].preambleTransMax_CE_r13); + + rach_ce_level_info_r13_list = config_setting_get_member(setting_br13, ENB_CONFIG_STRING_RACH_CE_LEVEL_INFO_LIST); + int num_rach_ce_level_info_list = config_setting_length(rach_ce_level_info_r13_list); + RRC_CONFIGURATION_REQ (msg_p).rach_CE_LevelInfoList_r13_size[j] = num_rach_ce_level_info_list; + int rach_info_level_idx; + for (rach_info_level_idx = 0; rach_info_level_idx < num_rach_ce_level_info_list; ++rach_info_level_idx) + { + rach_ce_level_info_r13 = config_setting_get_elem(rach_ce_level_info_r13_list, rach_info_level_idx); + if (! (config_setting_lookup_int(rach_ce_level_info_r13, ENB_CONFIG_STRING_FIRST_PREAMBLE, &firstPreamble_r13) + && config_setting_lookup_int(rach_ce_level_info_r13, ENB_CONFIG_STRING_LAST_PREAMBLE, &lastPreamble_r13) + && config_setting_lookup_string(rach_ce_level_info_r13, ENB_CONFIG_STRING_RA_RESPONSE_WINDOW_SIZE_R13, &ra_ResponseWindowSize_r13) + && config_setting_lookup_string(rach_ce_level_info_r13, ENB_CONFIG_STRING_MAC_CONTENT_RESOLUTION_TIMER_R13, &mac_ContentionResolutionTimer_r13) + && config_setting_lookup_string(rach_ce_level_info_r13, ENB_CONFIG_STRING_RAR_HOPPING_CONFIG_R13, &rar_HoppingConfig_r13) ) + ) + { + AssertFatal (0, + "Failed to parse eNB configuration file %s, rach_ce_level_info_r13 %d!\n", + RC.config_file_name, nb_cc++); + } + + RRC_CONFIGURATION_REQ (msg_p).firstPreamble_r13[j][rach_info_level_idx] = firstPreamble_r13; + RRC_CONFIGURATION_REQ (msg_p).lastPreamble_r13[j][rach_info_level_idx] = lastPreamble_r13; + + if (!strcmp(ra_ResponseWindowSize_r13, "sf20")) { + RRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindowSize_r13[j][rach_info_level_idx] = 0; + } else if (!strcmp(ra_ResponseWindowSize_r13, "sf50")) { + RRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindowSize_r13[j][rach_info_level_idx] = 1; + } else if (!strcmp(ra_ResponseWindowSize_r13, "sf80")) { + RRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindowSize_r13[j][rach_info_level_idx] = 2; + } else if (!strcmp(ra_ResponseWindowSize_r13, "sf120")) { + RRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindowSize_r13[j][rach_info_level_idx] = 3; + } else if (!strcmp(ra_ResponseWindowSize_r13, "sf180")) { + RRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindowSize_r13[j][rach_info_level_idx] = 4; + } else if (!strcmp(ra_ResponseWindowSize_r13, "sf240")) { + RRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindowSize_r13[j][rach_info_level_idx] = 5; + } else if (!strcmp(ra_ResponseWindowSize_r13, "sf320")) { + RRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindowSize_r13[j][rach_info_level_idx] = 6; + } else if (!strcmp(ra_ResponseWindowSize_r13, "sf400")) { + RRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindowSize_r13[j][rach_info_level_idx] = 7; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, ra_ResponseWindowSize_r13 unknown value!\n", + RC.config_file_name); + } + + if (!strcmp(mac_ContentionResolutionTimer_r13, "sf80")) { + RRC_CONFIGURATION_REQ (msg_p).mac_ContentionResolutionTimer_r13[j][rach_info_level_idx] = 0; + } else if (!strcmp(mac_ContentionResolutionTimer_r13, "sf100")) { + RRC_CONFIGURATION_REQ (msg_p).mac_ContentionResolutionTimer_r13[j][rach_info_level_idx] = 1; + } else if (!strcmp(mac_ContentionResolutionTimer_r13, "sf120")) { + RRC_CONFIGURATION_REQ (msg_p).mac_ContentionResolutionTimer_r13[j][rach_info_level_idx] = 2; + } else if (!strcmp(mac_ContentionResolutionTimer_r13, "sf160")) { + RRC_CONFIGURATION_REQ (msg_p).mac_ContentionResolutionTimer_r13[j][rach_info_level_idx] = 3; + } else if (!strcmp(mac_ContentionResolutionTimer_r13, "sf200")) { + RRC_CONFIGURATION_REQ (msg_p).mac_ContentionResolutionTimer_r13[j][rach_info_level_idx] = 4; + } else if (!strcmp(mac_ContentionResolutionTimer_r13, "sf240")) { + RRC_CONFIGURATION_REQ (msg_p).mac_ContentionResolutionTimer_r13[j][rach_info_level_idx] = 5; + } else if (!strcmp(mac_ContentionResolutionTimer_r13, "sf480")) { + RRC_CONFIGURATION_REQ (msg_p).mac_ContentionResolutionTimer_r13[j][rach_info_level_idx] = 6; + } else if (!strcmp(mac_ContentionResolutionTimer_r13, "sf960")) { + RRC_CONFIGURATION_REQ (msg_p).mac_ContentionResolutionTimer_r13[j][rach_info_level_idx] = 7; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, mac_ContentionResolutionTimer_r13 unknown value!\n", + RC.config_file_name); + } + + if (!strcmp(rar_HoppingConfig_r13, "on")) { + RRC_CONFIGURATION_REQ (msg_p).rar_HoppingConfig_r13[j][rach_info_level_idx] = 0; + } else if (!strcmp(rar_HoppingConfig_r13, "off")) { + RRC_CONFIGURATION_REQ (msg_p).rar_HoppingConfig_r13[j][rach_info_level_idx] = 1; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, rar_HoppingConfig_r13 unknown value!\n", + RC.config_file_name); + } + + } // for + + printf("DEBUGGING][KOGO][CHAR*]: ra_ResponseWindowSize_r13: %s - %d\n", preambleTransMax_CE_r13, RRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindowSize_r13[j][0]); + printf("DEBUGGING][KOGO][CHAR*]: mac_ContentionResolutionTimer_r13: %s - %d\n", mac_ContentionResolutionTimer_r13, RRC_CONFIGURATION_REQ (msg_p).mac_ContentionResolutionTimer_r13[j][0]); + printf("DEBUGGING][KOGO][CHAR*]: rar_HoppingConfig_r13: %s - %d\n", rar_HoppingConfig_r13, RRC_CONFIGURATION_REQ (msg_p).rar_HoppingConfig_r13[j][0]); + + if (config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_PDSCH_MAX_NUM_REPETITION_CE_MODE_A_R13, &pdsch_maxNumRepetitionCEmodeA_r13)) { + RRC_CONFIGURATION_REQ(msg_p).pdsch_maxNumRepetitionCEmodeA_r13[j] = CALLOC(1, sizeof(long)); + if (!strcmp(pdsch_maxNumRepetitionCEmodeA_r13, "r16")) { + *RRC_CONFIGURATION_REQ(msg_p).pdsch_maxNumRepetitionCEmodeA_r13[j] = 0; + } else if (!strcmp(pdsch_maxNumRepetitionCEmodeA_r13, "r32")) { + *RRC_CONFIGURATION_REQ(msg_p).pdsch_maxNumRepetitionCEmodeA_r13[j] = 1; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, pdsch_maxNumRepetitionCEmodeA_r13 unknown value!\n", + RC.config_file_name); + } + printf("DEBUGGING][KOGO][CHAR*]: pdsch_maxNumRepetitionCEmodeA_r13: %s - %d\n", pdsch_maxNumRepetitionCEmodeA_r13, *RRC_CONFIGURATION_REQ (msg_p).pdsch_maxNumRepetitionCEmodeA_r13[j]); + } + + + if (config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_PDSCH_MAX_NUM_REPETITION_CE_MODE_B_R13, &pdsch_maxNumRepetitionCEmodeB_r13)) { + RRC_CONFIGURATION_REQ(msg_p).pdsch_maxNumRepetitionCEmodeB_r13[j] = CALLOC(1, sizeof(long)); + if (!strcmp(pdsch_maxNumRepetitionCEmodeB_r13, "r192")) { + *RRC_CONFIGURATION_REQ(msg_p).pdsch_maxNumRepetitionCEmodeB_r13[j] = 0; + } else if (!strcmp(pdsch_maxNumRepetitionCEmodeB_r13, "r256")) { + *RRC_CONFIGURATION_REQ(msg_p).pdsch_maxNumRepetitionCEmodeB_r13[j] = 1; + } else if (!strcmp(pdsch_maxNumRepetitionCEmodeB_r13, "r384")) { + *RRC_CONFIGURATION_REQ(msg_p).pdsch_maxNumRepetitionCEmodeB_r13[j] = 2; + } else if (!strcmp(pdsch_maxNumRepetitionCEmodeB_r13, "r512")) { + *RRC_CONFIGURATION_REQ(msg_p).pdsch_maxNumRepetitionCEmodeB_r13[j] = 3; + } else if (!strcmp(pdsch_maxNumRepetitionCEmodeB_r13, "r768")) { + *RRC_CONFIGURATION_REQ(msg_p).pdsch_maxNumRepetitionCEmodeB_r13[j] = 4; + } else if (!strcmp(pdsch_maxNumRepetitionCEmodeB_r13, "r1024")) { + *RRC_CONFIGURATION_REQ(msg_p).pdsch_maxNumRepetitionCEmodeB_r13[j] = 5; + } else if (!strcmp(pdsch_maxNumRepetitionCEmodeB_r13, "r1536")) { + *RRC_CONFIGURATION_REQ(msg_p).pdsch_maxNumRepetitionCEmodeB_r13[j] = 6; + } else if (!strcmp(pdsch_maxNumRepetitionCEmodeB_r13, "r2048")) { + *RRC_CONFIGURATION_REQ(msg_p).pdsch_maxNumRepetitionCEmodeB_r13[j] = 7; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, pdsch_maxNumRepetitionCEmodeB_r13 unknown value!\n", + RC.config_file_name); + } + printf("DEBUGGING][KOGO][CHAR*]: pdsch_maxNumRepetitionCEmodeB_r13: %s - %d\n", pdsch_maxNumRepetitionCEmodeB_r13, *RRC_CONFIGURATION_REQ (msg_p).pdsch_maxNumRepetitionCEmodeB_r13[j]); + } + + + + if (config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_PUSCH_MAX_NUM_REPETITION_CE_MODE_A_R13, &pusch_maxNumRepetitionCEmodeA_r13)) { + RRC_CONFIGURATION_REQ(msg_p).pusch_maxNumRepetitionCEmodeA_r13[j] = CALLOC(1, sizeof(long)); + if (!strcmp(pusch_maxNumRepetitionCEmodeA_r13, "r8")) { + *RRC_CONFIGURATION_REQ(msg_p).pusch_maxNumRepetitionCEmodeA_r13[j] = 0; + } else if (!strcmp(pusch_maxNumRepetitionCEmodeA_r13, "r16")) { + *RRC_CONFIGURATION_REQ(msg_p).pusch_maxNumRepetitionCEmodeA_r13[j] = 1; + } else if (!strcmp(pusch_maxNumRepetitionCEmodeA_r13, "r32")) { + *RRC_CONFIGURATION_REQ(msg_p).pusch_maxNumRepetitionCEmodeA_r13[j] = 2; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, pusch_maxNumRepetitionCEmodeA_r13 unknown value!\n", + RC.config_file_name); + } + printf("DEBUGGING][KOGO][CHAR*]: pusch_maxNumRepetitionCEmodeA_r13: %s - %d\n", pusch_maxNumRepetitionCEmodeA_r13, *RRC_CONFIGURATION_REQ (msg_p).pusch_maxNumRepetitionCEmodeA_r13[j]); + } + + + + if (config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_PUSCH_MAX_NUM_REPETITION_CE_MODE_B_R13, &pusch_maxNumRepetitionCEmodeB_r13)) { + RRC_CONFIGURATION_REQ(msg_p).pusch_maxNumRepetitionCEmodeB_r13[j] = CALLOC(1, sizeof(long)); + if (!strcmp(pusch_maxNumRepetitionCEmodeB_r13, "r192")) { + *RRC_CONFIGURATION_REQ(msg_p).pusch_maxNumRepetitionCEmodeB_r13[j] = 0; + } else if (!strcmp(pusch_maxNumRepetitionCEmodeB_r13, "r256")) { + *RRC_CONFIGURATION_REQ(msg_p).pusch_maxNumRepetitionCEmodeB_r13[j] = 1; + } else if (!strcmp(pusch_maxNumRepetitionCEmodeB_r13, "r384")) { + *RRC_CONFIGURATION_REQ(msg_p).pusch_maxNumRepetitionCEmodeB_r13[j] = 2; + } else if (!strcmp(pusch_maxNumRepetitionCEmodeB_r13, "r512")) { + *RRC_CONFIGURATION_REQ(msg_p).pusch_maxNumRepetitionCEmodeB_r13[j] = 3; + } else if (!strcmp(pusch_maxNumRepetitionCEmodeB_r13, "r768")) { + *RRC_CONFIGURATION_REQ(msg_p).pusch_maxNumRepetitionCEmodeB_r13[j] = 4; + } else if (!strcmp(pusch_maxNumRepetitionCEmodeB_r13, "r1024")) { + *RRC_CONFIGURATION_REQ(msg_p).pusch_maxNumRepetitionCEmodeB_r13[j] = 5; + } else if (!strcmp(pusch_maxNumRepetitionCEmodeB_r13, "r1536")) { + *RRC_CONFIGURATION_REQ(msg_p).pusch_maxNumRepetitionCEmodeB_r13[j] = 6; + } else if (!strcmp(pusch_maxNumRepetitionCEmodeB_r13, "r2048")) { + *RRC_CONFIGURATION_REQ(msg_p).pusch_maxNumRepetitionCEmodeB_r13[j] = 7; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, pusch_maxNumRepetitionCEmodeB_r13 unknown value!\n", + RC.config_file_name); + } + printf("DEBUGGING][KOGO][CHAR*]: pusch_maxNumRepetitionCEmodeB_r13: %s - %d\n", pusch_maxNumRepetitionCEmodeB_r13, *RRC_CONFIGURATION_REQ (msg_p).pusch_maxNumRepetitionCEmodeB_r13[j]); + } + + + if (config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_PUSCH_HOPPING_OFFSET_V1310, &pusch_HoppingOffset_v1310)) { + RRC_CONFIGURATION_REQ(msg_p).pusch_HoppingOffset_v1310[j] = CALLOC(1, sizeof(long)); + *RRC_CONFIGURATION_REQ(msg_p).pusch_HoppingOffset_v1310[j] = pusch_HoppingOffset_v1310; + printf("DEBUGGING][KOGO][CHAR*]: pusch_HoppingOffset_v1310 %d\n", *RRC_CONFIGURATION_REQ (msg_p).pusch_HoppingOffset_v1310[j]); + } + + if (config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_PUCCH_NUM_REPETITION_CE_MSG4_LEVEL0, &pucch_NumRepetitionCE_Msg4_Level0_r13)) + { + RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level0_r13[j] = CALLOC(1, sizeof(long)); + ++cnt; + if (!strcmp(pucch_NumRepetitionCE_Msg4_Level0_r13, "n1")) { + *RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level0_r13[j] = 0; + } else if (!strcmp(pucch_NumRepetitionCE_Msg4_Level0_r13, "n2")) { + *RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level0_r13[j] = 1; + } else if (!strcmp(pucch_NumRepetitionCE_Msg4_Level0_r13, "n4")) { + *RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level0_r13[j] = 2; + } else if (!strcmp(pucch_NumRepetitionCE_Msg4_Level0_r13, "n8")) { + *RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level0_r13[j] = 3; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, pucch_NumRepetitionCE_Msg4_Level0_r13 unknown value!\n", + RC.config_file_name); + } + printf("DEBUGGING][KOGO][CHAR*]: pucch_NumRepetitionCE_Msg4_Level0_r13: %s - %d\n", pucch_NumRepetitionCE_Msg4_Level0_r13, *RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level0_r13[j]); + } + else + { + RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level0_r13[j] = NULL;; + } + + + if (config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_PUCCH_NUM_REPETITION_CE_MSG4_LEVEL1, &pucch_NumRepetitionCE_Msg4_Level1_r13)) + { + RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level1_r13[j] = CALLOC(1, sizeof(long)); + ++cnt; + if (!strcmp(pucch_NumRepetitionCE_Msg4_Level1_r13, "n1")) { + *RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level1_r13[j] = 0; + } else if (!strcmp(pucch_NumRepetitionCE_Msg4_Level1_r13, "n2")) { + *RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level1_r13[j] = 1; + } else if (!strcmp(pucch_NumRepetitionCE_Msg4_Level1_r13, "n4")) { + *RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level1_r13[j] = 2; + } else if (!strcmp(pucch_NumRepetitionCE_Msg4_Level1_r13, "n8")) { + *RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level1_r13[j] = 3; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, pucch_NumRepetitionCE_Msg4_Level1_r13 unknown value!\n", + RC.config_file_name); + + } + printf("DEBUGGING][KOGO][CHAR*]: pucch_NumRepetitionCE_Msg4_Level0_r13: %s - %d\n", pucch_NumRepetitionCE_Msg4_Level1_r13, *RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level1_r13[j]); + } + else + { + RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level1_r13[j] = NULL;; + } + + + if (config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_PUCCH_NUM_REPETITION_CE_MSG4_LEVEL2, &pucch_NumRepetitionCE_Msg4_Level2_r13)) + { + RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level2_r13[j] = CALLOC(1, sizeof(long)); + ++cnt; + if (!strcmp(pucch_NumRepetitionCE_Msg4_Level2_r13, "n4")) { + *RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level2_r13[j] = 0; + } else if (!strcmp(pucch_NumRepetitionCE_Msg4_Level2_r13, "n8")) { + *RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level2_r13[j] = 1; + } else if (!strcmp(pucch_NumRepetitionCE_Msg4_Level2_r13, "n16")) { + *RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level2_r13[j] = 2; + } else if (!strcmp(pucch_NumRepetitionCE_Msg4_Level2_r13, "n32")) { + *RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level2_r13[j] = 3; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, pucch_NumRepetitionCE_Msg4_Level2_r13 unknown value!\n", + RC.config_file_name); + } + printf("DEBUGGING][KOGO][CHAR*]: pucch_NumRepetitionCE_Msg4_Level2_r13: %s - %d\n", pucch_NumRepetitionCE_Msg4_Level2_r13, *RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level2_r13[j]); + } + else + { + RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level2_r13[j] = NULL; + } + + + if (config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_PUCCH_NUM_REPETITION_CE_MSG4_LEVEL3, &pucch_NumRepetitionCE_Msg4_Level3_r13)) + { + RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level3_r13[j] = CALLOC(1, sizeof(long)); + ++cnt; + if (!strcmp(pucch_NumRepetitionCE_Msg4_Level3_r13, "n4")) { + *RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level3_r13[j] = 0; + } else if (!strcmp(pucch_NumRepetitionCE_Msg4_Level3_r13, "n8")) { + *RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level3_r13[j] = 1; + } else if (!strcmp(pucch_NumRepetitionCE_Msg4_Level3_r13, "n16")) { + *RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level3_r13[j] = 2; + } else if (!strcmp(pucch_NumRepetitionCE_Msg4_Level3_r13, "n32")) { + *RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level3_r13[j] = 3; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, pucch_NumRepetitionCE_Msg4_Level3_r13 unknown value!\n", + RC.config_file_name); + } + printf("DEBUGGING][KOGO][CHAR*]: pucch_NumRepetitionCE_Msg4_Level3_r13: %s - %d\n", pucch_NumRepetitionCE_Msg4_Level3_r13, *RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level3_r13[j]); + } + else + { + RRC_CONFIGURATION_REQ (msg_p).pucch_NumRepetitionCE_Msg4_Level3_r13[j] = NULL;; + } + + + rsrp_range_list = config_setting_get_member(setting_br13, ENB_CONFIG_STRING_RSRP_RANGE_LIST); + int num_rsrp_list = config_setting_length(rsrp_range_list); + RRC_CONFIGURATION_REQ (msg_p).rsrp_range_list_size[j] = num_rsrp_list; + int rsrp_range_idx; + for (rsrp_range_idx = 0; rsrp_range_idx < num_rsrp_list; ++rsrp_range_idx) + { + rsrp_range_member = config_setting_get_elem(rsrp_range_list, rsrp_range_idx); + if (!(config_setting_lookup_int(rsrp_range_member, ENB_CONFIG_STRING_RSRP_RANGE_BR, &rsrp_range_br))) + { + AssertFatal (0, + "Failed to parse eNB configuration file %s, rsrp_range %d!\n", + RC.config_file_name, nb_cc++); + } + RRC_CONFIGURATION_REQ (msg_p).rsrp_range[j][rsrp_range_idx] = rsrp_range_br; + printf("[DEBUGGING][KOGO] : rsrp range br = %d\n", rsrp_range_br); + } + + prach_parameters_ce_r13_list = config_setting_get_member(setting_br13, ENB_CONFIG_STRING_PRACH_PARAMETERS_CE_R13); + int num_prach_parameters_ce_r13 = config_setting_length(prach_parameters_ce_r13_list); + RRC_CONFIGURATION_REQ (msg_p).prach_parameters_list_size[j] = num_prach_parameters_ce_r13; + int prach_parameters_index; + for (prach_parameters_index = 0; prach_parameters_index < num_prach_parameters_ce_r13; ++prach_parameters_index) + { + prach_parameters_ce_r13 = config_setting_get_elem(prach_parameters_ce_r13_list, prach_parameters_index); + if (! (config_setting_lookup_int(prach_parameters_ce_r13, ENB_CONFIG_STRING_PRACH_CONFIG_INDEX_BR, &prach_config_index_br) + && config_setting_lookup_int(prach_parameters_ce_r13, ENB_CONFIG_STRING_PRACH_FREQ_OFFSET_BR, &prach_freq_offset_br) + && config_setting_lookup_string(prach_parameters_ce_r13, ENB_CONFIG_STRING_NUM_REPETITION_PREAMBLE_ATTEMPT_R13, &numRepetitionPerPreambleAttempt_r13) + && config_setting_lookup_string(prach_parameters_ce_r13, ENB_CONFIG_STRING_MPDCCH_NUM_REPETITION_RA_R13, &mpdcch_NumRepetition_RA_r13) + && config_setting_lookup_string(prach_parameters_ce_r13, ENB_CONFIG_STRING_PRACH_HOPPING_CONFIG_R13, &prach_HoppingConfig_r13) ) + ) + { + AssertFatal (0, + "Failed to parse eNB configuration file %s, prach_parameters_ce_r13_list %d!\n", + RC.config_file_name, nb_cc++); + } + + printf("[DEBUGGING][KOGO] : prach hopping config = %d\n", prach_HoppingConfig_r13); + + RRC_CONFIGURATION_REQ (msg_p).prach_config_index[j][prach_parameters_index] = prach_config_index_br; + RRC_CONFIGURATION_REQ (msg_p).prach_freq_offset[j][prach_parameters_index] = prach_freq_offset_br; + RRC_CONFIGURATION_REQ (msg_p).prach_StartingSubframe_r13[j][prach_parameters_index] = prach_StartingSubframe_r13; + + if (config_setting_lookup_string(prach_parameters_ce_r13, ENB_CONFIG_STRING_MAX_NUM_PREAMBLE_ATTEMPT_CE_R13, &maxNumPreambleAttemptCE_r13)) + { + RRC_CONFIGURATION_REQ (msg_p).maxNumPreambleAttemptCE_r13[j][prach_parameters_index] = calloc(1, sizeof(long)); + if (!strcmp(maxNumPreambleAttemptCE_r13, "n3")) { + *RRC_CONFIGURATION_REQ (msg_p).maxNumPreambleAttemptCE_r13[j][prach_parameters_index] = 0; + } else if (!strcmp(maxNumPreambleAttemptCE_r13, "n4")) { + *RRC_CONFIGURATION_REQ (msg_p).maxNumPreambleAttemptCE_r13[j][prach_parameters_index] = 1; + } else if (!strcmp(maxNumPreambleAttemptCE_r13, "n5")) { + *RRC_CONFIGURATION_REQ (msg_p).maxNumPreambleAttemptCE_r13[j][prach_parameters_index] = 2; + } else if (!strcmp(maxNumPreambleAttemptCE_r13, "n6")) { + *RRC_CONFIGURATION_REQ (msg_p).maxNumPreambleAttemptCE_r13[j][prach_parameters_index] = 3; + } else if (!strcmp(maxNumPreambleAttemptCE_r13, "n7")) { + *RRC_CONFIGURATION_REQ (msg_p).maxNumPreambleAttemptCE_r13[j][prach_parameters_index] = 4; + } else if (!strcmp(maxNumPreambleAttemptCE_r13, "n8")) { + *RRC_CONFIGURATION_REQ (msg_p).maxNumPreambleAttemptCE_r13[j][prach_parameters_index] = 5; + } else if (!strcmp(maxNumPreambleAttemptCE_r13, "n10")) { + *RRC_CONFIGURATION_REQ (msg_p).maxNumPreambleAttemptCE_r13[j][prach_parameters_index] = 6; + } else if (!strcmp(maxNumPreambleAttemptCE_r13, "spare1")) { + *RRC_CONFIGURATION_REQ (msg_p).maxNumPreambleAttemptCE_r13[j][prach_parameters_index] = 7; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, maxNumPreambleAttemptCE_r13 unknown value !! %d!\n", + RC.config_file_name, nb_cc++); + } + printf("[DEBUGGING][KOGO][CHAR*]: maxNumPreambleAttemptCE_r13: %s - %d\n", maxNumPreambleAttemptCE_r13, *RRC_CONFIGURATION_REQ (msg_p).maxNumPreambleAttemptCE_r13[j][prach_parameters_index]); + } + else + { + RRC_CONFIGURATION_REQ (msg_p).maxNumPreambleAttemptCE_r13[j][prach_parameters_index] = NULL; + } + + + + if (!strcmp(numRepetitionPerPreambleAttempt_r13, "n1")) { + RRC_CONFIGURATION_REQ (msg_p).numRepetitionPerPreambleAttempt_r13[j][prach_parameters_index] = 0; + } else if (!strcmp(numRepetitionPerPreambleAttempt_r13, "n2")) { + RRC_CONFIGURATION_REQ (msg_p).numRepetitionPerPreambleAttempt_r13[j][prach_parameters_index] = 1; + } else if (!strcmp(numRepetitionPerPreambleAttempt_r13, "n4")) { + RRC_CONFIGURATION_REQ (msg_p).numRepetitionPerPreambleAttempt_r13[j][prach_parameters_index] = 2; + } else if (!strcmp(numRepetitionPerPreambleAttempt_r13, "n8")) { + RRC_CONFIGURATION_REQ (msg_p).numRepetitionPerPreambleAttempt_r13[j][prach_parameters_index] = 3; + } else if (!strcmp(numRepetitionPerPreambleAttempt_r13, "n16")) { + RRC_CONFIGURATION_REQ (msg_p).numRepetitionPerPreambleAttempt_r13[j][prach_parameters_index] = 4; + } else if (!strcmp(numRepetitionPerPreambleAttempt_r13, "n32")) { + RRC_CONFIGURATION_REQ (msg_p).numRepetitionPerPreambleAttempt_r13[j][prach_parameters_index] = 5; + } else if (!strcmp(numRepetitionPerPreambleAttempt_r13, "n64")) { + RRC_CONFIGURATION_REQ (msg_p).numRepetitionPerPreambleAttempt_r13[j][prach_parameters_index] = 6; + } else if (!strcmp(numRepetitionPerPreambleAttempt_r13, "n128")) { + RRC_CONFIGURATION_REQ (msg_p).numRepetitionPerPreambleAttempt_r13[j][prach_parameters_index] = 7; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, numRepetitionPerPreambleAttempt_r13 unknown value !! %d!\n", + RC.config_file_name, nb_cc++); + } + printf("[DEBUGGING][KOGO][CHAR*]: numRepetitionPerPreambleAttempt_r13: %s - %d\n", numRepetitionPerPreambleAttempt_r13, RRC_CONFIGURATION_REQ (msg_p).numRepetitionPerPreambleAttempt_r13[j][prach_parameters_index]); + + + if (!strcmp(mpdcch_NumRepetition_RA_r13, "r1")) { + RRC_CONFIGURATION_REQ (msg_p).mpdcch_NumRepetition_RA_r13[j][prach_parameters_index] = 0; + } else if (!strcmp(mpdcch_NumRepetition_RA_r13, "r2")) { + RRC_CONFIGURATION_REQ (msg_p).mpdcch_NumRepetition_RA_r13[j][prach_parameters_index] = 1; + } else if (!strcmp(mpdcch_NumRepetition_RA_r13, "r4")) { + RRC_CONFIGURATION_REQ (msg_p).mpdcch_NumRepetition_RA_r13[j][prach_parameters_index] = 2; + } else if (!strcmp(mpdcch_NumRepetition_RA_r13, "r8")) { + RRC_CONFIGURATION_REQ (msg_p).mpdcch_NumRepetition_RA_r13[j][prach_parameters_index] = 3; + } else if (!strcmp(mpdcch_NumRepetition_RA_r13, "r16")) { + RRC_CONFIGURATION_REQ (msg_p).mpdcch_NumRepetition_RA_r13[j][prach_parameters_index] = 4; + } else if (!strcmp(mpdcch_NumRepetition_RA_r13, "r32")) { + RRC_CONFIGURATION_REQ (msg_p).mpdcch_NumRepetition_RA_r13[j][prach_parameters_index] = 5; + } else if (!strcmp(mpdcch_NumRepetition_RA_r13, "r64")) { + RRC_CONFIGURATION_REQ (msg_p).mpdcch_NumRepetition_RA_r13[j][prach_parameters_index] = 6; + } else if (!strcmp(mpdcch_NumRepetition_RA_r13, "r128")) { + RRC_CONFIGURATION_REQ (msg_p).mpdcch_NumRepetition_RA_r13[j][prach_parameters_index] = 7; + } else if (!strcmp(mpdcch_NumRepetition_RA_r13, "r256")) { + RRC_CONFIGURATION_REQ (msg_p).mpdcch_NumRepetition_RA_r13[j][prach_parameters_index] = 8; + } else if (!strcmp(mpdcch_NumRepetition_RA_r13, "r512")) { + RRC_CONFIGURATION_REQ (msg_p).mpdcch_NumRepetition_RA_r13[j][prach_parameters_index] = 9; + } else if (!strcmp(mpdcch_NumRepetition_RA_r13, "r1024")) { + RRC_CONFIGURATION_REQ (msg_p).mpdcch_NumRepetition_RA_r13[j][prach_parameters_index] = 10; + } else if (!strcmp(mpdcch_NumRepetition_RA_r13, "r2048")) { + RRC_CONFIGURATION_REQ (msg_p).mpdcch_NumRepetition_RA_r13[j][prach_parameters_index] = 11; + } else if (!strcmp(mpdcch_NumRepetition_RA_r13, "spare4")) { + RRC_CONFIGURATION_REQ (msg_p).mpdcch_NumRepetition_RA_r13[j][prach_parameters_index] = 12; + } else if (!strcmp(mpdcch_NumRepetition_RA_r13, "spare3")) { + RRC_CONFIGURATION_REQ (msg_p).mpdcch_NumRepetition_RA_r13[j][prach_parameters_index] = 13; + } else if (!strcmp(mpdcch_NumRepetition_RA_r13, "spare2")) { + RRC_CONFIGURATION_REQ (msg_p).mpdcch_NumRepetition_RA_r13[j][prach_parameters_index] = 14; + } else if (!strcmp(mpdcch_NumRepetition_RA_r13, "spare1")) { + RRC_CONFIGURATION_REQ (msg_p).mpdcch_NumRepetition_RA_r13[j][prach_parameters_index] = 15; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, mpdcch_NumRepetition_RA_r13 unknown value !! %d!\n", + RC.config_file_name, nb_cc++); + } + + printf("[DEBUGGING][KOGO][CHAR*]: mpdcch_NumRepetition_RA_r13: %s - %d\n", mpdcch_NumRepetition_RA_r13, RRC_CONFIGURATION_REQ (msg_p).mpdcch_NumRepetition_RA_r13[j][prach_parameters_index]); + + if (!strcmp(prach_HoppingConfig_r13, "off")) { + RRC_CONFIGURATION_REQ (msg_p).prach_HoppingConfig_r13[j][prach_parameters_index] = 1; + } else if (!strcmp(prach_HoppingConfig_r13, "on")) { + RRC_CONFIGURATION_REQ (msg_p).prach_HoppingConfig_r13[j][prach_parameters_index] = 0; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, prach_HoppingConfig_r13 unknown value !! %d!\n", + RC.config_file_name, nb_cc++); + } + + printf("[DEBUGGING][KOGO][CHAR*]: prach_HoppingConfig_r13: %s - %d\n", prach_HoppingConfig_r13, RRC_CONFIGURATION_REQ (msg_p).prach_HoppingConfig_r13[j][prach_parameters_index]); + + if (config_setting_lookup_int(prach_parameters_ce_r13, ENB_CONFIG_STRING_PRACH_STARTING_SUBFRAME_R13, &prach_StartingSubframe_r13)) + { + RRC_CONFIGURATION_REQ (msg_p).prach_StartingSubframe_r13[j][prach_parameters_index] = calloc(1, sizeof(long)); + *RRC_CONFIGURATION_REQ (msg_p).prach_StartingSubframe_r13[j][prach_parameters_index] = prach_StartingSubframe_r13; + } + else + { + RRC_CONFIGURATION_REQ (msg_p).prach_StartingSubframe_r13[j][prach_parameters_index] = NULL; + } + + + max_available_narrow_band_list = config_setting_get_member(prach_parameters_ce_r13, ENB_CONFIG_STRING_MAX_AVAILABLE_NARROW_BAND); + int num_available_narrow_bands = config_setting_length(max_available_narrow_band_list); + RRC_CONFIGURATION_REQ (msg_p).max_available_narrow_band_size[j][prach_parameters_index] = num_available_narrow_bands; + int narrow_band_index; + for (narrow_band_index = 0; narrow_band_index < num_available_narrow_bands; narrow_band_index++) + { + max_available_narrow_band = config_setting_get_elem(max_available_narrow_band_list, narrow_band_index); + RRC_CONFIGURATION_REQ (msg_p).max_available_narrow_band[j][prach_parameters_index][narrow_band_index] = config_setting_get_int(max_available_narrow_band); + } + + } + + + n1_pucch_AN_info_r13_list = config_setting_get_member(setting_br13, ENB_CONFIG_STRING_N1_PUCCH_AN_INFO_LIST); + + int num_pucch_an_info = config_setting_length(n1_pucch_AN_info_r13_list); + AssertFatal(cnt == num_pucch_an_info, "Num Repetition Count should be equal to pucch info count !!!"); + RRC_CONFIGURATION_REQ (msg_p).pucch_info_value_size[j] = num_pucch_an_info; + int pucch_info_idx; + for (pucch_info_idx = 0; pucch_info_idx < num_pucch_an_info; ++pucch_info_idx) + { + n1_pucch_AN_info_r13 = config_setting_get_elem(n1_pucch_AN_info_r13_list, pucch_info_idx); + if (! (config_setting_lookup_int(n1_pucch_AN_info_r13, ENB_CONFIG_STRING_PUCCH_INFO_VALUE, &pucch_info_value)) ) + { + AssertFatal (0, + "Failed to parse eNB configuration file %s, n1_pucch_AN_info_list_r13_list %d!\n", + RC.config_file_name, nb_cc++); + } + + RRC_CONFIGURATION_REQ (msg_p).pucch_info_value[j][pucch_info_idx] = pucch_info_value; + } + + puts("---------------------------------------------------------------------------------------------------"); + + setting_freq_hoppingParameters_r13 = config_setting_get_member(setting_br13, ENB_CONFIG_STRING_FREQ_HOPPING_PARAMETERS_R13); + if (setting_freq_hoppingParameters_r13 != NULL) + { + RRC_CONFIGURATION_REQ(msg_p).sib2_freq_hoppingParameters_r13_exists[j] = TRUE; + if (config_setting_lookup_string(setting_freq_hoppingParameters_r13, ENB_CONFIG_STRING_MPDCCH_PDSCH_HOPPING_NB_R13, &sib2_mpdcch_pdsch_hoppingNB_r13)) + { + + RRC_CONFIGURATION_REQ(msg_p).sib2_mpdcch_pdsch_hoppingNB_r13[j] = CALLOC(1, sizeof(long)); + if (!strcmp(sib2_mpdcch_pdsch_hoppingNB_r13, "nb2")) { + *RRC_CONFIGURATION_REQ(msg_p).sib2_mpdcch_pdsch_hoppingNB_r13[j] = 0; + } else if (!strcmp(sib2_mpdcch_pdsch_hoppingNB_r13, "nb4")) { + *RRC_CONFIGURATION_REQ(msg_p).sib2_mpdcch_pdsch_hoppingNB_r13[j] = 1; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, sib2_mpdcch_pdsch_hoppingNB_r13 unknown value !!\n", + RC.config_file_name); + } + printf("[DEBUGGING][KOGO][CHAR*]: sib2_mpdcch_pdsch_hoppingNB_r13: %s - %d\n", sib2_mpdcch_pdsch_hoppingNB_r13, *RRC_CONFIGURATION_REQ (msg_p).sib2_mpdcch_pdsch_hoppingNB_r13[j]); + } + else + { + RRC_CONFIGURATION_REQ(msg_p).sib2_mpdcch_pdsch_hoppingNB_r13[j] = NULL; + } + + + if (config_setting_lookup_string(setting_freq_hoppingParameters_r13, ENB_CONFIG_STRING_INTERVAL_DL_HOPPING_CONFIG_COMMON_MODE_A_R13, &sib2_interval_DLHoppingConfigCommonModeA_r13)) + { + + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeA_r13[j] = CALLOC(1, sizeof(long)); + config_setting_lookup_string(setting_freq_hoppingParameters_r13, ENB_CONFIG_STRING_INTERVAL_DL_HOPPING_CONFIG_COMMON_MODE_A_R13_VAL, &sib2_interval_DLHoppingConfigCommonModeA_r13_val); + if (!strcmp(sib2_interval_DLHoppingConfigCommonModeA_r13, "FDD")) { + *RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeA_r13[j] = 0; + if (!strcmp(sib2_interval_DLHoppingConfigCommonModeA_r13_val, "int1")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeA_r13_val[j] = 0; + } else if (!strcmp(sib2_interval_DLHoppingConfigCommonModeA_r13_val, "int2")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeA_r13_val[j] = 1; + } else if (!strcmp(sib2_interval_DLHoppingConfigCommonModeA_r13_val, "int4")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeA_r13_val[j] = 2; + } else if (!strcmp(sib2_interval_DLHoppingConfigCommonModeA_r13_val, "int8")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeA_r13_val[j] = 3; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, sib2_interval_DLHoppingConfigCommonModeA_r13_val unknown value !!\n", + RC.config_file_name); + } + } else if (!strcmp(sib2_interval_DLHoppingConfigCommonModeA_r13, "TDD")) { + *RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeA_r13[j] = 1; + if (!strcmp(sib2_interval_DLHoppingConfigCommonModeA_r13_val, "int1")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeA_r13_val[j] = 0; + } else if (!strcmp(sib2_interval_DLHoppingConfigCommonModeA_r13_val, "int5")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeA_r13_val[j] = 1; + } else if (!strcmp(sib2_interval_DLHoppingConfigCommonModeA_r13_val, "int10")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeA_r13_val[j] = 2; + } else if (!strcmp(sib2_interval_DLHoppingConfigCommonModeA_r13_val, "int20")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeA_r13_val[j] = 3; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, sib2_interval_DLHoppingConfigCommonModeA_r13_val unknown value !!\n", + RC.config_file_name); + } + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, sib2_interval_DLHoppingConfigCommonModeA_r13 unknown value !!\n", + RC.config_file_name); + } + printf("[DEBUGGING][KOGO][CHAR*]: sib2_interval_DLHoppingConfigCommonModeA_r13: %s - %d\n", sib2_interval_DLHoppingConfigCommonModeA_r13, *RRC_CONFIGURATION_REQ (msg_p).sib2_interval_DLHoppingConfigCommonModeA_r13[j]); + printf("[DEBUGGING][KOGO][CHAR*]: sib2_interval_DLHoppingConfigCommonModeA_r13_val: %s - %d\n", sib2_interval_DLHoppingConfigCommonModeA_r13_val, RRC_CONFIGURATION_REQ (msg_p).sib2_interval_DLHoppingConfigCommonModeA_r13_val[j]); + + } + else + { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeA_r13[j] = NULL; + } + + + if (config_setting_lookup_string(setting_freq_hoppingParameters_r13, ENB_CONFIG_STRING_INTERVAL_DL_HOPPING_CONFIG_COMMON_MODE_B_R13, &sib2_interval_DLHoppingConfigCommonModeB_r13)) + { + + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeB_r13[j] = CALLOC(1, sizeof(long)); + config_setting_lookup_string(setting_freq_hoppingParameters_r13, ENB_CONFIG_STRING_INTERVAL_DL_HOPPING_CONFIG_COMMON_MODE_B_R13_VAL, &sib2_interval_DLHoppingConfigCommonModeB_r13_val); + if (!strcmp(sib2_interval_DLHoppingConfigCommonModeB_r13, "FDD")) { + *RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeB_r13[j] = 0; + if (!strcmp(sib2_interval_DLHoppingConfigCommonModeB_r13_val, "int2")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeB_r13_val[j] = 0; + } else if (!strcmp(sib2_interval_DLHoppingConfigCommonModeB_r13_val, "int4")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeB_r13_val[j] = 1; + } else if (!strcmp(sib2_interval_DLHoppingConfigCommonModeB_r13_val, "int8")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeB_r13_val[j] = 2; + } else if (!strcmp(sib2_interval_DLHoppingConfigCommonModeB_r13_val, "int16")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeB_r13_val[j] = 3; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, sib2_interval_DLHoppingConfigCommonModeB_r13_val unknown value !!\n", + RC.config_file_name); + } + } else if (!strcmp(sib2_interval_DLHoppingConfigCommonModeB_r13, "TDD")) { + *RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeB_r13[j] = 1; + if (!strcmp(sib2_interval_DLHoppingConfigCommonModeB_r13_val, "int5")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeB_r13_val[j] = 0; + } else if (!strcmp(sib2_interval_DLHoppingConfigCommonModeB_r13_val, "int10")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeB_r13_val[j] = 1; + } else if (!strcmp(sib2_interval_DLHoppingConfigCommonModeB_r13_val, "int20")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeB_r13_val[j] = 2; + } else if (!strcmp(sib2_interval_DLHoppingConfigCommonModeB_r13_val, "int40")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeB_r13_val[j] = 3; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, sib2_interval_DLHoppingConfigCommonModeB_r13_val unknown value !!\n", + RC.config_file_name); + } + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, sib2_interval_DLHoppingConfigCommonModeB_r13 unknown value !!\n", + RC.config_file_name); + } + printf("[DEBUGGING][KOGO][CHAR*]: sib2_interval_DLHoppingConfigCommonModeB_r13: %s - %d\n", sib2_interval_DLHoppingConfigCommonModeB_r13, *RRC_CONFIGURATION_REQ (msg_p).sib2_interval_DLHoppingConfigCommonModeB_r13[j]); + printf("[DEBUGGING][KOGO][CHAR*]: sib2_interval_DLHoppingConfigCommonModeB_r13_val: %s - %d\n", sib2_interval_DLHoppingConfigCommonModeB_r13_val, RRC_CONFIGURATION_REQ (msg_p).sib2_interval_DLHoppingConfigCommonModeB_r13_val[j]); + } + else + { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_DLHoppingConfigCommonModeB_r13[j] = NULL; + } + + + + if (config_setting_lookup_string(setting_freq_hoppingParameters_r13, ENB_CONFIG_STRING_INTERVAL_UL_HOPPING_CONFIG_COMMON_MODE_A_R13, &sib2_interval_ULHoppingConfigCommonModeA_r13)) + { + + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13[j] = CALLOC(1, sizeof(long)); + config_setting_lookup_string(setting_freq_hoppingParameters_r13, ENB_CONFIG_STRING_INTERVAL_UL_HOPPING_CONFIG_COMMON_MODE_A_R13_VAL, &sib2_interval_ULHoppingConfigCommonModeA_r13_val); + if (!strcmp(sib2_interval_ULHoppingConfigCommonModeA_r13, "FDD")) { + *RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13[j] = 0; + if (!strcmp(sib2_interval_ULHoppingConfigCommonModeA_r13_val, "int1")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13_val[j] = 0; + } else if (!strcmp(sib2_interval_ULHoppingConfigCommonModeA_r13_val, "int2")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13_val[j] = 1; + } else if (!strcmp(sib2_interval_ULHoppingConfigCommonModeA_r13_val, "int4")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13_val[j] = 2; + } else if (!strcmp(sib2_interval_ULHoppingConfigCommonModeA_r13_val, "int8")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13_val[j] = 3; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, sib2_interval_ULHoppingConfigCommonModeA_r13_val unknown value !!\n", + RC.config_file_name); + } + } else if (!strcmp(sib2_interval_ULHoppingConfigCommonModeA_r13, "TDD")) { + *RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13[j] = 1; + if (!strcmp(sib2_interval_ULHoppingConfigCommonModeA_r13_val, "int1")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13_val[j] = 0; + } else if (!strcmp(sib2_interval_ULHoppingConfigCommonModeA_r13_val, "int5")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13_val[j] = 1; + } else if (!strcmp(sib2_interval_ULHoppingConfigCommonModeA_r13_val, "int10")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13_val[j] = 2; + } else if (!strcmp(sib2_interval_ULHoppingConfigCommonModeA_r13_val, "int20")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13_val[j] = 3; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, sib2_interval_ULHoppingConfigCommonModeA_r13_val unknown value !!\n", + RC.config_file_name); + } + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, sib2_interval_ULHoppingConfigCommonModeA_r13 unknown value !!\n", + RC.config_file_name); + } + + printf("[DEBUGGING][KOGO][CHAR*]: sib2_interval_ULHoppingConfigCommonModeA_r13: %s - %d\n", sib2_interval_ULHoppingConfigCommonModeA_r13, *RRC_CONFIGURATION_REQ (msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13[j]); + } + else + { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13[j] = NULL; + } + printf("[DEBUGGING][KOGO][CHAR*]: sib2_interval_ULHoppingConfigCommonModeA_r13_val: %s - %d\n", sib2_interval_ULHoppingConfigCommonModeA_r13_val, RRC_CONFIGURATION_REQ (msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13_val[j]); + + + + if (config_setting_lookup_string(setting_freq_hoppingParameters_r13, ENB_CONFIG_STRING_INTERVAL_UL_HOPPING_CONFIG_COMMON_MODE_B_R13, &sib2_interval_ULHoppingConfigCommonModeB_r13)) + { + + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeB_r13[j] = CALLOC(1, sizeof(long)); + config_setting_lookup_string(setting_freq_hoppingParameters_r13, ENB_CONFIG_STRING_INTERVAL_UL_HOPPING_CONFIG_COMMON_MODE_B_R13_VAL, &sib2_interval_ULHoppingConfigCommonModeB_r13_val); + if (!strcmp(sib2_interval_ULHoppingConfigCommonModeB_r13, "FDD")) { + *RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeB_r13[j] = 0; + if (!strcmp(sib2_interval_ULHoppingConfigCommonModeB_r13_val, "int2")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeB_r13_val[j] = 0; + } else if (!strcmp(sib2_interval_ULHoppingConfigCommonModeB_r13_val, "int4")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeB_r13_val[j] = 1; + } else if (!strcmp(sib2_interval_ULHoppingConfigCommonModeB_r13_val, "int8")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeB_r13_val[j] = 2; + } else if (!strcmp(sib2_interval_ULHoppingConfigCommonModeB_r13_val, "int16")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeB_r13_val[j] = 3; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, sib2_interval_ULHoppingConfigCommonModeB_r13_val unknown value !!\n", + RC.config_file_name); + } + } else if (!strcmp(sib2_interval_ULHoppingConfigCommonModeA_r13, "TDD")) { + *RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeA_r13[j] = 1; + if (!strcmp(sib2_interval_ULHoppingConfigCommonModeB_r13_val, "int5")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeB_r13_val[j] = 0; + } else if (!strcmp(sib2_interval_ULHoppingConfigCommonModeB_r13_val, "int10")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeB_r13_val[j] = 1; + } else if (!strcmp(sib2_interval_ULHoppingConfigCommonModeB_r13_val, "int20")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeB_r13_val[j] = 2; + } else if (!strcmp(sib2_interval_ULHoppingConfigCommonModeB_r13_val, "int40")) { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeB_r13_val[j] = 3; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, sib2_interval_ULHoppingConfigCommonModeB_r13_val unknown value !!\n", + RC.config_file_name); + } + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, sib2_interval_ULHoppingConfigCommonModeA_r13 unknown value !!\n", + RC.config_file_name); + } + printf("[DEBUGGING][KOGO][CHAR*]: sib2_interval_ULHoppingConfigCommonModeB_r13: %s - %d\n", sib2_interval_ULHoppingConfigCommonModeB_r13, *RRC_CONFIGURATION_REQ (msg_p).sib2_interval_ULHoppingConfigCommonModeB_r13[j]); + } + else + { + RRC_CONFIGURATION_REQ(msg_p).sib2_interval_ULHoppingConfigCommonModeB_r13[j] = NULL; + } + printf("[DEBUGGING][KOGO][CHAR*]: sib2_interval_ULHoppingConfigCommonModeB_r13_val: %s - %d\n", sib2_interval_ULHoppingConfigCommonModeB_r13_val, RRC_CONFIGURATION_REQ (msg_p).sib2_interval_ULHoppingConfigCommonModeB_r13_val[j]); + + + + + if (config_setting_lookup_int(setting_freq_hoppingParameters_r13, ENB_CONFIG_STRING_MPDCCH_PDSCH_HOPPING_OFFSET_R13, &sib2_mpdcch_pdsch_hoppingOffset_r13)) + { + + RRC_CONFIGURATION_REQ(msg_p).sib2_mpdcch_pdsch_hoppingOffset_r13[j] = CALLOC(1, sizeof(long)); + *RRC_CONFIGURATION_REQ(msg_p).sib2_mpdcch_pdsch_hoppingOffset_r13[j] = sib2_mpdcch_pdsch_hoppingOffset_r13; + } + else + { + RRC_CONFIGURATION_REQ(msg_p).sib2_mpdcch_pdsch_hoppingOffset_r13[j] = NULL; + } + + + } + else + { + RRC_CONFIGURATION_REQ(msg_p).sib2_freq_hoppingParameters_r13_exists[j] = FALSE; + } + + + // Rel8 RadioResourceConfigCommon Parameters + if (!(config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_FRAME_TYPE, &frame_type) + + && config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_PRACH_ROOT, &prach_root) + && config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_PRACH_CONFIG_INDEX, &prach_config_index) + && config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_PRACH_HIGH_SPEED, &prach_high_speed) + && config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_PRACH_ZERO_CORRELATION, &prach_zero_correlation) + && config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_PRACH_FREQ_OFFSET, &prach_freq_offset) + && config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_PUCCH_DELTA_SHIFT, &pucch_delta_shift) + && config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_PUCCH_NRB_CQI, &pucch_nRB_CQI) + && config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_PUCCH_NCS_AN, &pucch_nCS_AN) + && config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_PDSCH_RS_EPRE, &pdsch_referenceSignalPower) + && config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_PDSCH_PB, &pdsch_p_b) + && config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_PUSCH_N_SB, &pusch_n_SB) + && config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_PUSCH_HOPPINGMODE, &pusch_hoppingMode) + && config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_PUSCH_HOPPINGOFFSET, &pusch_hoppingOffset) + && config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_PUSCH_ENABLE64QAM, &pusch_enable64QAM) + && config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_PUSCH_GROUP_HOPPING_EN, &pusch_groupHoppingEnabled) + && config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_PUSCH_GROUP_ASSIGNMENT, &pusch_groupAssignment) + && config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_PUSCH_SEQUENCE_HOPPING_EN, &pusch_sequenceHoppingEnabled) + && config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_PUSCH_NDMRS1, &pusch_nDMRS1) + && config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_PHICH_DURATION, &phich_duration) + && config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_PHICH_RESOURCE, &phich_resource) + && config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_SRS_ENABLE, &srs_enable) + && config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_PUSCH_PO_NOMINAL, &pusch_p0_Nominal) + && config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_PUSCH_ALPHA, &pusch_alpha) + && config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_PUCCH_PO_NOMINAL, &pucch_p0_Nominal) + && config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_MSG3_DELTA_PREAMBLE, &msg3_delta_Preamble) + && config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_PUCCH_DELTAF_FORMAT1, &pucch_deltaF_Format1) + && config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_PUCCH_DELTAF_FORMAT1b, &pucch_deltaF_Format1b) + && config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_PUCCH_DELTAF_FORMAT2, &pucch_deltaF_Format2) + && config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_PUCCH_DELTAF_FORMAT2A, &pucch_deltaF_Format2a) + && config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_PUCCH_DELTAF_FORMAT2B, &pucch_deltaF_Format2b) + && config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_RACH_NUM_RA_PREAMBLES, &rach_numberOfRA_Preambles) + && config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_RACH_PREAMBLESGROUPACONFIG, &rach_preamblesGroupAConfig) + && config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_RACH_POWERRAMPINGSTEP, &rach_powerRampingStep) + && config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_RACH_PREAMBLEINITIALRECEIVEDTARGETPOWER, &rach_preambleInitialReceivedTargetPower) + && config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_RACH_PREAMBLETRANSMAX, &rach_preambleTransMax) + && config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_RACH_RARESPONSEWINDOWSIZE, &rach_raResponseWindowSize) + && config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_RACH_MACCONTENTIONRESOLUTIONTIMER, &rach_macContentionResolutionTimer) + && config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_RACH_MAXHARQMSG3TX, &rach_maxHARQ_Msg3Tx) + && config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_PCCH_DEFAULT_PAGING_CYCLE, &pcch_defaultPagingCycle) + && config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_PCCH_NB, &pcch_nB) + && config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_BCCH_MODIFICATIONPERIODCOEFF, &bcch_modificationPeriodCoeff) + && config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_UETIMERS_T300, &ue_TimersAndConstants_t300) + && config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_UETIMERS_T301, &ue_TimersAndConstants_t301) + && config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_UETIMERS_T310, &ue_TimersAndConstants_t310) + && config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_UETIMERS_T311, &ue_TimersAndConstants_t311) + && config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_UETIMERS_N310, &ue_TimersAndConstants_n310) + && config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_UETIMERS_N311, &ue_TimersAndConstants_n311) + && config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_UE_TRANSMISSION_MODE, &ue_TransmissionMode) + )) { + AssertFatal (0, + "Failed to parse eNB configuration file %s, Component Carrier %d!\n", + RC.config_file_name, nb_cc++); + continue; // FIXME this prevents segfaults below, not sure what happens after function exit + } + + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].prach_root = prach_root; + + if ((prach_root <0) || (prach_root > 1023)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for prach_root choice: 0..1023 !\n", + RC.config_file_name, i, prach_root); + + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].prach_config_index = prach_config_index; + + if ((prach_config_index <0) || (prach_config_index > 63)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for prach_config_index choice: 0..1023 !\n", + RC.config_file_name, i, prach_config_index); + + if (!prach_high_speed) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d define %s: ENABLE,DISABLE!\n", + RC.config_file_name, i, ENB_CONFIG_STRING_PRACH_HIGH_SPEED); + else if (strcmp(prach_high_speed, "ENABLE") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].prach_high_speed = TRUE; + } + else if (strcmp(prach_high_speed, "DISABLE") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].prach_high_speed = FALSE; + } + else + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for prach_config choice: ENABLE,DISABLE !\n", + RC.config_file_name, i, prach_high_speed); + + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].prach_zero_correlation =prach_zero_correlation; + + if ((prach_zero_correlation <0) || (prach_zero_correlation > 15)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for prach_zero_correlation choice: 0..15!\n", + RC.config_file_name, i, prach_zero_correlation); + + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].prach_freq_offset = prach_freq_offset; + + if ((prach_freq_offset <0) || (prach_freq_offset > 94)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for prach_freq_offset choice: 0..94!\n", + RC.config_file_name, i, prach_freq_offset); + + + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].pucch_delta_shift = pucch_delta_shift-1; + + if ((pucch_delta_shift <1) || (pucch_delta_shift > 3)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pucch_delta_shift choice: 1..3!\n", + RC.config_file_name, i, pucch_delta_shift); + + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].pucch_nRB_CQI = pucch_nRB_CQI; + + if ((pucch_nRB_CQI <0) || (pucch_nRB_CQI > 98)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pucch_nRB_CQI choice: 0..98!\n", + RC.config_file_name, i, pucch_nRB_CQI); + + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].pucch_nCS_AN = pucch_nCS_AN; + + if ((pucch_nCS_AN <0) || (pucch_nCS_AN > 7)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pucch_nCS_AN choice: 0..7!\n", + RC.config_file_name, i, pucch_nCS_AN); + + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].pdsch_referenceSignalPower = pdsch_referenceSignalPower; + + if ((pdsch_referenceSignalPower <-60) || (pdsch_referenceSignalPower > 50)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pdsch_referenceSignalPower choice:-60..50!\n", + RC.config_file_name, i, pdsch_referenceSignalPower); + + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].pdsch_p_b = pdsch_p_b; + + if ((pdsch_p_b <0) || (pdsch_p_b > 3)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pdsch_p_b choice: 0..3!\n", + RC.config_file_name, i, pdsch_p_b); + + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].pusch_n_SB = pusch_n_SB; + + if ((pusch_n_SB <1) || (pusch_n_SB > 4)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pusch_n_SB choice: 1..4!\n", + RC.config_file_name, i, pusch_n_SB); + + if (!pusch_hoppingMode) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d define %s: interSubframe,intraAndInterSubframe!\n", + RC.config_file_name, i, ENB_CONFIG_STRING_PUSCH_HOPPINGMODE); + else if (strcmp(pusch_hoppingMode, "interSubFrame") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pusch_hoppingMode = PUSCH_ConfigCommon__pusch_ConfigBasic__hoppingMode_interSubFrame; + } + else if (strcmp(pusch_hoppingMode, "intraAndInterSubFrame") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pusch_hoppingMode = PUSCH_ConfigCommon__pusch_ConfigBasic__hoppingMode_intraAndInterSubFrame; + } + else + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pusch_hoppingMode choice: interSubframe,intraAndInterSubframe!\n", + RC.config_file_name, i, pusch_hoppingMode); + + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].pusch_hoppingOffset = pusch_hoppingOffset; + + if ((pusch_hoppingOffset<0) || (pusch_hoppingOffset>98)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pusch_hoppingOffset choice: 0..98!\n", + RC.config_file_name, i, pusch_hoppingMode); + + if (!pusch_enable64QAM) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d define %s: ENABLE,DISABLE!\n", + RC.config_file_name, i, ENB_CONFIG_STRING_PUSCH_ENABLE64QAM); + else if (strcmp(pusch_enable64QAM, "ENABLE") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pusch_enable64QAM = TRUE; + } + else if (strcmp(pusch_enable64QAM, "DISABLE") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pusch_enable64QAM = FALSE; + } + else + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pusch_enable64QAM choice: ENABLE,DISABLE!\n", + RC.config_file_name, i, pusch_enable64QAM); + + if (!pusch_groupHoppingEnabled) + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d define %s: ENABLE,DISABLE!\n", + RC.config_file_name, i, ENB_CONFIG_STRING_PUSCH_GROUP_HOPPING_EN); + else if (strcmp(pusch_groupHoppingEnabled, "ENABLE") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pusch_groupHoppingEnabled = TRUE; + } + else if (strcmp(pusch_groupHoppingEnabled, "DISABLE") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pusch_groupHoppingEnabled = FALSE; + } + else + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pusch_groupHoppingEnabled choice: ENABLE,DISABLE!\n", + RC.config_file_name, i, pusch_groupHoppingEnabled); + + + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].pusch_groupAssignment = pusch_groupAssignment; + + if ((pusch_groupAssignment<0)||(pusch_groupAssignment>29)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pusch_groupAssignment choice: 0..29!\n", + RC.config_file_name, i, pusch_groupAssignment); + + if (!pusch_sequenceHoppingEnabled) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d define %s: ENABLE,DISABLE!\n", + RC.config_file_name, i, ENB_CONFIG_STRING_PUSCH_SEQUENCE_HOPPING_EN); + else if (strcmp(pusch_sequenceHoppingEnabled, "ENABLE") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pusch_sequenceHoppingEnabled = TRUE; + } + else if (strcmp(pusch_sequenceHoppingEnabled, "DISABLE") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pusch_sequenceHoppingEnabled = FALSE; + } + else + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pusch_sequenceHoppingEnabled choice: ENABLE,DISABLE!\n", + RC.config_file_name, i, pusch_sequenceHoppingEnabled); + + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].pusch_nDMRS1 = pusch_nDMRS1; //cyclic_shift in RRC! + + if ((pusch_nDMRS1 <0) || (pusch_nDMRS1>7)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pusch_nDMRS1 choice: 0..7!\n", + RC.config_file_name, i, pusch_nDMRS1); + + if (strcmp(phich_duration, "NORMAL") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].phich_duration = PHICH_Config__phich_Duration_normal; + } + else if (strcmp(phich_duration, "EXTENDED") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].phich_duration = PHICH_Config__phich_Duration_extended; + } + else + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for phich_duration choice: NORMAL,EXTENDED!\n", + RC.config_file_name, i, phich_duration); + + if (strcmp(phich_resource, "ONESIXTH") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].phich_resource = PHICH_Config__phich_Resource_oneSixth; + } + else if (strcmp(phich_resource, "HALF") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].phich_resource = PHICH_Config__phich_Resource_half; + } + else if (strcmp(phich_resource, "ONE") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].phich_resource = PHICH_Config__phich_Resource_one; + } + else if (strcmp(phich_resource, "TWO") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].phich_resource = PHICH_Config__phich_Resource_two; + } + else + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for phich_resource choice: ONESIXTH,HALF,ONE,TWO!\n", + RC.config_file_name, i, phich_resource); + + printf("phich.resource %d (%s), phich.duration %d (%s)\n", + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].phich_resource, phich_resource, + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].phich_duration, phich_duration); + + if (strcmp(srs_enable, "ENABLE") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].srs_enable = TRUE; + } + else if (strcmp(srs_enable, "DISABLE") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].srs_enable = FALSE; + } + else + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for srs_BandwidthConfig choice: ENABLE,DISABLE !\n", + RC.config_file_name, i, srs_enable); + + if (RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].srs_enable == TRUE) { + if (!(config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_SRS_BANDWIDTH_CONFIG, &srs_BandwidthConfig) + && config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_SRS_SUBFRAME_CONFIG, &srs_SubframeConfig) + && config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_SRS_ACKNACKST_CONFIG, &srs_ackNackST) + && config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_SRS_MAXUPPTS, &srs_MaxUpPts) + )) + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d unknown values for srs_BandwidthConfig, srs_SubframeConfig, srs_ackNackST, srs_MaxUpPts\n", + RC.config_file_name, i); + + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].srs_BandwidthConfig = srs_BandwidthConfig; + + if ((srs_BandwidthConfig < 0) || (srs_BandwidthConfig >7)) + AssertFatal (0, "Failed to parse eNB configuration file %s, enb %d unknown value %d for srs_BandwidthConfig choice: 0...7\n", + RC.config_file_name, i, srs_BandwidthConfig); + + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].srs_SubframeConfig = srs_SubframeConfig; + + if ((srs_SubframeConfig<0) || (srs_SubframeConfig>15)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for srs_SubframeConfig choice: 0..15 !\n", + RC.config_file_name, i, srs_SubframeConfig); + + if (strcmp(srs_ackNackST, "ENABLE") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].srs_ackNackST = TRUE; + } + else if (strcmp(srs_ackNackST, "DISABLE") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].srs_ackNackST = FALSE; + } + else + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for srs_BandwidthConfig choice: ENABLE,DISABLE !\n", + RC.config_file_name, i, srs_ackNackST); + + if (strcmp(srs_MaxUpPts, "ENABLE") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].srs_MaxUpPts = TRUE; + } + else if (strcmp(srs_MaxUpPts, "DISABLE") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].srs_MaxUpPts = FALSE; + } + else + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for srs_MaxUpPts choice: ENABLE,DISABLE !\n", + RC.config_file_name, i, srs_MaxUpPts); + } + + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pusch_p0_Nominal = pusch_p0_Nominal; + + if ((pusch_p0_Nominal < -126) || (pusch_p0_Nominal > 24)) + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pusch_p0_Nominal choice: -126..24 !\n", + RC.config_file_name, i, pusch_p0_Nominal); + + if (strcmp(pusch_alpha, "AL0") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pusch_alpha = Alpha_r12_al0; + } + else if (strcmp(pusch_alpha, "AL04") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pusch_alpha = Alpha_r12_al04; + } + else if (strcmp(pusch_alpha, "AL05") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pusch_alpha = Alpha_r12_al05; + } + else if (strcmp(pusch_alpha, "AL06") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pusch_alpha = Alpha_r12_al06; + } + else if (strcmp(pusch_alpha, "AL07") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pusch_alpha = Alpha_r12_al07; + } + else if (strcmp(pusch_alpha, "AL08") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pusch_alpha = Alpha_r12_al08; + } + else if (strcmp(pusch_alpha, "AL09") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pusch_alpha = Alpha_r12_al09; + } + else if (strcmp(pusch_alpha, "AL1") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pusch_alpha = Alpha_r12_al1; + } + else + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pucch_Alpha choice: AL0,AL04,AL05,AL06,AL07,AL08,AL09,AL1!\n", + RC.config_file_name, i, pusch_alpha); + + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pucch_p0_Nominal = pucch_p0_Nominal; + + if ((pucch_p0_Nominal < -127) || (pucch_p0_Nominal > -96)) + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pucch_p0_Nominal choice: -127..-96 !\n", + RC.config_file_name, i, pucch_p0_Nominal); + + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].msg3_delta_Preamble = msg3_delta_Preamble; + + if ((msg3_delta_Preamble < -1) || (msg3_delta_Preamble > 6)) + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for msg3_delta_Preamble choice: -1..6 !\n", + RC.config_file_name, i, msg3_delta_Preamble); + + + if (strcmp(pucch_deltaF_Format1, "deltaF_2") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pucch_deltaF_Format1 = DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF_2; + } + else if (strcmp(pucch_deltaF_Format1, "deltaF0") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pucch_deltaF_Format1= DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF0; + } + else if (strcmp(pucch_deltaF_Format1, "deltaF2") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pucch_deltaF_Format1= DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF2; + } + else + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pucch_deltaF_Format1 choice: deltaF_2,dltaF0,deltaF2!\n", + RC.config_file_name, i, pucch_deltaF_Format1); + + if (strcmp(pucch_deltaF_Format1b, "deltaF1") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pucch_deltaF_Format1b= DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF1; + } + else if (strcmp(pucch_deltaF_Format1b, "deltaF3") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pucch_deltaF_Format1b= DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF3; + } + else if (strcmp(pucch_deltaF_Format1b, "deltaF5") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pucch_deltaF_Format1b= DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF5; + } + else + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pucch_deltaF_Format1b choice: deltaF1,dltaF3,deltaF5!\n", + RC.config_file_name, i, pucch_deltaF_Format1b); + + + if (strcmp(pucch_deltaF_Format2, "deltaF_2") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pucch_deltaF_Format2= DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF_2; + } + else if (strcmp(pucch_deltaF_Format2, "deltaF0") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pucch_deltaF_Format2= DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF0; + } + else if (strcmp(pucch_deltaF_Format2, "deltaF1") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pucch_deltaF_Format2= DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF1; + } + else if (strcmp(pucch_deltaF_Format2, "deltaF2") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pucch_deltaF_Format2= DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF2; + } + else + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pucch_deltaF_Format2 choice: deltaF_2,dltaF0,deltaF1,deltaF2!\n", + RC.config_file_name, i, pucch_deltaF_Format2); + + if (strcmp(pucch_deltaF_Format2a, "deltaF_2") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pucch_deltaF_Format2a= DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF_2; + } + else if (strcmp(pucch_deltaF_Format2a, "deltaF0") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pucch_deltaF_Format2a= DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF0; + } + else if (strcmp(pucch_deltaF_Format2a, "deltaF2") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pucch_deltaF_Format2a= DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF2; + } + else + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pucch_deltaF_Format2a choice: deltaF_2,dltaF0,deltaF2!\n", + RC.config_file_name, i, pucch_deltaF_Format2a); + + if (strcmp(pucch_deltaF_Format2b, "deltaF_2") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pucch_deltaF_Format2b= DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF_2; + } + else if (strcmp(pucch_deltaF_Format2b, "deltaF0") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pucch_deltaF_Format2b= DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF0; + } + else if (strcmp(pucch_deltaF_Format2b, "deltaF2") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pucch_deltaF_Format2b= DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF2; + } + else + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for pucch_deltaF_Format2b choice: deltaF_2,dltaF0,deltaF2!\n", + RC.config_file_name, i, pucch_deltaF_Format2b); + + + + + if (!strcmp(rach_numberOfRA_Preambles, "n4")) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].rach_numberOfRA_Preambles = (4 / 4) - 1; + } else if (!strcmp(rach_numberOfRA_Preambles, "n8")) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].rach_numberOfRA_Preambles = (8 / 4) - 1; + } else if (!strcmp(rach_numberOfRA_Preambles, "n12")) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].rach_numberOfRA_Preambles = (12 / 4) - 1; + } else if (!strcmp(rach_numberOfRA_Preambles, "n16")) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].rach_numberOfRA_Preambles = (16 / 4) - 1; + } else if (!strcmp(rach_numberOfRA_Preambles, "n20")) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].rach_numberOfRA_Preambles = (20 / 4) - 1; + } else if (!strcmp(rach_numberOfRA_Preambles, "n24")) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].rach_numberOfRA_Preambles = (24 / 4) - 1; + } else if (!strcmp(rach_numberOfRA_Preambles, "n28")) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].rach_numberOfRA_Preambles = (28 / 4) - 1; + } else if (!strcmp(rach_numberOfRA_Preambles, "n32")) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].rach_numberOfRA_Preambles = (32 / 4) - 1; + } else if (!strcmp(rach_numberOfRA_Preambles, "n36")) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].rach_numberOfRA_Preambles = (36 / 4) - 1; + } else if (!strcmp(rach_numberOfRA_Preambles, "n40")) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].rach_numberOfRA_Preambles = (40 / 4) - 1; + } else if (!strcmp(rach_numberOfRA_Preambles, "n44")) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].rach_numberOfRA_Preambles = (44 / 4) - 1; + } else if (!strcmp(rach_numberOfRA_Preambles, "n48")) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].rach_numberOfRA_Preambles = (48 / 4) - 1; + } else if (!strcmp(rach_numberOfRA_Preambles, "n52")) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].rach_numberOfRA_Preambles = (52 / 4) - 1; + } else if (!strcmp(rach_numberOfRA_Preambles, "n56")) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].rach_numberOfRA_Preambles = (56 / 4) - 1; + } else if (!strcmp(rach_numberOfRA_Preambles, "n60")) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].rach_numberOfRA_Preambles = (60 / 4) - 1; + } else if (!strcmp(rach_numberOfRA_Preambles, "n64")) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].rach_numberOfRA_Preambles = (64 / 4) - 1; + } else { + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for rach_numberOfRA_Preambles choice: 4,8,12,...,64!\n", + RC.config_file_name, i, rach_numberOfRA_Preambles); + + } + + + printf("[DEBUGGING][KOGO][CHAR*] : rach_numberOfRA_Preambles_br = %d\n", RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].rach_numberOfRA_Preambles); + +// RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].rach_numberOfRA_Preambles = (rach_numberOfRA_Preambles_br/ 4) - 1; + + + if (strcmp(rach_preamblesGroupAConfig, "ENABLE") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].rach_preamblesGroupAConfig= TRUE; + + if (!(config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_RACH_SIZEOFRA_PREAMBLESGROUPA, &rach_sizeOfRA_PreamblesGroupA) + && config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_RACH_MESSAGESIZEGROUPA, &rach_messageSizeGroupA) + && config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_RACH_MESSAGEPOWEROFFSETGROUPB, &rach_messagePowerOffsetGroupB))) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d rach_sizeOfRA_PreamblesGroupA, messageSizeGroupA,messagePowerOffsetGroupB!\n", + RC.config_file_name, i); + + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].rach_sizeOfRA_PreamblesGroupA= (rach_sizeOfRA_PreamblesGroupA/4)-1; + +// if ((rach_numberOfRA_Preambles <4) || (rach_numberOfRA_Preambles>60) || ((rach_numberOfRA_Preambles&3)!=0)) +// AssertFatal (0, +// "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for rach_sizeOfRA_PreamblesGroupA choice: 4,8,12,...,60!\n", +// RC.config_file_name, i, rach_sizeOfRA_PreamblesGroupA); + + + switch (rach_messageSizeGroupA) { + case 56: + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].rach_messageSizeGroupA= RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b56; + break; + + case 144: + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].rach_messageSizeGroupA= RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b144; + break; + + case 208: + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].rach_messageSizeGroupA= RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b208; + break; + + case 256: + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].rach_messageSizeGroupA= RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b256; + break; + + default: + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for rach_messageSizeGroupA choice: 56,144,208,256!\n", + RC.config_file_name, i, rach_messageSizeGroupA); + break; + } + + if (strcmp(rach_messagePowerOffsetGroupB,"minusinfinity")==0) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].rach_messagePowerOffsetGroupB= RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_minusinfinity; + } + + else if (strcmp(rach_messagePowerOffsetGroupB,"dB0")==0) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].rach_messagePowerOffsetGroupB= RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB0; + } + + else if (strcmp(rach_messagePowerOffsetGroupB,"dB5")==0) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].rach_messagePowerOffsetGroupB= RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB5; + } + + else if (strcmp(rach_messagePowerOffsetGroupB,"dB8")==0) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].rach_messagePowerOffsetGroupB= RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB8; + } + + else if (strcmp(rach_messagePowerOffsetGroupB,"dB10")==0) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].rach_messagePowerOffsetGroupB= RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB10; + } + + else if (strcmp(rach_messagePowerOffsetGroupB,"dB12")==0) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].rach_messagePowerOffsetGroupB= RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB12; + } + + else if (strcmp(rach_messagePowerOffsetGroupB,"dB15")==0) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].rach_messagePowerOffsetGroupB= RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB15; + } + + else if (strcmp(rach_messagePowerOffsetGroupB,"dB18")==0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].rach_messagePowerOffsetGroupB= RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB18; + } + else + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for rach_messagePowerOffsetGroupB choice: minusinfinity,dB0,dB5,dB8,dB10,dB12,dB15,dB18!\n", + RC.config_file_name, i, rach_messagePowerOffsetGroupB); + + } + else if (strcmp(rach_preamblesGroupAConfig, "DISABLE") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].rach_preamblesGroupAConfig= FALSE; + } + else + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%s\" for rach_preamblesGroupAConfig choice: ENABLE,DISABLE !\n", + RC.config_file_name, i, rach_preamblesGroupAConfig); + + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].rach_preambleInitialReceivedTargetPower= (rach_preambleInitialReceivedTargetPower+120)/2; + + if ((rach_preambleInitialReceivedTargetPower<-120) || (rach_preambleInitialReceivedTargetPower>-90) || ((rach_preambleInitialReceivedTargetPower&1)!=0)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for rach_preambleInitialReceivedTargetPower choice: -120,-118,...,-90 !\n", + RC.config_file_name, i, rach_preambleInitialReceivedTargetPower); + + + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].rach_powerRampingStep= rach_powerRampingStep/2; + + if ((rach_powerRampingStep<0) || (rach_powerRampingStep>6) || ((rach_powerRampingStep&1)!=0)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for rach_powerRampingStep choice: 0,2,4,6 !\n", + RC.config_file_name, i, rach_powerRampingStep); + + + + switch (rach_preambleTransMax) { + + case 3: + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].rach_preambleTransMax= PreambleTransMax_n3; + break; + + case 4: + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].rach_preambleTransMax= PreambleTransMax_n4; + break; + + case 5: + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].rach_preambleTransMax= PreambleTransMax_n5; + break; + + case 6: + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].rach_preambleTransMax= PreambleTransMax_n6; + break; + + case 7: + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].rach_preambleTransMax= PreambleTransMax_n7; + break; + + case 8: + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].rach_preambleTransMax= PreambleTransMax_n8; + break; + + case 10: + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].rach_preambleTransMax= PreambleTransMax_n10; + break; + + case 20: + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].rach_preambleTransMax= PreambleTransMax_n20; + break; + + case 50: + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].rach_preambleTransMax= PreambleTransMax_n50; + break; + + case 100: + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].rach_preambleTransMax= PreambleTransMax_n100; + break; + + case 200: + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].rach_preambleTransMax= PreambleTransMax_n200; + break; + + + default: + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for rach_preambleTransMax choice: 3,4,5,6,7,8,10,20,50,100,200!\n", + RC.config_file_name, i, rach_preambleTransMax); + break; + } + + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].rach_raResponseWindowSize= (rach_raResponseWindowSize==10)?7:rach_raResponseWindowSize-2; + + if ((rach_raResponseWindowSize<0)||(rach_raResponseWindowSize==9)||(rach_raResponseWindowSize>10)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for rach_raResponseWindowSize choice: 2,3,4,5,6,7,8,10!\n", + RC.config_file_name, i, rach_preambleTransMax); + + + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].rach_macContentionResolutionTimer= (rach_macContentionResolutionTimer/8)-1; + + if ((rach_macContentionResolutionTimer<8) || (rach_macContentionResolutionTimer>64) || ((rach_macContentionResolutionTimer&7)!=0)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for rach_macContentionResolutionTimer choice: 8,16,...,56,64!\n", + RC.config_file_name, i, rach_preambleTransMax); + + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].rach_maxHARQ_Msg3Tx= rach_maxHARQ_Msg3Tx; + + if ((rach_maxHARQ_Msg3Tx<0) || (rach_maxHARQ_Msg3Tx>8)) + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for rach_maxHARQ_Msg3Tx choice: 1..8!\n", + RC.config_file_name, i, rach_preambleTransMax); + + + if (!strcmp(pcch_defaultPagingCycle, "rf32")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].pcch_defaultPagingCycle = PCCH_Config__defaultPagingCycle_rf32; + } else if (!strcmp(pcch_defaultPagingCycle, "rf64")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].pcch_defaultPagingCycle = PCCH_Config__defaultPagingCycle_rf64; + } else if (!strcmp(pcch_defaultPagingCycle, "rf128")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].pcch_defaultPagingCycle = PCCH_Config__defaultPagingCycle_rf128; + } else if (!strcmp(pcch_defaultPagingCycle, "rf256")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].pcch_defaultPagingCycle = PCCH_Config__defaultPagingCycle_rf256; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pcch_defaultPagingCycle choice: 32,64,128,256!\n", + RC.config_file_name, i, pcch_defaultPagingCycle); + } + + printf("[DEBUGGING][KOGO][CHAR*] : pcch_defaultPagingCycle_br = %d\n", RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].pcch_defaultPagingCycle); + + if (strcmp(pcch_nB, "fourT") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pcch_nB= PCCH_Config__nB_fourT; + } + else if (strcmp(pcch_nB, "twoT") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pcch_nB= PCCH_Config__nB_twoT; + } + else if (strcmp(pcch_nB, "oneT") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pcch_nB= PCCH_Config__nB_oneT; + } + else if (strcmp(pcch_nB, "halfT") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pcch_nB= PCCH_Config__nB_halfT; + } + else if (strcmp(pcch_nB, "quarterT") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pcch_nB= PCCH_Config__nB_quarterT; + } + else if (strcmp(pcch_nB, "oneEighthT") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pcch_nB= PCCH_Config__nB_oneEighthT; + } + else if (strcmp(pcch_nB, "oneSixteenthT") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pcch_nB= PCCH_Config__nB_oneSixteenthT; + } + else if (strcmp(pcch_nB, "oneThirtySecondT") == 0) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].pcch_nB= PCCH_Config__nB_oneThirtySecondT; + } + else + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for pcch_nB choice: fourT,twoT,oneT,halfT,quarterT,oneighthT,oneSixteenthT,oneThirtySecondT !\n", + RC.config_file_name, i, pcch_defaultPagingCycle); + + + + switch (bcch_modificationPeriodCoeff) { + case 2: + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].bcch_modificationPeriodCoeff = BCCH_Config__modificationPeriodCoeff_n2; + break; + + case 4: + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].bcch_modificationPeriodCoeff = BCCH_Config__modificationPeriodCoeff_n4; + break; + + case 8: + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].bcch_modificationPeriodCoeff = BCCH_Config__modificationPeriodCoeff_n8; + break; + + case 16: + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].bcch_modificationPeriodCoeff = BCCH_Config__modificationPeriodCoeff_n16; + break; + + default: + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for bcch_modificationPeriodCoeff choice: 2,4,8,16", + RC.config_file_name, i, bcch_modificationPeriodCoeff); + + break; + } + + + if (!strcmp(ue_TimersAndConstants_t300, "ms100")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t300 = UE_TimersAndConstants__t300_ms100; + } else if (!strcmp(ue_TimersAndConstants_t300, "ms200")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t300 = UE_TimersAndConstants__t300_ms200; + } else if (!strcmp(ue_TimersAndConstants_t300, "ms300")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t300 = UE_TimersAndConstants__t300_ms300; + } else if (!strcmp(ue_TimersAndConstants_t300, "ms400")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t300 = UE_TimersAndConstants__t300_ms400; + } else if (!strcmp(ue_TimersAndConstants_t300, "ms600")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t300 = UE_TimersAndConstants__t300_ms600; + } else if (!strcmp(ue_TimersAndConstants_t300, "ms1000")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t300 = UE_TimersAndConstants__t300_ms1000; + } else if (!strcmp(ue_TimersAndConstants_t300, "ms1500")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t300 = UE_TimersAndConstants__t300_ms1500; + } else if (!strcmp(ue_TimersAndConstants_t300, "ms2000")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t300 = UE_TimersAndConstants__t300_ms2000; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for ue_TimersAndConstants_t300 unknown value !!", + RC.config_file_name, i, ue_TimersAndConstants_t300); + } + + printf("[DEBUGGING][KOGO][CHAR*]: ue_TimersAndConstants_t300 : %s - %d\n", ue_TimersAndConstants_t300, RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t300); + + if (!strcmp(ue_TimersAndConstants_t301, "ms100")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t301= UE_TimersAndConstants__t301_ms100; + } else if (!strcmp(ue_TimersAndConstants_t301, "ms200")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t301= UE_TimersAndConstants__t301_ms200; + } else if (!strcmp(ue_TimersAndConstants_t301, "ms300")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t301= UE_TimersAndConstants__t301_ms300; + } else if (!strcmp(ue_TimersAndConstants_t301, "ms400")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t301= UE_TimersAndConstants__t301_ms400; + } else if (!strcmp(ue_TimersAndConstants_t301, "ms600")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t301= UE_TimersAndConstants__t301_ms600; + } else if (!strcmp(ue_TimersAndConstants_t301, "ms1000")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t301= UE_TimersAndConstants__t301_ms1000; + } else if (!strcmp(ue_TimersAndConstants_t301, "ms1500")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t301= UE_TimersAndConstants__t301_ms1500; + } else if (!strcmp(ue_TimersAndConstants_t301, "ms2000")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t301= UE_TimersAndConstants__t301_ms2000; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for ue_TimersAndConstants_t301 !!", + RC.config_file_name, i, ue_TimersAndConstants_t301); + } + + printf("[DEBUGGING][KOGO][CHAR*]: ue_TimersAndConstants_t301 : %s - %d\n", ue_TimersAndConstants_t301, RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t301); + + if (!strcmp(ue_TimersAndConstants_t310, "ms0")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t310 = UE_TimersAndConstants__t310_ms0; + } else if (!strcmp(ue_TimersAndConstants_t310, "ms50")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t310 = UE_TimersAndConstants__t310_ms50; + } else if (!strcmp(ue_TimersAndConstants_t310, "ms100")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t310 = UE_TimersAndConstants__t310_ms100; + } else if (!strcmp(ue_TimersAndConstants_t310, "ms200")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t310 = UE_TimersAndConstants__t310_ms200; + } else if (!strcmp(ue_TimersAndConstants_t310, "ms500")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t310 = UE_TimersAndConstants__t310_ms500; + } else if (!strcmp(ue_TimersAndConstants_t310, "ms1000")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t310 = UE_TimersAndConstants__t310_ms1000; + } else if (!strcmp(ue_TimersAndConstants_t310, "ms2000")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t310 = UE_TimersAndConstants__t310_ms2000; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for ue_TimersAndConstants_t310 !!", + RC.config_file_name, i, ue_TimersAndConstants_t310); + } + printf("[DEBUGGING][KOGO][CHAR*]: ue_TimersAndConstants_t310 : %s - %d\n", ue_TimersAndConstants_t310, RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t310); + + if (!strcmp(ue_TimersAndConstants_t311, "ms1000")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t311 = UE_TimersAndConstants__t311_ms1000; + } else if (!strcmp(ue_TimersAndConstants_t311, "ms3000")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t311 = UE_TimersAndConstants__t311_ms3000; + } else if (!strcmp(ue_TimersAndConstants_t311, "ms5000")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t311 = UE_TimersAndConstants__t311_ms5000; + } else if (!strcmp(ue_TimersAndConstants_t311, "ms10000")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t311 = UE_TimersAndConstants__t311_ms10000; + } else if (!strcmp(ue_TimersAndConstants_t311, "ms15000")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t311 = UE_TimersAndConstants__t311_ms15000; + } else if (!strcmp(ue_TimersAndConstants_t311, "ms20000")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t311 = UE_TimersAndConstants__t311_ms20000; + } else if (!strcmp(ue_TimersAndConstants_t311, "ms30000")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t311 = UE_TimersAndConstants__t311_ms30000; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for ue_TimersAndConstants_t311 !!", + RC.config_file_name, i, ue_TimersAndConstants_t311); + } + + printf("[DEBUGGING][KOGO][CHAR*]: ue_TimersAndConstants_t311 : %s - %d\n", ue_TimersAndConstants_t311, RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_t311); + + + if (!strcmp(ue_TimersAndConstants_n310, "n1")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_n310 = UE_TimersAndConstants__n310_n1; + } else if (!strcmp(ue_TimersAndConstants_n310, "n2")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_n310 = UE_TimersAndConstants__n310_n2; + } else if (!strcmp(ue_TimersAndConstants_n310, "n3")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_n310 = UE_TimersAndConstants__n310_n3; + } else if (!strcmp(ue_TimersAndConstants_n310, "n4")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_n310 = UE_TimersAndConstants__n310_n4; + } else if (!strcmp(ue_TimersAndConstants_n310, "n6")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_n310 = UE_TimersAndConstants__n310_n6; + } else if (!strcmp(ue_TimersAndConstants_n310, "n8")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_n310 = UE_TimersAndConstants__n310_n8; + } else if (!strcmp(ue_TimersAndConstants_n310, "n10")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_n310 = UE_TimersAndConstants__n310_n10; + } else if (!strcmp(ue_TimersAndConstants_n310, "n20")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_n310 = UE_TimersAndConstants__n310_n20; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for ue_TimersAndConstants_n310 !!", + RC.config_file_name, i, ue_TimersAndConstants_n310); + } + + printf("[DEBUGGING][KOGO][CHAR*]: ue_TimersAndConstants_n310 : %s - %d\n", ue_TimersAndConstants_n310, RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_n310); + + + if (!strcmp(ue_TimersAndConstants_n311, "n1")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_n311 = UE_TimersAndConstants__n311_n1; + } else if (!strcmp(ue_TimersAndConstants_n311, "n2")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_n311 = UE_TimersAndConstants__n311_n2; + } else if (!strcmp(ue_TimersAndConstants_n311, "n3")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_n311 = UE_TimersAndConstants__n311_n3; + } else if (!strcmp(ue_TimersAndConstants_n311, "n4")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_n311 = UE_TimersAndConstants__n311_n4; + } else if (!strcmp(ue_TimersAndConstants_n311, "n5")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_n311 = UE_TimersAndConstants__n311_n5; + } else if (!strcmp(ue_TimersAndConstants_n311, "n6")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_n311 = UE_TimersAndConstants__n311_n6; + } else if (!strcmp(ue_TimersAndConstants_n311, "n8")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_n311 = UE_TimersAndConstants__n311_n8; + } else if (!strcmp(ue_TimersAndConstants_n311, "n10")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_n311 = UE_TimersAndConstants__n311_n10; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for ue_TimersAndConstants_n311!!", + RC.config_file_name, i, ue_TimersAndConstants_n311); + } + + printf("[DEBUGGING][KOGO][CHAR*]: ue_TimersAndConstants_n311 : %s - %d\n", ue_TimersAndConstants_n311, RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TimersAndConstants_n311); + + + if (!strcmp(ue_TransmissionMode, "tm1")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TransmissionMode = AntennaInfoDedicated__transmissionMode_tm1; + } else if (!strcmp(ue_TransmissionMode, "tm2")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TransmissionMode = AntennaInfoDedicated__transmissionMode_tm2; + } else if (!strcmp(ue_TransmissionMode, "tm3")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TransmissionMode = AntennaInfoDedicated__transmissionMode_tm3; + } else if (!strcmp(ue_TransmissionMode, "tm4")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TransmissionMode = AntennaInfoDedicated__transmissionMode_tm4; + } else if (!strcmp(ue_TransmissionMode, "tm5")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TransmissionMode = AntennaInfoDedicated__transmissionMode_tm5; + } else if (!strcmp(ue_TransmissionMode, "tm6")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TransmissionMode = AntennaInfoDedicated__transmissionMode_tm6; + } else if (!strcmp(ue_TransmissionMode, "tm7")) { + RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TransmissionMode = AntennaInfoDedicated__transmissionMode_tm7; + } else { + AssertFatal (0, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for ue_TransmissionMode !!", + RC.config_file_name, i, ue_TransmissionMode); + } + + printf("[DEBUGGING][KOGO][CHAR*]: ue_TransmissionMode : %s - %d\n", ue_TransmissionMode, RRC_CONFIGURATION_REQ (msg_p).radioresourceconfig_BR[j].ue_TransmissionMode); + + setting_pcch_config_v1310 = config_setting_get_member(setting_br13, ENB_CONFIG_STRING_PCCH_CONFIG_V1310); + if (setting_pcch_config_v1310 != NULL) + { + RRC_CONFIGURATION_REQ(msg_p).pcch_config_v1310[j] = TRUE; + if (!config_setting_lookup_int(setting_pcch_config_v1310, ENB_CONFIG_STRING_PAGING_NARROWBANDS_R13, &paging_narrowbands_r13) + || !config_setting_lookup_string(setting_pcch_config_v1310, ENB_CONFIG_STRING_MPDCCH_NUMREPETITION_PAGING_R13, &mpdcch_numrepetition_paging_r13) + ) + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d pcch_config_v1310!\n", + RC.config_file_name, i); + + RRC_CONFIGURATION_REQ(msg_p).paging_narrowbands_r13[j] = paging_narrowbands_r13; + + + if (!strcmp(mpdcch_numrepetition_paging_r13, "r1")) { + RRC_CONFIGURATION_REQ(msg_p).mpdcch_numrepetition_paging_r13[j] = 0; + } else if (!strcmp(mpdcch_numrepetition_paging_r13, "r2")) { + RRC_CONFIGURATION_REQ(msg_p).mpdcch_numrepetition_paging_r13[j] = 1; + } else if (!strcmp(mpdcch_numrepetition_paging_r13, "r4")) { + RRC_CONFIGURATION_REQ(msg_p).mpdcch_numrepetition_paging_r13[j] = 2; + } else if (!strcmp(mpdcch_numrepetition_paging_r13, "r8")) { + RRC_CONFIGURATION_REQ(msg_p).mpdcch_numrepetition_paging_r13[j] = 3; + } else if (!strcmp(mpdcch_numrepetition_paging_r13, "r16")) { + RRC_CONFIGURATION_REQ(msg_p).mpdcch_numrepetition_paging_r13[j] = 4; + } else if (!strcmp(mpdcch_numrepetition_paging_r13, "r32")) { + RRC_CONFIGURATION_REQ(msg_p).mpdcch_numrepetition_paging_r13[j] = 5; + } else if (!strcmp(mpdcch_numrepetition_paging_r13, "r64")) { + RRC_CONFIGURATION_REQ(msg_p).mpdcch_numrepetition_paging_r13[j] = 6; + } else if (!strcmp(mpdcch_numrepetition_paging_r13, "r128")) { + RRC_CONFIGURATION_REQ(msg_p).mpdcch_numrepetition_paging_r13[j] = 7; + } else if (!strcmp(mpdcch_numrepetition_paging_r13, "r256")) { + RRC_CONFIGURATION_REQ(msg_p).mpdcch_numrepetition_paging_r13[j] = 8; + } else { + AssertFatal(0, + "Failed to parse eNB configuration file %s, nb_v1310, unknown value !\n", + RC.config_file_name); + } + + printf("[DEBUGGING][KOGO][CHAR*] mpdcch_numrepetition_paging_r13: %s - %d\n", mpdcch_numrepetition_paging_r13, RRC_CONFIGURATION_REQ(msg_p).mpdcch_numrepetition_paging_r13[j]); + + if (config_setting_lookup_string(setting_pcch_config_v1310, ENB_CONFIG_STRING_NB_V1310, &nb_v1310)) + { + RRC_CONFIGURATION_REQ(msg_p).nb_v1310[j] = CALLOC(1, sizeof(long)); + if (!strcmp(nb_v1310, "one64thT")) { + *RRC_CONFIGURATION_REQ(msg_p).nb_v1310[j] = 0; + } else if (!strcmp(nb_v1310, "one128thT")) { + *RRC_CONFIGURATION_REQ(msg_p).nb_v1310[j] = 1; + } else if (!strcmp(nb_v1310, "one256thT")) { + *RRC_CONFIGURATION_REQ(msg_p).nb_v1310[j] = 2; + } else { + AssertFatal(0, + "Failed to parse eNB configuration file %s, nb_v1310, unknown value !\n", + RC.config_file_name); + } + printf("[DEBUGGING][KOGO][CHAR*] nb_v1310: %s - %d\n", nb_v1310, *RRC_CONFIGURATION_REQ(msg_p).nb_v1310[j]); + + } + else + { + RRC_CONFIGURATION_REQ(msg_p).nb_v1310[j] = NULL; + } + + + } + else + { + RRC_CONFIGURATION_REQ(msg_p).pcch_config_v1310[j] = FALSE; + } + + if (config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_HYPERSFN, &hyperSFN_r13)) + { + RRC_CONFIGURATION_REQ(msg_p).hyperSFN_r13[j]= calloc(1, sizeof(uint16_t)); + *RRC_CONFIGURATION_REQ(msg_p).hyperSFN_r13[j]= (uint16_t)hyperSFN_r13; + } + else + RRC_CONFIGURATION_REQ(msg_p).hyperSFN_r13[j]= NULL; + + if (config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_EDRX_ALLOWED, &eDRX_Allowed_r13)) + { + RRC_CONFIGURATION_REQ(msg_p).eDRX_Allowed_r13[j]= calloc(1, sizeof(long)); + *RRC_CONFIGURATION_REQ(msg_p).eDRX_Allowed_r13[j]= eDRX_Allowed_r13; + } + else + RRC_CONFIGURATION_REQ(msg_p).eDRX_Allowed_r13[j]= NULL; + + + bool fdd_uplink_exist = config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_FDD_ULSUBFRAMEBITMAPBR, &fdd_UplinkSubframeBitmapBR_r13); + if (fdd_uplink_exist) + { + RRC_CONFIGURATION_REQ(msg_p).fdd_UplinkSubframeBitmapBR_r13[j] = CALLOC(1, sizeof(BOOLEAN_t)); + *RRC_CONFIGURATION_REQ(msg_p).fdd_UplinkSubframeBitmapBR_r13[j] = fdd_UplinkSubframeBitmapBR_r13; + } + else + { + RRC_CONFIGURATION_REQ(msg_p).fdd_UplinkSubframeBitmapBR_r13[j] = NULL;; + } + + } + + else + RRC_CONFIGURATION_REQ(msg_p).bandwidthReducedAccessRelatedInfo_r13[j] = FALSE; + + + /////SIB2 Parameters + + + if (config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_PRACH_CONFIGCOMMON_V1310, &prach_ConfigCommon_v1310) && !strcmp(prach_ConfigCommon_v1310, "ENABLE")) + { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].prach_ConfigCommon_v1310 = TRUE; + + if (config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_MPDCCH_STARTSF_CSS_RA_R13, &mpdcch_startSF_CSS_RA_r13)) + { + if (!config_setting_lookup_string(setting_br13, ENB_CONFIG_STRING_MPDCCH_STARTSF_CSS_RA_R13_VAL, &mpdcch_startSF_CSS_RA_r13_val)) + { + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d mpdcch_startSF_CSS_RA_r13_val!\n", + RC.config_file_name, i); + + } + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].mpdcch_startSF_CSS_RA_r13 = calloc(1, sizeof(BOOLEAN_t)); + + if (!strcmp(mpdcch_startSF_CSS_RA_r13, "tdd-r13")) { + *RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].mpdcch_startSF_CSS_RA_r13 = FALSE; + } else { + *RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].mpdcch_startSF_CSS_RA_r13 = TRUE; + } + + if (!strcmp(mpdcch_startSF_CSS_RA_r13_val, "v1")) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].mpdcch_startSF_CSS_RA_r13_val = 0; + } else if (!strcmp(mpdcch_startSF_CSS_RA_r13_val, "v1dot5")) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].mpdcch_startSF_CSS_RA_r13_val = 1; + } else if (!strcmp(mpdcch_startSF_CSS_RA_r13_val, "v2")) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].mpdcch_startSF_CSS_RA_r13_val = 2; + } else if (!strcmp(mpdcch_startSF_CSS_RA_r13_val, "v2dot5")) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].mpdcch_startSF_CSS_RA_r13_val = 3; + } else if (!strcmp(mpdcch_startSF_CSS_RA_r13_val, "v4")) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].mpdcch_startSF_CSS_RA_r13_val = 4; + } else if (!strcmp(mpdcch_startSF_CSS_RA_r13_val, "v5")) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].mpdcch_startSF_CSS_RA_r13_val = 5; + } else if (!strcmp(mpdcch_startSF_CSS_RA_r13_val, "v8")) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].mpdcch_startSF_CSS_RA_r13_val = 6; + } else if (!strcmp(mpdcch_startSF_CSS_RA_r13_val, "10")) { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].mpdcch_startSF_CSS_RA_r13_val = 7; + } else { + AssertFatal(0, + "Failed to parse eNB configuration file %s, enb %d mpdcch_startSF_CSS_RA_r13_val! Unknown Value !!\n", + RC.config_file_name, i); + } + printf("[DEBUGGING][KOGO][CHAR*] mpdcch_startSF_CSS_RA_r13_val %s - %d\n", mpdcch_startSF_CSS_RA_r13_val, RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].mpdcch_startSF_CSS_RA_r13_val); + + } + else + { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].mpdcch_startSF_CSS_RA_r13 = NULL; + } + + //if (config_setting_lookup_int(setting_br13, ENB_CONFIG_STRING_PRACH_HOPPINGOFFSET_R13, &prach_HoppingOffset_r13)) + //{ + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].prach_HoppingOffset_r13 = calloc(1, sizeof(long)); + *RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].prach_HoppingOffset_r13 = prach_HoppingOffset_r13; + + //} + //else + //{ + // RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].prach_HoppingOffset_r13 = NULL; + //} + + } + else + { + RRC_CONFIGURATION_REQ(msg_p).radioresourceconfig_BR[j].prach_ConfigCommon_v1310 = FALSE; + } + } + else + { + RRC_CONFIGURATION_REQ(msg_p).schedulingInfoSIB1_BR_r13[j] = 0; + }*/ + + +#endif //sprintf(brpath,"%s.%s.[%i].%s",enbpath,ENB_CONFIG_STRING_COMPONENT_CARRIERS,ENB_CONFIG_STRING_BR_PARAMETERS,j); //config_get( CCsParams,sizeof(CCsParams)/sizeof(paramdef_t),ccspath); diff --git a/openair2/ENB_APP/enb_paramdef.h b/openair2/ENB_APP/enb_paramdef.h index 02132a3054..ee40c38731 100755 --- a/openair2/ENB_APP/enb_paramdef.h +++ b/openair2/ENB_APP/enb_paramdef.h @@ -295,6 +295,7 @@ static int DEFENBS[] = {0}; /* component carriers configuration section name */ #define ENB_CONFIG_STRING_COMPONENT_CARRIERS "component_carriers" +#define ENB_CONFIG_STRING_COMPONENT_BR_PARAMETERS "br_parameters" #define ENB_CONFIG_STRING_SCHEDULING_INFO_LIST "scheduling_info_br" #define ENB_CONFIG_STRING_SYSTEM_INFO_VALUE_TAG_LIST "system_info_value_tag_SI" @@ -526,12 +527,12 @@ static int DEFENBS[] = {0}; {ENB_CONFIG_STRING_SI_HOPPING_CONFIG_COMMON_R13, NULL, 0, strptr:&si_HoppingConfigCommon_r13 , defstrval:"off", TYPE_STRING, 0}, \ {ENB_CONFIG_STRING_SI_VALIDITY_TIME_R13, NULL, 0, strptr:&si_ValidityTime_r13, defstrval:"true", TYPE_STRING, 0}, \ {ENB_CONFIG_STRING_FREQ_HOPPING_PARAMETERS_DL_R13, NULL, 0, strptr:&freqHoppingParametersDL_r13, defstrval:"DISABLE", TYPE_STRING, 0}, \ -{ENB_CONFIG_STRING_MPDCCH_PDSCH_HOPPING_NB_R13 NULL, 0, strptr:&mpdcch_pdsch_HoppingNB_r13, defstrval:"nb2", TYPE_STRING, 0}, \ +{ENB_CONFIG_STRING_MPDCCH_PDSCH_HOPPING_NB_R13, NULL, 0, strptr:&mpdcch_pdsch_HoppingNB_r13, defstrval:"nb2", TYPE_STRING, 0}, \ {ENB_CONFIG_STRING_INTERVAL_DL_HOPPING_CONFIG_COMMON_MODE_A_R13, NULL, 0, strptr:&interval_DLHoppingConfigCommonModeA_r13, defstrval:"interval-FDD-r13", TYPE_STRING, 0}, \ {ENB_CONFIG_STRING_INTERVAL_DL_HOPPING_CONFIG_COMMON_MODE_A_R13_VAL, NULL, 0, iptr:&interval_DLHoppingConfigCommonModeA_r13_val, defintval:0, TYPE_UINT, 0}, \ {ENB_CONFIG_STRING_INTERVAL_DL_HOPPING_CONFIG_COMMON_MODE_B_R13, NULL, 0, strptr:&interval_DLHoppingConfigCommonModeB_r13, defstrval:"interval-FDD-r13", TYPE_STRING, 0}, \ {ENB_CONFIG_STRING_INTERVAL_DL_HOPPING_CONFIG_COMMON_MODE_B_R13_VAL, NULL, 0, iptr:&interval_DLHoppingConfigCommonModeB_r13_val, defintval:0, TYPE_UINT, 0}, \ -{ENB_CONFIG_STRING_INTERVAL_, NULL, 0, iptr:&mpdcch_pdsch_HoppingOffset_r13, defintval:1, TYPE_UINT, 0}, \ +{ENB_CONFIG_STRING_MPDCCH_PDSCH_HOPPING_OFFSET_R13, NULL, 0, iptr:&mpdcch_pdsch_HoppingOffset_r13, defintval:1, TYPE_UINT, 0}, \ {ENB_CONFIG_STRING_FRAME_TYPE, NULL, 0, strptr:&frame_type, defstrval:"FDD", TYPE_STRING, 0}, \ {ENB_CONFIG_STRING_TDD_CONFIG, NULL, 0, iptr:&tdd_config, defintval:3, TYPE_UINT, 0}, \ {ENB_CONFIG_STRING_TDD_CONFIG_S, NULL, 0, iptr:&tdd_config_s, defintval:0, TYPE_UINT, 0}, \