diff --git a/openair2/COMMON/rrc_messages_types.h b/openair2/COMMON/rrc_messages_types.h index 86612d3b5b2eb289e26dd30ed5de532873cacd48..8398b135b1191b55f40f4ef1bcee454fafff6ef4 100644 --- a/openair2/COMMON/rrc_messages_types.h +++ b/openair2/COMMON/rrc_messages_types.h @@ -253,7 +253,8 @@ typedef struct NRRrcConfigurationReq_s { lte_frame_type_t frame_type[MAX_NUM_CCs]; uint8_t tdd_config[MAX_NUM_CCs]; uint8_t tdd_config_s[MAX_NUM_CCs]; - lte_prefix_type_t prefix_type[MAX_NUM_CCs]; + lte_prefix_type_t DL_prefix_type[MAX_NUM_CCs]; + lte_prefix_type_t UL_prefix_type[MAX_NUM_CCs]; int16_t eutra_band[MAX_NUM_CCs]; uint32_t downlink_frequency[MAX_NUM_CCs]; int32_t uplink_frequency_offset[MAX_NUM_CCs]; @@ -262,6 +263,15 @@ typedef struct NRRrcConfigurationReq_s { int nb_antenna_ports[MAX_NUM_CCs]; ///NR + //MIB + long MIB_subCarrierSpacingCommon[MAX_NUM_CCs]; + long MIB_dmrs_TypeA_Position[MAX_NUM_CCs]; + uint32_t pdcch_ConfigSIB1[MAX_NUM_CCs]; + + //SIB1 + long SIB1_frequencyOffsetSSB[MAX_NUM_CCs]; + long SIB1_ssb_PeriodicityServingCell[MAX_NUM_CCs]; + long SIB1_ss_PBCH_BlockPower[MAX_NUM_CCs]; //NR FrequencyInfoDL long absoluteFrequencySSB[MAX_NUM_CCs]; uint32_t ssb_SubcarrierOffset[MAX_NUM_CCs]; @@ -275,8 +285,7 @@ typedef struct NRRrcConfigurationReq_s { uint32_t DL_carrierBandwidth[MAX_NUM_CCs]; //NR BWP-DownlinkCommon - uint32_t DL_locationAndBandwidth[MAX_NUM_CCs]; - //NR_prefix_type_t DL_prefix_type[MAX_NUM_CCs]; + uint32_t DL_locationAndBandwidth[MAX_NUM_CCs]; //NR FrequencyInfoUL long UL_FreqBandIndicatorNR[MAX_NUM_CCs]; @@ -292,13 +301,11 @@ typedef struct NRRrcConfigurationReq_s { // NR BWP-UplinkCommon uint32_t UL_locationAndBandwidth[MAX_NUM_CCs]; - //NR_prefix_type_t UL_prefix_type[MAX_NUM_CCs]; - - long ssb_periodicityServingCell[MAX_NUM_CCs]; - long dmrs_TypeA_Position[MAX_NUM_CCs]; - long NIA_SubcarrierSpacing[MAX_NUM_CCs]; ///ServingCellConfigCommon Used only for non-initial access - long ss_PBCH_BlockPower[MAX_NUM_CCs]; + long ServingCellConfigCommon_ssb_periodicityServingCell[MAX_NUM_CCs]; //ServingCellConfigCommon + long ServingCellConfigCommon_dmrs_TypeA_Position[MAX_NUM_CCs]; //ServingCellConfigCommon + long NIA_SubcarrierSpacing[MAX_NUM_CCs]; //ServingCellConfigCommon Used only for non-initial access + long ServingCellConfigCommon_ss_PBCH_BlockPower[MAX_NUM_CCs]; //ServingCellConfigCommon //NR TDD-UL-DL-ConfigCommon diff --git a/openair2/ENB_APP/NRRRC_paramsvalues.h b/openair2/ENB_APP/NRRRC_paramsvalues.h index 2dfe59a7268be6d045a130df0dca363141c7e926..aae1fc3300d913f8926611111572a3c351ac17a9 100644 --- a/openair2/ENB_APP/NRRRC_paramsvalues.h +++ b/openair2/ENB_APP/NRRRC_paramsvalues.h @@ -32,21 +32,19 @@ #ifndef __NRRRC_PARAMSVALUES__H__ #define __NRRRC_PARAMSVALUES__H__ /* cell configuration section name */ -#define GNB_CONFIG_STRING_GNB_LIST "gNBs" +#define GNB_CONFIG_STRING_GNB_LIST "gNBs" /* component carriers configuration section name */ -#define GNB_CONFIG_STRING_COMPONENT_CARRIERS "component_carriers" - -#define GNB_CONFIG_STRING_FRAME_TYPE "frame_type" -#define GNB_CONFIG_STRING_TDD_CONFIG "tdd_config" -#define GNB_CONFIG_STRING_TDD_CONFIG_S "tdd_config_s" -#define GNB_CONFIG_STRING_PREFIX_TYPE "prefix_type" -#define GNB_CONFIG_STRING_PREFIX_TYPE_UL "prefix_type_UL" -#define GNB_CONFIG_STRING_EUTRA_BAND "eutra_band" -#define GNB_CONFIG_STRING_DOWNLINK_FREQUENCY "downlink_frequency" -#define GNB_CONFIG_STRING_UPLINK_FREQUENCY_OFFSET "uplink_frequency_offset" -#define GNB_CONFIG_STRING_NID_CELL "Nid_cell" -#define GNB_CONFIG_STRING_N_RB_DL "N_RB_DL" -#define GNB_CONFIG_STRING_CELL_MBSFN "Nid_cell_mbsfn" +#define GNB_CONFIG_STRING_COMPONENT_CARRIERS "component_carriers" + +#define GNB_CONFIG_STRING_FRAME_TYPE "frame_type" +#define GNB_CONFIG_STRING_DL_PREFIX_TYPE "DL_prefix_type" +#define GNB_CONFIG_STRING_UL_PREFIX_TYPE "UL_prefix_type" +#define GNB_CONFIG_STRING_EUTRA_BAND "eutra_band" +#define GNB_CONFIG_STRING_DOWNLINK_FREQUENCY "downlink_frequency" +#define GNB_CONFIG_STRING_UPLINK_FREQUENCY_OFFSET "uplink_frequency_offset" +#define GNB_CONFIG_STRING_NID_CELL "Nid_cell" +#define GNB_CONFIG_STRING_N_RB_DL "N_RB_DL" +#define GNB_CONFIG_STRING_CELL_MBSFN "Nid_cell_mbsfn" #define FRAMETYPE_OKVALUES {"FDD","TDD"} diff --git a/openair2/ENB_APP/gnb_app.c b/openair2/ENB_APP/gnb_app.c index ccef5e4663ab789334616e08f0aa49f0d2728a06..12222a2515fe35029eabd789985d9be957d4071e 100644 --- a/openair2/ENB_APP/gnb_app.c +++ b/openair2/ENB_APP/gnb_app.c @@ -55,7 +55,7 @@ extern RAN_CONTEXT_t RC; /*------------------------------------------------------------------------------*/ # if defined(ENABLE_USE_MME) -# define ENB_REGISTER_RETRY_DELAY 10 +# define GNB_REGISTER_RETRY_DELAY 10 # endif /*------------------------------------------------------------------------------*/ @@ -84,72 +84,72 @@ static void configure_phy(module_id_t enb_id, const Enb_properties_array_t* enb_ */ /*------------------------------------------------------------------------------*/ -static void configure_rrc(uint32_t enb_id) +static void configure_nrrrc(uint32_t gnb_id) { MessageDef *msg_p = NULL; // int CC_id; - msg_p = itti_alloc_new_message (TASK_ENB_APP, RRC_CONFIGURATION_REQ); + msg_p = itti_alloc_new_message (TASK_GNB_APP, NRRRC_CONFIGURATION_REQ); - if (RC.rrc[enb_id]) { - RCconfig_NRRRC(msg_p,enb_id, RC.rrc[enb_id]); + if (RC.nr_rrc[gnb_id]) { + RCconfig_NRRRC(msg_p,gnb_id, RC.nr_rrc[gnb_id]); - LOG_I(ENB_APP,"Sending configuration message to RRC task\n"); - itti_send_msg_to_task (TASK_RRC_GNB, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p); + LOG_I(GNB_APP,"Sending configuration message to NR_RRC task\n"); + itti_send_msg_to_task (TASK_RRC_GNB, GNB_MODULE_ID_TO_INSTANCE(gnb_id), msg_p); } - else AssertFatal(0,"RRC context for eNB %d not allocated\n",enb_id); + else AssertFatal(0,"NRRRC context for gNB %d not allocated\n",gnb_id); } /*------------------------------------------------------------------------------*/ # if defined(ENABLE_USE_MME) -static uint32_t eNB_app_register(uint32_t enb_id_start, uint32_t enb_id_end)//, const Enb_properties_array_t *enb_properties) +static uint32_t gNB_app_register(uint32_t gnb_id_start, uint32_t gnb_id_end)//, const Enb_properties_array_t *enb_properties) { - uint32_t enb_id; + uint32_t gnb_id; MessageDef *msg_p; - uint32_t register_enb_pending = 0; + uint32_t register_gnb_pending = 0; - for (enb_id = enb_id_start; (enb_id < enb_id_end) ; enb_id++) { + for (gnb_id = gnb_id_start; (gnb_id < gnb_id_end) ; gnb_id++) { { - s1ap_register_enb_req_t *s1ap_register_eNB; + s1ap_register_gnb_req_t *s1ap_register_gNB; /* note: there is an implicit relationship between the data structure and the message name */ - msg_p = itti_alloc_new_message (TASK_ENB_APP, S1AP_REGISTER_ENB_REQ); + msg_p = itti_alloc_new_message (TASK_GNB_APP, S1AP_REGISTER_GNB_REQ); - RCconfig_S1(msg_p, enb_id); + RCconfig_S1(msg_p, gnb_id); - if (enb_id == 0) RCconfig_gtpu(); + if (gnb_id == 0) RCconfig_gtpu(); - s1ap_register_eNB = &S1AP_REGISTER_ENB_REQ(msg_p); - LOG_I(ENB_APP,"default drx %d\n",s1ap_register_eNB->default_drx); + s1ap_register_gNB = &S1AP_REGISTER_GNB_REQ(msg_p); + LOG_I(GNB_APP,"default drx %d\n",s1ap_register_gNB->default_drx); - LOG_I(ENB_APP,"[eNB %d] eNB_app_register for instance %d\n", enb_id, ENB_MODULE_ID_TO_INSTANCE(enb_id)); + LOG_I(GNB_APP,"[gNB %d] gNB_app_register for instance %d\n", gnb_id, GNB_MODULE_ID_TO_INSTANCE(gnb_id)); - itti_send_msg_to_task (TASK_S1AP, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p); + itti_send_msg_to_task (TASK_S1AP, GNB_MODULE_ID_TO_INSTANCE(gnb_id), msg_p); - register_enb_pending++; + register_gnb_pending++; } } - return register_enb_pending; + return register_gnb_pending; } # endif #endif /*------------------------------------------------------------------------------*/ -void *eNB_app_task(void *args_p) +void *gNB_app_task(void *args_p) { #if defined(ENABLE_ITTI) - uint32_t enb_nb = RC.nb_inst; - uint32_t enb_id_start = 0; - uint32_t enb_id_end = enb_id_start + enb_nb; + uint32_t gnb_nb = RC.nb_nr_inst; + uint32_t gnb_id_start = 0; + uint32_t gnb_id_end = gnb_id_start + gnb_nb; # if defined(ENABLE_USE_MME) - uint32_t register_enb_pending; - uint32_t registered_enb; - long enb_register_retry_timer_id; + uint32_t register_gnb_pending; + uint32_t registered_gnb; + long gnb_register_retry_timer_id; # endif - uint32_t enb_id; + uint32_t gnb_id; MessageDef *msg_p = NULL; const char *msg_name = NULL; instance_t instance; @@ -157,99 +157,99 @@ void *eNB_app_task(void *args_p) /* for no gcc warnings */ (void)instance; - itti_mark_task_ready (TASK_ENB_APP); + itti_mark_task_ready (TASK_GNB_APP); LOG_I(PHY, "%s() Task ready initialise structures\n", __FUNCTION__); - RCconfig_L1(); + //RCconfig_L1(); - RCconfig_macrlc(); + //RCconfig_macrlc(); LOG_I(PHY, "%s() RC.nb_L1_inst:%d\n", __FUNCTION__, RC.nb_L1_inst); - if (RC.nb_L1_inst>0) AssertFatal(l1_north_init_eNB()==0,"could not initialize L1 north interface\n"); + if (RC.nb_L1_inst>0) AssertFatal(l1_north_init_gNB()==0,"could not initialize L1 north interface\n"); - AssertFatal (enb_nb <= RC.nb_inst, - "Number of eNB is greater than eNB defined in configuration file (%d/%d)!", - enb_nb, RC.nb_inst); + AssertFatal (gnb_nb <= RC.nb_nr_inst, + "Number of gNB is greater than gNB defined in configuration file (%d/%d)!", + gnb_nb, RC.nb_nr_inst); - LOG_I(ENB_APP,"Allocating eNB_RRC_INST for %d instances\n",RC.nb_inst); + LOG_I(GNB_APP,"Allocating gNB_RRC_INST for %d instances\n",RC.nb_nr_inst); - RC.rrc = (eNB_RRC_INST **)malloc(RC.nb_inst*sizeof(eNB_RRC_INST *)); - LOG_I(PHY, "%s() RC.nb_inst:%d RC.rrc:%p\n", __FUNCTION__, RC.nb_inst, RC.rrc); + RC.rrc = (gNB_RRC_INST **)malloc(RC.nb_nr_inst*sizeof(gNB_RRC_INST *)); + LOG_I(PHY, "%s() RC.nb_nr_inst:%d RC.rrc:%p\n", __FUNCTION__, RC.nb_nr_inst, RC.rrc); - for (enb_id = enb_id_start; (enb_id < enb_id_end) ; enb_id++) { - RC.rrc[enb_id] = (eNB_RRC_INST*)malloc(sizeof(eNB_RRC_INST)); - LOG_I(PHY, "%s() Creating RRC instance RC.rrc[%d]:%p (%d of %d)\n", __FUNCTION__, enb_id, RC.rrc[enb_id], enb_id+1, enb_id_end); - memset((void *)RC.rrc[enb_id],0,sizeof(eNB_RRC_INST)); - configure_rrc(enb_id); + for (gnb_id = gnb_id_start; (gnb_id < gnb_id_end) ; gnb_id++) { + RC.rrc[gnb_id] = (gNB_RRC_INST*)malloc(sizeof(gNB_RRC_INST)); + LOG_I(PHY, "%s() Creating RRC instance RC.rrc[%d]:%p (%d of %d)\n", __FUNCTION__, gnb_id, RC.rrc[gnb_id], gnb_id+1, gnb_id_end); + memset((void *)RC.rrc[gnb_id],0,sizeof(gNB_RRC_INST)); + configure_nrrrc(gnb_id); } # if defined(ENABLE_USE_MME) - /* Try to register each eNB */ - registered_enb = 0; - register_enb_pending = eNB_app_register (enb_id_start, enb_id_end);//, enb_properties_p); + /* Try to register each gNB */ + registered_gnb = 0; + register_gnb_pending = gNB_app_register (gnb_id_start, gnb_id_end);//, gnb_properties_p); # else /* Start L2L1 task */ - msg_p = itti_alloc_new_message(TASK_ENB_APP, INITIALIZE_MESSAGE); + msg_p = itti_alloc_new_message(TASK_GNB_APP, INITIALIZE_MESSAGE); itti_send_msg_to_task(TASK_L2L1, INSTANCE_DEFAULT, msg_p); # endif do { // Wait for a message - itti_receive_msg (TASK_ENB_APP, &msg_p); + itti_receive_msg (TASK_GNB_APP, &msg_p); msg_name = ITTI_MSG_NAME (msg_p); instance = ITTI_MSG_INSTANCE (msg_p); switch (ITTI_MSG_ID(msg_p)) { case TERMINATE_MESSAGE: - LOG_W(ENB_APP, " *** Exiting ENB_APP thread\n"); + LOG_W(GNB_APP, " *** Exiting GNB_APP thread\n"); itti_exit_task (); break; case MESSAGE_TEST: - LOG_I(ENB_APP, "Received %s\n", ITTI_MSG_NAME(msg_p)); + LOG_I(GNB_APP, "Received %s\n", ITTI_MSG_NAME(msg_p)); break; # if defined(ENABLE_USE_MME) case S1AP_REGISTER_ENB_CNF: - LOG_I(ENB_APP, "[eNB %d] Received %s: associated MME %d\n", instance, msg_name, + LOG_I(GNB_APP, "[gNB %d] Received %s: associated MME %d\n", instance, msg_name, S1AP_REGISTER_ENB_CNF(msg_p).nb_mme); - DevAssert(register_enb_pending > 0); - register_enb_pending--; + DevAssert(register_gnb_pending > 0); + register_gnb_pending--; - /* Check if at least eNB is registered with one MME */ + /* Check if at least gNB is registered with one MME */ if (S1AP_REGISTER_ENB_CNF(msg_p).nb_mme > 0) { - registered_enb++; + registered_gnb++; } - /* Check if all register eNB requests have been processed */ - if (register_enb_pending == 0) { - if (registered_enb == enb_nb) { - /* If all eNB are registered, start L2L1 task */ + /* Check if all register gNB requests have been processed */ + if (register_gnb_pending == 0) { + if (registered_gnb == gnb_nb) { + /* If all gNB are registered, start L2L1 task */ MessageDef *msg_init_p; - msg_init_p = itti_alloc_new_message (TASK_ENB_APP, INITIALIZE_MESSAGE); + msg_init_p = itti_alloc_new_message (TASK_GNB_APP, INITIALIZE_MESSAGE); itti_send_msg_to_task (TASK_L2L1, INSTANCE_DEFAULT, msg_init_p); } else { - uint32_t not_associated = enb_nb - registered_enb; + uint32_t not_associated = gnb_nb - registered_gnb; - LOG_W(ENB_APP, " %d eNB %s not associated with a MME, retrying registration in %d seconds ...\n", - not_associated, not_associated > 1 ? "are" : "is", ENB_REGISTER_RETRY_DELAY); + LOG_W(GNB_APP, " %d gNB %s not associated with a MME, retrying registration in %d seconds ...\n", + not_associated, not_associated > 1 ? "are" : "is", GNB_REGISTER_RETRY_DELAY); - /* Restart the eNB registration process in ENB_REGISTER_RETRY_DELAY seconds */ - if (timer_setup (ENB_REGISTER_RETRY_DELAY, 0, TASK_ENB_APP, INSTANCE_DEFAULT, TIMER_ONE_SHOT, - NULL, &enb_register_retry_timer_id) < 0) { - LOG_E(ENB_APP, " Can not start eNB register retry timer, use \"sleep\" instead!\n"); + /* Restart the gNB registration process in GNB_REGISTER_RETRY_DELAY seconds */ + if (timer_setup (GNB_REGISTER_RETRY_DELAY, 0, TASK_GNB_APP, INSTANCE_DEFAULT, TIMER_ONE_SHOT, + NULL, &gnb_register_retry_timer_id) < 0) { + LOG_E(GNB_APP, " Can not start gNB register retry timer, use \"sleep\" instead!\n"); - sleep(ENB_REGISTER_RETRY_DELAY); + sleep(GNB_REGISTER_RETRY_DELAY); /* Restart the registration process */ - registered_enb = 0; - register_enb_pending = eNB_app_register (enb_id_start, enb_id_end);//, enb_properties_p); + registered_gnb = 0; + register_gnb_pending = gNB_app_register (gnb_id_start, gnb_id_end);//, gnb_properties_p); } } } @@ -257,26 +257,26 @@ void *eNB_app_task(void *args_p) break; case S1AP_DEREGISTERED_ENB_IND: - LOG_W(ENB_APP, "[eNB %d] Received %s: associated MME %d\n", instance, msg_name, + LOG_W(GNB_APP, "[gNB %d] Received %s: associated MME %d\n", instance, msg_name, S1AP_DEREGISTERED_ENB_IND(msg_p).nb_mme); /* TODO handle recovering of registration */ break; case TIMER_HAS_EXPIRED: - LOG_I(ENB_APP, " Received %s: timer_id %ld\n", msg_name, TIMER_HAS_EXPIRED(msg_p).timer_id); + LOG_I(GNB_APP, " Received %s: timer_id %ld\n", msg_name, TIMER_HAS_EXPIRED(msg_p).timer_id); - if (TIMER_HAS_EXPIRED (msg_p).timer_id == enb_register_retry_timer_id) { + if (TIMER_HAS_EXPIRED (msg_p).timer_id == gnb_register_retry_timer_id) { /* Restart the registration process */ - registered_enb = 0; - register_enb_pending = eNB_app_register (enb_id_start, enb_id_end);//, enb_properties_p); + registered_gnb = 0; + register_gnb_pending = gNB_app_register(gnb_id_start, gnb_id_end);//, gnb_properties_p); } break; # endif default: - LOG_E(ENB_APP, "Received unexpected message %s\n", msg_name); + LOG_E(GNB_APP, "Received unexpected message %s\n", msg_name); break; } diff --git a/openair2/ENB_APP/gnb_config.c b/openair2/ENB_APP/gnb_config.c index 9e341cd7ef136849f9379f86ed875d1bb1b4cb65..08273aca8d14a0b2a364f284086cc1e3c77ec483 100644 --- a/openair2/ENB_APP/gnb_config.c +++ b/openair2/ENB_APP/gnb_config.c @@ -32,184 +32,193 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { - int num_gnbs = 0; - int num_component_carriers = 0; - int j,k = 0; - int32_t gnb_id = 0; - - int nb_cc = 0; - char* frame_type = NULL; - char* prefix_type = NULL; - - int32_t eutra_band = 0; - long long int downlink_frequency = 0; - int32_t uplink_frequency_offset = 0; - int32_t Nid_cell = 0; -// int32_t Nid_cell_mbsfn = 0; - int32_t N_RB_DL = 0; - int32_t nb_antenna_ports = 0; + int num_gnbs = 0; + int num_component_carriers = 0; + int j,k = 0; + int32_t gnb_id = 0; + + int nb_cc = 0; + char* frame_type = NULL; + char* DL_prefix_type = NULL; + char* UL_prefix_type = NULL; + + int32_t eutra_band = 0; + long long int downlink_frequency = 0; + int32_t uplink_frequency_offset = 0; + int32_t Nid_cell = 0; + int32_t N_RB_DL = 0; + int32_t nb_antenna_ports = 0; ///NR + //MIB + int32_t MIB_subCarrierSpacingCommon = 0; + int32_t MIB_dmrs_TypeA_Position = 0; + uint32_t pdcch_ConfigSIB1 = 0; + + //SIB1 + int32_t SIB1_frequencyOffsetSSB = 0; + int32_t SIB1_ssb_PeriodicityServingCell = 0; + int32_t SIB1_ss_PBCH_BlockPower = 0; //NR FrequencyInfoDL - long absoluteFrequencySSB = 0; - uint32_t ssb_SubcarrierOffset = 0; - long DL_FreqBandIndicatorNR = 0; - long DL_absoluteFrequencyPointA = 0; + int32_t absoluteFrequencySSB = 0; + uint32_t ssb_SubcarrierOffset = 0; + int32_t DL_FreqBandIndicatorNR = 0; + int32_t DL_absoluteFrequencyPointA = 0; //NR DL SCS-SpecificCarrier - uint32_t DL_offsetToCarrier = 0; - long DL_SubcarrierSpacing = 0; - long DL_SCS_SpecificCarrier_k0 = 0; - uint32_t DL_carrierBandwidth = 0; + uint32_t DL_offsetToCarrier = 0; + int32_t DL_SubcarrierSpacing = 0; + int32_t DL_SCS_SpecificCarrier_k0 = 0; + uint32_t DL_carrierBandwidth = 0; // NR BWP-DownlinkCommon - uint32_t DL_locationAndBandwidth = 0; - //NR_prefix_type_t DL_prefix_type[MAX_NUM_CCs]; + uint32_t DL_locationAndBandwidth = 0; //NR FrequencyInfoUL - long UL_FreqBandIndicatorNR = 0; - long UL_absoluteFrequencyPointA = 0; - long FrequencyInfoUL_p_Max = 0; - long frequencyShift7p5khz = 0; + int32_t UL_FreqBandIndicatorNR = 0; + int32_t UL_absoluteFrequencyPointA = 0; + int32_t FrequencyInfoUL_p_Max = 0; + int32_t frequencyShift7p5khz = 0; //NR UL SCS-SpecificCarrier - uint32_t UL_offsetToCarrier = 0; - long UL_SubcarrierSpacing = 0; - long UL_SCS_SpecificCarrier_k0 = 0; - uint32_t UL_carrierBandwidth = 0; + uint32_t UL_offsetToCarrier = 0; + int32_t UL_SubcarrierSpacing = 0; + int32_t UL_SCS_SpecificCarrier_k0 = 0; + uint32_t UL_carrierBandwidth = 0; // NR BWP-UplinkCommon - uint32_t UL_locationAndBandwidth = 0; - //NR_prefix_type_t UL_prefix_type; + uint32_t UL_locationAndBandwidth = 0; - - long ssb_periodicityServingCell = 0; - long dmrs_TypeA_Position = 0; - long NIA_SubcarrierSpacing = 0; - long ss_PBCH_BlockPower = 0; + int32_t subCarrierSpacingCommon = 0; + uint32_t pdcch_ConfigSIB1 = 0; + int32_t frequencyOffsetSSB = 0; + int32_t ServingCellConfigCommon_ssb_periodicityServingCell = 0; + int32_t ServingCellConfigCommon_dmrs_TypeA_Position = 0; + int32_t NIA_SubcarrierSpacing = 0; + int32_t ServingCellConfigCommon_ss_PBCH_BlockPower = 0; //NR TDD-UL-DL-ConfigCommon - long referenceSubcarrierSpacing = 0; - long dl_UL_TransmissionPeriodicity = 0; - long nrofDownlinkSlots = 0; - long nrofDownlinkSymbols = 0; - long nrofUplinkSlots = 0; - long nrofUplinkSymbols = 0; + int32_t referenceSubcarrierSpacing = 0; + int32_t dl_UL_TransmissionPeriodicity = 0; + int32_t nrofDownlinkSlots = 0; + int32_t nrofDownlinkSymbols = 0; + int32_t nrofUplinkSlots = 0; + int32_t nrofUplinkSymbols = 0; //NR RACH-ConfigCommon - long rach_totalNumberOfRA_Preambles = 0; - long rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice = 0; - long rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth = 0; - long rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth = 0; - long rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf = 0; - long rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one = 0; - long rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two = 0; - uint32_t rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four = 0; - uint32_t rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight = 0; - uint32_t rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen = 0; - char* rach_groupBconfigured = NULL; - long rach_ra_Msg3SizeGroupA = 0; - long rach_messagePowerOffsetGroupB = 0; - long rach_numberOfRA_PreamblesGroupA = 0; - long rach_ra_ContentionResolutionTimer = 0; - long rsrp_ThresholdSSB = 0; - long rsrp_ThresholdSSB_SUL = 0; - long prach_RootSequenceIndex_choice = 0; - uint32_t prach_RootSequenceIndex_l839 = 0; - uint32_t prach_RootSequenceIndex_l139 = 0; - long prach_msg1_SubcarrierSpacing = 0; - long restrictedSetConfig = 0; - long msg3_transformPrecoding = 0; + int32_t rach_totalNumberOfRA_Preambles = 0; + int32_t rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice = 0; + int32_t rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth = 0; + int32_t rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth = 0; + int32_t rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf = 0; + int32_t rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one = 0; + int32_t rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two = 0; + uint32_t rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four = 0; + uint32_t rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight = 0; + uint32_t rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen = 0; + char* rach_groupBconfigured = NULL; + int32_t rach_ra_Msg3SizeGroupA = 0; + int32_t rach_messagePowerOffsetGroupB = 0; + int32_t rach_numberOfRA_PreamblesGroupA = 0; + int32_t rach_ra_ContentionResolutionTimer = 0; + int32_t rsrp_ThresholdSSB = 0; + int32_t rsrp_ThresholdSSB_SUL = 0; + int32_t prach_RootSequenceIndex_choice = 0; + uint32_t prach_RootSequenceIndex_l839 = 0; + uint32_t prach_RootSequenceIndex_l139 = 0; + int32_t prach_msg1_SubcarrierSpacing = 0; + int32_t restrictedSetConfig = 0; + int32_t msg3_transformPrecoding = 0; //ssb-perRACH-OccasionAndCB-PreamblesPerSSB not sure //NR RACH-ConfigGeneric - long prach_ConfigurationIndex = 0; - long prach_msg1_FDM = 0; - long prach_msg1_FrequencyStart = 0; - long zeroCorrelationZoneConfig = 0; - long preambleReceivedTargetPower = 0; - long preambleTransMax = 0; - long powerRampingStep = 0; - long ra_ResponseWindow = 0; + int32_t prach_ConfigurationIndex = 0; + int32_t prach_msg1_FDM = 0; + int32_t prach_msg1_FrequencyStart = 0; + int32_t zeroCorrelationZoneConfig = 0; + int32_t preambleReceivedTargetPower = 0; + int32_t preambleTransMax = 0; + int32_t powerRampingStep = 0; + int32_t ra_ResponseWindow = 0; //PUSCH-ConfigCommon - char* groupHoppingEnabledTransformPrecoding = NULL; - long msg3_DeltaPreamble = 0; - long p0_NominalWithGrant = 0; + char* groupHoppingEnabledTransformPrecoding = NULL; + int32_t msg3_DeltaPreamble = 0; + int32_t p0_NominalWithGrant = 0; ///PUSCH-TimeDomainResourceAllocation - long PUSCH_TimeDomainResourceAllocation_k2 = 0; - long PUSCH_TimeDomainResourceAllocation_mappingType = 0; + int32_t PUSCH_TimeDomainResourceAllocation_k2 = 0; + int32_t PUSCH_TimeDomainResourceAllocation_mappingType = 0; //PUCCH-ConfigCommon - long pucch_GroupHopping = 0; - long p0_nominal = 0; + int32_t pucch_GroupHopping = 0; + int32_t p0_nominal = 0; //PDSCH-ConfigCOmmon //PDSCH-TimeDomainResourceAllocation - long PDSCH_TimeDomainResourceAllocation_k0 = 0; - long PDSCH_TimeDomainResourceAllocation_mappingType = 0; + int32_t PDSCH_TimeDomainResourceAllocation_k0 = 0; + int32_t PDSCH_TimeDomainResourceAllocation_mappingType = 0; //RateMatchPattern is used to configure one rate matching pattern for PDSCH - long rateMatchPatternId = 0; - long RateMatchPattern_patternType = 0; - long symbolsInResourceBlock = 0; - long periodicityAndPattern = 0; - long RateMatchPattern_controlResourceSet = 0; - long RateMatchPattern_subcarrierSpacing = 0; - long RateMatchPattern_mode = 0; + int32_t rateMatchPatternId = 0; + int32_t RateMatchPattern_patternType = 0; + int32_t symbolsInResourceBlock = 0; + int32_t periodicityAndPattern = 0; + int32_t RateMatchPattern_controlResourceSet = 0; + int32_t RateMatchPattern_subcarrierSpacing = 0; + int32_t RateMatchPattern_mode = 0; //PDCCH-ConfigCommon - long searchSpaceSIB1 = 0; - long searchSpaceOtherSystemInformation = 0; - long pagingSearchSpace = 0; - long ra_SearchSpace = 0; - long rach_ra_ControlResourceSet = 0; + int32_t searchSpaceSIB1 = 0; + int32_t searchSpaceOtherSystemInformation = 0; + int32_t pagingSearchSpace = 0; + int32_t ra_SearchSpace = 0; + int32_t rach_ra_ControlResourceSet = 0; //NR PDCCH-ConfigCommon commonControlResourcesSets - long PDCCH_common_controlResourceSetId = 0; - long PDCCH_common_ControlResourceSet_duration = 0; - long PDCCH_cce_REG_MappingType = 0; - long PDCCH_reg_BundleSize = 0; - long PDCCH_interleaverSize = 0; - long PDCCH_shiftIndex = 0; - long PDCCH_precoderGranularity = 0; - char* tci_PresentInDCI = NULL; + int32_t PDCCH_common_controlResourceSetId = 0; + int32_t PDCCH_common_ControlResourceSet_duration = 0; + int32_t PDCCH_cce_REG_MappingType = 0; + int32_t PDCCH_reg_BundleSize = 0; + int32_t PDCCH_interleaverSize = 0; + int32_t PDCCH_shiftIndex = 0; + int32_t PDCCH_precoderGranularity = 0; + char* tci_PresentInDCI = NULL; //NR PDCCH-ConfigCommon commonSearchSpaces - long SearchSpaceId = 0; - long commonSearchSpaces_controlResourceSetId = 0; - long SearchSpace_monitoringSlotPeriodicityAndOffset_choice = 0; - long SearchSpace_monitoringSlotPeriodicityAndOffset_sl1 = 0; - long SearchSpace_monitoringSlotPeriodicityAndOffset_sl2 = 0; - long SearchSpace_monitoringSlotPeriodicityAndOffset_sl4 = 0; - long SearchSpace_monitoringSlotPeriodicityAndOffset_sl5 = 0; - long SearchSpace_monitoringSlotPeriodicityAndOffset_sl8 = 0; - long SearchSpace_monitoringSlotPeriodicityAndOffset_sl10 = 0; - long SearchSpace_monitoringSlotPeriodicityAndOffset_sl16 = 0; - long SearchSpace_monitoringSlotPeriodicityAndOffset_sl20 = 0; - long SearchSpace_nrofCandidates_aggregationLevel1 = 0; - long SearchSpace_nrofCandidates_aggregationLevel2 = 0; - long SearchSpace_nrofCandidates_aggregationLevel4 = 0; - long SearchSpace_nrofCandidates_aggregationLevel8 = 0; - long SearchSpace_nrofCandidates_aggregationLevel16 = 0; - long SearchSpace_searchSpaceType = 0; - long Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1 = 0; - long Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2 = 0; - long Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4 = 0; - long Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8 = 0; - long Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16 = 0; - long Common_dci_Format2_3_monitoringPeriodicity = 0; - long Common_dci_Format2_3_nrofPDCCH_Candidates = 0; - long ue_Specific__dci_Formats = 0; - - - int32_t my_int; + int32_t SearchSpaceId = 0; + int32_t commonSearchSpaces_controlResourceSetId = 0; + int32_t SearchSpace_monitoringSlotPeriodicityAndOffset_choice = 0; + int32_t SearchSpace_monitoringSlotPeriodicityAndOffset_sl1 = 0; + int32_t SearchSpace_monitoringSlotPeriodicityAndOffset_sl2 = 0; + int32_t SearchSpace_monitoringSlotPeriodicityAndOffset_sl4 = 0; + int32_t SearchSpace_monitoringSlotPeriodicityAndOffset_sl5 = 0; + int32_t SearchSpace_monitoringSlotPeriodicityAndOffset_sl8 = 0; + int32_t SearchSpace_monitoringSlotPeriodicityAndOffset_sl10 = 0; + int32_t SearchSpace_monitoringSlotPeriodicityAndOffset_sl16 = 0; + int32_t SearchSpace_monitoringSlotPeriodicityAndOffset_sl20 = 0; + int32_t SearchSpace_nrofCandidates_aggregationLevel1 = 0; + int32_t SearchSpace_nrofCandidates_aggregationLevel2 = 0; + int32_t SearchSpace_nrofCandidates_aggregationLevel4 = 0; + int32_t SearchSpace_nrofCandidates_aggregationLevel8 = 0; + int32_t SearchSpace_nrofCandidates_aggregationLevel16 = 0; + int32_t SearchSpace_searchSpaceType = 0; + int32_t Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1 = 0; + int32_t Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2 = 0; + int32_t Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4 = 0; + int32_t Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8 = 0; + int32_t Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16 = 0; + int32_t Common_dci_Format2_3_monitoringPeriodicity = 0; + int32_t Common_dci_Format2_3_nrofPDCCH_Candidates = 0; + int32_t ue_Specific__dci_Formats = 0; + + + int32_t my_int; paramdef_t GNBSParams[] = GNBSPARAMS_DESC; - + ////////// Identification parameters paramdef_t GNBParams[] = GNBPARAMS_DESC; paramlist_def_t GNBParamList = {GNB_CONFIG_STRING_GNB_LIST,NULL,0}; - + ////////// Physical parameters checkedparam_t config_check_CCparams[] = CCPARAMS_CHECK; paramdef_t CCsParams[] = CCPARAMS_DESC; paramlist_def_t CCsParamList = {GNB_CONFIG_STRING_COMPONENT_CARRIERS,NULL,0}; @@ -217,7 +226,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { paramdef_t SRB1Params[] = SRB1PARAMS_DESC; /* get global parameters, defined outside any section in the config file */ - + config_get( GNBSParams,sizeof(GNBSParams)/sizeof(paramdef_t),NULL); num_gnbs = GNBSParams[GNB_ACTIVE_GNBS_IDX].numelt; AssertFatal (i<num_gnbs,"Failed to parse config file no %ith element in %s \n",i, GNB_CONFIG_STRING_ACTIVE_GNBS); @@ -241,7 +250,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { #endif if (num_gnbs>0) { - // Output a list of all gNBs. + // Output a list of all gNBs. ////////// Identification parameters config_getlist( &GNBParamList,GNBParams,sizeof(GNBParams)/sizeof(paramdef_t),NULL); if (GNBParamList.paramarray[i][GNB_GNB_ID_IDX].uptr == NULL) { @@ -316,18 +325,30 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { // "Failed to parse gNB configuration file %s, gnb %d illegal tdd_config_s %d (should be 0-%d)!", // RC.config_file_name, i, tdd_config_s, TDD_Config__specialSubframePatterns_ssp8); - if (!prefix_type){ + if (!DL_prefix_type){ AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d define %s: NORMAL,EXTENDED!\n", - RC.config_file_name, i, GNB_CONFIG_STRING_PREFIX_TYPE); - }else if (strcmp(prefix_type, "NORMAL") == 0) { - NRRRC_CONFIGURATION_REQ (msg_p).prefix_type[j] = NORMAL; - }else if (strcmp(prefix_type, "EXTENDED") == 0) { - NRRRC_CONFIGURATION_REQ (msg_p).prefix_type[j] = EXTENDED; + RC.config_file_name, i, GNB_CONFIG_STRING_DL_PREFIX_TYPE); + }else if (strcmp(DL_prefix_type, "NORMAL") == 0) { + NRRRC_CONFIGURATION_REQ (msg_p).DL_prefix_type[j] = NORMAL; + }else if (strcmp(DL_prefix_type, "EXTENDED") == 0) { + NRRRC_CONFIGURATION_REQ (msg_p).DL_prefix_type[j] = EXTENDED; }else { - AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for prefix_type choice: NORMAL or EXTENDED !\n", - RC.config_file_name, i, prefix_type); + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for DL_prefix_type choice: NORMAL or EXTENDED !\n", + RC.config_file_name, i, DL_prefix_type); } + if (!UL_prefix_type){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d define %s: NORMAL,EXTENDED!\n", + RC.config_file_name, i, GNB_CONFIG_STRING_UL_PREFIX_TYPE); + }else if (strcmp(UL_prefix_type, "NORMAL") == 0) { + NRRRC_CONFIGURATION_REQ (msg_p).UL_prefix_type[j] = NORMAL; + }else if (strcmp(UL_prefix_type, "EXTENDED") == 0) { + NRRRC_CONFIGURATION_REQ (msg_p).UL_prefix_type[j] = EXTENDED; + }else { + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for UL_prefix_type choice: NORMAL or EXTENDED !\n", + RC.config_file_name, i, UL_prefix_type); + } + NRRRC_CONFIGURATION_REQ (msg_p).eutra_band[j] = eutra_band; NRRRC_CONFIGURATION_REQ (msg_p).downlink_frequency[j] = (uint32_t) downlink_frequency; NRRRC_CONFIGURATION_REQ (msg_p).uplink_frequency_offset[j] = (unsigned int) uplink_frequency_offset; @@ -388,11 +409,57 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { //////////////////////////////////////////////////////////////////////////////// //---------------------------NR--------Configuration--------------------------// //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////MIB/////////////////////////////// + NRRRC_CONFIGURATION_REQ (msg_p).MIB_subCarrierSpacingCommon[j] = MIB_subCarrierSpacingCommon; + if ((MIB_subCarrierSpacingCommon !=15) && (MIB_subCarrierSpacingCommon !=30) && (MIB_subCarrierSpacingCommon !=60) && (MIB_subCarrierSpacingCommon !=120)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for MIB_subCarrierSpacingCommon choice: 15,30,60,120 !\n", + RC.config_file_name, i, MIB_subCarrierSpacingCommon); + } + + NRRRC_CONFIGURATION_REQ (msg_p).MIB_dmrs_TypeA_Position[j] = MIB_dmrs_TypeA_Position; + if ((MIB_dmrs_TypeA_Position !=2) && (MIB_dmrs_TypeA_Position !=3)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for MIB_dmrs_TypeA_Position choice:2,3 !\n", + RC.config_file_name, i, MIB_dmrs_TypeA_Position); + } + + NRRRC_CONFIGURATION_REQ (msg_p).pdcch_ConfigSIB1[j] = pdcch_ConfigSIB1; + if ((pdcch_ConfigSIB1 <0) || (pdcch_ConfigSIB1 > 255)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for pdcch_ConfigSIB1 choice: 0..3279165 !\n", + RC.config_file_name, i, pdcch_ConfigSIB1); + } + + ////////////////////////////////SIB1////////////////////////////// + + if (strcmp(SIB1_frequencyOffsetSSB , "khz-5") == 0) { + NRRRC_CONFIGURATION_REQ (msg_p).SIB1_frequencyOffsetSSB[j] = -5; + }else if (strcmp(SIB1_frequencyOffsetSSB , "khz5") == 0) { + NRRRC_CONFIGURATION_REQ (msg_p).SIB1_frequencyOffsetSSB[j] = 5; + }else { + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SIB1_frequencyOffsetSSB !\n", + RC.config_file_name, i, SIB1_frequencyOffsetSSB); + } + + NRRRC_CONFIGURATION_REQ (msg_p).SIB1_ssb_PeriodicityServingCell[j] = SIB1_ssb_PeriodicityServingCell; + if ((SIB1_ssb_PeriodicityServingCell !=5) && + (SIB1_ssb_PeriodicityServingCell !=10) && + (SIB1_ssb_PeriodicityServingCell !=20) && + (SIB1_ssb_PeriodicityServingCell !=40) && + (SIB1_ssb_PeriodicityServingCell !=80) && + (SIB1_ssb_PeriodicityServingCell !=160)&&){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SIB1_ssb_PeriodicityServingCell choice: 5,10,20,40,80,160 !\n", + RC.config_file_name, i, SIB1_ssb_PeriodicityServingCell); + } + + NRRRC_CONFIGURATION_REQ (msg_p).SIB1_ss_PBCH_BlockPower[j] = SIB1_ss_PBCH_BlockPower; + if ((SIB1_ss_PBCH_BlockPower < -60) || (SIB1_ss_PBCH_BlockPower > 50)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SIB1_ss_PBCH_BlockPower choice: -60..50 !\n", + RC.config_file_name, i, SIB1_ss_PBCH_BlockPower); + } ////////////////////////////////NR FrequencyInfoDL////////////////////////////// NRRRC_CONFIGURATION_REQ (msg_p).absoluteFrequencySSB[j] = absoluteFrequencySSB; if ((absoluteFrequencySSB <0) || (absoluteFrequencySSB > 3279165)){ - AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for FreqBandIndicatorNR choice: 0..3279165 !\n", + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for absoluteFrequencySSB choice: 0..3279165 !\n", RC.config_file_name, i, absoluteFrequencySSB); } @@ -556,49 +623,50 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { RC.config_file_name, i, UL_locationAndBandwidth); } - switch (ssb_periodicityServingCell) { + switch (ServingCellConfigCommon_ssb_periodicityServingCell) { case 5: - NRRRC_CONFIGURATION_REQ (msg_p).ssb_periodicityServingCell[j] = ServingCellConfigCommon__ssb_periodicityServingCell_ms5; + NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] = ServingCellConfigCommon__ssb_periodicityServingCell_ms5; break; case 10: - NRRRC_CONFIGURATION_REQ (msg_p).ssb_periodicityServingCell[j] = ServingCellConfigCommon__ssb_periodicityServingCell_ms10; + NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] = ServingCellConfigCommon__ssb_periodicityServingCell_ms10; break; case 20: - NRRRC_CONFIGURATION_REQ (msg_p).ssb_periodicityServingCell[j] = ServingCellConfigCommon__ssb_periodicityServingCell_ms20; + NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] = ServingCellConfigCommon__ssb_periodicityServingCell_ms20; break; case 40: - NRRRC_CONFIGURATION_REQ (msg_p).ssb_periodicityServingCell[j] = ServingCellConfigCommon__ssb_periodicityServingCell_ms40; + NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] = ServingCellConfigCommon__ssb_periodicityServingCell_ms40; break; case 80: - NRRRC_CONFIGURATION_REQ (msg_p).ssb_periodicityServingCell[j] = ServingCellConfigCommon__ssb_periodicityServingCell_ms80; + NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] = ServingCellConfigCommon__ssb_periodicityServingCell_ms80; break; case 160: - NRRRC_CONFIGURATION_REQ (msg_p).ssb_periodicityServingCell[j] = ServingCellConfigCommon__ssb_periodicityServingCell_ms160; + NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] = ServingCellConfigCommon__ssb_periodicityServingCell_ms160; break; default: - AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for ssb_periodicityServingCell choice: -6,0,6 !\n", - RC.config_file_name, i, ssb_periodicityServingCell); + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for ServingCellConfigCommon_ssb_periodicityServingCell choice: -6,0,6 !\n", + RC.config_file_name, i, ServingCellConfigCommon_ssb_periodicityServingCell); break; } - switch (dmrs_TypeA_Position) { + + switch (ServingCellConfigCommon_dmrs_TypeA_Position) { case 2: - NRRRC_CONFIGURATION_REQ (msg_p).dmrs_TypeA_Position[j] = ServingCellConfigCommon__dmrs_TypeA_Position_pos2; + NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_dmrs_TypeA_Position[j] = ServingCellConfigCommon__dmrs_TypeA_Position_pos2; break; case 3: - NRRRC_CONFIGURATION_REQ (msg_p).dmrs_TypeA_Position[j] = ServingCellConfigCommon__dmrs_TypeA_Position_pos3; + NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_dmrs_TypeA_Position[j] = ServingCellConfigCommon__dmrs_TypeA_Position_pos3; break; default: - AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for dmrs_TypeA_Position choice: -6,0,6 !\n", - RC.config_file_name, i, dmrs_TypeA_Position); + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for ServingCellConfigCommon_dmrs_TypeA_Position choice: -6,0,6 !\n", + RC.config_file_name, i, ServingCellConfigCommon_dmrs_TypeA_Position); break; } @@ -616,10 +684,10 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { RC.config_file_name, i, NIA_SubcarrierSpacing); } - NRRRC_CONFIGURATION_REQ (msg_p).ss_PBCH_BlockPower[j] = ss_PBCH_BlockPower; - if ((ss_PBCH_BlockPower < -60) || (ss_PBCH_BlockPower > 50)){ - AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for ss_PBCH_BlockPower choice: 0..11 !\n", - RC.config_file_name, i, ss_PBCH_BlockPower); + NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ss_PBCH_BlockPower[j] = ServingCellConfigCommon_ss_PBCH_BlockPower; + if ((ServingCellConfigCommon_ss_PBCH_BlockPower < -60) || (ServingCellConfigCommon_ss_PBCH_BlockPower > 50)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for ServingCellConfigCommon_ss_PBCH_BlockPower choice: 0..11 !\n", + RC.config_file_name, i, ServingCellConfigCommon_ss_PBCH_BlockPower); } /////////////////////////////////NR TDD-UL-DL-ConfigCommon/////////////////////////// @@ -1937,7 +2005,7 @@ void NRRCConfig(void) { for (int i=0;i<RC.nb_nr_inst;i++) { sprintf(aprefix,"%s.[%i]",GNB_CONFIG_STRING_GNB_LIST,i); config_getlist( &CCsParamList,NULL,0, aprefix); - RC.nb_CC[i] = CCsParamList.numelt; + RC.nb_CC[i] = CCsParamList.numelt; } } diff --git a/openair2/ENB_APP/gnb_paramdef.h b/openair2/ENB_APP/gnb_paramdef.h index e909da3ce5b3ed890e3e3747174e33f6a7c4d5e4..419190cb8e0dae492a32178608ae8f6e082d332d 100644 --- a/openair2/ENB_APP/gnb_paramdef.h +++ b/openair2/ENB_APP/gnb_paramdef.h @@ -34,16 +34,16 @@ #include "NRRRC_paramsvalues.h" -#define GNB_CONFIG_STRING_CC_NODE_FUNCTION "node_function" -#define GNB_CONFIG_STRING_CC_NODE_TIMING "node_timing" -#define GNB_CONFIG_STRING_CC_NODE_SYNCH_REF "node_synch_ref" +#define GNB_CONFIG_STRING_CC_NODE_FUNCTION "node_function" +#define GNB_CONFIG_STRING_CC_NODE_TIMING "node_timing" +#define GNB_CONFIG_STRING_CC_NODE_SYNCH_REF "node_synch_ref" // OTG config per GNB-UE DL -#define GNB_CONF_STRING_OTG_CONFIG "otg_config" -#define GNB_CONF_STRING_OTG_UE_ID "ue_id" -#define GNB_CONF_STRING_OTG_APP_TYPE "app_type" -#define GNB_CONF_STRING_OTG_BG_TRAFFIC "bg_traffic" +#define GNB_CONF_STRING_OTG_CONFIG "otg_config" +#define GNB_CONF_STRING_OTG_UE_ID "ue_id" +#define GNB_CONF_STRING_OTG_APP_TYPE "app_type" +#define GNB_CONF_STRING_OTG_BG_TRAFFIC "bg_traffic" #if defined(ENABLE_ITTI) && defined(ENABLE_USE_MME) extern int asn_debug; @@ -65,10 +65,10 @@ typedef enum { lastel = 5 } NRRC_config_functions_t; -#define CONFIG_STRING_ACTIVE_RUS "Active_RUs" +#define CONFIG_STRING_ACTIVE_RUS "Active_RUs" /*------------------------------------------------------------------------------------------------------------------------------------------*/ /* RUs configuration section name */ -#define CONFIG_STRING_RU_LIST "RUs" +#define CONFIG_STRING_RU_LIST "RUs" #define CONFIG_STRING_RU_CONFIG "ru_config" /* RUs configuration parameters name */ @@ -135,7 +135,7 @@ typedef enum { {CONFIG_STRING_RU_GNB_LIST, NULL, 0, uptr:NULL, defintarrayval:DEFGNBS, TYPE_INTARRAY, 1}, \ {CONFIG_STRING_RU_ATT_TX, NULL, 0, uptr:NULL, defintval:0, TYPE_UINT, 0}, \ {CONFIG_STRING_RU_ATT_RX, NULL, 0, uptr:NULL, defintval:0, TYPE_UINT, 0}, \ -{CONFIG_STRING_RU_NBIOTRRC_LIST, NULL, 0, uptr:NULL, defintarrayval:DEFGNBS, TYPE_INTARRAY, 1}, \ +{CONFIG_STRING_RU_NBIOTRRC_LIST, NULL, 0, uptr:NULL, defintarrayval:DEFGNBS, TYPE_INTARRAY, 1}, \ } /*---------------------------------------------------------------------------------------------------------------------------------------*/ @@ -147,8 +147,8 @@ typedef enum { /* global parameters, not under a specific section */ -#define GNB_CONFIG_STRING_ASN1_VERBOSITY "Asn1_verbosity" -#define GNB_CONFIG_STRING_ACTIVE_GNBS "Active_gNBs" +#define GNB_CONFIG_STRING_ASN1_VERBOSITY "Asn1_verbosity" +#define GNB_CONFIG_STRING_ACTIVE_GNBS "Active_gNBs" /*--------------------------------------------------------------------------------------------------------------------------------------------------------------*/ /* global configuration parameters */ /* optname helpstr paramflags XXXptr defXXXval type numelt */ @@ -187,7 +187,7 @@ typedef enum { #define GNBPARAMS_DESC {\ {GNB_CONFIG_STRING_GNB_ID, NULL, 0, uptr:NULL, defintval:0, TYPE_UINT, 0}, \ {GNB_CONFIG_STRING_CELL_TYPE, NULL, 0, strptr:NULL, defstrval:"CELL_MACRO_GNB", TYPE_STRING, 0}, \ -{GNB_CONFIG_STRING_GNB_NAME, NULL, 0, strptr:NULL, defstrval:"OAIeNodeB", TYPE_STRING, 0}, \ +{GNB_CONFIG_STRING_GNB_NAME, NULL, 0, strptr:NULL, defstrval:"OAIgNodeB", TYPE_STRING, 0}, \ {GNB_CONFIG_STRING_TRACKING_AREA_CODE, NULL, 0, strptr:NULL, defstrval:"0", TYPE_STRING, 0}, \ {GNB_CONFIG_STRING_MOBILE_COUNTRY_CODE, NULL, 0, strptr:NULL, defstrval:"0", TYPE_STRING, 0}, \ {GNB_CONFIG_STRING_MOBILE_NETWORK_CODE, NULL, 0, strptr:NULL, defstrval:"0", TYPE_STRING, 0}, \ @@ -220,185 +220,442 @@ typedef enum { /* component carries configuration parameters name */ -#define GNB_CONFIG_STRING_NB_ANT_PORTS "nb_antenna_ports" -#define GNB_CONFIG_STRING_NB_ANT_TX "nb_antennas_tx" -#define GNB_CONFIG_STRING_NB_ANT_RX "nb_antennas_rx" -#define GNB_CONFIG_STRING_TX_GAIN "tx_gain" -#define GNB_CONFIG_STRING_RX_GAIN "rx_gain" +#define GNB_CONFIG_STRING_NB_ANT_PORTS "nb_antenna_ports" +#define GNB_CONFIG_STRING_NB_ANT_TX "nb_antennas_tx" +#define GNB_CONFIG_STRING_NB_ANT_RX "nb_antennas_rx" +#define GNB_CONFIG_STRING_TX_GAIN "tx_gain" +#define GNB_CONFIG_STRING_RX_GAIN "rx_gain" ///NR + //MIB +#define GNB_CONFIG_STRING_MIB_SUBCARRIERSPACINGCOMMON "MIB_subCarrierSpacingCommon" +#define GNB_CONFIG_STRING_MIB_DMRS_TYPEA_POSITION "MIB_dmrs_TypeA_Position" +#define GNB_CONFIG_STRING_PDCCH_CONFIGSIB1 "pdcch_ConfigSIB1" + + //SIB1 +#define GNB_CONFIG_STRING_SIB1_FREQUENCYOFFSETSSB "SIB1_frequencyOffsetSSB" +#define GNB_CONFIG_STRING_SIB1_SSB_PERIODICITYSERVINGCELL "SIB1_ssb_PeriodicityServingCell" +#define GNB_CONFIG_STRING_SIB1_SS_PBCH_BLOCKPOWER "SIB1_ss_PBCH_BlockPower" //NR FREQUENCYINFODL -#define GNB_CONFIG_STRING_ABSOLUTEFREQUENCYSSB "absoluteFrequencySSB" -#define GNB_CONFIG_STRING_SSB_SUBCARRIEROFFSET "SubcarrierSpacing" -#define GNB_CONFIG_STRING_DL_FREQBANDINDICATORNR "DL_FreqBandIndicatorNR" -#define GNB_CONFIG_STRING_DL_ABSOLUTEFREQUENCYPOINTA "DL_absoluteFrequencyPointA" +#define GNB_CONFIG_STRING_ABSOLUTEFREQUENCYSSB "absoluteFrequencySSB" +#define GNB_CONFIG_STRING_SSB_SUBCARRIEROFFSET "SubcarrierSpacing" +#define GNB_CONFIG_STRING_DL_FREQBANDINDICATORNR "DL_FreqBandIndicatorNR" +#define GNB_CONFIG_STRING_DL_ABSOLUTEFREQUENCYPOINTA "DL_absoluteFrequencyPointA" //NR DL SCS-SPECIFICCARRIER -#define GNB_CONFIG_STRING_DL_OFFSETTOCARRIER "DL_offsetToCarrier" -#define GNB_CONFIG_STRING_DL_SUBCARRIERSPACING "DL_SubcarrierSpacing" -#define GNB_CONFIG_STRING_DL_SCS_SPECIFICCARRIER_K0 "DL_SCS_SpecificCarrier_k0" -#define GNB_CONFIG_STRING_DL_CARRIERBANDWIDTH "DL_carrierBandwidth" +#define GNB_CONFIG_STRING_DL_OFFSETTOCARRIER "DL_offsetToCarrier" +#define GNB_CONFIG_STRING_DL_SUBCARRIERSPACING "DL_SubcarrierSpacing" +#define GNB_CONFIG_STRING_DL_SCS_SPECIFICCARRIER_K0 "DL_SCS_SpecificCarrier_k0" +#define GNB_CONFIG_STRING_DL_CARRIERBANDWIDTH "DL_carrierBandwidth" // NR BWP-DOWNLINKCOMMON -#define GNB_CONFIG_STRING_DL_LOCATIONANDBANDWIDTH "DL_locationAndBandwidth" -///#define GNB_CONFIG_STRING_DL_PREFIX_TYPE; - +#define GNB_CONFIG_STRING_DL_LOCATIONANDBANDWIDTH "DL_locationAndBandwidth" + //NR FREQUENCYINFOUL -#define GNB_CONFIG_STRING_UL_FREQBANDINDICATORNR "UL_FreqBandIndicatorNR" -#define GNB_CONFIG_STRING_UL_ABSOLUTEFREQUENCYPOINTA "UL_absoluteFrequencyPointA" -#define GNB_CONFIG_STRING_FREQUENCYINFOUL_P_MAX "FrequencyInfoUL_p_Max" -#define GNB_CONFIG_STRING_FREQUENCYSHIFT7P5KHZ "frequencyShift7p5khz" +#define GNB_CONFIG_STRING_UL_FREQBANDINDICATORNR "UL_FreqBandIndicatorNR" +#define GNB_CONFIG_STRING_UL_ABSOLUTEFREQUENCYPOINTA "UL_absoluteFrequencyPointA" +#define GNB_CONFIG_STRING_FREQUENCYINFOUL_P_MAX "FrequencyInfoUL_p_Max" +#define GNB_CONFIG_STRING_FREQUENCYSHIFT7P5KHZ "frequencyShift7p5khz" //NR UL SCS-SPECIFICCARRIER -#define GNB_CONFIG_STRING_UL_OFFSETTOCARRIER "UL_offsetToCarrier" -#define GNB_CONFIG_STRING_UL_SUBCARRIERSPACING "UL_SubcarrierSpacing" -#define GNB_CONFIG_STRING_UL_SCS_SPECIFICCARRIER_K0 "UL_SCS_SpecificCarrier_k0" -#define GNB_CONFIG_STRING_UL_CARRIERBANDWIDTH "UL_carrierBandwidth" +#define GNB_CONFIG_STRING_UL_OFFSETTOCARRIER "UL_offsetToCarrier" +#define GNB_CONFIG_STRING_UL_SUBCARRIERSPACING "UL_SubcarrierSpacing" +#define GNB_CONFIG_STRING_UL_SCS_SPECIFICCARRIER_K0 "UL_SCS_SpecificCarrier_k0" +#define GNB_CONFIG_STRING_UL_CARRIERBANDWIDTH "UL_carrierBandwidth" // NR BWP-UPLINKCOMMON -#define GNB_CONFIG_STRING_UL_LOCATIONANDBANDWIDTH "UL_locationAndBandwidth" - //NR_PREFIX_TYPE_T UL_PREFIX_TYPE[MAX_NUM_CCS]; - - -#define GNB_CONFIG_STRING_SSB_PERIODICITYSERVINGCELL "ssb_periodicityServingCell" -#define GNB_CONFIG_STRING_DMRS_TYPEA_POSITION "dmrs_TypeA_Position" -#define GNB_CONFIG_STRING_NIA_SUBCARRIERSPACING "NIA_SubcarrierSpacing" -#define GNB_CONFIG_STRING_SS_PBCH_BLOCKPOWER "ss_PBCH_BlockPower" +#define GNB_CONFIG_STRING_UL_LOCATIONANDBANDWIDTH "UL_locationAndBandwidth" + +#define GNB_CONFIG_STRING_SERVINGCELLCONFIGCOMMON_SSB_PERIODICITYSERVINGCELL "ServingCellConfigCommon_ssb_periodicityServingCell" +#define GNB_CONFIG_STRING_SERVINGCELLCONFIGCOMMON_DMRS_TYPEA_POSITION "ServingCellConfigCommon_dmrs_TypeA_Position" +#define GNB_CONFIG_STRING_NIA_SUBCARRIERSPACING "NIA_SubcarrierSpacing" +#define GNB_CONFIG_STRING_SERVINGCELLCONFIGCOMMON_SS_PBCH_BLOCKPOWER "ServingCellConfigCommon_ss_PBCH_BlockPower" //NR TDD-UL-DL-CONFIGCOMMON -#define GNB_CONFIG_STRING_REFERENCESUBCARRIERSPACING "referenceSubcarrierSpacing" -#define GNB_CONFIG_STRING_DL_UL_TRANSMISSIONPERIODICITY "dl_UL_TransmissionPeriodicity" -#define GNB_CONFIG_STRING_NROFDOWNLINKSLOTS "nrofDownlinkSlots" -#define GNB_CONFIG_STRING_NROFDOWNLINKSYMBOLS "nrofDownlinkSymbols" -#define GNB_CONFIG_STRING_NROFUPLINKSLOTS "nrofUplinkSlots" -#define GNB_CONFIG_STRING_NROFUPLINKSYMBOLS "nrofUplinkSymbols" +#define GNB_CONFIG_STRING_REFERENCESUBCARRIERSPACING "referenceSubcarrierSpacing" +#define GNB_CONFIG_STRING_DL_UL_TRANSMISSIONPERIODICITY "dl_UL_TransmissionPeriodicity" +#define GNB_CONFIG_STRING_NROFDOWNLINKSLOTS "nrofDownlinkSlots" +#define GNB_CONFIG_STRING_NROFDOWNLINKSYMBOLS "nrofDownlinkSymbols" +#define GNB_CONFIG_STRING_NROFUPLINKSLOTS "nrofUplinkSlots" +#define GNB_CONFIG_STRING_NROFUPLINKSYMBOLS "nrofUplinkSymbols" //NR RACH-CONFIGCOMMON -#define GNB_CONFIG_STRING_RACH_TOTALNUMBEROFRA_PREAMBLES "rach_totalNumberOfRA_Preambles" -#define GNB_CONFIG_STRING_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_CHOICE "rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice" -#define GNB_CONFIG_STRING_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONEEIGHTH "rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth" -#define GNB_CONFIG_STRING_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONEFOURTH "rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth" -#define GNB_CONFIG_STRING_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONEHALF "rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf" -#define GNB_CONFIG_STRING_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONE "rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one" -#define GNB_CONFIG_STRING_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_TWO "rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two" -#define GNB_CONFIG_STRING_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_FOUR "rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four" -#define GNB_CONFIG_STRING_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_EIGHT "rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight" -#define GNB_CONFIG_STRING_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_SIXTEEN "rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen" -#define GNB_CONFIG_STRING_RACH_GROUPBCONFIGURED "rach_groupBconfigured " -#define GNB_CONFIG_STRING_RACH_RA_MSG3SIZEGROUPA "rach_ra_Msg3SizeGroupA" -#define GNB_CONFIG_STRING_RACH_MESSAGEPOWEROFFSETGROUPB "rach_messagePowerOffsetGroupB" -#define GNB_CONFIG_STRING_RACH_NUMBEROFRA_PREAMBLESGROUPA "rach_numberOfRA_PreamblesGroupA" -#define GNB_CONFIG_STRING_RACH_RA_CONTENTIONRESOLUTIONTIMER "rach_ra_ContentionResolutionTimer" -#define GNB_CONFIG_STRING_RSRP_THRESHOLDSSB "rsrp_ThresholdSSB" -#define GNB_CONFIG_STRING_RSRP_THRESHOLDSSB_SUL "rsrp_ThresholdSSB_SUL" -#define GNB_CONFIG_STRING_PRACH_ROOTSEQUENCEINDEX_CHOICE "prach_RootSequenceIndex_choice" -#define GNB_CONFIG_STRING_PRACH_ROOTSEQUENCEINDEX_L839 "prach_RootSequenceIndex_l839" -#define GNB_CONFIG_STRING_PRACH_ROOTSEQUENCEINDEX_L139 "prach_RootSequenceIndex_l139" -#define GNB_CONFIG_STRING_PRACH_MSG1_SUBCARRIERSPACING "prach_msg1_SubcarrierSpacing" -#define GNB_CONFIG_STRING_RESTRICTEDSETCONFIG "restrictedSetConfig" -#define GNB_CONFIG_STRING_MSG3_TRANSFORMPRECODING "msg3_transformPrecoding" +#define GNB_CONFIG_STRING_RACH_TOTALNUMBEROFRA_PREAMBLES "rach_totalNumberOfRA_Preambles" +#define GNB_CONFIG_STRING_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_CHOICE "rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice" +#define GNB_CONFIG_STRING_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONEEIGHTH "rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth" +#define GNB_CONFIG_STRING_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONEFOURTH "rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth" +#define GNB_CONFIG_STRING_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONEHALF "rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf" +#define GNB_CONFIG_STRING_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONE "rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one" +#define GNB_CONFIG_STRING_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_TWO "rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two" +#define GNB_CONFIG_STRING_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_FOUR "rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four" +#define GNB_CONFIG_STRING_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_EIGHT "rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight" +#define GNB_CONFIG_STRING_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_SIXTEEN "rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen" +#define GNB_CONFIG_STRING_RACH_GROUPBCONFIGURED "rach_groupBconfigured" +#define GNB_CONFIG_STRING_RACH_RA_MSG3SIZEGROUPA "rach_ra_Msg3SizeGroupA" +#define GNB_CONFIG_STRING_RACH_MESSAGEPOWEROFFSETGROUPB "rach_messagePowerOffsetGroupB" +#define GNB_CONFIG_STRING_RACH_NUMBEROFRA_PREAMBLESGROUPA "rach_numberOfRA_PreamblesGroupA" +#define GNB_CONFIG_STRING_RACH_RA_CONTENTIONRESOLUTIONTIMER "rach_ra_ContentionResolutionTimer" +#define GNB_CONFIG_STRING_RSRP_THRESHOLDSSB "rsrp_ThresholdSSB" +#define GNB_CONFIG_STRING_RSRP_THRESHOLDSSB_SUL "rsrp_ThresholdSSB_SUL" +#define GNB_CONFIG_STRING_PRACH_ROOTSEQUENCEINDEX_CHOICE "prach_RootSequenceIndex_choice" +#define GNB_CONFIG_STRING_PRACH_ROOTSEQUENCEINDEX_L839 "prach_RootSequenceIndex_l839" +#define GNB_CONFIG_STRING_PRACH_ROOTSEQUENCEINDEX_L139 "prach_RootSequenceIndex_l139" +#define GNB_CONFIG_STRING_PRACH_MSG1_SUBCARRIERSPACING "prach_msg1_SubcarrierSpacing" +#define GNB_CONFIG_STRING_RESTRICTEDSETCONFIG "restrictedSetConfig" +#define GNB_CONFIG_STRING_MSG3_TRANSFORMPRECODING "msg3_transformPrecoding" //SSB-PERRACH-OCCASIONANDCB-PREAMBLESPERSSB NOT SURE //NR RACH-CONFIGGENERIC -#define GNB_CONFIG_STRING_PRACH_CONFIGURATIONINDEX "prach_ConfigurationIndex" -#define GNB_CONFIG_STRING_PRACH_MSG1_FDM "prach_msg1_FDM" -#define GNB_CONFIG_STRING_PRACH_MSG1_FREQUENCYSTART "prach_msg1_FrequencyStart" -#define GNB_CONFIG_STRING_ZEROCORRELATIONZONECONFIG "zeroCorrelationZoneConfig" -#define GNB_CONFIG_STRING_PREAMBLERECEIVEDTARGETPOWER "preambleReceivedTargetPower" -#define GNB_CONFIG_STRING_PREAMBLETRANSMAX "preambleTransMax" -#define GNB_CONFIG_STRING_POWERRAMPINGSTEP "powerRampingStep" -#define GNB_CONFIG_STRING_RA_RESPONSEWINDOW "ra_ResponseWindow" +#define GNB_CONFIG_STRING_PRACH_CONFIGURATIONINDEX "prach_ConfigurationIndex" +#define GNB_CONFIG_STRING_PRACH_MSG1_FDM "prach_msg1_FDM" +#define GNB_CONFIG_STRING_PRACH_MSG1_FREQUENCYSTART "prach_msg1_FrequencyStart" +#define GNB_CONFIG_STRING_ZEROCORRELATIONZONECONFIG "zeroCorrelationZoneConfig" +#define GNB_CONFIG_STRING_PREAMBLERECEIVEDTARGETPOWER "preambleReceivedTargetPower" +#define GNB_CONFIG_STRING_PREAMBLETRANSMAX "preambleTransMax" +#define GNB_CONFIG_STRING_POWERRAMPINGSTEP "powerRampingStep" +#define GNB_CONFIG_STRING_RA_RESPONSEWINDOW "ra_ResponseWindow" //PUSCH-CONFIGCOMMON -#define GNB_CONFIG_STRING_GROUPHOPPINGENABLEDTRANSFORMPRECODING "groupHoppingEnabledTransformPrecoding" -#define GNB_CONFIG_STRING_MSG3_DELTAPREAMBLE "msg3_DeltaPreamble" -#define GNB_CONFIG_STRING_P0_NOMINALWITHGRANT "p0_NominalWithGrant" +#define GNB_CONFIG_STRING_GROUPHOPPINGENABLEDTRANSFORMPRECODING "groupHoppingEnabledTransformPrecoding" +#define GNB_CONFIG_STRING_MSG3_DELTAPREAMBLE "msg3_DeltaPreamble" +#define GNB_CONFIG_STRING_P0_NOMINALWITHGRANT "p0_NominalWithGrant" ///PUSCH-TIMEDOMAINRESOURCEALLOCATION -#define GNB_CONFIG_STRING_PUSCH_TIMEDOMAINRESOURCEALLOCATION_K2 "PUSCH_TimeDomainResourceAllocation_k2" -#define GNB_CONFIG_STRING_PUSCH_TIMEDOMAINRESOURCEALLOCATION_MAPPINGTYPE "PUSCH_TimeDomainResourceAllocation_mappingType" +#define GNB_CONFIG_STRING_PUSCH_TIMEDOMAINRESOURCEALLOCATION_K2 "PUSCH_TimeDomainResourceAllocation_k2" +#define GNB_CONFIG_STRING_PUSCH_TIMEDOMAINRESOURCEALLOCATION_MAPPINGTYPE "PUSCH_TimeDomainResourceAllocation_mappingType" //PUCCH-CONFIGCOMMON -#define GNB_CONFIG_STRING_PUCCH_GROUPHOPPING "pucch_GroupHopping" -#define GNB_CONFIG_STRING_P0_NOMINAL "p0_nominal" +#define GNB_CONFIG_STRING_PUCCH_GROUPHOPPING "pucch_GroupHopping" +#define GNB_CONFIG_STRING_P0_NOMINAL "p0_nominal" //PDSCH-CONFIGCOMMON //PDSCH-TIMEDOMAINRESOURCEALLOCATION -#define GNB_CONFIG_STRING_PDSCH_TIMEDOMAINRESOURCEALLOCATION_K0 "PDSCH_TimeDomainResourceAllocation_k0" -#define GNB_CONFIG_STRING_PDSCH_TIMEDOMAINRESOURCEALLOCATION_MAPPINGTYPE "PDSCH_TimeDomainResourceAllocation_mappingType" +#define GNB_CONFIG_STRING_PDSCH_TIMEDOMAINRESOURCEALLOCATION_K0 "PDSCH_TimeDomainResourceAllocation_k0" +#define GNB_CONFIG_STRING_PDSCH_TIMEDOMAINRESOURCEALLOCATION_MAPPINGTYPE "PDSCH_TimeDomainResourceAllocation_mappingType" //RATEMATCHPATTERN IS USED TO CONFIGURE ONE RATE MATCHING PATTERN FOR PDSCH -#define GNB_CONFIG_STRING_RATEMATCHPATTERNID "rateMatchPatternId" -#define GNB_CONFIG_STRING_RATEMATCHPATTERN_PATTERNTYPE "RateMatchPattern_patternType" -#define GNB_CONFIG_STRING_SYMBOLSINRESOURCEBLOCK "symbolsInResourceBlock" -#define GNB_CONFIG_STRING_PERIODICITYANDPATTERN "periodicityAndPattern" -#define GNB_CONFIG_STRING_RATEMATCHPATTERN_CONTROLRESOURCESET "RateMatchPattern_controlResourceSet" -#define GNB_CONFIG_STRING_RATEMATCHPATTERN_SUBCARRIERSPACING "RateMatchPattern_subcarrierSpacing" -#define GNB_CONFIG_STRING_RATEMATCHPATTERN_MODE "RateMatchPattern_mode" +#define GNB_CONFIG_STRING_RATEMATCHPATTERNID "rateMatchPatternId" +#define GNB_CONFIG_STRING_RATEMATCHPATTERN_PATTERNTYPE "RateMatchPattern_patternType" +#define GNB_CONFIG_STRING_SYMBOLSINRESOURCEBLOCK "symbolsInResourceBlock" +#define GNB_CONFIG_STRING_PERIODICITYANDPATTERN "periodicityAndPattern" +#define GNB_CONFIG_STRING_RATEMATCHPATTERN_CONTROLRESOURCESET "RateMatchPattern_controlResourceSet" +#define GNB_CONFIG_STRING_RATEMATCHPATTERN_SUBCARRIERSPACING "RateMatchPattern_subcarrierSpacing" +#define GNB_CONFIG_STRING_RATEMATCHPATTERN_MODE "RateMatchPattern_mode" //PDCCH-CONFIGCOMMON -#define GNB_CONFIG_STRING_SEARCHSPACESIB1 "searchSpaceSIB1" -#define GNB_CONFIG_STRING_SEARCHSPACEOTHERSYSTEMINFORMATION "searchSpaceOtherSystemInformation" -#define GNB_CONFIG_STRING_PAGINGSEARCHSPACE "pagingSearchSpace" -#define GNB_CONFIG_STRING_RA_SEARCHSPACE "ra_SearchSpace" -#define GNB_CONFIG_STRING_RACH_RA_CONTROLRESOURCESET "rach_ra_ControlResourceSet" +#define GNB_CONFIG_STRING_SEARCHSPACESIB1 "searchSpaceSIB1" +#define GNB_CONFIG_STRING_SEARCHSPACEOTHERSYSTEMINFORMATION "searchSpaceOtherSystemInformation" +#define GNB_CONFIG_STRING_PAGINGSEARCHSPACE "pagingSearchSpace" +#define GNB_CONFIG_STRING_RA_SEARCHSPACE "ra_SearchSpace" +#define GNB_CONFIG_STRING_RACH_RA_CONTROLRESOURCESET "rach_ra_ControlResourceSet" //NR PDCCH-CONFIGCOMMON COMMONCONTROLRESOURCESSETS -#define GNB_CONFIG_STRING_PDCCH_COMMON_CONTROLRESOURCESETID "PDCCH_common_controlResourceSetId" -#define GNB_CONFIG_STRING_PDCCH_COMMON_CONTROLRESOURCESET_DURATION "PDCCH_common_ControlResourceSet_duration" -#define GNB_CONFIG_STRING_PDCCH_CCE_REG_MAPPINGTYPE "PDCCH_cce_REG_MappingType" -#define GNB_CONFIG_STRING_PDCCH_REG_BUNDLESIZE "PDCCH_reg_BundleSize" -#define GNB_CONFIG_STRING_PDCCH_INTERLEAVERSIZE "PDCCH_interleaverSize" -#define GNB_CONFIG_STRING_PDCCH_SHIFTINDEX "PDCCH_shiftIndex" -#define GNB_CONFIG_STRING_PDCCH_PRECODERGRANULARITY "PDCCH_precoderGranularity" -#define GNB_CONFIG_STRING_TCI_PRESENTINDCI "tci_PresentInDCI" +#define GNB_CONFIG_STRING_PDCCH_COMMON_CONTROLRESOURCESETID "PDCCH_common_controlResourceSetId" +#define GNB_CONFIG_STRING_PDCCH_COMMON_CONTROLRESOURCESET_DURATION "PDCCH_common_ControlResourceSet_duration" +#define GNB_CONFIG_STRING_PDCCH_CCE_REG_MAPPINGTYPE "PDCCH_cce_REG_MappingType" +#define GNB_CONFIG_STRING_PDCCH_REG_BUNDLESIZE "PDCCH_reg_BundleSize" +#define GNB_CONFIG_STRING_PDCCH_INTERLEAVERSIZE "PDCCH_interleaverSize" +#define GNB_CONFIG_STRING_PDCCH_SHIFTINDEX "PDCCH_shiftIndex" +#define GNB_CONFIG_STRING_PDCCH_PRECODERGRANULARITY "PDCCH_precoderGranularity" +#define GNB_CONFIG_STRING_TCI_PRESENTINDCI "tci_PresentInDCI" //NR PDCCH-ConfigCommon commonSearchSpaces -#define GNB_CONFIG_STRING_SEARCHSPACEID "SearchSpaceId" -#define GNB_CONFIG_STRING_COMMONSEARCHSPACES_CONTROLRESOURCESETID "commonSearchSpaces_controlResourceSetId" -#define GNB_CONFIG_STRING_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_CHOICE "SearchSpace_monitoringSlotPeriodicityAndOffset_choice" -#define GNB_CONFIG_STRING_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL1 "SearchSpace_monitoringSlotPeriodicityAndOffset_sl1" -#define GNB_CONFIG_STRING_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL2 "SearchSpace_monitoringSlotPeriodicityAndOffset_sl2" -#define GNB_CONFIG_STRING_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL4 "SearchSpace_monitoringSlotPeriodicityAndOffset_sl4" -#define GNB_CONFIG_STRING_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL5 "SearchSpace_monitoringSlotPeriodicityAndOffset_sl5" -#define GNB_CONFIG_STRING_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL8 "SearchSpace_monitoringSlotPeriodicityAndOffset_sl8" -#define GNB_CONFIG_STRING_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL10 "SearchSpace_monitoringSlotPeriodicityAndOffset_sl10" -#define GNB_CONFIG_STRING_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL16 "SearchSpace_monitoringSlotPeriodicityAndOffset_sl16" -#define GNB_CONFIG_STRING_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL20 "SearchSpace_monitoringSlotPeriodicityAndOffset_sl20" -#define GNB_CONFIG_STRING_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL1 "SearchSpace_nrofCandidates_aggregationLevel1" -#define GNB_CONFIG_STRING_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL2 "SearchSpace_nrofCandidates_aggregationLevel2" -#define GNB_CONFIG_STRING_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL4 "SearchSpace_nrofCandidates_aggregationLevel4" -#define GNB_CONFIG_STRING_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL8 "SearchSpace_nrofCandidates_aggregationLevel8" -#define GNB_CONFIG_STRING_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL16 "SearchSpace_nrofCandidates_aggregationLevel16" -#define GNB_CONFIG_STRING_SEARCHSPACE_SEARCHSPACETYPE "SearchSpace_searchSpaceType" -#define GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL1 "Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1" -#define GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL2 "Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2" -#define GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL4 "Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4" -#define GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL8 "Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8" -#define GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL16 "Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16" -#define GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_3_MONITORINGPERIODICITY "Common_dci_Format2_3_monitoringPeriodicity" -#define GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_3_NROFPDCCH_CANDIDATES "Common_dci_Format2_3_nrofPDCCH_Candidates" -#define GNB_CONFIG_STRING_UE_SPECIFIC__DCI_FORMATS "ue_Specific__dci_Formats" - - - //PDCCH-CONFIGCOMMON - - //CONTROLRESOURCESET -#define GNB_CONFIG_STRING_CONTROLRESOURCESETID = 0; -#define GNB_CONFIG_STRING_FREQUENCYDOMAINRESOURCES = 0; -#define GNB_CONFIG_STRING_CONTROLRESOURCESET_DURATION = 0; -#define GNB_CONFIG_STRING_PRECODERGRANULARITY = 0; //CORRESPONDS TO L1 PARAMETER 'CORESET-PRECODER-GRANUALITY' -#define GNB_CONFIG_STRING_TCI_PRESENTINDCI = NULL; - - //SEARCHSPACE -#define GNB_CONFIG_STRING_SEARCHSPACEID = 0; -#define GNB_CONFIG_STRING_DCI_FORMAT2_3_MONITORINGPERIODICITY = 0; -#define GNB_CONFIG_STRING_DCI_FORMAT2_3_NROFPDCCH_CANDIDATES = 0; - - - // NR SYNCHRONIZATION SIGNAL BLOCK - -#define GNB_CONFIG_STRING_SSB_PERIODICITYSERVINGCELL = 0; -#define GNB_CONFIG_STRING_SS_PBCH_BLOCKPOWER = 0; +#define GNB_CONFIG_STRING_SEARCHSPACEID "SearchSpaceId" +#define GNB_CONFIG_STRING_COMMONSEARCHSPACES_CONTROLRESOURCESETID "commonSearchSpaces_controlResourceSetId" +#define GNB_CONFIG_STRING_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_CHOICE "SearchSpace_monitoringSlotPeriodicityAndOffset_choice" +#define GNB_CONFIG_STRING_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL1 "SearchSpace_monitoringSlotPeriodicityAndOffset_sl1" +#define GNB_CONFIG_STRING_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL2 "SearchSpace_monitoringSlotPeriodicityAndOffset_sl2" +#define GNB_CONFIG_STRING_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL4 "SearchSpace_monitoringSlotPeriodicityAndOffset_sl4" +#define GNB_CONFIG_STRING_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL5 "SearchSpace_monitoringSlotPeriodicityAndOffset_sl5" +#define GNB_CONFIG_STRING_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL8 "SearchSpace_monitoringSlotPeriodicityAndOffset_sl8" +#define GNB_CONFIG_STRING_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL10 "SearchSpace_monitoringSlotPeriodicityAndOffset_sl10" +#define GNB_CONFIG_STRING_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL16 "SearchSpace_monitoringSlotPeriodicityAndOffset_sl16" +#define GNB_CONFIG_STRING_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL20 "SearchSpace_monitoringSlotPeriodicityAndOffset_sl20" +#define GNB_CONFIG_STRING_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL1 "SearchSpace_nrofCandidates_aggregationLevel1" +#define GNB_CONFIG_STRING_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL2 "SearchSpace_nrofCandidates_aggregationLevel2" +#define GNB_CONFIG_STRING_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL4 "SearchSpace_nrofCandidates_aggregationLevel4" +#define GNB_CONFIG_STRING_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL8 "SearchSpace_nrofCandidates_aggregationLevel8" +#define GNB_CONFIG_STRING_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL16 "SearchSpace_nrofCandidates_aggregationLevel16" +#define GNB_CONFIG_STRING_SEARCHSPACE_SEARCHSPACETYPE "SearchSpace_searchSpaceType" +#define GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL1 "Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1" +#define GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL2 "Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2" +#define GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL4 "Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4" +#define GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL8 "Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8" +#define GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL16 "Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16" +#define GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_3_MONITORINGPERIODICITY "Common_dci_Format2_3_monitoringPeriodicity" +#define GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_3_NROFPDCCH_CANDIDATES "Common_dci_Format2_3_nrofPDCCH_Candidates" +#define GNB_CONFIG_STRING_UE_SPECIFIC__DCI_FORMATS "ue_Specific__dci_Formats" + + +/*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ +/* component carriers configuration parameters */ +/* optname helpstr paramflags XXXptr defXXXval type numelt checked_param */ +/*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ +#define NRCCPARAMS_DESC { \ +{GNB_CONFIG_STRING_FRAME_TYPE, NULL, 0, strptr:&frame_type, defstrval:"FDD", TYPE_STRING, 0}, \ +{GNB_CONFIG_STRING_DL_prefix_type, NULL, 0, strptr:&DL_prefix_type, defstrval:"NORMAL", TYPE_STRING, 0}, \ +{GNB_CONFIG_STRING_UL_prefix_type, NULL, 0, strptr:&UL_prefix_type, defstrval:"NORMAL", TYPE_STRING, 0}, \ +{GNB_CONFIG_STRING_EUTRA_BAND, NULL, 0, iptr:&eutra_band, defintval:7, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_DOWNLINK_FREQUENCY, NULL, 0, i64ptr:(int64_t *)&downlink_frequency, defint64val:2680000000, TYPE_UINT64, 0}, \ +{GNB_CONFIG_STRING_UPLINK_FREQUENCY_OFFSET, NULL, 0, iptr:&uplink_frequency_offset, defintval:-120000000, TYPE_INT, 0}, \ +{GNB_CONFIG_STRING_NID_CELL, NULL, 0, iptr:&Nid_cell, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_N_RB_DL, NULL, 0, iptr:&N_RB_DL, defintval:25, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_NB_ANT_PORTS, NULL, 0, iptr:&nb_antenna_ports, defintval:1, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_MIB_SUBCARRIERSPACINGCOMMON, NULL, 0, iptr:&MIB_subCarrierSpacingCommon, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_MIB_DMRS_TYPEA_POSITION, NULL, 0, iptr:&MIB_dmrs_TypeA_Position, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_PDCCH_CONFIGSIB1, NULL, 0, iptr:&pdcch_ConfigSIB1, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SIB1_FREQUENCYOFFSETSSB, NULL, 0, iptr:&SIB1_frequencyOffsetSSB, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SIB1_SSB_PERIODICITYSERVINGCELL, NULL, 0, iptr:&SIB1_ssb_PeriodicityServingCell, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SIB1_SS_PBCH_BLOCKPOWER, NULL, 0, iptr:&SIB1_ss_PBCH_BlockPower, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_ABSOLUTEFREQUENCYSSB, NULL, 0, iptr:&absoluteFrequencySSB, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SSB_SUBCARRIEROFFSET, NULL, 0, iptr:&ssb_SubcarrierOffset, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_DL_FREQBANDINDICATORNR, NULL, 0, iptr:&DL_FreqBandIndicatorNR, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_DL_ABSOLUTEFREQUENCYPOINTA, NULL, 0, iptr:&DL_absoluteFrequencyPointA, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_DL_OFFSETTOCARRIER, NULL, 0, iptr:&DL_offsetToCarrier, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_DL_SUBCARRIERSPACING, NULL, 0, iptr:&DL_SubcarrierSpacing, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_DL_SCS_SPECIFICCARRIER_K0, NULL, 0, iptr:&DL_SCS_SpecificCarrier_k0, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_DL_CARRIERBANDWIDTH, NULL, 0, iptr:&DL_carrierBandwidth, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_DL_LOCATIONANDBANDWIDTH, NULL, 0, iptr:&DL_locationAndBandwidth, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_UL_FREQBANDINDICATORNR, NULL, 0, iptr:&UL_FreqBandIndicatorNR, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_UL_ABSOLUTEFREQUENCYPOINTA, NULL, 0, iptr:&UL_absoluteFrequencyPointA, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_FREQUENCYINFOUL_P_MAX, NULL, 0, iptr:&FrequencyInfoUL_p_Max, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_FREQUENCYSHIFT7P5KHZ, NULL, 0, iptr:&frequencyShift7p5khz, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_UL_OFFSETTOCARRIER, NULL, 0, iptr:&UL_offsetToCarrier, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_UL_SUBCARRIERSPACING, NULL, 0, iptr:&UL_SubcarrierSpacing, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_UL_SCS_SPECIFICCARRIER_K0, NULL, 0, iptr:&UL_SCS_SpecificCarrier_k0, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_UL_CARRIERBANDWIDTH, NULL, 0, iptr:&UL_carrierBandwidth, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_UL_LOCATIONANDBANDWIDTH, NULL, 0, iptr:&UL_locationAndBandwidth, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SERVINGCELLCONFIGCOMMON_SSB_PERIODICITYSERVINGCELL, NULL, 0, iptr:&ServingCellConfigCommon_ssb_periodicityServingCell, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SERVINGCELLCONFIGCOMMON_DMRS_TYPEA_POSITION, NULL, 0, iptr:&ServingCellConfigCommon_dmrs_TypeA_Position, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_NIA_SUBCARRIERSPACING, NULL, 0, iptr:&NIA_SubcarrierSpacing, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SERVINGCELLCONFIGCOMMON_SS_PBCH_BLOCKPOWER, NULL, 0, iptr:&ServingCellConfigCommon_ss_PBCH_BlockPower, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_REFERENCESUBCARRIERSPACING, NULL, 0, iptr:&referenceSubcarrierSpacing, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_DL_UL_TRANSMISSIONPERIODICITY, NULL, 0, iptr:&dl_UL_TransmissionPeriodicity, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_NROFDOWNLINKSLOTS, NULL, 0, iptr:&nrofDownlinkSlots, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_NROFDOWNLINKSYMBOLS, NULL, 0, iptr:&nrofDownlinkSymbols, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_NROFUPLINKSLOTS, NULL, 0, iptr:&nrofUplinkSlots, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_NROFUPLINKSYMBOLS, NULL, 0, iptr:&nrofUplinkSymbols, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_RACH_TOTALNUMBEROFRA_PREAMBLES, NULL, 0, iptr:&rach_totalNumberOfRA_Preambles, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_CHOICE, NULL, 0, iptr:&rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONEEIGHTH, NULL, 0, iptr:&rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONEFOURTH, NULL, 0, iptr:&rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONEHALF, NULL, 0, iptr:&rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONE, NULL, 0, iptr:&rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_TWO, NULL, 0, iptr:&rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_FOUR, NULL, 0, iptr:&rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_EIGHT, NULL, 0, iptr:&rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_SIXTEEN, NULL, 0, iptr:&rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_RACH_GROUPBCONFIGURED, NULL, 0, iptr:&rach_groupBconfigured, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_RACH_RA_MSG3SIZEGROUPA, NULL, 0, iptr:&rach_ra_Msg3SizeGroupA, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_RACH_MESSAGEPOWEROFFSETGROUPB, NULL, 0, iptr:&rach_messagePowerOffsetGroupB, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_RACH_NUMBEROFRA_PREAMBLESGROUPA, NULL, 0, iptr:&rach_numberOfRA_PreamblesGroupA, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_RACH_RA_CONTENTIONRESOLUTIONTIMER, NULL, 0, iptr:&rach_ra_ContentionResolutionTimer, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_RSRP_THRESHOLDSSB, NULL, 0, iptr:&rsrp_ThresholdSSB, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_RSRP_THRESHOLDSSB_SUL, NULL, 0, iptr:&rsrp_ThresholdSSB_SUL, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_PRACH_ROOTSEQUENCEINDEX_CHOICE, NULL, 0, iptr:&prach_RootSequenceIndex_choice, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_PRACH_ROOTSEQUENCEINDEX_L839, NULL, 0, iptr:&prach_RootSequenceIndex_l839, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_PRACH_ROOTSEQUENCEINDEX_L139, NULL, 0, iptr:&prach_RootSequenceIndex_l139, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_PRACH_MSG1_SUBCARRIERSPACING, NULL, 0, iptr:&prach_msg1_SubcarrierSpacing, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_RESTRICTEDSETCONFIG, NULL, 0, iptr:&restrictedSetConfig, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_MSG3_TRANSFORMPRECODING, NULL, 0, iptr:&msg3_transformPrecoding, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_PRACH_CONFIGURATIONINDEX, NULL, 0, iptr:&prach_ConfigurationIndex, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_PRACH_MSG1_FDM, NULL, 0, iptr:&prach_msg1_FDM, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_PRACH_MSG1_FREQUENCYSTART, NULL, 0, iptr:&prach_msg1_FrequencyStart, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_ZEROCORRELATIONZONECONFIG, NULL, 0, iptr:&zeroCorrelationZoneConfig, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_PREAMBLERECEIVEDTARGETPOWER, NULL, 0, iptr:&preambleReceivedTargetPower, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_PREAMBLETRANSMAX, NULL, 0, iptr:&preambleTransMax, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_POWERRAMPINGSTEP, NULL, 0, iptr:&powerRampingStep, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_RA_RESPONSEWINDOW, NULL, 0, iptr:&ra_ResponseWindow, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_GROUPHOPPINGENABLEDTRANSFORMPRECODING, NULL, 0, iptr:&groupHoppingEnabledTransformPrecoding, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_MSG3_DELTAPREAMBLE, NULL, 0, iptr:&msg3_DeltaPreamble, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_P0_NOMINALWITHGRANT, NULL, 0, iptr:&p0_NominalWithGrant, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_PUSCH_TIMEDOMAINRESOURCEALLOCATION_K2, NULL, 0, iptr:&PUSCH_TimeDomainResourceAllocation_k2, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_PUSCH_TIMEDOMAINRESOURCEALLOCATION_MAPPINGTYPE, NULL, 0, iptr:&PUSCH_TimeDomainResourceAllocation_mappingType, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_PUCCH_GROUPHOPPING, NULL, 0, iptr:&pucch_GroupHopping, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_P0_NOMINAL, NULL, 0, iptr:&p0_nominal, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_PDSCH_TIMEDOMAINRESOURCEALLOCATION_K0, NULL, 0, iptr:&PDSCH_TimeDomainResourceAllocation_k0, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_PDSCH_TIMEDOMAINRESOURCEALLOCATION_MAPPINGTYPE, NULL, 0, iptr:&PDSCH_TimeDomainResourceAllocation_mappingType, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_RATEMATCHPATTERNID, NULL, 0, iptr:&rateMatchPatternId, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_RATEMATCHPATTERN_PATTERNTYPE, NULL, 0, iptr:&RateMatchPattern_patternType, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SYMBOLSINRESOURCEBLOCK, NULL, 0, iptr:&symbolsInResourceBlock, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_PERIODICITYANDPATTERN, NULL, 0, iptr:&periodicityAndPattern, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_RATEMATCHPATTERN_CONTROLRESOURCESET, NULL, 0, iptr:&RateMatchPattern_controlResourceSet, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_RATEMATCHPATTERN_SUBCARRIERSPACING, NULL, 0, iptr:&RateMatchPattern_subcarrierSpacing, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_RATEMATCHPATTERN_MODE, NULL, 0, iptr:&RateMatchPattern_mode, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SEARCHSPACESIB1, NULL, 0, iptr:&searchSpaceSIB1, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SEARCHSPACEOTHERSYSTEMINFORMATION, NULL, 0, iptr:&searchSpaceOtherSystemInformation, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_PAGINGSEARCHSPACE, NULL, 0, iptr:&pagingSearchSpace, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_RA_SEARCHSPACE, NULL, 0, iptr:&ra_SearchSpace, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_RACH_RA_CONTROLRESOURCESET, NULL, 0, iptr:&rach_ra_ControlResourceSet, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_PDCCH_COMMON_CONTROLRESOURCESETID, NULL, 0, iptr:&PDCCH_common_controlResourceSetId, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_PDCCH_COMMON_CONTROLRESOURCESET_DURATION, NULL, 0, iptr:&PDCCH_common_ControlResourceSet_duration, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_PDCCH_CCE_REG_MAPPINGTYPE, NULL, 0, iptr:&PDCCH_cce_REG_MappingType, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_PDCCH_REG_BUNDLESIZE, NULL, 0, iptr:&PDCCH_reg_BundleSize, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_PDCCH_INTERLEAVERSIZE, NULL, 0, iptr:&PDCCH_interleaverSize, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_PDCCH_SHIFTINDEX, NULL, 0, iptr:&PDCCH_shiftIndex, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_PDCCH_PRECODERGRANULARITY, NULL, 0, iptr:&PDCCH_precoderGranularity, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_TCI_PRESENTINDCI, NULL, 0, iptr:&tci_PresentInDCI, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SEARCHSPACEID, NULL, 0, iptr:&SearchSpaceId, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_COMMONSEARCHSPACES_CONTROLRESOURCESETID, NULL, 0, iptr:&commonSearchSpaces_controlResourceSetId, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_CHOICE, NULL, 0, iptr:&SearchSpace_monitoringSlotPeriodicityAndOffset_choice, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL1, NULL, 0, iptr:&SearchSpace_monitoringSlotPeriodicityAndOffset_sl1, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL2, NULL, 0, iptr:&SearchSpace_monitoringSlotPeriodicityAndOffset_sl2, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL4, NULL, 0, iptr:&SearchSpace_monitoringSlotPeriodicityAndOffset_sl4, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL5, NULL, 0, iptr:&SearchSpace_monitoringSlotPeriodicityAndOffset_sl5, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL8, NULL, 0, iptr:&SearchSpace_monitoringSlotPeriodicityAndOffset_sl8, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL10, NULL, 0, iptr:&SearchSpace_monitoringSlotPeriodicityAndOffset_sl10, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL16, NULL, 0, iptr:&SearchSpace_monitoringSlotPeriodicityAndOffset_sl16, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL20, NULL, 0, iptr:&SearchSpace_monitoringSlotPeriodicityAndOffset_sl20, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL1, NULL, 0, iptr:&SearchSpace_nrofCandidates_aggregationLevel1, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL2, NULL, 0, iptr:&SearchSpace_nrofCandidates_aggregationLevel2, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL4, NULL, 0, iptr:&SearchSpace_nrofCandidates_aggregationLevel4, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL8, NULL, 0, iptr:&SearchSpace_nrofCandidates_aggregationLevel8, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL16, NULL, 0, iptr:&SearchSpace_nrofCandidates_aggregationLevel16, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SEARCHSPACE_SEARCHSPACETYPE, NULL, 0, iptr:&SearchSpace_searchSpaceType, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL1, NULL, 0, iptr:&Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL2, NULL, 0, iptr:&Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL4, NULL, 0, iptr:&Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL8, NULL, 0, iptr:&Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL16, NULL, 0, iptr:&Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_3_MONITORINGPERIODICITY, NULL, 0, iptr:&Common_dci_Format2_3_monitoringPeriodicity, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_COMMON_DCI_FORMAT2_3_NROFPDCCH_CANDIDATES, NULL, 0, iptr:&Common_dci_Format2_3_nrofPDCCH_Candidates, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_UE_SPECIFIC__DCI_FORMATS, NULL, 0, iptr:&ue_Specific__dci_Formats, defintval:0, TYPE_UINT, 0}, \ +} +/* component carries configuration parameters name */ +#define ENB_CONFIG_FRAME_TYPE_IDX 0 +#define ENB_CONFIG_DL_PREFIX_TYPE_IDX 1 +#define ENB_CONFIG_UL_PREFIX_TYPE_IDX 1 +#define ENB_CONFIG_EUTRA_BAND_IDX 2 +#define ENB_CONFIG_DOWNLINK_FREQUENCY_IDX 3 +#define ENB_CONFIG_UPLINK_FREQUENCY_OFFSET_IDX 4 +#define ENB_CONFIG_NID_CELL_IDX 5 +#define ENB_CONFIG_N_RB_DL_IDX 6 +#define GNB_CONFIG_NB_ANT_PORTS_IDX +#define GNB_CONFIG_NB_ANT_TX_IDX +#define GNB_CONFIG_NB_ANT_RX_IDX +#define GNB_CONFIG_TX_GAIN_IDX +#define GNB_CONFIG_RX_GAIN_IDX +#define GNB_CONFIG_MIB_SUBCARRIERSPACINGCOMMON_IDX +#define GNB_CONFIG_MIB_DMRS_TYPEA_POSITION_IDX +#define GNB_CONFIG_PDCCH_CONFIGSIB1_IDX +#define GNB_CONFIG_SIB1_FREQUENCYOFFSETSSB_IDX +#define GNB_CONFIG_SIB1_SSB_PERIODICITYSERVINGCELL_IDX +#define GNB_CONFIG_SIB1_SS_PBCH_BLOCKPOWER_IDX +#define GNB_CONFIG_ABSOLUTEFREQUENCYSSB_IDX +#define GNB_CONFIG_SSB_SUBCARRIEROFFSET_IDX +#define GNB_CONFIG_DL_FREQBANDINDICATORNR_IDX +#define GNB_CONFIG_DL_ABSOLUTEFREQUENCYPOINTA_IDX +#define GNB_CONFIG_DL_OFFSETTOCARRIER_IDX +#define GNB_CONFIG_DL_SUBCARRIERSPACING_IDX +#define GNB_CONFIG_DL_SCS_SPECIFICCARRIER_K0_IDX +#define GNB_CONFIG_DL_CARRIERBANDWIDTH_IDX +#define GNB_CONFIG_DL_LOCATIONANDBANDWIDTH_IDX +#define GNB_CONFIG_UL_FREQBANDINDICATORNR_IDX +#define GNB_CONFIG_UL_ABSOLUTEFREQUENCYPOINTA_IDX +#define GNB_CONFIG_FREQUENCYINFOUL_P_MAX_IDX +#define GNB_CONFIG_FREQUENCYSHIFT7P5KHZ_IDX +#define GNB_CONFIG_UL_OFFSETTOCARRIER_IDX +#define GNB_CONFIG_UL_SUBCARRIERSPACING_IDX +#define GNB_CONFIG_UL_SCS_SPECIFICCARRIER_K0_IDX +#define GNB_CONFIG_UL_CARRIERBANDWIDTH_IDX +#define GNB_CONFIG_UL_LOCATIONANDBANDWIDTH_IDX +#define GNB_CONFIG_SUBCARRIERSPACINGCOMMON_IDX +#define GNB_CONFIG_PDCCH_CONFIGSIB1_IDX +#define GNB_CONFIG_FREQUENCYOFFSETSSB_IDX +#define GNB_CONFIG_SERVINGCELLCONFIGCOMMON_SSB_PERIODICITYSERVINGCELL_IDX +#define GNB_CONFIG_SERVINGCELLCONFIGCOMMON_DMRS_TYPEA_POSITION_IDX +#define GNB_CONFIG_NIA_SUBCARRIERSPACING_IDX +#define GNB_CONFIG_SERVINGCELLCONFIGCOMMON_SS_PBCH_BLOCKPOWER_IDX +#define GNB_CONFIG_REFERENCESUBCARRIERSPACING_IDX +#define GNB_CONFIG_DL_UL_TRANSMISSIONPERIODICITY_IDX +#define GNB_CONFIG_NROFDOWNLINKSLOTS_IDX +#define GNB_CONFIG_NROFDOWNLINKSYMBOLS_IDX +#define GNB_CONFIG_NROFUPLINKSLOTS_IDX +#define GNB_CONFIG_NROFUPLINKSYMBOLS_IDX +#define GNB_CONFIG_RACH_TOTALNUMBEROFRA_PREAMBLES_IDX +#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_CHOICE_IDX +#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONEEIGHTH_IDX +#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONEFOURTH_IDX +#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONEHALF_IDX +#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONE_IDX +#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_TWO_IDX +#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_FOUR_IDX +#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_EIGHT_IDX +#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_SIXTEEN_IDX +#define GNB_CONFIG_RACH_GROUPBCONFIGURED_IDX +#define GNB_CONFIG_RACH_RA_MSG3SIZEGROUPA_IDX +#define GNB_CONFIG_RACH_MESSAGEPOWEROFFSETGROUPB_IDX +#define GNB_CONFIG_RACH_NUMBEROFRA_PREAMBLESGROUPA_IDX +#define GNB_CONFIG_RACH_RA_CONTENTIONRESOLUTIONTIMER_IDX +#define GNB_CONFIG_RSRP_THRESHOLDSSB_IDX +#define GNB_CONFIG_RSRP_THRESHOLDSSB_SUL_IDX +#define GNB_CONFIG_PRACH_ROOTSEQUENCEINDEX_CHOICE_IDX +#define GNB_CONFIG_PRACH_ROOTSEQUENCEINDEX_L839_IDX +#define GNB_CONFIG_PRACH_ROOTSEQUENCEINDEX_L139_IDX +#define GNB_CONFIG_PRACH_MSG1_SUBCARRIERSPACING_IDX +#define GNB_CONFIG_RESTRICTEDSETCONFIG_IDX +#define GNB_CONFIG_MSG3_TRANSFORMPRECODING_IDX +#define GNB_CONFIG_PRACH_CONFIGURATIONINDEX_IDX +#define GNB_CONFIG_PRACH_MSG1_FDM_IDX +#define GNB_CONFIG_PRACH_MSG1_FREQUENCYSTART_IDX +#define GNB_CONFIG_ZEROCORRELATIONZONECONFIG_IDX +#define GNB_CONFIG_PREAMBLERECEIVEDTARGETPOWER_IDX +#define GNB_CONFIG_PREAMBLETRANSMAX_IDX +#define GNB_CONFIG_POWERRAMPINGSTEP_IDX +#define GNB_CONFIG_RA_RESPONSEWINDOW_IDX +#define GNB_CONFIG_GROUPHOPPINGENABLEDTRANSFORMPRECODING_IDX +#define GNB_CONFIG_MSG3_DELTAPREAMBLE_IDX +#define GNB_CONFIG_P0_NOMINALWITHGRANT_IDX +#define GNB_CONFIG_PUSCH_TIMEDOMAINRESOURCEALLOCATION_K2_IDX +#define GNB_CONFIG_PUSCH_TIMEDOMAINRESOURCEALLOCATION_MAPPINGTYPE_IDX +#define GNB_CONFIG_PUCCH_GROUPHOPPING_IDX +#define GNB_CONFIG_P0_NOMINAL_IDX +#define GNB_CONFIG_PDSCH_TIMEDOMAINRESOURCEALLOCATION_K0_IDX +#define GNB_CONFIG_PDSCH_TIMEDOMAINRESOURCEALLOCATION_MAPPINGTYPE_IDX +#define GNB_CONFIG_RATEMATCHPATTERNID_IDX +#define GNB_CONFIG_RATEMATCHPATTERN_PATTERNTYPE_IDX +#define GNB_CONFIG_SYMBOLSINRESOURCEBLOCK_IDX +#define GNB_CONFIG_PERIODICITYANDPATTERN_IDX +#define GNB_CONFIG_RATEMATCHPATTERN_CONTROLRESOURCESET_IDX +#define GNB_CONFIG_RATEMATCHPATTERN_SUBCARRIERSPACING_IDX +#define GNB_CONFIG_RATEMATCHPATTERN_MODE_IDX +#define GNB_CONFIG_SEARCHSPACESIB1_IDX +#define GNB_CONFIG_SEARCHSPACEOTHERSYSTEMINFORMATION_IDX +#define GNB_CONFIG_PAGINGSEARCHSPACE_IDX +#define GNB_CONFIG_RA_SEARCHSPACE_IDX +#define GNB_CONFIG_RACH_RA_CONTROLRESOURCESET_IDX +#define GNB_CONFIG_PDCCH_COMMON_CONTROLRESOURCESETID_IDX +#define GNB_CONFIG_PDCCH_COMMON_CONTROLRESOURCESET_DURATION_IDX +#define GNB_CONFIG_PDCCH_CCE_REG_MAPPINGTYPE_IDX +#define GNB_CONFIG_PDCCH_REG_BUNDLESIZE_IDX +#define GNB_CONFIG_PDCCH_INTERLEAVERSIZE_IDX +#define GNB_CONFIG_PDCCH_SHIFTINDEX_IDX +#define GNB_CONFIG_PDCCH_PRECODERGRANULARITY_IDX +#define GNB_CONFIG_TCI_PRESENTINDCI_IDX +#define GNB_CONFIG_SEARCHSPACEID_IDX +#define GNB_CONFIG_COMMONSEARCHSPACES_CONTROLRESOURCESETID_IDX +#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_CHOICE_IDX +#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL1_IDX +#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL2_IDX +#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL4_IDX +#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL5_IDX +#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL8_IDX +#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL10_IDX +#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL16_IDX +#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL20_IDX +#define GNB_CONFIG_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL1_IDX +#define GNB_CONFIG_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL2_IDX +#define GNB_CONFIG_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL4_IDX +#define GNB_CONFIG_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL8_IDX +#define GNB_CONFIG_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL16_IDX +#define GNB_CONFIG_SEARCHSPACE_SEARCHSPACETYPE_IDX +#define GNB_CONFIG_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL1_IDX +#define GNB_CONFIG_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL2_IDX +#define GNB_CONFIG_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL4_IDX +#define GNB_CONFIG_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL8_IDX +#define GNB_CONFIG_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL16_IDX +#define GNB_CONFIG_COMMON_DCI_FORMAT2_3_MONITORINGPERIODICITY_IDX +#define GNB_CONFIG_COMMON_DCI_FORMAT2_3_NROFPDCCH_CANDIDATES_IDX +#define GNB_CONFIG_UE_SPECIFIC__DCI_FORMATS_IDX diff --git a/openair2/RRC/NR/MESSAGES/ans1c/ASN1_files/NR-InterNodeDefinitions.asn b/openair2/RRC/NR/MESSAGES/ans1c/ASN1_files/NR-InterNodeDefinitions.asn deleted file mode 100755 index 13cbb9258444b5cc4477adc5a1a9078e871aed0d..0000000000000000000000000000000000000000 --- a/openair2/RRC/NR/MESSAGES/ans1c/ASN1_files/NR-InterNodeDefinitions.asn +++ /dev/null @@ -1,282 +0,0 @@ -NR-InterNodeDefinitions DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - --- TAG-HANDOVER-COMMAND-START - -HandoverCommand ::= SEQUENCE { - criticalExtensions CHOICE { - c1 CHOICE{ - handoverCommand HandoverCommand-IEs, - spare3 NULL, spare2 NULL, spare1 NULL - }, - criticalExtensionsFuture SEQUENCE {} - } -} - -HandoverCommand-IEs ::= SEQUENCE { - handoverCommandMessage OCTET STRING (CONTAINING RRCReconfiguration), - nonCriticalExtension SEQUENCE {} OPTIONAL -} - --- TAG-HANDOVER-COMMAND-STOP --- TAG-HANDOVER-PREPARATION-INFORMATION-START - -HandoverPreparationInformation ::= SEQUENCE { - criticalExtensions CHOICE { - c1 CHOICE{ - handoverPreparationInformation HandoverPreparationInformation-IEs, - spare3 NULL, spare2 NULL, spare1 NULL - }, - criticalExtensionsFuture SEQUENCE {} - } -} - -HandoverPreparationInformation-IEs ::= SEQUENCE { - ue-CapabilityRAT-List UE-CapabilityRAT-ContainerList, - sourceConfig OCTET STRING (CONTAINING RRCReconfiguration), - rrm-Config RRM-Config OPTIONAL, - as-Context AS-Context OPTIONAL, - nonCriticalExtension SEQUENCE {} OPTIONAL -} - -AS-Context ::= SEQUENCE { - reestablishmentInfo SEQUENCE { - sourcePhysCellId PhysCellId, - targetCellShortMAC-I ShortMAC-I, - additionalReestabInfoList ReestabNCellInfoList OPTIONAL - } OPTIONAL, - -- FFS Whether to change e.g. move all re-establishment info to Xx - configRestrictInfo ConfigRestrictInfoSCG OPTIONAL, - ... -} - -ReestabNCellInfoList ::= SEQUENCE ( SIZE (1..maxCellPrep) ) OF ReestabNCellInfo - -ReestabNCellInfo::= SEQUENCE{ - cellIdentity CellIdentity, - key-gNodeB-Star BIT STRING (SIZE (256)), - shortMAC-I ShortMAC-I -} - -RRM-Config ::= SEQUENCE { - ue-InactiveTime ENUMERATED { - s1, s2, s3, s5, s7, s10, s15, s20, - s25, s30, s40, s50, min1, min1s20c, min1s40, - min2, min2s30, min3, min3s30, min4, min5, min6, - min7, min8, min9, min10, min12, min14, min17, min20, - min24, min28, min33, min38, min44, min50, hr1, - hr1min30, hr2, hr2min30, hr3, hr3min30, hr4, hr5, hr6, - hr8, hr10, hr13, hr16, hr20, day1, day1hr12, day2, - day2hr12, day3, day4, day5, day7, day10, day14, day19, - day24, day30, dayMoreThan30} OPTIONAL , - candidateCellInfoList CandidateCellInfoList OPTIONAL, - ... -} - --- TAG-HANDOVER-PREPARATION-INFORMATION-STOP --- TAG-CG-CONFIG-START - -CG-Config ::= SEQUENCE { - criticalExtensions CHOICE { - c1 CHOICE{ - cg-Config CG-Config-IEs, - spare3 NULL, spare2 NULL, spare1 NULL - }, - criticalExtensionsFuture SEQUENCE {} - } -} - -CG-Config-IEs ::= SEQUENCE { - scg-CellGroupConfig OCTET STRING (CONTAINING RRCReconfiguration) OPTIONAL, - scg-RB-Config OCTET STRING (CONTAINING RadioBearerConfig) OPTIONAL, - configRestrictModReq ConfigRestrictModReqSCG OPTIONAL, - drx-InfoSCG DRX-Info OPTIONAL, - candidateCellInfoListSN OCTET STRING (CONTAINING CandidateCellInfoList) OPTIONAL, - measConfigSN MeasConfigSN OPTIONAL, - selectedBandCombinationNR BandCombinationIndex OPTIONAL, - nonCriticalExtension SEQUENCE {} OPTIONAL -} - -MeasConfigSN ::= SEQUENCE { - measuredFrequenciesFR1 SEQUENCE (SIZE (1..maxMeasFreqsMN)) OF NR-FreqInfo OPTIONAL, - ... -} - -NR-FreqInfo ::= SEQUENCE { - measuredFrequency ARFCN-ValueNR OPTIONAL, - ... -} - -ConfigRestrictModReqSCG ::= SEQUENCE { - requestedBC-MRDC BandCombinationIndex OPTIONAL, - requestedBPC-ListMRDC BPC-IndexList OPTIONAL, - requestedP-MaxFR1 P-Max OPTIONAL, - ... -} - -BandCombinationIndex ::= INTEGER (1..maxBandComb) - --- TAG-CG-CONFIG-STOP --- TAG-CG-CONFIG-INFO-START - -CG-ConfigInfo ::= SEQUENCE { - criticalExtensions CHOICE { - c1 CHOICE{ - cg-ConfigInfo CG-ConfigInfo-IEs, - spare3 NULL, spare2 NULL, spare1 NULL - }, - criticalExtensionsFuture SEQUENCE {} - } -} - -CG-ConfigInfo-IEs ::= SEQUENCE { - ue-CapabilityInfo OCTET STRING (CONTAINING UE-CapabilityRAT-ContainerList) OPTIONAL,-- Cond SN-Addition - candidateCellInfoListMN CandidateCellInfoList OPTIONAL, - candidateCellInfoListSN OCTET STRING (CONTAINING CandidateCellInfoList) OPTIONAL, - measResultCellListSFTD MeasResultCellListSFTD OPTIONAL, - scgFailureInfo SEQUENCE { - failureType ENUMERATED { t310-Expiry, randomAccessProblem, - rlc-MaxNumRetx, scg-ChangeFailure, - scg-reconfigFailure, - srb3-IntegrityFailure}, - measResultSCG OCTET STRING (CONTAINING MeasResultSCG-Failure) - } OPTIONAL, - configRestrictInfo ConfigRestrictInfoSCG OPTIONAL, - drx-InfoMCG DRX-Info OPTIONAL, - measConfigMN MeasConfigMN OPTIONAL, - sourceConfigSCG OCTET STRING (CONTAINING RRCReconfiguration) OPTIONAL, - scg-RB-Config OCTET STRING (CONTAINING RadioBearerConfig) OPTIONAL, - mcg-RB-Config OCTET STRING (CONTAINING RadioBearerConfig) OPTIONAL, - nonCriticalExtension SEQUENCE {} OPTIONAL -} - -ConfigRestrictInfoSCG ::= SEQUENCE { - allowedBC-ListMRDC BandCombinationIndexList OPTIONAL, - allowedBPC-ListMRDC BPC-IndexList OPTIONAL, - powerCoordination-FR1 SEQUENCE { - p-maxNR P-Max OPTIONAL, - p-maxEUTRA P-Max OPTIONAL - } OPTIONAL, - servCellIndexRangeSCG SEQUENCE { - lowBound ServCellIndex, - upBound ServCellIndex - } OPTIONAL, -- Cond SN-Addition - maxMeasFreqsSCG-NR INTEGER(1..maxMeasFreqsMN) OPTIONAL, - ... -} - -BandCombinationIndexList ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombinationIndex - -BPC-IndexList ::= SEQUENCE (SIZE (1..maxBasebandProcComb)) OF BPC-Index -BPC-Index ::= INTEGER (1..maxBasebandProcComb) - -DRX-Info ::= SEQUENCE { - drx-LongCycleStartOffset CHOICE { - ms10 INTEGER(0..9), - ms20 INTEGER(0..19), - ms32 INTEGER(0..31), - ms40 INTEGER(0..39), - ms60 INTEGER(0..59), - ms64 INTEGER(0..63), - ms70 INTEGER(0..69), - ms80 INTEGER(0..79), - ms128 INTEGER(0..127), - ms160 INTEGER(0..159), - ms256 INTEGER(0..255), - ms320 INTEGER(0..319), - ms512 INTEGER(0..511), - ms640 INTEGER(0..639), - ms1024 INTEGER(0..1023), - ms1280 INTEGER(0..1279), - ms2048 INTEGER(0..2047), - ms2560 INTEGER(0..2559), - ms5120 INTEGER(0..5119), - ms10240 INTEGER(0..10239) - }, - shortDRX SEQUENCE { - drx-ShortCycle ENUMERATED { - ms2, ms3, ms4, ms5, ms6, ms7, ms8, ms10, ms14, ms16, ms20, ms30, ms32, - ms35, ms40, ms64, ms80, ms128, ms160, ms256, ms320, ms512, ms640, spare9, - spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1 }, - drx-ShortCycleTimer INTEGER (1..16) - } OPTIONAL -} - -MeasConfigMN ::= SEQUENCE { - measuredFrequenciesMN SEQUENCE (SIZE (1..maxMeasFreqsMN)) OF NR-FreqInfo OPTIONAL, - measGapConfigFR1 GapConfig OPTIONAL, - gapPurpose ENUMERATED {perUE, perFR1} OPTIONAL, - ... -} - - --- TAG-CG-CONFIG-INFO-STOP --- TAG-MEASUREMENT-TIMING-CONFIGURATION-START - -MeasurementTimingConfiguration ::= SEQUENCE { - criticalExtensions CHOICE { - c1 CHOICE{ - measTimingConf MeasurementTimingConfiguration-IEs, - spare3 NULL, spare2 NULL, spare1 NULL - }, - criticalExtensionsFuture SEQUENCE {} - } -} - -MeasurementTimingConfiguration-IEs ::= SEQUENCE { - measTiming MeasTimingList OPTIONAL, - nonCriticalExtension SEQUENCE {} OPTIONAL -} - -MeasTimingList ::= SEQUENCE (SIZE (1..maxMeasFreqsMN)) OF MeasTiming - -MeasTiming ::= SEQUENCE { - carrierFreq ARFCN-ValueNR OPTIONAL, - ssb-MeasurementTimingConfiguration ENUMERATED {ffsTypeAndValue} OPTIONAL, - ... -} - --- TAG-MEASUREMENT-TIMING-CONFIGURATION-STOP --- TAG-CANDIDATE-CELL-INFO-LIST-START - -CandidateCellInfoList ::= SEQUENCE (SIZE (1.. maxNrofSCells)) OF CandidateCellInfo - -CandidateCellInfo ::= SEQUENCE { - cellIdentification SEQUENCE { - physCellId PhysCellId, - dl-CarrierFreq ARFCN-ValueNR - }, - measResultCell MeasQuantityResults OPTIONAL, - candidateRS-IndexListSSB CandidateRS-IndexInfoListSSB OPTIONAL, - candidateRS-IndexListCSI-RS CandidateRS-IndexInfoListCSI-RS OPTIONAL, - ... -} - -CandidateRS-IndexInfoListSSB ::= SEQUENCE (SIZE (1..maxNrofIndexesToReport)) OF CandidateRS-IndexInfoSSB - -CandidateRS-IndexInfoSSB ::= SEQUENCE { - ssb-Index SSB-Index, - measResultSSB MeasQuantityResults OPTIONAL, - ... -} - -CandidateRS-IndexInfoListCSI-RS ::= SEQUENCE (SIZE (1..maxNrofIndexesToReport)) OF CandidateRS-IndexInfoCSI-RS - -CandidateRS-IndexInfoCSI-RS ::= SEQUENCE { - csi-RS-Index CSI-RS-Index, - measResultCSI-RS MeasQuantityResults OPTIONAL, - ... -} - --- TAG-CANDIDATE-CELL-INFO-LIST-STOP --- TAG_NR-MULTIPLICITY-AND-CONSTRAINTS-START - -maxMeasFreqsMN INTEGER ::= 32 -- Maximum number of MN-configured measurement frequencies -maxCellPrep INTEGER ::= 32 -- Maximum number of cells prepared for handover - --- TAG_NR-MULTIPLICITY-AND-CONSTRAINTS-STOP --- TAG_NR-INTER-NODE-DEFINITIONS-END-START - -END - diff --git a/openair2/RRC/NR/MESSAGES/ans1c/ASN1_files/NR-RRC-Definitions.asn b/openair2/RRC/NR/MESSAGES/ans1c/ASN1_files/NR-RRC-Definitions.asn deleted file mode 100755 index 84426f50bb5ed9112bb03da3050b28217d19f3c7..0000000000000000000000000000000000000000 --- a/openair2/RRC/NR/MESSAGES/ans1c/ASN1_files/NR-RRC-Definitions.asn +++ /dev/null @@ -1,5480 +0,0 @@ -NR-RRC-Definitions DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - --- TAG-BCCH-BCH-MESSAGE-START - -BCCH-BCH-Message ::= SEQUENCE { - message BCCH-BCH-MessageType -} - -BCCH-BCH-MessageType ::= CHOICE { - mib MIB, - messageClassExtension SEQUENCE {} -} - --- TAG-BCCH-BCH-MESSAGE-STOP --- TAG-DL-DCCH-MESSAGE-START - -DL-DCCH-Message ::= SEQUENCE { - message DL-DCCH-MessageType -} - -DL-DCCH-MessageType ::= CHOICE { - c1 CHOICE { - rrcReconfiguration RRCReconfiguration, - spare15 NULL, spare14 NULL, spare13 NULL, - spare12 NULL, spare11 NULL, spare10 NULL, - spare9 NULL, spare8 NULL, spare7 NULL, - spare6 NULL, spare5 NULL, spare4 NULL, - spare3 NULL, spare2 NULL, spare1 NULL - }, - messageClassExtension SEQUENCE {} -} - --- TAG-DL-DCCH-MESSAGE-STOP --- TAG-UL-DCCH-MESSAGE-START - -UL-DCCH-Message ::= SEQUENCE { - message UL-DCCH-MessageType -} - -UL-DCCH-MessageType ::= CHOICE { - c1 CHOICE { - measurementReport MeasurementReport, - rrcReconfigurationComplete RRCReconfigurationComplete, - spare14 NULL, spare13 NULL, spare12 NULL, - spare11 NULL, spare10 NULL, spare9 NULL, - spare8 NULL, spare7 NULL, spare6 NULL, - spare5 NULL, spare4 NULL, spare3 NULL, - spare2 NULL, spare1 NULL - }, - messageClassExtension SEQUENCE {} -} - --- TAG-UL-DCCH-MESSAGE-STOP --- TAG-MIB-START - -MIB ::= SEQUENCE { - -- The 6 most significant bit (MSB) of the 10 bit System Frame Number. The 4 LSB of the SFN are conveyed in the PBCH transport block - -- as well but outside the MIB. - systemFrameNumber BIT STRING (SIZE (6)), - - -- Subcarrier spacing for SIB1, Msg.2/4 for initial access and broadcast SI-messages. - -- If the UE acquires this MIB on a carrier frequency <6GHz, the values 15 and 30 kHz are applicable. - -- If the UE acquires this MIB on a carrier frequency >6GHz, the values 60 and 120 kHz are applicable. - subCarrierSpacingCommon ENUMERATED {scs15or60, scs30or120}, - - -- The frequency domain offset between SSB and the overall resource block grid in number of subcarriers. (See 38.211, section 7.4.3.1) - -- Note: For frequencies <6 GHz a fith, this field may comprise only the 4 least significant bits of the ssb-SubcarrierOffset. - -- The codepoint "FFS_RAN1" indicates that this cell does not provide SIB1 and that there is hence no common CORESET. - ssb-SubcarrierOffset INTEGER (0..15), - - -- Position of (first) DL DM-RS. Corresponds to L1 parameter 'DL-DMRS-typeA-pos' (see 38.211, section 7.4.1.1.1) - dmrs-TypeA-Position ENUMERATED {pos2, pos3}, - - -- Determines a bandwidth for PDCCH/SIB, a common ControlResourceSet (CORESET) a common search space and necessary PDCCH parameters. - -- Corresponds to L1 parameter 'RMSI-PDCCH-Config' (see FFS_Specification, section FFS_Section) - pdcch-ConfigSIB1 INTEGER (0..255), - - -- Indicates that UE shall not camp on this cell - cellBarred ENUMERATED {barred, notBarred}, - - -- Controls cell reselection to intra-frequency cells when the highest ranked cell is barred, or treated as barred by the UE, - -- as specified in TS 38.304. - intraFreqReselection ENUMERATED {allowed, notAllowed}, - spare BIT STRING (SIZE (1)) -} - --- TAG-MIB-STOP --- TAG-MEASUREMENTREPORT-START - -MeasurementReport ::= SEQUENCE { - criticalExtensions CHOICE { - measurementReport MeasurementReport-IEs, - criticalExtensionsFuture SEQUENCE {} - } -} - -MeasurementReport-IEs ::= SEQUENCE { - measResults MeasResults, - - lateNonCriticalExtension OCTET STRING OPTIONAL, - nonCriticalExtension SEQUENCE{} OPTIONAL -} - --- TAG-MEASUREMENTREPORT-STOP --- TAG-RRCRECONFIGURATION-START - -RRCReconfiguration ::= SEQUENCE { - rrc-TransactionIdentifier RRC-TransactionIdentifier, - criticalExtensions CHOICE { - rrcReconfiguration RRCReconfiguration-IEs, - criticalExtensionsFuture SEQUENCE {} - } -} - -RRCReconfiguration-IEs ::= SEQUENCE { - -- Configuration of Radio Bearers (DRBs, SRBs) including SDAP/PDCP. - -- In EN-DC this field may only be present if the RRCReconfiguration - -- is transmitted over SRB3. - radioBearerConfig RadioBearerConfig OPTIONAL, -- Need M - - -- Configuration of secondary cell group (EN-DC): - secondaryCellGroup OCTET STRING (CONTAINING CellGroupConfig) OPTIONAL, -- Need M - - measConfig MeasConfig OPTIONAL, -- Need M - - lateNonCriticalExtension OCTET STRING OPTIONAL, - nonCriticalExtension SEQUENCE {} OPTIONAL -} - --- TAG-RRCRECONFIGURATION-STOP --- TAG-RRCRECONFIGURATIONCOMPLETE-START - -RRCReconfigurationComplete ::= SEQUENCE { - rrc-TransactionIdentifier RRC-TransactionIdentifier, - criticalExtensions CHOICE { - rrcReconfigurationComplete RRCReconfigurationComplete-IEs, - criticalExtensionsFuture SEQUENCE {} - } -} - -RRCReconfigurationComplete-IEs ::= SEQUENCE { - lateNonCriticalExtension OCTET STRING OPTIONAL, - nonCriticalExtension SEQUENCE {} OPTIONAL -} - --- TAG-RRCRECONFIGURATIONCOMPLETE-STOP --- TAG-SIB1-START - -SIB1 ::= SEQUENCE { - - -- FFS / TODO: Add other parameters. - - -- Frequency offset for the SSB of -5kHz (M=-1) or +5kHz (M=1). When the field is absent, the UE applies no offset (M=0). - -- The offset is only applicable for the frequency range 0-2.65GHz. Corresponds to parameter 'M' (see 38.101, section FFS_Section) - frequencyOffsetSSB ENUMERATED {khz-5, khz5} OPTIONAL, -- Need R - - -- Time domain positions of the transmitted SS-blocks in an SS-Burst-Set (see 38.213, section 4.1) - ssb-PositionsInBurst SEQUENCE { - -- Indicates the presence of the up to 8 SSBs in one group - inOneGroup BIT STRING (SIZE (8)), - -- For above 6 GHz: indicates which groups of SSBs is present - groupPresence BIT STRING (SIZE (8)) OPTIONAL -- Cond above6GHzOnly - }, - - -- The SSB periodicity in msec for the rate matching purpose (see 38.211, section [7.4.3.1]) - ssb-PeriodicityServingCell ENUMERATED {ms5, ms10, ms20, ms40, ms80, ms160, spare1, spare2}, - - -- TX power that the NW used for SSB transmission. The UE uses it to estimate the RA preamble TX power. - -- (see 38.213, section 7.4) - ss-PBCH-BlockPower INTEGER (-60..50), - - uplinkConfigCommon UplinkConfigCommon OPTIONAL, - -- FFS: How to indicate the FrequencyInfoUL for the SUL - supplementaryUplink SEQUENCE { - uplinkConfigCommon UplinkConfigCommon OPTIONAL - -- FFS: Add additional (selection) criteria determining when/whether the UE shall use the SUL frequency - } OPTIONAL, -- Cond SUL - - tdd-UL-DL-Configuration TDD-UL-DL-ConfigCommon OPTIONAL, -- Cond TDD - tdd-UL-DL-configurationCommon2 TDD-UL-DL-ConfigCommon OPTIONAL, -- Cond TDD - - pdcch-ConfigCommon PDCCH-ConfigCommon OPTIONAL, - pucch-ConfigCommon PUCCH-ConfigCommon OPTIONAL, - - lateNonCriticalExtension OCTET STRING OPTIONAL, - nonCriticalExtension SEQUENCE{} OPTIONAL -} - --- TAG-SIB1-STOP --- TAG-SETUP-RELEASE-START - -SetupRelease { ElementTypeParam } ::= CHOICE { - release NULL, - setup ElementTypeParam -} - --- TAG-SETUP-RELEASE-STOP --- TAG-ADDITIONALSPECTRUMEMISSION-START - -AdditionalSpectrumEmission ::= INTEGER (0..7) - --- TAG-ADDITIONALSPECTRUMEMISSION-STOP --- TAG-ALPHA-START - -Alpha ::= ENUMERATED {alpha0, alpha04, alpha05, alpha06, alpha07, alpha08, alpha09, alpha1} - --- TAG-ALPHA-STOP --- TAG-ARFCN-VALUE-NR-START - -ARFCN-ValueNR ::= INTEGER (0..3279165) - --- TAG-ARFCN-VALUE-NR-STOP --- TAG-BANDWIDTH-PART-START - - --- Generic parameters used in Uplink- and Downlink bandwidth parts -BWP ::= SEQUENCE { - -- Frequency domain location and bandwidth of this bandwidth part defined commonly in a table (FFS_Section). The location is given as - -- distance (in number of PRBs) to point A (absoluteFrequencyPointA in FrequencyInfoDL). - -- Corresponds to L1 parameter 'DL-BWP-loc'. (see 38.211, section FFS_Section). - -- In case of TDD, a BWP-pair (UL BWP and DL BWP with the same bwp-Id) must have the same location (see 38.211, section REF) - locationAndBandwidth INTEGER (0..37949), - -- Subcarrier spacing to be used in this BWP for all channels and - -- reference signals unless explicitly configured elsewhere. - -- Corresponds to subcarrier spacing according to 38.211, Table 4.2-1. - -- The value kHz15 corresponds to µ=0, kHz30 to µ=1, and so on. Only the values 15 or 30 kHz (<6GHz), 60 or 120 kHz (>6GHz) are - -- applicable. - subcarrierSpacing SubcarrierSpacing, - -- Indicates whether to use the extended cyclic prefix for this bandwidth part. If not set, the UE uses the normal cyclic prefix. - -- Normal CP is supported for all numerologies and slot formats. Extended CP is supported only for 60 kHz subcarrier spacing. - -- (see 38.211, section 4.2.2) - cyclicPrefix ENUMERATED { extended } OPTIONAL -- Need R -} - -BWP-Uplink ::= SEQUENCE { - -- An identifier for this bandwidth part. Other parts of the RRC configuration use the BWP-Id to associate themselves with a particular - -- bandwidth part. The BWP ID=0 is always associated with the initial BWP and may hence not be used here (in other bandwidth parts). - -- The NW may trigger the UE to swtich UL or DL BWP using a DCI field. The four code points in that DCI field map to the RRC-configured - -- BWP-ID as follows: For up to 3 configured BWPs (in addition to the initial BWP) the DCI code point is equivalent to the BWP ID - -- (initial = 0, first dedicated = 1, ...). If the NW configures 4 dedicated bandwidth parts, they are identified by DCI code - -- points 0 to 3. In this case it is not possible to switch to the initial BWP using the DCI field. - -- Corresponds to L1 parameter 'UL-BWP-index'. (see 38.211, 38.213, section 12) - bwp-Id BWP-Id, - bwp-Common BWP-UplinkCommon OPTIONAL, -- Need M - bwp-Dedicated BWP-UplinkDedicated OPTIONAL, -- Need M - ... -} - -BWP-UplinkCommon ::= SEQUENCE { - genericParameters BWP, - -- Configuration of cell specific random access parameters which the UE uses for contention based and contention free random access - -- as well as for contention based beam failure recovery. - rach-ConfigCommon SetupRelease { RACH-ConfigCommon } OPTIONAL, -- Need M - -- Cell specific parameters for the PUSCH - pusch-ConfigCommon SetupRelease { PUSCH-ConfigCommon } OPTIONAL, -- Need M - - -- Cell specific parameters for the PUCCH - pucch-ConfigCommon SetupRelease { PUCCH-ConfigCommon } OPTIONAL, -- Need M - ... -} - -BWP-UplinkDedicated ::= SEQUENCE { - -- PUCCH configuration for one BWP of the regular UL or SUL of a serving cell. If the UE is configured with SUL, the network - -- configures PUCCH only on the BWPs of one of the uplinks (UL or SUL). - pucch-Config SetupRelease { PUCCH-Config } OPTIONAL, -- Need M - -- PUSCH configuration for one BWP of the regular UL or SUL of a serving cell. If the UE is configured with SUL and - -- if it has a PUSCH-Config for both UL and SUL, a carrier indicator field in DCI indicates for which of the two to use an UL grant. - -- See also L1 parameter 'dynamicPUSCHSUL' (see 38.213, section FFS_Section) - pusch-Config SetupRelease { PUSCH-Config } OPTIONAL, -- Need M - -- A Configured-Grant of typ1 or type2. It may be configured for Ul or SUL but in case of type1 [FFS also type2] not for both at a time. - configuredGrantConfig SetupRelease { ConfiguredGrantConfig } OPTIONAL, -- Need M - -- Uplink sounding reference signal configuration - srs-Config SetupRelease { SRS-Config } OPTIONAL, -- Need M - -- Determines how the UE performs Beam Failure Recovery upon detection of a Beam Failure (see RadioLinkMonitoringConfig) - beamFailureRecoveryConfig SetupRelease { BeamFailureRecoveryConfig } OPTIONAL, -- Need M - ... -} - - -BWP-Downlink ::= SEQUENCE { - -- An identifier for this bandwidth part. Other parts of the RRC configuration use the BWP-Id to associate themselves with a particular - -- bandwidth part. The BWP ID=0 is always associated with the initial BWP and may hence not be used here. (in other bandwidth parts). - -- The NW may trigger the UE to swtich UL or DL BWP using a DCI field. The four code points in that DCI field map to the RRC-configured - -- BWP-ID as follows: For up to 3 configured BWPs (in addition to the initial BWP) the DCI code point is equivalent to the BWP ID - -- (initial = 0, first dedicated = 1, ...). If the NW configures 4 dedicated bandwidth parts, they are identified by DCI code - -- points 0 to 3. In this case it is not possible to switch to the initial BWP using the DCI field. - -- Corresponds to L1 parameter 'DL-BWP-index'. (see 38.211, 38.213, section 12) - bwp-Id BWP-Id, - bwp-Common BWP-DownlinkCommon OPTIONAL, -- Need M - bwp-Dedicated BWP-DownlinkDedicated OPTIONAL, -- Need M - ... -} - - -BWP-DownlinkCommon ::= SEQUENCE { - genericParameters BWP, - pdcch-ConfigCommon SetupRelease { PDCCH-ConfigCommon } OPTIONAL, -- Need M - pdsch-ConfigCommon SetupRelease { PDSCH-ConfigCommon } OPTIONAL, -- Need M - ... -} - -BWP-DownlinkDedicated ::= SEQUENCE { - pdcch-Config SetupRelease { PDCCH-Config } OPTIONAL, -- Need M - pdsch-Config SetupRelease { PDSCH-Config } OPTIONAL, -- Need M - sps-Config SetupRelease { SPS-Config } OPTIONAL, -- Need M - radioLinkMonitoringConfig SetupRelease { RadioLinkMonitoringConfig } OPTIONAL, -- Need M - ... -} - - --- TAG-BANDWIDTH-PART-STOP --- TAG-BWP-ID-START - -BWP-Id ::= INTEGER (0..maxNrofBWPs) - --- TAG-BWP-ID-STOP --- TAG-BEAM-FAILURE-RECOVERY-CONFIG-START - -BeamFailureRecoveryConfig ::= SEQUENCE { - rootSequenceIndex-BFR INTEGER (0..137) OPTIONAL, -- Need M - -- Configuration of contention free random access occasions for BFR - rach-ConfigBFR RACH-ConfigGeneric OPTIONAL, -- Need M - -- L1-RSRP threshold used for determining whether a candidate beam may be used by the UE to attempt contention free - -- Random Access to recover from beam failure. The signalled threshold is applied directly for SSB, a threshold for - -- CSI-RS is determined by linearly scaling singalled value based on Pc_ss corresponding to the CSI-RS resource. - -- (see FFS_Specification, FFS_Section) - candidateBeamThreshold RSRP-Range OPTIONAL, -- Need M - -- A list of reference signals (CSI-RS and/or SSB) identifying the candidate beams for recover and the associated RA parameters - candidateBeamRSList SEQUENCE (SIZE(1..maxNrofCandidateBeams)) OF PRACH-ResourceDedicatedBFR OPTIONAL, -- Need M - -- Explicitly signalled PRACH Mask Index for RA Resource selection in TS 36.321. The mask is valid for all SSB resources - ra-ssb-OccasionMaskIndex INTEGER (0..15) OPTIONAL, -- Need M - -- Control Resource Set that the UE uses to receive the random access response for beam failure recovery. - -- If the field is absent the UE uses the initial CORESET (ControlResourceSetId = 0) - recoveryControlResourceSetId ControlResourceSetId OPTIONAL , -- Need S - -- Search space to use for BFR RAR. If the field is absent, the UE uses the initial Serach Space (SearchSpaceId = 0). - recoverySearchSpaceId SearchSpaceId OPTIONAL, -- Need S - ... -} - -PRACH-ResourceDedicatedBFR ::= CHOICE { - ssb BFR-SSB-Resource, - csi-RS BFR-CSIRS-Resource -} - -BFR-SSB-Resource ::= SEQUENCE { - -- The ID of an SSB transmitted by this serving cell. It determines a candidate beam for beam failure recovery (BFR) - ssb SSB-Index, - -- The preamble index that the UE shall use when performing BFR upon selecting the candidate beams identified by this SSB. - ra-PreambleIndex INTEGER (0..63), - ... -} - -BFR-CSIRS-Resource ::= SEQUENCE { - -- The ID of a NZP-CSI-RS-Resource configured in the CSI-MeasConfig of this serving cell. This reference signal determines a candidate beam - -- for beam failure recovery (BFR). - csi-RS NZP-CSI-RS-ResourceId, - -- RA occasions that the UE shall use when performing BFR upon selecting the candidate beam identified by this CSI-RS. If the field is absent - -- the UE uses the RA occasion associated with the SSB that is QCLed with this CSI-RS. - -- The RA preamble index to use in the RA occasions associated with this CSI-RS. If the field is absent, the UE uses the preamble index - -- associated with the SSB that is QCLed with this CSI-RS. - ra-PreambleIndex INTEGER (0..63) OPTIONAL, -- Need R - ... -} - --- TAG-BEAM-FAILURE-RECOVERY-CONFIG-STOP --- TAG-CELL-GROUP-CONFIG-START - --- Configuration of one Cell-Group: -CellGroupConfig ::= SEQUENCE { - cellGroupId CellGroupId, - - -- Logical Channel configuration and association with radio bearers: - rlc-BearerToAddModList SEQUENCE (SIZE(1..maxLC-ID)) OF RLC-Bearer-Config OPTIONAL, -- Need N - rlc-BearerToReleaseList SEQUENCE (SIZE(1..maxLC-ID)) OF LogicalChannelIdentity OPTIONAL, -- Need N - - -- Parameters applicable for the entire cell group: - mac-CellGroupConfig MAC-CellGroupConfig OPTIONAL, -- Need M - physicalCellGroupConfig PhysicalCellGroupConfig OPTIONAL, -- Need M - - -- Serving Cell specific parameters (SpCell and SCells) - spCellConfig SpCellConfig OPTIONAL, -- Need M - sCellToAddModList SEQUENCE (SIZE (1..maxNrofSCells)) OF SCellConfig OPTIONAL, -- Need N - -- List of seconary serving cells to be released (not applicable for SpCells) - sCellToReleaseList SEQUENCE (SIZE (1..maxNrofSCells)) OF SCellIndex OPTIONAL, -- Need N - ... -} - --- The ID of a cell group. 0 identifies the master cell group. Other values identify secondary cell groups. --- In this version of the specification only values 0 and 1 are supported. --- FFS: This should be moved to be own IE section -CellGroupId ::= INTEGER (0.. maxSecondaryCellGroups) - - -RLC-Bearer-Config ::= SEQUENCE { - -- ID used commonly for the MAC logical channel and for the RLC bearer. - logicalChannelIdentity LogicalChannelIdentity, - - -- Associates the RLC Bearer with an SRB or a DRB. The UE shall deliver DL RLC SDUs received via the RLC entity of this - -- RLC bearer to the PDCP entity of the servedRadioBearer. Furthermore, the UE shall advertise and deliver uplink PDCP PDUs of the - -- uplink PDCP entity of the servedRadioBearer to the uplink RLC entity of this RLC bearer unless the uplink scheduling - -- restrictions ('moreThanOneRLC' in PDCP-Config and the restrictions in LogicalChannelConfig) forbid it to do so. - servedRadioBearer CHOICE { - srb-Identity SRB-Identity, - drb-Identity DRB-Identity - } OPTIONAL, -- Cond LCH-SetupOnly - - reestablishRLC ENUMERATED {true} OPTIONAL, -- Need N - rlc-Config RLC-Config OPTIONAL, -- Cond LCH-Setup - - mac-LogicalChannelConfig LogicalChannelConfig OPTIONAL, -- Cond LCH-Setup - ... -} - -LogicalChannelIdentity ::= INTEGER (1..maxLC-ID) - --- Cell-Group specific L1 parameters -PhysicalCellGroupConfig ::= SEQUENCE { - -- Enables spatial bundling of HARQ ACKs. It is configured per cell group (i.e. for all the cells within the cell group) for PUCCH - -- reporting of HARQ-ACK. It is only applicable when more than 4 layers are possible to schedule. - -- Corresponds to L1 parameter 'HARQ-ACK-spatial-bundling' (see 38.213, section FFS_Section) - -- Absence indicates that spatial bundling is disabled. - harq-ACK-SpatialBundlingPUCCH ENUMERATED {true} OPTIONAL, -- Need R - - -- Enables spatial bundling of HARQ ACKs. It is configured per cell group (i.e. for all the cells within the cell group) for PUSCH - -- reporting of HARQ-ACK. It is only applicable when more than 4 layers are possible to schedule. - -- Corresponds to L1 parameter 'HARQ-ACK-spatial-bundling' (see 38.213, section FFS_Section) - -- Absence indicates that spatial bundling is disabled. - harq-ACK-SpatialBundlingPUSCH ENUMERATED {true} OPTIONAL, -- Need R - -- The maximum transmit power to be used by the UE in this NR cell group. - p-NR P-Max OPTIONAL, -- Need R - -- The PDSCH HARQ-ACK codebook is either semi-static of dynamic. This is applicable to both CA and none CA operation. - -- Corresponds to L1 parameter 'HARQ-ACK-codebook' (see 38.213, section FFS_Section) - pdsch-HARQ-ACK-Codebook ENUMERATED {semiStatic, dynamic}, - -- RNTI used for SRS TPC commands on DCI. Corresponds to L1 parameter 'TPC-SRS-RNTI' (see 38.213, section 10) - tpc-SRS-RNTI RNTI-Value OPTIONAL, -- Need R - -- RNTI used for PUCCH TPC commands on DCI. Corresponds to L1 parameter 'TPC-PUCCH-RNTI' (see 38.213, section 10). - tpc-PUCCH-RNTI RNTI-Value OPTIONAL, -- Need R - -- RNTI used for PUSCH TPC commands on DCI. Corresponds to L1 parameter 'TPC-PUSCH-RNTI' (see 38.213, section 10) - tpc-PUSCH-RNTI RNTI-Value OPTIONAL,-- Need R - ... -} - - --- Serving cell specific MAC and PHY parameters for a SpCell: -SpCellConfig ::= SEQUENCE { - -- Serving cell ID of a PSCell (the PCell of the Master Cell Group uses ID = 0) - servCellIndex ServCellIndex OPTIONAL, -- Cond SCG - -- Parameters for the synchronous reconfiguration to the target SpCell: - reconfigurationWithSync ReconfigurationWithSync OPTIONAL, -- Cond ReconfWithSync - rlf-TimersAndConstants SetupRelease { RLF-TimersAndConstants } OPTIONAL, -- Need M - rlmInSyncOutOfSyncThreshold INTEGER (0..1) OPTIONAL, -- Need M - spCellConfigDedicated ServingCellConfig OPTIONAL, -- Need M - ... -} - -ReconfigurationWithSync ::= SEQUENCE { - spCellConfigCommon ServingCellConfigCommon OPTIONAL, -- Need M - newUE-Identity RNTI-Value, - t304 ENUMERATED {ms50, ms100, ms150, ms200, ms500, ms1000, ms2000, ms10000}, - rach-ConfigDedicated CHOICE { - uplink RACH-ConfigDedicated, - supplementaryUplink RACH-ConfigDedicated - } OPTIONAL, -- Need N - ... -} - -SCellConfig ::= SEQUENCE { - sCellIndex SCellIndex, - sCellConfigCommon ServingCellConfigCommon OPTIONAL, -- Cond SCellAdd - sCellConfigDedicated ServingCellConfig OPTIONAL, -- Cond SCellAddMod - ... -} - --- TAG-CELL-GROUP-CONFIG-STOP --- TAG-CODEBOOKCONFIG-START -CodebookConfig ::= SEQUENCE { - -- CodebookType including possibly sub-types and the corresponding parameters for each. Corresponds to L1 parameter 'CodebookType' - -- (see 38.214, section 5.2.2.2) - codebookType CHOICE { - type1 SEQUENCE { - subType CHOICE { - typeI-SinglePanel SEQUENCE { - nrOfAntennaPorts CHOICE { - two SEQUENCE { - -- Codebook subset restriction for 2TX codebook - -- Corresponds to L1 parameter ' TypeI-SinglePanel-2Tx-CodebookSubsetRestriction' (see 38.214 section 5.2.2.2.1) - twoTX-CodebookSubsetRestriction BIT STRING (SIZE (6)) - }, - moreThanTwo SEQUENCE { - -- Number of antenna ports in first (n1) and second (n2) dimension and codebook subset restriction - -- Corresponds to L1 parameters 'CodebookConfig-N1', 'CodebookConfig-N2' - -- 'TypeI-SinglePanel-CodebookSubsetRestriction ' (see 38.214 section 5.2.2.2.1) - n1-n2 CHOICE { - two-one-TypeI-SinglePanel-Restriction BIT STRING (SIZE (8)), - two-two-TypeI-SinglePanel-Restriction BIT STRING (SIZE (64)), - four-one-TypeI-SinglePanel-Restriction BIT STRING (SIZE (16)), - three-two-TypeI-SinglePanel-Restriction BIT STRING (SIZE (96)), - six-one-TypeI-SinglePanel-Restriction BIT STRING (SIZE (24)), - four-two-TypeI-SinglePanel-Restriction BIT STRING (SIZE (128)), - eight-one-TypeI-SinglePanel-Restriction BIT STRING (SIZE (32)), - four-three-TypeI-SinglePanel-Restriction BIT STRING (SIZE (192)), - six-two-TypeI-SinglePanel-Restriction BIT STRING (SIZE (192)), - twelve-one-TypeI-SinglePanel-Restriction BIT STRING (SIZE (48)), - four-four-TypeI-SinglePanel-Restriction BIT STRING (SIZE (256)), - eight-two-TypeI-SinglePanel-Restriction BIT STRING (SIZE (256)), - sixteen-one-TypeI-SinglePanel-Restriction BIT STRING (SIZE (64)) - }, - -- i2 codebook subset restriction for Type I Single-panel codebook used when reportQuantity is CRI/Ri/i1/CQI - -- Corresponds to L1 parameter 'TypeI-SinglePanel-CodebookSubsetRestriction-i2' (see 38.214 section 5.2.2.2.1) - typeI-SinglePanel-codebookSubsetRestriction-i2 BIT STRING (SIZE (16)) OPTIONAL - } - }, - -- Restriction for RI for TypeI-SinglePanel-RI-Restriction - -- Corresponds to L1 parameter 'TypeI-SinglePanel-RI-Restriction' (see 38.214, section 5.2.2.2.1) - typeI-SinglePanel-ri-Restriction BIT STRING (SIZE (8)) - }, - typeI-MultiPanel SEQUENCE { - -- Codebook subset restriction for Type I Multi-panel codebook - -- Corresponds to L1 parameter 'TypeI-MultiPanel-CodebookSubsetRestriction' (see 38.214, section 5.2.2.2.2) - ng-n1-n2 CHOICE { - two-two-one-TypeI-MultiPanel-Restriction BIT STRING (SIZE (8)), - two-four-one-TypeI-MultiPanel-Restriction BIT STRING (SIZE (32)), - four-two-one-TypeI-MultiPanel-Restriction BIT STRING (SIZE (32)), - two-two-two-TypeI-MultiPanel-Restriction BIT STRING (SIZE (128)), - two-eight-one-TypeI-MultiPanel-Restriction BIT STRING (SIZE (64)), - four-four-one-TypeI-MultiPanel-Restriction BIT STRING (SIZE (64)), - two-four-two-TypeI-MultiPanel-Restriction BIT STRING (SIZE (256)), - four-two-two-TypeI-MultiPanel-Restriction BIT STRING (SIZE (256)) - }, - -- Restriction for RI for TypeI-MultiPanel-RI-Restriction - -- Corresponds to L1 parameter 'TypeI-MultiPanel-RI-Restriction' (see 38.214, section 5.2.2.2.2) - ri-Restriction BIT STRING (SIZE (4)) - } - }, - -- CodebookMode as specified in 38.214 section 5.2.2.2.2 - codebookMode INTEGER (1..2) - - }, - type2 SEQUENCE { - subType CHOICE { - typeII SEQUENCE { - -- Number of antenna ports in first (n1) and second (n2) dimension and codebook subset restriction - -- Corresponds to L1 parameters 'CodebookConfig-N1', 'CodebookConfig-N2' - -- The CHOICE name indicates the value of n1 and n2, the CHOICE contents is the codebook subset restriction bitmap - -- Corresponds to L1 parameter ' TypeII-CodebookSubsetRestriction' (see 38.214 section 5.2.2.2.3) - -- Number of bits for codebook subset restriction is ceil(log2(nchoosek(O1*O2,4)))+8*n1*n2 where nchoosek(a,b) = a!/(b!(a-b)!) - n1-n2-codebookSubsetRestriction CHOICE { - two-one BIT STRING (SIZE (16)), - two-two BIT STRING (SIZE (139)), - four-one BIT STRING (SIZE (32)), - three-two BIT STRING (SIZE (59)), - six-one BIT STRING (SIZE (49)), - four-two BIT STRING (SIZE (75)), - eight-one BIT STRING (SIZE (65)), - four-three BIT STRING (SIZE (107)), - six-two BIT STRING (SIZE (107)), - twelve-one BIT STRING (SIZE (129)), - four-four BIT STRING (SIZE (139)), - eight-two BIT STRING (SIZE (139)), - sixteen-one BIT STRING (SIZE (129)) - }, - -- Restriction for RI for TypeII-RI-Restriction - -- Corresponds to L1 parameter 'TypeII-RI-Restriction' (see 38.214, section 5.2.2.2.3) - typeII-RI-Restriction BIT STRING (SIZE (2)) - }, - typeII-PortSelection SEQUENCE { - -- The size of the port selection codebook (parameter d) - portSelectionSamplingSize ENUMERATED {n1, n2, n3, n4} OPTIONAL, -- Cond TypeII-PortSelection - -- Restriction for RI for TypeII-PortSelection-RI-Restriction - -- Corresponds to L1 parameter 'TypeII-PortSelection-RI-Restriction' (see 38.214, section 5.2.2.4) - typeII-PortSelectionRI-Restriction BIT STRING (SIZE (2)) - } - }, - -- The size of the PSK alphabet, QPSK or 8-PSK - phaseAlphabetSize ENUMERATED {n4, n8}, - -- If subband amplitude reporting is activated (true) - subbandAmplitude BOOLEAN, - -- Number of beams, L, used for linear combination - numberOfBeams ENUMERATED {two, three, four} - } - } -} - --- TAG-CODEBOOKCONFIG-STOP --- TAG-CONFIGUREDGRANTCONFIG-START - -ConfiguredGrantConfig ::= SEQUENCE { - - -- Frequency hopping as agreed in RAN1-AH18776 - frequencyHopping ENUMERATED {mode1, mode2}, - -- DMRS configuration, as agreed in RAN1-AH18776 - cg-DMRS-Configuration DMRS-UplinkConfig, - - -- Indicates the MCS table the UE shall use for PUSCH without transform precoding, as agreed in RAN1-AH18776 - mcs-Table ENUMERATED {qam64, qam256}, - -- Indicates the MCS table the UE shall use for PUSCH with transform precoding, as agreed in RAN1-AH18776 - -- When the field is absent the UE applies the value 64QAM - mcs-TableTransformPrecoder ENUMERATED {qam256} OPTIONAL, -- Need S - -- Selection between and configuration of dynamic and semi-static beta-offset, as agreed in RAN1-AH18776 - -- Note: For Type 1 UL data transmission without grant, "uci-on-PUSCH" should be set to semiStatic - uci-OnPUSCH SetupRelease { CG-UCI-OnPUSCH }, - -- Configuration of resource allocation type 0 and resource allocation type 1, as agreed in RAN1-AH18776 - -- Note: For Type 1 UL data transmission without grant, "resourceAllocation" should be resourceAllocationType0 or resourceAllocationType1 - resourceAllocation ENUMERATED { resourceAllocationType0, resourceAllocationType1, dynamicSwitch }, - -- Selection between config 1 and config 2 for RBG size for PUSCH. When the field is absent the UE applies the value config1. - -- Note: rbg-Size is used when the transformPrecoder parameter is disabled. - rbg-Size ENUMERATED {config2} OPTIONAL, -- Need S - - -- Closed control loop to apply. Corresponds to L1 parameter 'PUSCH-closed-loop-index' (see 38.213, section FFS_Section) - powerControlLoopToUse ENUMERATED {n0, n1}, - -- Index of the P0-PUSCH-AlphaSet to be used for this configuration - p0-PUSCH-Alpha P0-PUSCH-AlphaSetId, - -- Enable transformer precoder for type1 and type2. Absence indicates that it is disabled. - -- Corresponds to L1 parameter 'UL-TWG-tp' (see 38.214, section 6.1.3) - transformPrecoder ENUMERATED {enabled} OPTIONAL, -- Need R - -- The number of HARQ processes configured. It applies for both Type 1 and Type 2 - -- Corresponds to L1 parameter 'UL-TWG-numbHARQproc' (see 38.321, section 5.8.2) - nrofHARQ-Processes INTEGER(1..16), - -- The number or repetitions of K: - repK ENUMERATED {n1, n2, n4, n8}, - -- If repetitions is used, this field indicates the redundancy version (RV) sequence to use. - -- Corresponds to L1 parameter 'UL-TWG-RV-rep' (see 38.321, section 5.8.2) - repK-RV ENUMERATED {s1-0231, s2-0303, s3-0000} OPTIONAL, -- Cond RepK - -- Periodicity for UL transmission without UL grant for type 1 and type 2 - -- Corresponds to L1 parameter 'UL-TWG-periodicity' (see 38.321, section 5.8.2) - - -- The following periodicities are supported depending on the configured subcarrier spacing [symbols]: - -- 15kHz: 2, 7, n*14, where n={1, 2, 4, 5, 8, 10, 16, 20, 32, 40, 64, 80, 128, 160, 320, 640} - -- 30kHz: 2, 7, n*14, where n={1, 2, 4, 5, 8, 10, 16, 20, 32, 40, 64, 80, 128, 160, 256, 320, 640, 1280} - -- 60kHz with normal CP: 2, 7, n*14, where n={1, 2, 4, 5, 8, 10, 16, 20, 32, 40, 64, 80, 128, 160, 256, 320, 512, 640, 1280, 2560} - -- 60kHz with ECP: 2, 6, n*12, where n={1, 2, 4, 5, 8, 10, 16, 20, 32, 40, 64, 80, 128, 160, 256, 320, 512, 640, 1280, 2560} - -- 120kHz: 2, 7, n*14, where n={1, 2, 4, 5, 8, 10, 16, 20, 32, 40, 64, 80, 128, 160, 256, 320, 512, 640, 1024, 1280, 2560, 5120} - -- (see 38.214, Table 6.1.2.3-1) - periodicity ENUMERATED { - sym2, sym7, sym1x14, sym2x14, sym4x14, sym5x14, sym8x14, sym10x14, sym16x14, sym20x14, - sym32x14, sym40x14, sym64x14, sym80x14, sym128x14, sym160x14, sym256x14, sym320x14, sym512x14, - sym640x14, sym1024x14, sym1280x14, sym2560x14, sym5120x14, - - sym6, sym1x12, sym2x12, sym4x12, sym5x12, sym8x12, sym10x12, sym16x12, sym20x12, sym32x12, - sym40x12, sym64x12, sym80x12, sym128x12, sym160x12, sym256x12, sym320x12, sym512x12, sym640x12, - sym1280x12, sym2560x12 - }, - - -- If configured, the UE uses the configured grant timer (see 38.321, section 5.8.2) with this initial timer value. - -- Supported values are as follows in units of symbols: - -- For normal CP: 2, 7, {1, 2, 4, 5, 8, 10, 20, 32, 40, 64, 80, 128, 160, 256, 512, 640 } x 14 - -- For extended CP: 2, 6, {1, 2, 4, 8, 20, 40, 80, 128, 160, 256, 320, 512, 640 } x 12 - configuredGrantTimer ENUMERATED { - sym2, sym7, sym1x14, sym2x14, sym4x14, sym5x14, sym8x14, sym10x14, sym16x14, sym20x14, sym32x14, - sym40x14, sym64x14, sym80x14, sym128x14, sym160x14, sym256x14, sym512x14, sym640x14, - - sym6, sym1x12, sym2x12, sym4x12, sym5x12, sym8x12, sym10x12, sym16x12, sym20x12, sym32x12, - sym40x12, sym64x12, sym80x12, sym128x12, sym256x12, sym320x12, sym512x12, sym640x12 - } OPTIONAL, -- Need R - -- Selection between "configured grant" transmission with fully RRC-configured UL grant (Type1) - -- or with UL grant configured by DCI addressed to CS-RNTI (Type2). - rrc-ConfiguredUplinkGrant SEQUENCE { - -- Offset related to SFN=0 - timeDomainOffset INTEGER (0..5119), - -- Corresponding to the DCI field of time domain resource assignment, and the maximum bit width is 4. - --(see 38.214, section 6.1.2 and 38.212, section 7.3.1) - timeDomainAllocation INTEGER (0..15), -- RAN1 indicated just "Mapping-type,Index-start-len" - -- Corresponding to the DCI field of freq domain resource assignment. - -- (see 38.214, section 6.1.2, and 38.212, section 7.3.1) - frequencyDomainAllocation BIT STRING (SIZE(18)), - -- UE-specific DMRS configuration: corresponding to the DCI field of antenna ports, and the maximum bitwidth is 5. - -- (see 38.214, section 6.1.2, and 38.212, section 7.3.1) - antennaPort INTEGER (0..31), - dmrs-SeqInitialization INTEGER (0..1) OPTIONAL, -- Cond NoTransformPrecoder - precodingAndNumberOfLayers INTEGER (0..63), - srs-ResourceIndicator INTEGER (0..15), - -- The modulation order, target code rate and TB size (see 38.214, section 6.1.2) - mcsAndTBS INTEGER (0..31), - -- Enables intra-slot frequency hopping with the given frequency hopping offset - -- Corresponds to L1 parameter 'UL-TWG-hopping' (see 38.214, section FFS_Section) - - frequencyHoppingOffset INTEGER (1.. maxNrofPhysicalResourceBlocks-1), - pathlossReferenceIndex INTEGER (0..maxNrofPUSCH-PathlossReferenceRSs-1), - ... - } OPTIONAL -- Cond Type1 -} - -CG-UCI-OnPUSCH ::= CHOICE { - dynamic SEQUENCE (SIZE (1..4)) OF BetaOffsets, - semiStatic BetaOffsets -} - --- TAG-CONFIGUREDGRANTCONFIG-STOP --- TAG-CONTROLRESOURCESET-START - -ControlResourceSet ::= SEQUENCE { - -- Corresponds to L1 parameter 'CORESET-ID' - -- Value 0 identifies the common CORESET configured in MIB and in ServingCellConfigCommon - -- Values 1..maxNrofControlResourceSets-1 identify CORESETs configured by dedicated signalling - -- The controlResourceSetId is unique among the BWPs of a ServingCell. - controlResourceSetId ControlResourceSetId, - - - -- Frequency domain resources for the CORESET. Each bit corresponds a group of 6 RBs, with grouping starting from PRB 0, which is fully - -- contained in the bandwidth part within which the CORESET is configured. - -- The most significant bit corresponds to the group of lowest frequency which is fully contained in the bandwidth part within which the - -- CORESET is configured, each next subsequent lower significance bit corresponds to the next lowest frequency group fully contained within - -- the bandwidth part within which the CORESET is configured, if any. - -- Bits corresponding to a group not fully contained within the bandwidth part within which the CORESET is configured are set to zero. - -- Corresponds to L1 parameter 'CORESET-freq-dom'(see 38.211, section 7.3.2.2) - frequencyDomainResources BIT STRING (SIZE (45)), - -- Contiguous time duration of the CORESET in number of symbols - -- Corresponds to L1 parameter 'CORESET-time-duration' (see 38.211, section 7.3.2.2FFS_Section) - duration INTEGER (1..maxCoReSetDuration), - -- Mapping of Control Channel Elements (CCE) to Resource Element Groups (REG). - -- Corresponds to L1 parameter 'CORESET-CCE-REG-mapping-type' (see 38.211Section sections 7.3.2.2 and 7.4.1.3.2) - cce-REG-MappingType CHOICE { - interleaved SEQUENCE { - -- Resource Element Groups (REGs) can be bundled to create REG bundles. This parameter defines the size of such bundles. - -- Corresponds to L1 parameter 'CORESET-REG-bundle-size' (see 38.211, section FFS_Section) - reg-BundleSize ENUMERATED {n2, n3, n6}, - -- Corresponds to L1 parameter 'CORESET-interleaver-size' (see 38.211, 38.213, section FFS_Section) - interleaverSize ENUMERATED {n2, n3, n6}, - -- Corresponds to L1 parameter 'CORESET-shift-index' (see 38.211, section 7.3.2.2) - shiftIndex INTEGER(0..maxNrofPhysicalResourceBlocks-1) - }, - nonInterleaved NULL - }, - -- Precoder granularity in frequency domain. - -- Corresponds to L1 parameter 'CORESET-precoder-granuality' (see 38.211, sections 7.3.2.2 and 7.4.1.3.2) - precoderGranularity ENUMERATED {sameAsREG-bundle, allContiguousRBs}, - - -- A subset of the TCI states defined in TCI-States used for providing QCL relationships between the DL RS(s) in one RS Set - -- (TCI-State) and the PDCCH DMRS ports. Corresponds to L1 parameter 'TCI-StatesPDCCH' (see 38.214, section FFS_Section) - tci-StatesPDCCH SEQUENCE(SIZE (1..maxNrofTCI-StatesPDCCH)) OF TCI-StateId OPTIONAL, -- Need R - - -- If at least spatial QCL is configured/indicated, this field indicates if TCI field is present or not present in DL-related DCI. - -- When the field is absent the UE considers the TCI to be absent/disabled. - -- Corresponds to L1 parameter 'TCI-PresentInDCI' (see 38,213, section 5.1.5) - tci-PresentInDCI ENUMERATED {enabled} OPTIONAL, -- Need S - - -- PDCCH DMRS scrambling initalization. Corresponds to L1 parameter 'PDCCH-DMRS-Scrambling-ID' (see 38.214, section 5.1) - -- When the field is absent the UE applies the value '0'. - pdcch-DMRS-ScramblingID BIT STRING (SIZE (16)) OPTIONAL -- Need S -} - --- TAG-CONTROLRESOURCESET-STOP --- TAG-CONTROL-RESOURCE-SET-ID-START - -ControlResourceSetId ::= INTEGER (0..maxNrofControlResourceSets-1) - --- TAG-CONTROL-RESOURCE-SET-ID-STOP - -CrossCarrierSchedulingConfig ::= SEQUENCE { - schedulingCellInfo CHOICE { - own SEQUENCE { -- No cross carrier scheduling - cif-Presence BOOLEAN - }, - other SEQUENCE { -- Cross carrier scheduling - schedulingCellId ServCellIndex, - cif-InSchedulingCell INTEGER (1..7) - } -- Cond SCellOnly - }, - ... -} - --- TAG-CSI-APERIODICTRIGGERSTATELIST-START - -CSI-AperiodicTriggerStateList ::= SEQUENCE (SIZE (1..maxNrOfCSI-AperiodicTriggers)) OF CSI-AperiodicTriggerState - -CSI-AperiodicTriggerState ::= SEQUENCE { - associatedReportConfigInfoList SEQUENCE (SIZE(1..maxNrofReportConfigPerAperiodicTrigger)) OF CSI-AssociatedReportConfigInfo, - ... -} - -CSI-AssociatedReportConfigInfo ::= SEQUENCE { - -- The reportConfigId of one of the CSI-ReportConfigToAddMod configured in CSI-MeasConfig - reportConfigId CSI-ReportConfigId, - - resourcesForChannel CHOICE { - nzp-CSI-RS SEQUENCE { - -- NZP-CSI-RS-ResourceSet for channel measurements. Entry number in nzp-CSI-RS-ResourceSetList in the CSI-ResourceConfig - -- indicated by resourcesForChannelMeasurement in the CSI-ReportConfig indicated by reportConfigId above - -- (1 corresponds to the first entry, 2 to thesecond entry, and so on). - resourceSet INTEGER (1..maxNrofNZP-CSI-RS-ResourceSetsPerConfig), - - -- List of references to TCI-States for providing the QCL source and QCL type for for each NZP-CSI-RS-Resource - -- listed in nzp-CSI-RS-Resources of the NZP-CSI-RS-ResourceSet indicated by nzp-CSI-RS-ResourcesforChannel. - -- First entry in qcl-info-forChannel corresponds to first entry in nzp-CSI-RS-Resources of that NZP-CSI-RS-ResourceSet, - -- second entry in qcl-info-forChannel corresponds to second entry in nzp-CSI-RS-Resources, - -- and so on. Corresponds to L1 parameter 'QCL-Info-aPeriodicReportingTrigger' (see 38.214, section 5.2.1.5.1) - qcl-info SEQUENCE (SIZE(1..maxNrofAP-CSI-RS-ResourcesPerSet)) OF TCI-StateId - }, - -- CSI-SSB-ResourceSet for channel measurements. Entry number in csi-SSB-ResourceSetList in the CSI-ResourceConfig indicated by - -- resourcesForChannelMeasurement in the CSI-ReportConfig indicated by reportConfigId above (1 corresponds to the first entry, 2 to - -- the second entry, and so on). - csi-SSB-ResourceSet INTEGER (1..maxNrofCSI-SSB-ResourceSetsPerConfig) - }, - - -- CSI-IM-ResourceSet for interference measurement. Entry number in csi-IM-ResourceSetList in the CSI-ResourceConfig indicated by - -- csi-IM-ResourcesForInterference in the CSI-ReportConfig indicated by reportConfigId above (1 corresponds to the first entry, 2 to the second - -- entry, and so on). - -- The indicated CSI-IM-ResourceSet should have exactly the same number of resources like the NZP-CSI-RS-ResourceSet indicated in - -- nzp-CSI-RS-ResourcesforChannel. - -- This field can only be present if the CSI-ReportConfig identified by reportConfigId includes csi-IM-ResourcesForInterference. - csi-IM-ResourcesforInteference INTEGER(1..maxNrofCSI-IM-ResourceSetsPerConfig) OPTIONAL, --Cond CSI-IM-forInterference - - - -- NZP-CSI-RS-ResourceSet for interference measurement. Entry number in nzp-CSI-RS-ResourceSetList in the CSI-ResourceConfig indicated by - -- nzp-CSI-RS-ResourcesForInterference in the CSI-ReportConfig indicated by reportConfigId above (1 corresponds to the first entry, - -- 2 to the second entry, and so on). - -- The indicated NZP-CSI-RS-ResourceSet should have exactly the same number of resources like the NZP-CSI-RS-ResourceSet indicated in - -- nzp-CSI-RS-ResourcesforChannel. - -- This field can only be present if the CSI-ReportConfig identified by reportConfigId includes nzp-CSI-RS-ResourcesForInterference. - nzp-CSI-RS-ResourcesforInterference INTEGER (1..maxNrofNZP-CSI-RS-ResourceSetsPerConfig) OPTIONAL, --Cond LinkedNZP-CSI-RS-forInterference - ... -} - --- TAG-CSI-APERIODICTRIGGERSTATELIST-STOP --- TAG-CSI-FREQUENCYOCCUPATION-START - -CSI-FrequencyOccupation ::= SEQUENCE { - -- PRB where this CSI resource starts in relation to PRB 0 of the associated BWP. - -- Only multiples of 4 are allowed (0, 4, ...) - startingRB INTEGER (0..maxNrofPhysicalResourceBlocks-1), - -- Number of PRBs across which this CSI resource spans. Only multiples of 4 are allowed. The smallest configurable - -- number is the minimum of 24 and the width of the associated BWP. - nrofRBs INTEGER (24..maxNrofPhysicalResourceBlocks), - ... -} - --- TAG-CSI-FREQUENCYOCCUPATION-STOP --- TAG-CSI-IM-RESOURCE-START -CSI-IM-Resource ::= SEQUENCE { - csi-IM-ResourceId CSI-IM-ResourceId, - - -- The resource element pattern (Pattern0 (2,2) or Pattern1 (4,1)) with corresponding parameters. - -- Corresponds to L1 parameter 'CSI-IM-RE-pattern' (see 38.214, section 5.2.2.3.4) - csi-IM-ResourceElementPattern CHOICE { - pattern0 SEQUENCE { - -- OFDM subcarrier occupancy of the CSI-IM resource for Pattern0 - -- Corresponds to L1 parameter 'CSI-IM-ResourceMapping' (see 38.214, section 5.2.2.3.4) - subcarrierLocation-p0 ENUMERATED { s0, s2, s4, s6, s8, s10 }, - -- OFDM symbol location of the CSI-IM resource for Pattern0 - -- Corresponds to L1 parameter 'CSI-IM-ResourceMapping' (see 38.214, section 5.2.2.3.4) - symbolLocation-p0 INTEGER (0..12) - }, - pattern1 SEQUENCE { - -- OFDM subcarrier occupancy of the CSI-IM resource for Pattern1 - -- Corresponds to L1 parameter 'CSI-IM-ResourceMapping' (see 38.214, section 5.2.2.3.4) - subcarrierLocation-p1 ENUMERATED { s0, s4, s8 }, - -- OFDM symbol location of the CSI-IM resource for Pattern1 - -- Corresponds to L1 parameter 'CSI-IM-ResourceMapping' (see 38.214, section 5.2.2.3.4) - symbolLocation-p1 INTEGER (0..13) - } - } OPTIONAL, --Need M - - -- Frequency-occupancy of CSI-IM. Corresponds to L1 parameter 'CSI-IM-FreqBand' (see 38.214, section 5.2.2.3.2) - freqBand CSI-FrequencyOccupation OPTIONAL, -- Need M - - -- Periodicity and slot offset for periodic/semi-persistent CSI-IM. Corresponds to L1 parameter 'CSI-IM-timeConfig' - periodicityAndOffset CSI-ResourcePeriodicityAndOffset OPTIONAL, --Cond PeriodicOrSemiPersistent - ... -} - --- TAG-CSI-IM-RESOURCE-STOP --- TAG-CSI-IM-RESOURCEID-START -CSI-IM-ResourceId ::= INTEGER (0..maxNrofCSI-IM-Resources-1) - --- TAG-CSI-IM-RESOURCEID-STOP --- TAG-CSI-IM-RESOURCESET-START -CSI-IM-ResourceSet ::= SEQUENCE { - - csi-IM-ResourceSetId CSI-IM-ResourceSetId, - -- CSI-IM-Resources associated with this CSI-IM-ResourceSet - -- Corresponds to L1 parameter 'CSI-IM-ResourceConfigList' (see 38.214, section 5.2) - csi-IM-Resources SEQUENCE (SIZE(1..maxNrofCSI-IM-ResourcesPerSet)) OF CSI-IM-ResourceId, - ... -} --- TAG-CSI-IM-RESOURCESET-STOP --- TAG-CSI-IM-RESOURCESETID-START - -CSI-IM-ResourceSetId ::= INTEGER (0..maxNrofCSI-IM-ResourceSets-1) - --- TAG-CSI-IM-RESOURCESETID-STOP --- TAG-CSI-MEAS-CONFIG-START - -CSI-MeasConfig ::= SEQUENCE { - -- Pool of NZP-CSI-RS-Resource which can be referred to from NZP-CSI-RS-ResourceSet - nzp-CSI-RS-ResourceToAddModList SEQUENCE (SIZE (1..maxNrofNZP-CSI-RS-Resources)) OF NZP-CSI-RS-Resource OPTIONAL, -- Need N - nzp-CSI-RS-ResourceToReleaseList SEQUENCE (SIZE (1..maxNrofNZP-CSI-RS-Resources)) OF NZP-CSI-RS-ResourceId OPTIONAL, -- Need N - - -- Pool of NZP-CSI-RS-ResourceSet which can be referred to from CSI-ResourceConfig or from MAC CEs - nzp-CSI-RS-ResourceSetToAddModList SEQUENCE (SIZE (1..maxNrofNZP-CSI-RS-ResourceSets)) OF NZP-CSI-RS-ResourceSet OPTIONAL, -- Need N - nzp-CSI-RS-ResourceSetToReleaseList SEQUENCE (SIZE (1..maxNrofNZP-CSI-RS-ResourceSets)) OF NZP-CSI-RS-ResourceSetId OPTIONAL, -- Need N - - -- Pool of CSI-IM-Resource which can be referred to from CSI-IM-ResourceSet - csi-IM-ResourceToAddModList SEQUENCE (SIZE (1..maxNrofCSI-IM-Resources)) OF CSI-IM-Resource OPTIONAL, -- Need N - csi-IM-ResourceToReleaseList SEQUENCE (SIZE (1..maxNrofCSI-IM-Resources)) OF CSI-IM-ResourceId OPTIONAL, -- Need N - - -- Pool of CSI-IM-ResourceSet which can be referred to from CSI-ResourceConfig or from MAC CEs - csi-IM-ResourceSetToAddModList SEQUENCE (SIZE (1..maxNrofCSI-IM-ResourceSets)) OF CSI-IM-ResourceSet OPTIONAL, -- Need N - csi-IM-ResourceSetToReleaseList SEQUENCE (SIZE (1..maxNrofCSI-IM-ResourceSets)) OF CSI-IM-ResourceSetId OPTIONAL, -- Need N - - -- Pool of CSI-SSB-ResourceSet which can be referred to from CSI-ResourceConfig - csi-SSB-ResourceSetToAddModList SEQUENCE (SIZE (1..maxNrofCSI-SSB-ResourceSets)) OF CSI-SSB-ResourceSet OPTIONAL, -- Need N - csi-SSB-ResourceSetToAddReleaseList SEQUENCE (SIZE (1..maxNrofCSI-SSB-ResourceSets)) OF CSI-SSB-ResourceSetId OPTIONAL, -- Need N - - -- Configured CSI resource settings as specified in TS 38.214 section 5.2.1.2 - csi-ResourceConfigToAddModList SEQUENCE (SIZE (1..maxNrofCSI-ResourceConfigurations)) OF CSI-ResourceConfig OPTIONAL, -- Need N - csi-ResourceConfigToReleaseList SEQUENCE (SIZE (1..maxNrofCSI-ResourceConfigurations)) OF CSI-ResourceConfigId OPTIONAL, -- Need N - - -- Configured CSI report settings as specified in TS 38.214 section 5.2.1.1 - csi-ReportConfigToAddModList SEQUENCE (SIZE (1..maxNrofCSI-ReportConfigurations)) OF CSI-ReportConfig OPTIONAL, -- Need N - csi-ReportConfigToReleaseList SEQUENCE (SIZE (1..maxNrofCSI-ReportConfigurations)) OF CSI-ReportConfigId OPTIONAL, -- Need N - - - -- Size of CSI request field in DCI (bits). Corresponds to L1 parameter 'ReportTriggerSize' (see 38.214, section 5.2) - reportTriggerSize INTEGER (0..6) OPTIONAL, - - -- Contains trigger states for dynamically selecting one or more aperiodic and semi-persistent reporting configurations - -- and/or triggering one or more aperiodic CSI-RS resource sets for channel and/or interference measurement. - -- FFS: How to address the MAC-CE configuration - aperiodicTriggerStateList SetupRelease { CSI-AperiodicTriggerStateList } OPTIONAL, -- Need M - semiPersistentOnPUSCH-TriggerStateList SetupRelease { CSI-SemiPersistentOnPUSCH-TriggerStateList } OPTIONAL, -- Need M - ... -} - -maxNrofNZP-CSI-RS-ResourceSets INTEGER ::= 64 -maxNrofNZP-CSI-RS-ResourceSets-1 INTEGER ::= 63 - -maxNrofCSI-SSB-ResourceSets INTEGER ::= 64 -maxNrofCSI-SSB-ResourceSets-1 INTEGER ::= 63 - -maxNrofCSI-IM-ResourceSets INTEGER ::= 64 -maxNrofCSI-IM-ResourceSets-1 INTEGER ::= 63 - --- TAG-CSI-MEAS-CONFIG-STOP --- TAG-CSI-REPORTCONFIG-START --- Configuration of a CSI-Report sent on L1 (e.g. PUCCH) (see 38.214, section 5.2.1) -CSI-ReportConfig ::= SEQUENCE { - reportConfigId CSI-ReportConfigId, - - -- Indicates in which serving cell the CSI-ResourceConfigToAddMod(s) below are to be found. - -- If the field is absent, the resources are on the same serving cell as this report configuration. - carrier ServCellIndex OPTIONAL, -- Need S - - -- Resources for channel measurement. csi-ResourceConfigId of a CSI-ResourceConfig included in the configuration of the serving cell - -- indicated with the field "carrier" above. This CSI-ReportConfig is associated with the DL BWP indicated by bwp-Id in that CSI-ResourceConfig. - resourcesForChannelMeasurement CSI-ResourceConfigId, - - -- CSI IM resources for interference measurement. csi-ResourceConfigId of a CSI-ResourceConfig included in the configuration of the serving cell - -- indicated with the field "carrier" above. The bwp-Id in that CSI-ResourceConfigToAddMod is the same value like the bwp-Id in the - -- CSI-ResourceConfig indicated by resourcesForChannelMeasurement. - csi-IM-ResourcesForInterference CSI-ResourceConfigId OPTIONAL, -- Need R - - -- NZP CSI RS resources for interference measurement. csi-ResourceConfigId of a CSI-ResourceConfigToAddMod included in the configuration of the - -- serving cell indicated with the field "carrier" above. The bwp-Id in that CSI-ResourceConfigToAddMod is the same value like the bwp-Id in the - -- CSI-ResourceConfigToAddMod indicated by resourcesForChannelMeasurement. - nzp-CSI-RS-ResourcesForInterference CSI-ResourceConfigId OPTIONAL, -- Need R - - -- Time domain behavior of reporting configuration - reportConfigType CHOICE { - periodic SEQUENCE { - -- Periodicity and slot offset. Corresponds to L1 parameter 'ReportPeriodicity'and 'ReportSlotOffset' - -- (see 38.214, section section 5.2.1.4). - reportSlotConfig CSI-ReportPeriodicityAndOffset, - -- Indicates which PUCCH resource to use for reporting on PUCCH. - pucch-CSI-ResourceList SEQUENCE (SIZE (1..maxNrofBWPs)) OF PUCCH-CSI-Resource - }, - semiPersistentOnPUCCH SEQUENCE { - -- Periodicity and slot offset. Corresponds to L1 parameter 'ReportPeriodicity' and 'ReportSlotOffset' - -- (see 38.214, section section 5.2.1.4). - reportSlotConfig CSI-ReportPeriodicityAndOffset, - -- Indicates which PUCCH resource to use for reporting on PUCCH. - pucch-CSI-ResourceList SEQUENCE (SIZE (1..maxNrofBWPs)) OF PUCCH-CSI-Resource - }, - semiPersistentOnPUSCH SEQUENCE { - -- Periodicity. Corresponds to L1 parameter 'Reportperiodicity-spCSI'. (see 38.214, section 5.2.1.1?FFS_Section) - reportSlotConfig ENUMERATED {sl5, sl10, sl20, sl40, sl80, sl160, sl320}, - -- Timing offset Y for aperiodic reporting using PUSCH. This field lists the allowed offset values. - -- A particular value is indicated in DCI. The first report is transmitted in slot n+Y, second report in n+Y+P, - -- where P is the configured periodicity. - reportSlotOffsetList SEQUENCE (SIZE (1..4)) OF INTEGER (0..7), - -- RNTI for SP CSI-RNTI, Corresponds to L1 parameter 'SPCSI-RNTI' (see 38.214, section 5.2.1.5.2) - -- FFS: RAN1 models different RNTIs as different Search Spaces with independent configurations. Align the configuration - -- of this one (e.g. group with monitoring periodicity, PDCCH candidate configuration, DCI-Payload size...)? - csi-RNTI RNTI-Value, - -- Index of the p0-alpha set determining the power control for this CSI report transmission. - -- Corresponds to L1 parameter 'SPCSI-p0alpha' (see 38.214, section FFS_Section) - p0alpha P0-PUSCH-AlphaSetId - }, - aperiodic SEQUENCE { - -- Timing offset Y for aperiodic reporting using PUSCH. This field lists the allowed offset values. A particular value is indicated in DCI. - -- (see 38.214, section 5.2.3) - -- FFS_Value: Range wasn’t final in RAN1 table. - -- FFS_FIXME: How are the DCI codepoints mapped to the allowed offsets? - reportSlotOffsetList SEQUENCE (SIZE (1..16)) OF INTEGER (0..7) - } - }, - -- The CSI related quanities to report. Corresponds to L1 parameter 'ReportQuantity' (see 38.214, section REF) - reportQuantity CHOICE { - none NULL, - cri-RI-PMI-CQI NULL, - cri-RI-i1 NULL, - cri-RI-i1-CQI SEQUENCE { - -- PRB bundling size to assume for CQI calcuation when reportQuantity is CRI/RI/i1/CQI - -- Corresponds to L1 parameter 'PDSCH-bundle-size-for-CSI' (see 38.214, section 5.2.1.4) - pdsch-BundleSizeForCSI ENUMERATED {n2, n4} OPTIONAL - }, - cri-RI-CQI NULL, - cri-RSRP NULL, - ssb-Index-RSRP NULL, - cri-RI-LI-PMI-CQI NULL - }, - -- Reporting configuration in the frequency domain. (see 38.214, section 5.2.1.4) - reportFreqConfiguration SEQUENCE { - -- Indicates whether the UE shall report a single (wideband) or multiple (subband) CQI. (see 38.214, section 5.2.1.4) - cqi-FormatIndicator ENUMERATED { widebandCQI, subbandCQI }, - -- Indicates whether the UE shall report a single (wideband) or multiple (subband) PMI. (see 38.214, section 5.2.1.4) - pmi-FormatIndicator ENUMERATED { widebandPMI, subbandPMI }, - -- Indicates a contiguous or non-contigous subset of subbands in the bandwidth part which CSI shall be reported - -- for. Each bit in the bit-string represents one subband. The right-most bit in the bit string represents the - -- lowest subband in the BWP. (see 38.214, section 5.2.1.4) - -- The number of subbands is determined according to 38.214 section 5.2.1.4. It is absent if there are less than 24 PRBs (no sub band) - -- and present otherwise, the number of sub bands can be from 3 (24 PRBs, sub band size 8) to 18 (72 PRBs, sub band size 4). - csi-ReportingBand CHOICE { - subbands3 BIT STRING(SIZE(3)), - subbands4 BIT STRING(SIZE(4)), - subbands5 BIT STRING(SIZE(5)), - subbands6 BIT STRING(SIZE(6)), - subbands7 BIT STRING(SIZE(7)), - subbands8 BIT STRING(SIZE(8)), - subbands9 BIT STRING(SIZE(9)), - subbands10 BIT STRING(SIZE(10)), - subbands11 BIT STRING(SIZE(11)), - subbands12 BIT STRING(SIZE(12)), - subbands13 BIT STRING(SIZE(13)), - subbands14 BIT STRING(SIZE(14)), - subbands15 BIT STRING(SIZE(15)), - subbands16 BIT STRING(SIZE(16)), - subbands17 BIT STRING(SIZE(17)), - subbands18 BIT STRING(SIZE(18)), - ... - } OPTIONAL -- Need S - - }, - -- Time domain measurement restriction for the channel (signal) measurements. - -- Corresponds to L1 parameter 'MeasRestrictionConfig-time-channel' (see 38.214, section 5.2.1.1) - timeRestrictionForChannelMeasurements ENUMERATED {configured, notConfigured}, - -- Time domain measurement restriction for interference measurements. - -- Corresponds to L1 parameter 'MeasRestrictionConfig-time-interference' (see 38.214, section 5.2.1.1) - timeRestrictionForInterferenceMeasurements ENUMERATED {configured, notConfigured}, - -- Codebook configuration for Type-1 or Type-II including codebook subset restriction - codebookConfig CodebookConfig, - -- Maximum number of CQIs per CSI report (cf. 1 for 1-CW, 2 for 2-CW) - nrofCQIsPerReport ENUMERATED {n1, n2}, - -- Turning on/off group beam based reporting (see 38.214, section 5.2.1.4) - groupBasedBeamReporting CHOICE { - enabled NULL, - disabled SEQUENCE { - -- The number (N) of measured RS resources to be reported per report setting in a non-group-based report. - -- N <= N_max, where N_max is either 2 or 4 depending on UE capability. - -- FFS: The signaling mechanism for the gNB to select a subset of N beams for the UE to measure and report. - -- FFS: Note: this parameter may not be needed for certain resource and/or report settings - -- FFS_ASN1: Change groupBasedBeamReporting into a CHOICE and include this field into the "no" option? - -- (see 38.214, section FFS_Section) - -- When the field is absent the UE applies the value 1 - nrofReportedRS ENUMERATED {n1, n2, n3, n4} OPTIONAL -- Need S - } - }, - - -- Which CQI table to use for CQI calculation. Corresponds to L1 parameter 'CQI-table' (see 38.214, section 5.2.2.1) - cqi-Table ENUMERATED {table1, table2, spare2, spare1} OPTIONAL, - -- Indicates one out of two possible BWP-dependent values for the subband size as indicated in 38.214 table 5.2.1.4-2 - -- Corresponds to L1 parameter 'SubbandSize' (see 38.214, section 5.2.1.4) - subbandSize ENUMERATED {value1, value2}, - -- BLER target that the UE shall be assume in its CQI calculation. - -- Corresponds to L1 parameter 'BLER-Target' (see 38.214, section 5.2.2.1) - -- FFS_Values (now filled with spares) - bler-Target ENUMERATED {zerodot1, spare3, space2, spare1} OPTIONAL, - -- Port indication for RI/CQI calculation. For each CSI-RS resource in the linked ResourceConfig for channel measurement, - -- a port indication for each rank R, indicating which R ports to use. Applicable only for non-PMI feedback. - -- Corresponds to L1 parameter 'Non-PMI-PortIndication' (see 38.214, section FFS_Section) - -- The first entry in non-PMI-PortIndication corresponds to the NZP-CSI-RS-Resource indicated by the first entry in - -- nzp-CSI-RS-Resources in the NZP-CSI-RS-ResourceSet indicated in the first entry of nzp-CSI-RS-ResourceSetList of the - -- CSI-ResourceConfig whose CSI-ResourceConfigId is indicated in a CSI-MeasId together with the above CSI-ReportConfigId, - -- the second entry in non-PMI-PortIndication corresponds to the NZP-CSI-RS-Resource indicated by the second entry in - -- nzp-CSI-RS-Resources in the NZP-CSI-RS-ResourceSet indicated in the first entry of nzp-CSI-RS-ResourceSetList of the - -- same CSI-ResourceConfig, and so on until the NZP-CSI-RS-Resource indicated by the last entry in nzp-CSI-RS-Resources - -- in the in the NZP-CSI-RS-ResourceSet indicated in the first entry of nzp-CSI-RS-ResourceSetList of the - -- same CSI-ResourceConfig, then the next entry corresponds to the NZP-CSI-RS-Resource indicated by the first entry - -- in nzp-CSI-RS-Resources in the NZP-CSI-RS-ResourceSet indicated in the second entry of nzp-CSI-RS-ResourceSetList of the - -- same CSI-ResourceConfig and so on. - non-PMI-PortIndication SEQUENCE (SIZE (1..maxNrofNZP-CSI-RS-ResourcesPerConfig)) OF PortIndexFor8Ranks OPTIONAL, ... -} - -CSI-ReportPeriodicityAndOffset ::= CHOICE { - slots4 INTEGER(0..3), - slots5 INTEGER(0..4), - slots8 INTEGER(0..7), - slots10 INTEGER(0..9), - slots16 INTEGER(0..15), - slots20 INTEGER(0..19), - slots40 INTEGER(0..39), - slots80 INTEGER(0..79), - slots160 INTEGER(0..159), - slots320 INTEGER(0..319) -} - -PUCCH-CSI-Resource ::= CHOICE { - uplinkBandwidthPartId BWP-Id, - -- PUCCH resource for the associated uplink BWP. Only PUCCH-Resource of format 2, 3 and 4 is supported. - pucch-Resource PUCCH-Resource -} - --- The PortIndexFor8Ranks allows to indicate port indexes for 1 to 8 ranks using a port index ranges from 0 to 31, or from 0 to 15, or from 0 --- to 7, or from 0 to 3, or from 0 to 1, or with 0 only. - -PortIndexFor8Ranks ::= CHOICE { - portIndex8 SEQUENCE{ - rank1-8 PortIndex8, - rank2-8 SEQUENCE(SIZE(1..2)) OF PortIndex8, - rank3-8 SEQUENCE(SIZE(1..3)) OF PortIndex8, - rank4-8 SEQUENCE(SIZE(1..4)) OF PortIndex8, - rank5-8 SEQUENCE(SIZE(1..5)) OF PortIndex8, - rank6-8 SEQUENCE(SIZE(1..6)) OF PortIndex8, - rank7-8 SEQUENCE(SIZE(1..7)) OF PortIndex8, - rank8-8 SEQUENCE(SIZE(1..8)) OF PortIndex8 - }, - portIndex4 SEQUENCE{ - rank1-4 PortIndex4, - rank2-4 SEQUENCE(SIZE(1..2)) OF PortIndex4, - rank3-4 SEQUENCE(SIZE(1..3)) OF PortIndex4, - rank4-4 SEQUENCE(SIZE(1..4)) OF PortIndex4 - }, - portIndex2 SEQUENCE{ - rank1-2 PortIndex2, - rank2-2 SEQUENCE(SIZE(1..2)) OF PortIndex2 - }, - portIndex1 NULL -} - -PortIndex8::= INTEGER (0..7) -PortIndex4::= INTEGER (0..3) -PortIndex2::= INTEGER (0..1) - -maxNrofNZP-CSI-RS-ResourcesPerConfig INTEGER ::= 128 --- TAG-CSI-REPORTCONFIG-STOP --- TAG-CSI-REPORTCONFIGID-START -CSI-ReportConfigId ::= INTEGER (0..maxNrofCSI-ReportConfigurations-1) - --- TAG-CSI-REPORTCONFIGID-STOP --- TAG-CSI-RESOURCECONFIG-START - --- One CSI resource configuration comprising of one or more resource sets -CSI-ResourceConfig ::= SEQUENCE { - - -- Used in CSI-ReportConfig to refer to an instance of CSI-ResourceConfig - csi-ResourceConfigId CSI-ResourceConfigId, - - -- Contains up to maxNrofNZP-CSI-RS-ResourceSetsPerConfig resource sets if ResourceConfigType is 'aperiodic' and 1 otherwise. - -- Corresponds to L1 parameter 'ResourceSetConfigList' (see 38.214, section 5.2.1.3.1) - csi-RS-ResourceSetList CHOICE { - nzp-CSI-RS-SSB SEQUENCE { - nzp-CSI-RS-ResourceSetList SEQUENCE (SIZE (1..maxNrofNZP-CSI-RS-ResourceSetsPerConfig)) OF NZP-CSI-RS-ResourceSetId OPTIONAL, - -- List of SSB resources used for beam measurement and reporting in a resource set - -- Corresponds to L1 parameter 'resource-config-SS-list' (see 38,214, section FFS_Section) - csi-SSB-ResourceSetList SEQUENCE (SIZE (1..maxNrofCSI-SSB-ResourceSetsPerConfig)) OF CSI-SSB-ResourceSetId OPTIONAL - }, - csi-IM-ResourceSetList SEQUENCE (SIZE (1..maxNrofCSI-IM-ResourceSetsPerConfig)) OF CSI-IM-ResourceSetId - }, - - - -- The DL BWP which the CSI-RS associated with this CSI-ResourceConfig are located in. - -- Corresponds to L1 parameter 'BWP-Info' (see 38.214, section 5.2.1.2 - bwp-Id BWP-Id, - - -- Time domain behavior of resource configuration. Corresponds to L1 parameter 'ResourceConfigType' (see 38.214, section 5.2.2.3.5) - resourceType ENUMERATED { aperiodic, semiPersistent, periodic }, - ... -} - --- TAG-CSI-RESOURCECONFIGTOADDMOD-STOP --- TAG-CSI-RESOURCECONFIGID-START -CSI-ResourceConfigId ::= INTEGER (0..maxNrofCSI-ResourceConfigurations-1) - --- TAG-CSI-RESOURCECONFIGID-STOP --- TAG-CSI-RESOURCEPERIODICITYANDOFFSET-START - -CSI-ResourcePeriodicityAndOffset ::= CHOICE { - slots4 INTEGER (0..3), - slots5 INTEGER (0..4), - slots8 INTEGER (0..7), - slots10 INTEGER (0..9), - slots16 INTEGER (0..15), - slots20 INTEGER (0..19), - slots32 INTEGER (0..31), - slots40 INTEGER (0..39), - slots64 INTEGER (0..63), - slots80 INTEGER (0..79), - slots160 INTEGER (0..159), - slots320 INTEGER (0..319), - slots640 INTEGER (0..639) -} - --- TAG-CSI-RESIYRCEPERIODICITYANDOFFSET-STOP --- TAG-CSI-RS-RESOURCEMAPPING-START - -CSI-RS-ResourceMapping ::= SEQUENCE { - -- Frequency domain allocation within a physical resource block in accordance with 38.211, section 7.4.1.5.3 including table 7.4.1.5.2-1. - -- The number of bits that may be set to one depend on the chosen row in that table. For the choice "other", the row can be determined from - -- the parmeters below and from the number of bits set to 1 in frequencyDomainAllocation. - frequencyDomainAllocation CHOICE { - row1 BIT STRING (SIZE (4)), - row2 BIT STRING (SIZE (12)), - row4 BIT STRING (SIZE (3)), - other BIT STRING (SIZE (6)) - }, - -- Number of ports (see 38.214, section 5.2.2.3.1) - nrofPorts ENUMERATED {p1,p2,p4,p8,p12,p16,p24,p32}, - -- Time domain allocation within a physical resource block. The field indicates the first OFDM symbol in the PRB used for CSI-RS. - -- Parameter l0 in 38.211, section 7.4.1.5.3. Value 2 is supported only when DL-DMRS-typeA-pos equals 3. - firstOFDMSymbolInTimeDomain INTEGER (0..13), - -- Time domain allocation within a physical resource block. Parameter l1 in 38.211, section 7.4.1.5.3. - firstOFDMSymbolInTimeDomain2 INTEGER (0..13) OPTIONAL, -- Need R - -- CDM type (see 38.214, section 5.2.2.3.1) - cdm-Type ENUMERATED {noCDM, fd-CDM2, cdm4-FD2-TD2, cdm8-FD2-TD4}, - -- Density of CSI-RS resource measured in RE/port/PRB. Corresponds to L1 parameter 'CSI-RS-Density' (see 38.211, section 7.4.1.5.3) - -- Values 0.5 (dot5), 1 (one) and 3 (three) are allowed for X=1, - -- values 0.5 (dot5) and 1 (one) are allowed for X=2, 16, 24 and 32, - -- value 1 (one) is allowed for X=4, 8, 12. - -- For density = 1/2, includes 1 bit indication for RB level comb offset indicating whether odd or even RBs are occupied by CSI-RS - density CHOICE { - dot5 ENUMERATED {evenPRBs, oddPRBs}, - one NULL, - three NULL, - spare NULL - }, - -- Wideband or partial band CSI-RS. Corresponds to L1 parameter 'CSI-RS-FreqBand' (see 38.214, section 5.2.2.3.1) - freqBand CSI-FrequencyOccupation, - ... -} - --- TAG-CSI-RS-RESOURCEMAPPING-STOP --- TAG-CSI-SEMIPERSISTENTONPUSCHTRIGGERSTATELIST-START - -CSI-SemiPersistentOnPUSCH-TriggerStateList ::= SEQUENCE(SIZE (1..maxNrOfSemiPersistentPUSCH-Triggers)) OF CSI-SemiPersistentOnPUSCH-TriggerState -CSI-SemiPersistentOnPUSCH-TriggerState ::= SEQUENCE { - associatedReportConfigInfo CSI-ReportConfigId, - ... -} - -maxNrOfSemiPersistentPUSCH-Triggers INTEGER ::= 64 -- Maximum number of triggers for semi persistent reporting on PUSCH - --- TAG-CSI-SEMIPERSISTENTONPUSCHTRIGGERSTATELIST-STOP --- TAG-CSI-SSB-RESOURCESETID-START - -CSI-SSB-ResourceSetId ::= INTEGER (0..maxNrofCSI-SSB-ResourceSets-1) - --- TAG-CSI-SSB-RESOURCESETID-STOP --- TAG-CSI-SSB-RESOURCESET-START - -CSI-SSB-ResourceSet ::= SEQUENCE { - csi-SSB-ResourceSetId CSI-SSB-ResourceSetId, - csi-SSB-ResourceList SEQUENCE (SIZE(1..maxNrofCSI-SSB-ResourcePerSet)) OF SSB-Index, - ... -} - --- TAG-CSI-SSB-RESOURCESET-STOP --- TAG-DMRS-DOWNLINKCONFIG-START - -DMRS-DownlinkConfig ::= SEQUENCE { - -- Selection of the DMRS type to be used for DL (see 38.211, section 7.4.1.1.1). - -- If the field is absent, the UE uses DMRS type 1. - dmrs-Type ENUMERATED {type2} OPTIONAL, -- Need R - -- Position for additional DM-RS in DL, see Table 7.4.1.1.2-4 in 38.211. - -- The four values represent the cases of 1+0, 1+1, 1+1+1. 1+1+1+1 non-adjacent OFDM symbols for DL. - -- If the field is absent, the UE applies the value pos2. - dmrs-AdditionalPosition ENUMERATED {pos0, pos1, pos3} OPTIONAL, -- Need R - -- DM-RS groups that are QCL:ed, i.e. group 1 (see 38.214, section 5.1) - dmrs-group1 BIT STRING (SIZE (12)) OPTIONAL, -- Need R - -- DM-RS groups that are QCL:ed, i.e. group 2 (see 38.214, section 5.1) - dmrs-group2 BIT STRING (SIZE (12)) OPTIONAL, -- Need R - -- The maximum number of OFDM symbols for DL front loaded DMRS. 'len1' corresponds to value 1. 'len2 corresponds to value 2. - -- If the field is absent, the UE applies value len1. - -- Corresponds to L1 parameter 'DL-DMRS-max-len' (see 38.214, section 5.1) - maxLength ENUMERATED {len2} OPTIONAL, -- Need R - -- DL DMRS scrambling initalization - -- Corresponds to L1 parameter 'n_SCID 0' (see 38.211, section 7.4.1) - -- When the field is absent the UE applies the value Physical cell ID (physCellId) configured for this serving cell." - scramblingID0 INTEGER (0..65535) OPTIONAL, -- Need S - -- DL DMRS scrambling initalization. Corresponds to L1 parameter 'n_SCID 1' (see 38.211, section 7.4.1) - -- When the field is absent the UE applies the value (physCellId) configured for this serving cell. - scramblingID1 INTEGER (0..65535) OPTIONAL, -- Need S - - -- Configures downlink PTRS. If absent of released, the UE assumes that downlink PTRS are not present. See 38.214 section 5.1.6.3 - phaseTrackingRS SetupRelease { PTRS-DownlinkConfig } OPTIONAL, -- Need M - - ... -} - --- TAG-DMRS-DOWNLINKCONFIG-STOP --- TAG-DMRS-UPLINKCONFIG-START - -DMRS-UplinkConfig ::= SEQUENCE { - -- Selection of the DMRS type to be used for UL (see section 38.211, section 6.4.1.1.3) - -- If the field is absent, the UE uses DMRS type 1. - dmrs-Type ENUMERATED {type2} OPTIONAL, -- Need R - -- Position for additional DM-RS in UL. Corresponds to L1 parameter 'UL-DMRS-add-pos' (see Table 7.4.1.1.2-4 in 38.211) - -- The four values represent the cases of 1+0, 1+1, 1+1+1. 1+1+1+1 non-adjacent OFDM symbols for UL. - -- If the field is absent, the UE applies the value pos2. - dmrs-AdditionalPosition ENUMERATED {pos0, pos1, pos3} OPTIONAL, -- Need R - -- Configures uplink PTRS (see 38.211, section x.x.x.x) FFS_Ref - phaseTrackingRS SetupRelease { PTRS-UplinkConfig } OPTIONAL, -- Need M - -- The maximum number of OFDM symbols for UL front loaded DMRS. 'len1' corresponds to value 1. 'len2 corresponds to value 2. - -- If the field is absent, the UE applies value len1. - -- Corresponds to L1 parameter 'UL-DMRS-max-len' (see 38.214, section 6.4.1.1.2) - maxLength ENUMERATED {len2} OPTIONAL, -- Need R - - transformPrecoding CHOICE { - -- DMRS related parameters for Cyclic Prefix OFDM - disabled SEQUENCE { - -- UL DMRS scrambling initalization for CP-OFDM - -- Corresponds to L1 parameter 'n_SCID 0' (see 38.214, section 6.4.1.1.2) - -- When the field is absent the UE applies the value Physical cell ID (physCellId) - scramblingID0 INTEGER (0..65535) OPTIONAL, -- Need S - -- UL DMRS scrambling initalization for CP-OFDM. - -- Corresponds to L1 parameter 'n_SCID 1' (see 38.214, section 6.4.1.1.2) - -- When the field is absent the UE applies the value Physical cell ID (physCellId) - scramblingID1 INTEGER (0..65535) OPTIONAL -- Need S - - }, - -- DMRS related parameters for DFT-s-OFDM (Transform Precoding) - enabled SEQUENCE { - -- Parameter: N_ID^(PUSCH) for DFT-s-OFDM DMRS. If the value is absent or released, the UE uses the Physical cell ID. - -- Corresponds to L1 parameter 'nPUSCH-Identity-Transform precoding' (see 38.211, section FFS_Section) - nPUSCH-Identity INTEGER(0..1007) OPTIONAL, -- Need S - -- Sequence-group hopping for PUSCH can be disabled for a certain UE despite being enabled on a cell basis. For DFT-s-OFDM DMRS - -- If the field is released, the UE considers group hopping to be enabled. - -- Corresponds to L1 parameter 'Disable-sequence-group-hopping-Transform-precoding' (see 38.211, section FFS_Section) - disableSequenceGroupHopping ENUMERATED {disabled} OPTIONAL, -- Need S - -- Determines if sequence hopping is enabled or not. For DFT-s-OFDM DMRS. - -- If the field is released, the UE considers sequence hopping to be disabled. - -- Corresponds to L1 parameter 'Sequence-hopping-enabled-Transform-precoding' (see 38.211, section FFS_Section) - sequenceHoppingEnabled ENUMERATED {enabled} OPTIONAL -- Need S - } - }, - ... -} - --- TAG-DMRS-UPLINKCONFIG-STOP --- TAG-DOWNLINKPREEMPTION-START - --- Configuration of downlink preemption indication on PDCCH. -DownlinkPreemption ::= SEQUENCE { - -- RNTI used for indication pre-emption in DL. - -- Corresponds to L1 parameter 'INT-RNTI', where â€INT†stands for â€interruption†(see 38.213, section 10) - int-RNTI RNTI-Value, - - -- Set selection for DL-preemption indication. Corresponds to L1 parameter 'int-TF-unit' (see 38.213, section 10.1) - -- The set determines how the UE interprets the DL preemption DCI payload. - timeFrequencySet ENUMERATED {set0, set1}, - - -- Total length of the DCI payload scrambled with INT-RNTI. The value must be an integer multiple of 14 bit. - -- Corresponds to L1 parameter 'INT-DCI-payload-length' (see 38.213, section 11.2) - dci-PayloadSize INTEGER (0..maxINT-DCI-PayloadSize), - - -- Indicates (per serving cell) the position of the 14 bit INT values inside the DCI payload. - -- Corresponds to L1 parameter 'INT-cell-to-INT' and 'cell-to-INT' (see 38.213, section 11.2) - int-ConfigurationPerServingCell SEQUENCE (SIZE (1..maxNrofServingCells)) OF INT-ConfigurationPerServingCell, - ... -} - -INT-ConfigurationPerServingCell ::= SEQUENCE { - servingCellId ServCellIndex, - -- Starting position (in number of bit) of the 14 bit INT value applicable for this serving cell (servingCellId) within the DCI - -- payload. Must be multiples of 14 (bit). Corresponds to L1 parameter 'INT-values' (see 38.213, section 11.2) - positionInDCI INTEGER (0..maxINT-DCI-PayloadSize-1) -} - --- TAG-DOWNLINKPREEMPTION-STOP --- TAG-DRB-IDENTITY-START - -DRB-Identity ::= INTEGER (1..32) - --- TAG-DRB-IDENTITY-STOP --- TAG-EUTRA-MBSFN-SUBFRAMECONFIGLIST-START - -EUTRA-MBSFN-SubframeConfigList ::= SEQUENCE (SIZE (1..maxMBSFN-Allocations)) OF EUTRA-MBSFN-SubframeConfig - -EUTRA-MBSFN-SubframeConfig ::= SEQUENCE { - -- Field as defined in MBSFN-SubframeConfig in 36.331 - radioframeAllocationPeriod ENUMERATED {n1, n2, n4, n8, n16, n32}, - -- Field as defined in MBSFN-SubframeConfig in 36.331 - radioframeAllocationOffset INTEGER (0..7), - -- Field as defined in MBSFN-SubframeConfig in 36.331 - subframeAllocation CHOICE { - -- Field as defined in MBSFN-SubframeConfig in 36.331 - oneFrame BIT STRING (SIZE(6)), - -- Field as defined in MBSFN-SubframeConfig in 36.331 - fourFrames BIT STRING (SIZE(24)) - }, - subframeAllocation-v1430 CHOICE { - -- Field as defined in MBSFN-SubframeConfig in 36.331 - oneFrame-v1430 BIT STRING (SIZE(2)), - -- Field as defined in MBSFN-SubframeConfig in 36.331 - fourFrames-v1430 BIT STRING (SIZE(8)) - } OPTIONAL, -- Need R - ... -} - --- TAG-EUTRA-MBSFN-SUBFRAMECONFIGLIST-STOP - -FilterCoefficient ::= ENUMERATED { - fc0, fc1, fc2, fc3, fc4, fc5, - fc6, fc7, fc8, fc9, fc11, fc13, - fc15, fc17, fc19, spare1, ...} - --- TAG-FREQBANDINDICATORNR-START - -FreqBandIndicatorNR ::= INTEGER (1..1024) - --- TAG-FREQBANDINDICATORNR-STOP --- TAG-FREQUENCY-INFO-DL-START - -FrequencyInfoDL ::= SEQUENCE { - -- Frequency of the SSB to be used for this serving cell. The frequency provided in this field identifies the position of - -- resource element RE=#0 (subcarrier #0) of resource block RB#10 of the SS block. The cell-defining SSB of an SpCell is always on - -- the sync raster. Frequencies are considered to be on the sync raster if they are also identifiable with a GSCN value (see 38.101). - absoluteFrequencySSB ARFCN-ValueNR, - -- The frequency domain offset between SSB and the overall resource block grid in number of subcarriers. - -- Absence of the field indicates that no offset is applied (offset = 0). For FR2 only values up to 11 are applicable. - -- Corresponds to L1 parameter kssb (See 38.211, section 7.4.3.1) - ssb-SubcarrierOffset INTEGER (1..23) OPTIONAL, -- Need S - -- List of one or multiple frequency bands to which this carrier(s) belongs. Multiple values are only supported in - -- system information but not when the FrequencyInfoDL is provided in dedicated signalling (HO or S(p)Cell addition). - frequencyBandList MultiFrequencyBandListNR, - -- Absolute frequency position of the reference resource block (Common RB 0). Its lowest subcarrier is also known as Point A. - -- Note that the lower edge of the actual carrier is not defined by this field but rather in the scs-SpecificCarrierList. - -- Corresponds to L1 parameter 'offset-ref-low-scs-ref-PRB' (see 38.211, section FFS_Section) - absoluteFrequencyPointA ARFCN-ValueNR, - - -- A set of carriers for different subcarrier spacings (numerologies). Defined in relation to Point A. - -- Corresponds to L1 parameter 'offset-pointA-set' (see 38.211, section FFS_Section) - scs-SpecificCarrierList SEQUENCE (SIZE (1..maxSCSs)) OF SCS-SpecificCarrier, - ... -} - --- TAG-FREQUENCY-INFO-UL-STOP --- TAG-FREQUENCY-INFO-UL-START - -FrequencyInfoUL ::= SEQUENCE { - -- List of one or multiple frequency bands to which this carrier(s) belongs. Multiple values are only supported in - -- system information but not when the FrequencyInfoDL is provided in dedicated signalling (HO or S(p)Cell addition). - frequencyBandList MultiFrequencyBandListNR OPTIONAL, -- Cond FDD-OrSUL - -- Absolute frequency of the reference resource block (Common RB 0). Its lowest subcarrier is also known as Point A. - -- Corresponds to L1 parameter 'offset-ref-low-scs-ref-PRB' (see 38.211, section FFS_Section) - absoluteFrequencyPointA ARFCN-ValueNR OPTIONAL, -- Cond FDD-OrSUL - -- A set of virtual carriers for different subcarrier spacings (numerologies). Defined in relation to Point A. - -- Note that the lower edge of the actual carrier is not defined by this field but rather in the scs-SpecificCarrierList. - -- Corresponds to L1 parameter 'offset-pointA-set' (see 38.211, section FFS_Section) - scs-SpecificCarriers SEQUENCE (SIZE (1..maxSCSs)) OF SCS-SpecificCarrier, - - -- The additional spectrum emission requirements to be applied by the UE on this uplink. - -- If the field is absent, the UE applies the value FFS_RAN4. (see FFS_section, section FFS_Section) - additionalSpectrumEmission AdditionalSpectrumEmission OPTIONAL, -- Need S - -- FFS_Definition. Corresponds to parameter FFS_RAN4. (see FFS_Spec, section FFS_Section) - -- If the field is absent, the UE applies the value FFS_RAN4. - p-Max P-Max OPTIONAL, -- Need S - -- Enable the NR UL transmission with a 7.5KHz shift to the LTE raster. If the field is absent, the frequency shift is disabled. - frequencyShift7p5khz ENUMERATED {true} OPTIONAL, -- Cond FDD-OrSUL-Optional - ... -} - --- TAG-FREQUENCY-INFO-UL-STOP --- TAG-GSCN-VALUE-NR-START - -GSCN-ValueNR ::= INTEGER (1..28557) - - --- TAG-GSCN-VALUE-NR-STOP - -Hysteresis ::= INTEGER (0..30) - --- TAG-LOGICAL-CHANNEL-CONFIG-START - -LogicalChannelConfig ::= SEQUENCE { - ul-SpecificParameters SEQUENCE { - priority INTEGER (1..16), - prioritisedBitRate ENUMERATED {kBps0, kBps8, kBps16, kBps32, kBps64, kBps128, kBps256, kBps512, - kBps1024, kBps2048, kBps4096, kBps8192, kBps16384, kBps32768, kBps65536, infinity}, - bucketSizeDuration ENUMERATED {ms50, ms100, ms150, ms300, ms500, ms1000, spare2, spare1}, - - allowedServingCells SEQUENCE (SIZE (1..maxNrofServingCells-1)) OF ServCellIndex OPTIONAL, -- Need R - allowedSCS-List SEQUENCE (SIZE (1..maxSCSs)) OF SubcarrierSpacing OPTIONAL, -- Need R - maxPUSCH-Duration ENUMERATED { ms0p02, ms0p04, ms0p0625, ms0p125, ms0p25, ms0p5, spare2, spare1 } OPTIONAL, -- Need R - configuredGrantType1Allowed ENUMERATED {true} OPTIONAL, -- Need R - - logicalChannelGroup INTEGER (0..maxLCG-ID) OPTIONAL, -- Need R - schedulingRequestID SchedulingRequestId OPTIONAL, -- Need R - logicalChannelSR-Mask BOOLEAN, - logicalChannelSR-DelayTimerApplied BOOLEAN - } OPTIONAL, -- Cond UL - - -- other parameters - ... -} - --- TAG-LOGICAL-CHANNEL-CONFIG-STOP --- TAG-MAC-CELL-GROUP-CONFIG-START - -MAC-CellGroupConfig ::= SEQUENCE { - drx-Config SetupRelease { DRX-Config } OPTIONAL, -- Need M - - schedulingRequestConfig SchedulingRequestConfig OPTIONAL, -- Need M - bsr-Config BSR-Config OPTIONAL, -- Need M - tag-Config TAG-Config OPTIONAL, -- Need M - phr-Config SetupRelease { PHR-Config } OPTIONAL, -- Need M - -- FFS : configurable per SCell? - skipUplinkTxDynamic BOOLEAN, - -- RNTI value for downlink SPS (see SPS-config) and uplink configured scheduling (see ConfiguredSchedulingConfig). - cs-RNTI SetupRelease { RNTI-Value } OPTIONAL -- Need M -} - -DRX-Config ::= SEQUENCE { - drx-onDurationTimer CHOICE { - subMilliSeconds INTEGER (1..31), - milliSeconds ENUMERATED { - ms1, ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30, ms40, ms50, ms60, - ms80, ms100, ms200, ms300, ms400, ms500, ms600, ms800, ms1000, ms1200, - ms1600, spare9, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1 } - }, - drx-InactivityTimer ENUMERATED { - ms0, ms1, ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30, ms40, ms50, ms60, ms80, - ms100, ms200, ms300, ms500, ms750, ms1280, ms1920, ms2560, spare9, spare8, - spare7, spare6, spare5, spare4, spare3, spare2, spare1}, - drx-HARQ-RTT-TimerDL INTEGER (0..56), - drx-HARQ-RTT-TimerUL INTEGER (0..56), - drx-RetransmissionTimerDL ENUMERATED { - sl0, sl1, sl2, sl4, sl6, sl8, sl16, sl24, sl33, sl40, sl64, sl80, sl96, sl112, sl128, - sl160, sl320, spare15, spare14, spare13, spare12, spare11, spare10, spare9, - spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1}, - drx-RetransmissionTimerUL ENUMERATED { - sl0, sl1, sl2, sl4, sl6, sl8, sl16, sl24, sl33, sl40, sl64, sl80, sl96, sl112, sl128, - sl160, sl320, spare15, spare14, spare13, spare12, spare11, spare10, spare9, - spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1 }, - drx-LongCycleStartOffset CHOICE { - ms10 INTEGER(0..9), - ms20 INTEGER(0..19), - ms32 INTEGER(0..31), - ms40 INTEGER(0..39), - ms60 INTEGER(0..59), - ms64 INTEGER(0..63), - ms70 INTEGER(0..69), - ms80 INTEGER(0..79), - ms128 INTEGER(0..127), - ms160 INTEGER(0..159), - ms256 INTEGER(0..255), - ms320 INTEGER(0..319), - ms512 INTEGER(0..511), - ms640 INTEGER(0..639), - ms1024 INTEGER(0..1023), - ms1280 INTEGER(0..1279), - ms2048 INTEGER(0..2047), - ms2560 INTEGER(0..2559), - ms5120 INTEGER(0..5119), - ms10240 INTEGER(0..10239) - }, - -- FFS need for finer offset granulary - -- FFS need for shorter values for long and short cycles - shortDRX SEQUENCE { - drx-ShortCycle ENUMERATED { - ms2, ms3, ms4, ms5, ms6, ms7, ms8, ms10, ms14, ms16, ms20, ms30, ms32, - ms35, ms40, ms64, ms80, ms128, ms160, ms256, ms320, ms512, ms640, spare9, - spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1 }, - drx-ShortCycleTimer INTEGER (1..16) - } OPTIONAL, -- Need R - drx-SlotOffset INTEGER (0..31) - -} - -PHR-Config ::= SEQUENCE { - phr-PeriodicTimer ENUMERATED {sf10, sf20, sf50, sf100, sf200,sf500, sf1000, infinity}, - phr-ProhibitTimer ENUMERATED {sf0, sf10, sf20, sf50, sf100,sf200, sf500, sf1000}, - phr-Tx-PowerFactorChange ENUMERATED {dB1, dB3, dB6, infinity}, - multiplePHR BOOLEAN, - phr-Type2PCell BOOLEAN, - phr-Type2OtherCell BOOLEAN, - phr-ModeOtherCG ENUMERATED {real, virtual} - -} - - -TAG-Config ::= SEQUENCE { - tag-ToReleaseList SEQUENCE (SIZE (1..maxNrofTAGs)) OF TAG-Id OPTIONAL, -- Need N - tag-ToAddModList SEQUENCE (SIZE (1..maxNrofTAGs)) OF TAG-ToAddMod OPTIONAL -- Need N -} - -TAG-ToAddMod ::= SEQUENCE { - tag-Id TAG-Id, - timeAlignmentTimer TimeAlignmentTimer, - ... -} - -TAG-Id ::= INTEGER (0..maxNrofTAGs-1) - -TimeAlignmentTimer ::= ENUMERATED {ms500, ms750, ms1280, ms1920, ms2560, ms5120, ms10240, infinity} - -BSR-Config ::= SEQUENCE { - periodicBSR-Timer ENUMERATED { - sf1, sf5, sf10, sf16, sf20, sf32, sf40, sf64, sf80, sf128, sf160, sf320, sf640, sf1280, sf2560, infinity}, - retxBSR-Timer ENUMERATED { sf10, sf20, sf40, sf80, sf160, sf320, sf640, sf1280, sf2560, sf5120, sf10240, spare5, spare4, - spare3, spare2, spare1}, - logicalChannelSR-DelayTimer ENUMERATED { sf20, sf40, sf64, sf128, sf512, sf1024, sf2560, spare1} OPTIONAL -- Need R -} - - - --- TAG-MAC-CELL-GROUP-CONFIG-STOP --- TAG-MEAS-CONFIG-START - -MeasConfig ::= SEQUENCE { - -- Measurement objects - measObjectToRemoveList MeasObjectToRemoveList OPTIONAL, -- Need N - measObjectToAddModList MeasObjectToAddModList OPTIONAL, -- Need N - - -- Reporting configurations - reportConfigToRemoveList ReportConfigToRemoveList OPTIONAL, -- Need N - reportConfigToAddModList ReportConfigToAddModList OPTIONAL, -- Need N - - -- Measurement identities - measIdToRemoveList MeasIdToRemoveList OPTIONAL, -- Need N - measIdToAddModList MeasIdToAddModList OPTIONAL, -- Need N - - -- Other parameters - --s-Measure config - s-MeasureConfig CHOICE { - ssb-RSRP RSRP-Range, - csi-RSRP RSRP-Range - } OPTIONAL, -- Need M - - quantityConfig QuantityConfig OPTIONAL, -- Need M - - --Placehold for measGapConfig - measGapConfig MeasGapConfig OPTIONAL, -- Need M - ... -} - -MeasObjectToRemoveList ::= SEQUENCE (SIZE (1..maxNrofObjectId)) OF MeasObjectId - -MeasIdToRemoveList ::= SEQUENCE (SIZE (1..maxNrofMeasId)) OF MeasId - -ReportConfigToRemoveList ::= SEQUENCE (SIZE (1..maxReportConfigId)) OF ReportConfigId - --- TAG-MEAS-CONFIG-STOP ---TAG-MEAS-GAP-CONFIG-START - -MeasGapConfig ::= SEQUENCE { - gapFR2 SetupRelease { GapConfig } OPTIONAL, - ... -} - -GapConfig ::= SEQUENCE { - gapOffset INTEGER (0..159), - mgl ENUMERATED {ms1dot5, ms3, ms3dot5, ms4, ms5dot5, ms6}, - mgrp ENUMERATED {ms20, ms40, ms80, ms160}, - mgta ENUMERATED {ms0, ms0dot25, ms0dot5}, - ... -} - --- TAG-MEAS-GAP-CONFIG-STOP --- TAG-MEAS-ID-START - -MeasId ::= INTEGER (1..maxNrofMeasId) - --- TAG-MEAS-ID-STOP --- TAG-MEAS-ID-TO-ADD-MOD-LIST-START - -MeasIdToAddModList ::= SEQUENCE (SIZE (1..maxNrofMeasId)) OF MeasIdToAddMod - -MeasIdToAddMod ::= SEQUENCE { - measId MeasId, - measObjectId MeasObjectId, - reportConfigId ReportConfigId -} - --- TAG-MEAS-ID-TO-ADD-MOD-LIST-STOP --- TAG-MEAS-OBJECT-ID-START - -MeasObjectId ::= INTEGER (1..maxNrofObjectId) - --- TAG-MEAS-OBJECT-ID-STOP --- TAG-MEAS-OBJECT-NR-START - -MeasObjectNR ::= SEQUENCE { - ssbFrequency ARFCN-ValueNR OPTIONAL, - refFreqCSI-RS ARFCN-ValueNR OPTIONAL, - - --RS configuration (e.g. SMTC window, CSI-RS resource, etc.) - referenceSignalConfig ReferenceSignalConfig, - - --Consolidation of L1 measurements per RS index - absThreshSS-BlocksConsolidation ThresholdNR OPTIONAL, -- Need R - absThreshCSI-RS-Consolidation ThresholdNR OPTIONAL, -- Need R - - --Config for cell measurement derivation - nrofSS-BlocksToAverage INTEGER (2..maxNrofSS-BlocksToAverage) OPTIONAL, -- Need R - nrofCSI-RS-ResourcesToAverage INTEGER (2..maxNrofCSI-RS-ResourcesToAverage) OPTIONAL, -- Need R - - -- Filter coefficients applicable to this measurement object - quantityConfigIndex INTEGER (1..maxNrofQuantityConfig), - - --Frequency-specific offsets - offsetFreq Q-OffsetRangeList, - - -- Cell list - cellsToRemoveList PCI-List OPTIONAL, -- Need N - cellsToAddModList CellsToAddModList OPTIONAL, -- Need N - - -- Black list - blackCellsToRemoveList PCI-RangeIndexList OPTIONAL, -- Need N - blackCellsToAddModList BlackCellsToAddModList OPTIONAL, -- Need N - - -- White list - whiteCellsToRemoveList PCI-RangeIndexList OPTIONAL, -- Need N - whiteCellsToAddModList WhiteCellsToAddModList OPTIONAL, -- Need N - ... -} - -ReferenceSignalConfig::= SEQUENCE { - - - -- SSB configuration for mobility (nominal SSBs, timing configuration) - ssb-ConfigMobility SSB-ConfigMobility OPTIONAL, -- Need M - -- CSI-RS resources to be used for CSI-RS based RRM measurements - csi-rs-ResourceConfigMobility SetupRelease { CSI-RS-ResourceConfigMobility } OPTIONAL-- Need M - -} - --- A measurement timing configuration -SSB-ConfigMobility::= SEQUENCE { - --Only the values 15, 30 or 60 kHz (<6GHz), 60 or 120 kHz (>6GHz) are applicable - subcarrierSpacing SubcarrierSpacing, - -- The set of SS blocks to be measured within the SMTC measurement duration. - -- Corresponds to L1 parameter 'SSB-measured' (see FFS_Spec, section FFS_Section) - -- When the field is absent the UE measures on all SS-blocks - -- FFS_CHECK: Is this IE placed correctly. - ssb-ToMeasure SetupRelease { SSB-ToMeasure } OPTIONAL, -- Need M - - -- Indicates whether the UE can utilize serving cell timing to derive the index of SS block transmitted by neighbour cell: - useServingCellTimingForSync BOOLEAN, - - -- Primary measurement timing configuration. Applicable for intra- and inter-frequency measurements. - smtc1 SEQUENCE { - -- Periodicity and offset of the measurement window in which to receive SS/PBCH blocks. - -- Periodicity and offset are given in number of subframes. - -- FFS_FIXME: This does not match the L1 parameter table! They seem to intend an index to a hidden table in L1 specs. - -- (see 38.213, section REF): - periodicityAndOffset CHOICE { - sf5 INTEGER (0..4), - sf10 INTEGER (0..9), - sf20 INTEGER (0..19), - sf40 INTEGER (0..39), - sf80 INTEGER (0..79), - sf160 INTEGER (0..159) - }, - -- Duration of the measurement window in which to receive SS/PBCH blocks. It is given in number of subframes - -- (see 38.213, section 4.1) - duration ENUMERATED { sf1, sf2, sf3, sf4, sf5 } - }, - - -- Secondary measurement timing confguration for explicitly signalled PCIs. It uses the offset and duration from smtc1. - -- It is supported only for intra-frequency measurements in RRC CONNECTED. - smtc2 SEQUENCE { - -- PCIs that are known to follow this SMTC. - pci-List SEQUENCE (SIZE (1..maxNrofPCIsPerSMTC)) OF PhysCellId OPTIONAL, -- Need M - -- Periodicity for the given PCIs. Timing offset and Duration as provided in smtc1. - periodicity ENUMERATED {sf5, sf10, sf20, sf40, sf80, sf160, spare2, spare1} - } OPTIONAL,-- Cond IntraFreqConnected - ss-RSSI-Measurement SEQUENCE { - measurementSlots CHOICE { - kHz15 BIT STRING (SIZE(1)), - kHz30 BIT STRING (SIZE(2)), - kHz60 BIT STRING (SIZE(4)), - kHz120 BIT STRING (SIZE(8)) - }, - endSymbol INTEGER(0..13) - } OPTIONAL -} - -CSI-RS-ResourceConfigMobility ::= SEQUENCE { - -- MO specific values - isServingCellMO BOOLEAN, - -- Subcarrier spacing of CSI-RS. - -- Only the values 15, 30 or 60 kHz (<6GHz), 60 or 120 kHz (>6GHz) are applicable. - -- Corresponds to L1 parameter 'Numerology' (see 38.211, section FFS_Section) - subcarrierSpacing SubcarrierSpacing, - -- List of cells - csi-RS-CellList-Mobility SEQUENCE (SIZE (1..maxNrofCSI-RS-CellsRRM)) OF CSI-RS-CellMobility - -} - -CSI-RS-CellMobility ::= SEQUENCE { - cellId PhysCellId, - - csi-rs-MeasurementBW SEQUENCE { - -- Allowed size of the measurement BW in PRBs - -- Corresponds to L1 parameter 'CSI-RS-measurementBW-size' (see FFS_Spec, section FFS_Section) - nrofPRBs ENUMERATED { size24, size48, size96, size192, size264}, - -- Starting PRB index of the measurement bandwidth - -- Corresponds to L1 parameter 'CSI-RS-measurement-BW-start' (see FFS_Spec, section FFS_Section) - -- FFS_Value: Upper edge of value range unclear in RAN1 - startPRB INTEGER(0..2169) - }, - - -- Frequency domain density for the 1-port CSI-RS for L3 mobility - -- Corresponds to L1 parameter 'Density' (see FFS_Spec, section FFS_Section) - density ENUMERATED {d1,d3} OPTIONAL, - - --- List of resources - csi-rs-ResourceList-Mobility SEQUENCE (SIZE (1..maxNrofCSI-RS-ResourcesRRM)) OF CSI-RS-Resource-Mobility -} - - -CSI-RS-Resource-Mobility ::= SEQUENCE { - csi-RS-Index CSI-RS-Index, - -- Contains periodicity and slot offset for periodic/semi-persistent CSI-RS (see 38.211, section x.x.x.x)FFS_Ref - slotConfig CHOICE { - ms4 INTEGER (0..31), - ms5 INTEGER (0..39), - ms10 INTEGER (0..79), - ms20 INTEGER (0..159), - ms40 INTEGER (0..319) - }, - -- Each CSI-RS resource may be associated with one SSB. If such SSB is indicated, the NW also indicates whether the UE may assume - -- quasi-colocation of this SSB with this CSI-RS reosurce. - -- Corresponds to L1 parameter 'Associated-SSB' (see FFS_Spec, section FFS_Section) - - associatedSSB SEQUENCE { - ssb-Index SSB-Index, - -- The CSI-RS resource is either QCL’ed not QCL’ed with the associated SSB in spatial parameters - -- Corresponds to L1 parameter 'QCLed-SSB' (see FFS_Spec, section FFS_Section) - isQuasiColocated BOOLEAN - } OPTIONAL, -- Cond AssociatedSSB - - - -- Frequency domain allocation within a physical resource block in accordance with 38.211, section 7.4.1.5.3 including table 7.4.1.5.2-1. - -- The number of bits that may be set to one depend on the chosen row in that table. For the choice "other", the row can be determined from - -- the parmeters below and from the number of bits set to 1 in frequencyDomainAllocation. - frequencyDomainAllocation CHOICE { - row1 BIT STRING (SIZE (4)), - row2 BIT STRING (SIZE (12)) - }, - - - -- Time domain allocation within a physical resource block. The field indicates the first OFDM symbol in the PRB used for CSI-RS. - -- Parameter l0 in 38.211, section 7.4.1.5.3. Value 2 is supported only when DL-DMRS-typeA-pos equals 3. - firstOFDMSymbolInTimeDomain INTEGER (0..13), - -- Scrambling ID for CSI-RS(see 38.211, section 7.4.1.5.2) - sequenceGenerationConfig INTEGER (0..1023), - ... -} - -CSI-RS-Index ::= INTEGER (0..maxNrofCSI-RS-ResourcesRRM-1) - -Q-OffsetRangeList ::= SEQUENCE { - rsrpOffsetSSB Q-OffsetRange DEFAULT dB0, - rsrqOffsetSSB Q-OffsetRange DEFAULT dB0, - sinrOffsetSSB Q-OffsetRange DEFAULT dB0, - rsrpOffsetCSI-RS Q-OffsetRange DEFAULT dB0, - rsrqOffsetCSI-RS Q-OffsetRange DEFAULT dB0, - sinrOffsetCSI-RS Q-OffsetRange DEFAULT dB0 -} - -SSB-ToMeasure ::= CHOICE { - -- bitmap for sub 3 GHz - shortBitmap BIT STRING (SIZE (4)), - -- bitmap for 3-6 GHz - mediumBitmap BIT STRING (SIZE (8)), - -- bitmap for above 6 GHz - longBitmap BIT STRING (SIZE (64)) -} - - -ThresholdNR ::= SEQUENCE{ - thresholdRSRP RSRP-Range OPTIONAL, - thresholdRSRQ RSRQ-Range OPTIONAL, - thresholdSINR SINR-Range OPTIONAL -} - -CellsToAddModList ::= SEQUENCE (SIZE (1..maxNrofCellMeas)) OF CellsToAddMod - -CellsToAddMod ::= SEQUENCE { - physCellId PhysCellId, - cellIndividualOffset Q-OffsetRangeList -} - -BlackCellsToAddModList ::= SEQUENCE (SIZE (1..maxNrofPCI-Ranges)) OF BlackCellsToAddMod - -BlackCellsToAddMod ::= SEQUENCE { - pci-RangeIndex PCI-RangeIndex, - pci-Range PCI-Range -} - - -WhiteCellsToAddModList ::= SEQUENCE (SIZE (1..maxNrofPCI-Ranges)) OF WhiteCellsToAddMod - -WhiteCellsToAddMod ::= SEQUENCE { - pci-RangeIndex PCI-RangeIndex, - pci-Range PCI-Range -} - --- TAG-MEAS-OBJECT-NR-STOP --- TAG-MEAS-OBJECT-TO-ADD-MOD-LIST-START - -MeasObjectToAddModList ::= SEQUENCE (SIZE (1..maxNrofObjectId)) OF MeasObjectToAddMod - -MeasObjectToAddMod ::= SEQUENCE { - measObjectId MeasObjectId, - measObject CHOICE { - measObjectNR MeasObjectNR, - ... - } -} - --- TAG-MEAS-OBJECT-TO-ADD-MOD-LIST-STOP --- TAG-MEAS-RESULTS-START - -MeasResults ::= SEQUENCE { - measId MeasId, - measResultServingFreqList MeasResultServFreqList, - measResultNeighCells CHOICE { - measResultListNR MeasResultListNR, - ... - } OPTIONAL, - ... -} - -MeasResultServFreqList ::= SEQUENCE (SIZE (1..maxNrofServingCells)) OF MeasResultServFreq - -MeasResultServFreq ::= SEQUENCE { - servFreqId ServCellIndex, - measResultServingCell MeasResultNR, - measResultBestNeighCell MeasResultNR, - ... -} - -MeasResultListNR ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultNR - -MeasResultNR ::= SEQUENCE { - physCellId PhysCellId OPTIONAL, - --FFS: Details of cgi info - cgi-Info ENUMERATED {ffsTypeAndValue} OPTIONAL, - measResult SEQUENCE { - cellResults SEQUENCE{ - resultsSSB-Cell MeasQuantityResults OPTIONAL, - resultsCSI-RS-Cell MeasQuantityResults OPTIONAL - }, - rsIndexResults SEQUENCE{ - resultsSSB-Indexes ResultsPerSSB-IndexList OPTIONAL, - resultsCSI-RS-Indexes ResultsPerCSI-RS-IndexList OPTIONAL - } OPTIONAL - }, - ... -} - - -MeasQuantityResults ::= SEQUENCE { - rsrp RSRP-Range OPTIONAL, - rsrq RSRQ-Range OPTIONAL, - sinr SINR-Range OPTIONAL -} - -ResultsPerSSB-IndexList::= SEQUENCE (SIZE (1..maxNrofSSBs)) OF ResultsPerSSB-Index - -ResultsPerSSB-Index ::= SEQUENCE { - ssb-Index SSB-Index, - ssb-Results MeasQuantityResults OPTIONAL -} - -ResultsPerCSI-RS-IndexList::= SEQUENCE (SIZE (1..maxNrofCSI-RS)) OF ResultsPerCSI-RS-Index - -ResultsPerCSI-RS-Index ::= SEQUENCE { - csi-RS-Index CSI-RS-Index, - csi-RS-Results MeasQuantityResults OPTIONAL -} - --- TAG-MEAS-RESULTS-STOP --- TAG-MEAS-RESULT-SCG-FAILURE-START - -MeasResultSCG-Failure ::= SEQUENCE { - measResultServFreqList MeasResultServFreqList2NR, - measResultNeighCells MeasResultList2NR, - ... -} - -MeasResultServFreqList2NR ::= SEQUENCE (SIZE (1..maxNrofServingCells)) OF MeasResultServFreq2NR - -MeasResultServFreq2NR ::= SEQUENCE { - ssbFrequency ARFCN-ValueNR OPTIONAL, - refFreqCSI-RS ARFCN-ValueNR OPTIONAL, - measResultServingCell MeasResultNR, - measResultBestNeighCell MeasResultNR OPTIONAL -} - -MeasResultList2NR ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasResult2NR - -MeasResult2NR ::= SEQUENCE { - ssbFrequency ARFCN-ValueNR OPTIONAL, - refFreqCSI-RS ARFCN-ValueNR OPTIONAL, - measResultListNR MeasResultListNR -} - --- TAG-MEAS-RESULT-SCG-FAILURE-STOP --- TAG-MEASRESULT-CELL-LIST-SFTD-START - -MeasResultCellListSFTD ::= SEQUENCE (SIZE (1..maxCellSFTD)) OF MeasResultCellSFTD - -MeasResultCellSFTD ::= SEQUENCE { - physCellId PhysCellId, - sfn-OffsetResult INTEGER (0..1023), - frameBoundaryOffsetResult INTEGER (-30720..30719), - rsrp-Result RSRP-Range OPTIONAL -} - --- TAG-MEASRESULT-CELL-LIST-SFTD-STOP --- TAG-MULTIFREQUENCYBANDLISTNR-START - -MultiFrequencyBandListNR ::= SEQUENCE (SIZE (1..maxNrofMultiBands)) OF FreqBandIndicatorNR - --- TAG-MULTIFREQUENCYBANDLISTNR-STOP --- TAG-NZP-CSI-RS-RESOURCESET-START -NZP-CSI-RS-ResourceSet ::= SEQUENCE { - nzp-CSI-ResourceSetId NZP-CSI-RS-ResourceSetId, - - -- NZP-CSI-RS-Resources assocaited with this NZP-CSI-RS resource set. - -- Corresponds to L1 parameter 'CSI-RS-ResourceConfigList' (see 38.214, section 5.2) - -- For CSI, there are at most 8 NZP CSI RS resources per resource set - nzp-CSI-RS-Resources SEQUENCE (SIZE (1..maxNrofNZP-CSI-RS-ResourcesPerSet)) OF NZP-CSI-RS-ResourceId, - - -- Indicates whether repetition is on/off. If set to set to 'OFF', the UE may not assume that the - -- NZP-CSI-RS resources within the resource set are transmitted with the same downlink spatial domain transmission filter - -- and with same NrofPorts in every symbol. - -- Corresponds to L1 parameter 'CSI-RS-ResourceRep' (see 38.214, sections 5.2.2.3.1 and 5.1.6.1.2) - -- Can only be configured for CSI-RS resource sets which are associated with CSI-ReportConfig with report of L1 RSRP or “no report†- repetition ENUMERATED { on, off } OPTIONAL, - - -- Offset X between the slot containing the DCI that triggers a set of aperiodic NZP CSI-RS resources and the slot in which the - -- CSI-RS resource set is transmitted. When the field is absent the UE applies the value 0. - -- Corresponds to L1 parameter 'Aperiodic-NZP-CSI-RS-TriggeringOffset' (see 38,214, section FFS_Section) - aperiodicTriggeringOffset INTEGER(0..4) OPTIONAL, -- Need S - - -- Indicates that the antenna port for all NZP-CSI-RS resources in the CSI-RS resource set is same. - -- Corresponds to L1 parameter 'TRS-Info' (see 38.214, section 5.2.2.3.1) - trs-Info ENUMERATED {true} OPTIONAL, - ... -} - --- TAG-NZP-CSI-RS-RESOURCESET-STOP --- TAG-NZP-CSI-RS-RESOURCESETID-START -NZP-CSI-RS-ResourceSetId ::= INTEGER (0..maxNrofNZP-CSI-RS-ResourceSets-1) - --- TAG-NZP-CSI-RS-RESOURCESETID-STOP --- TAG-NZP-CSI-RS-RESOURCE-START -NZP-CSI-RS-Resource ::= SEQUENCE { - nzp-CSI-RS-ResourceId NZP-CSI-RS-ResourceId, - - -- OFDM symbol location(s) in a slot and subcarrier occupancy in a PRB of the CSI-RS resource - resourceMapping CSI-RS-ResourceMapping, - -- Power offset of NZP CSI-RS RE to PDSCH RE. Value in dB. Corresponds to L1 parameter Pc (see 38.214, sections 5.2.2.3.1 and 4.1) - powerControlOffset INTEGER(-8..15), - -- Power offset of NZP CSI-RS RE to SS RE. Value in dB. Corresponds to L1 parameter 'Pc_SS' (see 38.214, section 5.2.2.3.1) - powerControlOffsetSS ENUMERATED{db-3, db0, db3, db6} OPTIONAL, - -- Scrambling ID (see 38.214, section 5.2.2.3.1) - scramblingID ScramblingId, - - -- Periodicity and slot offset sl1 corresponds to a periodicity of 1 slot, sl2 to a periodicity of two slots, and so on. - -- The corresponding offset is also given in number of slots. Corresponds to L1 parameter 'CSI-RS-timeConfig' (see 38.214, section 5.2.2.3.1) - periodicityAndOffset CSI-ResourcePeriodicityAndOffset OPTIONAL, --Cond PeriodicOrSemiPersistent - - -- For a target periodic CSI-RS, contains a reference to one TCI-State in TCI-States for providing the QCL source and - -- QCL type. For periodic CSI-RS, the source can be SSB or another periodic-CSI-RS. - -- Corresponds to L1 parameter 'QCL-Info-PeriodicCSI-RS' (see 38.214, section 5.2.2.3.1) - qcl-InfoPeriodicCSI-RS TCI-StateId OPTIONAL, --Cond Periodic - ... -} - --- TAG-NZP-CSI-RS-RESOURCE-STOP --- TAG-NZP-CSI-RS-RESOURCEID-START -NZP-CSI-RS-ResourceId ::= INTEGER (0..maxNrofNZP-CSI-RS-Resources-1) - --- TAG-NZP-CSI-RS-RESOURCEID-STOP --- TAG-P-MAX-START - -P-Max ::= INTEGER (-30..33) - --- TAG-P-MAX-STOP --- TAG-PCI-LIST-START - -PCI-List ::= SEQUENCE (SIZE (1..maxNrofCellMeas)) OF PhysCellId - --- TAG-PCI-LIST-STOP --- TAG-PCI-RANGE-START - -PCI-Range ::= SEQUENCE { - start PhysCellId, - range ENUMERATED { - n4, n8, n12, n16, n24, n32, n48, n64, n84, - n96, n128, n168, n252, n504, n1008, - spare1} OPTIONAL -- Need Nss -} - --- TAG-PCI-RANGE-STOP --- TAG-PCI-RANGE-INDEX-START - -PCI-RangeIndex ::= INTEGER (1..maxNrofPCI-Ranges) - - --- TAG-PCI-RANGE-INDEX-STOP --- TAG-PCI-RANGE-INDEX-LIST-START - -PCI-RangeIndexList ::= SEQUENCE (SIZE (1..maxNrofPCI-Ranges)) OF PCI-RangeIndex - --- TAG-PCI-Range-INDEX-LIST-STOP --- TAG-PDCCH-CONFIG-START - -PDCCH-Config ::= SEQUENCE { - -- List of UE specifically configured Control Resource Sets (CORESETs) to be used by the UE. - -- The network configures at most 3 CORESETs per BWP per cell (including the initial CORESET). - controlResourceSetToAddModList SEQUENCE(SIZE (1..3)) OF ControlResourceSet OPTIONAL, - controlResourceSetToReleaseList SEQUENCE(SIZE (1..3)) OF ControlResourceSetId OPTIONAL, - - -- List of UE specifically configured Control Resource Sets (CORESETs). - -- The network configures at most 10 Search Spaces per BWP per cell (including the initial Search Space). - searchSpacesToAddModList SEQUENCE(SIZE (1..10)) OF SearchSpace OPTIONAL, - searchSpacesToReleaseList SEQUENCE(SIZE (1..10)) OF SearchSpaceId OPTIONAL, - - -- Configuration of downlink preemtption indications to be monitored in this cell. - -- Corresponds to L1 parameter 'Preemp-DL' (see 38.214, section 11.2) - -- FFS_RAN1: LS R1-1801281 indicates this is "Per Cell (but association with each configured BWP is needed)" => Unclear, keep on BWP for now. - downlinkPreemption SetupRelease { DownlinkPreemption } OPTIONAL, -- Need M - - -- Configuration of Slot-Format-Indicators to be monitored in this cell - - -- FFS_RAN1 discusses still whether this SFI payload configuration is BWP- or Cell-Specific. - slotFormatIndicator SetupRelease { SlotFormatIndicator } OPTIONAL, -- Need M - -- Enable and configure reception of group TPC commands for PUSCH - tpc-PUSCH SetupRelease { PUSCH-TPC-CommandConfig } OPTIONAL, -- Need M - - -- Enable and configure reception of group TPC commands fpr PUCCH - tpc-PUCCH SetupRelease { PUCCH-TPC-CommandConfig } OPTIONAL, -- Cond PUCCH-CellOnly - - ... -} - --- TAG-PDCCH-CONFIG-STOP --- TAG-PDCCH-CONFIGCOMMON-START - -PDCCH-ConfigCommon ::= SEQUENCE { - - -- A list of common control resource sets. Only CORESETs with ControlResourceSetId = 0 or 1 are allowed. The CORESET#0 - -- corresponds to the CORESET configured in MIB (see pdcch-ConfigSIB1) and is used to provide that information to the UE - -- by dedicated signalling during handover and (P)SCell addition. The CORESET#1 may be configured an used for RAR - -- (see ra-ControlResourceSet). - commonControlResourcesSets SEQUENCE (SIZE(1..2)) OF ControlResourceSet OPTIONAL, -- Need R - - -- A list of additional common search spaces. - commonSearchSpaces SEQUENCE (SIZE(1..4)) OF SearchSpace OPTIONAL, -- Need R - - -- ID of the search space for SIB1 message. - - -- Corresponds to L1 parameter 'rmsi-SearchSpace' (see 38.213, section 10) - searchSpaceSIB1 SearchSpaceId OPTIONAL, -- Need R - -- ID of the Search space for other system information, i.e., SIB2 and beyond. - -- Corresponds to L1 parameter 'osi-SearchSpace' (see 38.213, section 10) - -- If the field is absent, the monitoring occasions are derived as described in 38.213, section 10.1 and section 13. - searchSpaceOtherSystemInformation SearchSpaceId OPTIONAL, -- Need R - - -- ID of the Search space for paging. Corresponds to L1 parameter 'paging-SearchSpace' (see 38.213, section 10) - -- If the field is absent, the monitoring occasions are derived as described in 38.213, section 10.1 and section 13. - pagingSearchSpace SearchSpaceId OPTIONAL, -- Need R - - -- CORESET configured for random access. When the field is absent the UE uses the CORESET according to pdcch-ConfigSIB1 - -- which is associated with ControlResourceSetId = 0. - -- Corresponds to L1 parameter 'rach-coreset-configuration' (see 38.211?, section FFS_Section) - ra-ControlResourceSet ControlResourceSetId OPTIONAL, -- Need S - -- ID of the Search space for random access procedure. Corresponds to L1 parameter 'ra-SearchSpace' (see 38.214?, section FFS_Section) - -- If the field is absent, the monitoring occasions are derived as described in 38.213, section 10.1 and section 13. - ra-SearchSpace SearchSpaceId OPTIONAL, -- Need R - ... - -} - --- TAG-PDCCH-CONFIGCOMMON-STOP --- TAG-PDCP-CONFIG-START - -PDCP-Config ::= SEQUENCE { - drb SEQUENCE { - discardTimer ENUMERATED {ms10, ms20, ms30, ms40, ms50, ms60, ms75, ms100, ms150, ms200, ms250, ms300, ms500, ms750, ms1500, infinity} OPTIONAL, -- Cond Setup - pdcp-SN-SizeUL ENUMERATED {len12bits, len18bits} OPTIONAL, -- Cond Setup2 - pdcp-SN-SizeDL ENUMERATED {len12bits, len18bits} OPTIONAL, -- Cond Setup2 - headerCompression CHOICE { - notUsed NULL, - rohc SEQUENCE { - maxCID INTEGER (1..16383) DEFAULT 15, - profiles SEQUENCE { - profile0x0001 BOOLEAN, - profile0x0002 BOOLEAN, - profile0x0003 BOOLEAN, - profile0x0004 BOOLEAN, - profile0x0006 BOOLEAN, - profile0x0101 BOOLEAN, - profile0x0102 BOOLEAN, - profile0x0103 BOOLEAN, - profile0x0104 BOOLEAN - }, - drb-ContinueROHC BOOLEAN - }, - uplinkOnlyROHC SEQUENCE { - maxCID INTEGER (1..16383) DEFAULT 15, - profiles SEQUENCE { - profile0x0006 BOOLEAN - }, - drb-ContinueROHC BOOLEAN - }, - ... - }, - integrityProtection ENUMERATED { enabled } OPTIONAL, -- Cond ConnectedTo5GC - statusReportRequired ENUMERATED { true } OPTIONAL, -- Cond Rlc-AM - outOfOrderDelivery BOOLEAN - } OPTIONAL, -- Cond DRB - -- FFS / TODO: Handle more than two secondary cell groups - moreThanOneRLC SEQUENCE { - primaryPath SEQUENCE { - cellGroup CellGroupId OPTIONAL, -- Need R - logicalChannel LogicalChannelIdentity OPTIONAL -- Need R - }, - ul-DataSplitThreshold UL-DataSplitThreshold OPTIONAL, -- Cond SplitBearer - pdcp-Duplication ENUMERATED { true } OPTIONAL -- Need R - } OPTIONAL, -- Cond MoreThanOneRLC - - t-Reordering ENUMERATED { - ms0, ms1, ms2, ms4, ms5, ms8, ms10, ms15, ms20, ms30, ms40, ms50, ms60, ms80, ms100, ms120, ms140, ms160, ms180, ms200, ms220, - ms240, ms260, ms280, ms300, ms500, ms750, ms1000, ms1250, ms1500, ms1750, ms2000, ms2250, ms2500, ms2750, - ms3000, spare28, spare27, spare26, spare25, spare24, spare23, spare22, spare21, spare20, - spare19, spare18, spare17, spare16, spare15, spare14, spare13, spare12, spare11, spare10, spare09, - spare08, spare07, spare06, spare05, spare04, spare03, spare02, spare01 } OPTIONAL, -- Need S - - - ... -} - -UL-DataSplitThreshold ::= ENUMERATED { - b0, b100, b200, b400, b800, b1600, b3200, b6400, b12800, b25600, b51200, b102400, b204800, - b409600, b819200, b1228800, b1638400, b2457600, b3276800, b4096000, b4915200, b5734400, - b6553600, infinity, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1} - --- TAG-PDCP-CONFIG-STOP --- TAG-PDSCH-CONFIG-START - -PDSCH-Config ::= SEQUENCE { - -- Identifer used to initalite data scrambling (c_init) for both PDSCH. - -- Corresponds to L1 parameter 'Data-scrambling-Identity' (see 38,214, section FFS_Section) - -- FFS:_Replace by tye ScramblingId used in other places? - dataScramblingIdentityPDSCH INTEGER (0..1007) OPTIONAL, - - -- DMRS configuration for PDSCH transmissions using PDSCH mapping type A (chosen dynamically via PDSCH-TimeDomainResourceAllocation). - dmrs-DownlinkForPDSCH-MappingTypeA SetupRelease { DMRS-DownlinkConfig } OPTIONAL, -- Need M - -- DMRS configuration for PDSCH transmissions using PDSCH mapping type B (chosen dynamically via PDSCH-TimeDomainResourceAllocation). - dmrs-DownlinkForPDSCH-MappingTypeB SetupRelease { DMRS-DownlinkConfig } OPTIONAL, -- Need M - - - -- A list of Transmission Configuration Indicator (TCI) states for dynamically indicating (over DCI) a transmission configuration - -- which includes QCL-relationships between the DL RSs in one RS set and the PDSCH DMRS ports - -- (see 38.214, section 5.1.4) - tci-StatesToAddModList SEQUENCE (SIZE(1..maxNrofTCI-States)) OF TCI-State OPTIONAL, -- Need N - tci-StatesToReleaseList SEQUENCE (SIZE(1..maxNrofTCI-States)) OF TCI-StateId OPTIONAL, -- Need N - - -- Interleaving unit configurable between 2 and 4 PRBs - -- Corresponds to L1 parameter 'VRB-to-PRB-interleaver' (see 38.211, section 6.3.1.6) - vrb-ToPRB-Interleaver ENUMERATED {n2, n4}, - - -- Configuration of resource allocation type 0 and resource allocation type 1 for non-fallback DCI - -- Corresponds to L1 parameter 'Resouce-allocation-config' (see 38.214, section 5.1.2) - resourceAllocation ENUMERATED { resourceAllocationType0, -resourceAllocationType1, -dynamicSwitch}, - - -- List of time-domain configurations for timing of DL assignment to DL data. If configured, the values provided herein - -- override the values received in corresponding PDSCH-ConfigCommon. - pdsch-AllocationList SEQUENCE (SIZE(1..maxNrofDL-Allocations)) OF PDSCH-TimeDomainResourceAllocation OPTIONAL, -- Need R - -- Number of repetitions for data. Corresponds to L1 parameter 'aggregation-factor-DL' (see 38.214, section FFS_Section) - -- When the field is absent the UE applies the value 1 - pdsch-AggregationFactor ENUMERATED { n2, n4, n8 } OPTIONAL, -- Need S - - -- Resources patterns which the UE should rate match PDSCH around. The UE rate matches around the union of all resources - -- indicated in the nexted bitmaps. Corresponds to L1 parameter 'Resource-set-BWP' (see 38.214, section 5.1.2.2.3) - -- FFS: RAN1 indicates that there should be a set of patterns per cell and one per BWP => Having both seems unnecessary. - - rateMatchPatternToAddModList SEQUENCE (SIZE (1..maxNrofRateMatchPatterns)) OF RateMatchPattern OPTIONAL, -- Need N - rateMatchPatternToReleaseList SEQUENCE (SIZE (1..maxNrofRateMatchPatterns)) OF RateMatchPatternId OPTIONAL, -- Need N - - -- The IDs of a first group of RateMatchPatterns defined in the rateMatchPatternToAddModList. - -- Corresponds to L1 parameter 'Resource-set-group-1'. (see 38.214, section FFS_Section) - rateMatchPatternGroup1 SEQUENCE (SIZE (1..maxNrofRateMatchPatterns)) OF RateMatchPatternId OPTIONAL, -- Need R - -- The IDs of a second group of RateMatchPatterns defined in the rateMatchPatternToAddModList - -- Corresponds to L1 parameter 'Resource-set-group-2'. (see 38.214, section FFS_Section) - rateMatchPatternGroup2 SEQUENCE (SIZE (1..maxNrofRateMatchPatterns)) OF RateMatchPatternId OPTIONAL, -- Need R - - - -- Selection between config 1 and config 2 for RBG size for PDSCH. Corresponds to L1 parameter 'RBG-size-PDSCH' (see 38.214, section 5.1.2.2.1) - rbg-Size ENUMERATED {config1, config2}, - - -- Indicates which MCS table the UE shall use for PDSCH. Corresponds to L1 parameter 'MCS-Table-PDSCH' (see 38.214, section 5.1.3.1). - mcs-Table ENUMERATED {qam64, qam256}, - - -- Maximum number of code words that a single DCI may schedule. This changes the number of MCS/RV/NDI bits in the DCI message from 1 to 2. - maxNrofCodeWordsScheduledByDCI ENUMERATED {n1, n2} OPTIONAL, -- Need R - - - -- Indicates the PRB bundle type and bundle size(s). If "dynamic" is chosen, the actual BundleSizeSet to use is indicated via DCI. - -- If a bundleSize(Set) value is absent, the UE applies the value n2. Corresponds to L1 parameter 'PRB_bundling' - -- (see 38.214, section 5.1.2.3) - prb-BundlingType CHOICE { - static SEQUENCE { - bundleSize ENUMERATED { n4, wideband } OPTIONAL -- Need S - }, - dynamic SEQUENCE { - bundleSizeSet1 ENUMERATED { n4, wideband, n2-wideband, n4-wideband } OPTIONAL, -- Need S - bundleSizeSet2 ENUMERATED { n4, wideband } OPTIONAL -- Need S - } - }, - - -- A list of Zero-Power (ZP) CSI-RS resources used for PDSCH rate-matching. - -- Corresponds to L1 parameter 'ZP-CSI-RS-ResourceConfigList' (see 38.214, section FFS_Section) - zp-CSI-RS-ResourceToAddModList SEQUENCE (SIZE (1..maxNrofZP-CSI-RS-Resources)) OF ZP-CSI-RS-Resource OPTIONAL, -- Need N - zp-CSI-RS-ResourceToReleaseList SEQUENCE (SIZE (1..maxNrofZP-CSI-RS-Resources)) OF ZP-CSI-RS-ResourceId OPTIONAL, -- Need M - - -- A list of sets. Each set contains a set-ID and the IDs of one or more ZP-CSI-RS-Resources (the actual resources are defined in the - -- zp-CSI-RS-ResourceToAddModList). The network triggers a set by indicating its set-ID (ZP-CSI-RS-ResourceSetId) in the DCI payload. - -- The resources referenced in these sets are confgiured with resourceType 'aperiodic'. - -- Corresponds to L1 parameter ' ZP-CSI-RS-ResourceSetConfigList' (see 38.214, section FFS_Section) - aperiodic-ZP-CSI-RS-ResourceSetsToAddModList SEQUENCE (SIZE (1..maxNrofZP-CSI-RS-Sets)) OF ZP-CSI-RS-ResourceSet OPTIONAL, -- Need N - aperiodic-ZP-CSI-RS-ResourceSetsToReleaseList SEQUENCE (SIZE (1..maxNrofZP-CSI-RS-Sets)) OF ZP-CSI-RS-ResourceSetId OPTIONAL, -- Need N - - -- A list of sets. Each set contains a set-ID and the IDs of one or more ZP-CSI-RS-Resources (the actual resources are defined in the - -- zp-CSI-RS-ResourceToAddModList). The network triggers a set by indicating its set-ID (ZP-CSI-RS-ResourceSetId) in the MAC CE. - -- The resources referenced in these sets are confgiured with resourceType 'semi-persistent'. - -- Corresponds to L1 parameter 'SP-ZP-CSI-RS-Resource-List' (see 38.214, section 5.1.4_Section) - sp-ZP-CSI-RS-ResourceSetsToAddModList SEQUENCE (SIZE (1..maxNrofZP-CSI-RS-Sets)) OF ZP-CSI-RS-ResourceSet OPTIONAL, -- Need N - sp-ZP-CSI-RS-ResourceSetsToReleaseList SEQUENCE (SIZE (1..maxNrofZP-CSI-RS-Sets)) OF ZP-CSI-RS-ResourceSetId OPTIONAL, -- Need N - - ... -} - - - - --- TAG-PDSCH-CONFIG-STOP --- TAG-PDSCH-CONFIGCOMMON-START - -PDSCH-ConfigCommon ::= SEQUENCE { - - -- List of time-domain configurations for timing of DL assignment to DL data - pdsch-AllocationList SEQUENCE (SIZE(1..maxNrofDL-Allocations)) OF PDSCH-TimeDomainResourceAllocation OPTIONAL, -- Need R - - ... -} - --- TAG-PDSCH-CONFIGCOMMON-STOP --- TAG-PDSCH-SERVINGCELLCONFIG-START - -PDSCH-ServingCellConfig ::= SEQUENCE { - -- Enables and configures code-block-group (CBG) based transmission (see 38.213, section 9.1.1) - codeBlockGroupTransmission SetupRelease { PDSCH-CodeBlockGroupTransmission } OPTIONAL, -- Need M - -- Accounts for overhead from CSI-RS, CORESET, etc. If the field is absent, the UE applies value xOh0. - -- Corresponds to L1 parameter 'Xoh-PDSCH' (see 38.214, section 5.1.3.2) - xOverhead ENUMERATED { xOh6, xOh12, xOh18 } OPTIONAL, -- Need S - -- The number of HARQ processes to be used on the PDSCH of a serving cell. n2 corresponds to 2 HARQ processes, n4 to 4 HARQ processes - -- and so on. If the field is absent, the UE uses 8 HARQ processes. - -- Corresponds to L1 parameter 'number-HARQ-process-PDSCH' (see 38.214, section REF) - nrofHARQ-ProcessesForPDSCH ENUMERATED {n2, n4, n6, n10, n12, n16} OPTIONAL, -- Need S - -- The ID of the serving cell (of the same cell group) to use for PUCCH. - -- If the field is absent, the UE sends the HARQ feedback on the PUCCH of the SpCell of this cell group. - pucch-Cell ServCellIndex OPTIONAL , -- Cond SCellAddOnly - ... -} - -PDSCH-CodeBlockGroupTransmission ::= SEQUENCE { - -- Maximum number of code-block-groups (CBGs) per TB. In case of multiple CW the maximum CBG is 4 (see 38.213, section 9.1.1) - maxCodeBlockGroupsPerTransportBlock ENUMERATED {n2, n4, n6, n8}, - -- Indicates whether CBGFI for CBG based (re)transmission in DL is enabled (true). (see 38.212, section 7.3.1.2.2) - codeBlockGroupFlushIndicator BOOLEAN, - ... -} - --- TAG-PDSCH-SERVINGCELLCONFIG-STOP --- TAG-PDSCH-TIMEDOMAINRESOURCEALLOCATION-START - -PDSCH-TimeDomainResourceAllocation ::= SEQUENCE { - -- Corresponds to L1 parameter 'K0' (see 38.214, section FFS_Section) - -- When the field is absent the UE applies the value 0 - k0 INTEGER (1..3) OPTIONAL, -- Need S - -- PDSCH mapping type. Corresponds to L1 parameter 'Mapping-type' (see 38.214, section FFS_Section) - mappingType ENUMERATED {typeA, typeB}, - -- An index into a table/equation in RAN1 specs capturing valid combinations of start symbol and length (jointly encoded) - -- Corresponds to L1 parameter 'Index-start-len' (see 38.214, section FFS_Section) - startSymbolAndLength BIT STRING (SIZE (7)) -} - --- TAG-PDSCH-TIMEDOMAINRESOURCEALLOCATION-STOP --- TAG-PHYS-CELL-ID-START - -PhysCellId ::= INTEGER (0..1007) - --- TAG-PHYS-CELL-ID-STOP --- TAG-PRB-ID-START - -PRB-Id ::= INTEGER (0..maxNrofPhysicalResourceBlocks-1) - --- TAG-PRB-ID-STOP --- TAG-PTRS-DOWNLINKCONFIG-START - -PTRS-DownlinkConfig ::= SEQUENCE { - -- Presence and frequency density of DL PT-RS as a function of Scheduled BW - -- If the field is absent, the UE uses K_PT-RS = 2. - -- Corresponds to L1 parameter 'DL-PTRS-frequency-density-table' (see 38.214, section 5.1) - frequencyDensity SEQUENCE (SIZE (2)) OF INTEGER (1..276) OPTIONAL, -- Need S - -- Presence and time density of DL PT-RS as a function of MCS. The value 29 is only applicable for MCS Table 5.1.3.1-1 (38.214) - -- If the field is absent, the UE uses L_PT-RS = 1. - -- Corresponds to L1 parameter 'DL-PTRS-time-density-table' (see 38.214, section 5.1) - timeDensity SEQUENCE (SIZE (3)) OF INTEGER (0..29) OPTIONAL, -- Need S - -- EPRE ratio between PTRS and PDSCH. Value 0 correspond to the codepoint â€00†in table 4.1-2. Value 1 corresponds to codepoint â€01†- -- If the field is not provided, the UE applies value 0. Corresponds to L1 parameter 'DL-PTRS-EPRE-ratio' (see 38.214, section 4.1) - epre-RatioPort1 INTEGER (0..3) OPTIONAL, -- Need S - -- EPRE ratio between PTRS and PDSCH. Value 0 correspond to the codepoint â€00†in table 4.1-2. Value 1 corresponds to codepoint â€01â€. - -- If the field is not provided, the UE applies value 0. Corresponds to L1 parameter 'DL-PTRS-EPRE-ratio' (see 38.214, section 4.1) - epre-RatioPort2 SEQUENCE (SIZE (1..2)) OF INTEGER (0..3) OPTIONAL, -- Cond TwoPorts - -- Indicates the subcarrier offset for DL PTRS. If the field is absent, the UE applies the value offset00. - -- Corresponds to L1 parameter 'DL-PTRS-RE-offset' (see 38.214, section 5.1.6.3) - resourceElementOffset ENUMERATED { offset01, offset10, offset11 } OPTIONAL, -- Need S - ... -} - --- TAG-PTRS-DOWNLINKCONFIG-STOP --- TAG-PTRS-UPLINKCONFIG-START - -PTRS-UplinkConfig ::= SEQUENCE { - - modeSpecificParameters CHOICE { - -- Configuration of UL PTRS for CP-OFDM - cp-OFDM SEQUENCE { - -- Presence and frequency density of UL PT-RS for CP-OFDM waveform as a function of scheduled BW - -- If the field is absent, the UE uses K_PT-RS = 2. - -- Corresponds to L1 parameter 'UL-PTRS-frequency-density-table' (see 38.214, section 6.1) - frequencyDensity SEQUENCE (SIZE (2)) OF INTEGER (1..276) OPTIONAL, -- Need S - -- Presence and time density of UL PT-RS for CP-OFDM waveform as a function of MCS - -- If the field is absent, the UE uses L_PT-RS = 1. - -- Corresponds to L1 parameter 'UL-PTRS-time-density-table' (see 38.214, section 6.1) - timeDensity SEQUENCE (SIZE (3)) OF INTEGER (0..29) OPTIONAL, -- Need S - -- The maximum number of UL PTRS ports for CP-OFDM. - -- Corresponds to L1 parameter 'UL-PTRS-ports' (see 38.214, section 6.2.3.1) - maxNrofPorts ENUMERATED {n1, n2}, - -- Indicates the subcarrier offset for UL PTRS for CP-OFDM. - -- Corresponds to L1 parameter 'UL-PTRS-RE-offset' (see 38.214, section 6.1) - resourceElementOffset ENUMERATED {offset01, offset10, offset11 } OPTIONAL, -- Need S - -- UL PTRS power boosting factor per PTRS port. Corresponds to L1 parameter 'UL-PTRS-power' (see 38.214, section 6.1, table 6.2.3-5) - ptrs-Power ENUMERATED {p00, p01, p10, p11} - }, - -- Configuration of UL PTRS for DFT-S-OFDM. - dft-S-OFDM SEQUENCE { - -- Sample density of PT-RS for DFT-s-OFDM, pre-DFT, indicating a set of thresholds T={NRBn,n=0,1,2,3,4}, - -- that indicates dependency between presence of PT-RS and scheduled BW and the values of X and K the UE should - -- use depending on the scheduled BW according to the table in 38.214 FFS_Section. - -- Corresponds to L1 parameter 'UL-PTRS-pre-DFT-density' (see 38.214, section 6.1, 6.2.3-3) - sampleDensity SEQUENCE (SIZE (5)) OF INTEGER (1..276), - -- Time density (OFDM symbol level) of PT-RS for DFT-s-OFDM. If the value is absent, the UE applies value d1. - -- Corresponds to L1 parameter 'UL-PTRS-time-density-transform-precoding' (see 38.214, section 6.1) - timeDensity ENUMERATED {d2} OPTIONAL -- Need S - } - } OPTIONAL, -- Cond M - ... -} - --- TAG-PTRS-UPLINKCONFIG-STOP --- TAG-PUCCH-CONFIG-START - -PUCCH-Config ::= SEQUENCE { - -- Lists for adding and releasing PUCCH resource sets (see 38.213, section 9.2) - resourceSetToAddModList SEQUENCE (SIZE (1..maxNrofPUCCH-ResourceSets)) OF PUCCH-ResourceSet OPTIONAL, -- Need N - resourceSetToReleaseList SEQUENCE (SIZE (1..maxNrofPUCCH-ResourceSets)) OF PUCCH-ResourceSetId OPTIONAL, -- Need N - - -- Lists for adding and releasing PUCCH resources applicable for the UL BWP and serving cell in which the PUCCH-Config - -- is defined. The resources defined herein are referred to from other parts of the configuration to determine which - -- resource the UE shall use for which report. - resourceToAddModList SEQUENCE (SIZE (1..maxNrofPUCCH-Resources)) OF PUCCH-Resource OPTIONAL, -- Need N - resourceToReleaseList SEQUENCE (SIZE (1..maxNrofPUCCH-Resources)) OF PUCCH-ResourceId OPTIONAL, -- Need N - - -- Parameters that are common for all PUCCH resources of format 1 - format1 SetupRelease { PUCCH-FormatConfig } OPTIONAL, -- Need M - -- Parameters that are common for all PUCCH resources of format 2 - format2 SetupRelease { PUCCH-FormatConfig } OPTIONAL, -- Need M - -- Parameters that are common for all PUCCH resources of format 3 - format3 SetupRelease { PUCCH-FormatConfig } OPTIONAL, -- Need M - -- Parameters that are common for all PUCCH resources of format 4 - format4 SetupRelease { PUCCH-FormatConfig } OPTIONAL, -- Need M - - schedulingRequestResourceToAddModList SEQUENCE (SIZE (1..maxNrofSR-Resources)) OF SchedulingRequestResourceConfig OPTIONAL, -- Need M - schedulingRequestResourceToReleaseList SEQUENCE (SIZE (1..maxNrofSR-Resources)) OF SchedulingRequestResourceId OPTIONAL, -- Need M - - multi-CSI-PUCCH-ResourceList SEQUENCE (SIZE (1..2)) OF PUCCH-ResourceId OPTIONAL,-- Need M - - -- List of timiing for given PDSCH to the DL ACK. In this version of the specification only the values [0..8] are applicable. - -- Corresponds to L1 parameter 'Slot-timing-value-K1' (see 38.213, section FFS_Section) - dl-DataToUL-ACK SEQUENCE (SIZE (8)) OF INTEGER (0..15) OPTIONAL, -- Need M - - -- Configuration of the spatial relation between a reference RS and PUCCH. Reference RS can be SSB/CSI-RS/SRS. - -- If the list has more than one element, MAC-CE selects a single element (see 38.321, section FFS_Section). - -- Corresponds to L1 parameter 'PUCCH-SpatialRelationInfo' (see 38.213, section FFS_Section) - spatialRelationInfoToAddModList SEQUENCE (SIZE (1..maxNrofSpatialRelationInfos)) OF PUCCH-SpatialRelationInfo OPTIONAL, -- Need N - spatialRelationInfoToReleaseList SEQUENCE (SIZE (1..maxNrofSpatialRelationInfos)) OF PUCCH-SpatialRelationInfoId OPTIONAL, -- Need N - - pucch-PowerControl PUCCH-PowerControl OPTIONAL, -- Need M - ... -} - -PUCCH-FormatConfig ::= SEQUENCE { - -- Enabling inter-slot frequency hopping when PUCCH Format 1, 3 or 4 is repetead over multiple slots. - -- The field is not applicable for format 2. - interslotFrequencyHopping ENUMERATED {enabled} OPTIONAL, -- Need R - -- Enabling 2 DMRS symbols per hop of a PUCCH Format 3 or 4 if both hops are more than X symbols when FH is enabled (X=4). - -- Enabling 4 DMRS sybmols for a PUCCH Format 3 or 4 with more than 2X+1 symbols when FH is disabled (X=4). - -- Corresponds to L1 parameter 'PUCCH-F3-F4-additional-DMRS' (see 38.213, section 9.2.1) - -- The field is not applicable for format 1 and 2. - additionalDMRS ENUMERATED {true} OPTIONAL, -- Need R - -- Max coding rate to determine how to feedback UCI on PUCCH for format 2, 3 or 4 - -- Corresponds to L1 parameter 'PUCCH-F2-maximum-coderate', 'PUCCH-F3-maximum-coderate' and 'PUCCH-F4-maximum-coderate' - -- (see 38.213, section 9.2.5) - -- The field is not applicable for format 1. - maxCodeRate PUCCH-MaxCodeRate OPTIONAL, -- Need R - -- Number of slots with the same PUCCH F1, F3 or F4. When the field is absent the UE applies the value n1. - -- Corresponds to L1 parameter 'PUCCH-F1-number-of-slots', 'PUCCH-F3-number-of-slots' and 'PUCCH-F4-number-of-slots' - -- (see 38.213, section 9.2.6) - -- The field is not applicable for format 2. - nrofSlots ENUMERATED {n2,n4,n8} OPTIONAL, -- Need S - -- Enabling pi/2 BPSK for UCI symbols instead of QPSK for PUCCH. - -- Corresponds to L1 parameter 'PUCCH-PF3-PF4-pi/2PBSK' (see 38.213, section 9.2.5) - -- The field is not applicable for format 1 and 2. - pi2PBSK ENUMERATED {enabled} OPTIONAL, -- Need R - -- Enabling simultaneous transmission of CSI and HARQ-ACK feedback with or without SR with PUCCH Format 2, 3 or 4 - -- Corresponds to L1 parameter 'PUCCH-F2-Simultaneous-HARQ-ACK-CSI', 'PUCCH-F3-Simultaneous-HARQ-ACK-CSI' and - -- 'PUCCH-F4-Simultaneous-HARQ-ACK-CSI' (see 38.213, section 9.2.5) - -- When the field is absent the UE applies the value OFF - -- The field is not applicable for format 1. - simultaneousHARQ-ACK-CSI ENUMERATED {true} OPTIONAL -- Need R -} - -PUCCH-MaxCodeRate ::= ENUMERATED {zeroDot08, zeroDot15, zeroDot25, zeroDot35, zeroDot45, zeroDot60, zeroDot80} - -PUCCH-SpatialRelationInfo ::= SEQUENCE { - pucch-SpatialRelationInfoId PUCCH-SpatialRelationInfoId, - referenceSignal CHOICE { - ssb-Index SSB-Index, - csi-RS-Index NZP-CSI-RS-ResourceId, - srs SRS-ResourceId - }, - pucch-PathlossReferenceRS-Id PUCCH-PathlossReferenceRS-Id, - p0-PUCCH-Id P0-PUCCH-Id, - closedLoopIndex ENUMERATED { i0, i1 } -} - -PUCCH-SpatialRelationInfoId ::= INTEGER (1..maxNrofSpatialRelationInfos) - --- A set with one or more PUCCH resources -PUCCH-ResourceSet ::= SEQUENCE { - pucch-ResourceSetId PUCCH-ResourceSetId, - - -- PUCCH resources of format0 and format1 are only allowed in the first PUCCH reosurce set, - -- i.e., in a PUCCH-ResourceSet with pucch-ResourceSetId = 0. This set may contain between 8 and 32 resources. - -- PUCCH resources of format2, format3 and format4 are only allowed in a PUCCH-ReosurceSet with pucch-ResourceSetId > 0. If present, these sets must contain 8 resources each. - -- The UE chooses a PUCCH-Resource from this list based on the 3-bit PUCCH resource indicator field in DCI as - -- speciied in 38.213, FFS_section. - -- Note that this list contains only a list of resource IDs. The actual resources are configured in PUCCH-Config. - resources SEQUENCE (SIZE (8..maxNrofPUCCH-ResourcesPerSet)) OF PUCCH-ResourceId, - - -- Maximum number of payload bits minus 1 that the UE may transmit using this PUCCH resource set. In a PUCCH occurrence, the UE - -- chooses the first of its PUCCH-ResourceSet which supports the number of bits that the UE wants to transmit. - -- The field is not present in the first set (Set0) since the maximum Size of Set0 is specified to be 3 bit. - -- The field is not present in the last configured set since the UE derives its maximum payload size as specified in 38.213. - -- This field can take integer values that are multiples of 4. Corresponds to L1 parameter 'N_2' or 'N_3' (see 38.213, section 9.2) - maxPayloadMinus1 INTEGER (4..256) OPTIONAL -- Need R -} - -PUCCH-ResourceSetId ::= INTEGER (0..maxNrofPUCCH-ResourceSets-1) - -PUCCH-Resource ::= SEQUENCE { - pucch-ResourceId PUCCH-ResourceId, - - startingPRB PRB-Id, - -- Corresponds to the L1 parameter 'PUCCH-frequency-hopping' (see 38.213, section 9.2) - intraSlotFrequencyHopping ENUMERATED { enabled } OPTIONAL, -- Need R - -- Index of starting PRB for second hop of PUCCH in case of FH. This value is appliable for intra-slot frequency hopping. - -- Corresponds to L1 parameter 'PUCCH-2nd-hop-PRB' (see 38.213, section 9.2) - secondHopPRB PRB-Id OPTIONAL, -- Need R - - -- Selection of the PUCCH format and format-specific parameters - format CHOICE { - format0 PUCCH-format0, -- Cond InFirstSetOnly - format1 PUCCH-format1, -- Cond InFirstSetOnly - format2 PUCCH-format2, -- Cond NotInFirstSet - format3 PUCCH-format3, -- Cond NotInFirstSet - format4 PUCCH-format4 -- Cond NotInFirstSet - } -} - -PUCCH-ResourceId ::= INTEGER (0..maxNrofPUCCH-Resources-1) - - --- A PUCCH Format 0 resource configuration (see 38.213, section 9.2) --- Corresponds to L1 parameter 'PUCCH-format0' (see 38.213, section 9.2.1) -PUCCH-format0 ::= SEQUENCE { - initialCyclicShift INTEGER(0..11), - nrofSymbols INTEGER (1..2), - startingSymbolIndex INTEGER(0..13) -} - --- A PUCCH Format 1 resource configuration (see 38.213, section 9.2) --- Corresponds to L1 parameter 'PUCCH-format1' (see 38.213, section 9.2.1) -PUCCH-format1 ::= SEQUENCE { - initialCyclicShift INTEGER(0..11), - nrofSymbols INTEGER (4..14), - startingSymbolIndex INTEGER(0..10), - timeDomainOCC INTEGER(0..6) -} - --- A PUCCH Format 2 resource configuration (see 38.213, section 9.2) --- Corresponds to L1 parameter 'PUCCH-format2onfig' (see 38.213, section 9.2.1) -PUCCH-format2 ::= SEQUENCE { - nrofPRBs INTEGER (1..16), - nrofSymbols INTEGER (1..2), - startingSymbolIndex INTEGER(0..13) -} - --- A PUCCH Format 3 resource configuration(see 38.213, section 9.2) --- Corresponds to L1 parameter 'PUCCH-format3' (see 38.213, section 9.2.1) -PUCCH-format3 ::= SEQUENCE { - -- The supported values are 1,2,3,4,5,6,8,9,10,12,15 and 16 - nrofPRBs INTEGER (1..16), - nrofSymbols INTEGER (4..14), - startingSymbolIndex INTEGER(0..10) -} - --- A PUCCH Format 4 resource configuration (see 38.213, section 9.2) --- Corresponds to L1 parameter 'PUCCH-format4' (see 38.213, section 9.2.1) -PUCCH-format4 ::= SEQUENCE { - nrofSymbols INTEGER (4..14), - occ-Length ENUMERATED {n2,n4}, - occ-Index ENUMERATED {n0,n1,n2,n3}, - startingSymbolIndex INTEGER(0..10) -} - --- TAG-PUCCH-CONFIG-STOP --- TAG-PUCCH-CONFIGCOMMON-START - -PUCCH-ConfigCommon ::= SEQUENCE { - -- An entry into a 16-row table where each row configures a set of cell-specific PUCCH resources/parameters. The UE uses - -- those PUCCH resources during initial access on the initial uplink BWP. Once the network provides a dedicated PUCCH-Config - -- for that bandwidth part the UE applies that one instead of the one provided in this field. - -- Corresponds to L1 parameter 'PUCCH-resource-common' (see 38.213, section 9.2) - pucch-ResourceCommon BIT STRING (SIZE (4)) OPTIONAL, -- Need R - - -- Configuration of group- and sequence hopping for all the PUCCH formats 0, 1, 3 and 4. "neither" implies neither group - -- or sequence hopping is enabled. "enable" enables group hopping and disables sequence hopping. "disable"†disables group - -- hopping and enables sequence hopping. Corresponds to L1 parameter 'PUCCH-GroupHopping' (see 38.211, section 6.4.1.3) - pucch-GroupHopping ENUMERATED { neither, enable, disable }, - -- Cell-Specific scrambling ID for group hoppping and sequence hopping if enabled. - -- Corresponds to L1 parameter 'HoppingID' (see 38.211, section 6.3.2.2) - hoppingId BIT STRING (SIZE (10)) OPTIONAL, -- Need R - - -- Power control parameter P0 for PUCCH transmissions. Value in dBm. Only even values (step size 2) allowed. - -- Corresponds to L1 parameter 'p0-nominal-pucch' (see 38.213, section 7.2) - p0-nominal INTEGER (-202..24) OPTIONAL, -- Need R - - ... -} - --- TAG-PUCCH-CONFIGCOMMON-STOP --- TAG-PUCCH-POWERCONTROL-START -PUCCH-PowerControl ::= SEQUENCE { - - -- deltaF for PUCCH format 0 with 1dB step size (see 38.213, section 7.2) - deltaF-PUCCH-f0 INTEGER (-16..15) OPTIONAL, -- Need R - -- deltaF for PUCCH format 1 with 1dB step size (see 38.213, section 7.2) - deltaF-PUCCH-f1 INTEGER (-16..15) OPTIONAL, -- Need R - -- deltaF for PUCCH format 2 with 1dB step size (see 38.213, section 7.2) - deltaF-PUCCH-f2 INTEGER (-16..15) OPTIONAL, -- Need R - -- deltaF for PUCCH format 3 with 1dB step size (see 38.213, section 7.2) - deltaF-PUCCH-f3 INTEGER (-16..15) OPTIONAL, -- Need R - -- deltaF for PUCCH format 4 with 1dB step size (see 38.213, section 7.2) - deltaF-PUCCH-f4 INTEGER (-16..15) OPTIONAL, -- Need R - - -- A set with dedicated P0 values for PUCCH, i.e., {P01, P02,... }. Corresponds to L1 parameter 'p0-pucch-set' (see 38.213, section 7.2) - p0-Set SEQUENCE (SIZE (1..maxNrofPUCCH-P0-PerSet)) OF P0-PUCCH OPTIONAL, -- Need M - - -- A set of Reference Signals (e.g. a CSI-RS config or a SSblock) to be used for PUCCH pathloss estimation. - -- Up to maxNrofPUCCH-PathlossReference-RSs may be configured - -- FFS_CHECK: Is it possible not to configure it at all? What does the UE use then? Any SSB? - -- Corresponds to L1 parameter 'pucch-pathlossReference-rs-config' (see 38.213, section 7.2) - pathlossReferenceRSs SEQUENCE (SIZE (1..maxNrofPUCCH-PathlossReferenceRSs)) OF PUCCH-PathlossReferenceRS OPTIONAL, -- Need M - -- Number of PUCCH power control adjustment states maintained by the UE (i.e., g(i)). If the field is present (n2) the UE maintains - -- two power control states (i.e., g(i,0) and g(i,1)). Otherwise, it applies one (i.e., g(i,0)). - -- Corresponds to L1 parameter 'num-pucch-pcadjustment-states' (see 38.213, section 7.2) - twoPUCCH-PC-AdjustmentStates ENUMERATED {twoStates} OPTIONAL, -- Need R - ... -} - --- P0 value for PUCCH. Corresponds to L1 parameter 'p0-pucch' (see 3,213, section 7.2) -P0-PUCCH ::= SEQUENCE { - p0-PUCCH-Id P0-PUCCH-Id, - -- P0 value for PUCCH with 1dB step size. - p0-PUCCH-Value INTEGER (-16..15) -} - -P0-PUCCH-Id ::= INTEGER (1..8) - --- A reference signal (RS) configured as pathloss reference signal for PUCCH power control --- Corresponds to L1 parameter 'pucch-pathlossReference-rs' (see 38.213, section 7.2) -PUCCH-PathlossReferenceRS ::= SEQUENCE { - pucch-PathlossReferenceRS-Id PUCCH-PathlossReferenceRS-Id, - referenceSignal CHOICE { - ssb-Index SSB-Index, - csi-RS-Index NZP-CSI-RS-ResourceId - } -} - --- ID for a referemce signal (RS) configured as PUCCH pathloss reference --- Corresponds to L1 parameter 'pucch-pathlossreference-index' (see 38.213, section 7.2) --- FFS_CHECK: Is this ID used anywhere except inside the PUCCH-PathlossReference-RS itself? If not, remove. -PUCCH-PathlossReferenceRS-Id ::= INTEGER (0..maxNrofPUCCH-PathlossReferenceRSs-1) - --- TAG-PUCCH-POWERCONTROL-STOP --- TAG-PUCCH-TPC-COMMANDCONFIG-START - -PUCCH-TPC-CommandConfig ::= SEQUENCE { - -- An index determining the position of the first bit of TPC command (applicable to the SpCell) inside the DCI format 2-2 payload. - tpc-IndexPCell INTEGER (1..15) OPTIONAL, -- Cond PUCCH-SCell - -- An index determining the position of the first bit of TPC command (applicable to the PUCCH-SCell) inside the DCI format 2-2 payload. - tpc-IndexPUCCH-SCell INTEGER (1..15) OPTIONAL, -- Cond PUCCH-SCellOnly - ... -} - --- TAG-PUCCH-TPC-COMMANDCONFIG-STOP --- TAG-PUSCH-CONFIG-START - -PUSCH-Config ::= SEQUENCE { - -- Identifer used to initalite data scrambling (c_init) for both PUSCH. - -- Corresponds to L1 parameter 'Data-scrambling-Identity' (see 38,214, section FFS_Section) - dataScramblingIdentityPUSCH INTEGER (0..1007) OPTIONAL, -- Need M - -- Whether UE uses codebook based or non-codebook based transmission. Corresponds to L1 parameter 'ulTxConfig' (see 38.214, section 6.1.1) - txConfig ENUMERATED {codebook, nonCodebook}, - - -- DMRS configuration for PUSCH transmissions using PUSCH mapping type A (chosen dynamically via PUSCH-TimeDomainResourceAllocation). - dmrs-UplinkForPUSCH-MappingTypeA SetupRelease { DMRS-UplinkConfig } OPTIONAL, -- Need M - -- DMRS configuration for PUSCH transmissions using PUSCH mapping type B (chosen dynamically via PUSCH-TimeDomainResourceAllocation) - dmrs-UplinkForPUSCH-MappingTypeB SetupRelease { DMRS-UplinkConfig } OPTIONAL, -- Need M - - pusch-PowerControl PUSCH-PowerControl OPTIONAL, -- Need M - -- Configured one of two supported frequency hopping mode. If not configured frequency hopping is not configured - -- Corresponds to L1 parameter 'Frequency-hopping-PUSCH' (see 38.214, section 6) - -- When the field is absent the UE applies the value Not configured - frequencyHopping ENUMERATED {mode1, mode2} OPTIONAL, -- Need S - -- Set of frequency hopping offsets used when frequency hopping is enabled for granted transmission (not msg3) and type 2 - -- Corresponds to L1 parameter 'Frequency-hopping-offsets-set' (see 38.214, section 6.3) - frequencyHoppingOffsetLists SEQUENCE (SIZE (1..4)) OF INTEGER (1.. maxNrofPhysicalResourceBlocks-1) OPTIONAL, -- Need M - -- Configuration of resource allocation type 0 and resource allocation type 1 for non-fallback DCI - -- Corresponds to L1 parameter 'Resouce-allocation-config' (see 38.214, section 6.1.2) - resourceAllocation ENUMERATED { resourceAllocationType0, resourceAllocationType1, dynamicSwitch}, - - -- List of time domain allocations for timing of UL assignment to UL data. If configured, the values provided herein - -- override the values received in corresponding PUSCH-ConfigCommon. - pusch-AllocationList SEQUENCE (SIZE(1..maxNrofUL-Allocations)) OF PUSCH-TimeDomainResourceAllocation OPTIONAL, -- Need R, - -- Number of repetitions for data. Corresponds to L1 parameter 'aggregation-factor-UL' (see 38.214, section FFS_Section) - -- When the field is absent the UE applies the value 1. - pusch-AggregationFactor ENUMERATED { n2, n4, n8 } OPTIONAL, -- Need S - - -- Indicates which MCS table the UE shall use for PUSCH without transform precoder - -- Corresponds to L1 parameter 'MCS-Table-PUSCH' (see 38.214, section 6.1.4) - -- When the field is absent the UE applies the value 64QAM - mcs-Table ENUMERATED {qam256} OPTIONAL, -- Need S - -- Indicates which MCS table the UE shall use for PUSCH with transform precoding - -- Corresponds to L1 parameter 'MCS-Table-PUSCH-transform-precoding' (see 38.214, section 6.1.4) - -- When the field is absent the UE applies the value 64QAM - mcs-TableTransformPrecoder ENUMERATED { qam256} OPTIONAL, -- Need S - -- The UE specific selection of transformer precoder for PUSCH. When the field is absent the UE applies the value msg3-tp. - -- Corresponds to L1 parameter 'PUSCH-tp' (see 38.211, section 6.3.1.4) - transformPrecoder ENUMERATED {enabled, disabled} OPTIONAL, -- Need S - -- Subset of PMIs addressed by TPMI, where PMIs are those supported by UEs with maximum coherence capabilities - -- Corresponds to L1 parameter 'ULCodebookSubset' (see 38.211, section 6.3.1.5) - codebookSubset ENUMERATED {fullyAndPartialAndNonCoherent, partialAndNonCoherent, nonCoherent}, - -- Subset of PMIs addressed by TRIs from 1 to ULmaxRank. Corresponds to L1 parameter 'ULmaxRank' (see 38.211, section 6.3.1.5) - maxRank INTEGER (1..4), - - -- Selection between config 1 and config 2 for RBG size for PUSCH. When the field is absent the UE applies the value config1. - -- Corresponds to L1 parameter 'RBG-size-PUSCH' (see 38.214, section 6.1.2.2.1) - rbg-Size ENUMERATED { config2} OPTIONAL, -- Need S - - -- Selection between and configuration of dynamic and semi-static beta-offset. - -- If the field is absent or released, the UE applies the value 'semiStatic' and the BetaOffsets according to - -- FFS [BetaOffsets and/or section 9.x.x). - -- Corresponds to L1 parameter 'UCI-on-PUSCH' (see 38.213, section 9.3) - uci-OnPUSCH SetupRelease { UCI-OnPUSCH} OPTIONAL, -- Need M - -- Interleaving unit configurable between 2 and 4 PRBs - -- Corresponds to L1 parameter 'VRB-to-PRB-interleaver' (see 38.211, section 6.3.1.6) - vrb-ToPRB-Interleaver ENUMERATED {n2, n4}, - ... -} - -UCI-OnPUSCH ::= SEQUENCE { - betaOffsets CHOICE { - dynamic SEQUENCE (SIZE (4)) OF BetaOffsets, - semiStatic BetaOffsets - } OPTIONAL, -- Need M - -- Indicates a scaling factor to limit the number of resource elements assigned to UCI on PUSCH. - -- Value f0p5 corresponds to 0.5, value f0p65 corresponds to 0.65, and so on. - -- Corresponds to L1 parameter 'uci-on-pusch-scaling' (see 38.212, section 6.3) - scaling ENUMERATED { f0p5, f0p65, f0p8, f1 } -} - --- TAG-PUSCH-CONFIG-STOP --- TAG-PUSCH-CONFIGCOMMON-START - -PUSCH-ConfigCommon ::= SEQUENCE { - -- Sequence-group hopping can be enabled or disabled by means of this cell-specific parameter. - -- Corresponds to L1 parameter 'Group-hopping-enabled-Transform-precoding' (see 38.211, section FFS_Section) - -- This field is Cell specific - groupHoppingEnabledTransformPrecoding ENUMERATED {enabled} OPTIONAL, -- Need R - - -- List of time domain allocations for timing of UL assignment to UL data - pusch-AllocationList SEQUENCE (SIZE(1..maxNrofUL-Allocations)) OF PUSCH-TimeDomainResourceAllocation OPTIONAL, -- Need R - - -- ------------------------ - -- Power control parameters - - -- Power offset between msg3 and RACH preamble transmission in steps of 1dB. - -- Corresponds to L1 parameter 'Delta-preamble-msg3' (see 38.213, section 7.1) - msg3-DeltaPreamble INTEGER (-1..6) OPTIONAL, -- Need R - - -- P0 value for PUSCH with grant (except msg3). Value in dBm. Only even values (step size 2) allowed. - -- Corresponds to L1 parameter 'p0-nominal-pusch-withgrant' (see 38.213, section 7.1) - -- This field is cell specific - p0-NominalWithGrant INTEGER (-202..24) OPTIONAL, -- Need R - ... -} - --- TAG-PUSCH-CONFIGCOMMON-STOP --- TAG-PUSCH-POWERCONTROL-START - -PUSCH-PowerControl ::= SEQUENCE { - - -- If enabled, UE applies TPC commands via accumulation. If not enabled, UE applies the TPC command without accumulation. - -- If absent, TPC accumulation is enabled. Corresponds to L1 parameter 'Accumulation-enabled' (see 38.213, section 7.1) - tpc-Accumulation ENUMERATED { disabled } OPTIONAL, -- Need R - - -- Dedicated alpha value for msg3 PUSCH. Corresponds to L1 parameter 'alpha-ue-pusch-msg3' (see 38.213, section 7.1) - -- When the field is absent the UE applies the value 1. - msg3-Alpha Alpha OPTIONAL, -- Need S - - -- P0 value for UL grant-free/SPS based PUSCH. Value in dBm. Only even values (step size 2) allowed. - -- Corresponds to L1 parameter 'p0-nominal-pusch-withoutgrant' (see 38.213, section 7.1) - p0-NominalWithoutGrant INTEGER (-202..24) OPTIONAL, -- Need M, - -- configuration {p0-pusch,alpha} sets for PUSCH (except msg3), i.e., { {p0,alpha,index1}, {p0,alpha,index2},...}. - -- Corresponds to L1 parameter 'p0-push-alpha-setconfig' (see 38,213, section 7.1) - p0-AlphaSets SEQUENCE (SIZE (1..maxNrofP0-PUSCH-AlphaSets)) OF P0-PUSCH-AlphaSet OPTIONAL, -- Need M, - - -- A set of Reference Signals (e.g. a CSI-RS config or a SSblock) to be used for PUSCH path loss estimation. - -- Up to maxNrofPUSCH-PathlossReferenceRSs may be configured when 'PUSCH beam indication' is present (FFS: in DCI???). - -- Otherwise, there may be only one entry. - -- Corresponds to L1 parameter 'pusch-pathlossReference-rs-config' (see 38.213, section 7.1) - pathlossReferenceRSToAddModList SEQUENCE (SIZE (1..maxNrofPUSCH-PathlossReferenceRSs)) OF PUSCH-PathlossReferenceRS - OPTIONAL, -- Need N - pathlossReferenceRSToReleaseList SEQUENCE (SIZE (1..maxNrofPUSCH-PathlossReferenceRSs)) OF PUSCH-PathlossReferenceRS-Id - OPTIONAL, -- Need N - - -- Number of PUSCH power control adjustment states maintained by the UE (i.e., fc(i)). If the field is present (n2) the UE maintains - -- two power control states (i.e., fc(i,1) and fc(i,2)). Otherwise, it applies one (i.e., fc(i,1)). - -- Corresponds to L1 parameter 'num-pusch-pcadjustment-states' (see 38.213, section 7.1) - twoPUSCH-PC-AdjustmentStates ENUMERATED {twoStates} OPTIONAL, -- Need S - - -- Indicates whether to apply dela MCS. When the field is absent, the UE applies Ks = 0 in delta_TFC formula for PUSCH. - -- Corresponds to L1 parameter 'deltaMCS-Enabled' (see 38.213, section 7.1) - deltaMCS ENUMERATED {enabled} OPTIONAL, -- Need S - - -- A list of SRI-PUSCH-PowerControl elements among which one is selected by the SRI field in DCI. - -- Corresponds to L1 parameter 'SRI-PUSCHPowerControl-mapping' (see 38.213, section 7.1) - sri-PUSCH-MappingToAddModList SEQUENCE (SIZE (1..maxNrofSRI-PUSCH-Mappings)) OF SRI-PUSCH-PowerControl OPTIONAL, -- Need M - sri-PUSCH-MappingToReleaseList SEQUENCE (SIZE (1..maxNrofSRI-PUSCH-Mappings)) OF SRI-PUSCH-PowerControlId OPTIONAL -- Need M -} - --- A set of p0-pusch and alpha used for PUSCH with grant. 'PUSCH beam indication' (if present) gives the index of the set to --- be used for a particular PUSCH transmission. --- FFS_CHECK: Is the â€PUSCH beam indication†in DCI which schedules the PUSCH? If so, clarify in field description --- Corresponds to L1 parameter 'p0-pusch-alpha-set' (see 38.213, section 7.1) -P0-PUSCH-AlphaSet ::= SEQUENCE { - p0-PUSCH-AlphaSetId P0-PUSCH-AlphaSetId, - -- P0 value for PUSCH with grant (except msg3) in steps of 1dB. Corresponds to L1 parameter 'p0-pusch' (see 38,213, section 7.1) - p0 INTEGER (-16..15) OPTIONAL, - -- alpha value for PUSCH with grant (except msg3) (see 38.213, section 7.1) - -- When the field is absent the UE applies the value 1 - alpha Alpha OPTIONAL -- Need S -} - --- ID for a P0-PUSCH-AlphaSet. Corresponds to L1 parameter 'p0alphasetindex' (see 38.213, section 7.1) -P0-PUSCH-AlphaSetId ::= INTEGER (0..maxNrofP0-PUSCH-AlphaSets-1) - --- A reference signal (RS) configured as pathloss reference signal for PUSCH power control --- Corresponds to L1 parameter 'pusch-pathlossReference-rs' (see 38.213, section 7.1) -PUSCH-PathlossReferenceRS ::= SEQUENCE { - pusch-PathlossReferenceRS-Id PUSCH-PathlossReferenceRS-Id, - referenceSignal CHOICE { - ssb-Index SSB-Index, - csi-RS-Index NZP-CSI-RS-ResourceId - } -} - --- ID for a referemce signal (RS) configured as PUSCH pathloss reference --- Corresponds to L1 parameter 'pathlossreference-index' (see 38.213, section 7.1) --- FFS_CHECK: Is this ID used anywhere except inside the PUSCH-PathlossReference-RS itself? -PUSCH-PathlossReferenceRS-Id ::= INTEGER (0..maxNrofPUSCH-PathlossReferenceRSs-1) - - --- A set of PUSCH power control parameters associated with one SRS-ResourceIndex (SRI) -SRI-PUSCH-PowerControl ::= SEQUENCE { - -- The ID of this SRI-PUSCH-PowerControl configuration. It is used as the codepoint (payload) in the SRI DCI field. - sri-PUSCH-PowerControlId SRI-PUSCH-PowerControlId, - -- The ID of PUSCH-PathlossReferenceRS as configured in the pathlossReferenceRSToAddModList in PUSCH-PowerControl. - sri-PUSCH-PathlossReferenceRS-Id PUSCH-PathlossReferenceRS-Id, - -- The ID of a P0-PUSCH-AlphaSet as configured in p0-AlphaSets in PUSCH-PowerControl. - sri-P0-PUSCH-AlphaSetId P0-PUSCH-AlphaSetId, - -- The index of the closed power control loop associated with this SRI-PUSCH-PowerControl - sri-PUSCH-ClosedLoopIndex ENUMERATED { i0, i1 } -} - -SRI-PUSCH-PowerControlId ::= INTEGER (0..maxNrofSRI-PUSCH-Mappings-1) - --- A set of beta-offset values -BetaOffsets ::= SEQUENCE { - -- Up to 2 bits HARQ-ACK. Corresponds to L1 parameter 'betaOffset-ACK-Index-1' (see 38.213, section 9.3) - -- When the field is absent the UE applies the value 11 - betaOffsetACK-Index1 INTEGER(0..31) OPTIONAL, -- Need S - -- Up to 11 bits HARQ-ACK. Corresponds to L1 parameter 'betaOffset-ACK-Index-2' (see 38.213, section 9.3) - -- When the field is absent the UE applies the value 11 - betaOffsetACK-Index2 INTEGER(0..31) OPTIONAL, -- Need S - -- Above 11 bits HARQ-ACK. Corresponds to L1 parameter 'betaOffset-ACK-Index-3' (see 38.213, section 9.3) - -- When the field is absent the UE applies the value 11 - betaOffsetACK-Index3 INTEGER(0..31) OPTIONAL, -- Need S - -- Up to 11 bits of CSI part 1 bits. Corresponds to L1 parameter 'betaOffset-CSI-part-1-Index-1' (see 38.213, section 9.3) - -- When the field is absent the UE applies the value 13 - betaOffsetCSI-Part1-Index1 INTEGER(0..31) OPTIONAL, -- Need S - -- Above 11 bits of CSI part 1 bits. Corresponds to L1 parameter 'betaOffset-CSI-part-1-Index-2' (see 38.213, section 9.3) - -- When the field is absent the UE applies the value 13 - betaOffsetCSI-Part1-Index2 INTEGER(0..31) OPTIONAL, -- Need S - -- Up to 11 bits of CSI part 2 bits. Corresponds to L1 parameter 'betaOffset-CSI-part-2-Index-1' (see 38.213, section 9.3) - -- When the field is absent the UE applies the value 13 - betaOffsetCSI-Part2-Index1 INTEGER(0..31) OPTIONAL, -- Need S - -- Above 11 bits of CSI part 2 bits. Corresponds to L1 parameter 'betaOffset-CSI-part-2-Index-2' (see 38.213, section 9.3) - -- When the field is absent the UE applies the value 13 - betaOffsetCSI-Part2-Index2 INTEGER(0..31) OPTIONAL -- Need S -} - --- TAG-PUSCH-POWERCONTROL-STOP --- TAG-PUSCH-SERVINGCELLCONFIG-START - -PUSCH-ServingCellConfig ::= SEQUENCE { - -- Enables and configures code-block-group (CBG) based transmission (see 38.214, section FFS_Section) - codeBlockGroupTransmission SetupRelease { PUSCH-CodeBlockGroupGransmission } OPTIONAL, -- Need M - -- Enables LBRM (Limited buffer rate-matching). When the field is absent the UE applies FBRM (Full buffer rate-matchingLBRM). - -- Corresponds to L1 parameter 'LBRM-FBRM-selection' (see 38.212, section 5.4.2) - rateMatching ENUMERATED {limitedBufferRM} OPTIONAL, -- Need S - -- Accounts for overhead from CSI-RS, CORESET, etc. If the field is absent, the UE applies the value 'xoh0'. - -- Corresponds to L1 parameter 'Xoh-PUSCH' (see 38.214, section 5.1.3.2) - xOverhead ENUMERATED {xoh6, xoh12, xoh18} OPTIONAL, -- Need S - ... -} - -PUSCH-CodeBlockGroupGransmission ::= SEQUENCE { - -- Maximum number of code-block-groups (CBGs) per TB (see 38.xxx, section x.x.x, FFS_Ref) - -- For 2 codewords, only the values { n2, n4 } are valid. - maxCodeBlockGroupsPerTransportBlock ENUMERATED {n2, n4, n6, n8}, - ... -} - --- TAG-PUSCH-SERVINGCELLCONFIG-STOP --- TAG-PUSCH-TIMEDOMAINRESOURCEALLOCATION-START - -PUSCH-TimeDomainResourceAllocation ::= SEQUENCE { - -- Corresponds to L1 parameter 'K2' (see 38.214, section FFS_Section) - -- When the field is absent the UE applies the value 01 when PUSCH SCS is 15/30KHz; 2 when PUSCH SCS is 60KHz and 3 when PUSCH SCS is 120KHz. - k2 INTEGER (0..7) OPTIONAL, -- Need S - -- Mapping type. Corresponds to L1 parameter 'Mapping-type' (see 38.214, section FFS_Section) - mappingType ENUMERATED {typeA, typeB}, - -- An index into a table/equation in RAN1 specs capturing valid combinations of start symbol and length (jointly encoded) - -- Corresponds to L1 parameter 'Index-start-len' (see 38.214, section FFS_Section) - startSymbolAndLength BIT STRING (SIZE (7)) -} - --- TAG-PUSCH-TIMEDOMAINRESOURCEALLOCATION-STOP --- TAG-PUSCH-TPC-COMMANDCONFIG-START - -PUSCH-TPC-CommandConfig ::= SEQUENCE { - -- An index determining the position of the first bit of TPC command inside the DCI format 2-2 payload. - tpc-Index INTEGER (1..15) OPTIONAL, -- Cond SUL - -- An index determining the position of the first bit of TPC command inside the DCI format 2-2 payload. - tpc-IndexSUL INTEGER (1..15) OPTIONAL, -- Cond SUL-Only - -- The serving cell to which the acquired power control commands are applicable. If the value is absent, the UE applies the - -- TPC commands to the serving cell on which the command has been received. - targetCell ServCellIndex OPTIONAL, -- Need S - ... -} - --- TAG-PUSCH-TPC-COMMANDCONFIG-STOP - -Q-OffsetRange ::= ENUMERATED { - dB-24, dB-22, dB-20, dB-18, dB-16, dB-14, - dB-12, dB-10, dB-8, dB-6, dB-5, dB-4, dB-3, - dB-2, dB-1, dB0, dB1, dB2, dB3, dB4, dB5, - dB6, dB8, dB10, dB12, dB14, dB16, dB18, - dB20, dB22, dB24} - --- TAG-QUANTITY-CONFIG-START - - -QuantityConfig ::= SEQUENCE { - quantityConfigNR-List QuantityConfigNR-List OPTIONAL, -- Need M - ... -} - -QuantityConfigNR-List::= SEQUENCE (SIZE (1..maxNrofQuantityConfig)) OF QuantityConfigNR - -QuantityConfigNR::= SEQUENCE { - quantityConfigCell QuantityConfigRS, - quantityConfigRS-Index QuantityConfigRS OPTIONAL -- Need M -} - -QuantityConfigRS ::= SEQUENCE { - -- SS Block based L3 filter configurations: - ssb-FilterConfig FilterConfig, - - -- CSI-RS basedL3 filter configurations: - cs-RS-FilterConfig FilterConfig -} - -FilterConfig ::= SEQUENCE { - filterCoefficientRSRP FilterCoefficient DEFAULT fc4, - filterCoefficientRSRQ FilterCoefficient DEFAULT fc4, - filterCoefficientRS-SINR FilterCoefficient DEFAULT fc4 -} - --- TAG-QUANTITY-CONFIG-STOP --- TAG-RACH-CONFIG-COMMON-START - -RACH-ConfigCommon ::= SEQUENCE { - -- Generic RACH parameters - rach-ConfigGeneric RACH-ConfigGeneric, - - -- Total number of preambles used for contention based and contention free random access, excluding - -- preambles used for other purposes (e.g. for SI request). If the field is absent, the UE may use all 64 preambles for RA. - totalNumberOfRA-Preambles INTEGER (1..63) OPTIONAL, -- Need S - - -- Number of SSBs per RACH occasion (L1 parameter 'SSB-per-rach-occasion') and the number of Contention Based preambles per SSB - -- (L1 parameter 'CB-preambles-per-SSB'). By multiplying the two values, the UE determines the total number of CB preambles. - ssb-perRACH-OccasionAndCB-PreamblesPerSSB CHOICE { - oneEighth ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32,n36,n40,n44,n48,n52,n56,n60,n64}, - oneFourth ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32,n36,n40,n44,n48,n52,n56,n60,n64}, - oneHalf ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32,n36,n40,n44,n48,n52,n56,n60,n64}, - one ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32,n36,n40,n44,n48,n52,n56,n60,n64}, - two ENUMERATED {n4,n8,n12,n16,n20,n24,n28,n32}, - four INTEGER (1..16), - eight INTEGER (1..8), - sixteen INTEGER (1..4) - } OPTIONAL, -- Need M - - groupBconfigured SEQUENCE { - -- Transport Blocks size threshold in bit below which the UE shall use a contention based RA premable - -- of group A. (see 38.321, section 5.1.2) - ra-Msg3SizeGroupA ENUMERATED {b56, b144, b208, b256, b282, b480, b640, b800, b1000, spare7, spare6, spare5, - spare4, spare3, spare2, spare1}, - -- Threshold for preamble selection. Value in dB. Value minusinfinity corresponds to –infinity. - -- Value dB0 corresponds to 0 dB, dB5 corresponds to 5 dB and so on. (see FFS_Spec, section FFS_Section) - messagePowerOffsetGroupB ENUMERATED { minusinfinity, dB0, dB5, dB8, dB10, dB12, dB15, dB18}, - -- The number of CB preambles per SSB in group A. This determines implicitly the number of CB preambles per SSB available in group B. - -- (see 38.321, section 5.1.1) - numberOfRA-PreamblesGroupA INTEGER (1..64) - } OPTIONAL, -- Need R - - -- The initial value for the contention resolution timer (see 38.321, section 5.1.5) - ra-ContentionResolutionTimer ENUMERATED { sf8, sf16, sf24, sf32, sf40, sf48, sf56, sf64}, - - -- UE may select the SS block and corresponding PRACH resource for path-loss estimation and (re)transmission - -- based on SS blocks that satisfy the threshold (see 38.213, section REF) - rsrp-ThresholdSSB RSRP-Range OPTIONAL, -- Need R - -- UE may select the SS block and corresponding PRACH resource for path-loss estimation and (re)transmission on the SUL carrier - -- based on SS blocks that satisfy the threshold - -- Corresponds to L1 parameter 'SUL-RSRP-Threshold' (see FFS_Spec, section FFS_Section) - rsrp-ThresholdSSB-SUL RSRP-Range OPTIONAL, -- Need R - - -- PRACH root sequence index. Corresponds to L1 parameter 'PRACHRootSequenceIndex' (see 38.211, section 6.3.3.1). - -- The value range depends on whether L=839 or L=139 - prach-RootSequenceIndex CHOICE { - l839 INTEGER (0..837), - l139 INTEGER (0..137) - }, - - -- Subcarrier spacing of PRACH. Only the values 15 or 30 kHz (<6GHz), 60 or 120 kHz (>6GHz) are applicable. - -- Corresponds to L1 parameter 'prach-Msg1SubcarrierSpacing' (see 38.211, section FFS_Section) - msg1-SubcarrierSpacing SubcarrierSpacing, - - -- Configuration of an unrestricted set or one of two types of restricted sets, see 38.211 6.3.3.1 - restrictedSetConfig ENUMERATED {unrestrictedSet, restrictedSetTypeA, restrictedSetTypeB}, - -- Indicates to a UE whether transform precoding is enabled for Msg3 transmission. - -- Corresponds to L1 parameter 'msg3-tp' (see 38.213, section 8.1) - msg3-transformPrecoding ENUMERATED {enabled} OPTIONAL, -- Need R - ... -} - --- TAG-RACH-CONFIG-COMMON-STOP --- TAG-RACH-CONFIG-GENERIC-START - -RACH-ConfigGeneric ::= SEQUENCE { - -- PRACH configuration index. Corresponds to L1 parameter 'PRACHConfigurationIndex' (see 38.211, section 6.3.3.2) - prach-ConfigurationIndex INTEGER (0..255), - -- The number of PRACH transmission occasions FDMed in one time instance. - -- Corresponds to L1 parameter 'prach-FDM' (see 38.211, section FFS_Section) - msg1-FDM ENUMERATED {one, two, four, eight}, - -- Offset of lowest PRACH transmission occasion in frequency domain with respective to PRB 0. - -- The value is configured so that the corresponding RACH resource is entirely within the bandwidth of the UL BWP. - -- Corresponds to L1 parameter 'prach-frequency-start' (see 38,211, section FFS_Section) - msg1-FrequencyStart INTEGER (0..maxNrofPhysicalResourceBlocks-1), - -- N-CS configuration, see Table 6.3.3.1-3 in 38.211 - zeroCorrelationZoneConfig INTEGER(0..15), - -- The target power level at the network receiver side (see 38.213, section 7.4, 38.321, section 5.1.2, 5.1.3) - -- Only multiples of 2 dBm may be chosen (e.g. -200, -198, ...). - -- FFS-Value: Actual values to be updated based on input from RAN4 (see LS in R2-1800004 and R4-1803466). - preambleReceivedTargetPower INTEGER (-200..-74), - -- Max number of RA preamble transmission perfomed before declaring a failure (see 38.321, section 5.1.4, 5.1.5) - preambleTransMax ENUMERATED {n3, n4, n5, n6, n7, n8, n10, n20, n50, n100, n200}, - -- Power ramping steps for PRACH (see 38.321,5.1.3) - powerRampingStep ENUMERATED {dB0, dB2, dB4, dB6}, - -- Msg2 (RAR) window length in number of slots. The network configures a value lower than or euqal to 10 ms (see 38.321, section 5.1.4) - ra-ResponseWindow ENUMERATED {sl1, sl2, sl4, sl8, sl10, sl20, sl40, sl80} -} - --- TAG-RACH-CONFIG-GENERIC-STOP --- TAG-RACH-CONFIG-DEDICATED-START - --- FFS_Standlone: resources for msg1-based on-demand SI request - -RACH-ConfigDedicated ::= SEQUENCE { - -- Resources for contention free random access to a given target cell - cfra-Resources CFRA-Resources, - ... -} - -CFRA-Resources ::= CHOICE { - ssb SEQUENCE { - ssb-ResourceList SEQUENCE (SIZE(1..maxRA-SSB-Resources)) OF CFRA-SSB-Resource, - -- Explicitly signalled PRACH Mask Index for RA Resource selection in TS 36.321. The mask is valid for all SSB - -- resources signalled in ssb-ResourceList - ra-ssb-OccasionMaskIndex INTEGER (0..15) - }, - csirs SEQUENCE { - csirs-ResourceList SEQUENCE (SIZE(1..maxRA-CSIRS-Resources)) OF CFRA-CSIRS-Resource, - cfra-csirs-DedicatedRACH-Threshold RSRP-Range - } -} - -CFRA-SSB-Resource ::= SEQUENCE { - -- The ID of an SSB transmitted by this serving cell. - ssb SSB-Index, - -- The preamble index that the UE shall use when performing CF-RA upon selecting the candidate beams identified by this SSB. - ra-PreambleIndex INTEGER (0..63), - ... -} - -CFRA-CSIRS-Resource ::= SEQUENCE { - -- The ID of a CSI-RS resource defined in the measurement object associated with this serving cell. - csi-RS CSI-RS-Index, - -- RA occasions that the UE shall use when performing CF-RA upon selecting the candidate beam identified by this CSI-RS. - ra-OccasionList SEQUENCE (SIZE(1..maxRA-OccasionsPerCSIRS)) OF INTEGER (0..maxRA-Occasions-1), - -- The RA preamble index to use in the RA occasions assoicated with this CSI-RS. - ra-PreambleIndex INTEGER (0..63), - ... -} - --- TAG-RACH-CONFIG-DEDICATED-STOP --- TAG-RADIO-BEARER-CONFIG-START - -RadioBearerConfig ::= SEQUENCE { - srb-ToAddModList SRB-ToAddModList OPTIONAL, -- Need N - srb3-ToRelease ENUMERATED{true} OPTIONAL, -- Need N - drb-ToAddModList DRB-ToAddModList OPTIONAL, -- Need N - drb-ToReleaseList DRB-ToReleaseList OPTIONAL, -- Need N - securityConfig SecurityConfig OPTIONAL, -- Cond M - ... -} - -SRB-ToAddModList ::= SEQUENCE (SIZE (1..2)) OF SRB-ToAddMod -SRB-ToAddMod ::= SEQUENCE { - srb-Identity SRB-Identity, - -- may only be set if the cell groups of all linked logical channels are reset or released - reestablishPDCP ENUMERATED{true} OPTIONAL, -- Need N - discardOnPDCP ENUMERATED{true} OPTIONAL, -- Need N - pdcp-Config PDCP-Config OPTIONAL, -- Cond PDCP - ... -} - - -DRB-ToAddModList ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-ToAddMod -DRB-ToAddMod ::= SEQUENCE { - cnAssociation CHOICE { - -- The EPS bearer ID determines the EPS bearer when NR connects to EPC using EN-DC - eps-BearerIdentity INTEGER (0..15), -- EPS-DRB-Setup - -- The SDAP configuration determines how to map QoS flows to DRBs when NR connects to the 5GC - sdap-Config SDAP-Config -- 5GC - } OPTIONAL, -- Cond DRBSetup - drb-Identity DRB-Identity, - - -- may only be set if the cell groups of all linked logical channels are reset or released - reestablishPDCP ENUMERATED{true} OPTIONAL, -- Need N - recoverPDCP ENUMERATED{true} OPTIONAL, -- Need N - pdcp-Config PDCP-Config OPTIONAL, -- Cond PDCP - ... -} - -DRB-ToReleaseList ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-Identity - - -SecurityConfig ::= SEQUENCE { - securityAlgorithmConfig SecurityAlgorithmConfig OPTIONAL, -- Cond RBTermChange - keyToUse ENUMERATED{keNB, s-KgNB} OPTIONAL, -- Cond RBTermChange - ... -} - --- TAG-RADIO-BEARER-CONFIG-STOP --- TAG-RADIOLINKMONITORINGCONFIG-START - -RadioLinkMonitoringConfig ::= SEQUENCE { - -- A list of reference signals for detecting beam failure and/or cell level radio link failure (RLF). - -- The network configures at most two detectionResources per BWP for the purpose "beamFailure" or "both". - -- If no RSs are provided for the purpose of beam failure detection, the UE performs beam monitoring based on the activated TCI-State - -- for PDCCH. However, if the activated TCI state refers to an aperiodic or semi-persistent CSI-RS, the gNB configures the failure - -- detection resources explicitly (FFS_RAN1: TBC by RAN1). - -- If no RSs are provided in this list at all (neither for Cell- nor for Beam-RLM), the UE performs also Cell-RLM based - -- on the activated TCI-State of PDCCH (FFS_RAN1: TBC by RAN1). - -- When the network reconfigures this field, the UE resets on-going RLF timers and counters. - failureDetectionResources SEQUENCE (SIZE(1..maxNrofFailureDetectionResources)) OF RadioLinkMonitoringRS OPTIONAL, -- Need M - -- This field determines after how many beam failure events the UE triggers beam failure recovery (see 38.321, section 5.17). - -- Value n1 corresponds to 1 beam failure instance, n2 corresponds to 2 beam failure instances and so on. - -- When the network reconfigures this field, the UE resets on-going RLF timers and counters. - -- If the field is absent, the UE does not trigger beam failure recovery. - beamFailureInstanceMaxCount ENUMERATED {n1, n2, n3, n4, n5, n6, n8, n10} OPTIONAL, -- Need S - -- Timer for beam failure detection (see 38.321, section FFS_Section). See also the BeamFailureRecoveryConfig IE. - -- Value in number of "periods of Beam Failure Detection" Reference Signal. Value pbfd1 corresponds to 1 period of Beam Failure - -- Detection Reference Signal, value pbfd2 corresponds to 2 periods of Beam Failure Detection Reference Signal and so on. - -- When the network reconfigures this field, the UE resets on-going RLF timers and counters. - beamFailureDetectionTimer ENUMERATED {pbfd1, pbfd2, pbfd3, pbfd4, pbfd5, pbfd6, pbfd8, pbfd10} OPTIONAL, -- Need R - ... -} - -RadioLinkMonitoringRS ::= SEQUENCE { - -- Determines whether the UE shall monitor the associated reference signal for the purpose of cell- and/or beam failure detection. - purpose ENUMERATED {beamFailure, rlf, both}, - -- A reference signal that the UE shall use for radio link monitoring. The network provides an ssb-Index only if - -- the purpose is set to rlf. - detectionResource CHOICE { - ssb-Index SSB-Index, - csi-RS-Index NZP-CSI-RS-ResourceId - }, - ... -} - --- TAG-RADIOLINKMONITORINGCONFIG-STOP --- TAG-RATEMATCHPATTERN-START -RateMatchPattern ::= SEQUENCE { - rateMatchPatternId RateMatchPatternId, - - patternType CHOICE { - bitmaps SEQUENCE { - -- A resource block level bitmap in the frequency domain. It indicates the PRBs to which the symbolsInResourceBlock bitmap applies. - -- Corresponds to L1 parameter 'rate-match-PDSCH-bitmap1' (see 38.214, section FFS_Section) - -- FFS_ASN1: Consider multiple options with different number of bits (for narrower carriers) - resourceBlocks BIT STRING (SIZE (275)), - - -- A symbol level bitmap in time domain. It indicates (FFS: with a bit set to true) the symbols which the UE shall rate match around. - -- This pattern recurs (in time domain) with the configured periodicityAndOffset. - -- Corresponds to L1 parameter 'rate-match-PDSCH-bitmap2' (see 38.214, section FFS_Section) - -- FFS: Why not split it into two BIT STRINGs of 14 bit each? - symbolsInResourceBlock CHOICE { - oneSlot BIT STRING (SIZE (14)), - twoSlots BIT STRING (SIZE (28)) - }, - - -- A time domain repetition pattern. at which the symbolsInResourceBlock - -- pattern recurs. This slot pattern repeats itself continuously. Absence of this field indicates the value n1, i.e., the - -- symbolsInResourceBlock recurs every 14 symbols. - -- Corresponds to L1 parameter 'rate-match-PDSCH-bitmap3' (see 38.214, section FFS_Section) - periodicityAndPattern CHOICE { - n2 BIT STRING (SIZE (2)), - n4 BIT STRING (SIZE (4)), - n5 BIT STRING (SIZE (5)), - n8 BIT STRING (SIZE (8)), - n10 BIT STRING (SIZE (10)), - n20 BIT STRING (SIZE (20)), - n40 BIT STRING (SIZE (40)) - } OPTIONAL, -- Need S - ... - }, - -- This ControlResourceSet us used as a PDSCH rate matching pattern, i.e., PDSCH reception rate matches around it. - controlResourceSet ControlResourceSetId - }, - -- The SubcarrierSpacing for this resource pattern. If the field is absent, the UE applies the SCS of the associcated BWP. - -- The value kHz15 corresponds to µ=0, kHz30 to µ=1, and so on. Only the values 15 or 30 kHz (<6GHz), 60 or 120 kHz (>6GHz) are - -- applicable. Corresponds to L1 parameter 'resource-pattern-scs' (see 38.214, section FFS_Section) - subcarrierSpacing SubcarrierSpacing OPTIONAL, -- Cond CellLevel - -- FFS_Description, FFS_Section - mode ENUMERATED { dynamic, semiStatic }, - ... -} - --- TAG-RATEMATCHPATTERN-STOP --- TAG-RATEMATCHPATTERNID-START - -RateMatchPatternId ::= INTEGER (0..maxNrofRateMatchPatterns-1) - --- TAG-RATEMATCHPATTERNID-STOP --- TAG-RATEMATCHPATTERNLTE-CRS-START - -RateMatchPatternLTE-CRS ::= SEQUENCE { - -- Center of the LTE carrier. Corresponds to L1 parameter 'center-subcarrier-location' (see 38.214, section 5.1.4) - carrierFreqDL INTEGER (0..16383), - -- BW of the LTE carrier in numbewr of PRBs. Corresponds to L1 parameter 'BW' (see 38.214, section 5.1.4) - carrierBandwidthDL ENUMERATED {n6, n15, n25, n50, n75, n100, spare2, spare1}, - -- LTE MBSFN subframe configuration. Corresponds to L1 parameter 'MBSFN-subframconfig' (see 38.214, section 5.1.4) - -- FFS_ASN1: Import the LTE MBSFN-SubframeConfigList - mbsfn-SubframeConfigList EUTRA-MBSFN-SubframeConfigList OPTIONAL, -- Need M - -- Number of LTE CRS antenna port to rate-match around. - -- Corresponds to L1 parameter 'rate-match-resources-numb-LTE-CRS-antenna-port' (see 38.214, section 5.1.4) - nrofCRS-Ports ENUMERATED {n1, n2, n4}, - -- Shifting value v-shift in LTE to rate match around LTE CRS - -- Corresponds to L1 parameter 'rate-match-resources-LTE-CRS-v-shift' (see 38.214, section 5.1.4) - v-Shift ENUMERATED {n0, n1, n2, n3, n4, n5} -} - --- TAG-RATEMATCHPATTERNLTE-CRS-STOP --- TAG-REPORT-CONFIG-ID-START - -ReportConfigId ::= INTEGER (1..maxReportConfigId) - --- TAG-REPORT-CONFIG-ID-STOP --- TAG-REPORT-CONFIG-START - -ReportConfigNR ::= SEQUENCE { - reportType CHOICE { - periodical PeriodicalReportConfig, - eventTriggered EventTriggerConfig, --- reportCGI is to be completed before the end of Rel-15. - reportCGI ENUMERATED {ffsTypeAndValue}, - ... - } -} - --- FFS / TODO: Consider separating trgger configuration (trigger, periodic, ...) from report configuration. --- Current structure allows easier definiton of new events and new report types e.g. CGI, etc. -EventTriggerConfig::= SEQUENCE { - eventId CHOICE { - eventA1 SEQUENCE { - a1-Threshold MeasTriggerQuantity, - reportOnLeave BOOLEAN, - hysteresis Hysteresis, - timeToTrigger TimeToTrigger - }, - eventA2 SEQUENCE { - a2-Threshold MeasTriggerQuantity, - reportOnLeave BOOLEAN, - hysteresis Hysteresis, - timeToTrigger TimeToTrigger - }, - eventA3 SEQUENCE { - a3-Offset MeasTriggerQuantityOffset, - reportOnLeave BOOLEAN, - hysteresis Hysteresis, - timeToTrigger TimeToTrigger, - useWhiteCellList BOOLEAN - }, - eventA4 SEQUENCE { - a4-Threshold MeasTriggerQuantity, - reportOnLeave BOOLEAN, - hysteresis Hysteresis, - timeToTrigger TimeToTrigger, - useWhiteCellList BOOLEAN - }, - eventA5 SEQUENCE { - a5-Threshold1 MeasTriggerQuantity, - a5-Threshold2 MeasTriggerQuantity, - reportOnLeave BOOLEAN, - hysteresis Hysteresis, - timeToTrigger TimeToTrigger, - useWhiteCellList BOOLEAN - }, - eventA6 SEQUENCE { - a6-Offset MeasTriggerQuantityOffset, - reportOnLeave BOOLEAN, - hysteresis Hysteresis, - timeToTrigger TimeToTrigger, - useWhiteCellList BOOLEAN - }, - ... - }, - - rsType NR-RS-Type, - - -- Common reporting config (at least to periodical and eventTriggered) - reportInterval ReportInterval, - reportAmount ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity}, - - -- Cell reporting configuration - reportQuantityCell MeasReportQuantity, - maxReportCells INTEGER (1..maxCellReport), - - -- RS index reporting configuration - reportQuantityRsIndexes MeasReportQuantity OPTIONAL, -- Need M - maxNrofRSIndexesToReport INTEGER (1..maxNrofIndexesToReport) OPTIONAL, -- Need M - includeBeamMeasurements BOOLEAN, - -- If configured the UE includes the best neighbour cells per serving frequency - reportAddNeighMeas ENUMERATED {setup} OPTIONAL, -- Need R - ... - -} - -PeriodicalReportConfig ::= SEQUENCE { - rsType NR-RS-Type, - - -- Common reporting config (at least to periodical and eventTriggered) - reportInterval ReportInterval, - reportAmount ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity}, - - -- Cell reporting configuration - reportQuantityCell MeasReportQuantity, - maxReportCells INTEGER (1..maxCellReport), - - -- RS index reporting configuration - reportQuantityRsIndexes MeasReportQuantity OPTIONAL, -- Need R - maxNrofRsIndexesToReport INTEGER (1..maxNrofIndexesToReport) OPTIONAL, -- Need R - includeBeamMeasurements BOOLEAN, - useWhiteCellList BOOLEAN, - ... - -} - -NR-RS-Type ::= ENUMERATED {ssb, csi-rs} - -MeasTriggerQuantity ::= CHOICE { - rsrp RSRP-Range, - rsrq RSRQ-Range, - sinr SINR-Range -} - -MeasTriggerQuantityOffset ::= CHOICE { - rsrp INTEGER (-30..30), - rsrq INTEGER (-30..30), - sinr INTEGER (-30..30) -} - - -MeasReportQuantity ::= SEQUENCE { - rsrp BOOLEAN, - rsrq BOOLEAN, - sinr BOOLEAN -} - - --- TAG-REPORT-CONFIG-START --- TAG-REPORT-CONFIG-TO-ADD-MOD-LIST-START - -ReportConfigToAddModList ::= SEQUENCE (SIZE (1..maxReportConfigId)) OF ReportConfigToAddMod - -ReportConfigToAddMod ::= SEQUENCE { - reportConfigId ReportConfigId, - reportConfig CHOICE { - reportConfigNR ReportConfigNR, - ... - } -} - --- TAG- REPORT-CONFIG-TO-ADD-MOD-LIST-STOP - -ReportInterval ::= ENUMERATED {ms120, ms240, ms480, ms640, ms1024, ms2048, ms5120, ms10240, ms20480, ms40960, min1, - min6, min12, min30 } - --- TAG-RLC-CONFIG-START - -RLC-Config ::= CHOICE { - am SEQUENCE { - ul-AM-RLC UL-AM-RLC, - dl-AM-RLC DL-AM-RLC - }, - um-Bi-Directional SEQUENCE { - ul-UM-RLC UL-UM-RLC, - dl-UM-RLC DL-UM-RLC - }, - um-Uni-Directional-UL SEQUENCE { - ul-UM-RLC UL-UM-RLC - }, - um-Uni-Directional-DL SEQUENCE { - dl-UM-RLC DL-UM-RLC - }, - ... -} - -UL-AM-RLC ::= SEQUENCE { - sn-FieldLength SN-FieldLengthAM, - t-PollRetransmit T-PollRetransmit, - pollPDU PollPDU, - pollByte PollByte, - maxRetxThreshold ENUMERATED { t1, t2, t3, t4, t6, t8, t16, t32 } -} - -DL-AM-RLC ::= SEQUENCE { - sn-FieldLength SN-FieldLengthAM, - t-Reassembly T-Reassembly, - t-StatusProhibit T-StatusProhibit -} - -UL-UM-RLC ::= SEQUENCE { - sn-FieldLength SN-FieldLengthUM -} - -DL-UM-RLC ::= SEQUENCE { - sn-FieldLength SN-FieldLengthUM, - t-Reassembly T-Reassembly -} - -T-PollRetransmit ::= ENUMERATED { - ms5, ms10, ms15, ms20, ms25, ms30, ms35, - ms40, ms45, ms50, ms55, ms60, ms65, ms70, - ms75, ms80, ms85, ms90, ms95, ms100, ms105, - ms110, ms115, ms120, ms125, ms130, ms135, - ms140, ms145, ms150, ms155, ms160, ms165, - ms170, ms175, ms180, ms185, ms190, ms195, - ms200, ms205, ms210, ms215, ms220, ms225, - ms230, ms235, ms240, ms245, ms250, ms300, - ms350, ms400, ms450, ms500, ms800, ms1000, - ms2000, ms4000, spare5, spare4, spare3, - spare2, spare1} - - -PollPDU ::= ENUMERATED { - p4, p8, p16, p32, p64, p128, p256, p512, p1024, p2048, p4096, p6144, p8192, p12288, p16384, p20480, - p24576, p28672, p32768, p40960, p49152, p57344, p65536, infinity, spare8, spare7, spare6, spare5, spare4, - spare3, spare2, spare1} - -PollByte ::= ENUMERATED { - kB1, kB2, kB5, kB8, kB10, kB15, kB25, kB50, kB75, - kB100, kB125, kB250, kB375, kB500, kB750, kB1000, - kB1250, kB1500, kB2000, kB3000, kB4000, kB4500, - kB5000, kB5500, kB6000, kB6500, kB7000, kB7500, - mB8, mB9, mB10, mB11, mB12, mB13, mB14, mB15, - mB16, mB17, mB18, mB20, mB25, mB30, mB40, infinity, - spare20, spare19, spare18, spare17, spare16, - spare15, spare14, spare13, spare12, spare11, - spare10, spare9, spare8, spare7, spare6, spare5, - spare4, spare3, spare2, spare1} - -T-Reassembly ::= ENUMERATED { - ms0, ms5, ms10, ms15, ms20, ms25, ms30, ms35, - ms40, ms45, ms50, ms55, ms60, ms65, ms70, - ms75, ms80, ms85, ms90, ms95, ms100, ms110, - ms120, ms130, ms140, ms150, ms160, ms170, - ms180, ms190, ms200, spare1} - -T-StatusProhibit ::= ENUMERATED { - ms0, ms5, ms10, ms15, ms20, ms25, ms30, ms35, - ms40, ms45, ms50, ms55, ms60, ms65, ms70, - ms75, ms80, ms85, ms90, ms95, ms100, ms105, - ms110, ms115, ms120, ms125, ms130, ms135, - ms140, ms145, ms150, ms155, ms160, ms165, - ms170, ms175, ms180, ms185, ms190, ms195, - ms200, ms205, ms210, ms215, ms220, ms225, - ms230, ms235, ms240, ms245, ms250, ms300, - ms350, ms400, ms450, ms500, ms800, ms1000, - ms1200, ms1600, ms2000, ms2400, spare2, spare1} - -SN-FieldLengthUM ::= ENUMERATED {size6, size12} -SN-FieldLengthAM ::= ENUMERATED {size12, size18} - --- TAG-RLC-CONFIG-STOP --- TAG-RLF-TIMERS-AND-CONSTANTS-START - -RLF-TimersAndConstants ::= SEQUENCE { - t310 ENUMERATED {ms0, ms50, ms100, ms200, ms500, ms1000, ms2000, ms4000, ms6000}, - n310 ENUMERATED {n1, n2, n3, n4, n6, n8, n10, n20}, - n311 ENUMERATED {n1, n2, n3, n4, n5, n6, n8, n10}, - ... -} - --- TAG-RLF-TIMERS-AND-CONSTANTS-STOP --- TAG-RNTI-VALUE-START - -RNTI-Value ::= INTEGER (0..65535) - --- TAG-RNTI-VALUE-STOP --- TAG-RSRP-RANGE-START - -RSRP-Range ::= INTEGER(0..124) - --- TAG-RSRP-RANGE-STOP --- TAG-RSRQ-RANGE-START - -RSRQ-Range ::= INTEGER(0..127) - --- TAG-RSRQ-RANGE-STOP --- TAG-SCELL-INDEX-START - --- The value range is shared across the Cell Groups -SCellIndex ::= INTEGER (1..31) - --- TAG-SCELL-INDEX-STOP --- TAG-SCHEDULING-REQUEST-CONFIG-START - -SchedulingRequestConfig ::= SEQUENCE { - schedulingRequestToAddModList SEQUENCE (SIZE (1..maxNrofSR-ConfigPerCellGroup)) OF SchedulingRequestToAddMod OPTIONAL, -- Need N - schedulingRequestToReleaseList SEQUENCE (SIZE (1..maxNrofSR-ConfigPerCellGroup)) OF SchedulingRequestId OPTIONAL -- Need N -} - -SchedulingRequestToAddMod ::= SEQUENCE { - sr-ConfigIndex SchedulingRequestId, - - sr-ProhibitTimer ENUMERATED {ms1, ms2, ms4, ms8, ms16, ms32, ms64, ms128} OPTIONAL, -- Need S - sr-TransMax ENUMERATED { n4, n8, n16, n32, n64, spare3, spare2, spare1} -} - -SchedulingRequestId ::= INTEGER (0..7) - --- FFS_TODO: provide resources for each SchedulingRequestID in ServingCellConfig (TBD whether directly, in PUCCH-Config, in each BWP) - --- TAG-SCHEDULING-REQUEST-CONFIG-STOP --- TAG-SCHEDULING-REQUEST-RESOURCE-CONFIG-START - -SchedulingRequestResourceConfig ::= SEQUENCE { - schedulingRequestResourceId SchedulingRequestResourceId, - -- The ID of the SchedulingRequestConfig that uses this scheduling request resource. - schedulingRequestID SchedulingRequestId, - -- SR periodicity and offset in number of slots. Corresponds to L1 parameter 'SR-periodicity' and 'SR-offset' (see 38.213, section 9.2.2) - -- The following periodicities may be configured depending on the chosen subcarrier spacing: - -- SCS = 15 kHz: 2sym, 7sym, 1sl, 2sl, 4sl, 5sl, 8sl, 10sl, 16sl, 20sl, 40sl, 80sl - -- SCS = 30 kHz: 2sym, 7sym, 1sl, 2sl, 4sl, 8sl, 10sl, 16sl, 20sl, 40sl, 80sl, 160sl - -- SCS = 60 kHz: 2sym, 7sym/6sym, 1sl, 2sl, 4sl, 8sl, 16sl, 20sl, 40sl, 80sl, 160sl, 320sl - -- SCS = 120 kHz: 2sym, 7sym, 1sl, 2sl, 4sl, 8sl, 16sl, 40sl, 80sl, 160sl, 320sl, sl640 - -- sym6or7 corresponds to 6 symbols if extended cyclic prefix and a SCS of 60 kHz are configured, otherwise it corresponds to 7 symbols. - -- For periodicities sym2, sym7 and sl1 the UE assumes an offset of 0 slots. - periodicityAndOffset CHOICE { - sym2 NULL, - sym6or7 NULL, - sl1 NULL, -- Recurs in every slot - sl2 INTEGER (0..1), - sl4 INTEGER (0..3), - sl5 INTEGER (0..4), - sl8 INTEGER (0..7), - sl10 INTEGER (0..9), - sl16 INTEGER (0..15), - sl20 INTEGER (0..19), - sl40 INTEGER (0..39), - sl80 INTEGER (0..79), - sl160 INTEGER (0..159), - sl320 INTEGER (0..319), - sl640 INTEGER (0..639) - } OPTIONAL, -- Need M - -- ID of the PUCCH resource in which the UE shall send the scheduling request. The - -- actual PUCCH-Resource is configured in PUCCH-Config of the same UL BWP and serving cell as this SchedulingRequestResourceConfig. - -- The network configures a PUCCH-Resource of PUCCH-format0 or PUCCH-format1 - -- (other formats not supported). Corresponds to L1 parameter 'SR-resource' (see 38.213, section 9.2.2) - resource PUCCH-ResourceId OPTIONAL -- Need M -} - --- TAG-SCHEDULING-REQUEST-RESOURCE-CONFIG-STOP --- TAG-SCHEDULINGREQUESTRESOURCEID-START - -SchedulingRequestResourceId ::= INTEGER (1..maxNrofSR-Resources) - --- TAG-SCHEDULINGREQUESTRESOURCEID-STOP --- TAG-SCRAMBLING-ID-START - -ScramblingId ::= INTEGER (0..1023) - --- TAG-SCRAMBLING-ID-STOP --- TAG-SCS-SPECIFIC-CARRIER-START - -SCS-SpecificCarrier ::= SEQUENCE { - -- Offset in frequency domain between Point A (lowest subcarrier of common RB 0) and the lowest usable subcarrier on this carrier - -- in number of PRBs (using the subcarrierSpacing defined for this carrier). The maximum value corresponds to 275*8-1. - -- Corresponds to L1 parameter 'offset-pointA-low-scs' (see 38.211, section FFS_Section) - offsetToCarrier INTEGER (0..2199), - -- Subcarrier spacing of this carrier. It is used to convert the offsetToCarrier into an actual frequency. - -- Only the values 15 or 30 kHz (<6GHz), 60 or 120 kHz (>6GHz) are applicable. - -- Corresponds to L1 parameter 'ref-scs' (see 38.211, section FFS_Section) - subcarrierSpacing SubcarrierSpacing, - -- Corresponds to L1 parameter k0 (see 38.211, section 5.3.1). n-6 corresponds to value -6, n0 corresponds to value 0 and n6 corresponds - -- to value +6. - k0 ENUMERATED {n-6, n0, n6}, - -- Width of this carrier in number of PRBs (using the subcarrierSpacing defined for this carrier) - -- Corresponds to L1 parameter 'BW' (see 38.211, section FFS_Section) - carrierBandwidth INTEGER (1..maxNrofPhysicalResourceBlocks), - ... -} - --- TAG-SCS-SPECIFIC-CARRIER-STOP --- TAG-SDAP-CONFIG-START - -SDAP-Config ::= SEQUENCE { - pdu-Session PDU-SessionID, - - -- FFS: separate configuration for UL and DL - sdap-HeaderDL ENUMERATED {present, absent}, - sdap-HeaderUL ENUMERATED {present, absent}, - defaultDRB BOOLEAN, - - -- A list of QoS-Flow-IDs that the UE shall map to the DRB of this SDAP-Config. - mappedQoS-FlowsToAdd SEQUENCE (SIZE (1..maxNrofQFIs)) OF QFI OPTIONAL, -- Need N - -- A list of QoS-Flow-IDs that the UE shall no longer map to the DRB of this SDAP-Config. - mappedQoS-FlowsToRelease SEQUENCE (SIZE (1..maxNrofQFIs)) OF QFI OPTIONAL, -- Need N - ... -} - -QFI ::= INTEGER (0..maxQFI) - -PDU-SessionID ::= INTEGER (0..255) - --- TAG-SDAP-CONFIG-STOP --- TAG-SEARCHSPACE-START - -SearchSpace ::= SEQUENCE { - -- Identity of the search space. SearchSpaceId = 0 identifies the SearchSpace configured via PBCH (MIB) or ServingCellConfigCommon. - -- The searchSpaceId is unique among the BWPs of a Serving Cell. - searchSpaceId SearchSpaceId, - - -- The CORESET applicable for this SearchSpace. - -- Value 0 identifies the common CORESET configured in MIB and in ServingCellConfigCommon - -- Values 1..maxNrofControlResourceSets-1 identify CORESETs configured by dedicated signalling - controlResourceSetId ControlResourceSetId OPTIONAL, -- Cond SetupOnly - - -- Slots for PDCCH Monitoring configured as periodicity and offset. Corresponds to L1 parameters 'Montoring-periodicity-PDCCH-slot' and - -- 'Montoring-offset-PDCCH-slot' (see 38.213, section 10) - monitoringSlotPeriodicityAndOffset CHOICE { - sl1 NULL, - sl2 INTEGER (0..1), - sl4 INTEGER (0..3), - sl5 INTEGER (0..4), - sl8 INTEGER (0..7), - sl10 INTEGER (0..9), - sl16 INTEGER (0..15), - sl20 INTEGER (0..19) - } OPTIONAL, -- Cond Setup - - -- Symbols for PDCCH monitoring in the slots configured for PDCCH monitoring (see monitoringSlotPeriodicityAndOffset). - -- The most significant (left) bit represents the first OFDM in a slot. The least significant (right) bit represents the last symbol. - -- Corresponds to L1 parameter 'Montoring-symbols-PDCCH-within-slot' (see 38.213, section 10) - monitoringSymbolsWithinSlot BIT STRING (SIZE (14)) OPTIONAL, -- Cond Setup - - -- Number of PDCCH candidates per aggregation level. Corresponds to L1 parameter 'Aggregation-level-1' to 'Aggregation-level-8'. - -- The number of candidates and aggregation levels configured here applies to all formats unless a particular value is specified or - -- a format-specific value is provided (see inside searchSpaceType). - -- (see 38.213, section 10) - nrofCandidates SEQUENCE { - aggregationLevel1 ENUMERATED {n0, n1, n2, n3, n4, n5, n6, n8}, - aggregationLevel2 ENUMERATED {n0, n1, n2, n3, n4, n5, n6, n8}, - aggregationLevel4 ENUMERATED {n0, n1, n2, n3, n4, n5, n6, n8}, - aggregationLevel8 ENUMERATED {n0, n1, n2, n3, n4, n5, n6, n8}, - aggregationLevel16 ENUMERATED {n0, n1, n2, n3, n4, n5, n6, n8} - } OPTIONAL, -- Cond Setup - - -- Indicates whether this is a common search space (present) or a UE specific search space as well as DCI formats to monitor for. - searchSpaceType CHOICE { - -- Configures this search space as common search space (CSS) and DCI formats to monitor. - common SEQUENCE { - -- If configured, the UE monitors the DCI formats 0_0 and 1_0 with CRC scrambled by C-RNTI, CS-RNTI (if configured), - -- SP-CSI-RNTI (if configured), RA-RNTI, TC-RNTI, P-RNTI, SI-RNTI - dci-Format0-0-AndFormat1-0 SEQUENCE { - ... - } OPTIONAL, -- Need R - -- If configured, UE monitors the DCI format format 2_0 with CRC scrambled by SFI-RNTI - dci-Format2-0 SEQUENCE { - -- The number of PDCCH candidates specifically for format 2-0 for the configured aggregation level. - -- If an aggregation level is absent, the UE does not search for any candidates with that aggregation level. - -- Corresponds to L1 parameters 'SFI-Num-PDCCH-cand' and 'SFI-Aggregation-Level' (see 38.213, section 11.1.1). - nrofCandidates-SFI SEQUENCE { - aggregationLevel1 ENUMERATED {n1, n2} OPTIONAL, -- Need R - aggregationLevel2 ENUMERATED {n1, n2} OPTIONAL, -- Need R - aggregationLevel4 ENUMERATED {n1, n2} OPTIONAL, -- Need R - aggregationLevel8 ENUMERATED {n1, n2} OPTIONAL, -- Need R - aggregationLevel16 ENUMERATED {n1, n2} OPTIONAL -- Need R - }, - ... - } OPTIONAL, -- Need R - -- If configured, UE monitors the DCI format format 2_1 with CRC scrambled by INT-RNTI - dci-Format2-1 SEQUENCE { - ... - } OPTIONAL, -- Need R - -- If configured, UE monitors the DCI format 2_2 with CRC scrambled by TPC-PUSCH-RNTI or TPC-PUCCH-RNTI - dci-Format2-2 SEQUENCE { - ... - } OPTIONAL, -- Need R - -- If configured, UE monitors the DCI format 2_3 with CRC scrambled by TPC-SRS-RNTI - dci-Format2-3 SEQUENCE { - -- Monitoring periodicity of SRS PDCCH in number of slots for DCI format 2-3. - -- Corresponds to L1 parameter 'SRS-monitoring-periodicity' (see 38.212, 38.213, section 7.3.1, 11.3) - monitoringPeriodicity ENUMERATED {n1, n2, n4, n5, n8, n10, n16, n20 } OPTIONAL, -- Cond Setup - - -- The number of PDCCH candidates for DCI format 2-3 for the configured aggregation level. - -- Corresponds to L1 parameter 'SRS-Num-PDCCH-cand' (see 38.212, 38.213, section 7.3.1, 11.3) - nrofPDCCH-Candidates ENUMERATED {n1, n2}, - ... - } OPTIONAL -- Need R - }, - -- Configures this search space as UE specific search space (USS). The UE monitors the DCI format with CRC scrambled - -- by C-RNTI, CS-RNTI (if configured), TC-RNTI (if a certain condition is met), and SP-CSI-RNTI (if configured) - ue-Specific SEQUENCE { - -- Indicates whether the UE monitors in this USS for DCI formats 0-0 and 1-0 or for formats 0-1 and 1-1. - dci-Formats ENUMERATED {formats0-0-And-1-0, formats0-1-And-1-1}, - ... - } - } OPTIONAL -- Cond Setup -} --- TAG-SEARCHSPACE-STOP --- TAG-SEARCHSPACEID-START - -SearchSpaceId ::= INTEGER (0..maxNrofSearchSpaces-1) - --- TAG-SEARCHSPACEID-STOP --- TAG-SECURITY-ALGORITHM-CONFIG-START - -SecurityAlgorithmConfig ::= SEQUENCE { - cipheringAlgorithm CipheringAlgorithm, - integrityProtAlgorithm IntegrityProtAlgorithm OPTIONAL, -- Need R - ... -} - -IntegrityProtAlgorithm ::= ENUMERATED { - nia0, nia1, nia2, nia3, spare4, spare3, - spare2, spare1, ...} - -CipheringAlgorithm ::= ENUMERATED { - nea0, nea1, nea2, nea3, spare4, spare3, - spare2, spare1, ...} - --- TAG-SECURITY-ALGORITHM-CONFIG-STOP --- TAG-SERV-CELL-INDEX-START - -ServCellIndex ::= INTEGER (0..maxNrofServingCells-1) - --- TAG-SERV-CELL-INDEX-STOP --- TAG-SERVING-CELL-CONFIG-START - -ServingCellConfig ::= SEQUENCE { - -- L1 parameters: - - tdd-UL-DL-ConfigurationDedicated TDD-UL-DL-ConfigDedicated OPTIONAL, -- Cond TDD - - -- The dedicated (UE-specific) configuration for the initial downlink bandwidth-part. - initialDownlinkBWP BWP-DownlinkDedicated OPTIONAL, -- Cond ServCellAdd - - -- List of additional downlink bandwidth parts to be released. (see 38.211, 38.213, section 12). - downlinkBWP-ToReleaseList SEQUENCE (SIZE (1..maxNrofBWPs)) OF BWP-Id OPTIONAL, -- Need N - -- List of additional downlink bandwidth parts to be added or modified. (see 38.211, 38.213, section 12). - downlinkBWP-ToAddModList SEQUENCE (SIZE (1..maxNrofBWPs)) OF BWP-Downlink OPTIONAL, -- Need N - - -- If configured for an SpCell, this field contains the ID of the DL BWP to be activated upon performing the reconfiguration - -- in which it is received. If the field is absent, the RRC reconfiguration does not impose a BWP switch (corresponds to L1 - -- parameter 'active-BWP-DL-Pcell'). - -- If configured for an SCell, this field contains the ID of the downlink bandwidth part to be used upon MAC-activation of an SCell. - -- If not provided, the UE uses the default BWP. - -- The initial bandwidth part is referred to by BWP-Id = 0. - firstActiveDownlinkBWP-Id BWP-Id OPTIONAL, -- Need R - - -- The duration in ms after which the UE falls back to the default Bandwidth Part. (see 38.321, section 5.15) - -- The value 0.5 ms is only applicable for carriers >6 GHz. - -- When the network releases the timer configuration, the UE stops the timer without swithching to the default BWP. - bwp-InactivityTimer ENUMERATED {ms2, ms3, ms4, ms5, ms6, ms8, ms10, ms20, ms30, ms40,ms50, ms60, ms80, - ms100, ms200, ms300, ms500, ms750, ms1280, ms1920, ms2560, spare10, spare9, - spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1 } OPTIONAL, -- Need R - - -- Corresponds to L1 parameter 'default-DL-BWP'. The initial bandwidth part is referred to by BWP-Id = 0. - -- ID of the downlink bandwidth part to be used upon expiry of txxx. - -- This field is UE specific. When the field is absent the UE uses the the initial BWP as default BWP. - -- (see 38.211, 38.213, section 12 and 38.321, section 5.15) - defaultDownlinkBWP-Id BWP-Id OPTIONAL, -- Need M - - uplinkConfig UplinkConfig OPTIONAL, -- Cond ServCellAdd-UL - supplementaryUplink UplinkConfig OPTIONAL, -- Cond ServCellAdd-SUL - - - -- PDSCH releated parameters that are not BWP-specific. - pdsch-ServingCellConfig SetupRelease { PDSCH-ServingCellConfig } OPTIONAL, -- Need M - csi-MeasConfig SetupRelease { CSI-MeasConfig } OPTIONAL, -- Need M - - -- Includes parameters for configuration of carrier based SRS switching - -- Corresponds to L1 parameter 'SRS-CarrierSwitching' (see 38,214, section FFS_Section) - carrierSwitching SetupRelease { SRS-CarrierSwitching } OPTIONAL, -- Need M - -- MAC parameters: - sCellDeactivationTimer ENUMERATED {ms20, ms40, ms80, ms160, ms200, ms240, ms320, ms400, ms480, ms520, ms640, - ms720, ms840, ms1280, spare2,spare1} OPTIONAL, -- Cond ServingCellWithoutPUCCH - - -- Indicates whether this SCell is cross-carrier scheduled by another serving cell. - crossCarrierSchedulingConfig CrossCarrierSchedulingConfig OPTIONAL, -- Need M - - -- Timing Advance Group ID, as specified in TS 38.321 [3], which this cell belongs to. - tag-Id TAG-Id, - -- Enables the "UE beam lock function (UBF)", which disable changes to the UE beamforming configuration when in NR_RRC_CONNECTED. - -- FFS: Parameter added preliminary based on RAN4 LS in R4-1711823. Decide where to place it (maybe ServingCellConfigCommon or - -- in a BeamManagement IE??) - ue-BeamLockFunction ENUMERATED {enabled} OPTIONAL, -- Need R - - -- Indicates whether UE shall apply as pathloss reference either the downlink of PCell or of SCell that corresponds with this uplink - -- (see 38.213, section 7) - pathlossReferenceLinking ENUMERATED {pCell, sCell} OPTIONAL -- Cond SCellOnly -} - -UplinkConfig ::= SEQUENCE { - -- Configuration of UL BWPs (including BWP-specific parameters: - - -- The dedicated (UE-specific) configuration for the initial uplink bandwidth-part. - initialUplinkBWP BWP-UplinkDedicated OPTIONAL, -- Cond ServCellAdd - - -- The additional bandwidth parts for uplink. In case of TDD uplink- and downlink BWP with the same bandwidthPartId are considered - -- as a BWP pair and must have the same center frequency. - uplinkBWP-ToReleaseList SEQUENCE (SIZE (1..maxNrofBWPs)) OF BWP-Id OPTIONAL, -- Need N - uplinkBWP-ToAddModList SEQUENCE (SIZE (1..maxNrofBWPs)) OF BWP-Uplink OPTIONAL, -- Need N - - -- If configured for an SpCell, this field contains the ID of the DL BWP to be activated upon performing the reconfiguration - -- in which it is received. If the field is absent, the RRC reconfiguration does not impose a BWP switch (corresponds to - -- L1 parameter 'active-BWP-UL-Pcell'). - -- If configured for an SCell, this field contains the ID of the uplink bandwidth part to be used upon MAC-activation of an SCell. - -- If not provided, the UE uses the FFS: default BWP. - -- The initial bandwidth part is referred to by BandiwdthPartId = 0. - firstActiveUplinkBWP-Id BWP-Id OPTIONAL, -- Need R - - -- Configuration that is common across the UL BWPs: - - -- PUSCH related parameters that are not BWP-specific. - pusch-ServingCellConfig SetupRelease { PUSCH-ServingCellConfig } OPTIONAL, -- Need M - ... -} - --- TAG-SERVING-CELL-CONFIG-STOP --- TAG-SERVING-CELL-CONFIG-COMMON-START - -ServingCellConfigCommon ::= SEQUENCE { - physCellId PhysCellId OPTIONAL, -- Cond HOAndServCellAdd, - frequencyInfoDL FrequencyInfoDL OPTIONAL, -- Cond InterFreqHOAndServCellAdd - -- The initial downlink BWP configuration for a SpCell (PCell of MCG or SCG). - initialDownlinkBWP BWP-DownlinkCommon OPTIONAL, -- Cond ServCellAdd - - uplinkConfigCommon UplinkConfigCommon OPTIONAL, -- Cond ServCellAdd-UL - supplementaryUplinkConfig UplinkConfigCommon OPTIONAL, -- Cond ServCellAdd-SUL - - - -- Indicates the time domain positions of the transmitted SS-blocks in an SS-burst. The first/ leftmost bit corresponds to SS/PBCH - -- block index 0, the second bit corresponds to SS/PBCH block index 1, and so on. Value 0 in the bitmap indicates that the - -- corresponding SS/PBCH block is not transmitted while value 1 indicates that the corresponding SS/PBCH block is transmitted. - -- Corresponds to L1 parameter 'SSB-Transmitted' (see 38.213, section 4.1) - ssb-PositionsInBurst CHOICE { - -- bitmap for sub 3 GHz - shortBitmap BIT STRING (SIZE (4)), - -- bitmap for 3-6 GHz - mediumBitmap BIT STRING (SIZE (8)), - -- bitmap for above 6 GHz - longBitmap BIT STRING (SIZE (64)) - } OPTIONAL, -- Need R, - -- The SSB periodicity in msec for the rate matching purpose. If the field is absent, the UE applies the value ms5. - -- (see 38.211, section [7.4.3.1]) - ssb-periodicityServingCell ENUMERATED { ms5, ms10, ms20, ms40, ms80, ms160, spare2, spare1 } OPTIONAL, -- Need S - -- Position of (first) DL DM-RS (see 38.211, section 7.4.1.1.1) - dmrs-TypeA-Position ENUMERATED {pos2, pos3}, - - -- Parameters to determine an LTE CRS pattern that the UE shall rate match around. - lte-CRS-ToMatchAround SetupRelease { RateMatchPatternLTE-CRS } OPTIONAL, -- Need M - - -- Resources patterns which the UE should rate match PDSCH around. The UE rate matches around the union of all resources - -- indicated in the nested bitmaps. Rate match patterns defined here on cell level apply only to PDSCH of the same numerology. - -- Corresponds to L1 parameter 'Resource-set-cekk' (see 38.214, section 5.1.2.2.3) - rateMatchPatternToAddModList SEQUENCE (SIZE (1..maxNrofRateMatchPatterns)) OF RateMatchPattern OPTIONAL, -- Need N - rateMatchPatternToReleaseList SEQUENCE (SIZE (1..maxNrofRateMatchPatterns)) OF RateMatchPatternId OPTIONAL, -- Need N - - -- Subcarrier spacing of SSB. Used only for non-initial access (e.g. SCells, PCell of SCG). - -- If the field is absent the UE shall assume the default value of the band. - -- Only the values 15 or 30 kHz (<6GHz), 120 or 240 kHz (>6GHz) are applicable. - subcarrierSpacing SubcarrierSpacing OPTIONAL, -- Need S - -- A cell-specific TDD UL/DL configuration. Corresponds to L1 parameter 'UL-DL-configuration-common' (see 38.213, section 11.1) - tdd-UL-DL-ConfigurationCommon TDD-UL-DL-ConfigCommon OPTIONAL, -- Cond TDD - -- A second cell-specific TDD UL/DL configuration. When tdd-UL-DL-ConfigurationCommon2 is configured, the cell specific DL/UL - -- pattern is a concatenation of the pattern specified in tdd-UL-DL-ConfigurationCommon and the pattern specified in - -- tdd-UL-DL-ConfigurationCommon2. Corresponds to L1 parameter 'UL-DL-configuration-common-Set2' (see 38.211, section 11.1) - tdd-UL-DL-ConfigurationCommon2 TDD-UL-DL-ConfigCommon OPTIONAL, -- Cond TDD - -- TX power that the NW used for SSB transmission. The UE uses it to estimate the RA preamble TX power. - -- (see 38.213, section 7.4) - ss-PBCH-BlockPower INTEGER (-60..50), - ... -} - -UplinkConfigCommon ::= SEQUENCE { - -- Absolute uplink frequency configuration and subcarrier specific virtual carriers. - frequencyInfoUL FrequencyInfoUL OPTIONAL, -- Cond InterFreqHOAndServCellAdd - -- The initial uplink BWP configuration for a SpCell (PCell of MCG or SCG). Corresponds to L1 parameter 'initial-UL-BWP'. - -- (see 38.331, section FFS_Section). - initialUplinkBWP BWP-UplinkCommon OPTIONAL -- Cond ServCellAdd -} - --- TAG-SERVING-CELL-CONFIG-COMMON-STOP --- TAG-SINR-RANGE-START - -SINR-Range ::= INTEGER(0..127) - --- TAG-SINR-RANGE-STOP --- TAG-SLOTFORMATCOMBINATIONSPERCELL-START - --- The SlotFormatCombinations applicable for one serving cell. Corresponds to L1 parameter 'cell-to-SFI' (see 38.213, section 11.1.1) -SlotFormatCombinationsPerCell ::= SEQUENCE { - -- The ID of the serving cell for which the slotFormatCombinations are applicable - servingCellId ServCellIndex, - - -- Reference subcarrier spacing for this Slot Format Combination. Corresponds to L1 parameter 'SFI-scs' (see 38.213, section FFS_Section) - subcarrierSpacing SubcarrierSpacing, - -- Reference subcarrier spacing for a Slot Format Combination on an FDD or SUL cell. - -- Corresponds to L1 parameter 'SFI-scs2' (see 38.213, section FFS_Section). - -- For FDD, subcarrierSpacing (SFI-scs) is the reference SCS for DL BWP and subcarrierSpacing2 (SFI-scs2) is the reference SCS for UL BWP. - -- For SUL, subcarrierSpacing (SFI-scs) is the reference SCS for non-SUL carrier and subcarrierSpacing2 (SFI-scs2) is the reference - -- SCS for SUL carrier. - subcarrierSpacing2 SubcarrierSpacing OPTIONAL, -- Need R - - -- A list with SlotFormatCombinations. Each SlotFormatCombination comprises of one or more SlotFormats (see 38.211, section 4.3.2) - -- FFS_CHECK: RAN1 indicates that the combinations could be of two different types... but they don't specify the second - slotFormatCombinations SEQUENCE (SIZE (1..maxNrofSlotFormatCombinationsPerSet)) OF SlotFormatCombination OPTIONAL, - - -- The (starting) position (bit) of the slotFormatCombinationId (SFI-Index) for this serving cell (servingCellId) within the DCI payload. - -- Corresponds to L1 parameter 'SFI-values' (see 38.213, section FFS_Section) - positionInDCI INTEGER(0..maxSFI-DCI-PayloadSize-1) OPTIONAL, - ... -} - -SlotFormatCombination ::= SEQUENCE { - -- This ID is used in the DCI payload to dynamically select this SlotFormatCombination. - -- Corresponds to L1 parameter 'SFI-index' (see 38.213, section FFS_Section) - slotFormatCombinationId SlotFormatCombinationId, - -- Slot formats that occur in consecutive slots in time domain order as listed here. The the slot formats are - -- defined in 38.211, table 4.3.2-3 and numbered with 0..255. - slotFormats SEQUENCE (SIZE (1..maxNrofSlotFormatsPerCombination)) OF INTEGER (0..255) -} - --- SFI index that is assoicated with a certian slot-format-combination --- Corresponds to L1 parameter 'SFI-index' (see 38.213, section FFS_Section) -SlotFormatCombinationId ::= INTEGER (0..maxNrofSlotFormatCombinationsPerSet-1) - --- TAG-SLOTFORMATCOMBINATIONSPERCELL-STOP --- TAG-SLOTFORMATINDICATOR-START - -SlotFormatIndicator ::= SEQUENCE { - -- RNTI used for SFI on the given cell - -- Corresponds to L1 parameter 'SFI-RNTI' (see 38.213, section 11.1.1) - sfi-RNTI RNTI-Value, - - -- Total length of the DCI payload scrambled with SFI-RNTI. - -- Corresponds to L1 parameter 'SFI-DCI-payload-length' (see 38.213, section 11.1.1) - dci-PayloadSize INTEGER (1..maxSFI-DCI-PayloadSize), - - -- A list of SlotFormatCombinations for the UE's serving cells. - -- Corresponds to L1 parameter 'SFI-cell-to-SFI' (see 38.213, section 11.1.1) - slotFormatCombToAddModList SEQUENCE (SIZE(1..maxNrofAggregatedCellsPerCellGroup)) OF SlotFormatCombinationsPerCell OPTIONAL, -- Need N - slotFormatCombToReleaseList SEQUENCE (SIZE(1..maxNrofAggregatedCellsPerCellGroup)) OF ServCellIndex OPTIONAL, -- Need N - ... -} - --- TAG-SLOTFORMATINDICATOR-STOP --- TAG-SPS-CONFIG-START - --- Downlink SPS may be configured on the PCell as well as on SCells. But it shall not be configured for more than --- one serving cell of a cell group at once. -SPS-Config ::= SEQUENCE { - -- Periodicity for DL SPS - -- Corresponds to L1 parameter 'semiPersistSchedIntervalDL' (see 38.214 and 38.321, section FFS_Section) - -- FFS-Value: Support also shorter periodicities for DL? - periodicity ENUMERATED {ms10, ms20, ms32, ms40, ms64, ms80, ms128, ms160, ms320, ms640, - spare6, spare5, spare4, spare3, spare2, spare1}, - -- Number of configured HARQ processes for SPS DL. Corresponds to L1 parameter 'numberOfConfSPS-Processes' (see 38.214, section FFS_Section) - nrofHARQ-Processes INTEGER (1..8), - -- HARQ resource for PUCCH for DL SPS. The network configures the resource either as format0 or format1. (see 38.214, section FFS_Section) - n1PUCCH-AN PUCCH-Resource OPTIONAL -- Need M -} - --- TAG-SPS-CONFIG-STOP --- TAG-SRB-IDENTITY-START - -SRB-Identity ::= INTEGER (1..3) - --- TAG-SRB-IDENTITY-STOP --- TAG-SRS-CONFIG-START - -SRS-Config ::= SEQUENCE { - srs-ResourceSetToReleaseList SEQUENCE (SIZE(0..maxNrofSRS-ResourceSets)) OF SRS-ResourceSetId OPTIONAL, -- Need N - srs-ResourceSetToAddModList SEQUENCE (SIZE(0..maxNrofSRS-ResourceSets)) OF SRS-ResourceSet OPTIONAL, -- Need N - - srs-ResourceToReleaseList SEQUENCE (SIZE(1..maxNrofSRS-Resources)) OF SRS-ResourceId OPTIONAL, -- Need N - srs-ResourceToAddModList SEQUENCE (SIZE(1..maxNrofSRS-Resources)) OF SRS-Resource OPTIONAL, -- Need N - - - -- If absent, UE applies TPC commands via accumulation. If disabled, UE applies the TPC command without accumulation - -- (this applies to SRS when a separate closed loop is configured for SRS) - -- Corresponds to L1 parameter 'Accumulation-enabled-srs' (see 38,213, section 7.3) - tpc-Accumulation ENUMERATED {disabled} OPTIONAL, -- Need S - ... -} - -SRS-ResourceSet ::= SEQUENCE { - -- The ID of this resource set. It is unique in the context of the BWP in which the parent SRS-Config is defined. - srs-ResourceSetId SRS-ResourceSetId, - -- The IDs of the SRS-Reosurces used in this SRS-ResourceSet - srs-ResourceIdList SEQUENCE (SIZE(1..maxNrofSRS-ResourcesPerSet)) OF SRS-ResourceId OPTIONAL, -- Cond Setup - - resourceType CHOICE { - aperiodic SEQUENCE { - -- The DCI "code point" upon which the UE shall transmit SRS according to this SRS resource set configuration. - -- Corresponds to L1 parameter 'AperiodicSRS-ResourceTrigger' (see 38.214, section 6.1.1.2) - aperiodicSRS-ResourceTrigger INTEGER (0..maxNrofSRS-TriggerStates-1), - -- ID of CSI-RS resource associated with this SRS resource set. (see 38.214, section 6.1.1.2) - csi-RS NZP-CSI-RS-ResourceId, - -- An offset in number of slots between the triggering DCI and the actual transmission of this SRS-ResourceSet. - -- If the field is absent the UE applies no offset (value 0) - slotOffset INTEGER (1..8) OPTIONAL, -- Need S - ... - }, - semi-persistent SEQUENCE { - -- ID of CSI-RS resource associated with this SRS resource set in non-codebook based operation. - -- Corresponds to L1 parameter 'SRS-AssocCSIRS' (see 38.214, section 6.2.1) - associatedCSI-RS NZP-CSI-RS-ResourceId OPTIONAL, -- Cond nonCodebook - ... - }, - periodic SEQUENCE { - -- ID of CSI-RS resource associated with this SRS resource set in non-codebook based operation. - -- Corresponds to L1 parameter 'SRS-AssocCSIRS' (see 38.214, section 6.2.1) - associatedCSI-RS NZP-CSI-RS-ResourceId OPTIONAL, -- Cond nonCodebook - ... - } - }, - -- Indicates if the SRS resource set is used for beam management vs. used for either codebook based or non-codebook based transmission. - -- Corresponds to L1 parameter 'SRS-SetUse' (see 38.214, section 6.2.1) - -- FFS_CHECK: Isn't codebook/noncodebook already known from the ulTxConfig in the SRS-Config? If so, isn't the only distinction - -- in the set between BeamManagement, AtennaSwitching and "Otherâ€? Or what happens if SRS-Config=Codebook but a Set=NonCodebook? - usage ENUMERATED {beamManagement, codebook, nonCodebook, antennaSwitching}, - - -- alpha value for SRS power control. Corresponds to L1 parameter 'alpha-srs' (see 38.213, section 7.3) - -- When the field is absent the UE applies the value 1 - alpha Alpha OPTIONAL, -- Need S - -- P0 value for SRS power control. The value is in dBm. Only even values (step size 2) are allowed. - -- Corresponds to L1 parameter 'p0-srs' (see 38.213, section 7.3) - p0 INTEGER (-202..24) OPTIONAL, -- Cond Setup - -- A reference signal (e.g. a CSI-RS config or a SSblock) to be used for SRS path loss estimation. - -- Corresponds to L1 parameter 'srs-pathlossReference-rs-config' (see 38.213, section 7.3) - pathlossReferenceRS CHOICE { - ssb-Index SSB-Index, - csi-RS-Index NZP-CSI-RS-ResourceId - } OPTIONAL, -- Need M - -- Indicates whether hsrs,c(i) = fc(i,1) or hsrs,c(i) = fc(i,2) (if twoPUSCH-PC-AdjustmentStates are configured) - -- or serarate close loop is configured for SRS. This parameter is applicable only for Uls on which UE also transmits PUSCH. - -- If absent or release, the UE applies the value sameAs-Fci1 - -- Corresponds to L1 parameter 'srs-pcadjustment-state-config' (see 38.213, section 7.3) - srs-PowerControlAdjustmentStates ENUMERATED { sameAsFci2, separateClosedLoop} OPTIONAL, -- Need S - ... -} - -SRS-ResourceSetId ::= INTEGER (0..maxNrofSRS-ResourceSets-1) - -SRS-Resource ::= SEQUENCE { - srs-ResourceId SRS-ResourceId, - nrofSRS-Ports ENUMERATED {port1, ports2, ports4}, - -- The PTRS port index for this SRS resource for non-codebook based UL MIMO. This is only applicable when the corresponding - -- PTRS-UplinkConfig is set to CP-OFDM. The ptrs-PortIndex configured here must be smaller than or equal to the maxNnrofPorts - -- configured in the PTRS-UplinkConfig. - -- Corresponds to L1 parameter 'UL-PTRS-SRS-mapping-non-CB' (see 38.214, section 6.1) - ptrs-PortIndex ENUMERATED {n0, n1 } OPTIONAL, -- Need R - -- Comb value (2 or 4) and comb offset (0..combValue-1). Corresponds to L1 parameter 'SRS-TransmissionComb' (see 38.214, section 6.2.1) - transmissionComb CHOICE { - n2 SEQUENCE { - combOffset-n2 INTEGER (0..1), - -- Cyclic shift configuration. Corresponds to L1 parameter 'SRS-CyclicShiftConfig' (see 38.214, section 6.2.1) - cyclicShift-n2 INTEGER (0..7) - }, - n4 SEQUENCE { - combOffset-n4 INTEGER (0..3), - -- Cyclic shift configuration. Corresponds to L1 parameter 'SRS-CyclicShiftConfig' (see 38.214, section 6.2.1) - cyclicShift-n4 INTEGER (0..11) - } - }, - -- OFDM symbol location of the SRS resource within a slot including number of OFDM symbols (N = 1, 2 or 4 per SRS resource), - -- startPosition (SRSSymbolStartPosition = 0..5; "0" refers to the last symbol, "1" refers to the second last symbol) and - -- RepetitionFactor (r = 1, 2 or 4). - -- Corresponds to L1 parameter 'SRS-ResourceMapping' (see 38.214, section 6.2.1 and 38.211, section 6.4.1.4). - -- FFS: Apparently, RAN1 considers replacing these three fields by a table in RAN1 specs and a corresponding index in ASN.1?! - resourceMapping SEQUENCE { - startPosition INTEGER (0..5), - nrofSymbols ENUMERATED {n1, n2, n4}, - repetitionFactor ENUMERATED {n1, n2, n4} - }, - -- Parameter(s) defining frequency domain position and configurable shift to align SRS allocation to 4 PRB grid. - -- Corresponds to L1 parameter 'SRS-FreqDomainPosition' (see 38.214, section 6.2.1) - freqDomainPosition INTEGER (0..67), - freqDomainShift INTEGER (0..268), - -- Includes parameters capturing SRS frequency hopping - -- Corresponds to L1 parameter 'SRS-FreqHopping' (see 38.214, section 6.2.1) - freqHopping SEQUENCE { - c-SRS INTEGER (0..63), - b-SRS INTEGER (0..3), - b-hop INTEGER (0..3) - }, - -- Parameter(s) for configuring group or sequence hopping - -- Corresponds to L1 parameter 'SRS-GroupSequenceHopping' (see 38.211, section FFS_Section) - groupOrSequenceHopping ENUMERATED { neither, groupHopping, sequenceHopping }, - -- Time domain behavior of SRS resource configuration. - -- Corresponds to L1 parameter 'SRS-ResourceConfigType' (see 38.214, section 6.2.1). - -- For codebook based uplink transmission, the network configures SRS resources in the same resource set with the same - -- time domain behavior on periodic, aperiodic and semi-persistent SRS. - -- FFS: Add configuration parameters for the different SRS resource types? - resourceType CHOICE { - aperiodic SEQUENCE { - ... - }, - semi-persistent SEQUENCE { - -- Periodicity and slot offset for for this SRS resource. All values in "number of slots". - -- sl1 corresponds to a periodicity of 1 slot, value sl2 corresponds to a periodicity of 2 slots, and so on. - -- For each periodicity the corresponding offset is given in number of slots. For periodicity sl1 the offset is 0 slots. - -- Corresponds to L1 parameter 'SRS-SlotConfig' (see 38.214, section 6.2.1) - periodicityAndOffset-sp SRS-PeriodicityAndOffset, - ... - }, - periodic SEQUENCE { - -- Periodicity and slot offset for for this SRS resource. All values in "number of slots" - -- sl1 corresponds to a periodicity of 1 slot, value sl2 corresponds to a periodicity of 2 slots, and so on. - -- For each periodicity the corresponding offset is given in number of slots. For periodicity sl1 the offset is 0 slots. - -- Corresponds to L1 parameter 'SRS-SlotConfig' (see 38.214, section 6.2.1) - periodicityAndOffset-p SRS-PeriodicityAndOffset, - ... - } - }, - -- Sequence ID used to initialize psedo random group and sequence hopping. - -- Corresponds to L1 parameter 'SRS-SequenceId' (see 38.214, section 6.2.1) - sequenceId BIT STRING (SIZE (10)), - - -- Configuration of the spatial relation between a reference RS and the target SRS. Reference RS can be SSB/CSI-RS/SRS - -- Corresponds to L1 parameter 'SRS-SpatialRelationInfo' (see 38.214, section 6.2.1) - spatialRelationInfo CHOICE { - ssb-Index SSB-Index, - csi-RS-Index NZP-CSI-RS-ResourceId, - srs SRS-ResourceId - } OPTIONAL, -- Need R - ... -} - -SRS-ResourceId ::= INTEGER (0..maxNrofSRS-Resources-1) - -SRS-PeriodicityAndOffset ::= CHOICE { - sl1 NULL, - sl2 INTEGER(0..1), - sl4 INTEGER(0..3), - sl5 INTEGER(0..4), - sl8 INTEGER(0..7), - sl10 INTEGER(0..9), - sl16 INTEGER(0..15), - sl20 INTEGER(0..19), - sl32 INTEGER(0..31), - sl40 INTEGER(0..39), - sl64 INTEGER(0..63), - sl80 INTEGER(0..79), - sl160 INTEGER(0..159), - sl320 INTEGER(0..319), - sl640 INTEGER(0..639), - sl1280 INTEGER(0..1279), - sl2560 INTEGER(0..2559) -} - --- TAG-SRS-CONFIG-STOP --- TAG-SRS-CARRIERSWITCHING-START -SRS-CarrierSwitching ::= SEQUENCE { - - -- Indicates the serving cell whose UL transmission may be interrupted during SRS transmission on a PUSCH-less cell. - -- During SRS transmission on a PUSCH-less cell, the UE may temporarily suspend the UL transmission on a serving cell with PUSCH - -- in the same CG to allow the PUSCH-less cell to transmit SRS. (see 38.214, section 6.2.1.3) - srs-SwitchFromServCellIndex INTEGER (0..31) OPTIONAL, -- Cond Setup - - -- Network configures the UE with either typeA-SRS-TPC-PDCCH-Group or typeB-SRS-TPC-PDCCH-Group, if any. - srs-TPC-PDCCH-Group CHOICE { - -- Type A trigger configuration for SRS transmission on a PUSCH-less SCell. - -- Corresponds to L1 parameter 'typeA-SRS-TPC-PDCCH-Group' (see 38.212, 38.213, section 7.3.1, 11.3) - typeA SEQUENCE (SIZE (1..32)) OF SRS-TPC-PDCCH-Config, - -- Type B trigger configuration for SRS transmission on a PUSCH-less SCell. - -- Corresponds to L1 parameter 'typeB-SRS-TPC-PDCCH-Config' (see 38.212, 38.213, section 7.3.1, 11.3) - typeB SRS-TPC-PDCCH-Config - } OPTIONAL, -- Cond Setup - - -- Maps a specific cell to a given SFI value within the DCI message - -- Corresponds to L1 parameter 'SRS-cell-to-SFI' (see 38.212, 38.213, section 7.3.1, 11.3) - srs-CellToSFI SEQUENCE (SIZE (1..maxNrofServingCells)) OF SlotFormatCombinationsPerCell OPTIONAL, -- Cond Setup - - -- A set of serving cells for monitoring PDCCH conveying SRS DCI format with CRC scrambled by TPC-SRS-RNTI - -- Corresponds to L1 parameter 'SRS-monitoring-cells' (see 38.212, 38.213, section 7.3.1, 11.3) - monitoringCells SEQUENCE (SIZE (1..maxNrofServingCells)) OF ServCellIndex OPTIONAL, -- Cond Setup - ... -} - --- One trigger configuration for SRS-Carrier Switching. (see 38.212, 38.213, section 7.3.1, 11.3) -SRS-TPC-PDCCH-Config ::= SEQUENCE { - -- The starting bit position of a block within the group DCI with SRS request fields (optional) and TPC commands - -- for a PUSCH-less SCell. (see 38.212, 38.213, section 7.3.1, 11.3) - startingBitOfFormat2-3 INTEGER (1..31) OPTIONAL, -- Cond Setup - -- The type of a field within the group DCI with SRS request fields (optional) for a PUSCH-less SCell, - -- which indicates how many bits in the field are for SRS request (0 or 1/2). - -- Note that for Type A, there is a common SRS request field for all SCells in the set, but each SCell has its - -- own TPC command bits. See TS 38.212. Network configures this field with the same value for all PUSCH-less SCells. - -- (see 38.212, 38.213, section 7.3.1, 11.3) - fieldTypeFormat2-3 INTEGER (0..1) OPTIONAL, -- Cond Setup - -- A list of paris of [cc-SetIndex; cc-IndexInOneCC-Set] (see 38.212, 38.213, section 7.3.1, 11.3) - -- FFS: Improve description. What is a "CC"? Where is a CC-Set defined? ... - srs-CC-SetIndexlist SEQUENCE (SIZE(1..4)) OF SRS-CC-SetIndex OPTIONAL -- Cond Setup -} - -SRS-CC-SetIndex ::= SEQUENCE { - -- Indicates the CC set index for Type A associated (see 38.212, 38.213, section 7.3.1, 11.3) - cc-SetIndex INTEGER (0..3) OPTIONAL, -- Cond Setup - -- Indicates the CC index in one CC set for Type A (see 38.212, 38.213, section 7.3.1, 11.3) - cc-IndexInOneCC-Set INTEGER (0..7) OPTIONAL -- Cond Setup -} - --- TAG-SRS-CARRIERSWITCHING-STOP --- TAG-SSB-INDEX-START - -SSB-Index ::= INTEGER (0..63) - --- TAG-SSB-INDEX-STOP --- TAG-SUBCARRIER-SPACING-START - --- The subcarrier spacing supported in NR. Restrictions applicable for certain frequencies, channels or signals are clarified --- in the fields that use this IE. -SubcarrierSpacing ::= ENUMERATED {kHz15, kHz30, kHz60, kHz120, kHz240, spare3, spare2, spare1} - - --- TAG-SUBCARRIER-SPACING-STOP --- TAG-TCI-STATE-START - -TCI-State ::= SEQUENCE { - tci-StateId TCI-StateId, - qcl-Type1 QCL-Info, - qcl-Type2 QCL-Info OPTIONAL, -- Need R - nrofPTRS-Ports ENUMERATED {n1, n2} OPTIONAL, -- Need R - ... -} - -QCL-Info ::= SEQUENCE { - - -- The carrier which the RS is located in. If the field is absent, it applies to the serving cell in which the TCI-State is configured - cell ServCellIndex OPTIONAL, -- Need R - - -- The DL BWP which the RS is located in. - bwp-Id BWP-Id OPTIONAL, -- Cond CSI-RS-Indicated - -- Cond NZP-CSI-RS-Indicated: mandatory if csi-rs or csi-RS-for-tracking is included, absent otherwise - referenceSignal CHOICE { - csi-rs NZP-CSI-RS-ResourceId, - ssb SSB-Index, - -- A set of CSI-RS resources for tracking - csi-RS-for-tracking NZP-CSI-RS-ResourceSetId - }, - qcl-Type ENUMERATED {typeA, typeB, typeC, typeD}, - ... -} - --- TAG-TCI-STATE-STOP --- TAG-TCI-STATEID-START - -TCI-StateId ::= INTEGER (0..maxNrofTCI-States-1) - --- TAG-TCI-STATEID-STOP --- TAG-TDD-UL-DL-CONFIG-START - -TDD-UL-DL-ConfigCommon ::= SEQUENCE { - -- Reference SCS used to determine the time domain boundaries in the UL-DL pattern which must be common across all subcarrier specific - -- virtual carriers, i.e., independent of the actual subcarrier spacing using for data transmission. - -- Only the values 15 or 30 kHz (<6GHz), 60 or 120 kHz (>6GHz) are applicable. - -- Corresponds to L1 parameter 'reference-SCS' (see 38.211, section FFS_Section) - referenceSubcarrierSpacing SubcarrierSpacing OPTIONAL, - -- Periodicity of the DL-UL pattern. Corresponds to L1 parameter 'DL-UL-transmission-periodicity' (see 38.211, section FFS_Section) - dl-UL-TransmissionPeriodicity ENUMERATED {ms0p5, ms0p625, ms1, ms1p25, ms2, ms2p5, ms5, ms10} OPTIONAL, - - -- Number of consecutive full DL slots at the beginning of each DL-UL pattern. - -- Corresponds to L1 parameter 'number-of-DL-slots' (see 38.211, Table 4.3.2-1) - nrofDownlinkSlots INTEGER (0..maxNrofSlots) OPTIONAL, - - -- Number of consecutive DL symbols in the beginning of the slot following the last full DL slot (as derived from nrofDownlinkSlots). - -- If the field is absent or released, there is no partial-downlink slot. - -- Corresponds to L1 parameter 'number-of-DL-symbols-common' (see 38.211, section FFS_Section). - nrofDownlinkSymbols INTEGER (0..maxNrofSymbols-1) OPTIONAL, -- Need R - - -- Number of consecutive full UL slots at the end of each DL-UL pattern. - -- Corresponds to L1 parameter 'number-of-UL-slots' (see 38.211, Table 4.3.2-1) - nrofUplinkSlots INTEGER (0..maxNrofSlots) OPTIONAL, - - -- Number of consecutive UL symbols in the end of the slot preceding the first full UL slot (as derived from nrofUplinkSlots). - -- If the field is absent or released, there is no partial-uplink slot. - -- Corresponds to L1 parameter 'number-of-UL-symbols-common' (see 38.211, section FFS_Section) - nrofUplinkSymbols INTEGER (0..maxNrofSymbols-1) OPTIONAL -- Need R -} - -TDD-UL-DL-ConfigDedicated ::= SEQUENCE { - -- The slotSpecificConfiguration allows overriding UL/DL allocations provided in tdd-UL-DL-configurationCommon. - -- FFS_ASN1: Consider making this an AddMod/Release list - -- FFS_ASN1: Replace absolute numbers by variables... once RAN1 confirms. - -- FFS_CHECK: This list will grow very large if used for many slots. - slotSpecificConfigurationsToAddModList SEQUENCE (SIZE (1..maxNrofSlots)) OF TDD-UL-DL-SlotConfig OPTIONAL, -- Need N - slotSpecificConfigurationsToreleaseList SEQUENCE (SIZE (1..maxNrofSlots)) OF TDD-UL-DL-SlotIndex OPTIONAL -- Need N -} - -TDD-UL-DL-SlotConfig ::= SEQUENCE { - -- Identifies a slot within a dl-UL-TransmissionPeriodicity (given in tdd-UL-DL-configurationCommon) - slotIndex TDD-UL-DL-SlotIndex, - - -- The direction (downlink or uplink) for the symbols in this slot. "allDownlink" indicates that all symbols in this slot are used - -- for downlink; "allUplink" indicates that all symbols in this slot are used for uplink; "explicit" indicates explicitly how many symbols - -- in the beginning and end of this slot are allocated to downlink and uplink, respectively. - symbols CHOICE { - allDownlink NULL, - allUplink NULL, - explicit SEQUENCE { - -- Number of consecutive DL symbols in the beginning of the slot identified by slotIndex. - -- If the field is absent the UE assumes that there are no leading DL symbols. - -- Corresponds to L1 parameter 'number-of-DL-symbols-dedicated' (see 38.211, section FFS_Section) - nrofDownlinkSymbols INTEGER (1..maxNrofSymbols-1) OPTIONAL, -- Need S - - -- Number of consecutive UL symbols in the end of the slot identified by slotIndex. - -- If the field is absent the UE assumes that there are no trailing UL symbols. - -- Corresponds to L1 parameter 'number-of-UL-symbols-dedicated' (see 38.211, section FFS_Section) - nrofUplinkSymbols INTEGER (1..maxNrofSymbols-1) OPTIONAL -- Need S - } - } -} - -TDD-UL-DL-SlotIndex ::= INTEGER (0..maxNrofSlots-1) - --- TAG-TDD-UL-DL-CONFIG-STOP - -TimeToTrigger ::= ENUMERATED { - ms0, ms40, ms64, ms80, ms100, ms128, ms160, ms256, - ms320, ms480, ms512, ms640, ms1024, ms1280, ms2560, - ms5120} - --- TAG-ZP-CSI-RS-RESOURCE-START - -ZP-CSI-RS-Resource ::= SEQUENCE { - -- ZP CSI-RS resource configuration ID - -- Corresponds to L1 parameter 'ZP-CSI-RS-ResourceConfigId' (see 38.214, section 5.1.4.2) - zp-CSI-RS-ResourceId ZP-CSI-RS-ResourceId, - -- OFDM symbol and subcarrier occupancy of the ZP-CSI-RS resource within a slot - resourceMapping CSI-RS-ResourceMapping, - -- Periodicity and slot offset for periodic/semi-persistent ZP-CSI-RS - -- Corresponds to L1 parameter 'ZP-CSI-RS-timeConfig' (see 38.214, section 5.1.4.2) - periodicityAndOffset CSI-ResourcePeriodicityAndOffset OPTIONAL, --Cond PeriodicOrSemiPersistent - - ... -} - -ZP-CSI-RS-ResourceId ::= INTEGER (0..maxNrofZP-CSI-RS-Resources-1) - --- TAG-ZP-CSI-RS-RESOURCE-STOP --- TAG-ZP-CSI-RS-RESOURCESET-START - -ZP-CSI-RS-ResourceSet ::= SEQUENCE { - zp-CSI-RS-ResourceSetId ZP-CSI-RS-ResourceSetId, - -- The list of ZP-CSI-RS-ResourceId identifying the ZP-CSI-RS-Resource elements belonging to this set. - zp-CSI-RS-ResourceIdList SEQUENCE (SIZE(1..maxNrofZP-CSI-RS-ResourcesPerSet)) OF ZP-CSI-RS-ResourceId, - -- Time domain behavior of ZP-CSI-RS resource configuration. - -- Corresponds to L1 parameter 'ZP-CSI-RS-ResourceConfigType' (see 38.214, section 5.1.4.2) - resourceType ENUMERATED {aperiodic, semiPersistent, periodic}, - ... -} - --- TAG-ZP-CSI-RS-RESOURCESET-STOP --- TAG-ZP-CSI-RS-RESOURCESETID-START - -ZP-CSI-RS-ResourceSetId ::= INTEGER (0..maxNrofZP-CSI-RS-ResourceSets-1) - --- TAG-ZP-CSI-RS-RESOURCESETID-STOP --- TAG-BANDCOMBINATIONLIST-START - -BandCombinationList ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombination - -BandCombination ::= SEQUENCE { - bandAndDL-ParametersList BandAndDL-ParametersList, - bandCombinationsUL BIT STRING (SIZE (1.. maxBandComb)), - bandCombinationParametersList SEQUENCE (SIZE (1..maxBandComb)) OF BandCombinationParameters OPTIONAL -} - -BandAndDL-ParametersList ::= SEQUENCE (SIZE (1..maxSimultaneousBands)) OF BandAndDL-Parameters - -BandAndDL-Parameters ::= CHOICE { - bandAndDL-ParametersEUTRA BandAndDL-ParametersEUTRA, - bandAndDL-ParametersNR BandAndDL-ParametersNR -} -BandCombinationParameters ::= SEQUENCE { - ca-ParametersNR CA-ParametersNR OPTIONAL, - mrdc-Parameters MRDC-Parameters OPTIONAL -} - -CA-ParametersNR ::= SEQUENCE { - multipleTimingAdvances ENUMERATED {supported} OPTIONAL, --- R4 2-5: Simultaneous reception and transmission for inter band CA (TDD-TDD or TDD-FDD) - simultaneousRxTxInterBandCA ENUMERATED {supported} OPTIONAL, --- BCS related to R4 2-1 and Updated CA BW class in R4-1803374 - supportedBandwidthCombinationSet BIT STRING (SIZE (1..32)) OPTIONAL -} - -MRDC-Parameters ::= SEQUENCE { - singleUL-Transmission ENUMERATED {supported} OPTIONAL, --- R4 1-10: Support of EN-DC with LTE-NR coexistence in UL sharing from UE perspective - ul-SharingEUTRA-NR ENUMERATED {supported} OPTIONAL, --- R4 1-11: Switching time between LTE UL and NR UL for EN-DC with LTE-NR coexistence in UL sharing from UE perspective - ul-SwitchingTimeEUTRA-NR ENUMERATED {type1, type2} OPTIONAL, --- R4 2-4: Simultaneous reception and transmission for inter-band EN-DC (TDD-TDD or TDD-FDD) - simultaneousRxTxInterBandENDC ENUMERATED {supported} OPTIONAL, --- R4 2-6: Asynchronous FDD-FDD intra-band EN-DC - asyncIntraBandENDC ENUMERATED {supported} OPTIONAL, - basebandProcesingCombinationMRDC BasebandProcessingCombinationMRDC -} - -BandAndDL-ParametersEUTRA ::= SEQUENCE { - bandEUTRA FreqBandIndicatorEUTRA, - ca-BandwidthClassDL-EUTRA CA-BandwidthClassEUTRA OPTIONAL, - intraBandContiguousCC-InfoDL-EUTRA-List SEQUENCE (SIZE (1.. maxNrofServingCellsEUTRA)) OF IntraBandContiguousCC-InfoDL-EUTRA OPTIONAL -} - -BandAndDL-ParametersNR ::= SEQUENCE { - bandNR FreqBandIndicatorNR, - ca-BandwidthClassDL CA-BandwidthClassNR OPTIONAL, --- R4 2-3: Non-contiguous intra-band CA frequency separation class for FR2 as in the RAN4 LS R4-1803363 - intraBandFreqSeparationDL FreqSeparationClass OPTIONAL, - intraBandContiguousCC-InfoDL-List SEQUENCE (SIZE (1.. maxNrofServingCells)) OF IntraBandContiguousCC-InfoDL OPTIONAL -} - -IntraBandContiguousCC-InfoDL ::= SEQUENCE { --- Related to RAN4 LS R2-1804078 - maxNumberMIMO-LayersPDSCH MIMO-LayersDL OPTIONAL -} - -IntraBandContiguousCC-InfoDL-EUTRA ::= SEQUENCE { --- Related to RAN4 LS R2-1804078 - mimo-CapabilityDL ENUMERATED {twoLayers, fourLayers, eightLayers} OPTIONAL -} - --- TAG-BANDCOMBINATIONLIST-STOP --- TAG-BANDCOMBINATIONPARAMETERSULLIST-START - -BandCombinationParametersUL-List ::= SEQUENCE (SIZE (1..maxBandComb)) OF BandCombinationParametersUL - -BandCombinationParametersUL ::= SEQUENCE (SIZE (1.. maxSimultaneousBands)) OF BandParametersUL - -BandParametersUL ::= CHOICE { - bandParametersUL-EUTRA BandParametersUL-EUTRA, - bandParametersUL-NR BandParametersUL-NR -} - -BandParametersUL-EUTRA ::= SEQUENCE { - ca-BandwidthClassUL-EUTRA CA-BandwidthClassEUTRA OPTIONAL, - intraBandContiguousCC-InfoUL-EUTRA-List SEQUENCE (SIZE (1.. maxNrofServingCellsEUTRA)) OF IntraBandContiguousCC-InfoUL-EUTRA OPTIONAL -} - -BandParametersUL-NR ::= SEQUENCE { - ca-BandwidthClassUL CA-BandwidthClassNR OPTIONAL, --- R4 2-3: Non-contiguous intra-band CA frequency separation class for FR2 as in the RAN4 LS R4-1803363 - intraBandFreqSeparationUL FreqSeparationClass OPTIONAL, - intraBandContiguousCC-InfoUL-List SEQUENCE (SIZE (1.. maxNrofServingCells)) OF IntraBandContiguousCC-InfoUL OPTIONAL -} - -IntraBandContiguousCC-InfoUL ::= SEQUENCE { --- Related to RAN4 LS R2-1804078 - maxNumberMIMO-LayersCB-PUSCH MIMO-LayersUL OPTIONAL, - maxNumberMIMO-LayersNonCB-PUSCH MIMO-LayersUL OPTIONAL -} - -IntraBandContiguousCC-InfoUL-EUTRA ::= SEQUENCE { --- Related to RAN4 LS R2-1804078 - mimo-CapabilityUL ENUMERATED {twoLayers, fourLayers} OPTIONAL -} - --- TAG-BANDCOMBINATIONPARAMETERSULLIST-STOP --- TAG-BASEBANDCOMBINATIONPARAMETERSULLIST-START - -BasebandCombinationParametersUL-List ::= SEQUENCE (SIZE (1..maxBasebandProcComb)) OF BasebandCombinationParametersUL - -BasebandCombinationParametersUL ::= SEQUENCE (SIZE (1..maxSimultaneousBands)) OF BasebandParametersPerBandUL - -BasebandParametersPerBandUL ::= SEQUENCE { - ca-BandwidthClassUL CA-BandwidthClassNR, - freqRange ENUMERATED {fr1, fr2}, - basebandParametersPerCC-UL SEQUENCE (SIZE (1.. maxNrofServingCells)) OF BasebandParametersPerCC-UL -} - -BasebandParametersPerCC-UL ::= SEQUENCE { --- R4 2-2: Simultaneous reception or transmission with same or different numerologies in CA --- It is expressed by the combination of SCS whether simultaneous RxTx is supported or not. - supportedSubcarrierSpacingUL SubcarrierSpacing, --- Accoding to the RAN4 LS R4-1803563, maximum Bandwidth supported per CC is added in BPC --- FFS how to work together with BCS and max BW for each CC to be defined for each CA band combination in the RAN4 spec. - supportedBandwidthUL CHOICE { - fr1 ENUMERATED {mhz5, mhz10, mhz15, mhz20, mhz25, mhz30, mhz40, mhz50, mhz60, mhz80, mhz100}, - fr2 ENUMERATED {mhz50, mhz100, mhz200, mhz400} - }, - -- R2-1800012. To be confirmed by RAN1 - scalingFactor0dot75 ENUMERATED {supported} OPTIONAL, --- R1 2-14: Codebook based PUSCH MIMO transmission. Absence of this field implies that CB-based PUSCH is not supported. - maxNumberMIMO-LayersCB-PUSCH MIMO-LayersUL OPTIONAL, --- R1 2-15: Non-codebook based PUSCH MIMO transmission. Absence of this field implies that Non-CB-based PUSCH is not supported. - maxNumberMIMO-LayersNonCB-PUSCH MIMO-LayersUL OPTIONAL, --- Accoding to the RAN4 LS R4-1803563, modulation order is added per CC granularity in BPC --- FFS whether all of modulation order specified in the spec need to be signalled. --- FFS how to address the requirements agreed by RAN4, e.g. mandaotry w/o capabiltiy for 64QAM. mandaotry with capabiltiy for DL 256QAM in FR1. - supportedModulationOrderUL ModulationOrder OPTIONAL, --- R1 2-53: SRS resources - supportedSRS-Resources SRS-Resources OPTIONAL, --- R1 2-55: SRS Tx switch - srs-TxSwitch SRS-TxSwitch OPTIONAL, --- R1 2-57: Support low latency CSI feedback - lowLatencyCSI-Feedback ENUMERATED {supported} OPTIONAL, --- R1 5-12 & 5-12a: Up to 2/7 PUSCHs per slot for different TBs - pusch-DifferentTB-PerSlot SEQUENCE { - scs-15kHz ENUMERATED {upto2, upto7} OPTIONAL, - scs-30kHz ENUMERATED {upto2, upto7} OPTIONAL, - scs-60kHz ENUMERATED {upto2, upto7} OPTIONAL, - scs-120kHz ENUMERATED {upto2, upto7} OPTIONAL - } OPTIONAL, --- R1 6-7: Two PUCCH group - twoPUCCH-Group ENUMERATED {supported} OPTIONAL, --- R1 6-8: Different numerology across PUCCH groups - diffNumerologyAcrossPUCCH-Group ENUMERATED {supported} OPTIONAL, --- R1 6-9: Different numerologies across carriers within the same PUCCH group - diffNumerologyWithinPUCCH-Group ENUMERATED {supported} OPTIONAL, --- R1 6-10: Cross carrier scheduling - crossCarrierScheduling ENUMERATED {supported} OPTIONAL, --- R1 6-11: Number of supported TAGs - supportedNumberTAG ENUMERATED {n2, n3, n4} OPTIONAL, --- R1 6-18: Supplemental uplink with dynamic switch - dynamicSwitchSUL ENUMERATED {supported} OPTIONAL, --- R1 6-19: Simultaneous transmission of SRS on an SUL/non-SUL carrier and PUSCH/PUCCH/SRS/PRACH on the other UL carrier in the same cell --- Details on the channel/signal combination are to be described in TS 38.306 - simultaneousTxSUL-NonSUL ENUMERATED {supported} OPTIONAL, --- R1 6-22: UL search space sharing for CA - searchSpaceSharingCA-UL ENUMERATED {supported} OPTIONAL -} - --- TAG-BASEBANDCOMBINATIONPARAMETERSULLIST-STOP --- TAG-BASEBANDPROCESSINGCOMBINATIONMRDC-START - -BasebandProcessingCombinationMRDC ::= SEQUENCE (SIZE (1..maxBasebandProcComb)) OF BasebandProcessingCombinationLink - -BasebandProcessingCombinationLink ::= SEQUENCE { - basebandProcessingCombinationIndexMN BasebandProcessingCombinationIndex, - basebandProcessingCombinationLinkedIndexSN SEQUENCE (SIZE (1..maxBasebandProcComb)) OF BasebandProcessingCombinationIndex -} - -BasebandProcessingCombinationIndex ::= INTEGER (1..maxBasebandProcComb) - --- TAG-BASEBANDPROCESSINGCOMBINATIONMRDC-STOP --- TAG-CA-BANDWIDTHCLASSNR-START - --- Updated based on R4-1803374 -CA-BandwidthClassNR ::= ENUMERATED {a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, ...} - --- TAG-CA-BANDWIDTHCLASSNR-STOP --- TAG-CA-BANDWIDTHCLASSEUTRA-START - -CA-BandwidthClassEUTRA ::= ENUMERATED {a, b, c, d, e, f, ...} - --- TAG-CA-BANDWIDTHCLASSEUTRA-STOP --- TAG-FREQ-BAND-INDICATOR-EUTRA-START - -FreqBandIndicatorEUTRA ::= INTEGER (1..maxBandsEUTRA) - --- TAG-FREQ-BAND-INDICATOR-EUTRA-STOP --- TAG-FREQBANDLIST-START - -FreqBandList ::= SEQUENCE (SIZE (1..maxBandsMRDC)) OF FreqBandInformation - -FreqBandInformation ::= CHOICE { - bandEUTRA FreqBandIndicatorEUTRA, - bandNR FreqBandIndicatorNR -} - --- TAG-FREQBANDLIST-STOP --- TAG-FREQSEPARATIONCLASS-START - -FreqSeparationClass ::= ENUMERATED {c1, c2, c3, ...} - --- TAG-FREQSEPARATIONCLASS-STOP --- TAG-MIMO-LAYERS-START - -MIMO-LayersDL ::= ENUMERATED {twoLayers, fourLayers, eightLayers} - -MIMO-LayersUL ::= ENUMERATED {oneLayer, twoLayers, fourLayers} - --- TAG-MIMO-LAYERS-STOP --- TAG-MODULATION-ORDER-START - -ModulationOrder ::= ENUMERATED {bpsk-halfpi, bpsk, qpsk, qam16, qam64, qam256} - --- TAG-MODULATION-ORDER-STOP --- TAG-RAT-TYPE-START - -RAT-Type ::= ENUMERATED {nr, eutra-nr, spare2, spare1, ...} - --- TAG-RAT-TYPE-STOP --- TAG-SUPPORTEDBASEBANDPROCESSINGCOMBINATION-START - -SupportedBasebandProcessingCombination ::= SEQUENCE (SIZE (1..maxBasebandProcComb)) OF BasebandProcessingCombination - -BasebandProcessingCombination ::= SEQUENCE { - basebandParametersDL SEQUENCE (SIZE (1..maxSimultaneousBands)) OF BasebandParametersPerBandDL, - basebandParametersUL BIT STRING (SIZE (1..maxBasebandProcComb))} - -BasebandParametersPerBandDL ::= SEQUENCE { - ca-BandwidthClassDL CA-BandwidthClassNR, - freqRange ENUMERATED {fr1, fr2}, - basebandParametersPerCC-DL SEQUENCE (SIZE (1.. maxNrofServingCells)) OF BasebandParametersPerCC-DL -} - -BasebandParametersPerCC-DL ::= SEQUENCE { --- R4 2-2: Simultaneous reception or transmission with same or different numerologies in CA --- It is expressed by the combination of SCS whether simultaneous RxTx is supported or not. - supportedSubcarrierSpacingDL SubcarrierSpacing, --- Accoding to the RAN4 LS R4-1803563, maximum Bandwidth supported per CC is added in BPC --- FFS how to work together with BCS and max BW for each CC to be defined for each CA band combination in the RAN4 spec. - supportedBandwidthDL CHOICE { - fr1 ENUMERATED {mhz5, mhz10, mhz15, mhz20, mhz25, mhz30, mhz40, mhz50, mhz60, mhz80, mhz100}, - fr2 ENUMERATED {mhz50, mhz100, mhz200, mhz400} - }, --- R2-1800012. To be confirmed by RAN1 - scalingFactor0dot75 ENUMERATED {supported} OPTIONAL, --- R1 2-2: PDSCH beam switching - timeDurationForQCL SEQUENCE { - scs-60kHz ENUMERATED {s7, s14, s28} OPTIONAL, - sch-120kHz ENUMERATED {s14, s28} OPTIONAL - } OPTIONAL, --- R1 1-10: Support of SCell without SS/PBCH block - scellWithoutSSB ENUMERATED {supported} OPTIONAL, --- R1 1-11: Support of CSI-RS RRM measurement for SCell without SS/PBCH block - csi-RS-MeasSCellWithoutSSB ENUMERATED {supported} OPTIONAL, --- R1 2-3: PDSCH MIMO layers. Absence of this field implies support of one layer. - maxNumberMIMO-LayersPDSCH MIMO-LayersDL OPTIONAL, --- Accoding to the RAN4 LS R4-1803563, modulation order is added per CC granularity in BPC --- FFS whether all of modulation order specified in the spec need to be signalled. --- FFS how to address the requirements agreed by RAN4, e.g. mandaotry w/o capabiltiy for 64QAM. mandaotry with capabiltiy for DL 256QAM in FR1. - supportedModulationOrderDL ModulationOrder OPTIONAL, --- R1 2-15a: Association between CSI-RS and SRS - srs-AssocCSI-RS ENUMERATED {supported} OPTIONAL, --- R1 3-1a: For type 1 CSS with dedicated RRC configuration and for type 3 CSS, UE specific SS, CORESET resource allocation of 6RB bit-map and duration 3 OFDM symbols for FR2 - type1-3-CSS ENUMERATED {supported} OPTIONAL, --- R1 3-5 & 3-5a: For type 1 with dedicated RRC configuration, type 3, and UE-SS,, monitoring occasion can be any OFDM symbol(s) of a slot for Case 2 (with a DCI gap) - pdcchMonitoringAnyOccasions ENUMERATED {withoutDCI-gap, withDCI-gap} OPTIONAL, --- R1 5-1a: UE specific RRC configure UL/DL assignment - ue-SpecificUL-DL-Assignment ENUMERATED {supported} OPTIONAL, --- R1 5-11 & 5-11a: Up to 2/7 unicast PDSCHs per slot for different TBs - pdsch-DifferentTB-PerSlot SEQUENCE { - scs-15kHz ENUMERATED {upto2, upto7} OPTIONAL, - scs-30kHz ENUMERATED {upto2, upto7} OPTIONAL, - scs-60kHz ENUMERATED {upto2, upto7} OPTIONAL, - scs-120kHz ENUMERATED {upto2, upto7} OPTIONAL - } OPTIONAL, --- R1 6-10: Cross carrier scheduling - crossCarrierScheduling ENUMERATED {supported} OPTIONAL, --- R1 6-21: DL search space sharing for CA - searchSpaceSharingCA-DL ENUMERATED {supported} OPTIONAL -} - --- TAG-SUPPORTEDBASEBANDPROCESSINGCOMBINATION-STOP --- TAG-UE-CAPABILITY-RAT-CONTAINER-LIST-START - -UE-CapabilityRAT-ContainerList ::=SEQUENCE (SIZE (0.. maxRAT-CapabilityContainers)) OF UE-CapabilityRAT-Container - -UE-CapabilityRAT-Container ::= SEQUENCE { - rat-Type RAT-Type, - ue-CapabilityRAT-Container OCTET STRING -} - --- TAG-UE-CAPABILITY-RAT-CONTAINER-LIST-STOP --- TAG-UE-MRDC-CAPABILITY-START - -UE-MRDC-Capability ::= SEQUENCE { - measParametersMRDC MeasParametersMRDC OPTIONAL, - rf-ParametersMRDC RF-ParametersMRDC, - phy-ParametersMRDC Phy-ParametersMRDC OPTIONAL, - generalParametersMRDC GeneralParametersMRDC-XDD-Diff OPTIONAL, - fdd-Add-UE-MRDC-Capabilities UE-MRDC-CapabilityAddXDD-Mode OPTIONAL, - tdd-Add-UE-MRDC-Capabilities UE-MRDC-CapabilityAddXDD-Mode OPTIONAL, - fr1-Add-UE-MRDC-Capabilities UE-MRDC-CapabilityAddFRX-Mode OPTIONAL, - fr2-Add-UE-MRDC-Capabilities UE-MRDC-CapabilityAddFRX-Mode OPTIONAL, - lateNonCriticalExtension OCTET STRING OPTIONAL, - nonCriticalExtension SEQUENCE {} OPTIONAL -} - -UE-MRDC-CapabilityAddXDD-Mode ::= SEQUENCE { - phy-ParametersMRDC-XDD-Diff Phy-ParametersMRDC-XDD-Diff OPTIONAL, - measParametersMRDC-XDD-Diff MeasParametersMRDC-XDD-Diff OPTIONAL, - generalParametersMRDC-XDD-Diff GeneralParametersMRDC-XDD-Diff OPTIONAL -} - -UE-MRDC-CapabilityAddFRX-Mode ::= SEQUENCE { - phy-ParametersMRDC-FRX-Diff Phy-ParametersMRDC-FRX-Diff OPTIONAL, - measParametersMRDC-FRX-Diff MeasParametersMRDC-FRX-Diff -} - -RF-ParametersMRDC ::= SEQUENCE { - supportedBandCombination BandCombinationList, - bandCombinationParametersUL-List BandCombinationParametersUL-List -} - -Phy-ParametersMRDC ::= SEQUENCE { - phy-ParametersMRDC-XDD-Diff Phy-ParametersMRDC-XDD-Diff OPTIONAL, - phy-ParametersMRDC-FRX-Diff Phy-ParametersMRDC-FRX-Diff OPTIONAL -} - -Phy-ParametersMRDC-XDD-Diff ::= SEQUENCE { --- R1 8-1: Dynamic power sharing for LTE-NR DC - dynamicPowerSharing ENUMERATED {supported} OPTIONAL, --- R1 6-13 & 8-2: Case 1 Single Tx UL LTE-NR DC - tdm-Pattern ENUMERATED {supported} OPTIONAL -} -Phy-ParametersMRDC-FRX-Diff ::= SEQUENCE { --- R1 8-1: Dynamic power sharing for LTE-NR DC - dynamicPowerSharing ENUMERATED {supported} OPTIONAL, --- R1 6-13 & 8-2: Case 1 Single Tx UL LTE-NR DC - tdm-Pattern ENUMERATED {supported} OPTIONAL -} - -MeasParametersMRDC ::= SEQUENCE { - measParametersMRDC-Common MeasParametersMRDC-Common, - measParametersMRDC-XDD-Diff MeasParametersMRDC-XDD-Diff OPTIONAL, - measParametersMRDC-FRX-Diff MeasParametersMRDC-FRX-Diff -} - -MeasParametersMRDC-Common ::= SEQUENCE { --- R4 3-1: Independent measurement gap configurations for FR1 and FR2 - independentGapConfig ENUMERATED {supported} OPTIONAL -} - -MeasParametersMRDC-XDD-Diff ::= SEQUENCE { - sftd-MeasPSCell ENUMERATED {supported} OPTIONAL, - sftd-MeasNR-Cell ENUMERATED {supported} OPTIONAL -} - -MeasParametersMRDC-FRX-Diff ::= SEQUENCE { --- R4 3-2: Simultaneous reception of data and SS block with different numerologies when UE conducts the serving cell measurement or intra-frequency measurement - simultaneousRxDataSSB-DiffNumerology ENUMERATED {supported} OPTIONAL -} - -GeneralParametersMRDC-XDD-Diff ::= SEQUENCE { - splitSRB-WithOneUL-Path ENUMERATED {supported} OPTIONAL, - splitDRB-withUL-Both-MCG-SCG ENUMERATED {supported} OPTIONAL, - srb3 ENUMERATED {supported} OPTIONAL -} - --- TAG-UE-MRDC-CAPABILITY-STOP --- TAG-UE-NR-CAPABILITY-START - -UE-NR-Capability ::= SEQUENCE { - pdcp-Parameters PDCP-Parameters, - rlc-Parameters RLC-Parameters OPTIONAL, - mac-Parameters MAC-Parameters OPTIONAL, - phy-Parameters Phy-Parameters, - rf-Parameters RF-Parameters, - measParameters MeasParameters OPTIONAL, - fdd-Add-UE-NR-Capabilities UE-NR-CapabilityAddXDD-Mode OPTIONAL, - tdd-Add-UE-NR-Capabilities UE-NR-CapabilityAddXDD-Mode OPTIONAL, - fr1-Add-UE-NR-Capabilities UE-NR-CapabilityAddFRX-Mode OPTIONAL, - fr2-Add-UE-NR-Capabilities UE-NR-CapabilityAddFRX-Mode OPTIONAL, - lateNonCriticalExtension OCTET STRING OPTIONAL, - nonCriticalExtension SEQUENCE {} OPTIONAL -} - -UE-NR-CapabilityAddXDD-Mode ::= SEQUENCE { - phy-ParametersXDD-Diff Phy-ParametersXDD-Diff OPTIONAL, - mac-ParametersXDD-Diff MAC-ParametersXDD-Diff OPTIONAL, - measParametersXDD-Diff MeasParametersXDD-Diff OPTIONAL -} - -UE-NR-CapabilityAddFRX-Mode ::= SEQUENCE { - phy-ParametersFRX-Diff Phy-ParametersFRX-Diff OPTIONAL, - measParametersFRX-Diff MeasParametersFRX-Diff OPTIONAL -} - -Phy-Parameters ::= SEQUENCE { - phy-ParametersCommon Phy-ParametersCommon OPTIONAL, - phy-ParametersXDD-Diff Phy-ParametersXDD-Diff OPTIONAL, - phy-ParametersFRX-Diff Phy-ParametersFRX-Diff OPTIONAL, - phy-ParametersFR1 Phy-ParametersFR1 OPTIONAL, - phy-ParametersFR2 Phy-ParametersFR2 OPTIONAL, - supportedBasebandProcessingCombination SupportedBasebandProcessingCombination, - basebandCombinationParametersUL-List BasebandCombinationParametersUL-List -} - -Phy-ParametersCommon ::= SEQUENCE { --- R1 1-9: CSI-RS based CFRA for HO - csi-RS-CFRA-ForHO ENUMERATED {supported} OPTIONAL, --- R1 2-11: Downlink dynamic PRB bundling (DL) - dynamicPRB-BundlingDL ENUMERATED {supported} OPTIONAL, --- R1 2-32a: Semi-persistent CSI report on PUCCH - sp-CSI-ReportPUCCH ENUMERATED {supported} OPTIONAL, --- R1 2-32b: Semi-persistent CSI report on PUSCH - sp-CSI-ReportPUSCH ENUMERATED {supported} OPTIONAL, --- R1 2-34: NZP-CSI-RS based interference measurement - nzp-CSI-RS-IntefMgmt ENUMERATED {supported} OPTIONAL, --- R1 2-42: Support Type II SP-CSI feedback on long PUCCH - type2-SP-CSI-Feedback-LongPUCCH ENUMERATED {supported} OPTIONAL, --- R1 3-3: More than one CORESET per BWP (in addition to CORESET #0) - multipleCORESET ENUMERATED {supported} OPTIONAL, --- R1 3-6: Dynamic SFI monitoring and dynamic UL/DL determination - dynamicSFI ENUMERATED {supported} OPTIONAL, --- R1 3-7: Precoder-granularity of CORESET size - precoderGranularityCORESET ENUMERATED {supported} OPTIONAL, --- R1 4-10: Dynamic HARQ-ACK codebook - dynamicHARQ-ACK-Codebook ENUMERATED {supported} OPTIONAL, --- R1 4-11: Semi-static HARQ-ACK codebook - semiStaticHARQ-ACK-Codebook ENUMERATED {supported} OPTIONAL, --- R1 4-12: HARQ-ACK spatial bundling for PUCCH or PUSCH per PUCCH group - spatialBundlingHARQ-ACK ENUMERATED {supported} OPTIONAL, --- R1 4-21: Dynamic beta-offset configuration and indication for HARQ-ACK and/or CSI - dynamicBetaOffsetInd-HARQ-ACK-CSI ENUMERATED {supported} OPTIONAL, --- R1 4-23: Repetitions for PUCCH format 1, 3,and 4 over multiple slots with K = 1, 2, 4, 8 - pucch-Repetition-F1-3-4 ENUMERATED {supported} OPTIONAL, --- R1 5-2: RA type 0 for PUSCH - ra-Type0-PUSCH ENUMERATED {supported} OPTIONAL, --- R1 5-3: Dynamic switching between RA type 0 and RA type 1 for PDSCH - dynamicSwitchRA-Type0-1-PDSCH ENUMERATED {supported} OPTIONAL, --- R1 5-4: Dynamic switching between RA type 0 andRA type 1 for PUSCH - dynamicSwitchRA-Type0-1-PUSCH ENUMERATED {supported} OPTIONAL, --- R1 5-6: PDSCH mapping type A with less than 7 OFDM symbols - pdsch-MappingTypeA ENUMERATED {supported} OPTIONAL, --- R1 5-6a: PDSCH mapping type B - pdsch-MappingTypeB ENUMERATED {supported} OPTIONAL, --- R1 5-7: Interleaving for VRB-to-PRB mapping for PDSCH - interleavingVRB-ToPRB-PDSCH ENUMERATED {supported} OPTIONAL, --- R1 5-8: Interleaving for VRB-to-PRB mapping for PUSCH - interleavingVRB-ToPRB-PUSCH ENUMERATED {supported} OPTIONAL, --- R1 5-10: Inter-slot frequency hopping for PUSCH - interSlotFreqHopping-PUSCH ENUMERATED {supported} OPTIONAL, --- R1 5-13: Type 1 configured PUSCH repetitions within a slot - type1-PUSCH-RepetitionOneSlot ENUMERATED {supported} OPTIONAL, --- R1 5-14: Type 1 configured PUSCH repetitions over multiple slots - type1-PUSCH-RepetitionMultiSlots ENUMERATED {supported} OPTIONAL, --- R1 5-15: Type 2 configured PUSCH repetitions within a slot - type2-PUSCH-RepetitionOneSlot ENUMERATED {supported} OPTIONAL, --- R1 5-16: Type 2 configured PUSCH repetitions over multiple slots - type2-PUSCH-RepetitionMultiSlots ENUMERATED {supported} OPTIONAL, --- R1 5-17: PUSCH repetitions over multiple slots - pusch-RepetitionMultiSlots ENUMERATED {supported} OPTIONAL, --- R1 5-17a: PDSCH repetitions over multiple slots - pdsch-RepetitionMultiSlots ENUMERATED {supported} OPTIONAL, --- R1 5-18: DL SPS - downlinkSPS ENUMERATED {supported} OPTIONAL, --- R1 5-19: Type 1 Configured UL grant - configuredUL-GrantType1 ENUMERATED {supported} OPTIONAL, --- R1 5-20: Type 2 Configured UL grant - configuredUL-GrantType2 ENUMERATED {supported} OPTIONAL, --- R1 5-21: Pre-emption indication for DL - pre-EmptIndication-DL ENUMERATED {supported} OPTIONAL, --- R1 5-22 & 5-25: CBG-based re-transmission for DL/UL using CBGTI - cbg-TransIndication BIT STRING (SIZE (2)) OPTIONAL, --- R1 5-23: CBGFI for CBG-based re-transmission for DL - cbg-FlushIndication-DL ENUMERATED {supported} OPTIONAL, --- R1 5-24: Dynamic HARQ-ACK codebook using sub-codebooks for CBG-based re-transmission for DL - dynamicHARQ-ACK-CodeB-CBG-Retx-DL ENUMERATED {supported} OPTIONAL, --- R1 5-26: Semi-static rate-matching resource set configuration for DL - rateMatchingResrcSetSemi-Static ENUMERATED {supported} OPTIONAL, --- R1 5-27: Dynamic rate-matching resource set configuration for DL - rateMatchingResrcSetDynamic ENUMERATED {supported} OPTIONAL, --- R1 5-28: Rate-matching around LTE CRS - rateMatchingLTE-CRS ENUMERATED {supported} OPTIONAL, --- R4 1-8: BWP switching delay - bwp-SwitchingDelay ENUMERATED {type1, type2} OPTIONAL -} - -Phy-ParametersXDD-Diff ::= SEQUENCE { --- R1 4-2: 2 PUCCH of format 0 or 2 in consecutive symbols - twoPUCCH-F0-2-ConsecSymbols ENUMERATED {supported} OPTIONAL, --- R1 8-7: UL power control with 2 PUSCH closed loops - twoDifferentTPC-Loop-PUSCH ENUMERATED {supported} OPTIONAL, --- R1 8-8: UL power control with 2 PUCCH closed loops - twoDifferentTPC-Loop-PUCCH ENUMERATED {supported} OPTIONAL -} - -Phy-ParametersFRX-Diff ::= SEQUENCE { --- R1 2-6 & 2-16b: Support 1+2 DMRS (DL/UL) - oneFL-DMRS-TwoAdditionalDMRS BIT STRING (SIZE (2)) OPTIONAL, --- R1 2-7 & 2-18: Supported 2 symbols front-loaded DMRS(DL/UL) - twoFL-DMRS BIT STRING (SIZE (2)) OPTIONAL, --- R1 2-8 & 2-18a: Supported 2 symbols front-loaded +2 symbols additional DMRS(DL/UL) - twoFL-DMRS-TwoAdditionalDMRS BIT STRING (SIZE (2)) OPTIONAL, --- R1 2-9 & 2-19: Support 1+3 DMRS (DL/UL) - oneFL-DMRS-ThreeAdditionalDMRS BIT STRING (SIZE (2)) OPTIONAL, --- R1 2-10: Support DMRS type (DL) - supportedDMRS-TypeDL ENUMERATED {type1, type2} OPTIONAL, --- R1 2-17: Support DMRS type (UL) - supportedDMRS-TypeUL ENUMERATED {type1, type2} OPTIONAL, --- R1 2-37: Support Semi-open loop CSI - semiOpenLoopCSI ENUMERATED {supported} OPTIONAL, --- R1 2-38: CSI report without PMI - csi-ReportWithoutPMI ENUMERATED {supported} OPTIONAL, --- R1 2-39: CSI report with CRI - csi-ReportWithCRI ENUMERATED {supported} OPTIONAL, --- R1 2-39a: CSI report without CQI - csi-ReportWithoutCQI ENUMERATED {supported} OPTIONAL, --- R1 2-44 & 2-47: 1 port of DL/UL PTRS - onePortsPTRS BIT STRING (SIZE (2)) OPTIONAL, --- R1 4-2: 2 PUCCH of format 0 or 2 in consecutive symbols - twoPUCCH-F0-2-ConsecSymbols ENUMERATED {supported} OPTIONAL, --- R1 4-3: PUCCH format 2 over 1 – 2 OFDM symbols once per slot with FH - pucch-F2-WithFH ENUMERATED {supported} OPTIONAL, --- R1 4-4: PUCCH format 3 over 4 – 14 OFDM symbols once per slot with FH - pucch-F3-WithFH ENUMERATED {supported} OPTIONAL, --- R1 4-5: PUCCH format 4 over 4 – 14 OFDM symbols once per slot with FH - pucch-F4-WithFH ENUMERATED {supported} OPTIONAL, --- R1 4-6: Non-frequency hopping for PUCCH formats 0 and 2 - freqHoppingPUCCH-F0-2 ENUMERATED {notSupported} OPTIONAL, --- R1 4-7: Non-frequency hopping for PUCCH format 1, 3, and 4 - freqHoppingPUCCH-F1-3-4 ENUMERATED {notSupported} OPTIONAL, --- R1 4-19: SR/HARQ-ACK/CSI multiplexing once per slot using a PUCCH (or piggybacked on a PUSCH) - mux-SR-HARQ-ACK-CSI-PUCCH ENUMERATED {supported} OPTIONAL, --- R1 4-20: UCI code-block segmentation - uci-CodeBlockSegmentation ENUMERATED {supported} OPTIONAL, --- R1 4-22: 1 long PUCCH format and 1 short PUCCH format in the same slot - onePUCCH-LongAndShortFormat ENUMERATED {supported} OPTIONAL, --- R1 4-22a: 2 PUCCH transmissions in the same slot which are not covered by 4-22 and 4-2 - twoPUCCH-AnyOthersInSlot ENUMERATED {supported} OPTIONAL, --- R1 5-9: Intra-slot frequency-hopping for PUSCH except for PUSCH scheduled by Type 1 before RRC connection - intraSlotFreqHopping-PUSCH ENUMERATED {supported} OPTIONAL, --- R1 5-29: LBRM for PUSCH - pusch-LBRM ENUMERATED {supported} OPTIONAL, --- R1 6-5a: PDCCH blind detection capability for CA - pdcch-BlindDetectionCA ENUMERATED {supported} OPTIONAL, --- R1 8-3: TPC-PUSCH-RNTI - tpc-PUSCH-RNTI ENUMERATED {supported} OPTIONAL, --- R1 8-4: TPC-PUCCH-RNTI - tpc-PUCCH-RNTI ENUMERATED {supported} OPTIONAL, --- R1 8-5: TPC-SRS-RNTI - tpc-SRS-RNTI ENUMERATED {supported} OPTIONAL, --- R1 8-6: Absolute TPC command mode - absoluteTPC-Command ENUMERATED {supported} OPTIONAL, --- R1 8-7: UL power control with 2 PUSCH closed loops - twoDifferentTPC-Loop-PUSCH ENUMERATED {supported} OPTIONAL, --- R1 8-8: UL power control with 2 PUCCH closed loops - twoDifferentTPC-Loop-PUCCH ENUMERATED {supported} OPTIONAL, --- R4 1-6: pi/2-BPSK for PUSCH - pusch-HalfPi-BPSK ENUMERATED {supported} OPTIONAL, --- R4 1-7: pi/2-BPSK for PUCCH format 3/4 - pucch-F3-4-HalfPi-BPSK ENUMERATED {supported} OPTIONAL, --- R4 1-9: 1-symbol GP in unpaired spectrum - oneSymbolGP-TDD ENUMERATED {supported} OPTIONAL, --- R4 2-7: Almost contiguous UL CP-OFDM - almostContiguousCP-OFDM-UL ENUMERATED {supported} OPTIONAL -} - -Phy-ParametersFR1 ::= SEQUENCE { --- R1 3-2: Unicast PDCCH monitoring following Case 1-2 - pdcchMonitoringSingleOccasion ENUMERATED {supported} OPTIONAL, --- R4 1-1: 60kHz of subcarrier spacing for FR1 - scs-60kHz ENUMERATED {supported} OPTIONAL, --- R4 1-4: 256QAM for PDSCH in FR1 - pdsch-256QAM-FR1 ENUMERATED {supported} OPTIONAL -} - -Phy-ParametersFR2 ::= SEQUENCE { --- R4 2-8: PA calibration gap - calibrationGapPA ENUMERATED {supported} OPTIONAL -} - -RF-Parameters ::= SEQUENCE { - supportedBandListNR SupportedBandListNR, - supportedBandCombination BandCombinationList, - bandCombinationParametersUL-List BandCombinationParametersUL-List -} - -SupportedBandListNR ::= SEQUENCE (SIZE (1..maxBands)) OF BandNR - -BandNR ::= SEQUENCE { - bandNR FreqBandIndicatorNR, --- Modified MPR behaviour as in RAN4 LS R2-1804077, which is needed for NSA as well as SA - modifiedMPR-Behaviour BIT STRING (SIZE (8)) OPTIONAL, --- R4 2-1: Maximum channel bandwidth supported in each band for DL and UL separately and for each SCS that UE supports within a single CC --- RAN4 agreed that 400 MHz is optional for FR2. The other values defined for FR1/fR2 in TS 38.101 are mandatory w/o capability bit. - maxChannelBW-PerCC ENUMERATED {mhz400} OPTIONAL, - mimo-ParametersPerBand MIMO-ParametersPerBand OPTIONAL, --- R1 0-10: Extended CP - extendedCP ENUMERATED {supported} OPTIONAL, --- R1 0-13: Phase coherence across non-contiguous UL symbols in slot in the transmission of one channel - phaseCoherenceUL ENUMERATED {supported} OPTIONAL, --- R1 1-10: Support of SCell without SS/PBCH block - scellWithoutSSB ENUMERATED {supported} OPTIONAL, --- R1 1-11: Support of CSI-RS RRM measurement for SCell without SS/PBCH block - csi-RS-MeasSCellWithoutSSB ENUMERATED {supported} OPTIONAL, --- R1 2-15a: Association between CSI-RS and SRS - srs-AssocCSI-RS ENUMERATED {supported} OPTIONAL, --- R1 3-1a: For type 1 CSS with dedicated RRC configuration and for type 3 CSS, UE specific SS, CORESET resource allocation of 6RB bit-map and duration 3 OFDM symbols for FR2 - type1-3-CSS ENUMERATED {supported} OPTIONAL, --- R1 3-4: More than one TCI state configurations per CORESET - multipleTCI ENUMERATED {supported} OPTIONAL, --- R1 3-5 & 3-5a: For type 1 with dedicated RRC configuration, type 3, and UE-SS,, monitoring occasion can be any OFDM symbol(s) of a slot for Case 2 (with a DCI gap) - pdcchMonitoringAnyOccasions ENUMERATED {withoutDCI-gap, withDCI-gap} OPTIONAL, --- R1 5-1a: UE specific RRC configure UL/DL assignment - ue-SpecificUL-DL-Assignment ENUMERATED {supported} OPTIONAL, --- R1 5-11 & 5-11a: Up to 2/7 unicast PDSCHs per slot for different TBs - pdsch-DifferentTB-PerSlot SEQUENCE { - scs-15kHz ENUMERATED {upto2, upto7} OPTIONAL, - scs-30kHz ENUMERATED {upto2, upto7} OPTIONAL, - scs-60kHz ENUMERATED {upto2, upto7} OPTIONAL, - scs-120kHz ENUMERATED {upto2, upto7} OPTIONAL - } OPTIONAL, --- R1 5-12 & 5-12a: Up to 2/7 PUSCHs per slot for different TBs - pusch-DifferentTB-PerSlot SEQUENCE { - scs-15kHz ENUMERATED {upto2, upto7} OPTIONAL, - scs-30kHz ENUMERATED {upto2, upto7} OPTIONAL, - scs-60kHz ENUMERATED {upto2, upto7} OPTIONAL, - scs-120kHz ENUMERATED {upto2, upto7} OPTIONAL - } OPTIONAL, --- R1 6-2 & 6-3: Type A/B BWP adaptation (up to 2/4 BWPs) with same numerology - bwp-SameNumerology ENUMERATED {upto2, upto4} OPTIONAL, --- R1 6-4: BWP adaptation (up to 4 BWPs) with different numerologies - bwp-DiffNumerology ENUMERATED {upto4} OPTIONAL, --- R1 6-7: Two PUCCH group - twoPUCCH-Group ENUMERATED {supported} OPTIONAL, --- R1 6-8: Different numerology across PUCCH groups - diffNumerologyAcrossPUCCH-Group ENUMERATED {supported} OPTIONAL, --- R1 6-9: Different numerologies across carriers within the same PUCCH group - diffNumerologyWithinPUCCH-Group ENUMERATED {supported} OPTIONAL, --- R1 6-10: Cross carrier scheduling - crossCarrierScheduling ENUMERATED {supported} OPTIONAL, --- R1 6-11: Number of supported TAGs - supportedNumberTAG ENUMERATED {n2, n3, n4} OPTIONAL, --- R1 6-19: Simultaneous transmission of SRS on an SUL/non-SUL carrier and PUSCH/PUCCH/SRS/PRACH on the other UL carrier in the same cell --- Details on the channel/signal combination are to be described in TS 38.306 - simultaneousTxSUL-NonSUL ENUMERATED {supported} OPTIONAL, --- R1 6-21: DL search space sharing for CA - searchSpaceSharingCA-DL ENUMERATED {supported} OPTIONAL, --- R1 6-22: UL search space sharing for CA - searchSpaceSharingCA-UL ENUMERATED {supported} OPTIONAL, --- R4 1-4: 256QAM for PDSCH in FR2 - pdsch-256QAM-FR2 ENUMERATED {supported} OPTIONAL, --- R4 1-5: 256QAM for PUSCH - pusch-256QAM ENUMERATED {supported} OPTIONAL -} - -MIMO-ParametersPerBand ::= SEQUENCE { --- R1 2-2: PDSCH beam switching - timeDurationForQCL SEQUENCE { - scs-60kHz ENUMERATED {s7, s14, s28} OPTIONAL, - sch-120kHz ENUMERATED {s14, s28} OPTIONAL - } OPTIONAL, --- R1 2-3: PDSCH MIMO layers. Absence of this field implies support of one layer. - maxNumberMIMO-LayersPDSCH MIMO-LayersDL OPTIONAL, --- R1 2-14: Codebook based PUSCH MIMO transmission. Absence of this field implies that CB-based PUSCH is not supported. - maxNumberMIMO-LayersCB-PUSCH MIMO-LayersUL OPTIONAL, --- R1 2-15: Non-codebook based PUSCH MIMO transmission. Absence of this field implies that Non-CB-based PUSCH is not supported. - maxNumberMIMO-LayersNonCB-PUSCH MIMO-LayersUL OPTIONAL, --- R1 2-4: TCI states for PDSCH - maxNumberConfiguredTCIstates ENUMERATED {n4, n8, n16, n32, n64} OPTIONAL, - maxNumberActiveTCI-PerCC ENUMERATED {n1, n2, n4, n8} OPTIONAL, --- R1 2-13: PUSCH transmission coherence - pusch-TransCoherence ENUMERATED {nonCoherent, partialNonCoherent, fullCoherent} OPTIONAL, --- R1 2-20: Beam correspondence - beamCorrespondence ENUMERATED {supported} OPTIONAL, --- R1 2-21: Periodic beam report on PUCCH - periodicBeamReport ENUMERATED {supported} OPTIONAL, --- R1 2-22: Aperiodic beam report on PUSCH - aperiodicBeamReport ENUMERATED {supported} OPTIONAL, --- R1 2-23: Semi-persistent beam report on PUCCH - sp-BeamReportPUCCH ENUMERATED {supported} OPTIONAL, --- R1 2-23a: Semi-persistent beam report on PUSCH - sp-BeamReportPUSCH ENUMERATED {supported} OPTIONAL, --- R1 2-24: SSB/CSI-RS for beam management - beamManagementSSB-CSI-RS BeamManagementSSB-CSI-RS OPTIONAL, --- R1 2-26: Receiving beam selection using CSI-RS resource repetition "ON" - maxNumberRxBeam INTEGER (2..8) OPTIONAL, --- R1 2-27: Beam switching (including SSB and CSI-RS) - maxNumberRxTxBeamSwitchDL SEQUENCE { - scs-15kHz ENUMERATED {n4, n7, n14} OPTIONAL, - scs-30kHz ENUMERATED {n4, n7, n14} OPTIONAL, - scs-60kHz ENUMERATED {n4, n7, n14} OPTIONAL, - scs-120kHz ENUMERATED {n4, n7, n14} OPTIONAL, - scs-240kHz ENUMERATED {n4, n7, n14} OPTIONAL - } OPTIONAL, --- R1 2-29: Non-group based beam reporting - maxNumberNonGroupBeamReporting ENUMERATED {n1, n2, n4} OPTIONAL, --- R1 2-29a: Group based beam reporting - groupBeamReporting ENUMERATED {supported} OPTIONAL, --- R1 2-30: UL beam management - uplinkBeamManagement SEQUENCE { - maxNumberSRS-ResourcePerSet ENUMERATED {n8, n16, n32}, - maxNumberSRS-ResourceSet INTEGER (1..8) - } OPTIONAL, --- R1 2-31: Beam failure recovery - maxNumberCSI-RS-BFR INTEGER (1..64) OPTIONAL, - maxNumberSSB-BFR INTEGER (1..64) OPTIONAL, - maxNumberCSI-RS-SSB-BFR INTEGER (1..256) OPTIONAL, --- R1 2-45 & 2-48: 2 ports of DL/UL PTRS - twoPortsPTRS BIT STRING (SIZE (2)) OPTIONAL, --- R1 2-53: SRS resources - supportedSRS-Resources SRS-Resources OPTIONAL, --- R1 2-55: SRS Tx switch - srs-TxSwitch SRS-TxSwitch OPTIONAL, --- R1 2-54a: Simultaneous SRS Tx - maxNumberSimultaneousSRS-PerCC INTEGER (1..4) OPTIONAL, --- R1 2-57: Support low latency CSI feedback - lowLatencyCSI-Feedback ENUMERATED {supported} OPTIONAL -} - --- R1 2-24: SSB/CSI-RS for beam management -BeamManagementSSB-CSI-RS ::= SEQUENCE { - maxNumberSSB-CSI-RS-ResourceOneTx ENUMERATED {n8, n16, n32, n64}, - maxNumberSSB-CSI-RS-ResourceTwoTx ENUMERATED {n0, n4, n8, n16, n32, n64}, - supportedCSI-RS-Density ENUMERATED {one, three, oneAndThree} -} - --- R1 2-53: SRS resources -SRS-Resources ::= SEQUENCE { - maxNumberAperiodicSRS-PerBWP ENUMERATED {n1, n2, n4, n8, n16}, - maxNumberAperiodicSRS-PerBWP-PerSlot INTEGER (1..6), - maxNumberPeriodicSRS-PerBWP ENUMERATED {n1, n2, n4, n8, n16}, - maxNumberPeriodicSRS-PerBWP-PerSlot INTEGER (1..6), - maxNumberSemiPersitentSRS-PerBWP ENUMERATED {n0, n1, n2, n4, n8, n16}, - maxNumberSP-SRS-PerBWP-PerSlot INTEGER (0..6), - maxNumberSRS-Ports-PerResource ENUMERATED {n1, n2, n4} -} --- R1 2-55: SRS Tx switch -SRS-TxSwitch ::= SEQUENCE { - supportedSRS-TxPortSwitch ENUMERATED {t1r2, t1r4, t2r4, t1r4-t2r4}, - txSwitchImpactToRx ENUMERATED {true} OPTIONAL -} - -PDCP-Parameters ::= SEQUENCE { - supportedROHC-Profiles SEQUENCE { - profile0x0000 BOOLEAN, - profile0x0001 BOOLEAN, - profile0x0002 BOOLEAN, - profile0x0003 BOOLEAN, - profile0x0004 BOOLEAN, - profile0x0006 BOOLEAN, - profile0x0101 BOOLEAN, - profile0x0102 BOOLEAN, - profile0x0103 BOOLEAN, - profile0x0104 BOOLEAN - }, - maxNumberROHC-ContextSessions ENUMERATED {cs2, cs4, cs8, cs12, cs16, cs24, cs32, cs48, cs64, cs128, cs256, cs512, cs1024, cs16384, spare2, spare1}, - uplinkOnlyROHC-Profiles ENUMERATED {supported} OPTIONAL, - continueROHC-Context ENUMERATED {supported} OPTIONAL, - outOfOrderDelivery ENUMERATED {supported} OPTIONAL, - shortSN ENUMERATED {supported} OPTIONAL -} - -RLC-Parameters ::= SEQUENCE { - am-WithShortSN ENUMERATED {supported} OPTIONAL, - um-WithShortSN ENUMERATED {supported} OPTIONAL, - um-WIthLongSN ENUMERATED {supported} OPTIONAL -} - -MAC-Parameters ::= SEQUENCE { - mac-ParametersCommon MAC-ParametersCommon OPTIONAL, - mac-ParametersXDD-Diff MAC-ParametersXDD-Diff OPTIONAL -} - -MAC-ParametersCommon ::= SEQUENCE { - lcp-Restriction ENUMERATED {supported} OPTIONAL, --- R1 4-24: PUCCH-spatialrelationinfo indication by a MAC CE per PUCCH resource - pucch-SpatialRelInfoMAC-CE ENUMERATED {supported} OPTIONAL -} - -MAC-ParametersXDD-Diff ::= SEQUENCE { - skipUplinkTxDynamic ENUMERATED {supported} OPTIONAL, - logicalChannelSR-DelayTimer ENUMERATED {supported} OPTIONAL, - longDRX-Cycle ENUMERATED {supported} OPTIONAL, - shortDRX-Cycle ENUMERATED {supported} OPTIONAL, - multipleSR-Configurations ENUMERATED {supported} OPTIONAL, - -- If supported UE supports 8 SR configurations, otherwise 1 SR config is supported. - -- Confirmation is needed whether to align the number to what the configuration signalling can support. - multipleConfiguredGrantConfigurations ENUMERATED {supported} OPTIONAL - -- If supported UE supports 16 configured grant configurations, otherwise 1 ConfiguredGrant config is supported. - -- Confirmation is needed whether to align the number to what the configuration signalling can support, and to consider whether the 16 refers - -- to the configurations or the active ones only (as they are within the BWP). -} - -MeasParameters ::= SEQUENCE { - measParametersXDD-Diff MeasParametersXDD-Diff OPTIONAL, - measParametersFRX-Diff MeasParametersFRX-Diff OPTIONAL -} - -MeasParametersXDD-Diff ::= SEQUENCE { - intraAndInterF-MeasAndReport ENUMERATED {supported} OPTIONAL, - eventA-MeasAndReport ENUMERATED {supported} OPTIONAL - -- Confirmation is needed on the need of capability/IOT signaling in LTE for support of the additional measurement gap configurations. -} - -MeasParametersFRX-Diff ::= SEQUENCE { --- R1 1-3: SSB based SINR measurement - ss-SINR-Meas ENUMERATED {supported} OPTIONAL, --- R1 1-5: CSI-RS based RRM measurement with associated SS-block - csi-RSRP-AndRSRQ-MeasWithSSB ENUMERATED {supported} OPTIONAL, --- R1 1-5a: CSI-RS based RRM measurement without associated SS-block - csi-RSRP-AndRSRQ-MeasWithoutSSB ENUMERATED {supported} OPTIONAL, --- R1 1-6: CSI-RS based SINR measurement - csi-SINR-Meas ENUMERATED {supported} OPTIONAL, --- R1 1-7: CSI-RS based RLM - csi-RS-RLM ENUMERATED {supported} OPTIONAL -} - --- TAG-UE-NR-CAPABILITY-STOP --- TAG-RRC-TRANSACTIONIDENTIFIER-START - -RRC-TransactionIdentifier ::= INTEGER (0..3) - --- TAG-RRC-TRANSACTIONIDENTIFIER-STOP --- TAG-MULTIPLICITY-AND-TYPE-CONSTRAINT-DEFINITIONS-START - -maxBandComb INTEGER ::= 65536 -- Maximum number of DL band combinations -maxBasebandProcComb INTEGER ::= 65536 -- Maximum number of baseband processing combinations -maxNrofServingCells INTEGER ::= 32 -- Max number of serving cells (SpCell + SCells) per cell group -maxNrofServingCells-1 INTEGER ::= 31 -- Max number of serving cells (SpCell + SCells) per cell group minus 1 -maxNrofAggregatedCellsPerCellGroup INTEGER ::= 16 -maxNrofSCells INTEGER ::= 31 -- Max number of secondary serving cells per cell group -maxNrofCellMeas INTEGER ::= 32 -- Maximum number of entries in each of the cell lists in a measurement object -maxNrofSS-BlocksToAverage INTEGER ::= 16 -- Max number for the (max) number of SS blocks to average to determine cell - -- measurement -maxNrofCSI-RS-ResourcesToAverage INTEGER ::= 16 -- Max number for the (max) number of CSI-RS to average to determine cell - -- measurement -maxNrofDL-Allocations INTEGER ::= 16 -- Maximum number of PDSCH time domain resource allocations - -maxNrofSR-ConfigPerCellGroup INTEGER ::= 8 -- Maximum number of SR configurations per cell group - -maxLCG-ID INTEGER ::= 7 -- Maximum value of LCG ID -maxLC-ID INTEGER ::= 32 -- Maximum value of Logical Channel ID -maxNrofTAGs INTEGER ::= 4 -- Maximum number of Timing Advance Groups -maxNrofTAGs-1 INTEGER ::= 3 -- Maximum number of Timing Advance Groups minus 1 - -maxNrofBWPs INTEGER ::= 4 -- Maximum number of BWPs per serving cell -maxNrofSymbols-1 INTEGER ::= 13 -- Maximum index identifying a symbol within a slot (14 symbols, indexed from 0..13) -maxNrofSlots INTEGER ::= 320 -- Maximum number of slots in a 10 ms period -maxNrofSlots-1 INTEGER ::= 319 -- Maximum number of slots in a 10 ms period minus 1 - -maxNrofPhysicalResourceBlocks INTEGER ::= 275 -- Maximum number of PRBs -maxNrofPhysicalResourceBlocks-1 INTEGER ::= 274 -- Maximum number of PRBs -maxNrofControlResourceSets INTEGER ::= 12 -- Max number of CoReSets configurable on a serving cell -maxNrofControlResourceSets-1 INTEGER ::= 11 -- Max number of CoReSets configurable on a serving cell minus 1 -maxCoReSetDuration INTEGER ::= 3 -- Max number of OFDM symbols in a control resource set -maxNrofSearchSpaces INTEGER ::= 40 -- Max number of Search Spaces -maxNrofSearchSpaces-1 INTEGER ::= 39 -- Max number of Search Spaces minus 1 -maxSFI-DCI-PayloadSize INTEGER ::= 128 -- Max number payload of a DCI scrambled with SFI-RNTI -maxSFI-DCI-PayloadSize-1 INTEGER ::= 127 -- Max number payload of a DCI scrambled with SFI-RNTI minus 1 -maxINT-DCI-PayloadSize INTEGER ::= 126 -- Max number payload of a DCI scrambled with INT-RNTI -maxINT-DCI-PayloadSize-1 INTEGER ::= 125 -- Max number payload of a DCI scrambled with INT-RNTI minus 1 -maxNrofRateMatchPatterns INTEGER ::= 4 -- Max number of rate matching patterns that may be configured -maxNrofRateMatchPatterns-1 INTEGER ::= 3 -- Max number of rate matching patterns that may be configured minus 1 - -maxNrofCSI-ReportConfigurations INTEGER ::= 48 -- Maximum number of report configurations -maxNrofCSI-ReportConfigurations-1 INTEGER ::= 47 -- Maximum number of report configurations minus 1 - -maxNrofCSI-ResourceConfigurations INTEGER ::= 112 -- Maximum number of resource configurations -maxNrofCSI-ResourceConfigurations-1 INTEGER ::= 111 -- Maximum number of resource configurations minus 1 - -maxNrofAP-CSI-RS-ResourcesPerSet INTEGER ::= 16 -maxNrOfCSI-AperiodicTriggers INTEGER ::= 128 -- Maximum number of triggers for aperiodic CSI reporting -maxNrofReportConfigPerAperiodicTrigger INTEGER ::= 16 -- Maximum number of report configurations per trigger state for aperiodic reporting - -maxNrofNZP-CSI-RS-Resources INTEGER ::= 192 -- Maximum number of Non-Zero-Power (NZP) CSI-RS resources -maxNrofNZP-CSI-RS-Resources-1 INTEGER ::= 191 -- Maximum number of Non-Zero-Power (NZP) CSI-RS resources minus 1 -maxNrofNZP-CSI-RS-ResourcesPerSet INTEGER ::= 64 -- Maximum number of NZP CSI-RS resources per resource set -maxNrofNZP-CSI-RS-ResourceSetsPerConfig INTEGER ::= 16 -- Maximum number of resource sets per resource configuration - -maxNrofZP-CSI-RS-Resources INTEGER ::= 32 -- Maximum number of Zero-Power (NZP) CSI-RS resources -maxNrofZP-CSI-RS-Resources-1 INTEGER ::= 31 -- Maximum number of Zero-Power (NZP) CSI-RS resources minus 1 -maxNrofZP-CSI-RS-ResourceSets-1 INTEGER ::= 16 -maxNrofZP-CSI-RS-ResourcesPerSet INTEGER ::= 16 -maxNrofZP-CSI-RS-Sets INTEGER ::= 16 - -maxNrofCSI-IM-Resources INTEGER ::= 32 -- Maximum number of CSI-IM resources. See CSI-IM-ResourceMax in 38.214. -maxNrofCSI-IM-Resources-1 INTEGER ::= 31 -- Maximum number of CSI-IM resources minus 1. See CSI-IM-ResourceMax in 38.214. -maxNrofCSI-IM-ResourcesPerSet INTEGER ::= 8 -- Maximum number of CSI-IM resources per set. See CSI-IM-ResourcePerSetMax in 38.214 -maxNrofCSI-IM-ResourceSetsPerConfig INTEGER ::= 16 -- Maximum number of CSI IM resource sets per resource configuration - -maxNrofSSB-Resources-1 INTEGER ::= 63 -- Maximum number of SSB resources in a resource set minus 1 -maxNrofCSI-SSB-ResourcePerSet INTEGER ::= 64 -maxNrofCSI-SSB-ResourceSetsPerConfig INTEGER ::= 1 -- Maximum number of CSI SSB resource sets per resource configuration - -maxNrofFailureDetectionResources INTEGER ::= 10 -- Maximum number of failure detection resources - -maxNrofObjectId INTEGER ::= 64 -- Maximum number of measurement objects -maxNrofPCI-Ranges INTEGER ::= 8 -- Maximum number of PCI ranges -maxNrofCSI-RS-ResourcesRRM INTEGER ::= 96 -- Maximum number of CSI-RS resources for an RRM measurement object -maxNrofCSI-RS-ResourcesRRM-1 INTEGER ::= 95 -- Maximum number of CSI-RS resources for an RRM measurement object minus 1 -maxNrofMeasId INTEGER ::= 64 -- Maximum number of configured measurements -maxNrofQuantityConfig INTEGER ::= 2 -- Maximum number of quantity configurations -maxNrofCSI-RS-CellsRRM INTEGER ::= 96 -- Maximum number of FFS - -maxNrofSRS-ResourceSets INTEGER ::= 16 -- Maximum number of SRS resource sets in a BWP. -maxNrofSRS-ResourceSets-1 INTEGER ::= 15 -- Maximum number of SRS resource sets in a BWP minus 1. -maxNrofSRS-Resources INTEGER ::= 64 -- Maximum number of SRS resources in an SRS resource set. -maxNrofSRS-Resources-1 INTEGER ::= 63 -- Maximum number of SRS resources in an SRS resource set minus 1. -maxNrofSRS-TriggerStates-1 INTEGER ::= 3 -- Maximum number of SRS trigger states minus 1, i.e., the largest code point. -maxRAT-CapabilityContainers INTEGER ::= 8 -- Maximum number of interworking RAT containers (incl NR and MRDC) -maxSimultaneousBands INTEGER ::= 32 -- Maximum number of simultaneously aggregated bands - - -maxNrofSlotFormatCombinationsPerCell INTEGER ::= 16 -- Maximum number of -maxNrofSlotFormatCombinationsPerSet INTEGER ::= 4096 -- Maximum number of Slot Format Combinations in a SF-Set. -maxNrofSlotFormatCombinationsPerSet-1 INTEGER ::= 4095 -- Maximum number of Slot Format Combinations in a SF-Set minus 1. -maxNrofPUCCH-Resources INTEGER ::= 128 -maxNrofPUCCH-Resources-1 INTEGER ::= 127 -maxNrofPUCCH-ResourceSets INTEGER ::= 4 -- Maximum number of PUCCH Resource Sets -maxNrofPUCCH-ResourceSets-1 INTEGER ::= 3 -- Maximum number of PUCCH Resource Sets minus 1. -maxNrofPUCCH-ResourcesPerSet INTEGER ::= 32 -- Maximum number of PUCCH Resources per PUCCH-ResourceSet -maxNrofPUCCH-ResourcesPerSet-1 INTEGER ::= 31 -- Maximum number of PUCCH Resources per PUCCH-ResourceSet minus 1. -maxNrofPUCCH-P0-PerSet INTEGER ::= 8 -- Maximum number of P0-pucch present in a p0-pucch set -maxNrofPUCCH-PathlossReferenceRSs INTEGER ::= 4 -- Maximum number of RSs used as pathloss reference for PUCCH power control. -maxNrofPUCCH-PathlossReferenceRSs-1 INTEGER ::= 3 -- Maximum number of RSs used as pathloss reference for PUCCH power control minus 1. - -maxNrofP0-PUSCH-AlphaSets INTEGER ::= 30 -- Maximum number of P0-pusch-alpha-sets (see 38,213, section 7.1) -maxNrofP0-PUSCH-AlphaSets-1 INTEGER ::= 29 -- Maximum number of P0-pusch-alpha-sets minus 1 (see 38,213, section 7.1) -maxNrofPUSCH-PathlossReferenceRSs INTEGER ::= 4 -- Maximum number of RSs used as pathloss reference for PUSCH power control. -maxNrofPUSCH-PathlossReferenceRSs-1 INTEGER ::= 3 -- Maximum number of RSs used as pathloss reference for PUSCH power control minus 1. - -maxBands INTEGER ::= 1024 -- Maximum number of supported bands in UE capability. -maxBandsMRDC INTEGER ::= 1280 -maxBandsEUTRA INTEGER ::= 256 -maxCellPrep INTEGER ::= 32 -maxCellReport INTEGER ::= 8 -maxDRB INTEGER ::= 29 -- Maximum number of DRBs (that can be added in DRB-ToAddModLIst). -maxFreq INTEGER ::= 8 -- Max number of non-serving frequencies in MeasResultSCG-Failure. -maxNrofCSI-RS INTEGER ::= 64 -maxNrofCandidateBeams INTEGER ::= 16 -- Max number of PRACH-ResourceDedicatedBFR that in BFR config. -maxNrofPCIsPerSMTC INTEGER ::= 64 -- Maximun number of PCIs per SMTC. -maxNrofQFIs INTEGER ::= 64 -maxNrofSR-Resources INTEGER ::= 8 -- Maximum number of SR resources per BWP in a cell. -maxNrofSlotFormatsPerCombination INTEGER ::= 256 -maxNrofSpatialRelationInfos INTEGER ::= 8 -maxNrofSRS-ResourcesPerSet INTEGER ::= 16 -maxNrofIndexesToReport INTEGER ::= 32 -maxNrofSSBs INTEGER ::= 64 -- Maximum number of SSB resources in a resource set. -maxNrofSSBs-1 INTEGER ::= 63 -- Maximum number of SSB resources in a resource set minus 1. - -maxNrofTCI-StatesPDCCH INTEGER ::= 64 -maxNrofTCI-States INTEGER ::= 64 -- Maximum number of TCI states. -maxNrofTCI-States-1 INTEGER ::= 63 -- Maximum number of TCI states minus 1. -maxNrofUL-Allocations INTEGER ::= 16 -- Maximum number of PUSCH time domain resource allocations. -maxQFI INTEGER ::= 63 -maxRA-CSIRS-Resources INTEGER ::= 96 -maxRA-OccasionsPerCSIRS INTEGER ::= 64 -- Maximum number of RA occasions for one CSI-RS -maxRA-Occasions-1 INTEGER ::= 511 -- Maximum number of RA occasions in the system -maxRA-SSB-Resources INTEGER ::= 64 -maxSCSs INTEGER ::= 5 -maxSecondaryCellGroups INTEGER ::= 3 -maxNrofServingCellsEUTRA INTEGER ::= 32 -maxMBSFN-Allocations INTEGER ::= 8 -maxNrofMultiBands INTEGER ::= 8 -maxCellSFTD INTEGER ::= 3 -- Maximum number of cells for SFTD reporting -maxReportConfigId INTEGER ::= 64 - -maxNrofSRI-PUSCH-Mappings INTEGER ::= 16 -maxNrofSRI-PUSCH-Mappings-1 INTEGER ::= 15 - --- Editor’s Note: Targeted for completion in June 2018. Not used in EN-DC drop. -CellIdentity ::= ENUMERATED {ffsTypeAndValue} -ShortMAC-I ::= ENUMERATED {ffsTypeAndValue} - --- TAG-MULTIPLICITY-AND-TYPE-CONSTRAINT-DEFINITIONS-STOP - -END - diff --git a/openair2/RRC/NR/MESSAGES/ans1c/ASN1_files/NR-UE-Variables.asn b/openair2/RRC/NR/MESSAGES/ans1c/ASN1_files/NR-UE-Variables.asn deleted file mode 100755 index 3eeec31891fd642cffb55a28fd5987f81b2daee7..0000000000000000000000000000000000000000 --- a/openair2/RRC/NR/MESSAGES/ans1c/ASN1_files/NR-UE-Variables.asn +++ /dev/null @@ -1,46 +0,0 @@ -NR-UE-Variables DEFINITIONS AUTOMATIC TAGS ::= - -BEGIN - --- TAG-VAR-MEAS-CONFIG-START - -VarMeasConfig ::= SEQUENCE { - -- Measurement identities - measIdList MeasIdToAddModList OPTIONAL, - -- Measurement objects - measObjectList MeasObjectToAddModList OPTIONAL, - -- Reporting configurations - reportConfigList ReportConfigToAddModList OPTIONAL, - -- Other parameters - quantityConfig QuantityConfig OPTIONAL, - - s-MeasureConfig CHOICE { - ssb-RSRP RSRP-Range, - csi-RSRP RSRP-Range - } OPTIONAL - -} - --- TAG-VAR-MEAS-CONFIG-STOP --- TAG-VAR-MEAS-REPORT-START - -VarMeasReportList ::= SEQUENCE (SIZE (1..maxNrofMeasId)) OF VarMeasReport - -VarMeasReport ::= SEQUENCE { - -- List of measurement that have been triggered - measId MeasId, - cellsTriggeredList CellsTriggeredList OPTIONAL, - numberOfReportsSent INTEGER -} - -CellsTriggeredList ::= SEQUENCE (SIZE (1..maxNrofCellMeas)) OF CHOICE { - physCellId PhysCellId, --- Not needed for EN-DC. - physCellIdEUTRA ENUMERATED {ffsTypeAndValue} - } - - --- TAG-VAR-MEAS-REPORT-STOP - -END - diff --git a/openair2/RRC/NR/MESSAGES/ans1c/ASN1_files/extract_asn1_from_spce.pl b/openair2/RRC/NR/MESSAGES/ans1c/ASN1_files/extract_asn1_from_spce.pl deleted file mode 100755 index 18f6792a8c870819ba1ceac1641866d6376b0eec..0000000000000000000000000000000000000000 --- a/openair2/RRC/NR/MESSAGES/ans1c/ASN1_files/extract_asn1_from_spce.pl +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/perl -# This script extracts the ASN1 definition from and TS 38.331 and generates 3 output files that can be processed by asn2wrs -# First download the specification from 3gpp.org as a word document and open it -# Then in "view" menu, select normal or web layout (needed to removed page header and footers) -# Finally save the document as a text file -# Call the script: "perl extract_asn1_from_spec.pl 38331-xxx.txt" -# It should generate: NR-RRC-Definitions.asn, NR-UE-Variables.asn and NR-InterNodeDefinitions -use warnings; -$input_file = $ARGV[0]; -$NR_def_output_file = "NR-RRC-Definitions.asn"; -$NR_var_output_file = "NR-UE-Variables.asn"; -$NR_internode_output_file = "NR-InterNodeDefinitions.asn"; - - -sub extract_asn1; - -open(INPUT_FILE, "< $input_file") or die "Can not open file $input_file"; - -while (<INPUT_FILE>) { - - # Process the NR-RRC-Definitions section - if( m/NR-RRC-Definitions DEFINITIONS AUTOMATIC TAGS ::=/){ - open(OUTPUT_FILE, "> $NR_def_output_file") or die "Can not open file $def_output_file"; - syswrite OUTPUT_FILE,"$_ \n"; - syswrite OUTPUT_FILE,"BEGIN\n\n"; - - # Get all the text delimited by -- ASN1START and -- ASN1STOP - extract_asn1(); - - syswrite OUTPUT_FILE,"END\n\n"; - close(OUTPUT_FILE); - } - - # Process the NR-UE-Variables section - if( m/NR-UE-Variables DEFINITIONS AUTOMATIC TAGS ::=/){ - open(OUTPUT_FILE, "> $NR_var_output_file") or die "Can not open file $def_output_file"; - syswrite OUTPUT_FILE,"$_ \n"; - syswrite OUTPUT_FILE,"BEGIN\n\n"; - - # Get all the text delimited by -- ASN1START and -- ASN1STOP - extract_asn1(); - - syswrite OUTPUT_FILE,"END\n\n"; - close(OUTPUT_FILE); - } - # Process the NR-InterNodeDefinitions section - if( m/NR-InterNodeDefinitions DEFINITIONS AUTOMATIC TAGS ::=/){ - open(OUTPUT_FILE, "> $NR_internode_output_file") or die "Can not open file $def_output_file"; - syswrite OUTPUT_FILE,"$_ \n"; - syswrite OUTPUT_FILE,"BEGIN\n\n"; - - # Get all the text delimited by -- ASN1START and -- ASN1STOP - extract_asn1(); - - syswrite OUTPUT_FILE,"END\n\n"; - close(OUTPUT_FILE); - } - -} - -close(INPUT_FILE); - -# This subroutine copies the text delimited by -- ASN1START and -- ASN1STOP in INPUT_FILE -# and copies it into OUTPUT_FILE. -# It stops when it meets the keyword "END" -sub extract_asn1 { - my $line = <INPUT_FILE>; - my $is_asn1 = 0; - - while(($line ne "END\n") && ($line ne "END\r\n")){ - if ($line =~ m/-- ASN1STOP/) { - $is_asn1 = 0; - } - if ($is_asn1 == 1){ - syswrite OUTPUT_FILE,"$line"; - } - if ($line =~ m/-- ASN1START/) { - $is_asn1 = 1; - } - $line = <INPUT_FILE>; - } -} diff --git a/openair2/RRC/NR/defs_NR.h b/openair2/RRC/NR/defs_NR.h index 0a2b19f65c03d90e156af47d92f81928c57e0a6f..e96fe9c95e2508a1df764763605e86e7f6b26fff 100644 --- a/openair2/RRC/NR/defs_NR.h +++ b/openair2/RRC/NR/defs_NR.h @@ -94,11 +94,11 @@ typedef struct uid_linear_allocator_NR_s { } uid_allocator_NR_t; -#define PROTOCOL_RRC_CTXT_UE_FMT PROTOCOL_CTXT_FMT -#define PROTOCOL_RRC_CTXT_UE_ARGS(CTXT_Pp) PROTOCOL_CTXT_ARGS(CTXT_Pp) +#define PROTOCOL_NRRRC_CTXT_UE_FMT PROTOCOL_CTXT_FMT +#define PROTOCOL_NRRRC_CTXT_UE_ARGS(CTXT_Pp) PROTOCOL_CTXT_ARGS(CTXT_Pp) -#define PROTOCOL_RRC_CTXT_FMT PROTOCOL_CTXT_FMT -#define PROTOCOL_RRC_CTXT_ARGS(CTXT_Pp) PROTOCOL_CTXT_ARGS(CTXT_Pp) +#define PROTOCOL_NRRRC_CTXT_FMT PROTOCOL_CTXT_FMT +#define PROTOCOL_NRRRC_CTXT_ARGS(CTXT_Pp) PROTOCOL_CTXT_ARGS(CTXT_Pp) #define UE_MODULE_INVALID ((module_id_t) ~0) // FIXME attention! depends on type uint8_t!!! diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c index 75c6c195d1f016ae7893b7eed25207c32bf9576a..718e60f2d02f6d00a3aab24968d3c9fee3371513 100644 --- a/openair2/RRC/NR/rrc_gNB.c +++ b/openair2/RRC/NR/rrc_gNB.c @@ -41,7 +41,7 @@ #include "LAYER2/MAC/proto.h" #include "UTIL/LOG/log.h" #include "COMMON/mac_rrc_primitives.h" -#include "RRC/LITE/MESSAGES/asn1_msg.h" +#include "RRC/LITE/NR/asn1_msg.h" ///ASN.1 header files //#include "RRCConnectionRequest.h" @@ -103,6990 +103,211 @@ extern RAN_CONTEXT_t RC; #ifdef PHY_EMUL extern EMULATION_VARS *Emul_vars; #endif -extern eNB_MAC_INST *eNB_mac_inst; -extern UE_MAC_INST *UE_mac_inst; +//extern eNB_MAC_INST *eNB_mac_inst; +//extern UE_MAC_INST *UE_mac_inst; #ifdef BIGPHYSAREA extern void* bigphys_malloc(int); #endif extern uint16_t two_tier_hexagonal_cellIds[7]; -mui_t rrc_eNB_mui = 0; +mui_t rrc_gNB_mui = 0; -void -openair_rrc_on( - const protocol_ctxt_t* const ctxt_pP -) -//----------------------------------------------------------------------------- -{ - int CC_id; - - LOG_I(NR_RRC, PROTOCOL_RRC_CTXT_FMT" gNB:OPENAIR NR RRC IN....\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP)); - for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { - rrc_config_buffer (&RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].SI, BCCH, 1); - RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].SI.Active = 1; - rrc_config_buffer (&RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0, CCCH, 1); - RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Active = 1; - } -} - -//----------------------------------------------------------------------------- -static void -init_SI( - const protocol_ctxt_t* const ctxt_pP, - const int CC_id -#if defined(ENABLE_ITTI) - , - gNB_RrcConfigurationReq * configuration -#endif -) -//----------------------------------------------------------------------------- -{ - int i; - - LOG_D(RRC,"%s()\n\n\n\n",__FUNCTION__); - - // copy basic parameters - RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].physCellId = configuration->Nid_cell[CC_id]; - RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].p_eNB = configuration->nb_antenna_ports[CC_id]; - RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].Ncp = configuration->prefix_type[CC_id]; - RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].dl_CarrierFreq = configuration->downlink_frequency[CC_id]; - RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].ul_CarrierFreq = configuration->downlink_frequency[CC_id]+ configuration->uplink_frequency_offset[CC_id]; - - ///MIB - RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_MIB_NR = 0; - RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].MIB_NR = (uint8_t*) malloc16(4); - RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_MIB_NR = do_MIB_NR(&RC.rrc[ctxt_pP->module_id]->carrier[CC_id],0, - #ifdef ENABLE_ITTI - configuration->ssb_SubcarrierOffset[CC_id], - configuration->pdcch_ConfigSIB1[CC_id], - configuration->subCarrierSpacingCommon[CC_id], - configuration->dmrs_TypeA_Position[CC_id] - #else - 0,0,15,2 - #endif - ); - - ///SIB1 - RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB1_NR = 0; - RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].SIB1_NR = (uint8_t*) malloc16(32); - AssertFatal(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].SIB1_NR! = NULL,PROTOCOL_RRC_CTXT_FMT" init_SI: FATAL, no memory for NR SIB1 allocated\n",PROTOCOL_RRC_CTXT_ARGS(ctxt_pP)); - - RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB1_NR = do_SIB1_NR(&RC.rrc[ctxt_pP->module_id]->carrier[CC_id], - ctxt_pP->module_id, - CC_id - #if defined(ENABLE_ITTI) - , configuration - #endif - ); - - AssertFatal(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB1 != 255,"FATAL, RC.nr_rrc[enb_mod_idP].carrier[CC_id].sizeof_SIB1_NR == 255"); - - -/* - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB23 = 0; - - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].SIB23 = (uint8_t*) malloc16(64); - AssertFatal(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].SIB23!=NULL,"cannot allocate memory for SIB"); - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB23 = do_SIB23( - ctxt_pP->module_id, - - CC_id -#if defined(ENABLE_ITTI) - , configuration -#endif - ); - - AssertFatal(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB23 != 255,"FATAL, RC.rrc[mod].carrier[CC_id].sizeof_SIB23 == 255"); - - - LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" SIB2/3 Contents (partial)\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP)); - LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.n_SB = %ld\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->radioResourceConfigCommon.pusch_ConfigCommon. - pusch_ConfigBasic.n_SB); - LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.hoppingMode = %ld\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->radioResourceConfigCommon.pusch_ConfigCommon. - pusch_ConfigBasic.hoppingMode); - LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.pusch_HoppingOffset = %ld\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->radioResourceConfigCommon.pusch_ConfigCommon. - pusch_ConfigBasic.pusch_HoppingOffset); - LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.enable64QAM = %d\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - (int)RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->radioResourceConfigCommon.pusch_ConfigCommon. - pusch_ConfigBasic.enable64QAM); - LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.groupHoppingEnabled = %d\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - (int)RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->radioResourceConfigCommon.pusch_ConfigCommon. - ul_ReferenceSignalsPUSCH.groupHoppingEnabled); - LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.groupAssignmentPUSCH = %ld\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->radioResourceConfigCommon.pusch_ConfigCommon. - ul_ReferenceSignalsPUSCH.groupAssignmentPUSCH); - LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.sequenceHoppingEnabled = %d\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - (int)RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->radioResourceConfigCommon.pusch_ConfigCommon. - ul_ReferenceSignalsPUSCH.sequenceHoppingEnabled); - LOG_T(RRC, PROTOCOL_RRC_CTXT_FMT" pusch_config_common.cyclicShift = %ld\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->radioResourceConfigCommon.pusch_ConfigCommon. - ul_ReferenceSignalsPUSCH.cyclicShift); - -#if defined(Rel10) || defined(Rel14) - - if (RC.rrc[ctxt_pP->module_id]->carrier[CC_id].MBMS_flag > 0) { - for (i = 0; i < RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->mbsfn_SubframeConfigList->list.count; i++) { - // SIB 2 - // LOG_D(RRC, "[eNB %d] mbsfn_SubframeConfigList.list.count = %ld\n", enb_mod_idP, RC.rrc[enb_mod_idP].sib2->mbsfn_SubframeConfigList->list.count); - LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" SIB13 contents for MBSFN subframe allocation %d/%d(partial)\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - i, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->mbsfn_SubframeConfigList->list.count); - LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" mbsfn_Subframe_pattern is = %x\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->mbsfn_SubframeConfigList->list.array[i]->subframeAllocation.choice.oneFrame.buf[0] >> 0); - LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" radioframe_allocation_period = %ld (just index number, not the real value)\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->mbsfn_SubframeConfigList->list.array[i]->radioframeAllocationPeriod); // need to display the real value, using array of char (like in dumping SIB2) - LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" radioframe_allocation_offset = %ld\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->mbsfn_SubframeConfigList->list.array[i]->radioframeAllocationOffset); - } - - // SIB13 - for (i = 0; i < RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib13->mbsfn_AreaInfoList_r9.list.count; i++) { - LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" SIB13 contents for MBSFN sync area %d/%d (partial)\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - i, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib13->mbsfn_AreaInfoList_r9.list.count); - LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" MCCH Repetition Period: %ld (just index number, not real value)\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib13->mbsfn_AreaInfoList_r9.list.array[i]->mcch_Config_r9.mcch_RepetitionPeriod_r9); - LOG_D(RRC, PROTOCOL_RRC_CTXT_FMT" MCCH Offset: %ld\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib13->mbsfn_AreaInfoList_r9.list.array[i]->mcch_Config_r9.mcch_Offset_r9); - } - } - else memset((void*)&RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib13,0,sizeof(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib13)); -#endif - - LOG_D(RRC, - PROTOCOL_RRC_CTXT_FMT" RRC_UE --- MAC_CONFIG_REQ (SIB1.tdd & SIB2 params) ---> MAC_UE\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP)); - -#ifdef Rel14 - if ((RC.rrc[ctxt_pP->module_id]->carrier[CC_id].mib.message.schedulingInfoSIB1_BR_r13>0) && - (RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1_BR!=NULL)) { - AssertFatal(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1_BR->nonCriticalExtension!=NULL, - "sib2_br->nonCriticalExtension is null (v8.9)\n"); - AssertFatal(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1_BR->nonCriticalExtension->nonCriticalExtension!=NULL, - "sib2_br->nonCriticalExtension is null (v9.2)\n"); - AssertFatal(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1_BR->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension!=NULL, - "sib2_br->nonCriticalExtension is null (v11.3)\n"); - AssertFatal(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1_BR->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension!=NULL, - "sib2_br->nonCriticalExtension is null (v12.5)\n"); - AssertFatal(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1_BR->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension!=NULL, - "sib2_br->nonCriticalExtension is null (v13.10)\n"); - sib1_v13ext = RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1_BR->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension->nonCriticalExtension; - } -#endif - - LOG_D(RRC, "About to call rrc_mac_config_req_eNB\n"); -*/ - rrc_mac_config_req_eNB(ctxt_pP->module_id, CC_id, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].physCellId, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].p_eNB, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Ncp, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1->freqBandIndicator, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].dl_CarrierFreq, -#ifdef Rel14 - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].pbch_repetition, -#endif - 0, // rnti - (BCCH_BCH_Message_t *) - &RC.rrc[ctxt_pP->module_id]->carrier[CC_id].mib, - (RadioResourceConfigCommonSIB_t *) & - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->radioResourceConfigCommon, -#if defined(Rel14) - (RadioResourceConfigCommonSIB_t *) & - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2_BR->radioResourceConfigCommon, -#endif - (struct PhysicalConfigDedicated *)NULL, -#if defined(Rel10) || defined(Rel14) - (SCellToAddMod_r10_t *)NULL, - //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, -#endif - (MeasObjectToAddMod_t **) NULL, - (MAC_MainConfig_t *) NULL, 0, - (struct LogicalChannelConfig *)NULL, - (MeasGapConfig_t *) NULL, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1->tdd_Config, - NULL, - &RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib1->schedulingInfoList, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].ul_CarrierFreq, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->freqInfo.ul_Bandwidth, - &RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->freqInfo.additionalSpectrumEmission, - (MBSFN_SubframeConfigList_t*) RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib2->mbsfn_SubframeConfigList -#if defined(Rel10) || defined(Rel14) - , - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].MBMS_flag, - (MBSFN_AreaInfoList_r9_t*) & RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sib13->mbsfn_AreaInfoList_r9, - (PMCH_InfoList_r9_t *) NULL -#endif -#ifdef Rel14 - , - sib1_v13ext -#endif - ); -} - -#if defined(Rel10) || defined(Rel14) -/*------------------------------------------------------------------------------*/ -static void -init_MCCH( - module_id_t enb_mod_idP, - int CC_id -) -//----------------------------------------------------------------------------- -{ - - int sync_area = 0; - // initialize RRC_eNB_INST MCCH entry - RC.rrc[enb_mod_idP]->carrier[CC_id].MCCH_MESSAGE = - malloc(RC.rrc[enb_mod_idP]->carrier[CC_id].num_mbsfn_sync_area * sizeof(uint8_t*)); - - for (sync_area = 0; sync_area < RC.rrc[enb_mod_idP]->carrier[CC_id].num_mbsfn_sync_area; sync_area++) { - - RC.rrc[enb_mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[sync_area] = 0; - RC.rrc[enb_mod_idP]->carrier[CC_id].MCCH_MESSAGE[sync_area] = (uint8_t *) malloc16(32); - - AssertFatal(RC.rrc[enb_mod_idP]->carrier[CC_id].MCCH_MESSAGE[sync_area] != NULL, - "[eNB %d]init_MCCH: FATAL, no memory for MCCH MESSAGE allocated \n", enb_mod_idP); - RC.rrc[enb_mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[sync_area] = do_MBSFNAreaConfig(enb_mod_idP, - sync_area, - (uint8_t *)RC.rrc[enb_mod_idP]->carrier[CC_id].MCCH_MESSAGE[sync_area], - &RC.rrc[enb_mod_idP]->carrier[CC_id].mcch, - &RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message); - - LOG_I(RRC, "mcch message pointer %p for sync area %d \n", - RC.rrc[enb_mod_idP]->carrier[CC_id].MCCH_MESSAGE[sync_area], - sync_area); - LOG_D(RRC, "[eNB %d] MCCH_MESSAGE contents for Sync Area %d (partial)\n", enb_mod_idP, sync_area); - LOG_D(RRC, "[eNB %d] CommonSF_AllocPeriod_r9 %ld\n", enb_mod_idP, - RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message->commonSF_AllocPeriod_r9); - LOG_D(RRC, - "[eNB %d] CommonSF_Alloc_r9.list.count (number of MBSFN Subframe Pattern) %d\n", - enb_mod_idP, RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message->commonSF_Alloc_r9.list.count); - LOG_D(RRC, "[eNB %d] MBSFN Subframe Pattern: %02x (in hex)\n", - enb_mod_idP, - RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message->commonSF_Alloc_r9.list.array[0]->subframeAllocation. - choice.oneFrame.buf[0]); - - AssertFatal(RC.rrc[enb_mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[sync_area] != 255, - "RC.rrc[enb_mod_idP]->carrier[CC_id].sizeof_MCCH_MESSAGE[sync_area] == 255"); - RC.rrc[enb_mod_idP]->carrier[CC_id].MCCH_MESS[sync_area].Active = 1; - } - - - //Set the RC.rrc[enb_mod_idP]->MCCH_MESS.Active to 1 (allow to transfer MCCH message RRC->MAC in function mac_rrc_data_req) - - // ??Configure MCCH logical channel - // call mac_config_req with appropriate structure from ASN.1 description - - - // LOG_I(RRC, "DUY: serviceID is %d\n",RC.rrc[enb_mod_idP]->mcch_message->pmch_InfoList_r9.list.array[0]->mbms_SessionInfoList_r9.list.array[0]->tmgi_r9.serviceId_r9.buf[2]); - // LOG_I(RRC, "DUY: session ID is %d\n",RC.rrc[enb_mod_idP]->mcch_message->pmch_InfoList_r9.list.array[0]->mbms_SessionInfoList_r9.list.array[0]->sessionId_r9->buf[0]); - rrc_mac_config_req_eNB(enb_mod_idP, CC_id, - 0,0,0,0,0, -#ifdef Rel14 - 0, -#endif - 0,//rnti - (BCCH_BCH_Message_t *)NULL, - (RadioResourceConfigCommonSIB_t *) NULL, -#ifdef Rel14 - (RadioResourceConfigCommonSIB_t *) NULL, -#endif - (struct PhysicalConfigDedicated *)NULL, -#if defined(Rel10) || defined(Rel14) - (SCellToAddMod_r10_t *)NULL, - //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, -#endif - (MeasObjectToAddMod_t **) NULL, - (MAC_MainConfig_t *) NULL, - 0, - (struct LogicalChannelConfig *)NULL, - (MeasGapConfig_t *) NULL, - (TDD_Config_t *) NULL, - (MobilityControlInfo_t *)NULL, - (SchedulingInfoList_t *) NULL, - 0, NULL, NULL, (MBSFN_SubframeConfigList_t *) NULL -#if defined(Rel10) || defined(Rel14) - , - 0, - (MBSFN_AreaInfoList_r9_t *) NULL, - (PMCH_InfoList_r9_t *) & (RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message->pmch_InfoList_r9) -# endif -# ifdef Rel14 - , - (SystemInformationBlockType1_v1310_IEs_t *)NULL -# endif - ); - - //LOG_I(RRC,"DUY: lcid after rrc_mac_config_req is %02d\n",RC.rrc[enb_mod_idP]->mcch_message->pmch_InfoList_r9.list.array[0]->mbms_SessionInfoList_r9.list.array[0]->logicalChannelIdentity_r9); - -} - -//----------------------------------------------------------------------------- -static void init_MBMS( - module_id_t enb_mod_idP, - int CC_id, - frame_t frameP -) -//----------------------------------------------------------------------------- -{ - // init the configuration for MTCH - protocol_ctxt_t ctxt; - - if (RC.rrc[enb_mod_idP]->carrier[CC_id].MBMS_flag > 0) { - PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, enb_mod_idP, ENB_FLAG_YES, NOT_A_RNTI, frameP, 0,enb_mod_idP); - - LOG_D(RRC, "[eNB %d] Frame %d : Radio Bearer config request for MBMS\n", enb_mod_idP, frameP); //check the lcid - // Configuring PDCP and RLC for MBMS Radio Bearer - - rrc_pdcp_config_asn1_req(&ctxt, - (SRB_ToAddModList_t *)NULL, // SRB_ToAddModList - (DRB_ToAddModList_t *)NULL, // DRB_ToAddModList - (DRB_ToReleaseList_t *)NULL, - 0, // security mode - NULL, // key rrc encryption - NULL, // key rrc integrity - NULL // key encryption -# if defined(Rel10) || defined(Rel14) - , &(RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message->pmch_InfoList_r9) -# endif - ,NULL); - - rrc_rlc_config_asn1_req(&ctxt, - NULL, // SRB_ToAddModList - NULL, // DRB_ToAddModList - NULL, // DRB_ToReleaseList - &(RC.rrc[enb_mod_idP]->carrier[CC_id].mcch_message->pmch_InfoList_r9)); - - //rrc_mac_config_req(); - } -} -#endif - -//----------------------------------------------------------------------------- -uint8_t -rrc_eNB_get_next_transaction_identifier( - module_id_t enb_mod_idP -) -//----------------------------------------------------------------------------- -{ - static uint8_t rrc_transaction_identifier[NUMBER_OF_eNB_MAX]; - rrc_transaction_identifier[enb_mod_idP] = (rrc_transaction_identifier[enb_mod_idP] + 1) % RRC_TRANSACTION_IDENTIFIER_NUMBER; - LOG_T(RRC,"generated xid is %d\n",rrc_transaction_identifier[enb_mod_idP]); - return rrc_transaction_identifier[enb_mod_idP]; -} -/*------------------------------------------------------------------------------*/ -/* Functions to handle UE index in eNB UE list */ - - -////----------------------------------------------------------------------------- -//static module_id_t -//rrc_eNB_get_UE_index( -// module_id_t enb_mod_idP, -// uint64_t UE_identity -//) -////----------------------------------------------------------------------------- -//{ -// -// boolean_t reg = FALSE; -// module_id_t i; -// -// AssertFatal(enb_mod_idP < NB_eNB_INST, "eNB index invalid (%d/%d)!", enb_mod_idP, NB_eNB_INST); -// -// for (i = 0; i < NUMBER_OF_UE_MAX; i++) { -// if (RC.rrc[enb_mod_idP]->Info.UE_list[i] == UE_identity) { -// // UE_identity already registered -// reg = TRUE; -// break; -// } -// } -// -// if (reg == FALSE) { -// return (UE_MODULE_INVALID); -// } else -// return (i); -//} - - -//----------------------------------------------------------------------------- -// return the ue context if there is already an UE with ue_identityP, NULL otherwise -static struct rrc_eNB_ue_context_s* -rrc_eNB_ue_context_random_exist( - const protocol_ctxt_t* const ctxt_pP, - const uint64_t ue_identityP -) -//----------------------------------------------------------------------------- -{ - struct rrc_eNB_ue_context_s* ue_context_p = NULL; - RB_FOREACH(ue_context_p, rrc_ue_tree_s, &(RC.rrc[ctxt_pP->module_id]->rrc_ue_head)) { - if (ue_context_p->ue_context.random_ue_identity == ue_identityP) - return ue_context_p; - } - return NULL; -} -//----------------------------------------------------------------------------- -// return the ue context if there is already an UE with the same S-TMSI(MMEC+M-TMSI), NULL otherwise -static struct rrc_eNB_ue_context_s* -rrc_eNB_ue_context_stmsi_exist( - const protocol_ctxt_t* const ctxt_pP, - const mme_code_t mme_codeP, - const m_tmsi_t m_tmsiP -) -//----------------------------------------------------------------------------- -{ - struct rrc_eNB_ue_context_s* ue_context_p = NULL; - RB_FOREACH(ue_context_p, rrc_ue_tree_s, &(RC.rrc[ctxt_pP->module_id]->rrc_ue_head)) { - LOG_I(RRC,"checking for UE S-TMSI %x, mme %x (%p): rnti %x", - m_tmsiP, mme_codeP, ue_context_p, - ue_context_p->ue_context.rnti); - if (ue_context_p->ue_context.Initialue_identity_s_TMSI.presence == TRUE) { - printf("=> S-TMSI %x, MME %x\n", - ue_context_p->ue_context.Initialue_identity_s_TMSI.m_tmsi, - ue_context_p->ue_context.Initialue_identity_s_TMSI.mme_code); - if (ue_context_p->ue_context.Initialue_identity_s_TMSI.m_tmsi == m_tmsiP) - if (ue_context_p->ue_context.Initialue_identity_s_TMSI.mme_code == mme_codeP) - return ue_context_p; - } - else - printf("\n"); - - } - return NULL; -} - -//----------------------------------------------------------------------------- -// return a new ue context structure if ue_identityP, ctxt_pP->rnti not found in collection -static struct rrc_eNB_ue_context_s* -rrc_eNB_get_next_free_ue_context( - const protocol_ctxt_t* const ctxt_pP, - const uint64_t ue_identityP -) -//----------------------------------------------------------------------------- -{ - struct rrc_eNB_ue_context_s* ue_context_p = NULL; - ue_context_p = rrc_eNB_get_ue_context( - RC.rrc[ctxt_pP->module_id], - ctxt_pP->rnti); - - if (ue_context_p == NULL) { -#if 0 - RB_FOREACH(ue_context_p, rrc_ue_tree_s, &(RC.rrc[ctxt_pP->module_id]->rrc_ue_head)) { - if (ue_context_p->ue_context.random_ue_identity == ue_identityP) { - LOG_D(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" Cannot create new UE context, already exist rand UE id 0x%"PRIx64", uid %u\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - ue_identityP, - ue_context_p->local_uid); - return NULL; - } - } -#endif - ue_context_p = rrc_eNB_allocate_new_UE_context(RC.rrc[ctxt_pP->module_id]); - - if (ue_context_p == NULL) { - LOG_E(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" Cannot create new UE context, no memory\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); - return NULL; - } - - ue_context_p->ue_id_rnti = ctxt_pP->rnti; // here ue_id_rnti is just a key, may be something else - ue_context_p->ue_context.rnti = ctxt_pP->rnti; // yes duplicate, 1 may be removed - ue_context_p->ue_context.random_ue_identity = ue_identityP; - RB_INSERT(rrc_ue_tree_s, &RC.rrc[ctxt_pP->module_id]->rrc_ue_head, ue_context_p); - LOG_D(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" Created new UE context uid %u\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - ue_context_p->local_uid); - return ue_context_p; - - } else { - LOG_E(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" Cannot create new UE context, already exist\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); - return NULL; - } -} - -#if 0 //!defined(ENABLE_USE_MME) -void rrc_eNB_emulation_notify_ue_module_id( - const module_id_t ue_module_idP, - const rnti_t rntiP, - const uint8_t cell_identity_byte0P, - const uint8_t cell_identity_byte1P, - const uint8_t cell_identity_byte2P, - const uint8_t cell_identity_byte3P) -{ - module_id_t enb_module_id; - struct rrc_eNB_ue_context_s* ue_context_p = NULL; - int CC_id; - - // find enb_module_id - for (enb_module_id = 0; enb_module_id < NUMBER_OF_eNB_MAX; enb_module_id++) { - if(enb_module_id>0){ /*FIX LATER*/ - return; - } - for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { - if (&RC.rrc[enb_module_id]->carrier[CC_id].sib1 != NULL) { - if ( - (&RC.rrc[enb_module_id]->carrier[CC_id].sib1->cellAccessRelatedInfo.cellIdentity.buf[0] == cell_identity_byte0P) && - (&RC.rrc[enb_module_id]->carrier[CC_id].sib1->cellAccessRelatedInfo.cellIdentity.buf[1] == cell_identity_byte1P) && - (&RC.rrc[enb_module_id]->carrier[CC_id].sib1->cellAccessRelatedInfo.cellIdentity.buf[2] == cell_identity_byte2P) && - (&RC.rrc[enb_module_id]->carrier[CC_id].sib1->cellAccessRelatedInfo.cellIdentity.buf[3] == cell_identity_byte3P) - ) { - ue_context_p = rrc_eNB_get_ue_context( - RC.rrc[enb_module_id], - rntiP - ); - - if (NULL != ue_context_p) { - oai_emulation.info.eNB_ue_local_uid_to_ue_module_id[enb_module_id][ue_context_p->local_uid] = ue_module_idP; - } - - //return; - } - } - } - oai_emulation.info.eNB_ue_module_id_to_rnti[enb_module_id][ue_module_idP] = rntiP; - } - - AssertFatal(enb_module_id == NUMBER_OF_eNB_MAX, - "Cell identity not found for ue module id %u rnti %x", - ue_module_idP, rntiP); -} -#endif - -//----------------------------------------------------------------------------- -void -rrc_eNB_free_mem_UE_context( - const protocol_ctxt_t* const ctxt_pP, - struct rrc_eNB_ue_context_s* const ue_context_pP -) -//----------------------------------------------------------------------------- -{ - int i; - LOG_T(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" Clearing UE context 0x%p (free internal structs)\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - ue_context_pP); -#if defined(Rel10) || defined(Rel14) - ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_SCellToAddMod_r10, &ue_context_pP->ue_context.sCell_config[0]); - ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_SCellToAddMod_r10, &ue_context_pP->ue_context.sCell_config[1]); -#endif - - if (ue_context_pP->ue_context.SRB_configList) { - ASN_STRUCT_FREE(asn_DEF_SRB_ToAddModList, ue_context_pP->ue_context.SRB_configList); - ue_context_pP->ue_context.SRB_configList = NULL; - } - - for(i = 0;i < RRC_TRANSACTION_IDENTIFIER_NUMBER;i++){ - if (ue_context_pP->ue_context.SRB_configList2[i]) { - free(ue_context_pP->ue_context.SRB_configList2[i]); - ue_context_pP->ue_context.SRB_configList2[i] = NULL; - } - } - - if (ue_context_pP->ue_context.DRB_configList) { - ASN_STRUCT_FREE(asn_DEF_DRB_ToAddModList, ue_context_pP->ue_context.DRB_configList); - ue_context_pP->ue_context.DRB_configList = NULL; - } - - for(i = 0;i < RRC_TRANSACTION_IDENTIFIER_NUMBER;i++){ - if (ue_context_pP->ue_context.DRB_configList2[i]) { - free(ue_context_pP->ue_context.DRB_configList2[i]); - ue_context_pP->ue_context.DRB_configList2[i] = NULL; - } - if (ue_context_pP->ue_context.DRB_Release_configList2[i]) { - free(ue_context_pP->ue_context.DRB_Release_configList2[i]); - ue_context_pP->ue_context.DRB_Release_configList2[i] = NULL; - } - } - - memset(ue_context_pP->ue_context.DRB_active, 0, sizeof(ue_context_pP->ue_context.DRB_active)); - - if (ue_context_pP->ue_context.physicalConfigDedicated) { - ASN_STRUCT_FREE(asn_DEF_PhysicalConfigDedicated, ue_context_pP->ue_context.physicalConfigDedicated); - ue_context_pP->ue_context.physicalConfigDedicated = NULL; - } - - if (ue_context_pP->ue_context.sps_Config) { - ASN_STRUCT_FREE(asn_DEF_SPS_Config, ue_context_pP->ue_context.sps_Config); - ue_context_pP->ue_context.sps_Config = NULL; - } - - for (i=0; i < MAX_MEAS_OBJ; i++) { - if (ue_context_pP->ue_context.MeasObj[i] != NULL) { - ASN_STRUCT_FREE(asn_DEF_MeasObjectToAddMod, ue_context_pP->ue_context.MeasObj[i]); - ue_context_pP->ue_context.MeasObj[i] = NULL; - } - } - - for (i=0; i < MAX_MEAS_CONFIG; i++) { - if (ue_context_pP->ue_context.ReportConfig[i] != NULL) { - ASN_STRUCT_FREE(asn_DEF_ReportConfigToAddMod, ue_context_pP->ue_context.ReportConfig[i]); - ue_context_pP->ue_context.ReportConfig[i] = NULL; - } - } - - if (ue_context_pP->ue_context.QuantityConfig) { - ASN_STRUCT_FREE(asn_DEF_QuantityConfig, ue_context_pP->ue_context.QuantityConfig); - ue_context_pP->ue_context.QuantityConfig = NULL; - } - - if (ue_context_pP->ue_context.mac_MainConfig) { - ASN_STRUCT_FREE(asn_DEF_MAC_MainConfig, ue_context_pP->ue_context.mac_MainConfig); - ue_context_pP->ue_context.mac_MainConfig = NULL; - } - -/* if (ue_context_pP->ue_context.measGapConfig) { - ASN_STRUCT_FREE(asn_DEF_MeasGapConfig, ue_context_pP->ue_context.measGapConfig); - ue_context_pP->ue_context.measGapConfig = NULL; - }*/ - if (ue_context_pP->ue_context.handover_info) { - ASN_STRUCT_FREE(asn_DEF_Handover, ue_context_pP->ue_context.handover_info); - ue_context_pP->ue_context.handover_info = NULL; - } - - //SRB_INFO SI; - //SRB_INFO Srb0; - //SRB_INFO_TABLE_ENTRY Srb1; - //SRB_INFO_TABLE_ENTRY Srb2; - if (ue_context_pP->ue_context.measConfig) { - ASN_STRUCT_FREE(asn_DEF_MeasConfig, ue_context_pP->ue_context.measConfig); - ue_context_pP->ue_context.measConfig = NULL; - } - - if (ue_context_pP->ue_context.measConfig) { - ASN_STRUCT_FREE(asn_DEF_MeasConfig, ue_context_pP->ue_context.measConfig); - ue_context_pP->ue_context.measConfig = NULL; - } - - //HANDOVER_INFO *handover_info; -#if defined(ENABLE_SECURITY) - //uint8_t kenb[32]; -#endif - //e_SecurityAlgorithmConfig__cipheringAlgorithm ciphering_algorithm; - //e_SecurityAlgorithmConfig__integrityProtAlgorithm integrity_algorithm; - //uint8_t Status; - //rnti_t rnti; - //uint64_t random_ue_identity; -#if defined(ENABLE_ITTI) - //UE_S_TMSI Initialue_identity_s_TMSI; - //EstablishmentCause_t establishment_cause; - //ReestablishmentCause_t reestablishment_cause; - //uint16_t ue_initial_id; - //uint32_t eNB_ue_s1ap_id :24; - //security_capabilities_t security_capabilities; - //uint8_t nb_of_e_rabs; - //e_rab_param_t e_rab[S1AP_MAX_E_RAB]; - //uint32_t enb_gtp_teid[S1AP_MAX_E_RAB]; - //transport_layer_addr_t enb_gtp_addrs[S1AP_MAX_E_RAB]; - //rb_id_t enb_gtp_ebi[S1AP_MAX_E_RAB]; -#endif -} - -//----------------------------------------------------------------------------- -// should be called when UE is lost by eNB -void -rrc_eNB_free_UE(const module_id_t enb_mod_idP,const struct rrc_eNB_ue_context_s* const ue_context_pP) -//----------------------------------------------------------------------------- -{ - - - protocol_ctxt_t ctxt; -#if !defined(ENABLE_USE_MME) - module_id_t ue_module_id; - /* avoid gcc warnings */ - (void)ue_module_id; -#endif - rnti_t rnti = ue_context_pP->ue_context.rnti; - int i, j , CC_id, pdu_number; - LTE_eNB_ULSCH_t *ulsch = NULL; - LTE_eNB_DLSCH_t *dlsch = NULL; - nfapi_ul_config_request_body_t *ul_req_tmp = NULL; - PHY_VARS_eNB *eNB_PHY = NULL; - eNB_MAC_INST *eNB_MAC = RC.mac[enb_mod_idP]; - - AssertFatal(enb_mod_idP < NB_eNB_INST, "eNB inst invalid (%d/%d) for UE %x!", enb_mod_idP, NB_eNB_INST, rnti); - /* ue_context_p = rrc_eNB_get_ue_context( - &RC.rrc[enb_mod_idP], - rntiP - ); - */ - if (NULL != ue_context_pP) { - PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, enb_mod_idP, ENB_FLAG_YES, rnti, 0, 0,enb_mod_idP); - LOG_W(RRC, "[eNB %d] Removing UE RNTI %x\n", enb_mod_idP, rnti); - -#if defined(ENABLE_USE_MME) - if( ue_context_pP->ue_context.ul_failure_timer >= 8 ) { - LOG_I(RRC, "[eNB %d] S1AP_UE_CONTEXT_RELEASE_REQ RNTI %x\n", enb_mod_idP, rnti); - rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_REQ(enb_mod_idP, ue_context_pP, S1AP_CAUSE_RADIO_NETWORK, 21); // send cause 21: connection with ue lost - /* From 3GPP 36300v10 p129 : 19.2.2.2.2 S1 UE Context Release Request (eNB triggered) - * If the E-UTRAN internal reason is a radio link failure detected in the eNB, the eNB shall wait a sufficient time before - * triggering the S1 UE Context Release Request procedure - * in order to allow the UE to perform the NAS recovery - * procedure, see TS 23.401 [17]. - */ - return; - } -#endif - for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { - eNB_PHY = RC.eNB[enb_mod_idP][CC_id]; - for (i=0; i<NUMBER_OF_UE_MAX; i++) { - ulsch = eNB_PHY->ulsch[i]; - if((ulsch != NULL) && (ulsch->rnti == rnti)){ - LOG_I(RRC, "clean_eNb_ulsch UE %x \n", rnti); - clean_eNb_ulsch(ulsch); - } - } - for (i=0; i<NUMBER_OF_UE_MAX; i++) { - dlsch = eNB_PHY->dlsch[i][0]; - if((dlsch != NULL) && (dlsch->rnti == rnti)){ - LOG_I(RRC, "clean_eNb_dlsch UE %x \n", rnti); - clean_eNb_dlsch(dlsch); - } - } - - if (rrc_agent_registered[enb_mod_idP]) { - agent_rrc_xface[enb_mod_idP]->flexran_agent_notify_ue_state_change(enb_mod_idP, - rnti, PROTOCOL__FLEX_UE_STATE_CHANGE_TYPE__FLUESC_DEACTIVATED); - } - - for(j = 0; j < 10; j++){ - ul_req_tmp = &eNB_MAC->UL_req_tmp[CC_id][j].ul_config_request_body; - if(ul_req_tmp){ - pdu_number = ul_req_tmp->number_of_pdus; - for(int pdu_index = pdu_number-1; pdu_index >= 0; pdu_index--){ - if(ul_req_tmp->ul_config_pdu_list[pdu_index].ulsch_pdu.ulsch_pdu_rel8.rnti == rnti){ - LOG_I(RRC, "remove UE %x from ul_config_pdu_list %d/%d\n", rnti, pdu_index, pdu_number); - if(pdu_index < pdu_number -1){ - memcpy(&ul_req_tmp->ul_config_pdu_list[pdu_index], &ul_req_tmp->ul_config_pdu_list[pdu_index+1], (pdu_number-1-pdu_index) * sizeof(nfapi_ul_config_request_pdu_t)); - } - ul_req_tmp->number_of_pdus--; - } - } - } - } - } - rrc_mac_remove_ue(enb_mod_idP,rnti); - rrc_rlc_remove_ue(&ctxt); - pdcp_remove_UE(&ctxt); - - rrc_eNB_remove_ue_context( - &ctxt, - RC.rrc[enb_mod_idP], - (struct rrc_eNB_ue_context_s*) ue_context_pP); - } -} - -//----------------------------------------------------------------------------- -void -rrc_eNB_process_RRCConnectionSetupComplete( - const protocol_ctxt_t* const ctxt_pP, - rrc_eNB_ue_context_t* ue_context_pP, - RRCConnectionSetupComplete_r8_IEs_t * rrcConnectionSetupComplete -) -//----------------------------------------------------------------------------- -{ - LOG_I(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel UL-DCCH, " "processing RRCConnectionSetupComplete from UE (SRB1 Active)\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); - - ue_context_pP->ue_context.Srb1.Active=1; - T(T_ENB_RRC_CONNECTION_SETUP_COMPLETE, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); - -#if defined(ENABLE_USE_MME) - - if (EPC_MODE_ENABLED == 1) { - // Forward message to S1AP layer - rrc_eNB_send_S1AP_NAS_FIRST_REQ( - ctxt_pP, - ue_context_pP, - rrcConnectionSetupComplete); - } else -#endif - { - // RRC loop back (no S1AP), send SecurityModeCommand to UE - rrc_eNB_generate_SecurityModeCommand( - ctxt_pP, - ue_context_pP); - // rrc_eNB_generate_UECapabilityEnquiry(enb_mod_idP,frameP,ue_mod_idP); - } -} - -//----------------------------------------------------------------------------- -void -rrc_eNB_generate_SecurityModeCommand( - const protocol_ctxt_t* const ctxt_pP, - rrc_eNB_ue_context_t* const ue_context_pP -) -//----------------------------------------------------------------------------- -{ - uint8_t buffer[100]; - uint8_t size; - - T(T_ENB_RRC_SECURITY_MODE_COMMAND, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); - - size = do_SecurityModeCommand( - ctxt_pP, - buffer, - rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id), - ue_context_pP->ue_context.ciphering_algorithm, - ue_context_pP->ue_context.integrity_algorithm); - -#ifdef RRC_MSG_PRINT - uint16_t i=0; - LOG_F(RRC,"[MSG] RRC Security Mode Command\n"); - - for (i = 0; i < size; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]); - } - - LOG_F(RRC,"\n"); -#endif - - LOG_I(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" Logical Channel DL-DCCH, Generate SecurityModeCommand (bytes %d)\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - size); - - LOG_D(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" --- PDCP_DATA_REQ/%d Bytes (securityModeCommand to UE MUI %d) --->[PDCP][RB %02d]\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - size, - rrc_eNB_mui, - DCCH); - - MSC_LOG_TX_MESSAGE( - MSC_RRC_ENB, - MSC_RRC_UE, - buffer, - size, - MSC_AS_TIME_FMT" securityModeCommand UE %x MUI %d size %u", - MSC_AS_TIME_ARGS(ctxt_pP), - ue_context_pP->ue_context.rnti, - rrc_eNB_mui, - size); - - rrc_data_req( - ctxt_pP, - DCCH, - rrc_eNB_mui++, - SDU_CONFIRM_NO, - size, - buffer, - PDCP_TRANSMISSION_MODE_CONTROL); - -} - -//----------------------------------------------------------------------------- -void -rrc_eNB_generate_UECapabilityEnquiry( - const protocol_ctxt_t* const ctxt_pP, - rrc_eNB_ue_context_t* const ue_context_pP -) -//----------------------------------------------------------------------------- -{ - - uint8_t buffer[100]; - uint8_t size; - - T(T_ENB_RRC_UE_CAPABILITY_ENQUIRY, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); - - size = do_UECapabilityEnquiry( - ctxt_pP, - buffer, - rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id)); - - LOG_I(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" Logical Channel DL-DCCH, Generate UECapabilityEnquiry (bytes %d)\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - size); - - LOG_D(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" --- PDCP_DATA_REQ/%d Bytes (UECapabilityEnquiry MUI %d) --->[PDCP][RB %02d]\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - size, - rrc_eNB_mui, - DCCH); - - MSC_LOG_TX_MESSAGE( - MSC_RRC_ENB, - MSC_RRC_UE, - buffer, - size, - MSC_AS_TIME_FMT" rrcUECapabilityEnquiry UE %x MUI %d size %u", - MSC_AS_TIME_ARGS(ctxt_pP), - ue_context_pP->ue_context.rnti, - rrc_eNB_mui, - size); - - rrc_data_req( - ctxt_pP, - DCCH, - rrc_eNB_mui++, - SDU_CONFIRM_NO, - size, - buffer, - PDCP_TRANSMISSION_MODE_CONTROL); - -} - -//----------------------------------------------------------------------------- -void -rrc_eNB_generate_RRCConnectionReject( - const protocol_ctxt_t* const ctxt_pP, - rrc_eNB_ue_context_t* const ue_context_pP, - const int CC_id -) -//----------------------------------------------------------------------------- -{ -#ifdef RRC_MSG_PRINT - int cnt; -#endif - - T(T_ENB_RRC_CONNECTION_REJECT, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); - - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size = - do_RRCConnectionReject(ctxt_pP->module_id, - (uint8_t*) RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload); - -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRCConnectionReject\n"); - - for (cnt = 0; cnt < RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size; cnt++) { - LOG_F(RRC,"%02x ", ((uint8_t*)RC.rrc[ctxt_pP->module_id]->Srb0.Tx_buffer.Payload)[cnt]); - } - - LOG_F(RRC,"\n"); -#endif - - MSC_LOG_TX_MESSAGE( - MSC_RRC_ENB, - MSC_RRC_UE, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Header, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size, - MSC_AS_TIME_FMT" RRCConnectionReject UE %x size %u", - MSC_AS_TIME_ARGS(ctxt_pP), - ue_context_pP == NULL ? -1 : ue_context_pP->ue_context.rnti, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size); - - LOG_I(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel DL-CCCH, Generating RRCConnectionReject (bytes %d)\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size); -} - -//----------------------------------------------------------------------------- -void -rrc_eNB_generate_RRCConnectionReestablishment( - const protocol_ctxt_t* const ctxt_pP, - rrc_eNB_ue_context_t* const ue_context_pP, - const int CC_id -) -//----------------------------------------------------------------------------- -{ - LogicalChannelConfig_t *SRB1_logicalChannelConfig; - SRB_ToAddModList_t **SRB_configList; - SRB_ToAddMod_t *SRB1_config; - int cnt; - - T(T_ENB_RRC_CONNECTION_REESTABLISHMENT, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); - - SRB_configList = &ue_context_pP->ue_context.SRB_configList; - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size = - do_RRCConnectionReestablishment(ctxt_pP, - ue_context_pP, - CC_id, - (uint8_t*) RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload, - (uint8_t) RC.rrc[ctxt_pP->module_id]->carrier[CC_id].p_eNB, //at this point we do not have the UE capability information, so it can only be TM1 or TM2 - rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id), - SRB_configList, - &ue_context_pP->ue_context.physicalConfigDedicated); - -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRCConnectionReestablishment\n"); - - for (cnt = 0; cnt < RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size; cnt++) { - LOG_F(RRC,"%02x ", ((uint8_t*)RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload)[cnt]); - } - - LOG_F(RRC,"\n"); -#endif - - // configure SRB1 for UE - - if (*SRB_configList != NULL) { - for (cnt = 0; cnt < (*SRB_configList)->list.count; cnt++) { - if ((*SRB_configList)->list.array[cnt]->srb_Identity == 1) { - SRB1_config = (*SRB_configList)->list.array[cnt]; - - if (SRB1_config->logicalChannelConfig) { - if (SRB1_config->logicalChannelConfig->present == - SRB_ToAddMod__logicalChannelConfig_PR_explicitValue) { - SRB1_logicalChannelConfig = &SRB1_config->logicalChannelConfig->choice.explicitValue; - } else { - SRB1_logicalChannelConfig = &SRB1_logicalChannelConfig_defaultValue; - } - } else { - SRB1_logicalChannelConfig = &SRB1_logicalChannelConfig_defaultValue; - } - - LOG_D(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" RRC_eNB --- MAC_CONFIG_REQ (SRB1) ---> MAC_eNB\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); - rrc_mac_config_req_eNB(ctxt_pP->module_id, - ue_context_pP->ue_context.primaryCC_id, - 0,0,0,0,0, -#ifdef Rel14 - 0, -#endif - ctxt_pP->rnti, - (BCCH_BCH_Message_t *) NULL, - (RadioResourceConfigCommonSIB_t *) NULL, -#ifdef Rel14 - (RadioResourceConfigCommonSIB_t *) NULL, -#endif - (struct PhysicalConfigDedicated* ) ue_context_pP->ue_context.physicalConfigDedicated, -#if defined(Rel10) || defined(Rel14) - (SCellToAddMod_r10_t *)NULL, - //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, -#endif - (MeasObjectToAddMod_t **) NULL, - ue_context_pP->ue_context.mac_MainConfig, - 1, - SRB1_logicalChannelConfig, - ue_context_pP->ue_context.measGapConfig, - (TDD_Config_t *) NULL, - NULL, - (SchedulingInfoList_t *) NULL, - 0, NULL, NULL, (MBSFN_SubframeConfigList_t *) NULL -#if defined(Rel10) || defined(Rel14) - , 0, (MBSFN_AreaInfoList_r9_t *) NULL, (PMCH_InfoList_r9_t *) NULL -#endif -#ifdef Rel14 - ,(SystemInformationBlockType1_v1310_IEs_t *)NULL -#endif - ); - break; - } - } - } - - MSC_LOG_TX_MESSAGE(MSC_RRC_ENB, - MSC_RRC_UE, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Header, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size, - MSC_AS_TIME_FMT" RRCConnectionReestablishment UE %x size %u", - MSC_AS_TIME_ARGS(ctxt_pP), - ue_context_pP->ue_context.rnti, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size); - - - LOG_I(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel DL-CCCH, Generating RRCConnectionReestablishment (bytes %d)\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size); - - // activate release timer, if RRCComplete not received after 10 frames, remove UE - //ue_context_pP->ue_context.ue_release_timer = 1; - // remove UE after 10 frames after RRCConnectionReestablishmentRelease is triggered - //ue_context_pP->ue_context.ue_release_timer_thres = 100; - // activate release timer, if RRCComplete not received after 100 frames, remove UE - int UE_id = find_UE_id(ctxt_pP->module_id, ctxt_pP->rnti); - RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer = 1; - // remove UE after 100 frames after RRCConnectionReestablishmentRelease is triggered - RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer_thres = 1000; -} - -//----------------------------------------------------------------------------- -void -rrc_eNB_process_RRCConnectionReestablishmentComplete( - const protocol_ctxt_t* const ctxt_pP, - const rnti_t reestablish_rnti, - rrc_eNB_ue_context_t* ue_context_pP, - const uint8_t xid, - RRCConnectionReestablishmentComplete_r8_IEs_t * rrcConnectionReestablishmentComplete -) -//----------------------------------------------------------------------------- -{ - LOG_I(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel UL-DCCH, processing RRCConnectionReestablishmentComplete from UE (SRB1 Active)\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); - - T(T_ENB_RRC_CONNECTION_REESTABLISHMENT_COMPLETE, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); - - DRB_ToAddModList_t* DRB_configList = ue_context_pP->ue_context.DRB_configList; - SRB_ToAddModList_t* SRB_configList = ue_context_pP->ue_context.SRB_configList; - SRB_ToAddModList_t** SRB_configList2 = NULL; - DRB_ToAddModList_t** DRB_configList2 = NULL; - struct SRB_ToAddMod *SRB2_config = NULL; - struct DRB_ToAddMod *DRB_config = NULL; - int i = 0; -# if defined(ENABLE_USE_MME) - int j = 0; - hashtable_rc_t h_rc; -#endif - uint8_t buffer[RRC_BUF_SIZE]; - uint16_t size; - MeasObjectToAddModList_t *MeasObj_list = NULL; - MeasObjectToAddMod_t *MeasObj = NULL; - ReportConfigToAddModList_t *ReportConfig_list = NULL; - ReportConfigToAddMod_t *ReportConfig_per, *ReportConfig_A1, - *ReportConfig_A2, *ReportConfig_A3, *ReportConfig_A4, *ReportConfig_A5; - MeasIdToAddModList_t *MeasId_list = NULL; - MeasIdToAddMod_t *MeasId0, *MeasId1, *MeasId2, *MeasId3, *MeasId4, *MeasId5; - RSRP_Range_t *rsrp = NULL; - struct MeasConfig__speedStatePars *Sparams = NULL; - QuantityConfig_t *quantityConfig = NULL; - CellsToAddMod_t *CellToAdd = NULL; - CellsToAddModList_t *CellsToAddModList = NULL; - struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList *dedicatedInfoNASList = NULL; - DedicatedInfoNAS_t *dedicatedInfoNas = NULL; - /* for no gcc warnings */ - (void)dedicatedInfoNas; - C_RNTI_t *cba_RNTI = NULL; - uint8_t next_xid = rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id); - - ue_context_pP->ue_context.Status = RRC_CONNECTED; - - SRB_configList2 = &ue_context_pP->ue_context.SRB_configList2[xid]; - // get old configuration of SRB2 - if (*SRB_configList2 != NULL) { - LOG_D(RRC, "SRB_configList2(%p) count is %d\n SRB_configList2->list.array[0] addr is %p", - SRB_configList2, (*SRB_configList2)->list.count, (*SRB_configList2)->list.array[0]); - for (i = 0; (i < (*SRB_configList2)->list.count) && (i < 3); i++) { - if ((*SRB_configList2)->list.array[i]->srb_Identity == 2 ){ - LOG_D(RRC, "get SRB2_config from (ue_context_pP->ue_context.SRB_configList2[%d])\n", xid); - SRB2_config = (*SRB_configList2)->list.array[i]; - break; - } - } - } - SRB_configList2 = &ue_context_pP->ue_context.SRB_configList2[next_xid]; - DRB_configList2 = &ue_context_pP->ue_context.DRB_configList2[next_xid]; - - if (*SRB_configList2) { - free(*SRB_configList2); - LOG_D(RRC, "free(ue_context_pP->ue_context.SRB_configList2[%d])\n", next_xid); - } - *SRB_configList2 = CALLOC(1, sizeof(**SRB_configList2)); - if (SRB2_config != NULL) { - // Add SRB2 to SRB configuration list - - ASN_SEQUENCE_ADD(&SRB_configList->list, SRB2_config); - ASN_SEQUENCE_ADD(&(*SRB_configList2)->list, SRB2_config); - - LOG_D(RRC, "Add SRB2_config (srb_Identity:%ld) to ue_context_pP->ue_context.SRB_configList\n", - SRB2_config->srb_Identity); - LOG_D(RRC, "Add SRB2_config (srb_Identity:%ld) to ue_context_pP->ue_context.SRB_configList2[%d]\n", - SRB2_config->srb_Identity, next_xid); - } else { - // SRB configuration list only contains SRB1. - LOG_W(RRC,"SRB2 configuration does not exist in SRB configuration list\n"); - } - - - - if (*DRB_configList2) { - free(*DRB_configList2); - LOG_D(RRC, "free(ue_context_pP->ue_context.DRB_configList2[%d])\n", next_xid); - } - *DRB_configList2 = CALLOC(1, sizeof(**DRB_configList2)); - - if (DRB_configList != NULL) { - LOG_D(RRC, "get DRB_config from (ue_context_pP->ue_context.DRB_configList)\n"); - for (i = 0; (i < DRB_configList->list.count) && (i < 3); i++) { - DRB_config = DRB_configList->list.array[i]; - - // Add DRB to DRB configuration list, for RRCConnectionReconfigurationComplete - ASN_SEQUENCE_ADD(&(*DRB_configList2)->list, DRB_config); - } - } - ue_context_pP->ue_context.Srb1.Active = 1; - //ue_context_pP->ue_context.Srb2.Srb_info.Srb_id = 2; - -# if defined(ENABLE_USE_MME) - rrc_ue_s1ap_ids_t* rrc_ue_s1ap_ids_p = NULL; - uint16_t ue_initial_id = ue_context_pP->ue_context.ue_initial_id; - uint32_t eNB_ue_s1ap_id = ue_context_pP->ue_context.eNB_ue_s1ap_id; - eNB_RRC_INST *rrc_instance_p = RC.rrc[ENB_INSTANCE_TO_MODULE_ID(ctxt_pP->instance)]; - if (eNB_ue_s1ap_id > 0) { - h_rc = hashtable_get(rrc_instance_p->s1ap_id2_s1ap_ids, (hash_key_t)eNB_ue_s1ap_id, (void**)&rrc_ue_s1ap_ids_p); - if (h_rc == HASH_TABLE_OK) { - rrc_ue_s1ap_ids_p->ue_rnti = ctxt_pP->rnti; - } - } - if (ue_initial_id != 0) { - h_rc = hashtable_get(rrc_instance_p->initial_id2_s1ap_ids, (hash_key_t)ue_initial_id, (void**)&rrc_ue_s1ap_ids_p); - if (h_rc == HASH_TABLE_OK) { - rrc_ue_s1ap_ids_p->ue_rnti = ctxt_pP->rnti; - } - } - - gtpv1u_enb_create_tunnel_req_t create_tunnel_req; - - /* Save e RAB information for later */ - memset(&create_tunnel_req, 0 , sizeof(create_tunnel_req)); - - for (j = 0, i = 0; i < NB_RB_MAX; i++) { - if (ue_context_pP->ue_context.e_rab[i].status == E_RAB_STATUS_ESTABLISHED) { - create_tunnel_req.eps_bearer_id[j] = ue_context_pP->ue_context.e_rab[i].param.e_rab_id; - create_tunnel_req.sgw_S1u_teid[j] = ue_context_pP->ue_context.e_rab[i].param.gtp_teid; - - memcpy(&create_tunnel_req.sgw_addr[j], - &ue_context_pP->ue_context.e_rab[i].param.sgw_addr, - sizeof(transport_layer_addr_t)); - j++; - } - } - - create_tunnel_req.rnti = ctxt_pP->rnti; // warning put zero above - create_tunnel_req.num_tunnels = j; - - gtpv1u_update_s1u_tunnel( - ctxt_pP->instance, - &create_tunnel_req, - reestablish_rnti); -#endif - /* Update RNTI in ue_context */ - ue_context_pP->ue_id_rnti = ctxt_pP->rnti; // here ue_id_rnti is just a key, may be something else - ue_context_pP->ue_context.rnti = ctxt_pP->rnti; -# if defined(ENABLE_USE_MME) - uint8_t send_security_mode_command = FALSE; - rrc_pdcp_config_security( - ctxt_pP, - ue_context_pP, - send_security_mode_command); - LOG_D(RRC, "set security successfully \n"); -#endif - // Measurement ID list - MeasId_list = CALLOC(1, sizeof(*MeasId_list)); - memset((void *)MeasId_list, 0, sizeof(*MeasId_list)); - - MeasId0 = CALLOC(1, sizeof(*MeasId0)); - MeasId0->measId = 1; - MeasId0->measObjectId = 1; - MeasId0->reportConfigId = 1; - ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId0); - - MeasId1 = CALLOC(1, sizeof(*MeasId1)); - MeasId1->measId = 2; - MeasId1->measObjectId = 1; - MeasId1->reportConfigId = 2; - ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId1); - - MeasId2 = CALLOC(1, sizeof(*MeasId2)); - MeasId2->measId = 3; - MeasId2->measObjectId = 1; - MeasId2->reportConfigId = 3; - ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId2); - - MeasId3 = CALLOC(1, sizeof(*MeasId3)); - MeasId3->measId = 4; - MeasId3->measObjectId = 1; - MeasId3->reportConfigId = 4; - ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId3); - - MeasId4 = CALLOC(1, sizeof(*MeasId4)); - MeasId4->measId = 5; - MeasId4->measObjectId = 1; - MeasId4->reportConfigId = 5; - ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId4); - - MeasId5 = CALLOC(1, sizeof(*MeasId5)); - MeasId5->measId = 6; - MeasId5->measObjectId = 1; - MeasId5->reportConfigId = 6; - ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId5); - - // rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.measConfig->measIdToAddModList = MeasId_list; - - // Add one EUTRA Measurement Object - MeasObj_list = CALLOC(1, sizeof(*MeasObj_list)); - memset((void *)MeasObj_list, 0, sizeof(*MeasObj_list)); - - // Configure MeasObject - - MeasObj = CALLOC(1, sizeof(*MeasObj)); - memset((void *)MeasObj, 0, sizeof(*MeasObj)); - - MeasObj->measObjectId = 1; - MeasObj->measObject.present = MeasObjectToAddMod__measObject_PR_measObjectEUTRA; - MeasObj->measObject.choice.measObjectEUTRA.carrierFreq = 3350; //band 7, 2.68GHz - //MeasObj->measObject.choice.measObjectEUTRA.carrierFreq = 36090; //band 33, 1.909GHz - MeasObj->measObject.choice.measObjectEUTRA.allowedMeasBandwidth = AllowedMeasBandwidth_mbw25; - MeasObj->measObject.choice.measObjectEUTRA.presenceAntennaPort1 = 1; - MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.buf = CALLOC(1, sizeof(uint8_t)); - MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.buf[0] = 0; - MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.size = 1; - MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.bits_unused = 6; - MeasObj->measObject.choice.measObjectEUTRA.offsetFreq = NULL; // Default is 15 or 0dB - - MeasObj->measObject.choice.measObjectEUTRA.cellsToAddModList = - (CellsToAddModList_t *) CALLOC(1, sizeof(*CellsToAddModList)); - - CellsToAddModList = MeasObj->measObject.choice.measObjectEUTRA.cellsToAddModList; - - // Add adjacent cell lists (6 per eNB) - for (i = 0; i < 6; i++) { - CellToAdd = (CellsToAddMod_t *) CALLOC(1, sizeof(*CellToAdd)); - CellToAdd->cellIndex = i + 1; - CellToAdd->physCellId = get_adjacent_cell_id(ctxt_pP->module_id, i); - CellToAdd->cellIndividualOffset = Q_OffsetRange_dB0; - - ASN_SEQUENCE_ADD(&CellsToAddModList->list, CellToAdd); - } - - ASN_SEQUENCE_ADD(&MeasObj_list->list, MeasObj); - // rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.measConfig->measObjectToAddModList = MeasObj_list; - - // Report Configurations for periodical, A1-A5 events - ReportConfig_list = CALLOC(1, sizeof(*ReportConfig_list)); - - ReportConfig_per = CALLOC(1, sizeof(*ReportConfig_per)); - - ReportConfig_A1 = CALLOC(1, sizeof(*ReportConfig_A1)); - - ReportConfig_A2 = CALLOC(1, sizeof(*ReportConfig_A2)); - - ReportConfig_A3 = CALLOC(1, sizeof(*ReportConfig_A3)); - - ReportConfig_A4 = CALLOC(1, sizeof(*ReportConfig_A4)); - - ReportConfig_A5 = CALLOC(1, sizeof(*ReportConfig_A5)); - - ReportConfig_per->reportConfigId = 1; - ReportConfig_per->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.triggerType.present = - ReportConfigEUTRA__triggerType_PR_periodical; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.triggerType.choice.periodical.purpose = - ReportConfigEUTRA__triggerType__periodical__purpose_reportStrongestCells; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - - ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_per); - - ReportConfig_A1->reportConfigId = 2; - ReportConfig_A1->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerType.present = - ReportConfigEUTRA__triggerType_PR_event; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = - ReportConfigEUTRA__triggerType__event__eventId_PR_eventA1; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA1. - a1_Threshold.present = ThresholdEUTRA_PR_threshold_RSRP; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA1. - a1_Threshold.choice.threshold_RSRP = 10; - - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - - ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_A1); - - if (RC.rrc[ctxt_pP->module_id]->HO_flag == 1 /*HO_MEASURMENT */ ) { - LOG_I(RRC, "[eNB %d] frame %d: requesting A2, A3, A4, A5, and A6 event reporting\n", - ctxt_pP->module_id, ctxt_pP->frame); - ReportConfig_A2->reportConfigId = 3; - ReportConfig_A2->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerType.present = - ReportConfigEUTRA__triggerType_PR_event; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = - ReportConfigEUTRA__triggerType__event__eventId_PR_eventA2; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. - eventA2.a2_Threshold.present = ThresholdEUTRA_PR_threshold_RSRP; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. - eventA2.a2_Threshold.choice.threshold_RSRP = 10; - - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerQuantity = - ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - - ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_A2); - - ReportConfig_A3->reportConfigId = 4; - ReportConfig_A3->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.present = - ReportConfigEUTRA__triggerType_PR_event; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = - ReportConfigEUTRA__triggerType__event__eventId_PR_eventA3; - - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA3.a3_Offset = 1; //10; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. - eventA3.reportOnLeave = 1; - - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerQuantity = - ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.hysteresis = 0.5; // FIXME ...hysteresis is of type long! - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.timeToTrigger = - TimeToTrigger_ms40; - ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_A3); - - ReportConfig_A4->reportConfigId = 5; - ReportConfig_A4->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerType.present = - ReportConfigEUTRA__triggerType_PR_event; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = - ReportConfigEUTRA__triggerType__event__eventId_PR_eventA4; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. - eventA4.a4_Threshold.present = ThresholdEUTRA_PR_threshold_RSRP; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. - eventA4.a4_Threshold.choice.threshold_RSRP = 10; - - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerQuantity = - ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - - ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_A4); - - ReportConfig_A5->reportConfigId = 6; - ReportConfig_A5->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.present = - ReportConfigEUTRA__triggerType_PR_event; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = - ReportConfigEUTRA__triggerType__event__eventId_PR_eventA5; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. - eventA5.a5_Threshold1.present = ThresholdEUTRA_PR_threshold_RSRP; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. - eventA5.a5_Threshold2.present = ThresholdEUTRA_PR_threshold_RSRP; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. - eventA5.a5_Threshold1.choice.threshold_RSRP = 10; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. - eventA5.a5_Threshold2.choice.threshold_RSRP = 10; - - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerQuantity = - ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - - ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_A5); - // rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.measConfig->reportConfigToAddModList = ReportConfig_list; - - rsrp = CALLOC(1, sizeof(RSRP_Range_t)); - *rsrp = 20; - - Sparams = CALLOC(1, sizeof(*Sparams)); - Sparams->present = MeasConfig__speedStatePars_PR_setup; - Sparams->choice.setup.timeToTrigger_SF.sf_High = SpeedStateScaleFactors__sf_Medium_oDot75; - Sparams->choice.setup.timeToTrigger_SF.sf_Medium = SpeedStateScaleFactors__sf_High_oDot5; - Sparams->choice.setup.mobilityStateParameters.n_CellChangeHigh = 10; - Sparams->choice.setup.mobilityStateParameters.n_CellChangeMedium = 5; - Sparams->choice.setup.mobilityStateParameters.t_Evaluation = MobilityStateParameters__t_Evaluation_s60; - Sparams->choice.setup.mobilityStateParameters.t_HystNormal = MobilityStateParameters__t_HystNormal_s120; - - quantityConfig = CALLOC(1, sizeof(*quantityConfig)); - memset((void *)quantityConfig, 0, sizeof(*quantityConfig)); - quantityConfig->quantityConfigEUTRA = CALLOC(1, sizeof(struct QuantityConfigEUTRA)); - memset((void *)quantityConfig->quantityConfigEUTRA, 0, sizeof(*quantityConfig->quantityConfigEUTRA)); - quantityConfig->quantityConfigCDMA2000 = NULL; - quantityConfig->quantityConfigGERAN = NULL; - quantityConfig->quantityConfigUTRA = NULL; - quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP = - CALLOC(1, sizeof(*(quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP))); - quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ = - CALLOC(1, sizeof(*(quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ))); - *quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP = FilterCoefficient_fc4; - *quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ = FilterCoefficient_fc4; - - LOG_I(RRC, - "[eNB %d] Frame %d: potential handover preparation: store the information in an intermediate structure in case of failure\n", - ctxt_pP->module_id, ctxt_pP->frame); - // store the information in an intermediate structure for Hanodver management - //rrc_inst->handover_info.as_config.sourceRadioResourceConfig.srb_ToAddModList = CALLOC(1,sizeof()); - ue_context_pP->ue_context.handover_info = CALLOC(1, sizeof(*(ue_context_pP->ue_context.handover_info))); - //memcpy((void *)rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.srb_ToAddModList,(void *)SRB_list,sizeof(SRB_ToAddModList_t)); - ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.srb_ToAddModList = *SRB_configList2; - //memcpy((void *)rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.drb_ToAddModList,(void *)DRB_list,sizeof(DRB_ToAddModList_t)); - ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.drb_ToAddModList = DRB_configList; - ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.drb_ToReleaseList = NULL; - ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.mac_MainConfig = - CALLOC(1, sizeof(*ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.mac_MainConfig)); - memcpy((void*)ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.mac_MainConfig, - (void *)ue_context_pP->ue_context.mac_MainConfig, sizeof(MAC_MainConfig_t)); - ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.physicalConfigDedicated = - CALLOC(1, sizeof(PhysicalConfigDedicated_t)); - memcpy((void*)ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.physicalConfigDedicated, - (void*)ue_context_pP->ue_context.physicalConfigDedicated, sizeof(PhysicalConfigDedicated_t)); - ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.sps_Config = NULL; - //memcpy((void *)rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.sps_Config,(void *)rrc_inst->sps_Config[ue_mod_idP],sizeof(SPS_Config_t)); - - } - -#ifdef CBA - //struct PUSCH_CBAConfigDedicated_vlola *pusch_CBAConfigDedicated_vlola; - uint8_t *cba_RNTI_buf; - cba_RNTI = CALLOC(1, sizeof(C_RNTI_t)); - cba_RNTI_buf = CALLOC(1, 2 * sizeof(uint8_t)); - cba_RNTI->buf = cba_RNTI_buf; - cba_RNTI->size = 2; - cba_RNTI->bits_unused = 0; - - // associate UEs to the CBa groups as a function of their UE id - if (rrc_inst->num_active_cba_groups) { - cba_RNTI->buf[0] = rrc_inst->cba_rnti[ue_mod_idP % rrc_inst->num_active_cba_groups] & 0xff; - cba_RNTI->buf[1] = 0xff; - LOG_D(RRC, - "[eNB %d] Frame %d: cba_RNTI = %x in group %d is attribued to UE %d\n", - enb_mod_idP, frameP, - rrc_inst->cba_rnti[ue_mod_idP % rrc_inst->num_active_cba_groups], - ue_mod_idP % rrc_inst->num_active_cba_groups, ue_mod_idP); - } else { - cba_RNTI->buf[0] = 0x0; - cba_RNTI->buf[1] = 0x0; - LOG_D(RRC, "[eNB %d] Frame %d: no cba_RNTI is configured for UE %d\n", enb_mod_idP, frameP, ue_mod_idP); - } - -#endif - -#if defined(ENABLE_ITTI) - /* Initialize NAS list */ - dedicatedInfoNASList = CALLOC(1, sizeof(struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList)); - - /* Add all NAS PDUs to the list */ - for (i = 0; i < ue_context_pP->ue_context.nb_of_e_rabs; i++) { - if (ue_context_pP->ue_context.e_rab[i].param.nas_pdu.buffer != NULL) { - dedicatedInfoNas = CALLOC(1, sizeof(DedicatedInfoNAS_t)); - memset(dedicatedInfoNas, 0, sizeof(OCTET_STRING_t)); - OCTET_STRING_fromBuf(dedicatedInfoNas, - (char*)ue_context_pP->ue_context.e_rab[i].param.nas_pdu.buffer, - ue_context_pP->ue_context.e_rab[i].param.nas_pdu.length); - LOG_D(RRC, "Add dedicatedInfoNas(%d) to dedicatedInfoNASList\n", i); - ASN_SEQUENCE_ADD(&dedicatedInfoNASList->list, dedicatedInfoNas); - } - - /* TODO parameters yet to process ... */ - { - // ue_context_pP->ue_context.e_rab[i].param.qos; - // ue_context_pP->ue_context.e_rab[i].param.sgw_addr; - // ue_context_pP->ue_context.e_rab[i].param.gtp_teid; - } - - /* TODO should test if e RAB are Ok before! */ - ue_context_pP->ue_context.e_rab[i].status = E_RAB_STATUS_DONE; - LOG_D(RRC, "setting the status for the default DRB (index %d) to (%d,%s)\n", - i, ue_context_pP->ue_context.e_rab[i].status, "E_RAB_STATUS_DONE"); - } - - /* If list is empty free the list and reset the address */ - if (dedicatedInfoNASList->list.count == 0) { - free(dedicatedInfoNASList); - dedicatedInfoNASList = NULL; - } - -#endif - - // send RRCConnectionReconfiguration - memset(buffer, 0, RRC_BUF_SIZE); - - size = do_RRCConnectionReconfiguration(ctxt_pP, - buffer, - next_xid, //Transaction_id, - (SRB_ToAddModList_t*)*SRB_configList2, // SRB_configList - (DRB_ToAddModList_t*)DRB_configList, - (DRB_ToReleaseList_t*)NULL, // DRB2_list, - (struct SPS_Config*)NULL, // maybe ue_context_pP->ue_context.sps_Config, - (struct PhysicalConfigDedicated*)ue_context_pP->ue_context.physicalConfigDedicated, -#ifdef EXMIMO_IOT - NULL, NULL, NULL,NULL, -#else - (MeasObjectToAddModList_t*)MeasObj_list, // MeasObj_list, - (ReportConfigToAddModList_t*)ReportConfig_list, // ReportConfig_list, - (QuantityConfig_t*)quantityConfig, //quantityConfig, - (MeasIdToAddModList_t*)NULL, -#endif - (MAC_MainConfig_t*)ue_context_pP->ue_context.mac_MainConfig, - (MeasGapConfig_t*)NULL, - (MobilityControlInfo_t*)NULL, - (struct MeasConfig__speedStatePars*)Sparams, // Sparams, - (RSRP_Range_t*)rsrp, // rsrp, - (C_RNTI_t*)cba_RNTI, // cba_RNTI - (struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList*)dedicatedInfoNASList //dedicatedInfoNASList -#if defined(Rel10) || defined(Rel14) - , (SCellToAddMod_r10_t*)NULL -#endif - ); - -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC Connection Reconfiguration\n"); - for (i = 0; i < size; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]); - } - LOG_F(RRC,"\n"); - //////////////////////////////////////// -#endif - -#if defined(ENABLE_ITTI) - - /* Free all NAS PDUs */ - for (i = 0; i < ue_context_pP->ue_context.nb_of_e_rabs; i++) { - if (ue_context_pP->ue_context.e_rab[i].param.nas_pdu.buffer != NULL) { - /* Free the NAS PDU buffer and invalidate it */ - free(ue_context_pP->ue_context.e_rab[i].param.nas_pdu.buffer); - ue_context_pP->ue_context.e_rab[i].param.nas_pdu.buffer = NULL; - } - } - -#endif - - LOG_I(RRC, - "[eNB %d] Frame %d, Logical Channel DL-DCCH, Generate RRCConnectionReconfiguration (bytes %d, UE id %x)\n", - ctxt_pP->module_id, ctxt_pP->frame, size, ue_context_pP->ue_context.rnti); - - LOG_D(RRC, - "[FRAME %05d][RRC_eNB][MOD %u][][--- PDCP_DATA_REQ/%d Bytes (rrcConnectionReconfiguration to UE %x MUI %d) --->][PDCP][MOD %u][RB %u]\n", - ctxt_pP->frame, ctxt_pP->module_id, size, ue_context_pP->ue_context.rnti, rrc_eNB_mui, ctxt_pP->module_id, DCCH); - - MSC_LOG_TX_MESSAGE( - MSC_RRC_ENB, - MSC_RRC_UE, - buffer, - size, - MSC_AS_TIME_FMT" rrcConnectionReconfiguration UE %x MUI %d size %u", - MSC_AS_TIME_ARGS(ctxt_pP), - ue_context_pP->ue_context.rnti, - rrc_eNB_mui, - size); - - rrc_data_req( - ctxt_pP, - DCCH, - rrc_eNB_mui++, - SDU_CONFIRM_NO, - size, - buffer, - PDCP_TRANSMISSION_MODE_CONTROL); - - // delete UE data of prior RNTI. UE use current RNTI. - protocol_ctxt_t ctxt_prior = *ctxt_pP; - ctxt_prior.rnti = reestablish_rnti; - - LTE_eNB_ULSCH_t *ulsch = NULL; - nfapi_ul_config_request_body_t *ul_req_tmp = NULL; - PHY_VARS_eNB *eNB_PHY = NULL; - eNB_MAC_INST *eNB_MAC = RC.mac[ctxt_prior.module_id]; - for (int CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { - eNB_PHY = RC.eNB[ctxt_prior.module_id][CC_id]; - for (int i=0; i<NUMBER_OF_UE_MAX; i++) { - ulsch = eNB_PHY->ulsch[i]; - if((ulsch != NULL) && (ulsch->rnti == ctxt_prior.rnti)){ - LOG_I(RRC, "clean_eNb_ulsch UE %x \n", ctxt_prior.rnti); - clean_eNb_ulsch(ulsch); - break; - } - } - - for(int j = 0; j < 10; j++){ - ul_req_tmp = &eNB_MAC->UL_req_tmp[CC_id][j].ul_config_request_body; - if(ul_req_tmp){ - int pdu_number = ul_req_tmp->number_of_pdus; - for(int pdu_index = pdu_number-1; pdu_index >= 0; pdu_index--){ - if(ul_req_tmp->ul_config_pdu_list[pdu_index].ulsch_pdu.ulsch_pdu_rel8.rnti == ctxt_prior.rnti){ - LOG_I(RRC, "remove UE %x from ul_config_pdu_list %d/%d\n", ctxt_prior.rnti, pdu_index, pdu_number); - if(pdu_index < pdu_number -1){ - memcpy(&ul_req_tmp->ul_config_pdu_list[pdu_index], &ul_req_tmp->ul_config_pdu_list[pdu_index+1], (pdu_number-1-pdu_index) * sizeof(nfapi_ul_config_request_pdu_t)); - } - ul_req_tmp->number_of_pdus--; - } - } - } - } - } - rrc_mac_remove_ue(ctxt_prior.module_id, ctxt_prior.rnti); - rrc_rlc_remove_ue(&ctxt_prior); - pdcp_remove_UE(&ctxt_prior); -} - -//----------------------------------------------------------------------------- -void -rrc_eNB_generate_RRCConnectionReestablishmentReject( - const protocol_ctxt_t* const ctxt_pP, - rrc_eNB_ue_context_t* const ue_context_pP, - const int CC_id -) -//----------------------------------------------------------------------------- -{ -#ifdef RRC_MSG_PRINT - int cnt; -#endif - int UE_id = find_UE_id(ctxt_pP->module_id, ctxt_pP->rnti); - RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer = 1; - RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer_thres = 20; - - T(T_ENB_RRC_CONNECTION_REESTABLISHMENT_REJECT, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); - - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size = - do_RRCConnectionReestablishmentReject(ctxt_pP->module_id, - (uint8_t*) RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload); - -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRCConnectionReestablishmentReject\n"); - - for (cnt = 0; cnt < RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size; cnt++) { - LOG_F(RRC,"%02x ", ((uint8_t*)RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload)[cnt]); - } - - LOG_F(RRC,"\n"); -#endif - - MSC_LOG_TX_MESSAGE( - MSC_RRC_ENB, - MSC_RRC_UE, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Header, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size, - MSC_AS_TIME_FMT" RRCConnectionReestablishmentReject UE %x size %u", - MSC_AS_TIME_ARGS(ctxt_pP), - ue_context_pP == NULL ? -1 : ue_context_pP->ue_context.rnti, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size); - - LOG_I(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel DL-CCCH, Generating RRCConnectionReestablishmentReject (bytes %d)\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size); -} - -//----------------------------------------------------------------------------- -void -rrc_eNB_generate_RRCConnectionRelease( - const protocol_ctxt_t* const ctxt_pP, - rrc_eNB_ue_context_t* const ue_context_pP -) -//----------------------------------------------------------------------------- -{ - - uint8_t buffer[RRC_BUF_SIZE]; - uint16_t size; - - T(T_ENB_RRC_CONNECTION_RELEASE, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); - - memset(buffer, 0, RRC_BUF_SIZE); - - size = do_RRCConnectionRelease(ctxt_pP->module_id, buffer,rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id)); - // set release timer - //ue_context_pP->ue_context.ue_release_timer=1; - // remove UE after 10 frames after RRCConnectionRelease is triggered - //ue_context_pP->ue_context.ue_release_timer_thres=100; - // set release timer - ue_context_pP->ue_context.ue_release_timer_rrc = 1; - // remove UE after 10 frames after RRCConnectionRelease is triggered - ue_context_pP->ue_context.ue_release_timer_thres_rrc = 100; - ue_context_pP->ue_context.ue_reestablishment_timer = 0; - ue_context_pP->ue_context.ue_release_timer = 0; - ue_context_pP->ue_context.ue_release_timer_s1 = 0; - LOG_I(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" Logical Channel DL-DCCH, Generate RRCConnectionRelease (bytes %d)\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - size); - - LOG_D(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" --- PDCP_DATA_REQ/%d Bytes (rrcConnectionRelease MUI %d) --->[PDCP][RB %u]\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - size, - rrc_eNB_mui, - DCCH); - - MSC_LOG_TX_MESSAGE( - MSC_RRC_ENB, - MSC_RRC_UE, - buffer, - size, - MSC_AS_TIME_FMT" rrcConnectionRelease UE %x MUI %d size %u", - MSC_AS_TIME_ARGS(ctxt_pP), - ue_context_pP->ue_context.rnti, - rrc_eNB_mui, - size); - - rrc_data_req( - ctxt_pP, - DCCH, - rrc_eNB_mui++, - SDU_CONFIRM_NO, - size, - buffer, - PDCP_TRANSMISSION_MODE_CONTROL); -} - -uint8_t qci_to_priority[9]={2,4,3,5,1,6,7,8,9}; - -// TBD: this directive can be remived if we create a similar e_rab_param_t structure in RRC context -#if defined(ENABLE_ITTI) -//----------------------------------------------------------------------------- -void -rrc_eNB_generate_dedicatedRRCConnectionReconfiguration(const protocol_ctxt_t* const ctxt_pP, - rrc_eNB_ue_context_t* const ue_context_pP, - const uint8_t ho_state - ) -//----------------------------------------------------------------------------- -{ - - uint8_t buffer[RRC_BUF_SIZE]; - uint16_t size; - int i; - - struct DRB_ToAddMod *DRB_config = NULL; - struct RLC_Config *DRB_rlc_config = NULL; - struct PDCP_Config *DRB_pdcp_config = NULL; - struct PDCP_Config__rlc_AM *PDCP_rlc_AM = NULL; - struct PDCP_Config__rlc_UM *PDCP_rlc_UM = NULL; - struct LogicalChannelConfig *DRB_lchan_config = NULL; - struct LogicalChannelConfig__ul_SpecificParameters - *DRB_ul_SpecificParameters = NULL; - // DRB_ToAddModList_t** DRB_configList=&ue_context_pP->ue_context.DRB_configList; - DRB_ToAddModList_t* DRB_configList=ue_context_pP->ue_context.DRB_configList; - DRB_ToAddModList_t** DRB_configList2=NULL; - //DRB_ToAddModList_t** RRC_DRB_configList=&ue_context_pP->ue_context.DRB_configList; - - struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList *dedicatedInfoNASList = NULL; - DedicatedInfoNAS_t *dedicatedInfoNas = NULL; - /* for no gcc warnings */ - (void)dedicatedInfoNas; - - long *logicalchannelgroup_drb; -// int drb_identity_index=0; - - uint8_t xid = rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id); //Transaction_id, - DRB_configList2=&ue_context_pP->ue_context.DRB_configList2[xid]; - if (*DRB_configList2) { - free(*DRB_configList2); - } - //*DRB_configList = CALLOC(1, sizeof(*DRB_configList)); - *DRB_configList2 = CALLOC(1, sizeof(**DRB_configList2)); - /* Initialize NAS list */ - dedicatedInfoNASList = CALLOC(1, sizeof(struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList)); - - int e_rab_done=0; - - for ( i = 0 ; - i < ue_context_pP->ue_context.setup_e_rabs ; - i++){ - - if (e_rab_done >= ue_context_pP->ue_context.nb_of_e_rabs){ - break; - } - - // bypass the new and already configured erabs - if (ue_context_pP->ue_context.e_rab[i].status >= E_RAB_STATUS_DONE) { -// drb_identity_index++; - continue; - } - - DRB_config = CALLOC(1, sizeof(*DRB_config)); - - DRB_config->eps_BearerIdentity = CALLOC(1, sizeof(long)); - // allowed value 5..15, value : x+4 - *(DRB_config->eps_BearerIdentity) = ue_context_pP->ue_context.e_rab[i].param.e_rab_id;//+ 4; // especial case generation - - // DRB_config->drb_Identity = 1 + drb_identity_index + e_rab_done;// + i ;// (DRB_Identity_t) ue_context_pP->ue_context.e_rab[i].param.e_rab_id; - // 1 + drb_identiy_index; - DRB_config->drb_Identity = i+1; - - DRB_config->logicalChannelIdentity = CALLOC(1, sizeof(long)); - *(DRB_config->logicalChannelIdentity) = DRB_config->drb_Identity + 2; //(long) (ue_context_pP->ue_context.e_rab[i].param.e_rab_id + 2); // value : x+2 - - DRB_rlc_config = CALLOC(1, sizeof(*DRB_rlc_config)); - DRB_config->rlc_Config = DRB_rlc_config; - - DRB_pdcp_config = CALLOC(1, sizeof(*DRB_pdcp_config)); - DRB_config->pdcp_Config = DRB_pdcp_config; - DRB_pdcp_config->discardTimer = CALLOC(1, sizeof(long)); - *DRB_pdcp_config->discardTimer = PDCP_Config__discardTimer_infinity; - DRB_pdcp_config->rlc_AM = NULL; - DRB_pdcp_config->rlc_UM = NULL; - - - switch (ue_context_pP->ue_context.e_rab[i].param.qos.qci){ - /* - * type: realtime data with medium packer error rate - * action: swtich to RLC UM - */ - case 1: // 100ms, 10^-2, p2, GBR - case 2: // 150ms, 10^-3, p4, GBR - case 3: // 50ms, 10^-3, p3, GBR - case 4: // 300ms, 10^-6, p5 - case 7: // 100ms, 10^-3, p7, GBR - case 9: // 300ms, 10^-6, p9 - case 65: // 75ms, 10^-2, p0.7, mission critical voice, GBR - case 66: // 100ms, 10^-2, p2, non-mission critical voice , GBR - // RLC - DRB_rlc_config->present = RLC_Config_PR_um_Bi_Directional; - DRB_rlc_config->choice.um_Bi_Directional.ul_UM_RLC.sn_FieldLength = SN_FieldLength_size10; - DRB_rlc_config->choice.um_Bi_Directional.dl_UM_RLC.sn_FieldLength = SN_FieldLength_size10; - DRB_rlc_config->choice.um_Bi_Directional.dl_UM_RLC.t_Reordering = T_Reordering_ms35; - // PDCP - PDCP_rlc_UM = CALLOC(1, sizeof(*PDCP_rlc_UM)); - DRB_pdcp_config->rlc_UM = PDCP_rlc_UM; - PDCP_rlc_UM->pdcp_SN_Size = PDCP_Config__rlc_UM__pdcp_SN_Size_len12bits; - break; - - /* - * type: non-realtime data with low packer error rate - * action: swtich to RLC AM - */ - case 5: // 100ms, 10^-6, p1 , IMS signaling - case 6: // 300ms, 10^-6, p6 - case 8: // 300ms, 10^-6, p8 - case 69: // 60ms, 10^-6, p0.5, mission critical delay sensitive data, Lowest Priority - case 70: // 200ms, 10^-6, p5.5, mision critical data - // RLC - DRB_rlc_config->present = RLC_Config_PR_am; - DRB_rlc_config->choice.am.ul_AM_RLC.t_PollRetransmit = T_PollRetransmit_ms50; - DRB_rlc_config->choice.am.ul_AM_RLC.pollPDU = PollPDU_p16; - DRB_rlc_config->choice.am.ul_AM_RLC.pollByte = PollByte_kBinfinity; - DRB_rlc_config->choice.am.ul_AM_RLC.maxRetxThreshold = UL_AM_RLC__maxRetxThreshold_t8; - DRB_rlc_config->choice.am.dl_AM_RLC.t_Reordering = T_Reordering_ms35; - DRB_rlc_config->choice.am.dl_AM_RLC.t_StatusProhibit = T_StatusProhibit_ms25; - - // PDCP - PDCP_rlc_AM = CALLOC(1, sizeof(*PDCP_rlc_AM)); - DRB_pdcp_config->rlc_AM = PDCP_rlc_AM; - PDCP_rlc_AM->statusReportRequired = FALSE; - - break; - default : - LOG_E(RRC,"not supported qci %d\n", ue_context_pP->ue_context.e_rab[i].param.qos.qci); - ue_context_pP->ue_context.e_rab[i].status = E_RAB_STATUS_FAILED; - ue_context_pP->ue_context.e_rab[i].xid = xid; - e_rab_done++; - continue; - } - - DRB_pdcp_config->headerCompression.present = PDCP_Config__headerCompression_PR_notUsed; - - DRB_lchan_config = CALLOC(1, sizeof(*DRB_lchan_config)); - DRB_config->logicalChannelConfig = DRB_lchan_config; - DRB_ul_SpecificParameters = CALLOC(1, sizeof(*DRB_ul_SpecificParameters)); - DRB_lchan_config->ul_SpecificParameters = DRB_ul_SpecificParameters; - - if (ue_context_pP->ue_context.e_rab[i].param.qos.qci < 9 ) - DRB_ul_SpecificParameters->priority = qci_to_priority[ue_context_pP->ue_context.e_rab[i].param.qos.qci-1] + 3; - // ue_context_pP->ue_context.e_rab[i].param.qos.allocation_retention_priority.priority_level; - else - DRB_ul_SpecificParameters->priority= 4; - - DRB_ul_SpecificParameters->prioritisedBitRate = LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_kBps8; - //LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity; - DRB_ul_SpecificParameters->bucketSizeDuration = - LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50; - - logicalchannelgroup_drb = CALLOC(1, sizeof(long)); - *logicalchannelgroup_drb = 1;//(i+1) % 3; - DRB_ul_SpecificParameters->logicalChannelGroup = logicalchannelgroup_drb; - - ASN_SEQUENCE_ADD(&DRB_configList->list, DRB_config); - ASN_SEQUENCE_ADD(&(*DRB_configList2)->list, DRB_config); - //ue_context_pP->ue_context.DRB_configList2[drb_identity_index] = &(*DRB_configList); - - LOG_I(RRC,"EPS ID %ld, DRB ID %ld (index %d), QCI %d, priority %ld, LCID %ld LCGID %ld \n", - *DRB_config->eps_BearerIdentity, - DRB_config->drb_Identity, i, - ue_context_pP->ue_context.e_rab[i].param.qos.qci, - DRB_ul_SpecificParameters->priority, - *(DRB_config->logicalChannelIdentity), - *DRB_ul_SpecificParameters->logicalChannelGroup - ); - - e_rab_done++; - ue_context_pP->ue_context.e_rab[i].status = E_RAB_STATUS_DONE; - ue_context_pP->ue_context.e_rab[i].xid = xid; - - { - if (ue_context_pP->ue_context.e_rab[i].param.nas_pdu.buffer != NULL) { - dedicatedInfoNas = CALLOC(1, sizeof(DedicatedInfoNAS_t)); - memset(dedicatedInfoNas, 0, sizeof(OCTET_STRING_t)); - OCTET_STRING_fromBuf(dedicatedInfoNas, - (char*)ue_context_pP->ue_context.e_rab[i].param.nas_pdu.buffer, - ue_context_pP->ue_context.e_rab[i].param.nas_pdu.length); - ASN_SEQUENCE_ADD(&dedicatedInfoNASList->list, dedicatedInfoNas); - LOG_I(RRC,"add NAS info with size %d (rab id %d)\n",ue_context_pP->ue_context.e_rab[i].param.nas_pdu.length, i); - } - else { - LOG_W(RRC,"Not received activate dedicated EPS bearer context request\n"); - } - /* TODO parameters yet to process ... */ - { - // ue_context_pP->ue_context.e_rab[i].param.qos; - // ue_context_pP->ue_context.e_rab[i].param.sgw_addr; - // ue_context_pP->ue_context.e_rab[i].param.gtp_teid; - } - } - - } - - /* If list is empty free the list and reset the address */ - if (dedicatedInfoNASList != NULL) { - if (dedicatedInfoNASList->list.count == 0) { - free(dedicatedInfoNASList); - dedicatedInfoNASList = NULL; - LOG_W(RRC,"dedlicated NAS list is empty, free the list and reset the address\n"); - } - } else { - LOG_W(RRC,"dedlicated NAS list is empty\n"); - } - - memset(buffer, 0, RRC_BUF_SIZE); - - size = do_RRCConnectionReconfiguration(ctxt_pP, - buffer, - xid, - (SRB_ToAddModList_t*)NULL, - (DRB_ToAddModList_t*)*DRB_configList2, - (DRB_ToReleaseList_t*)NULL, // DRB2_list, - (struct SPS_Config*)NULL, // *sps_Config, - NULL, NULL, NULL, NULL,NULL, - NULL, NULL, NULL, NULL, NULL, NULL, - (struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList*)dedicatedInfoNASList -#if defined(Rel10) || defined(Rel14) - , (SCellToAddMod_r10_t*)NULL -#endif - ); - - -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC Connection Reconfiguration\n"); - for (i = 0; i < size; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]); - } - LOG_F(RRC,"\n"); - //////////////////////////////////////// -#endif - -#if defined(ENABLE_ITTI) - - /* Free all NAS PDUs */ - for (i = 0; i < ue_context_pP->ue_context.nb_of_e_rabs; i++) { - if (ue_context_pP->ue_context.e_rab[i].param.nas_pdu.buffer != NULL) { - /* Free the NAS PDU buffer and invalidate it */ - free(ue_context_pP->ue_context.e_rab[i].param.nas_pdu.buffer); - ue_context_pP->ue_context.e_rab[i].param.nas_pdu.buffer = NULL; - } - } -#endif - - LOG_I(RRC, - "[eNB %d] Frame %d, Logical Channel DL-DCCH, Generate RRCConnectionReconfiguration (bytes %d, UE RNTI %x)\n", - ctxt_pP->module_id, ctxt_pP->frame, size, ue_context_pP->ue_context.rnti); - - LOG_D(RRC, - "[FRAME %05d][RRC_eNB][MOD %u][][--- PDCP_DATA_REQ/%d Bytes (rrcConnectionReconfiguration to UE %x MUI %d) --->][PDCP][MOD %u][RB %u]\n", - ctxt_pP->frame, ctxt_pP->module_id, size, ue_context_pP->ue_context.rnti, rrc_eNB_mui, ctxt_pP->module_id, DCCH); - - MSC_LOG_TX_MESSAGE( - MSC_RRC_ENB, - MSC_RRC_UE, - buffer, - size, - MSC_AS_TIME_FMT" dedicated rrcConnectionReconfiguration UE %x MUI %d size %u", - MSC_AS_TIME_ARGS(ctxt_pP), - ue_context_pP->ue_context.rnti, - rrc_eNB_mui, - size); - - rrc_data_req( - ctxt_pP, - DCCH, - rrc_eNB_mui++, - SDU_CONFIRM_NO, - size, - buffer, - PDCP_TRANSMISSION_MODE_CONTROL); - - -} -int -rrc_eNB_modify_dedicatedRRCConnectionReconfiguration(const protocol_ctxt_t* const ctxt_pP, - rrc_eNB_ue_context_t* const ue_context_pP, - const uint8_t ho_state - ) -//----------------------------------------------------------------------------- -{ - uint8_t buffer[RRC_BUF_SIZE]; - uint16_t size; - int i, j; - - struct DRB_ToAddMod *DRB_config = NULL; - struct RLC_Config *DRB_rlc_config = NULL; - struct PDCP_Config *DRB_pdcp_config = NULL; - struct PDCP_Config__rlc_AM *PDCP_rlc_AM = NULL; - struct PDCP_Config__rlc_UM *PDCP_rlc_UM = NULL; - struct LogicalChannelConfig *DRB_lchan_config = NULL; - struct LogicalChannelConfig__ul_SpecificParameters - *DRB_ul_SpecificParameters = NULL; - DRB_ToAddModList_t* DRB_configList = ue_context_pP->ue_context.DRB_configList; - DRB_ToAddModList_t* DRB_configList2 = NULL; - - struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList *dedicatedInfoNASList = NULL; - DedicatedInfoNAS_t *dedicatedInfoNas = NULL; - /* for no gcc warnings */ - (void)dedicatedInfoNas; - - uint8_t xid = rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id); // Transaction_id, - DRB_configList2 = CALLOC(1, sizeof(*DRB_configList2)); - /* Initialize NAS list */ - dedicatedInfoNASList = CALLOC(1, sizeof(struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList)); - - for (i = 0; i < ue_context_pP->ue_context.nb_of_modify_e_rabs; i++) { - // bypass the new and already configured erabs - if (ue_context_pP->ue_context.modify_e_rab[i].status >= E_RAB_STATUS_DONE) { - ue_context_pP->ue_context.modify_e_rab[i].xid = xid; - continue; - } - - if (ue_context_pP->ue_context.modify_e_rab[i].cause != S1AP_CAUSE_NOTHING) { - // set xid of failure RAB - ue_context_pP->ue_context.modify_e_rab[i].xid = xid; - ue_context_pP->ue_context.modify_e_rab[i].status = E_RAB_STATUS_FAILED; - continue; - } - - DRB_config = NULL; - // search exist DRB_config - for (j = 0; j < DRB_configList->list.count; j++) { - if((uint8_t)*(DRB_configList->list.array[j]->eps_BearerIdentity) == ue_context_pP->ue_context.modify_e_rab[i].param.e_rab_id) { - DRB_config = DRB_configList->list.array[j]; - break; - } - } - if (NULL == DRB_config) { - ue_context_pP->ue_context.modify_e_rab[i].xid = xid; - ue_context_pP->ue_context.modify_e_rab[i].status = E_RAB_STATUS_FAILED; - // TODO use which cause - ue_context_pP->ue_context.modify_e_rab[i].cause = S1AP_CAUSE_RADIO_NETWORK; - ue_context_pP->ue_context.modify_e_rab[i].cause_value = 0;//S1ap_CauseRadioNetwork_unspecified; - ue_context_pP->ue_context.nb_of_failed_e_rabs++; - continue; - } - - DRB_rlc_config = DRB_config->rlc_Config; - - DRB_pdcp_config = DRB_config->pdcp_Config; - *DRB_pdcp_config->discardTimer = PDCP_Config__discardTimer_infinity; - switch (ue_context_pP->ue_context.modify_e_rab[i].param.qos.qci) { - /* - * type: realtime data with medium packer error rate - * action: swtich to RLC UM - */ - case 1: // 100ms, 10^-2, p2, GBR - case 2: // 150ms, 10^-3, p4, GBR - case 3: // 50ms, 10^-3, p3, GBR - case 4: // 300ms, 10^-6, p5 - case 7: // 100ms, 10^-3, p7, GBR - case 9: // 300ms, 10^-6, p9 - case 65: // 75ms, 10^-2, p0.7, mission critical voice, GBR - case 66: // 100ms, 10^-2, p2, non-mission critical voice , GBR - // RLC - DRB_rlc_config->present = RLC_Config_PR_um_Bi_Directional; - DRB_rlc_config->choice.um_Bi_Directional.ul_UM_RLC.sn_FieldLength = SN_FieldLength_size10; - DRB_rlc_config->choice.um_Bi_Directional.dl_UM_RLC.sn_FieldLength = SN_FieldLength_size10; - DRB_rlc_config->choice.um_Bi_Directional.dl_UM_RLC.t_Reordering = T_Reordering_ms35; - // PDCP - if (DRB_pdcp_config->rlc_AM) { - free(DRB_pdcp_config->rlc_AM); - DRB_pdcp_config->rlc_AM = NULL; - } - if (DRB_pdcp_config->rlc_UM) { - free(DRB_pdcp_config->rlc_UM); - DRB_pdcp_config->rlc_UM = NULL; - } - PDCP_rlc_UM = CALLOC(1, sizeof(*PDCP_rlc_UM)); - DRB_pdcp_config->rlc_UM = PDCP_rlc_UM; - PDCP_rlc_UM->pdcp_SN_Size = PDCP_Config__rlc_UM__pdcp_SN_Size_len12bits; - break; - - /* - * type: non-realtime data with low packer error rate - * action: swtich to RLC AM - */ - case 5: // 100ms, 10^-6, p1 , IMS signaling - case 6: // 300ms, 10^-6, p6 - case 8: // 300ms, 10^-6, p8 - case 69: // 60ms, 10^-6, p0.5, mission critical delay sensitive data, Lowest Priority - case 70: // 200ms, 10^-6, p5.5, mision critical data - // RLC - DRB_rlc_config->present = RLC_Config_PR_am; - DRB_rlc_config->choice.am.ul_AM_RLC.t_PollRetransmit = T_PollRetransmit_ms50; - DRB_rlc_config->choice.am.ul_AM_RLC.pollPDU = PollPDU_p16; - DRB_rlc_config->choice.am.ul_AM_RLC.pollByte = PollByte_kBinfinity; - DRB_rlc_config->choice.am.ul_AM_RLC.maxRetxThreshold = UL_AM_RLC__maxRetxThreshold_t8; - DRB_rlc_config->choice.am.dl_AM_RLC.t_Reordering = T_Reordering_ms35; - DRB_rlc_config->choice.am.dl_AM_RLC.t_StatusProhibit = T_StatusProhibit_ms25; - - // PDCP - if (DRB_pdcp_config->rlc_AM) { - free(DRB_pdcp_config->rlc_AM); - DRB_pdcp_config->rlc_AM = NULL; - } - if (DRB_pdcp_config->rlc_UM) { - free(DRB_pdcp_config->rlc_UM); - DRB_pdcp_config->rlc_UM = NULL; - } - PDCP_rlc_AM = CALLOC(1, sizeof(*PDCP_rlc_AM)); - DRB_pdcp_config->rlc_AM = PDCP_rlc_AM; - PDCP_rlc_AM->statusReportRequired = FALSE; - - break; - default : - LOG_E(RRC, "not supported qci %d\n", ue_context_pP->ue_context.modify_e_rab[i].param.qos.qci); - ue_context_pP->ue_context.modify_e_rab[i].status = E_RAB_STATUS_FAILED; - ue_context_pP->ue_context.modify_e_rab[i].xid = xid; - ue_context_pP->ue_context.modify_e_rab[i].cause = S1AP_CAUSE_RADIO_NETWORK; - ue_context_pP->ue_context.modify_e_rab[i].cause_value = 37;//S1ap_CauseRadioNetwork_not_supported_QCI_value; - ue_context_pP->ue_context.nb_of_failed_e_rabs++; - continue; - } - - DRB_pdcp_config->headerCompression.present = PDCP_Config__headerCompression_PR_notUsed; - - DRB_lchan_config = DRB_config->logicalChannelConfig; - DRB_ul_SpecificParameters = DRB_lchan_config->ul_SpecificParameters; - - if (ue_context_pP->ue_context.modify_e_rab[i].param.qos.qci < 9 ) - DRB_ul_SpecificParameters->priority = qci_to_priority[ue_context_pP->ue_context.modify_e_rab[i].param.qos.qci-1] + 3; - else - DRB_ul_SpecificParameters->priority= 4; - - DRB_ul_SpecificParameters->prioritisedBitRate = LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_kBps8; - - DRB_ul_SpecificParameters->bucketSizeDuration = - LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50; - - ASN_SEQUENCE_ADD(&(DRB_configList2)->list, DRB_config); - - LOG_I(RRC, "EPS ID %ld, DRB ID %ld (index %d), QCI %d, priority %ld, LCID %ld LCGID %ld \n", - *DRB_config->eps_BearerIdentity, - DRB_config->drb_Identity, i, - ue_context_pP->ue_context.modify_e_rab[i].param.qos.qci, - DRB_ul_SpecificParameters->priority, - *(DRB_config->logicalChannelIdentity), - *DRB_ul_SpecificParameters->logicalChannelGroup - ); - - //e_rab_done++; - ue_context_pP->ue_context.modify_e_rab[i].status = E_RAB_STATUS_DONE; - ue_context_pP->ue_context.modify_e_rab[i].xid = xid; - - { - if (ue_context_pP->ue_context.modify_e_rab[i].param.nas_pdu.buffer != NULL) { - dedicatedInfoNas = CALLOC(1, sizeof(DedicatedInfoNAS_t)); - memset(dedicatedInfoNas, 0, sizeof(OCTET_STRING_t)); - OCTET_STRING_fromBuf(dedicatedInfoNas, - (char*)ue_context_pP->ue_context.modify_e_rab[i].param.nas_pdu.buffer, - ue_context_pP->ue_context.modify_e_rab[i].param.nas_pdu.length); - ASN_SEQUENCE_ADD(&dedicatedInfoNASList->list, dedicatedInfoNas); - LOG_I(RRC, "add NAS info with size %d (rab id %d)\n",ue_context_pP->ue_context.modify_e_rab[i].param.nas_pdu.length, i); - } - else { - LOG_W(RRC, "Not received activate dedicated EPS bearer context request\n"); - } - } - } - - /* If list is empty free the list and reset the address */ - if (dedicatedInfoNASList != NULL) { - if (dedicatedInfoNASList->list.count == 0) { - free(dedicatedInfoNASList); - dedicatedInfoNASList = NULL; - LOG_W(RRC,"dedlicated NAS list is empty, free the list and reset the address\n"); - } - } else { - LOG_W(RRC,"dedlicated NAS list is empty\n"); - } - - memset(buffer, 0, RRC_BUF_SIZE); - - size = do_RRCConnectionReconfiguration(ctxt_pP, - buffer, - xid, - (SRB_ToAddModList_t*)NULL, - (DRB_ToAddModList_t*)DRB_configList2, - (DRB_ToReleaseList_t*)NULL, // DRB2_list, - (struct SPS_Config*)NULL, // *sps_Config, - NULL, NULL, NULL, NULL,NULL, - NULL, NULL, NULL, NULL, NULL, NULL, - (struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList*)dedicatedInfoNASList -#if defined(Rel10) || defined(Rel14) - , (SCellToAddMod_r10_t*)NULL -#endif - ); - - -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC Connection Reconfiguration\n"); - for (i = 0; i < size; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]); - } - LOG_F(RRC,"\n"); - //////////////////////////////////////// -#endif - -#if defined(ENABLE_ITTI) - - /* Free all NAS PDUs */ - for (i = 0; i < ue_context_pP->ue_context.nb_of_modify_e_rabs; i++) { - if (ue_context_pP->ue_context.modify_e_rab[i].param.nas_pdu.buffer != NULL) { - /* Free the NAS PDU buffer and invalidate it */ - free(ue_context_pP->ue_context.modify_e_rab[i].param.nas_pdu.buffer); - ue_context_pP->ue_context.modify_e_rab[i].param.nas_pdu.buffer = NULL; - } - } -#endif - - LOG_I(RRC, - "[eNB %d] Frame %d, Logical Channel DL-DCCH, Generate RRCConnectionReconfiguration (bytes %d, UE RNTI %x)\n", - ctxt_pP->module_id, ctxt_pP->frame, size, ue_context_pP->ue_context.rnti); - - LOG_D(RRC, - "[FRAME %05d][RRC_eNB][MOD %u][][--- PDCP_DATA_REQ/%d Bytes (rrcConnectionReconfiguration to UE %x MUI %d) --->][PDCP][MOD %u][RB %u]\n", - ctxt_pP->frame, ctxt_pP->module_id, size, ue_context_pP->ue_context.rnti, rrc_eNB_mui, ctxt_pP->module_id, DCCH); - - MSC_LOG_TX_MESSAGE( - MSC_RRC_ENB, - MSC_RRC_UE, - buffer, - size, - MSC_AS_TIME_FMT" dedicated rrcConnectionReconfiguration UE %x MUI %d size %u", - MSC_AS_TIME_ARGS(ctxt_pP), - ue_context_pP->ue_context.rnti, - rrc_eNB_mui, - size); - - rrc_data_req( - ctxt_pP, - DCCH, - rrc_eNB_mui++, - SDU_CONFIRM_NO, - size, - buffer, - PDCP_TRANSMISSION_MODE_CONTROL); - return 0; -} - -//----------------------------------------------------------------------------- -void -rrc_eNB_generate_dedicatedRRCConnectionReconfiguration_release( const protocol_ctxt_t* const ctxt_pP, - rrc_eNB_ue_context_t* const ue_context_pP, - uint8_t xid, - uint32_t nas_length, - uint8_t* nas_buffer) -//----------------------------------------------------------------------------- -{ - uint8_t buffer[RRC_BUF_SIZE]; - int i; - uint16_t size = 0; - DRB_ToReleaseList_t** DRB_Release_configList2=NULL; - DRB_Identity_t* DRB_release; - struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList *dedicatedInfoNASList = NULL; - - DRB_Release_configList2=&ue_context_pP->ue_context.DRB_Release_configList2[xid]; - if (*DRB_Release_configList2) { - free(*DRB_Release_configList2); - } - *DRB_Release_configList2 = CALLOC(1, sizeof(**DRB_Release_configList2)); - - for(i = 0; i < NB_RB_MAX; i++){ - if((ue_context_pP->ue_context.e_rab[i].status == E_RAB_STATUS_TORELEASE) && ue_context_pP->ue_context.e_rab[i].xid == xid){ - DRB_release = CALLOC(1, sizeof(DRB_Identity_t)); - *DRB_release = i+1; - ASN_SEQUENCE_ADD(&(*DRB_Release_configList2)->list, DRB_release); - //free(DRB_release); - } - } - - /* If list is empty free the list and reset the address */ - if (nas_length > 0) { - DedicatedInfoNAS_t *dedicatedInfoNas = NULL; - dedicatedInfoNASList = CALLOC(1, sizeof(struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList)); - dedicatedInfoNas = CALLOC(1, sizeof(DedicatedInfoNAS_t)); - memset(dedicatedInfoNas, 0, sizeof(OCTET_STRING_t)); - OCTET_STRING_fromBuf(dedicatedInfoNas, - (char*)nas_buffer, - nas_length); - ASN_SEQUENCE_ADD(&dedicatedInfoNASList->list, dedicatedInfoNas); - LOG_I(RRC,"add NAS info with size %d\n",nas_length); - } else { - LOG_W(RRC,"dedlicated NAS list is empty\n"); - } - - memset(buffer, 0, RRC_BUF_SIZE); - size = do_RRCConnectionReconfiguration(ctxt_pP, - buffer, - xid, - NULL, - NULL, - (DRB_ToReleaseList_t*)*DRB_Release_configList2, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - (struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList*)dedicatedInfoNASList -#if defined(Rel10) || defined(Rel14) - , (SCellToAddMod_r10_t*)NULL -#endif - ); - ue_context_pP->ue_context.e_rab_release_command_flag = 1; - -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC Connection Reconfiguration\n"); - for (i = 0; i < size; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]); - } - LOG_F(RRC,"\n"); - //////////////////////////////////////// -#endif - -#if defined(ENABLE_ITTI) - /* Free all NAS PDUs */ - if (nas_length > 0) { - /* Free the NAS PDU buffer and invalidate it */ - free(nas_buffer); - } -#endif - - LOG_I(RRC, - "[eNB %d] Frame %d, Logical Channel DL-DCCH, Generate RRCConnectionReconfiguration (bytes %d, UE RNTI %x)\n", - ctxt_pP->module_id, ctxt_pP->frame, size, ue_context_pP->ue_context.rnti); - - LOG_D(RRC, - "[FRAME %05d][RRC_eNB][MOD %u][][--- PDCP_DATA_REQ/%d Bytes (rrcConnectionReconfiguration to UE %x MUI %d) --->][PDCP][MOD %u][RB %u]\n", - ctxt_pP->frame, ctxt_pP->module_id, size, ue_context_pP->ue_context.rnti, rrc_eNB_mui, ctxt_pP->module_id, DCCH); - - MSC_LOG_TX_MESSAGE( - MSC_RRC_ENB, - MSC_RRC_UE, - buffer, - size, - MSC_AS_TIME_FMT" dedicated rrcConnectionReconfiguration UE %x MUI %d size %u", - MSC_AS_TIME_ARGS(ctxt_pP), - ue_context_pP->ue_context.rnti, - rrc_eNB_mui, - size); - - rrc_data_req( - ctxt_pP, - DCCH, - rrc_eNB_mui++, - SDU_CONFIRM_NO, - size, - buffer, - PDCP_TRANSMISSION_MODE_CONTROL); - -} -#endif -//----------------------------------------------------------------------------- -void -rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t* const ctxt_pP, - rrc_eNB_ue_context_t* const ue_context_pP, - const uint8_t ho_state - ) -//----------------------------------------------------------------------------- -{ - uint8_t buffer[RRC_BUF_SIZE]; - uint16_t size; - int i; - - // configure SRB1/SRB2, PhysicalConfigDedicated, MAC_MainConfig for UE - eNB_RRC_INST* rrc_inst = RC.rrc[ctxt_pP->module_id]; - struct PhysicalConfigDedicated** physicalConfigDedicated = &ue_context_pP->ue_context.physicalConfigDedicated; - - struct SRB_ToAddMod *SRB2_config = NULL; - struct SRB_ToAddMod__rlc_Config *SRB2_rlc_config = NULL; - struct SRB_ToAddMod__logicalChannelConfig *SRB2_lchan_config = NULL; - struct LogicalChannelConfig__ul_SpecificParameters - *SRB2_ul_SpecificParameters = NULL; - SRB_ToAddModList_t* SRB_configList = ue_context_pP->ue_context.SRB_configList; - SRB_ToAddModList_t **SRB_configList2 = NULL; - - struct DRB_ToAddMod *DRB_config = NULL; - struct RLC_Config *DRB_rlc_config = NULL; - struct PDCP_Config *DRB_pdcp_config = NULL; - struct PDCP_Config__rlc_AM *PDCP_rlc_AM = NULL; - struct PDCP_Config__rlc_UM *PDCP_rlc_UM = NULL; - struct LogicalChannelConfig *DRB_lchan_config = NULL; - struct LogicalChannelConfig__ul_SpecificParameters - *DRB_ul_SpecificParameters = NULL; - DRB_ToAddModList_t** DRB_configList = &ue_context_pP->ue_context.DRB_configList; - DRB_ToAddModList_t** DRB_configList2 = NULL; - MAC_MainConfig_t *mac_MainConfig = NULL; - MeasObjectToAddModList_t *MeasObj_list = NULL; - MeasObjectToAddMod_t *MeasObj = NULL; - ReportConfigToAddModList_t *ReportConfig_list = NULL; - ReportConfigToAddMod_t *ReportConfig_per, *ReportConfig_A1, - *ReportConfig_A2, *ReportConfig_A3, *ReportConfig_A4, *ReportConfig_A5; - MeasIdToAddModList_t *MeasId_list = NULL; - MeasIdToAddMod_t *MeasId0, *MeasId1, *MeasId2, *MeasId3, *MeasId4, *MeasId5; -#if defined(Rel10) || defined(Rel14) - long *sr_ProhibitTimer_r9 = NULL; - // uint8_t sCellIndexToAdd = rrc_find_free_SCell_index(enb_mod_idP, ue_mod_idP, 1); - //uint8_t sCellIndexToAdd = 0; -#endif - - long *logicalchannelgroup, *logicalchannelgroup_drb; - long *maxHARQ_Tx, *periodicBSR_Timer; - - RSRP_Range_t *rsrp = NULL; - struct MeasConfig__speedStatePars *Sparams = NULL; - QuantityConfig_t *quantityConfig = NULL; - CellsToAddMod_t *CellToAdd = NULL; - CellsToAddModList_t *CellsToAddModList = NULL; - struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList *dedicatedInfoNASList = NULL; - DedicatedInfoNAS_t *dedicatedInfoNas = NULL; - /* for no gcc warnings */ - (void)dedicatedInfoNas; - - C_RNTI_t *cba_RNTI = NULL; - - uint8_t xid = rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id); //Transaction_id, - -#ifdef CBA - //struct PUSCH_CBAConfigDedicated_vlola *pusch_CBAConfigDedicated_vlola; - uint8_t *cba_RNTI_buf; - cba_RNTI = CALLOC(1, sizeof(C_RNTI_t)); - cba_RNTI_buf = CALLOC(1, 2 * sizeof(uint8_t)); - cba_RNTI->buf = cba_RNTI_buf; - cba_RNTI->size = 2; - cba_RNTI->bits_unused = 0; - - // associate UEs to the CBa groups as a function of their UE id - if (rrc_inst->num_active_cba_groups) { - cba_RNTI->buf[0] = rrc_inst->cba_rnti[ue_mod_idP % rrc_inst->num_active_cba_groups] & 0xff; - cba_RNTI->buf[1] = 0xff; - LOG_D(RRC, - "[eNB %d] Frame %d: cba_RNTI = %x in group %d is attribued to UE %d\n", - enb_mod_idP, frameP, - rrc_inst->cba_rnti[ue_mod_idP % rrc_inst->num_active_cba_groups], - ue_mod_idP % rrc_inst->num_active_cba_groups, ue_mod_idP); - } else { - cba_RNTI->buf[0] = 0x0; - cba_RNTI->buf[1] = 0x0; - LOG_D(RRC, "[eNB %d] Frame %d: no cba_RNTI is configured for UE %d\n", enb_mod_idP, frameP, ue_mod_idP); - } - -#endif - - T(T_ENB_RRC_CONNECTION_RECONFIGURATION, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); - - // Configure SRB2 - /// SRB2 - SRB_configList2=&ue_context_pP->ue_context.SRB_configList2[xid]; - if (*SRB_configList2) { - free(*SRB_configList2); - } - *SRB_configList2 = CALLOC(1, sizeof(**SRB_configList2)); - memset(*SRB_configList2, 0, sizeof(**SRB_configList2)); - SRB2_config = CALLOC(1, sizeof(*SRB2_config)); - - SRB2_config->srb_Identity = 2; - SRB2_rlc_config = CALLOC(1, sizeof(*SRB2_rlc_config)); - SRB2_config->rlc_Config = SRB2_rlc_config; - - SRB2_rlc_config->present = SRB_ToAddMod__rlc_Config_PR_explicitValue; - SRB2_rlc_config->choice.explicitValue.present = RLC_Config_PR_am; - SRB2_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.t_PollRetransmit = T_PollRetransmit_ms15; - SRB2_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.pollPDU = PollPDU_p8; - SRB2_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.pollByte = PollByte_kB1000; - SRB2_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.maxRetxThreshold = UL_AM_RLC__maxRetxThreshold_t32; - SRB2_rlc_config->choice.explicitValue.choice.am.dl_AM_RLC.t_Reordering = T_Reordering_ms35; - SRB2_rlc_config->choice.explicitValue.choice.am.dl_AM_RLC.t_StatusProhibit = T_StatusProhibit_ms10; - - SRB2_lchan_config = CALLOC(1, sizeof(*SRB2_lchan_config)); - SRB2_config->logicalChannelConfig = SRB2_lchan_config; - - SRB2_lchan_config->present = SRB_ToAddMod__logicalChannelConfig_PR_explicitValue; - - SRB2_ul_SpecificParameters = CALLOC(1, sizeof(*SRB2_ul_SpecificParameters)); - - SRB2_ul_SpecificParameters->priority = 3; // let some priority for SRB1 and dedicated DRBs - SRB2_ul_SpecificParameters->prioritisedBitRate = - LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity; - SRB2_ul_SpecificParameters->bucketSizeDuration = - LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50; - - // LCG for CCCH and DCCH is 0 as defined in 36331 - logicalchannelgroup = CALLOC(1, sizeof(long)); - *logicalchannelgroup = 0; - - SRB2_ul_SpecificParameters->logicalChannelGroup = logicalchannelgroup; - - SRB2_lchan_config->choice.explicitValue.ul_SpecificParameters = SRB2_ul_SpecificParameters; - // this list has the configuration for SRB1 and SRB2 - ASN_SEQUENCE_ADD(&SRB_configList->list, SRB2_config); - // this list has only the configuration for SRB2 - ASN_SEQUENCE_ADD(&(*SRB_configList2)->list, SRB2_config); - - // Configure DRB - //*DRB_configList = CALLOC(1, sizeof(*DRB_configList)); - // list for all the configured DRB - if (*DRB_configList) { - free(*DRB_configList); - } - *DRB_configList = CALLOC(1, sizeof(**DRB_configList)); - memset(*DRB_configList, 0, sizeof(**DRB_configList)); - - // list for the configured DRB for a this xid - DRB_configList2=&ue_context_pP->ue_context.DRB_configList2[xid]; - if (*DRB_configList2) { - free(*DRB_configList2); - } - *DRB_configList2 = CALLOC(1, sizeof(**DRB_configList2)); - memset(*DRB_configList2, 0, sizeof(**DRB_configList2)); - - - /// DRB - DRB_config = CALLOC(1, sizeof(*DRB_config)); - - DRB_config->eps_BearerIdentity = CALLOC(1, sizeof(long)); - *(DRB_config->eps_BearerIdentity) = 5L; // LW set to first value, allowed value 5..15, value : x+4 - // DRB_config->drb_Identity = (DRB_Identity_t) 1; //allowed values 1..32 - // NN: this is the 1st DRB for this ue, so set it to 1 - DRB_config->drb_Identity = (DRB_Identity_t) 1; // (ue_mod_idP+1); //allowed values 1..32, value: x - DRB_config->logicalChannelIdentity = CALLOC(1, sizeof(long)); - *(DRB_config->logicalChannelIdentity) = (long)3; // value : x+2 - DRB_rlc_config = CALLOC(1, sizeof(*DRB_rlc_config)); - DRB_config->rlc_Config = DRB_rlc_config; - -#ifdef RRC_DEFAULT_RAB_IS_AM - DRB_rlc_config->present = RLC_Config_PR_am; - DRB_rlc_config->choice.am.ul_AM_RLC.t_PollRetransmit = T_PollRetransmit_ms50; - DRB_rlc_config->choice.am.ul_AM_RLC.pollPDU = PollPDU_p16; - DRB_rlc_config->choice.am.ul_AM_RLC.pollByte = PollByte_kBinfinity; - DRB_rlc_config->choice.am.ul_AM_RLC.maxRetxThreshold = UL_AM_RLC__maxRetxThreshold_t8; - DRB_rlc_config->choice.am.dl_AM_RLC.t_Reordering = T_Reordering_ms35; - DRB_rlc_config->choice.am.dl_AM_RLC.t_StatusProhibit = T_StatusProhibit_ms25; -#else - DRB_rlc_config->present = RLC_Config_PR_um_Bi_Directional; - DRB_rlc_config->choice.um_Bi_Directional.ul_UM_RLC.sn_FieldLength = SN_FieldLength_size10; - DRB_rlc_config->choice.um_Bi_Directional.dl_UM_RLC.sn_FieldLength = SN_FieldLength_size10; -#ifdef CBA - DRB_rlc_config->choice.um_Bi_Directional.dl_UM_RLC.t_Reordering = T_Reordering_ms5;//T_Reordering_ms25; -#else - DRB_rlc_config->choice.um_Bi_Directional.dl_UM_RLC.t_Reordering = T_Reordering_ms35; -#endif -#endif - - DRB_pdcp_config = CALLOC(1, sizeof(*DRB_pdcp_config)); - DRB_config->pdcp_Config = DRB_pdcp_config; - DRB_pdcp_config->discardTimer = CALLOC(1, sizeof(long)); - *DRB_pdcp_config->discardTimer = PDCP_Config__discardTimer_infinity; - DRB_pdcp_config->rlc_AM = NULL; - DRB_pdcp_config->rlc_UM = NULL; - - /* avoid gcc warnings */ - (void)PDCP_rlc_AM; - (void)PDCP_rlc_UM; - -#ifdef RRC_DEFAULT_RAB_IS_AM // EXMIMO_IOT - PDCP_rlc_AM = CALLOC(1, sizeof(*PDCP_rlc_AM)); - DRB_pdcp_config->rlc_AM = PDCP_rlc_AM; - PDCP_rlc_AM->statusReportRequired = FALSE; -#else - PDCP_rlc_UM = CALLOC(1, sizeof(*PDCP_rlc_UM)); - DRB_pdcp_config->rlc_UM = PDCP_rlc_UM; - PDCP_rlc_UM->pdcp_SN_Size = PDCP_Config__rlc_UM__pdcp_SN_Size_len12bits; -#endif - DRB_pdcp_config->headerCompression.present = PDCP_Config__headerCompression_PR_notUsed; - - DRB_lchan_config = CALLOC(1, sizeof(*DRB_lchan_config)); - DRB_config->logicalChannelConfig = DRB_lchan_config; - DRB_ul_SpecificParameters = CALLOC(1, sizeof(*DRB_ul_SpecificParameters)); - DRB_lchan_config->ul_SpecificParameters = DRB_ul_SpecificParameters; - - DRB_ul_SpecificParameters->priority = 12; // lower priority than srb1, srb2 and other dedicated bearer - DRB_ul_SpecificParameters->prioritisedBitRate =LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_kBps8 ; - //LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity; - DRB_ul_SpecificParameters->bucketSizeDuration = - LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50; - - // LCG for DTCH can take the value from 1 to 3 as defined in 36331: normally controlled by upper layers (like RRM) - logicalchannelgroup_drb = CALLOC(1, sizeof(long)); - *logicalchannelgroup_drb = 1; - DRB_ul_SpecificParameters->logicalChannelGroup = logicalchannelgroup_drb; - - ASN_SEQUENCE_ADD(&(*DRB_configList)->list, DRB_config); - ASN_SEQUENCE_ADD(&(*DRB_configList2)->list, DRB_config); - - //ue_context_pP->ue_context.DRB_configList2[0] = &(*DRB_configList); - - mac_MainConfig = CALLOC(1, sizeof(*mac_MainConfig)); - ue_context_pP->ue_context.mac_MainConfig = mac_MainConfig; - - mac_MainConfig->ul_SCH_Config = CALLOC(1, sizeof(*mac_MainConfig->ul_SCH_Config)); - - maxHARQ_Tx = CALLOC(1, sizeof(long)); - *maxHARQ_Tx = MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_n5; - mac_MainConfig->ul_SCH_Config->maxHARQ_Tx = maxHARQ_Tx; - periodicBSR_Timer = CALLOC(1, sizeof(long)); - *periodicBSR_Timer = PeriodicBSR_Timer_r12_sf64; - mac_MainConfig->ul_SCH_Config->periodicBSR_Timer = periodicBSR_Timer; - mac_MainConfig->ul_SCH_Config->retxBSR_Timer = RetxBSR_Timer_r12_sf320; - mac_MainConfig->ul_SCH_Config->ttiBundling = 0; // FALSE - - mac_MainConfig->timeAlignmentTimerDedicated = TimeAlignmentTimer_infinity; - - mac_MainConfig->drx_Config = NULL; - - mac_MainConfig->phr_Config = CALLOC(1, sizeof(*mac_MainConfig->phr_Config)); - - mac_MainConfig->phr_Config->present = MAC_MainConfig__phr_Config_PR_setup; - mac_MainConfig->phr_Config->choice.setup.periodicPHR_Timer = MAC_MainConfig__phr_Config__setup__periodicPHR_Timer_sf20; // sf20 = 20 subframes - - mac_MainConfig->phr_Config->choice.setup.prohibitPHR_Timer = MAC_MainConfig__phr_Config__setup__prohibitPHR_Timer_sf20; // sf20 = 20 subframes - - mac_MainConfig->phr_Config->choice.setup.dl_PathlossChange = MAC_MainConfig__phr_Config__setup__dl_PathlossChange_dB1; // Value dB1 =1 dB, dB3 = 3 dB - -#if defined(Rel10) || defined(Rel14) - sr_ProhibitTimer_r9 = CALLOC(1, sizeof(long)); - *sr_ProhibitTimer_r9 = 0; // SR tx on PUCCH, Value in number of SR period(s). Value 0 = no timer for SR, Value 2= 2*SR - mac_MainConfig->ext1 = CALLOC(1, sizeof(struct MAC_MainConfig__ext1)); - mac_MainConfig->ext1->sr_ProhibitTimer_r9 = sr_ProhibitTimer_r9; - //sps_RA_ConfigList_rlola = NULL; -#endif - - //change the transmission mode for the primary component carrier - //TODO: add codebook subset restriction here - //TODO: change TM for secondary CC in SCelltoaddmodlist - if (*physicalConfigDedicated) { - if ((*physicalConfigDedicated)->antennaInfo) { - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.transmissionMode = rrc_inst->configuration.ue_TransmissionMode[0]; - LOG_D(RRC,"Setting transmission mode to %ld+1\n",rrc_inst->configuration.ue_TransmissionMode[0]); - if (rrc_inst->configuration.ue_TransmissionMode[0]==AntennaInfoDedicated__transmissionMode_tm3) { - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction= - CALLOC(1,sizeof(AntennaInfoDedicated__codebookSubsetRestriction_PR)); - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->present = - AntennaInfoDedicated__codebookSubsetRestriction_PR_n2TxAntenna_tm3; - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm3.buf= MALLOC(1); - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm3.buf[0] = 0xc0; - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm3.size=1; - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm3.bits_unused=6; - } - else if (rrc_inst->configuration.ue_TransmissionMode[0]==AntennaInfoDedicated__transmissionMode_tm4) { - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction= - CALLOC(1,sizeof(AntennaInfoDedicated__codebookSubsetRestriction_PR)); - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->present = - AntennaInfoDedicated__codebookSubsetRestriction_PR_n2TxAntenna_tm4; - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm4.buf= MALLOC(1); - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm4.buf[0] = 0xfc; - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm4.size=1; - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm4.bits_unused=2; - - } - else if (rrc_inst->configuration.ue_TransmissionMode[0]==AntennaInfoDedicated__transmissionMode_tm5) { - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction= - CALLOC(1,sizeof(AntennaInfoDedicated__codebookSubsetRestriction_PR)); - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->present = - AntennaInfoDedicated__codebookSubsetRestriction_PR_n2TxAntenna_tm5; - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm5.buf= MALLOC(1); - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm5.buf[0] = 0xf0; - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm5.size=1; - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm5.bits_unused=4; - } - else if (rrc_inst->configuration.ue_TransmissionMode[0]==AntennaInfoDedicated__transmissionMode_tm6) { - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction= - CALLOC(1,sizeof(AntennaInfoDedicated__codebookSubsetRestriction_PR)); - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->present = - AntennaInfoDedicated__codebookSubsetRestriction_PR_n2TxAntenna_tm6; - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm6.buf= MALLOC(1); - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm6.buf[0] = 0xf0; - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm6.size=1; - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm6.bits_unused=4; - } - } - else { - LOG_E(RRC,"antenna_info not present in physical_config_dedicated. Not reconfiguring!\n"); - } - if ((*physicalConfigDedicated)->cqi_ReportConfig) { - if ((rrc_inst->configuration.ue_TransmissionMode[0]==AntennaInfoDedicated__transmissionMode_tm4) || - (rrc_inst->configuration.ue_TransmissionMode[0]==AntennaInfoDedicated__transmissionMode_tm5) || - (rrc_inst->configuration.ue_TransmissionMode[0]==AntennaInfoDedicated__transmissionMode_tm6)) { - //feedback mode needs to be set as well - //TODO: I think this is taken into account in the PHY automatically based on the transmission mode variable - printf("setting cqi reporting mode to rm31\n"); -#if defined(Rel10) || defined(Rel14) - *((*physicalConfigDedicated)->cqi_ReportConfig->cqi_ReportModeAperiodic)=CQI_ReportModeAperiodic_rm31; -#else - *((*physicalConfigDedicated)->cqi_ReportConfig->cqi_ReportModeAperiodic)=CQI_ReportConfig__cqi_ReportModeAperiodic_rm31; // HLC CQI, no PMI -#endif - } - } - else { - LOG_E(RRC,"cqi_ReportConfig not present in physical_config_dedicated. Not reconfiguring!\n"); - } - } - else { - LOG_E(RRC,"physical_config_dedicated not present in RRCConnectionReconfiguration. Not reconfiguring!\n"); - } - - // Measurement ID list - MeasId_list = CALLOC(1, sizeof(*MeasId_list)); - memset((void *)MeasId_list, 0, sizeof(*MeasId_list)); - - MeasId0 = CALLOC(1, sizeof(*MeasId0)); - MeasId0->measId = 1; - MeasId0->measObjectId = 1; - MeasId0->reportConfigId = 1; - ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId0); - - MeasId1 = CALLOC(1, sizeof(*MeasId1)); - MeasId1->measId = 2; - MeasId1->measObjectId = 1; - MeasId1->reportConfigId = 2; - ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId1); - - MeasId2 = CALLOC(1, sizeof(*MeasId2)); - MeasId2->measId = 3; - MeasId2->measObjectId = 1; - MeasId2->reportConfigId = 3; - ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId2); - - MeasId3 = CALLOC(1, sizeof(*MeasId3)); - MeasId3->measId = 4; - MeasId3->measObjectId = 1; - MeasId3->reportConfigId = 4; - ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId3); - - MeasId4 = CALLOC(1, sizeof(*MeasId4)); - MeasId4->measId = 5; - MeasId4->measObjectId = 1; - MeasId4->reportConfigId = 5; - ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId4); - - MeasId5 = CALLOC(1, sizeof(*MeasId5)); - MeasId5->measId = 6; - MeasId5->measObjectId = 1; - MeasId5->reportConfigId = 6; - ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId5); - - // rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.measConfig->measIdToAddModList = MeasId_list; - - // Add one EUTRA Measurement Object - MeasObj_list = CALLOC(1, sizeof(*MeasObj_list)); - memset((void *)MeasObj_list, 0, sizeof(*MeasObj_list)); - - // Configure MeasObject - - MeasObj = CALLOC(1, sizeof(*MeasObj)); - memset((void *)MeasObj, 0, sizeof(*MeasObj)); - - MeasObj->measObjectId = 1; - MeasObj->measObject.present = MeasObjectToAddMod__measObject_PR_measObjectEUTRA; - MeasObj->measObject.choice.measObjectEUTRA.carrierFreq = 3350; //band 7, 2.68GHz - //MeasObj->measObject.choice.measObjectEUTRA.carrierFreq = 36090; //band 33, 1.909GHz - MeasObj->measObject.choice.measObjectEUTRA.allowedMeasBandwidth = AllowedMeasBandwidth_mbw25; - MeasObj->measObject.choice.measObjectEUTRA.presenceAntennaPort1 = 1; - MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.buf = CALLOC(1, sizeof(uint8_t)); - MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.buf[0] = 0; - MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.size = 1; - MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.bits_unused = 6; - MeasObj->measObject.choice.measObjectEUTRA.offsetFreq = NULL; // Default is 15 or 0dB - - MeasObj->measObject.choice.measObjectEUTRA.cellsToAddModList = - (CellsToAddModList_t *) CALLOC(1, sizeof(*CellsToAddModList)); - - CellsToAddModList = MeasObj->measObject.choice.measObjectEUTRA.cellsToAddModList; - - // Add adjacent cell lists (6 per eNB) - for (i = 0; i < 6; i++) { - CellToAdd = (CellsToAddMod_t *) CALLOC(1, sizeof(*CellToAdd)); - CellToAdd->cellIndex = i + 1; - CellToAdd->physCellId = get_adjacent_cell_id(ctxt_pP->module_id, i); - CellToAdd->cellIndividualOffset = Q_OffsetRange_dB0; - - ASN_SEQUENCE_ADD(&CellsToAddModList->list, CellToAdd); - } - - ASN_SEQUENCE_ADD(&MeasObj_list->list, MeasObj); - // rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.measConfig->measObjectToAddModList = MeasObj_list; - - // Report Configurations for periodical, A1-A5 events - ReportConfig_list = CALLOC(1, sizeof(*ReportConfig_list)); - - ReportConfig_per = CALLOC(1, sizeof(*ReportConfig_per)); - - ReportConfig_A1 = CALLOC(1, sizeof(*ReportConfig_A1)); - - ReportConfig_A2 = CALLOC(1, sizeof(*ReportConfig_A2)); - - ReportConfig_A3 = CALLOC(1, sizeof(*ReportConfig_A3)); - - ReportConfig_A4 = CALLOC(1, sizeof(*ReportConfig_A4)); - - ReportConfig_A5 = CALLOC(1, sizeof(*ReportConfig_A5)); - - ReportConfig_per->reportConfigId = 1; - ReportConfig_per->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.triggerType.present = - ReportConfigEUTRA__triggerType_PR_periodical; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.triggerType.choice.periodical.purpose = - ReportConfigEUTRA__triggerType__periodical__purpose_reportStrongestCells; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - - ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_per); - - ReportConfig_A1->reportConfigId = 2; - ReportConfig_A1->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerType.present = - ReportConfigEUTRA__triggerType_PR_event; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = - ReportConfigEUTRA__triggerType__event__eventId_PR_eventA1; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA1. - a1_Threshold.present = ThresholdEUTRA_PR_threshold_RSRP; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA1. - a1_Threshold.choice.threshold_RSRP = 10; - - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - - ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_A1); - - if (ho_state == 1 /*HO_MEASURMENT */ ) { - LOG_I(RRC, "[eNB %d] frame %d: requesting A2, A3, A4, A5, and A6 event reporting\n", - ctxt_pP->module_id, ctxt_pP->frame); - ReportConfig_A2->reportConfigId = 3; - ReportConfig_A2->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerType.present = - ReportConfigEUTRA__triggerType_PR_event; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = - ReportConfigEUTRA__triggerType__event__eventId_PR_eventA2; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. - eventA2.a2_Threshold.present = ThresholdEUTRA_PR_threshold_RSRP; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. - eventA2.a2_Threshold.choice.threshold_RSRP = 10; - - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerQuantity = - ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - - ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_A2); - - ReportConfig_A3->reportConfigId = 4; - ReportConfig_A3->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.present = - ReportConfigEUTRA__triggerType_PR_event; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = - ReportConfigEUTRA__triggerType__event__eventId_PR_eventA3; - - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA3.a3_Offset = 1; //10; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. - eventA3.reportOnLeave = 1; - - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerQuantity = - ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.hysteresis = 0.5; // FIXME ...hysteresis is of type long! - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.timeToTrigger = - TimeToTrigger_ms40; - ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_A3); - - ReportConfig_A4->reportConfigId = 5; - ReportConfig_A4->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerType.present = - ReportConfigEUTRA__triggerType_PR_event; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = - ReportConfigEUTRA__triggerType__event__eventId_PR_eventA4; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. - eventA4.a4_Threshold.present = ThresholdEUTRA_PR_threshold_RSRP; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. - eventA4.a4_Threshold.choice.threshold_RSRP = 10; - - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerQuantity = - ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - - ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_A4); - - ReportConfig_A5->reportConfigId = 6; - ReportConfig_A5->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.present = - ReportConfigEUTRA__triggerType_PR_event; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = - ReportConfigEUTRA__triggerType__event__eventId_PR_eventA5; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. - eventA5.a5_Threshold1.present = ThresholdEUTRA_PR_threshold_RSRP; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. - eventA5.a5_Threshold2.present = ThresholdEUTRA_PR_threshold_RSRP; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. - eventA5.a5_Threshold1.choice.threshold_RSRP = 10; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. - eventA5.a5_Threshold2.choice.threshold_RSRP = 10; - - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerQuantity = - ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - - ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_A5); - // rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.measConfig->reportConfigToAddModList = ReportConfig_list; - - rsrp = CALLOC(1, sizeof(RSRP_Range_t)); - *rsrp = 20; - - Sparams = CALLOC(1, sizeof(*Sparams)); - Sparams->present = MeasConfig__speedStatePars_PR_setup; - Sparams->choice.setup.timeToTrigger_SF.sf_High = SpeedStateScaleFactors__sf_Medium_oDot75; - Sparams->choice.setup.timeToTrigger_SF.sf_Medium = SpeedStateScaleFactors__sf_High_oDot5; - Sparams->choice.setup.mobilityStateParameters.n_CellChangeHigh = 10; - Sparams->choice.setup.mobilityStateParameters.n_CellChangeMedium = 5; - Sparams->choice.setup.mobilityStateParameters.t_Evaluation = MobilityStateParameters__t_Evaluation_s60; - Sparams->choice.setup.mobilityStateParameters.t_HystNormal = MobilityStateParameters__t_HystNormal_s120; - - quantityConfig = CALLOC(1, sizeof(*quantityConfig)); - memset((void *)quantityConfig, 0, sizeof(*quantityConfig)); - quantityConfig->quantityConfigEUTRA = CALLOC(1, sizeof(struct QuantityConfigEUTRA)); - memset((void *)quantityConfig->quantityConfigEUTRA, 0, sizeof(*quantityConfig->quantityConfigEUTRA)); - quantityConfig->quantityConfigCDMA2000 = NULL; - quantityConfig->quantityConfigGERAN = NULL; - quantityConfig->quantityConfigUTRA = NULL; - quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP = - CALLOC(1, sizeof(*(quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP))); - quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ = - CALLOC(1, sizeof(*(quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ))); - *quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP = FilterCoefficient_fc4; - *quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ = FilterCoefficient_fc4; - - LOG_I(RRC, - "[eNB %d] Frame %d: potential handover preparation: store the information in an intermediate structure in case of failure\n", - ctxt_pP->module_id, ctxt_pP->frame); - // store the information in an intermediate structure for Hanodver management - //rrc_inst->handover_info.as_config.sourceRadioResourceConfig.srb_ToAddModList = CALLOC(1,sizeof()); - ue_context_pP->ue_context.handover_info = CALLOC(1, sizeof(*(ue_context_pP->ue_context.handover_info))); - //memcpy((void *)rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.srb_ToAddModList,(void *)SRB_list,sizeof(SRB_ToAddModList_t)); - ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.srb_ToAddModList = *SRB_configList2; - //memcpy((void *)rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.drb_ToAddModList,(void *)DRB_list,sizeof(DRB_ToAddModList_t)); - ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.drb_ToAddModList = *DRB_configList; - ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.drb_ToReleaseList = NULL; - ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.mac_MainConfig = - CALLOC(1, sizeof(*ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.mac_MainConfig)); - memcpy((void*)ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.mac_MainConfig, - (void *)mac_MainConfig, sizeof(MAC_MainConfig_t)); - ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.physicalConfigDedicated = - CALLOC(1, sizeof(PhysicalConfigDedicated_t)); - memcpy((void*)ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.physicalConfigDedicated, - (void*)ue_context_pP->ue_context.physicalConfigDedicated, sizeof(PhysicalConfigDedicated_t)); - ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.sps_Config = NULL; - //memcpy((void *)rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.sps_Config,(void *)rrc_inst->sps_Config[ue_mod_idP],sizeof(SPS_Config_t)); - - } - -#if defined(ENABLE_ITTI) - /* Initialize NAS list */ - dedicatedInfoNASList = CALLOC(1, sizeof(struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList)); - - /* Add all NAS PDUs to the list */ - for (i = 0; i < ue_context_pP->ue_context.nb_of_e_rabs; i++) { - if (ue_context_pP->ue_context.e_rab[i].param.nas_pdu.buffer != NULL) { - dedicatedInfoNas = CALLOC(1, sizeof(DedicatedInfoNAS_t)); - memset(dedicatedInfoNas, 0, sizeof(OCTET_STRING_t)); - OCTET_STRING_fromBuf(dedicatedInfoNas, - (char*)ue_context_pP->ue_context.e_rab[i].param.nas_pdu.buffer, - ue_context_pP->ue_context.e_rab[i].param.nas_pdu.length); - ASN_SEQUENCE_ADD(&dedicatedInfoNASList->list, dedicatedInfoNas); - } - - /* TODO parameters yet to process ... */ - { - // ue_context_pP->ue_context.e_rab[i].param.qos; - // ue_context_pP->ue_context.e_rab[i].param.sgw_addr; - // ue_context_pP->ue_context.e_rab[i].param.gtp_teid; - } - - /* TODO should test if e RAB are Ok before! */ - ue_context_pP->ue_context.e_rab[i].status = E_RAB_STATUS_DONE; - LOG_D(RRC, "setting the status for the default DRB (index %d) to (%d,%s)\n", - i, ue_context_pP->ue_context.e_rab[i].status, "E_RAB_STATUS_DONE"); - } - - /* If list is empty free the list and reset the address */ - if (dedicatedInfoNASList->list.count == 0) { - free(dedicatedInfoNASList); - dedicatedInfoNASList = NULL; - } - -#endif - - memset(buffer, 0, RRC_BUF_SIZE); - - size = do_RRCConnectionReconfiguration(ctxt_pP, - buffer, - xid, //Transaction_id, - (SRB_ToAddModList_t*)*SRB_configList2, // SRB_configList - (DRB_ToAddModList_t*)*DRB_configList, - (DRB_ToReleaseList_t*)NULL, // DRB2_list, - (struct SPS_Config*)NULL, // *sps_Config, - (struct PhysicalConfigDedicated*)*physicalConfigDedicated, -#ifdef EXMIMO_IOT - NULL, NULL, NULL,NULL, -#else - (MeasObjectToAddModList_t*)MeasObj_list, - (ReportConfigToAddModList_t*)ReportConfig_list, - (QuantityConfig_t*)quantityConfig, - (MeasIdToAddModList_t*)MeasId_list, -#endif - (MAC_MainConfig_t*)mac_MainConfig, - (MeasGapConfig_t*)NULL, - (MobilityControlInfo_t*)NULL, - (struct MeasConfig__speedStatePars*)Sparams, - (RSRP_Range_t*)rsrp, - (C_RNTI_t*)cba_RNTI, - (struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList*)dedicatedInfoNASList -#if defined(Rel10) || defined(Rel14) - , (SCellToAddMod_r10_t*)NULL -#endif - ); - -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC Connection Reconfiguration\n"); - for (i = 0; i < size; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]); - } - LOG_F(RRC,"\n"); - //////////////////////////////////////// -#endif - -#if defined(ENABLE_ITTI) - - /* Free all NAS PDUs */ - for (i = 0; i < ue_context_pP->ue_context.nb_of_e_rabs; i++) { - if (ue_context_pP->ue_context.e_rab[i].param.nas_pdu.buffer != NULL) { - /* Free the NAS PDU buffer and invalidate it */ - free(ue_context_pP->ue_context.e_rab[i].param.nas_pdu.buffer); - ue_context_pP->ue_context.e_rab[i].param.nas_pdu.buffer = NULL; - } - } - -#endif - - LOG_I(RRC, - "[eNB %d] Frame %d, Logical Channel DL-DCCH, Generate RRCConnectionReconfiguration (bytes %d, UE id %x)\n", - ctxt_pP->module_id, ctxt_pP->frame, size, ue_context_pP->ue_context.rnti); - - LOG_D(RRC, - "[FRAME %05d][RRC_eNB][MOD %u][][--- PDCP_DATA_REQ/%d Bytes (rrcConnectionReconfiguration to UE %x MUI %d) --->][PDCP][MOD %u][RB %u]\n", - ctxt_pP->frame, ctxt_pP->module_id, size, ue_context_pP->ue_context.rnti, rrc_eNB_mui, ctxt_pP->module_id, DCCH); - - MSC_LOG_TX_MESSAGE( - MSC_RRC_ENB, - MSC_RRC_UE, - buffer, - size, - MSC_AS_TIME_FMT" rrcConnectionReconfiguration UE %x MUI %d size %u", - MSC_AS_TIME_ARGS(ctxt_pP), - ue_context_pP->ue_context.rnti, - rrc_eNB_mui, - size); - - rrc_data_req( - ctxt_pP, - DCCH, - rrc_eNB_mui++, - SDU_CONFIRM_NO, - size, - buffer, - PDCP_TRANSMISSION_MODE_CONTROL); -} - -//----------------------------------------------------------------------------- -void -flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t* const ctxt_pP, - rrc_eNB_ue_context_t* const ue_context_pP, - const uint8_t ho_state, - agent_reconf_rrc * trig_param - ) -//----------------------------------------------------------------------------- -{ - uint8_t buffer[RRC_BUF_SIZE]; - uint16_t size; - int i; - - // configure SRB1/SRB2, PhysicalConfigDedicated, MAC_MainConfig for UE - eNB_RRC_INST* rrc_inst = RC.rrc[ctxt_pP->module_id]; - struct PhysicalConfigDedicated** physicalConfigDedicated = &ue_context_pP->ue_context.physicalConfigDedicated; - - struct SRB_ToAddMod *SRB2_config = NULL; - struct SRB_ToAddMod__rlc_Config *SRB2_rlc_config = NULL; - struct SRB_ToAddMod__logicalChannelConfig *SRB2_lchan_config = NULL; - struct LogicalChannelConfig__ul_SpecificParameters - *SRB2_ul_SpecificParameters = NULL; - SRB_ToAddModList_t* SRB_configList = ue_context_pP->ue_context.SRB_configList; - SRB_ToAddModList_t **SRB_configList2 = NULL; - - struct DRB_ToAddMod *DRB_config = NULL; - struct RLC_Config *DRB_rlc_config = NULL; - struct PDCP_Config *DRB_pdcp_config = NULL; - struct PDCP_Config__rlc_AM *PDCP_rlc_AM = NULL; - struct PDCP_Config__rlc_UM *PDCP_rlc_UM = NULL; - struct LogicalChannelConfig *DRB_lchan_config = NULL; - struct LogicalChannelConfig__ul_SpecificParameters - *DRB_ul_SpecificParameters = NULL; - DRB_ToAddModList_t** DRB_configList = &ue_context_pP->ue_context.DRB_configList; - DRB_ToAddModList_t** DRB_configList2 = NULL; - MAC_MainConfig_t *mac_MainConfig = NULL; - MeasObjectToAddModList_t *MeasObj_list = NULL; - MeasObjectToAddMod_t *MeasObj = NULL; - ReportConfigToAddModList_t *ReportConfig_list = NULL; - ReportConfigToAddMod_t *ReportConfig_per;//, *ReportConfig_A1, - // *ReportConfig_A2, *ReportConfig_A3, *ReportConfig_A4, *ReportConfig_A5; - MeasIdToAddModList_t *MeasId_list = NULL; - MeasIdToAddMod_t *MeasId0; //, *MeasId1, *MeasId2, *MeasId3, *MeasId4, *MeasId5; -#if Rel10 - long *sr_ProhibitTimer_r9 = NULL; - // uint8_t sCellIndexToAdd = rrc_find_free_SCell_index(enb_mod_idP, ue_mod_idP, 1); - //uint8_t sCellIndexToAdd = 0; -#endif - - long *logicalchannelgroup, *logicalchannelgroup_drb; - long *maxHARQ_Tx, *periodicBSR_Timer; - - RSRP_Range_t *rsrp = NULL; - struct MeasConfig__speedStatePars *Sparams = NULL; - QuantityConfig_t *quantityConfig = NULL; - CellsToAddMod_t *CellToAdd = NULL; - CellsToAddModList_t *CellsToAddModList = NULL; - struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList *dedicatedInfoNASList = NULL; - DedicatedInfoNAS_t *dedicatedInfoNas = NULL; - /* for no gcc warnings */ - (void)dedicatedInfoNas; - - C_RNTI_t *cba_RNTI = NULL; - - uint8_t xid = rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id); //Transaction_id, - -#ifdef CBA - //struct PUSCH_CBAConfigDedicated_vlola *pusch_CBAConfigDedicated_vlola; - uint8_t *cba_RNTI_buf; - cba_RNTI = CALLOC(1, sizeof(C_RNTI_t)); - cba_RNTI_buf = CALLOC(1, 2 * sizeof(uint8_t)); - cba_RNTI->buf = cba_RNTI_buf; - cba_RNTI->size = 2; - cba_RNTI->bits_unused = 0; - - // associate UEs to the CBa groups as a function of their UE id - if (rrc_inst->num_active_cba_groups) { - cba_RNTI->buf[0] = rrc_inst->cba_rnti[ue_mod_idP % rrc_inst->num_active_cba_groups] & 0xff; - cba_RNTI->buf[1] = 0xff; - LOG_D(RRC, - "[eNB %d] Frame %d: cba_RNTI = %x in group %d is attribued to UE %d\n", - enb_mod_idP, frameP, - rrc_inst->cba_rnti[ue_mod_idP % rrc_inst->num_active_cba_groups], - ue_mod_idP % rrc_inst->num_active_cba_groups, ue_mod_idP); - } else { - cba_RNTI->buf[0] = 0x0; - cba_RNTI->buf[1] = 0x0; - LOG_D(RRC, "[eNB %d] Frame %d: no cba_RNTI is configured for UE %d\n", enb_mod_idP, frameP, ue_mod_idP); - } - -#endif - - T(T_ENB_RRC_CONNECTION_RECONFIGURATION, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); - - // Configure SRB2 - /// SRB2 - SRB_configList2=&ue_context_pP->ue_context.SRB_configList2[xid]; - if (*SRB_configList2) { - free(*SRB_configList2); - } - *SRB_configList2 = CALLOC(1, sizeof(**SRB_configList2)); - memset(*SRB_configList2, 0, sizeof(**SRB_configList2)); - SRB2_config = CALLOC(1, sizeof(*SRB2_config)); - - SRB2_config->srb_Identity = 2; - SRB2_rlc_config = CALLOC(1, sizeof(*SRB2_rlc_config)); - SRB2_config->rlc_Config = SRB2_rlc_config; - - SRB2_rlc_config->present = SRB_ToAddMod__rlc_Config_PR_explicitValue; - SRB2_rlc_config->choice.explicitValue.present = RLC_Config_PR_am; - SRB2_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.t_PollRetransmit = T_PollRetransmit_ms15; - SRB2_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.pollPDU = PollPDU_p8; - SRB2_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.pollByte = PollByte_kB1000; - SRB2_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.maxRetxThreshold = UL_AM_RLC__maxRetxThreshold_t32; - SRB2_rlc_config->choice.explicitValue.choice.am.dl_AM_RLC.t_Reordering = T_Reordering_ms35; - SRB2_rlc_config->choice.explicitValue.choice.am.dl_AM_RLC.t_StatusProhibit = T_StatusProhibit_ms10; - - SRB2_lchan_config = CALLOC(1, sizeof(*SRB2_lchan_config)); - SRB2_config->logicalChannelConfig = SRB2_lchan_config; - - SRB2_lchan_config->present = SRB_ToAddMod__logicalChannelConfig_PR_explicitValue; - - SRB2_ul_SpecificParameters = CALLOC(1, sizeof(*SRB2_ul_SpecificParameters)); - - SRB2_ul_SpecificParameters->priority = 3; // let some priority for SRB1 and dedicated DRBs - SRB2_ul_SpecificParameters->prioritisedBitRate = - LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity; - SRB2_ul_SpecificParameters->bucketSizeDuration = - LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50; - - // LCG for CCCH and DCCH is 0 as defined in 36331 - logicalchannelgroup = CALLOC(1, sizeof(long)); - *logicalchannelgroup = 0; - - SRB2_ul_SpecificParameters->logicalChannelGroup = logicalchannelgroup; - - SRB2_lchan_config->choice.explicitValue.ul_SpecificParameters = SRB2_ul_SpecificParameters; - // this list has the configuration for SRB1 and SRB2 - ASN_SEQUENCE_ADD(&SRB_configList->list, SRB2_config); - // this list has only the configuration for SRB2 - ASN_SEQUENCE_ADD(&(*SRB_configList2)->list, SRB2_config); - - // Configure DRB - //*DRB_configList = CALLOC(1, sizeof(*DRB_configList)); - // list for all the configured DRB - if (*DRB_configList) { - free(*DRB_configList); - } - *DRB_configList = CALLOC(1, sizeof(**DRB_configList)); - memset(*DRB_configList, 0, sizeof(**DRB_configList)); - - // list for the configured DRB for a this xid - DRB_configList2=&ue_context_pP->ue_context.DRB_configList2[xid]; - if (*DRB_configList2) { - free(*DRB_configList2); - } - *DRB_configList2 = CALLOC(1, sizeof(**DRB_configList2)); - memset(*DRB_configList2, 0, sizeof(**DRB_configList2)); - - - /// DRB - DRB_config = CALLOC(1, sizeof(*DRB_config)); - - DRB_config->eps_BearerIdentity = CALLOC(1, sizeof(long)); - *(DRB_config->eps_BearerIdentity) = 5L; // LW set to first value, allowed value 5..15, value : x+4 - // DRB_config->drb_Identity = (DRB_Identity_t) 1; //allowed values 1..32 - // NN: this is the 1st DRB for this ue, so set it to 1 - DRB_config->drb_Identity = (DRB_Identity_t) 1; // (ue_mod_idP+1); //allowed values 1..32, value: x - DRB_config->logicalChannelIdentity = CALLOC(1, sizeof(long)); - *(DRB_config->logicalChannelIdentity) = (long)3; // value : x+2 - DRB_rlc_config = CALLOC(1, sizeof(*DRB_rlc_config)); - DRB_config->rlc_Config = DRB_rlc_config; - -#ifdef RRC_DEFAULT_RAB_IS_AM - DRB_rlc_config->present = RLC_Config_PR_am; - DRB_rlc_config->choice.am.ul_AM_RLC.t_PollRetransmit = T_PollRetransmit_ms50; - DRB_rlc_config->choice.am.ul_AM_RLC.pollPDU = PollPDU_p16; - DRB_rlc_config->choice.am.ul_AM_RLC.pollByte = PollByte_kBinfinity; - DRB_rlc_config->choice.am.ul_AM_RLC.maxRetxThreshold = UL_AM_RLC__maxRetxThreshold_t8; - DRB_rlc_config->choice.am.dl_AM_RLC.t_Reordering = T_Reordering_ms35; - DRB_rlc_config->choice.am.dl_AM_RLC.t_StatusProhibit = T_StatusProhibit_ms25; -#else - DRB_rlc_config->present = RLC_Config_PR_um_Bi_Directional; - DRB_rlc_config->choice.um_Bi_Directional.ul_UM_RLC.sn_FieldLength = SN_FieldLength_size10; - DRB_rlc_config->choice.um_Bi_Directional.dl_UM_RLC.sn_FieldLength = SN_FieldLength_size10; -#ifdef CBA - DRB_rlc_config->choice.um_Bi_Directional.dl_UM_RLC.t_Reordering = T_Reordering_ms5;//T_Reordering_ms25; -#else - DRB_rlc_config->choice.um_Bi_Directional.dl_UM_RLC.t_Reordering = T_Reordering_ms35; -#endif -#endif - - DRB_pdcp_config = CALLOC(1, sizeof(*DRB_pdcp_config)); - DRB_config->pdcp_Config = DRB_pdcp_config; - DRB_pdcp_config->discardTimer = CALLOC(1, sizeof(long)); - *DRB_pdcp_config->discardTimer = PDCP_Config__discardTimer_infinity; - DRB_pdcp_config->rlc_AM = NULL; - DRB_pdcp_config->rlc_UM = NULL; - - /* avoid gcc warnings */ - (void)PDCP_rlc_AM; - (void)PDCP_rlc_UM; - -#ifdef RRC_DEFAULT_RAB_IS_AM // EXMIMO_IOT - PDCP_rlc_AM = CALLOC(1, sizeof(*PDCP_rlc_AM)); - DRB_pdcp_config->rlc_AM = PDCP_rlc_AM; - PDCP_rlc_AM->statusReportRequired = FALSE; -#else - PDCP_rlc_UM = CALLOC(1, sizeof(*PDCP_rlc_UM)); - DRB_pdcp_config->rlc_UM = PDCP_rlc_UM; - PDCP_rlc_UM->pdcp_SN_Size = PDCP_Config__rlc_UM__pdcp_SN_Size_len12bits; -#endif - DRB_pdcp_config->headerCompression.present = PDCP_Config__headerCompression_PR_notUsed; - - DRB_lchan_config = CALLOC(1, sizeof(*DRB_lchan_config)); - DRB_config->logicalChannelConfig = DRB_lchan_config; - DRB_ul_SpecificParameters = CALLOC(1, sizeof(*DRB_ul_SpecificParameters)); - DRB_lchan_config->ul_SpecificParameters = DRB_ul_SpecificParameters; - - DRB_ul_SpecificParameters->priority = 12; // lower priority than srb1, srb2 and other dedicated bearer - DRB_ul_SpecificParameters->prioritisedBitRate =LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_kBps8 ; - //LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity; - DRB_ul_SpecificParameters->bucketSizeDuration = - LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50; - - // LCG for DTCH can take the value from 1 to 3 as defined in 36331: normally controlled by upper layers (like RRM) - logicalchannelgroup_drb = CALLOC(1, sizeof(long)); - *logicalchannelgroup_drb = 1; - DRB_ul_SpecificParameters->logicalChannelGroup = logicalchannelgroup_drb; - - ASN_SEQUENCE_ADD(&(*DRB_configList)->list, DRB_config); - ASN_SEQUENCE_ADD(&(*DRB_configList2)->list, DRB_config); - - //ue_context_pP->ue_context.DRB_configList2[0] = &(*DRB_configList); - - mac_MainConfig = CALLOC(1, sizeof(*mac_MainConfig)); - // ue_context_pP->ue_context.mac_MainConfig = mac_MainConfig; - - mac_MainConfig->ul_SCH_Config = CALLOC(1, sizeof(*mac_MainConfig->ul_SCH_Config)); - - maxHARQ_Tx = CALLOC(1, sizeof(long)); - *maxHARQ_Tx = MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_n5; - mac_MainConfig->ul_SCH_Config->maxHARQ_Tx = maxHARQ_Tx; - periodicBSR_Timer = CALLOC(1, sizeof(long)); - *periodicBSR_Timer = PeriodicBSR_Timer_r12_sf64; - mac_MainConfig->ul_SCH_Config->periodicBSR_Timer = periodicBSR_Timer; - mac_MainConfig->ul_SCH_Config->retxBSR_Timer = RetxBSR_Timer_r12_sf320; - mac_MainConfig->ul_SCH_Config->ttiBundling = 0; // FALSE - - mac_MainConfig->timeAlignmentTimerDedicated = TimeAlignmentTimer_infinity; - - mac_MainConfig->drx_Config = NULL; - - mac_MainConfig->phr_Config = CALLOC(1, sizeof(*mac_MainConfig->phr_Config)); - - mac_MainConfig->phr_Config->present = MAC_MainConfig__phr_Config_PR_setup; - mac_MainConfig->phr_Config->choice.setup.periodicPHR_Timer = MAC_MainConfig__phr_Config__setup__periodicPHR_Timer_sf20; // sf20 = 20 subframes - - mac_MainConfig->phr_Config->choice.setup.prohibitPHR_Timer = MAC_MainConfig__phr_Config__setup__prohibitPHR_Timer_sf20; // sf20 = 20 subframes - - mac_MainConfig->phr_Config->choice.setup.dl_PathlossChange = MAC_MainConfig__phr_Config__setup__dl_PathlossChange_dB1; // Value dB1 =1 dB, dB3 = 3 dB - -#ifdef Rel10 - sr_ProhibitTimer_r9 = CALLOC(1, sizeof(long)); - *sr_ProhibitTimer_r9 = 0; // SR tx on PUCCH, Value in number of SR period(s). Value 0 = no timer for SR, Value 2= 2*SR - mac_MainConfig->ext1 = CALLOC(1, sizeof(struct MAC_MainConfig__ext1)); - mac_MainConfig->ext1->sr_ProhibitTimer_r9 = sr_ProhibitTimer_r9; - //sps_RA_ConfigList_rlola = NULL; -#endif - - //change the transmission mode for the primary component carrier - //TODO: add codebook subset restriction here - //TODO: change TM for secondary CC in SCelltoaddmodlist - if (*physicalConfigDedicated) { - if ((*physicalConfigDedicated)->antennaInfo) { - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.transmissionMode = rrc_inst->configuration.ue_TransmissionMode[0]; - LOG_D(RRC,"Setting transmission mode to %ld+1\n",rrc_inst->configuration.ue_TransmissionMode[0]); - if (rrc_inst->configuration.ue_TransmissionMode[0]==AntennaInfoDedicated__transmissionMode_tm3) { - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction= - CALLOC(1,sizeof(AntennaInfoDedicated__codebookSubsetRestriction_PR)); - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->present = - AntennaInfoDedicated__codebookSubsetRestriction_PR_n2TxAntenna_tm3; - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm3.buf= MALLOC(1); - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm3.buf[0] = 0xc0; - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm3.size=1; - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm3.bits_unused=6; - } - else if (rrc_inst->configuration.ue_TransmissionMode[0]==AntennaInfoDedicated__transmissionMode_tm4) { - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction= - CALLOC(1,sizeof(AntennaInfoDedicated__codebookSubsetRestriction_PR)); - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->present = - AntennaInfoDedicated__codebookSubsetRestriction_PR_n2TxAntenna_tm4; - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm4.buf= MALLOC(1); - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm4.buf[0] = 0xfc; - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm4.size=1; - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm4.bits_unused=2; - - } - else if (rrc_inst->configuration.ue_TransmissionMode[0]==AntennaInfoDedicated__transmissionMode_tm5) { - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction= - CALLOC(1,sizeof(AntennaInfoDedicated__codebookSubsetRestriction_PR)); - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->present = - AntennaInfoDedicated__codebookSubsetRestriction_PR_n2TxAntenna_tm5; - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm5.buf= MALLOC(1); - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm5.buf[0] = 0xf0; - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm5.size=1; - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm5.bits_unused=4; - } - else if (rrc_inst->configuration.ue_TransmissionMode[0]==AntennaInfoDedicated__transmissionMode_tm6) { - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction= - CALLOC(1,sizeof(AntennaInfoDedicated__codebookSubsetRestriction_PR)); - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->present = - AntennaInfoDedicated__codebookSubsetRestriction_PR_n2TxAntenna_tm6; - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm6.buf= MALLOC(1); - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm6.buf[0] = 0xf0; - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm6.size=1; - (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm6.bits_unused=4; - } - } - else { - LOG_E(RRC,"antenna_info not present in physical_config_dedicated. Not reconfiguring!\n"); - } - if ((*physicalConfigDedicated)->cqi_ReportConfig) { - if ((rrc_inst->configuration.ue_TransmissionMode[0]==AntennaInfoDedicated__transmissionMode_tm4) || - (rrc_inst->configuration.ue_TransmissionMode[0]==AntennaInfoDedicated__transmissionMode_tm5) || - (rrc_inst->configuration.ue_TransmissionMode[0]==AntennaInfoDedicated__transmissionMode_tm6)) { - //feedback mode needs to be set as well - //TODO: I think this is taken into account in the PHY automatically based on the transmission mode variable - printf("setting cqi reporting mode to rm31\n"); -#if defined(Rel10) || defined(Rel14) - *((*physicalConfigDedicated)->cqi_ReportConfig->cqi_ReportModeAperiodic)=CQI_ReportModeAperiodic_rm31; -#else - *((*physicalConfigDedicated)->cqi_ReportConfig->cqi_ReportModeAperiodic)=CQI_ReportConfig__cqi_ReportModeAperiodic_rm31; // HLC CQI, no PMI -#endif - } - } - else { - LOG_E(RRC,"cqi_ReportConfig not present in physical_config_dedicated. Not reconfiguring!\n"); - } - } - else { - LOG_E(RRC,"physical_config_dedicated not present in RRCConnectionReconfiguration. Not reconfiguring!\n"); - } - - // Measurement ID list - MeasId_list = CALLOC(1, sizeof(*MeasId_list)); - memset((void *)MeasId_list, 0, sizeof(*MeasId_list)); - - MeasId0 = CALLOC(1, sizeof(*MeasId0)); - MeasId0->measId = 1; - MeasId0->measObjectId = 1; - MeasId0->reportConfigId = 1; - ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId0); - - /* - * Add one EUTRA Measurement Object - */ - - MeasObj_list = CALLOC(1, sizeof(*MeasObj_list)); - memset((void *)MeasObj_list, 0, sizeof(*MeasObj_list)); - - // Configure MeasObject - - MeasObj = CALLOC(1, sizeof(*MeasObj)); - memset((void *)MeasObj, 0, sizeof(*MeasObj)); - - MeasObj->measObjectId = 1; - MeasObj->measObject.present = MeasObjectToAddMod__measObject_PR_measObjectEUTRA; - MeasObj->measObject.choice.measObjectEUTRA.carrierFreq = 3350; //band 7, 2.68GHz - //MeasObj->measObject.choice.measObjectEUTRA.carrierFreq = 36090; //band 33, 1.909GHz - MeasObj->measObject.choice.measObjectEUTRA.allowedMeasBandwidth = AllowedMeasBandwidth_mbw25; - MeasObj->measObject.choice.measObjectEUTRA.presenceAntennaPort1 = 1; - MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.buf = CALLOC(1, sizeof(uint8_t)); - MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.buf[0] = 0; - MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.size = 1; - MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.bits_unused = 6; - MeasObj->measObject.choice.measObjectEUTRA.offsetFreq = NULL; // Default is 15 or 0dB - - MeasObj->measObject.choice.measObjectEUTRA.cellsToAddModList = - (CellsToAddModList_t *) CALLOC(1, sizeof(*CellsToAddModList)); - - CellsToAddModList = MeasObj->measObject.choice.measObjectEUTRA.cellsToAddModList; - - // Add adjacent cell lists (6 per eNB) - for (i = 0; i < 6; i++) { - CellToAdd = (CellsToAddMod_t *) CALLOC(1, sizeof(*CellToAdd)); - CellToAdd->cellIndex = i + 1; - CellToAdd->physCellId = get_adjacent_cell_id(ctxt_pP->module_id, i); - CellToAdd->cellIndividualOffset = Q_OffsetRange_dB0; - - ASN_SEQUENCE_ADD(&CellsToAddModList->list, CellToAdd); - } - - ASN_SEQUENCE_ADD(&MeasObj_list->list, MeasObj); - // rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.measConfig->measObjectToAddModList = MeasObj_list; - - // Report Configurations for periodical, A1-A5 events - - /* RRC Strategy Measurement */ - - - if (strcmp("one_shot", trig_param->trigger_policy) == 0){ - - trig_param->report_interval = 0; - trig_param->report_amount = 0; - - } - - else if (strcmp("event_driven", trig_param->trigger_policy) == 0){ - - trig_param->report_interval = 6; - trig_param->report_amount = 2; - - } - - else if (strcmp("periodical", trig_param->trigger_policy) == 0){ - - trig_param->report_interval = 1; - trig_param->report_amount = 7; - - } - - else { - - LOG_E(FLEXRAN_AGENT, "There is something wrong on RRC agent!"); - } - - - - ReportConfig_list = CALLOC(1, sizeof(*ReportConfig_list)); - - ReportConfig_per = CALLOC(1, sizeof(*ReportConfig_per)); - - // Periodical Measurement Report - - ReportConfig_per->reportConfigId = 1; - ReportConfig_per->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.triggerType.present = - ReportConfigEUTRA__triggerType_PR_periodical; - - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.triggerType.choice.periodical.purpose = - ReportConfigEUTRA__triggerType__periodical__purpose_reportStrongestCells; - - // ReportConfig_per->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.timeToTrigger = TimeToTrigger_ms40; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.reportInterval = trig_param->report_interval ;//ReportInterval_ms2048; // RRC counter frame- ms1024 is 1ms - - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.reportAmount = trig_param->report_amount; //ReportConfigEUTRA__reportAmount_r2; // put r1 to see once, r2 for 2 times and ... - - - ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_per); - - - - quantityConfig = CALLOC(1, sizeof(*quantityConfig)); - memset((void *)quantityConfig, 0, sizeof(*quantityConfig)); - quantityConfig->quantityConfigEUTRA = CALLOC(1, sizeof(struct QuantityConfigEUTRA)); - memset((void *)quantityConfig->quantityConfigEUTRA, 0, sizeof(*quantityConfig->quantityConfigEUTRA)); - quantityConfig->quantityConfigCDMA2000 = NULL; - quantityConfig->quantityConfigGERAN = NULL; - quantityConfig->quantityConfigUTRA = NULL; - quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP = - CALLOC(1, sizeof(*(quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP))); - quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ = - CALLOC(1, sizeof(*(quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ))); - *quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP = FilterCoefficient_fc4; - *quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ = FilterCoefficient_fc4; - - -#if defined(ENABLE_ITTI) - /* Initialize NAS list */ - dedicatedInfoNASList = CALLOC(1, sizeof(struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList)); - - /* Add all NAS PDUs to the list */ - for (i = 0; i < ue_context_pP->ue_context.nb_of_e_rabs; i++) { - if (ue_context_pP->ue_context.e_rab[i].param.nas_pdu.buffer != NULL) { - dedicatedInfoNas = CALLOC(1, sizeof(DedicatedInfoNAS_t)); - memset(dedicatedInfoNas, 0, sizeof(OCTET_STRING_t)); - OCTET_STRING_fromBuf(dedicatedInfoNas, - (char*)ue_context_pP->ue_context.e_rab[i].param.nas_pdu.buffer, - ue_context_pP->ue_context.e_rab[i].param.nas_pdu.length); - ASN_SEQUENCE_ADD(&dedicatedInfoNASList->list, dedicatedInfoNas); - } - - /* TODO parameters yet to process ... */ - // { - // ue_context_pP->ue_context.e_rab[i].param.qos; - // ue_context_pP->ue_context.e_rab[i].param.sgw_addr; - // ue_context_pP->ue_context.e_rab[i].param.gtp_teid; - // } - - /* TODO should test if e RAB are Ok before! */ - ue_context_pP->ue_context.e_rab[i].status = E_RAB_STATUS_DONE; - LOG_D(RRC, "setting the status for the default DRB (index %d) to (%d,%s)\n", - i, ue_context_pP->ue_context.e_rab[i].status, "E_RAB_STATUS_DONE"); - } - - /* If list is empty free the list and reset the address */ - if (dedicatedInfoNASList->list.count == 0) { - free(dedicatedInfoNASList); - dedicatedInfoNASList = NULL; - } - -#endif - - memset(buffer, 0, RRC_BUF_SIZE); - - size = do_RRCConnectionReconfiguration(ctxt_pP, - buffer, - xid, //Transaction_id, - (SRB_ToAddModList_t*)NULL, // SRB_configList - (DRB_ToAddModList_t*)NULL, - (DRB_ToReleaseList_t*)NULL, // DRB2_list, - (struct SPS_Config*)NULL, // *sps_Config, - (struct PhysicalConfigDedicated*)*physicalConfigDedicated, -// #ifdef EXMIMO_IOT -// NULL, NULL, NULL,NULL, -// #else - (MeasObjectToAddModList_t*)MeasObj_list, - (ReportConfigToAddModList_t*)ReportConfig_list, - (QuantityConfig_t*)quantityConfig, - (MeasIdToAddModList_t*)MeasId_list, -// #endif - (MAC_MainConfig_t*)mac_MainConfig, - (MeasGapConfig_t*)NULL, - (MobilityControlInfo_t*)NULL, - (struct MeasConfig__speedStatePars*)Sparams, - (RSRP_Range_t*)rsrp, - (C_RNTI_t*)cba_RNTI, - (struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList*)dedicatedInfoNASList -#if defined(Rel10) || defined(Rel14) - , (SCellToAddMod_r10_t*)NULL -#endif - ); - -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC Connection Reconfiguration\n"); - for (i = 0; i < size; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)buffer)[i]); - } - LOG_F(RRC,"\n"); - //////////////////////////////////////// -#endif - -#if defined(ENABLE_ITTI) - - /* Free all NAS PDUs */ - for (i = 0; i < ue_context_pP->ue_context.nb_of_e_rabs; i++) { - if (ue_context_pP->ue_context.e_rab[i].param.nas_pdu.buffer != NULL) { - /* Free the NAS PDU buffer and invalidate it */ - free(ue_context_pP->ue_context.e_rab[i].param.nas_pdu.buffer); - ue_context_pP->ue_context.e_rab[i].param.nas_pdu.buffer = NULL; - } - } - -#endif - - LOG_I(RRC, - "[eNB %d] Frame %d, Logical Channel DL-DCCH, Generate RRCConnectionReconfiguration (bytes %d, UE id %x)\n", - ctxt_pP->module_id, ctxt_pP->frame, size, ue_context_pP->ue_context.rnti); - - LOG_D(RRC, - "[FRAME %05d][RRC_eNB][MOD %u][][--- PDCP_DATA_REQ/%d Bytes (rrcConnectionReconfiguration to UE %x MUI %d) --->][PDCP][MOD %u][RB %u]\n", - ctxt_pP->frame, ctxt_pP->module_id, size, ue_context_pP->ue_context.rnti, rrc_eNB_mui, ctxt_pP->module_id, DCCH); - - MSC_LOG_TX_MESSAGE( - MSC_RRC_ENB, - MSC_RRC_UE, - buffer, - size, - MSC_AS_TIME_FMT" rrcConnectionReconfiguration UE %x MUI %d size %u", - MSC_AS_TIME_ARGS(ctxt_pP), - ue_context_pP->ue_context.rnti, - rrc_eNB_mui, - size); - - rrc_data_req( - ctxt_pP, - DCCH, - rrc_eNB_mui++, - SDU_CONFIRM_NO, - size, - buffer, - PDCP_TRANSMISSION_MODE_CONTROL); -} - - -//----------------------------------------------------------------------------- -int -rrc_eNB_generate_RRCConnectionReconfiguration_SCell( - const protocol_ctxt_t* const ctxt_pP, - rrc_eNB_ue_context_t* const ue_context_pP, - uint32_t dl_CarrierFreq_r10 -) -//----------------------------------------------------------------------------- -{ - - uint8_t size; - uint8_t buffer[100]; - -#if defined(Rel10) || defined(Rel14) - uint8_t sCellIndexToAdd = 0; //one SCell so far - - // uint8_t sCellIndexToAdd; - // sCellIndexToAdd = rrc_find_free_SCell_index(enb_mod_idP, ue_mod_idP, 1); - // if (RC.rrc[enb_mod_idP]->sCell_config[ue_mod_idP][sCellIndexToAdd] ) { - if (ue_context_pP->ue_context.sCell_config != NULL) { - ue_context_pP->ue_context.sCell_config[sCellIndexToAdd].cellIdentification_r10->dl_CarrierFreq_r10 = dl_CarrierFreq_r10; - } else { - LOG_E(RRC,"Scell not configured!\n"); - return(-1); - } - -#endif - size = do_RRCConnectionReconfiguration(ctxt_pP, - buffer, - rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id),//Transaction_id, - (SRB_ToAddModList_t*)NULL, - (DRB_ToAddModList_t*)NULL, - (DRB_ToReleaseList_t*)NULL, - (struct SPS_Config*)NULL, - (struct PhysicalConfigDedicated*)NULL, - (MeasObjectToAddModList_t*)NULL, - (ReportConfigToAddModList_t*)NULL, - (QuantityConfig_t*)NULL, - (MeasIdToAddModList_t*)NULL, - (MAC_MainConfig_t*)NULL, - (MeasGapConfig_t*)NULL, - (MobilityControlInfo_t*)NULL, - (struct MeasConfig__speedStatePars*)NULL, - (RSRP_Range_t*)NULL, - (C_RNTI_t*)NULL, - (struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList*)NULL - -#if defined(Rel10) || defined(Rel14) - , ue_context_pP->ue_context.sCell_config -#endif - ); - LOG_I(RRC,"[eNB %d] Frame %d, Logical Channel DL-DCCH, Generate RRCConnectionReconfiguration (bytes %d, UE id %x)\n", - ctxt_pP->module_id,ctxt_pP->frame, size, ue_context_pP->ue_context.rnti); - - MSC_LOG_TX_MESSAGE( - MSC_RRC_ENB, - MSC_RRC_UE, - buffer, - size, - MSC_AS_TIME_FMT" rrcConnectionReconfiguration UE %x MUI %d size %u", - MSC_AS_TIME_ARGS(ctxt_pP), - ue_context_pP->ue_context.rnti, - rrc_eNB_mui, - size); - - rrc_data_req( - ctxt_pP, - DCCH, - rrc_eNB_mui++, - SDU_CONFIRM_NO, - size, - buffer, - PDCP_TRANSMISSION_MODE_CONTROL); - return(0); -} - - -//----------------------------------------------------------------------------- -void -rrc_eNB_process_MeasurementReport( - const protocol_ctxt_t* const ctxt_pP, - rrc_eNB_ue_context_t* ue_context_pP, - const MeasResults_t* const measResults2 -) -//----------------------------------------------------------------------------- -{ - int i=0; - int neighboring_cells=-1; - - T(T_ENB_RRC_MEASUREMENT_REPORT, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); - - if (measResults2 == NULL ) - return; - - if (measResults2->measId > 0 ){ - if (ue_context_pP->ue_context.measResults == NULL) { - ue_context_pP->ue_context.measResults = CALLOC(1, sizeof(MeasResults_t)); - } - ue_context_pP->ue_context.measResults->measId=measResults2->measId; - ue_context_pP->ue_context.measResults->measResultPCell.rsrpResult=measResults2->measResultPCell.rsrpResult; - ue_context_pP->ue_context.measResults->measResultPCell.rsrqResult=measResults2->measResultPCell.rsrqResult; - LOG_D(RRC, "[eNB %d]Frame %d: UE %x (Measurement Id %d): RSRP of Source %ld\n", ctxt_pP->module_id, ctxt_pP->frame, ctxt_pP->rnti, (int)measResults2->measId, ue_context_pP->ue_context.measResults->measResultPCell.rsrpResult-140); - LOG_D(RRC, "[eNB %d]Frame %d: UE %x (Measurement Id %d): RSRQ of Source %ld\n", ctxt_pP->module_id, ctxt_pP->frame, ctxt_pP->rnti, (int)measResults2->measId, ue_context_pP->ue_context.measResults->measResultPCell.rsrqResult/2 - 20); - } - if (measResults2->measResultNeighCells == NULL) - return; - - if (measResults2->measResultNeighCells->choice.measResultListEUTRA.list.count > 0) { - neighboring_cells = measResults2->measResultNeighCells->choice.measResultListEUTRA.list.count; - - if (ue_context_pP->ue_context.measResults->measResultNeighCells == NULL) { - - ue_context_pP->ue_context.measResults->measResultNeighCells = CALLOC(1, sizeof(*measResults2->measResultNeighCells)*neighboring_cells); - } - ue_context_pP->ue_context.measResults->measResultNeighCells->choice.measResultListEUTRA.list.count = neighboring_cells; - for (i=0; i < neighboring_cells; i++){ - memcpy (ue_context_pP->ue_context.measResults->measResultNeighCells->choice.measResultListEUTRA.list.array[i], - measResults2->measResultNeighCells->choice.measResultListEUTRA.list.array[i], - sizeof(MeasResultListEUTRA_t)); - - LOG_D(RRC, "Physical Cell Id %d\n", - (int)ue_context_pP->ue_context.measResults->measResultNeighCells->choice.measResultListEUTRA.list.array[i]->physCellId); - LOG_D(RRC, "RSRP of Target %d\n", - (int)*(ue_context_pP->ue_context.measResults->measResultNeighCells->choice.measResultListEUTRA.list.array[i]->measResult.rsrpResult)); - LOG_D(RRC, "RSRQ of Target %d\n", - (int)*(ue_context_pP->ue_context.measResults->measResultNeighCells->choice.measResultListEUTRA.list.array[i]->measResult.rsrqResult)); - } - } - -// #if defined(Rel10) || defined(Rel14) - - -// #else - // LOG_I(RRC, "RSRP of Source %d\n", measResults2->measResultServCell.rsrpResult); - // LOG_I(RRC, "RSRQ of Source %d\n", measResults2->measResultServCell.rsrqResult); -// #endif - - // if (ue_context_pP->ue_context.handover_info->ho_prepare != 0xF0) { - // rrc_eNB_generate_HandoverPreparationInformation(ctxt_pP, - // ue_context_pP, - // measResults2->measResultNeighCells->choice. - // measResultListEUTRA.list.array[0]->physCellId); - // } else { - // LOG_D(RRC, "[eNB %d] Frame %d: Ignoring MeasReport from UE %x as Handover is in progress... \n", ctxt_pP->module_id, ctxt_pP->frame, - // ctxt_pP->rnti); - // } - - //Look for IP address of the target eNB - //Send Handover Request -> target eNB - //Wait for Handover Acknowledgement <- target eNB - //Send Handover Command - - //x2delay(); - // handover_request_x2(ue_mod_idP,enb_mod_idP,measResults2->measResultNeighCells->choice.measResultListEUTRA.list.array[0]->physCellId); - - // uint8_t buffer[100]; - // int size=rrc_eNB_generate_Handover_Command_TeNB(0,0,buffer); - // - // send_check_message((char*)buffer,size); - //send_handover_command(); - -} - -//----------------------------------------------------------------------------- -void -rrc_eNB_generate_HandoverPreparationInformation( - const protocol_ctxt_t* const ctxt_pP, - rrc_eNB_ue_context_t* const ue_context_pP, - PhysCellId_t targetPhyId -) -//----------------------------------------------------------------------------- -{ - struct rrc_eNB_ue_context_s* ue_context_target_p = NULL; - //uint8_t UE_id_target = -1; - uint8_t mod_id_target = get_adjacent_cell_mod_id(targetPhyId); - HANDOVER_INFO *handoverInfo = CALLOC(1, sizeof(*handoverInfo)); - /* - uint8_t buffer[100]; - uint8_t size; - struct PhysicalConfigDedicated **physicalConfigDedicated = &RC.rrc[enb_mod_idP]->physicalConfigDedicated[ue_mod_idP]; - RadioResourceConfigDedicated_t *radioResourceConfigDedicated = CALLOC(1,sizeof(RadioResourceConfigDedicated_t)); - */ - - T(T_ENB_RRC_HANDOVER_PREPARATION_INFORMATION, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); - - handoverInfo->as_config.antennaInfoCommon.antennaPortsCount = 0; //Not used 0- but check value - handoverInfo->as_config.sourceDl_CarrierFreq = 36090; //Verify! - - memcpy((void *)&handoverInfo->as_config.sourceMasterInformationBlock, - (void*)&RC.rrc[ctxt_pP->module_id]->carrier[0] /* CROUX TBC */.mib, sizeof(MasterInformationBlock_t)); - memcpy((void *)&handoverInfo->as_config.sourceMeasConfig, - (void*)ue_context_pP->ue_context.measConfig, sizeof(MeasConfig_t)); - - // FIXME handoverInfo not used... - free( handoverInfo ); - handoverInfo = 0; - - //to be configured - memset((void*)&ue_context_pP->ue_context.handover_info->as_config.sourceSecurityAlgorithmConfig, - 0, sizeof(SecurityAlgorithmConfig_t)); - - memcpy((void*)&ue_context_pP->ue_context.handover_info->as_config.sourceSystemInformationBlockType1, - (void*)&RC.rrc[ctxt_pP->module_id]->carrier[0] /* CROUX TBC */.SIB1, sizeof(SystemInformationBlockType1_t)); - memcpy((void*)&ue_context_pP->ue_context.handover_info->as_config.sourceSystemInformationBlockType2, - (void*)&RC.rrc[ctxt_pP->module_id]->carrier[0] /* CROUX TBC */.SIB23, sizeof(SystemInformationBlockType2_t)); - ue_context_pP->ue_context.handover_info->as_context.reestablishmentInfo = - CALLOC(1, sizeof(ReestablishmentInfo_t)); - ue_context_pP->ue_context.handover_info->as_context.reestablishmentInfo->sourcePhysCellId = - RC.rrc[ctxt_pP->module_id]->carrier[0] /* CROUX TBC */.physCellId; - ue_context_pP->ue_context.handover_info->as_context.reestablishmentInfo->targetCellShortMAC_I.buf = NULL; // Check values later - ue_context_pP->ue_context.handover_info->as_context.reestablishmentInfo->targetCellShortMAC_I.size = 0; - ue_context_pP->ue_context.handover_info->as_context.reestablishmentInfo->targetCellShortMAC_I.bits_unused = 0; - ue_context_pP->ue_context.handover_info->as_context.reestablishmentInfo->additionalReestabInfoList = NULL; - ue_context_pP->ue_context.handover_info->ho_prepare = 0xFF; //0xF0; - ue_context_pP->ue_context.handover_info->ho_complete = 0; - - if (mod_id_target != 0xFF) { - //UE_id_target = rrc_find_free_ue_index(modid_target); - ue_context_target_p = - rrc_eNB_get_ue_context( - RC.rrc[mod_id_target], - ue_context_pP->ue_context.rnti); - - /*UE_id_target = rrc_eNB_get_next_free_UE_index( - mod_id_target, - RC.rrc[ctxt_pP->module_id]->Info.UE_list[ue_mod_idP]); //this should return a new index*/ - - if (ue_context_target_p == NULL) { // if not already in target cell - ue_context_target_p = rrc_eNB_allocate_new_UE_context(RC.rrc[ctxt_pP->module_id]); - ue_context_target_p->ue_id_rnti = ue_context_pP->ue_context.rnti; // LG: should not be the same - ue_context_target_p->ue_context.rnti = ue_context_target_p->ue_id_rnti; // idem - LOG_N(RRC, - "[eNB %d] Frame %d : Emulate sending HandoverPreparationInformation msg from eNB source %d to eNB target %ld: source UE_id %x target UE_id %x source_modId: %d target_modId: %d\n", - ctxt_pP->module_id, - ctxt_pP->frame, - RC.rrc[ctxt_pP->module_id]->carrier[0] /* CROUX TBC */.physCellId, - targetPhyId, - ue_context_pP->ue_context.rnti, - ue_context_target_p->ue_id_rnti, - ctxt_pP->module_id, - mod_id_target); - ue_context_target_p->ue_context.handover_info = - CALLOC(1, sizeof(*(ue_context_target_p->ue_context.handover_info))); - memcpy((void*)&ue_context_target_p->ue_context.handover_info->as_context, - (void*)&ue_context_pP->ue_context.handover_info->as_context, - sizeof(AS_Context_t)); - memcpy((void*)&ue_context_target_p->ue_context.handover_info->as_config, - (void*)&ue_context_pP->ue_context.handover_info->as_config, - sizeof(AS_Config_t)); - ue_context_target_p->ue_context.handover_info->ho_prepare = 0x00;// 0xFF; - ue_context_target_p->ue_context.handover_info->ho_complete = 0; - ue_context_pP->ue_context.handover_info->modid_t = mod_id_target; - ue_context_pP->ue_context.handover_info->ueid_s = ue_context_pP->ue_context.rnti; - ue_context_pP->ue_context.handover_info->modid_s = ctxt_pP->module_id; - ue_context_target_p->ue_context.handover_info->modid_t = mod_id_target; - ue_context_target_p->ue_context.handover_info->modid_s = ctxt_pP->module_id; - ue_context_target_p->ue_context.handover_info->ueid_t = ue_context_target_p->ue_context.rnti; - - } else { - LOG_E(RRC, "\nError in obtaining free UE id in target eNB %ld for handover \n", targetPhyId); - } - - } else { - LOG_E(RRC, "\nError in obtaining Module ID of target eNB for handover \n"); - } -} - -//----------------------------------------------------------------------------- -void -rrc_eNB_process_handoverPreparationInformation( - const protocol_ctxt_t* const ctxt_pP, - rrc_eNB_ue_context_t* const ue_context_pP -) -//----------------------------------------------------------------------------- -{ - T(T_ENB_RRC_HANDOVER_PREPARATION_INFORMATION, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); - - - LOG_I(RRC, - "[eNB %d] Frame %d : Logical Channel UL-DCCH, processing RRCHandoverPreparationInformation, sending RRCConnectionReconfiguration to UE %d \n", - ctxt_pP->module_id, ctxt_pP->frame, ue_context_pP->ue_context.rnti); - rrc_eNB_generate_RRCConnectionReconfiguration_handover( - ctxt_pP, - ue_context_pP, - NULL, - 0); -} - - -//----------------------------------------------------------------------------- -void -check_handovers( - protocol_ctxt_t* const ctxt_pP -) -//----------------------------------------------------------------------------- -{ - int result; - struct rrc_eNB_ue_context_s* ue_context_p; - RB_FOREACH(ue_context_p, rrc_ue_tree_s, &RC.rrc[ctxt_pP->module_id]->rrc_ue_head) { - ctxt_pP->rnti = ue_context_p->ue_id_rnti; - - if (ue_context_p->ue_context.handover_info != NULL) { - if (ue_context_p->ue_context.handover_info->ho_prepare == 0xFF) { - LOG_D(RRC, - "[eNB %d] Frame %d: Incoming handover detected for new UE_idx %d (source eNB %d->target eNB %d) \n", - ctxt_pP->module_id, - ctxt_pP->frame, - ctxt_pP->rnti, - ctxt_pP->module_id, - ue_context_p->ue_context.handover_info->modid_t); - // source eNB generates rrcconnectionreconfiguration to prepare the HO - rrc_eNB_process_handoverPreparationInformation( - ctxt_pP, - ue_context_p); - ue_context_p->ue_context.handover_info->ho_prepare = 0xF1; - } - - if (ue_context_p->ue_context.handover_info->ho_complete == 0xF1) { - LOG_D(RRC, - "[eNB %d] Frame %d: handover Command received for new UE_id %x current eNB %d target eNB: %d \n", - ctxt_pP->module_id, - ctxt_pP->frame, - ctxt_pP->rnti, - ctxt_pP->module_id, - ue_context_p->ue_context.handover_info->modid_t); - //rrc_eNB_process_handoverPreparationInformation(enb_mod_idP,frameP,i); - result = pdcp_data_req(ctxt_pP, - SRB_FLAG_YES, - DCCH, - rrc_eNB_mui++, - SDU_CONFIRM_NO, - ue_context_p->ue_context.handover_info->size, - ue_context_p->ue_context.handover_info->buf, - PDCP_TRANSMISSION_MODE_CONTROL); - AssertFatal(result == TRUE, "PDCP data request failed!\n"); - ue_context_p->ue_context.handover_info->ho_complete = 0xF2; - } - } - } -} - -// 5.3.5.4 RRCConnectionReconfiguration including the mobilityControlInfo to prepare the UE handover -//----------------------------------------------------------------------------- -void -rrc_eNB_generate_RRCConnectionReconfiguration_handover( - const protocol_ctxt_t* const ctxt_pP, - rrc_eNB_ue_context_t* const ue_context_pP, - uint8_t* const nas_pdu, - const uint32_t nas_length -) -//----------------------------------------------------------------------------- -{ - T(T_ENB_RRC_CONNECTION_RECONFIGURATION, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); - - - uint8_t buffer[RRC_BUF_SIZE]; - uint16_t size; - int i; - uint8_t rv[2]; - uint16_t Idx; - // configure SRB1/SRB2, PhysicalConfigDedicated, MAC_MainConfig for UE - eNB_RRC_INST* rrc_inst = RC.rrc[ctxt_pP->module_id]; - struct PhysicalConfigDedicated** physicalConfigDedicated = &ue_context_pP->ue_context.physicalConfigDedicated; - - struct SRB_ToAddMod *SRB2_config; - struct SRB_ToAddMod__rlc_Config *SRB2_rlc_config; - struct SRB_ToAddMod__logicalChannelConfig *SRB2_lchan_config; - struct LogicalChannelConfig__ul_SpecificParameters *SRB2_ul_SpecificParameters; - LogicalChannelConfig_t *SRB1_logicalChannelConfig = NULL; - SRB_ToAddModList_t* SRB_configList = ue_context_pP->ue_context.SRB_configList; // not used in this context: may be removed - SRB_ToAddModList_t *SRB_configList2; - - struct DRB_ToAddMod *DRB_config; - struct RLC_Config *DRB_rlc_config; - struct PDCP_Config *DRB_pdcp_config; - struct PDCP_Config__rlc_UM *PDCP_rlc_UM; - struct LogicalChannelConfig *DRB_lchan_config; - struct LogicalChannelConfig__ul_SpecificParameters *DRB_ul_SpecificParameters; - DRB_ToAddModList_t *DRB_configList2; - - MAC_MainConfig_t *mac_MainConfig; - MeasObjectToAddModList_t *MeasObj_list; - MeasObjectToAddMod_t *MeasObj; - ReportConfigToAddModList_t *ReportConfig_list; - ReportConfigToAddMod_t *ReportConfig_per, *ReportConfig_A1, - *ReportConfig_A2, *ReportConfig_A3, *ReportConfig_A4, *ReportConfig_A5; - MeasIdToAddModList_t *MeasId_list; - MeasIdToAddMod_t *MeasId0, *MeasId1, *MeasId2, *MeasId3, *MeasId4, *MeasId5; - QuantityConfig_t *quantityConfig; - MobilityControlInfo_t *mobilityInfo; - // HandoverCommand_t handoverCommand; - //uint8_t sourceModId = - // get_adjacent_cell_mod_id(ue_context_pP->ue_context.handover_info->as_context.reestablishmentInfo->sourcePhysCellId); -#if defined(Rel10) || defined(Rel14) - long *sr_ProhibitTimer_r9; -#endif - - long *logicalchannelgroup, *logicalchannelgroup_drb; - long *maxHARQ_Tx, *periodicBSR_Timer; - - // RSRP_Range_t *rsrp; - struct MeasConfig__speedStatePars *Sparams; - CellsToAddMod_t *CellToAdd; - CellsToAddModList_t *CellsToAddModList; - // srb 1: for HO - struct SRB_ToAddMod *SRB1_config; - struct SRB_ToAddMod__rlc_Config *SRB1_rlc_config; - struct SRB_ToAddMod__logicalChannelConfig *SRB1_lchan_config; - struct LogicalChannelConfig__ul_SpecificParameters *SRB1_ul_SpecificParameters; - // phy config dedicated - PhysicalConfigDedicated_t *physicalConfigDedicated2; - struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList *dedicatedInfoNASList; - protocol_ctxt_t ctxt; - - LOG_D(RRC, "[eNB %d] Frame %d: handover preparation: get the newSourceUEIdentity (C-RNTI): ", - ctxt_pP->module_id, ctxt_pP->frame); - - for (i = 0; i < 2; i++) { - rv[i] = taus() & 0xff; - LOG_D(RRC, " %x.", rv[i]); - } - - LOG_D(RRC, "[eNB %d] Frame %d : handover reparation: add target eNB SRB1 and PHYConfigDedicated reconfiguration\n", - ctxt_pP->module_id, ctxt_pP->frame); - // 1st: reconfigure SRB - SRB_configList2 = CALLOC(1, sizeof(*SRB_configList)); - SRB1_config = CALLOC(1, sizeof(*SRB1_config)); - SRB1_config->srb_Identity = 1; - SRB1_rlc_config = CALLOC(1, sizeof(*SRB1_rlc_config)); - SRB1_config->rlc_Config = SRB1_rlc_config; - - SRB1_rlc_config->present = SRB_ToAddMod__rlc_Config_PR_explicitValue; - SRB1_rlc_config->choice.explicitValue.present = RLC_Config_PR_am; - SRB1_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.t_PollRetransmit = T_PollRetransmit_ms15; - SRB1_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.pollPDU = PollPDU_p8; - SRB1_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.pollByte = PollByte_kB1000; - SRB1_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.maxRetxThreshold = UL_AM_RLC__maxRetxThreshold_t16; - SRB1_rlc_config->choice.explicitValue.choice.am.dl_AM_RLC.t_Reordering = T_Reordering_ms35; - SRB1_rlc_config->choice.explicitValue.choice.am.dl_AM_RLC.t_StatusProhibit = T_StatusProhibit_ms10; - - SRB1_lchan_config = CALLOC(1, sizeof(*SRB1_lchan_config)); - SRB1_config->logicalChannelConfig = SRB1_lchan_config; - - SRB1_lchan_config->present = SRB_ToAddMod__logicalChannelConfig_PR_explicitValue; - SRB1_ul_SpecificParameters = CALLOC(1, sizeof(*SRB1_ul_SpecificParameters)); - - SRB1_lchan_config->choice.explicitValue.ul_SpecificParameters = SRB1_ul_SpecificParameters; - - SRB1_ul_SpecificParameters->priority = 1; - - //assign_enum(&SRB1_ul_SpecificParameters->prioritisedBitRate,LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity); - SRB1_ul_SpecificParameters->prioritisedBitRate = - LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity; - - //assign_enum(&SRB1_ul_SpecificParameters->bucketSizeDuration,LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50); - SRB1_ul_SpecificParameters->bucketSizeDuration = - LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50; - - logicalchannelgroup = CALLOC(1, sizeof(long)); - *logicalchannelgroup = 0; - SRB1_ul_SpecificParameters->logicalChannelGroup = logicalchannelgroup; - - ASN_SEQUENCE_ADD(&SRB_configList2->list, SRB1_config); - - //2nd: now reconfigure phy config dedicated - physicalConfigDedicated2 = CALLOC(1, sizeof(*physicalConfigDedicated2)); - *physicalConfigDedicated = physicalConfigDedicated2; - - physicalConfigDedicated2->pdsch_ConfigDedicated = - CALLOC(1, sizeof(*physicalConfigDedicated2->pdsch_ConfigDedicated)); - physicalConfigDedicated2->pucch_ConfigDedicated = - CALLOC(1, sizeof(*physicalConfigDedicated2->pucch_ConfigDedicated)); - physicalConfigDedicated2->pusch_ConfigDedicated = - CALLOC(1, sizeof(*physicalConfigDedicated2->pusch_ConfigDedicated)); - physicalConfigDedicated2->uplinkPowerControlDedicated = - CALLOC(1, sizeof(*physicalConfigDedicated2->uplinkPowerControlDedicated)); - physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH = - CALLOC(1, sizeof(*physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH)); - physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH = - CALLOC(1, sizeof(*physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH)); - physicalConfigDedicated2->cqi_ReportConfig = NULL; //CALLOC(1,sizeof(*physicalConfigDedicated2->cqi_ReportConfig)); - physicalConfigDedicated2->soundingRS_UL_ConfigDedicated = CALLOC(1,sizeof(*physicalConfigDedicated2->soundingRS_UL_ConfigDedicated)); - physicalConfigDedicated2->antennaInfo = CALLOC(1, sizeof(*physicalConfigDedicated2->antennaInfo)); - physicalConfigDedicated2->schedulingRequestConfig = - CALLOC(1, sizeof(*physicalConfigDedicated2->schedulingRequestConfig)); - // PDSCH - //assign_enum(&physicalConfigDedicated2->pdsch_ConfigDedicated->p_a, - // PDSCH_ConfigDedicated__p_a_dB0); - physicalConfigDedicated2->pdsch_ConfigDedicated->p_a = PDSCH_ConfigDedicated__p_a_dB0; - - // PUCCH - physicalConfigDedicated2->pucch_ConfigDedicated->ackNackRepetition.present = - PUCCH_ConfigDedicated__ackNackRepetition_PR_release; - physicalConfigDedicated2->pucch_ConfigDedicated->ackNackRepetition.choice.release = 0; - physicalConfigDedicated2->pucch_ConfigDedicated->tdd_AckNackFeedbackMode = NULL; //PUCCH_ConfigDedicated__tdd_AckNackFeedbackMode_multiplexing; - - // Pusch_config_dedicated - physicalConfigDedicated2->pusch_ConfigDedicated->betaOffset_ACK_Index = 0; // 2.00 - physicalConfigDedicated2->pusch_ConfigDedicated->betaOffset_RI_Index = 0; // 1.25 - physicalConfigDedicated2->pusch_ConfigDedicated->betaOffset_CQI_Index = 8; // 2.25 - - // UplinkPowerControlDedicated - physicalConfigDedicated2->uplinkPowerControlDedicated->p0_UE_PUSCH = 0; // 0 dB - //assign_enum(&physicalConfigDedicated2->uplinkPowerControlDedicated->deltaMCS_Enabled, - // UplinkPowerControlDedicated__deltaMCS_Enabled_en1); - physicalConfigDedicated2->uplinkPowerControlDedicated->deltaMCS_Enabled = - UplinkPowerControlDedicated__deltaMCS_Enabled_en1; - physicalConfigDedicated2->uplinkPowerControlDedicated->accumulationEnabled = 1; // should be TRUE in order to have 0dB power offset - physicalConfigDedicated2->uplinkPowerControlDedicated->p0_UE_PUCCH = 0; // 0 dB - physicalConfigDedicated2->uplinkPowerControlDedicated->pSRS_Offset = 0; // 0 dB - physicalConfigDedicated2->uplinkPowerControlDedicated->filterCoefficient = - CALLOC(1, sizeof(*physicalConfigDedicated2->uplinkPowerControlDedicated->filterCoefficient)); - // assign_enum(physicalConfigDedicated2->uplinkPowerControlDedicated->filterCoefficient,FilterCoefficient_fc4); // fc4 dB - *physicalConfigDedicated2->uplinkPowerControlDedicated->filterCoefficient = FilterCoefficient_fc4; // fc4 dB - - // TPC-PDCCH-Config - physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH->present = TPC_PDCCH_Config_PR_setup; - physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH->choice.setup.tpc_Index.present = TPC_Index_PR_indexOfFormat3; - physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH->choice.setup.tpc_Index.choice.indexOfFormat3 = 1; - physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH->choice.setup.tpc_RNTI.buf = CALLOC(1, 2); - physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH->choice.setup.tpc_RNTI.size = 2; - physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH->choice.setup.tpc_RNTI.buf[0] = 0x12; - physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH->choice.setup.tpc_RNTI.buf[1] = 0x34 + ue_context_pP->local_uid; - physicalConfigDedicated2->tpc_PDCCH_ConfigPUCCH->choice.setup.tpc_RNTI.bits_unused = 0; - - physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH->present = TPC_PDCCH_Config_PR_setup; - physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH->choice.setup.tpc_Index.present = TPC_Index_PR_indexOfFormat3; - physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH->choice.setup.tpc_Index.choice.indexOfFormat3 = 1; - physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH->choice.setup.tpc_RNTI.buf = CALLOC(1, 2); - physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH->choice.setup.tpc_RNTI.size = 2; - physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH->choice.setup.tpc_RNTI.buf[0] = 0x22; - physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH->choice.setup.tpc_RNTI.buf[1] = 0x34 + ue_context_pP->local_uid; - physicalConfigDedicated2->tpc_PDCCH_ConfigPUSCH->choice.setup.tpc_RNTI.bits_unused = 0; - - // CQI ReportConfig - /* - physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportModeAperiodic=CALLOC(1,sizeof(*physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportModeAperiodic)); - assign_enum(physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportModeAperiodic, - CQI_ReportConfig__cqi_ReportModeAperiodic_rm30); // HLC CQI, no PMI - physicalConfigDedicated2->cqi_ReportConfig->nomPDSCH_RS_EPRE_Offset = 0; // 0 dB - physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic=CALLOC(1,sizeof(*physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic)); - physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic->present = CQI_ReportPeriodic_PR_setup; - physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic->choice.setup.cqi_PUCCH_ResourceIndex = 0; // n2_pucch - physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic->choice.setup.cqi_pmi_ConfigIndex = 0; // Icqi/pmi - physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic->choice.setup.cqi_FormatIndicatorPeriodic.present = CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR_subbandCQI; // subband CQI - physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic->choice.setup.cqi_FormatIndicatorPeriodic.choice.subbandCQI.k=4; - - physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic->choice.setup.ri_ConfigIndex=NULL; - physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic->choice.setup.simultaneousAckNackAndCQI=0; - */ - - //soundingRS-UL-ConfigDedicated - /* - physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->present = SoundingRS_UL_ConfigDedicated_PR_setup; - assign_enum(&physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.srs_Bandwidth, - SoundingRS_UL_ConfigDedicated__setup__srs_Bandwidth_bw0); - assign_enum(&physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.srs_HoppingBandwidth, - SoundingRS_UL_ConfigDedicated__setup__srs_HoppingBandwidth_hbw0); - physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.freqDomainPosition=0; - physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.duration=1; - physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.srs_ConfigIndex=1; - physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.transmissionComb=0; - assign_enum(&physicalConfigDedicated2->soundingRS_UL_ConfigDedicated->choice.setup.cyclicShift, - SoundingRS_UL_ConfigDedicated__setup__cyclicShift_cs0); - */ - - //AntennaInfoDedicated - physicalConfigDedicated2->antennaInfo = CALLOC(1, sizeof(*physicalConfigDedicated2->antennaInfo)); - physicalConfigDedicated2->antennaInfo->present = PhysicalConfigDedicated__antennaInfo_PR_explicitValue; - //assign_enum(&physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode, - // AntennaInfoDedicated__transmissionMode_tm2); - /* - switch (transmission_mode){ - case 1: - physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode= AntennaInfoDedicated__transmissionMode_tm1; - break; - case 2: - physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode= AntennaInfoDedicated__transmissionMode_tm2; - break; - case 4: - physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode= AntennaInfoDedicated__transmissionMode_tm4; - break; - case 5: - physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode= AntennaInfoDedicated__transmissionMode_tm5; - break; - case 6: - physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode= AntennaInfoDedicated__transmissionMode_tm6; - break; - } - */ - physicalConfigDedicated2->antennaInfo->choice.explicitValue.ue_TransmitAntennaSelection.present = - AntennaInfoDedicated__ue_TransmitAntennaSelection_PR_release; - physicalConfigDedicated2->antennaInfo->choice.explicitValue.ue_TransmitAntennaSelection.choice.release = 0; - - // SchedulingRequestConfig - physicalConfigDedicated2->schedulingRequestConfig->present = SchedulingRequestConfig_PR_setup; - physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_PUCCH_ResourceIndex = ue_context_pP->local_uid; - - if (rrc_inst->carrier[0].sib1->tdd_Config==NULL) { // FD - physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_ConfigIndex = 5 + (ue_context_pP->local_uid % - 10); // Isr = 5 (every 10 subframes, offset=2+UE_id mod3) - } else { - switch (rrc_inst->carrier[0].sib1->tdd_Config->subframeAssignment) { - case 1: - physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_ConfigIndex = 7 + (ue_context_pP->local_uid & 1) + (( - ue_context_pP->local_uid & 3) >> 1) * 5; // Isr = 5 (every 10 subframes, offset=2 for UE0, 3 for UE1, 7 for UE2, 8 for UE3 , 2 for UE4 etc..) - break; - - case 3: - physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_ConfigIndex = 7 + (ue_context_pP->local_uid % - 3); // Isr = 5 (every 10 subframes, offset=2 for UE0, 3 for UE1, 3 for UE2, 2 for UE3 , etc..) - break; - - case 4: - physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_ConfigIndex = 7 + (ue_context_pP->local_uid & - 1); // Isr = 5 (every 10 subframes, offset=2 for UE0, 3 for UE1, 3 for UE2, 2 for UE3 , etc..) - break; - - default: - physicalConfigDedicated2->schedulingRequestConfig->choice.setup.sr_ConfigIndex = 7; // Isr = 5 (every 10 subframes, offset=2 for all UE0 etc..) - break; - } - } - - // assign_enum(&physicalConfigDedicated2->schedulingRequestConfig->choice.setup.dsr_TransMax, - //SchedulingRequestConfig__setup__dsr_TransMax_n4); - // assign_enum(&physicalConfigDedicated2->schedulingRequestConfig->choice.setup.dsr_TransMax = SchedulingRequestConfig__setup__dsr_TransMax_n4; - physicalConfigDedicated2->schedulingRequestConfig->choice.setup.dsr_TransMax = - SchedulingRequestConfig__setup__dsr_TransMax_n4; - - LOG_D(RRC, - "handover_config [FRAME %05d][RRC_eNB][MOD %02d][][--- MAC_CONFIG_REQ (SRB1 UE %x) --->][MAC_eNB][MOD %02d][]\n", - ctxt_pP->frame, ctxt_pP->module_id, ue_context_pP->ue_context.rnti, ctxt_pP->module_id); - rrc_mac_config_req_eNB( - ctxt_pP->module_id, - ue_context_pP->ue_context.primaryCC_id, - 0,0,0,0,0, -#ifdef Rel14 -0, -#endif - ue_context_pP->ue_context.rnti, - (BCCH_BCH_Message_t *) NULL, - (RadioResourceConfigCommonSIB_t*) NULL, -#ifdef Rel14 - (RadioResourceConfigCommonSIB_t*) NULL, -#endif - ue_context_pP->ue_context.physicalConfigDedicated, -#if defined(Rel10) || defined(Rel14) - (SCellToAddMod_r10_t *)NULL, - //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, -#endif - (MeasObjectToAddMod_t **) NULL, - ue_context_pP->ue_context.mac_MainConfig, - 1, - SRB1_logicalChannelConfig, - ue_context_pP->ue_context.measGapConfig, - (TDD_Config_t*) NULL, - (MobilityControlInfo_t*) NULL, - (SchedulingInfoList_t*) NULL, - 0, - NULL, - NULL, - (MBSFN_SubframeConfigList_t *) NULL -#if defined(Rel10) || defined(Rel14) - , 0, (MBSFN_AreaInfoList_r9_t *) NULL, (PMCH_InfoList_r9_t *) NULL -#endif -# ifdef Rel14 - , - (SystemInformationBlockType1_v1310_IEs_t *)NULL -# endif - ); - - // Configure target eNB SRB2 - /// SRB2 - SRB2_config = CALLOC(1, sizeof(*SRB2_config)); - SRB_configList2 = CALLOC(1, sizeof(*SRB_configList2)); - memset(SRB_configList2, 0, sizeof(*SRB_configList2)); - - SRB2_config->srb_Identity = 2; - SRB2_rlc_config = CALLOC(1, sizeof(*SRB2_rlc_config)); - SRB2_config->rlc_Config = SRB2_rlc_config; - - SRB2_rlc_config->present = SRB_ToAddMod__rlc_Config_PR_explicitValue; - SRB2_rlc_config->choice.explicitValue.present = RLC_Config_PR_am; - SRB2_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.t_PollRetransmit = T_PollRetransmit_ms15; - SRB2_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.pollPDU = PollPDU_p8; - SRB2_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.pollByte = PollByte_kB1000; - SRB2_rlc_config->choice.explicitValue.choice.am.ul_AM_RLC.maxRetxThreshold = UL_AM_RLC__maxRetxThreshold_t32; - SRB2_rlc_config->choice.explicitValue.choice.am.dl_AM_RLC.t_Reordering = T_Reordering_ms35; - SRB2_rlc_config->choice.explicitValue.choice.am.dl_AM_RLC.t_StatusProhibit = T_StatusProhibit_ms10; - - SRB2_lchan_config = CALLOC(1, sizeof(*SRB2_lchan_config)); - SRB2_config->logicalChannelConfig = SRB2_lchan_config; - - SRB2_lchan_config->present = SRB_ToAddMod__logicalChannelConfig_PR_explicitValue; - - SRB2_ul_SpecificParameters = CALLOC(1, sizeof(*SRB2_ul_SpecificParameters)); - - SRB2_ul_SpecificParameters->priority = 1; - SRB2_ul_SpecificParameters->prioritisedBitRate = - LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity; - SRB2_ul_SpecificParameters->bucketSizeDuration = - LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50; - - // LCG for CCCH and DCCH is 0 as defined in 36331 - logicalchannelgroup = CALLOC(1, sizeof(long)); - *logicalchannelgroup = 0; - - SRB2_ul_SpecificParameters->logicalChannelGroup = logicalchannelgroup; - SRB2_lchan_config->choice.explicitValue.ul_SpecificParameters = SRB2_ul_SpecificParameters; - ASN_SEQUENCE_ADD(&SRB_configList->list, SRB2_config); - ASN_SEQUENCE_ADD(&SRB_configList2->list, SRB2_config); - - // Configure target eNB DRB - DRB_configList2 = CALLOC(1, sizeof(*DRB_configList2)); - /// DRB - DRB_config = CALLOC(1, sizeof(*DRB_config)); - - //DRB_config->drb_Identity = (DRB_Identity_t) 1; //allowed values 1..32 - // NN: this is the 1st DRB for this ue, so set it to 1 - DRB_config->drb_Identity = (DRB_Identity_t) 1; // (ue_mod_idP+1); //allowed values 1..32 - DRB_config->logicalChannelIdentity = CALLOC(1, sizeof(long)); - *(DRB_config->logicalChannelIdentity) = (long)3; - DRB_rlc_config = CALLOC(1, sizeof(*DRB_rlc_config)); - DRB_config->rlc_Config = DRB_rlc_config; - DRB_rlc_config->present = RLC_Config_PR_um_Bi_Directional; - DRB_rlc_config->choice.um_Bi_Directional.ul_UM_RLC.sn_FieldLength = SN_FieldLength_size10; - DRB_rlc_config->choice.um_Bi_Directional.dl_UM_RLC.sn_FieldLength = SN_FieldLength_size10; - DRB_rlc_config->choice.um_Bi_Directional.dl_UM_RLC.t_Reordering = T_Reordering_ms35; - - DRB_pdcp_config = CALLOC(1, sizeof(*DRB_pdcp_config)); - DRB_config->pdcp_Config = DRB_pdcp_config; - DRB_pdcp_config->discardTimer = NULL; - DRB_pdcp_config->rlc_AM = NULL; - PDCP_rlc_UM = CALLOC(1, sizeof(*PDCP_rlc_UM)); - DRB_pdcp_config->rlc_UM = PDCP_rlc_UM; - PDCP_rlc_UM->pdcp_SN_Size = PDCP_Config__rlc_UM__pdcp_SN_Size_len12bits; - DRB_pdcp_config->headerCompression.present = PDCP_Config__headerCompression_PR_notUsed; - - DRB_lchan_config = CALLOC(1, sizeof(*DRB_lchan_config)); - DRB_config->logicalChannelConfig = DRB_lchan_config; - DRB_ul_SpecificParameters = CALLOC(1, sizeof(*DRB_ul_SpecificParameters)); - DRB_lchan_config->ul_SpecificParameters = DRB_ul_SpecificParameters; - - DRB_ul_SpecificParameters->priority = 2; // lower priority than srb1, srb2 - DRB_ul_SpecificParameters->prioritisedBitRate = - LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity; - DRB_ul_SpecificParameters->bucketSizeDuration = - LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50; - - // LCG for DTCH can take the value from 1 to 3 as defined in 36331: normally controlled by upper layers (like RRM) - logicalchannelgroup_drb = CALLOC(1, sizeof(long)); - *logicalchannelgroup_drb = 1; - DRB_ul_SpecificParameters->logicalChannelGroup = logicalchannelgroup_drb; - - ASN_SEQUENCE_ADD(&DRB_configList2->list, DRB_config); - - mac_MainConfig = CALLOC(1, sizeof(*mac_MainConfig)); - ue_context_pP->ue_context.mac_MainConfig = mac_MainConfig; - - mac_MainConfig->ul_SCH_Config = CALLOC(1, sizeof(*mac_MainConfig->ul_SCH_Config)); - - maxHARQ_Tx = CALLOC(1, sizeof(long)); - *maxHARQ_Tx = MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_n5; - mac_MainConfig->ul_SCH_Config->maxHARQ_Tx = maxHARQ_Tx; - - periodicBSR_Timer = CALLOC(1, sizeof(long)); - *periodicBSR_Timer = PeriodicBSR_Timer_r12_sf64; - mac_MainConfig->ul_SCH_Config->periodicBSR_Timer = periodicBSR_Timer; - - mac_MainConfig->ul_SCH_Config->retxBSR_Timer = RetxBSR_Timer_r12_sf320; - - mac_MainConfig->ul_SCH_Config->ttiBundling = 0; // FALSE - - mac_MainConfig->drx_Config = NULL; - - mac_MainConfig->phr_Config = CALLOC(1, sizeof(*mac_MainConfig->phr_Config)); - - mac_MainConfig->phr_Config->present = MAC_MainConfig__phr_Config_PR_setup; - mac_MainConfig->phr_Config->choice.setup.periodicPHR_Timer = MAC_MainConfig__phr_Config__setup__periodicPHR_Timer_sf20; // sf20 = 20 subframes - - mac_MainConfig->phr_Config->choice.setup.prohibitPHR_Timer = MAC_MainConfig__phr_Config__setup__prohibitPHR_Timer_sf20; // sf20 = 20 subframes - - mac_MainConfig->phr_Config->choice.setup.dl_PathlossChange = MAC_MainConfig__phr_Config__setup__dl_PathlossChange_dB1; // Value dB1 =1 dB, dB3 = 3 dB - -#if defined(Rel10) || defined(Rel14) - sr_ProhibitTimer_r9 = CALLOC(1, sizeof(long)); - *sr_ProhibitTimer_r9 = 0; // SR tx on PUCCH, Value in number of SR period(s). Value 0 = no timer for SR, Value 2= 2*SR - mac_MainConfig->ext1 = CALLOC(1, sizeof(struct MAC_MainConfig__ext1)); - mac_MainConfig->ext1->sr_ProhibitTimer_r9 = sr_ProhibitTimer_r9; - //sps_RA_ConfigList_rlola = NULL; -#endif - // Measurement ID list - MeasId_list = CALLOC(1, sizeof(*MeasId_list)); - memset((void *)MeasId_list, 0, sizeof(*MeasId_list)); - - MeasId0 = CALLOC(1, sizeof(*MeasId0)); - MeasId0->measId = 1; - MeasId0->measObjectId = 1; - MeasId0->reportConfigId = 1; - ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId0); - - MeasId1 = CALLOC(1, sizeof(*MeasId1)); - MeasId1->measId = 2; - MeasId1->measObjectId = 1; - MeasId1->reportConfigId = 2; - ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId1); - - MeasId2 = CALLOC(1, sizeof(*MeasId2)); - MeasId2->measId = 3; - MeasId2->measObjectId = 1; - MeasId2->reportConfigId = 3; - ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId2); - - MeasId3 = CALLOC(1, sizeof(*MeasId3)); - MeasId3->measId = 4; - MeasId3->measObjectId = 1; - MeasId3->reportConfigId = 4; - ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId3); - - MeasId4 = CALLOC(1, sizeof(*MeasId4)); - MeasId4->measId = 5; - MeasId4->measObjectId = 1; - MeasId4->reportConfigId = 5; - ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId4); - - MeasId5 = CALLOC(1, sizeof(*MeasId5)); - MeasId5->measId = 6; - MeasId5->measObjectId = 1; - MeasId5->reportConfigId = 6; - ASN_SEQUENCE_ADD(&MeasId_list->list, MeasId5); - - // rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.measConfig->measIdToAddModList = MeasId_list; - - // Add one EUTRA Measurement Object - MeasObj_list = CALLOC(1, sizeof(*MeasObj_list)); - memset((void *)MeasObj_list, 0, sizeof(*MeasObj_list)); - - // Configure MeasObject - - MeasObj = CALLOC(1, sizeof(*MeasObj)); - memset((void *)MeasObj, 0, sizeof(*MeasObj)); - - MeasObj->measObjectId = 1; - MeasObj->measObject.present = MeasObjectToAddMod__measObject_PR_measObjectEUTRA; - MeasObj->measObject.choice.measObjectEUTRA.carrierFreq = 36090; - MeasObj->measObject.choice.measObjectEUTRA.allowedMeasBandwidth = AllowedMeasBandwidth_mbw25; - MeasObj->measObject.choice.measObjectEUTRA.presenceAntennaPort1 = 1; - MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.buf = CALLOC(1, sizeof(uint8_t)); - MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.buf[0] = 0; - MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.size = 1; - MeasObj->measObject.choice.measObjectEUTRA.neighCellConfig.bits_unused = 6; - MeasObj->measObject.choice.measObjectEUTRA.offsetFreq = NULL; // Default is 15 or 0dB - - MeasObj->measObject.choice.measObjectEUTRA.cellsToAddModList = - (CellsToAddModList_t *) CALLOC(1, sizeof(*CellsToAddModList)); - CellsToAddModList = MeasObj->measObject.choice.measObjectEUTRA.cellsToAddModList; - - // Add adjacent cell lists (6 per eNB) - for (i = 0; i < 6; i++) { - CellToAdd = (CellsToAddMod_t *) CALLOC(1, sizeof(*CellToAdd)); - CellToAdd->cellIndex = i + 1; - CellToAdd->physCellId = get_adjacent_cell_id(ctxt_pP->module_id, i); - CellToAdd->cellIndividualOffset = Q_OffsetRange_dB0; - - ASN_SEQUENCE_ADD(&CellsToAddModList->list, CellToAdd); - } - - ASN_SEQUENCE_ADD(&MeasObj_list->list, MeasObj); - // rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.measConfig->measObjectToAddModList = MeasObj_list; - - // Report Configurations for periodical, A1-A5 events - ReportConfig_list = CALLOC(1, sizeof(*ReportConfig_list)); - - ReportConfig_per = CALLOC(1, sizeof(*ReportConfig_per)); - - ReportConfig_A1 = CALLOC(1, sizeof(*ReportConfig_A1)); - - ReportConfig_A2 = CALLOC(1, sizeof(*ReportConfig_A2)); - - ReportConfig_A3 = CALLOC(1, sizeof(*ReportConfig_A3)); - - ReportConfig_A4 = CALLOC(1, sizeof(*ReportConfig_A4)); - - ReportConfig_A5 = CALLOC(1, sizeof(*ReportConfig_A5)); - - ReportConfig_per->reportConfigId = 1; - ReportConfig_per->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.triggerType.present = - ReportConfigEUTRA__triggerType_PR_periodical; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.triggerType.choice.periodical.purpose = - ReportConfigEUTRA__triggerType__periodical__purpose_reportStrongestCells; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_per->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - - ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_per); - - ReportConfig_A1->reportConfigId = 2; - ReportConfig_A1->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerType.present = - ReportConfigEUTRA__triggerType_PR_event; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = - ReportConfigEUTRA__triggerType__event__eventId_PR_eventA1; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA1. - a1_Threshold.present = ThresholdEUTRA_PR_threshold_RSRP; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA1. - a1_Threshold.choice.threshold_RSRP = 10; - - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_A1->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - - ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_A1); - - ReportConfig_A2->reportConfigId = 3; - ReportConfig_A2->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerType.present = - ReportConfigEUTRA__triggerType_PR_event; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = - ReportConfigEUTRA__triggerType__event__eventId_PR_eventA2; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA2. - a2_Threshold.present = ThresholdEUTRA_PR_threshold_RSRP; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA2. - a2_Threshold.choice.threshold_RSRP = 10; - - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_A2->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - - ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_A2); - - ReportConfig_A3->reportConfigId = 4; - ReportConfig_A3->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.present = - ReportConfigEUTRA__triggerType_PR_event; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = - ReportConfigEUTRA__triggerType__event__eventId_PR_eventA3; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA3.a3_Offset = - 10; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. - eventA3.reportOnLeave = 1; - - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_A3->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - - ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_A3); - - ReportConfig_A4->reportConfigId = 5; - ReportConfig_A4->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerType.present = - ReportConfigEUTRA__triggerType_PR_event; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = - ReportConfigEUTRA__triggerType__event__eventId_PR_eventA4; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA4. - a4_Threshold.present = ThresholdEUTRA_PR_threshold_RSRP; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice.eventA4. - a4_Threshold.choice.threshold_RSRP = 10; - - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_A4->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - - ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_A4); - - ReportConfig_A5->reportConfigId = 6; - ReportConfig_A5->reportConfig.present = ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.present = - ReportConfigEUTRA__triggerType_PR_event; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.present = - ReportConfigEUTRA__triggerType__event__eventId_PR_eventA5; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. - eventA5.a5_Threshold1.present = ThresholdEUTRA_PR_threshold_RSRP; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. - eventA5.a5_Threshold2.present = ThresholdEUTRA_PR_threshold_RSRP; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. - eventA5.a5_Threshold1.choice.threshold_RSRP = 10; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerType.choice.event.eventId.choice. - eventA5.a5_Threshold2.choice.threshold_RSRP = 10; - - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.triggerQuantity = ReportConfigEUTRA__triggerQuantity_rsrp; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.reportQuantity = ReportConfigEUTRA__reportQuantity_both; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.maxReportCells = 2; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.reportInterval = ReportInterval_ms120; - ReportConfig_A5->reportConfig.choice.reportConfigEUTRA.reportAmount = ReportConfigEUTRA__reportAmount_infinity; - - ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_A5); - - Sparams = CALLOC(1, sizeof(*Sparams)); - Sparams->present = MeasConfig__speedStatePars_PR_setup; - Sparams->choice.setup.timeToTrigger_SF.sf_High = SpeedStateScaleFactors__sf_Medium_oDot75; - Sparams->choice.setup.timeToTrigger_SF.sf_Medium = SpeedStateScaleFactors__sf_High_oDot5; - Sparams->choice.setup.mobilityStateParameters.n_CellChangeHigh = 10; - Sparams->choice.setup.mobilityStateParameters.n_CellChangeMedium = 5; - Sparams->choice.setup.mobilityStateParameters.t_Evaluation = MobilityStateParameters__t_Evaluation_s60; - Sparams->choice.setup.mobilityStateParameters.t_HystNormal = MobilityStateParameters__t_HystNormal_s120; - - quantityConfig = CALLOC(1, sizeof(*quantityConfig)); - memset((void *)quantityConfig, 0, sizeof(*quantityConfig)); - quantityConfig->quantityConfigEUTRA = CALLOC(1, sizeof(*quantityConfig->quantityConfigEUTRA)); - memset((void *)quantityConfig->quantityConfigEUTRA, 0, sizeof(*quantityConfig->quantityConfigEUTRA)); - quantityConfig->quantityConfigCDMA2000 = NULL; - quantityConfig->quantityConfigGERAN = NULL; - quantityConfig->quantityConfigUTRA = NULL; - quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP = - CALLOC(1, sizeof(*quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP)); - quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ = - CALLOC(1, sizeof(*quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ)); - *quantityConfig->quantityConfigEUTRA->filterCoefficientRSRP = FilterCoefficient_fc4; - *quantityConfig->quantityConfigEUTRA->filterCoefficientRSRQ = FilterCoefficient_fc4; - - /* mobilityinfo */ - - mobilityInfo = CALLOC(1, sizeof(*mobilityInfo)); - memset((void *)mobilityInfo, 0, sizeof(*mobilityInfo)); - mobilityInfo->targetPhysCellId = - (PhysCellId_t) two_tier_hexagonal_cellIds[ue_context_pP->ue_context.handover_info->modid_t]; - LOG_D(RRC, "[eNB %d] Frame %d: handover preparation: targetPhysCellId: %ld mod_id: %d ue: %x \n", - ctxt_pP->module_id, - ctxt_pP->frame, - mobilityInfo->targetPhysCellId, - ctxt_pP->module_id, - ue_context_pP->ue_context.rnti); - - mobilityInfo->additionalSpectrumEmission = CALLOC(1, sizeof(*mobilityInfo->additionalSpectrumEmission)); - *mobilityInfo->additionalSpectrumEmission = 1; //Check this value! - - mobilityInfo->t304 = MobilityControlInfo__t304_ms50; // need to configure an appropriate value here - - // New UE Identity (C-RNTI) to identify an UE uniquely in a cell - mobilityInfo->newUE_Identity.size = 2; - mobilityInfo->newUE_Identity.bits_unused = 0; - mobilityInfo->newUE_Identity.buf = rv; - mobilityInfo->newUE_Identity.buf[0] = rv[0]; - mobilityInfo->newUE_Identity.buf[1] = rv[1]; - - //memset((void *)&mobilityInfo->radioResourceConfigCommon,(void *)&rrc_inst->sib2->radioResourceConfigCommon,sizeof(RadioResourceConfigCommon_t)); - //memset((void *)&mobilityInfo->radioResourceConfigCommon,0,sizeof(RadioResourceConfigCommon_t)); - - // Configuring radioResourceConfigCommon - mobilityInfo->radioResourceConfigCommon.rach_ConfigCommon = - CALLOC(1, sizeof(*mobilityInfo->radioResourceConfigCommon.rach_ConfigCommon)); - memcpy((void *)mobilityInfo->radioResourceConfigCommon.rach_ConfigCommon, - (void *)&rrc_inst->carrier[0] /* CROUX TBC */.sib2->radioResourceConfigCommon.rach_ConfigCommon, sizeof(RACH_ConfigCommon_t)); - mobilityInfo->radioResourceConfigCommon.prach_Config.prach_ConfigInfo = - CALLOC(1, sizeof(*mobilityInfo->radioResourceConfigCommon.prach_Config.prach_ConfigInfo)); - memcpy((void *)mobilityInfo->radioResourceConfigCommon.prach_Config.prach_ConfigInfo, - (void *)&rrc_inst->carrier[0] /* CROUX TBC */.sib2->radioResourceConfigCommon.prach_Config.prach_ConfigInfo, - sizeof(PRACH_ConfigInfo_t)); - - mobilityInfo->radioResourceConfigCommon.prach_Config.rootSequenceIndex = - rrc_inst->carrier[0] /* CROUX TBC */.sib2->radioResourceConfigCommon.prach_Config.rootSequenceIndex; - mobilityInfo->radioResourceConfigCommon.pdsch_ConfigCommon = - CALLOC(1, sizeof(*mobilityInfo->radioResourceConfigCommon.pdsch_ConfigCommon)); - memcpy((void *)mobilityInfo->radioResourceConfigCommon.pdsch_ConfigCommon, - (void *)&rrc_inst->carrier[0] /* CROUX TBC */.sib2->radioResourceConfigCommon.pdsch_ConfigCommon, sizeof(PDSCH_ConfigCommon_t)); - memcpy((void *)&mobilityInfo->radioResourceConfigCommon.pusch_ConfigCommon, - (void *)&rrc_inst->carrier[0] /* CROUX TBC */.sib2->radioResourceConfigCommon.pusch_ConfigCommon, sizeof(PUSCH_ConfigCommon_t)); - mobilityInfo->radioResourceConfigCommon.phich_Config = NULL; - mobilityInfo->radioResourceConfigCommon.pucch_ConfigCommon = - CALLOC(1, sizeof(*mobilityInfo->radioResourceConfigCommon.pucch_ConfigCommon)); - memcpy((void *)mobilityInfo->radioResourceConfigCommon.pucch_ConfigCommon, - (void *)&rrc_inst->carrier[0] /* CROUX TBC */.sib2->radioResourceConfigCommon.pucch_ConfigCommon, sizeof(PUCCH_ConfigCommon_t)); - mobilityInfo->radioResourceConfigCommon.soundingRS_UL_ConfigCommon = - CALLOC(1, sizeof(*mobilityInfo->radioResourceConfigCommon.soundingRS_UL_ConfigCommon)); - memcpy((void *)mobilityInfo->radioResourceConfigCommon.soundingRS_UL_ConfigCommon, - (void *)&rrc_inst->carrier[0] /* CROUX TBC */.sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon, - sizeof(SoundingRS_UL_ConfigCommon_t)); - mobilityInfo->radioResourceConfigCommon.uplinkPowerControlCommon = - CALLOC(1, sizeof(*mobilityInfo->radioResourceConfigCommon.uplinkPowerControlCommon)); - memcpy((void *)mobilityInfo->radioResourceConfigCommon.uplinkPowerControlCommon, - (void *)&rrc_inst->carrier[0] /* CROUX TBC */.sib2->radioResourceConfigCommon.uplinkPowerControlCommon, - sizeof(UplinkPowerControlCommon_t)); - mobilityInfo->radioResourceConfigCommon.antennaInfoCommon = NULL; - mobilityInfo->radioResourceConfigCommon.p_Max = NULL; // CALLOC(1,sizeof(*mobilityInfo->radioResourceConfigCommon.p_Max)); - //memcpy((void *)mobilityInfo->radioResourceConfigCommon.p_Max,(void *)rrc_inst->sib1->p_Max,sizeof(P_Max_t)); - mobilityInfo->radioResourceConfigCommon.tdd_Config = NULL; //CALLOC(1,sizeof(TDD_Config_t)); - //memcpy((void *)mobilityInfo->radioResourceConfigCommon.tdd_Config,(void *)rrc_inst->sib1->tdd_Config,sizeof(TDD_Config_t)); - mobilityInfo->radioResourceConfigCommon.ul_CyclicPrefixLength = - rrc_inst->carrier[0] /* CROUX TBC */.sib2->radioResourceConfigCommon.ul_CyclicPrefixLength; - //End of configuration of radioResourceConfigCommon - - mobilityInfo->carrierFreq = CALLOC(1, sizeof(*mobilityInfo->carrierFreq)); //CALLOC(1,sizeof(CarrierFreqEUTRA_t)); 36090 - mobilityInfo->carrierFreq->dl_CarrierFreq = 36090; - mobilityInfo->carrierFreq->ul_CarrierFreq = NULL; - - mobilityInfo->carrierBandwidth = CALLOC(1, sizeof( - *mobilityInfo->carrierBandwidth)); //CALLOC(1,sizeof(struct CarrierBandwidthEUTRA)); AllowedMeasBandwidth_mbw25 - mobilityInfo->carrierBandwidth->dl_Bandwidth = CarrierBandwidthEUTRA__dl_Bandwidth_n25; - mobilityInfo->carrierBandwidth->ul_Bandwidth = NULL; - mobilityInfo->rach_ConfigDedicated = NULL; - - // store the srb and drb list for ho management, mainly in case of failure - - memcpy(ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.srb_ToAddModList, - (void*)SRB_configList2, - sizeof(SRB_ToAddModList_t)); - memcpy((void*)ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.drb_ToAddModList, - (void*)DRB_configList2, - sizeof(DRB_ToAddModList_t)); - ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.drb_ToReleaseList = NULL; - memcpy((void*)ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.mac_MainConfig, - (void*)mac_MainConfig, - sizeof(MAC_MainConfig_t)); - memcpy((void*)ue_context_pP->ue_context.handover_info->as_config.sourceRadioResourceConfig.physicalConfigDedicated, - (void*)ue_context_pP->ue_context.physicalConfigDedicated, - sizeof(PhysicalConfigDedicated_t)); - /* memcpy((void *)rrc_inst->handover_info[ue_mod_idP]->as_config.sourceRadioResourceConfig.sps_Config, - (void *)rrc_inst->sps_Config[ue_mod_idP], - sizeof(SPS_Config_t)); - */ - LOG_I(RRC, "[eNB %d] Frame %d: adding new UE\n", - ctxt_pP->module_id, ctxt_pP->frame); - //Idx = (ue_mod_idP * NB_RB_MAX) + DCCH; - Idx = DCCH; - // SRB1 - ue_context_pP->ue_context.Srb1.Active = 1; - ue_context_pP->ue_context.Srb1.Srb_info.Srb_id = Idx; - memcpy(&ue_context_pP->ue_context.Srb1.Srb_info.Lchan_desc[0], &DCCH_LCHAN_DESC, LCHAN_DESC_SIZE); - memcpy(&ue_context_pP->ue_context.Srb1.Srb_info.Lchan_desc[1], &DCCH_LCHAN_DESC, LCHAN_DESC_SIZE); - - // SRB2 - ue_context_pP->ue_context.Srb2.Active = 1; - ue_context_pP->ue_context.Srb2.Srb_info.Srb_id = Idx; - memcpy(&ue_context_pP->ue_context.Srb2.Srb_info.Lchan_desc[0], &DCCH_LCHAN_DESC, LCHAN_DESC_SIZE); - memcpy(&ue_context_pP->ue_context.Srb2.Srb_info.Lchan_desc[1], &DCCH_LCHAN_DESC, LCHAN_DESC_SIZE); - - LOG_I(RRC, "[eNB %d] CALLING RLC CONFIG SRB1 (rbid %d) for UE %x\n", - ctxt_pP->module_id, Idx, ue_context_pP->ue_context.rnti); - - // rrc_pdcp_config_req (enb_mod_idP, frameP, 1, CONFIG_ACTION_ADD, idx, UNDEF_SECURITY_MODE); - // rrc_rlc_config_req(enb_mod_idP,frameP,1,CONFIG_ACTION_ADD,Idx,SIGNALLING_RADIO_BEARER,Rlc_info_am_config); - - rrc_pdcp_config_asn1_req(&ctxt, - ue_context_pP->ue_context.SRB_configList, - (DRB_ToAddModList_t *) NULL, (DRB_ToReleaseList_t *) NULL, 0xff, NULL, NULL, NULL -#if defined(Rel10) || defined(Rel14) - , (PMCH_InfoList_r9_t *) NULL -#endif - ,NULL); - - rrc_rlc_config_asn1_req(&ctxt, - ue_context_pP->ue_context.SRB_configList, - (DRB_ToAddModList_t *) NULL, (DRB_ToReleaseList_t *) NULL -#if defined(Rel10) || defined(Rel14) - , (PMCH_InfoList_r9_t *) NULL -#endif - ); - - /* Initialize NAS list */ - dedicatedInfoNASList = NULL; - - // rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.measConfig->reportConfigToAddModList = ReportConfig_list; - memset(buffer, 0, RRC_BUF_SIZE); - - size = do_RRCConnectionReconfiguration( - ctxt_pP, - buffer, - rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id), //Transaction_id, - SRB_configList2, - DRB_configList2, - NULL, // DRB2_list, - NULL, //*sps_Config, - ue_context_pP->ue_context.physicalConfigDedicated, - MeasObj_list, - ReportConfig_list, - NULL, //quantityConfig, - MeasId_list, - mac_MainConfig, - NULL, - mobilityInfo, - Sparams, - NULL, - NULL, - dedicatedInfoNASList -#if defined(Rel10) || defined(Rel14) - , NULL // SCellToAddMod_r10_t -#endif - ); - - LOG_I(RRC, - "[eNB %d] Frame %d, Logical Channel DL-DCCH, Generate RRCConnectionReconfiguration for handover (bytes %d, UE rnti %x)\n", - ctxt_pP->module_id, ctxt_pP->frame, size, ue_context_pP->ue_context.rnti); - // to be updated if needed - /*if (RC.rrc[ctxt_pP->module_id]->SRB1_config[ue_mod_idP]->logicalChannelConfig) { - if (RC.rrc[ctxt_pP->module_id]->SRB1_config[ue_mod_idP]->logicalChannelConfig->present == SRB_ToAddMod__logicalChannelConfig_PR_explicitValue) { - SRB1_logicalChannelConfig = &RC.rrc[ctxt_pP->module_id]->SRB1_config[ue_mod_idP]->logicalChannelConfig->choice.explicitValue; - } - else { - SRB1_logicalChannelConfig = &SRB1_logicalChannelConfig_defaultValue; - } - } - else { - SRB1_logicalChannelConfig = &SRB1_logicalChannelConfig_defaultValue; - } - */ - - LOG_D(RRC, - "[FRAME %05d][RRC_eNB][MOD %02d][][--- PDCP_DATA_REQ/%d Bytes (rrcConnectionReconfiguration_handover to UE %x MUI %d) --->][PDCP][MOD %02d][RB %02d]\n", - ctxt_pP->frame, ctxt_pP->module_id, size, ue_context_pP->ue_context.rnti, rrc_eNB_mui, ctxt_pP->module_id, DCCH); - //rrc_rlc_data_req(ctxt_pP->module_id,frameP, 1,(ue_mod_idP*NB_RB_MAX)+DCCH,rrc_eNB_mui++,0,size,(char*)buffer); - //pdcp_data_req (ctxt_pP->module_id, frameP, 1, (ue_mod_idP * NB_RB_MAX) + DCCH,rrc_eNB_mui++, 0, size, (char *) buffer, 1); - - rrc_mac_config_req_eNB( - ctxt_pP->module_id, - ue_context_pP->ue_context.primaryCC_id, - 0,0,0,0,0, -#ifdef Rel14 - 0, -#endif - ue_context_pP->ue_context.rnti, - (BCCH_BCH_Message_t *) NULL, - (RadioResourceConfigCommonSIB_t *) NULL, -#ifdef Rel14 - (RadioResourceConfigCommonSIB_t *) NULL, -#endif - ue_context_pP->ue_context.physicalConfigDedicated, -#if defined(Rel10) || defined(Rel14) - (SCellToAddMod_r10_t *)NULL, - //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, -#endif - (MeasObjectToAddMod_t **) NULL, - ue_context_pP->ue_context.mac_MainConfig, - 1, - SRB1_logicalChannelConfig, - ue_context_pP->ue_context.measGapConfig, - (TDD_Config_t *) NULL, - (MobilityControlInfo_t *) mobilityInfo, - (SchedulingInfoList_t *) NULL, 0, NULL, NULL, (MBSFN_SubframeConfigList_t *) NULL -#if defined(Rel10) || defined(Rel14) - , 0, (MBSFN_AreaInfoList_r9_t *) NULL, (PMCH_InfoList_r9_t *) NULL -#endif -# ifdef Rel14 - , - (SystemInformationBlockType1_v1310_IEs_t *)NULL -# endif - ); - - /* - handoverCommand.criticalExtensions.present = HandoverCommand__criticalExtensions_PR_c1; - handoverCommand.criticalExtensions.choice.c1.present = HandoverCommand__criticalExtensions__c1_PR_handoverCommand_r8; - handoverCommand.criticalExtensions.choice.c1.choice.handoverCommand_r8.handoverCommandMessage.buf = buffer; - handoverCommand.criticalExtensions.choice.c1.choice.handoverCommand_r8.handoverCommandMessage.size = size; - */ -//#warning "COMPILATION PROBLEM" -#ifdef PROBLEM_COMPILATION_RESOLVED - - if (sourceModId != 0xFF) { - memcpy(RC.rrc[sourceModId].handover_info[RC.rrc[ctxt_pP->module_id]->handover_info[ue_mod_idP]->ueid_s]->buf, - (void *)buffer, size); - RC.rrc[sourceModId].handover_info[RC.rrc[ctxt_pP->module_id]->handover_info[ue_mod_idP]->ueid_s]->size = size; - RC.rrc[sourceModId].handover_info[RC.rrc[ctxt_pP->module_id]->handover_info[ue_mod_idP]->ueid_s]->ho_complete = - 0xF1; - //RC.rrc[ctxt_pP->module_id]->handover_info[ue_mod_idP]->ho_complete = 0xFF; - LOG_D(RRC, "[eNB %d] Frame %d: setting handover complete to 0xF1 for (%d,%d) and to 0xFF for (%d,%d)\n", - ctxt_pP->module_id, - ctxt_pP->frame, - sourceModId, - RC.rrc[ctxt_pP->module_id]->handover_info[ue_mod_idP]->ueid_s, - ctxt_pP->module_id, - ue_mod_idP); - } else - LOG_W(RRC, - "[eNB %d] Frame %d: rrc_eNB_generate_RRCConnectionReconfiguration_handover: Could not find source eNB mod_id.\n", - ctxt_pP->module_id, ctxt_pP->frame); - -#endif -} - -/* - void ue_rrc_process_rrcConnectionReconfiguration(uint8_t enb_mod_idP,frame_t frameP, - RRCConnectionReconfiguration_t *rrcConnectionReconfiguration, - uint8_t CH_index) { - - if (rrcConnectionReconfiguration->criticalExtensions.present == RRCConnectionReconfiguration__criticalExtensions_PR_c1) - if (rrcConnectionReconfiguration->criticalExtensions.choice.c1.present == RRCConnectionReconfiguration__criticalExtensions__c1_PR_rrcConnectionReconfiguration_r8) { - - if (rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.radioResourceConfigDedicated) { - rrc_ue_process_radioResourceConfigDedicated(enb_mod_idP,frameP,CH_index, - rrcConnectionReconfiguration->criticalExtensions.choice.c1.choice.rrcConnectionReconfiguration_r8.radioResourceConfigDedicated); - - } - - // check other fields for - } - } -*/ - -//----------------------------------------------------------------------------- -void -rrc_eNB_process_RRCConnectionReconfigurationComplete( - const protocol_ctxt_t* const ctxt_pP, - rrc_eNB_ue_context_t* ue_context_pP, - const uint8_t xid -) -//----------------------------------------------------------------------------- -{ - int i, drb_id; -#ifdef PDCP_USE_NETLINK - int oip_ifup = 0; - int dest_ip_offset = 0; - module_id_t ue_module_id = -1; - /* avoid gcc warnings */ - (void)oip_ifup; - (void)dest_ip_offset; - (void)ue_module_id; -#endif - - uint8_t *kRRCenc = NULL; - uint8_t *kRRCint = NULL; - uint8_t *kUPenc = NULL; - ue_context_pP->ue_context.ue_reestablishment_timer = 0; - - DRB_ToAddModList_t* DRB_configList = ue_context_pP->ue_context.DRB_configList2[xid]; - SRB_ToAddModList_t* SRB_configList = ue_context_pP->ue_context.SRB_configList2[xid]; - DRB_ToReleaseList_t* DRB_Release_configList2 = ue_context_pP->ue_context.DRB_Release_configList2[xid]; - DRB_Identity_t* drb_id_p = NULL; - - T(T_ENB_RRC_CONNECTION_RECONFIGURATION_COMPLETE, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); - -#if defined(ENABLE_SECURITY) - - /* Derive the keys from kenb */ - if (DRB_configList != NULL) { - derive_key_up_enc(ue_context_pP->ue_context.ciphering_algorithm, - ue_context_pP->ue_context.kenb, &kUPenc); - } - - derive_key_rrc_enc(ue_context_pP->ue_context.ciphering_algorithm, - ue_context_pP->ue_context.kenb, &kRRCenc); - derive_key_rrc_int(ue_context_pP->ue_context.integrity_algorithm, - ue_context_pP->ue_context.kenb, &kRRCint); - -#endif - - // Refresh SRBs/DRBs - MSC_LOG_TX_MESSAGE( - MSC_RRC_ENB, - MSC_PDCP_ENB, - NULL, - 0, - MSC_AS_TIME_FMT" CONFIG_REQ UE %x DRB (security unchanged)", - MSC_AS_TIME_ARGS(ctxt_pP), - ue_context_pP->ue_context.rnti); - - rrc_pdcp_config_asn1_req( - ctxt_pP, - SRB_configList, //NULL, //LG-RK 14/05/2014 SRB_configList, - DRB_configList, -// (DRB_ToReleaseList_t *) NULL, - DRB_Release_configList2, - /*RC.rrc[ctxt_pP->module_id]->ciphering_algorithm[ue_mod_idP] | - (RC.rrc[ctxt_pP->module_id]->integrity_algorithm[ue_mod_idP] << 4), - */ - 0xff, // already configured during the securitymodecommand - kRRCenc, - kRRCint, - kUPenc -#if defined(Rel10) || defined(Rel14) - , (PMCH_InfoList_r9_t *) NULL -#endif - ,NULL); - // Refresh SRBs/DRBs - rrc_rlc_config_asn1_req( - ctxt_pP, - SRB_configList, // NULL, //LG-RK 14/05/2014 SRB_configList, - DRB_configList, -// (DRB_ToReleaseList_t *) NULL - DRB_Release_configList2 -#if defined(Rel10) || defined(Rel14) - , (PMCH_InfoList_r9_t *) NULL -#endif - ); - - // set the SRB active in Ue context - if (SRB_configList != NULL) { - for (i = 0; (i < SRB_configList->list.count) && (i < 3); i++) { - if (SRB_configList->list.array[i]->srb_Identity == 1 ){ - ue_context_pP->ue_context.Srb1.Active=1; - } - else if (SRB_configList->list.array[i]->srb_Identity == 2 ) { - ue_context_pP->ue_context.Srb2.Active=1; - ue_context_pP->ue_context.Srb2.Srb_info.Srb_id=2; - LOG_I(RRC,"[eNB %d] Frame %d CC %d : SRB2 is now active\n", - ctxt_pP->module_id, - ctxt_pP->frame, - ue_context_pP->ue_context.primaryCC_id); - } else { - LOG_W(RRC,"[eNB %d] Frame %d CC %d : invalide SRB identity %ld\n", - ctxt_pP->module_id, - ctxt_pP->frame, - ue_context_pP->ue_context.primaryCC_id, - SRB_configList->list.array[i]->srb_Identity); - } - } - free(SRB_configList); - ue_context_pP->ue_context.SRB_configList2[xid] = NULL; - } - - // Loop through DRBs and establish if necessary - - if (DRB_configList != NULL) { - for (i = 0; i < DRB_configList->list.count; i++) { // num max DRB (11-3-8) - if (DRB_configList->list.array[i]) { - drb_id = (int)DRB_configList->list.array[i]->drb_Identity; - LOG_I(RRC, - "[eNB %d] Frame %d : Logical Channel UL-DCCH, Received RRCConnectionReconfigurationComplete from UE rnti %x, reconfiguring DRB %d/LCID %d\n", - ctxt_pP->module_id, - ctxt_pP->frame, - ctxt_pP->rnti, - (int)DRB_configList->list.array[i]->drb_Identity, - (int)*DRB_configList->list.array[i]->logicalChannelIdentity); - // for pre-ci tests - LOG_I(RRC, - "[eNB %d] Frame %d : Logical Channel UL-DCCH, Received RRCConnectionReconfigurationComplete from UE %u, reconfiguring DRB %d/LCID %d\n", - ctxt_pP->module_id, - ctxt_pP->frame, - oai_emulation.info.eNB_ue_local_uid_to_ue_module_id[ctxt_pP->module_id][ue_context_pP->local_uid], - (int)DRB_configList->list.array[i]->drb_Identity, - (int)*DRB_configList->list.array[i]->logicalChannelIdentity); - - if (ue_context_pP->ue_context.DRB_active[drb_id] == 0) { - /* - rrc_pdcp_config_req (ctxt_pP->module_id, frameP, 1, CONFIG_ACTION_ADD, - (ue_mod_idP * NB_RB_MAX) + *DRB_configList->list.array[i]->logicalChannelIdentity,UNDEF_SECURITY_MODE); - rrc_rlc_config_req(ctxt_pP->module_id,frameP,1,CONFIG_ACTION_ADD, - (ue_mod_idP * NB_RB_MAX) + (int)*RC.rrc[ctxt_pP->module_id]->DRB_config[ue_mod_idP][i]->logicalChannelIdentity, - RADIO_ACCESS_BEARER,Rlc_info_um); - */ - ue_context_pP->ue_context.DRB_active[drb_id] = 1; - - LOG_D(RRC, - "[eNB %d] Frame %d: Establish RLC UM Bidirectional, DRB %d Active\n", - ctxt_pP->module_id, ctxt_pP->frame, (int)DRB_configList->list.array[i]->drb_Identity); -#if defined(PDCP_USE_NETLINK) && !defined(LINK_ENB_PDCP_TO_GTPV1U) - // can mean also IPV6 since ether -> ipv6 autoconf -# if !defined(OAI_NW_DRIVER_TYPE_ETHERNET) && !defined(EXMIMO) && !defined(OAI_USRP) && !defined(OAI_BLADERF) && !defined(ETHERNET) && !defined(OAI_ADRV9371_ZC706) - LOG_I(OIP, "[eNB %d] trying to bring up the OAI interface oai%d\n", - ctxt_pP->module_id, - ctxt_pP->module_id); - oip_ifup = nas_config( - ctxt_pP->module_id, // interface index - ctxt_pP->module_id + 1, // thrid octet - ctxt_pP->module_id + 1); // fourth octet - - if (oip_ifup == 0) { // interface is up --> send a config the DRB - dest_ip_offset = 8; - LOG_I(OIP, - "[eNB %d] Config the oai%d to send/receive pkt on DRB %ld to/from the protocol stack\n", - ctxt_pP->module_id, ctxt_pP->module_id, - (long int)((ue_context_pP->local_uid * maxDRB) + DRB_configList->list.array[i]->drb_Identity)); - ue_module_id = oai_emulation.info.eNB_ue_local_uid_to_ue_module_id[ctxt_pP->module_id][ue_context_pP->local_uid]; - rb_conf_ipv4(0, //add - ue_module_id, //cx - ctxt_pP->module_id, //inst - (ue_module_id * maxDRB) + DRB_configList->list.array[i]->drb_Identity, // RB - 0, //dscp - ipv4_address(ctxt_pP->module_id + 1, ctxt_pP->module_id + 1), //saddr - ipv4_address(ctxt_pP->module_id + 1, dest_ip_offset + ue_module_id + 1)); //daddr - LOG_D(RRC, "[eNB %d] State = Attached (UE rnti %x module id %u)\n", - ctxt_pP->module_id, ue_context_pP->ue_context.rnti, ue_module_id); - } - -# endif -#endif - - LOG_D(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" RRC_eNB --- MAC_CONFIG_REQ (DRB) ---> MAC_eNB\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); - - if (DRB_configList->list.array[i]->logicalChannelIdentity) { - DRB2LCHAN[i] = (uint8_t) * DRB_configList->list.array[i]->logicalChannelIdentity; - } - - rrc_mac_config_req_eNB( - ctxt_pP->module_id, - ue_context_pP->ue_context.primaryCC_id, - 0,0,0,0,0, -#ifdef Rel14 - 0, -#endif - ue_context_pP->ue_context.rnti, - (BCCH_BCH_Message_t *) NULL, - (RadioResourceConfigCommonSIB_t *) NULL, -#ifdef Rel14 - (RadioResourceConfigCommonSIB_t *) NULL, -#endif - ue_context_pP->ue_context.physicalConfigDedicated, -#if defined(Rel10) || defined(Rel14) - (SCellToAddMod_r10_t *)NULL, - //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, -#endif - (MeasObjectToAddMod_t **) NULL, - ue_context_pP->ue_context.mac_MainConfig, - DRB2LCHAN[i], - DRB_configList->list.array[i]->logicalChannelConfig, - ue_context_pP->ue_context.measGapConfig, - (TDD_Config_t *) NULL, - NULL, - (SchedulingInfoList_t *) NULL, - 0, NULL, NULL, (MBSFN_SubframeConfigList_t *) NULL -#if defined(Rel10) || defined(Rel14) - , 0, (MBSFN_AreaInfoList_r9_t *) NULL, (PMCH_InfoList_r9_t *) NULL -#endif -# ifdef Rel14 - , - (SystemInformationBlockType1_v1310_IEs_t *)NULL -# endif - ); - - } else { // remove LCHAN from MAC/PHY - - if (ue_context_pP->ue_context.DRB_active[drb_id] == 1) { - // DRB has just been removed so remove RLC + PDCP for DRB - /* rrc_pdcp_config_req (ctxt_pP->module_id, frameP, 1, CONFIG_ACTION_REMOVE, - (ue_mod_idP * NB_RB_MAX) + DRB2LCHAN[i],UNDEF_SECURITY_MODE); - */ - rrc_rlc_config_req( - ctxt_pP, - SRB_FLAG_NO, - MBMS_FLAG_NO, - CONFIG_ACTION_REMOVE, - DRB2LCHAN[i], - Rlc_info_um); - } - - ue_context_pP->ue_context.DRB_active[drb_id] = 0; - LOG_D(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" RRC_eNB --- MAC_CONFIG_REQ (DRB) ---> MAC_eNB\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); - rrc_mac_config_req_eNB(ctxt_pP->module_id, - ue_context_pP->ue_context.primaryCC_id, - 0,0,0,0,0, -#ifdef Rel14 - 0, -#endif - ue_context_pP->ue_context.rnti, - (BCCH_BCH_Message_t *) NULL, - (RadioResourceConfigCommonSIB_t *) NULL, -#ifdef Rel14 - (RadioResourceConfigCommonSIB_t *) NULL, -#endif - ue_context_pP->ue_context.physicalConfigDedicated, -#if defined(Rel10) || defined(Rel14) - (SCellToAddMod_r10_t *)NULL, - //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, -#endif - (MeasObjectToAddMod_t **) NULL, - ue_context_pP->ue_context.mac_MainConfig, - DRB2LCHAN[i], - (LogicalChannelConfig_t *) NULL, - (MeasGapConfig_t *) NULL, - (TDD_Config_t *) NULL, - NULL, - (SchedulingInfoList_t *) NULL, - 0, NULL, NULL, NULL -#if defined(Rel10) || defined(Rel14) - , 0, (MBSFN_AreaInfoList_r9_t *) NULL, (PMCH_InfoList_r9_t *) NULL -#endif -# ifdef Rel14 - , - (SystemInformationBlockType1_v1310_IEs_t *)NULL -# endif - ); - } - } - } - free(DRB_configList); - ue_context_pP->ue_context.DRB_configList2[xid] = NULL; - } - - if(DRB_Release_configList2 != NULL){ - for (i = 0; i < DRB_Release_configList2->list.count; i++) { - if (DRB_Release_configList2->list.array[i]) { - drb_id_p = DRB_Release_configList2->list.array[i]; - drb_id = *drb_id_p; - if (ue_context_pP->ue_context.DRB_active[drb_id] == 1) { - ue_context_pP->ue_context.DRB_active[drb_id] = 0; - } - } - } - free(DRB_Release_configList2); - ue_context_pP->ue_context.DRB_Release_configList2[xid] = NULL; - } -} - -//----------------------------------------------------------------------------- -void -rrc_eNB_generate_RRCConnectionSetup( - const protocol_ctxt_t* const ctxt_pP, - rrc_eNB_ue_context_t* const ue_context_pP, - const int CC_id -) -//----------------------------------------------------------------------------- -{ - - LogicalChannelConfig_t *SRB1_logicalChannelConfig; //,*SRB2_logicalChannelConfig; - SRB_ToAddModList_t **SRB_configList; - SRB_ToAddMod_t *SRB1_config; - int cnt; - - T(T_ENB_RRC_CONNECTION_SETUP, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); - - SRB_configList = &ue_context_pP->ue_context.SRB_configList; - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size = - do_RRCConnectionSetup(ctxt_pP, - ue_context_pP, - CC_id, - (uint8_t*) RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Payload, - (uint8_t) RC.rrc[ctxt_pP->module_id]->carrier[CC_id].p_eNB, //at this point we do not have the UE capability information, so it can only be TM1 or TM2 - rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id), - SRB_configList, - &ue_context_pP->ue_context.physicalConfigDedicated); - -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC Connection Setup\n"); - - for (cnt = 0; cnt < RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size; cnt++) { - LOG_F(RRC,"%02x ", ((uint8_t*)RC.rrc[ctxt_pP->module_id]->Srb0.Tx_buffer.Payload)[cnt]); - } - - LOG_F(RRC,"\n"); - ////////////////////////////////// -#endif - - // configure SRB1/SRB2, PhysicalConfigDedicated, MAC_MainConfig for UE - - if (*SRB_configList != NULL) { - for (cnt = 0; cnt < (*SRB_configList)->list.count; cnt++) { - if ((*SRB_configList)->list.array[cnt]->srb_Identity == 1) { - SRB1_config = (*SRB_configList)->list.array[cnt]; - - if (SRB1_config->logicalChannelConfig) { - if (SRB1_config->logicalChannelConfig->present == - SRB_ToAddMod__logicalChannelConfig_PR_explicitValue) { - SRB1_logicalChannelConfig = &SRB1_config->logicalChannelConfig->choice.explicitValue; - } else { - SRB1_logicalChannelConfig = &SRB1_logicalChannelConfig_defaultValue; - } - } else { - SRB1_logicalChannelConfig = &SRB1_logicalChannelConfig_defaultValue; - } - - LOG_D(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" RRC_eNB --- MAC_CONFIG_REQ (SRB1) ---> MAC_eNB\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); - rrc_mac_config_req_eNB( - ctxt_pP->module_id, - ue_context_pP->ue_context.primaryCC_id, - 0,0,0,0,0, -#ifdef Rel14 - 0, -#endif - ue_context_pP->ue_context.rnti, - (BCCH_BCH_Message_t *) NULL, - (RadioResourceConfigCommonSIB_t *) NULL, -#ifdef Rel14 - (RadioResourceConfigCommonSIB_t *) NULL, -#endif - ue_context_pP->ue_context.physicalConfigDedicated, -#if defined(Rel10) || defined(Rel14) - (SCellToAddMod_r10_t *)NULL, - //(struct PhysicalConfigDedicatedSCell_r10 *)NULL, -#endif - (MeasObjectToAddMod_t **) NULL, - ue_context_pP->ue_context.mac_MainConfig, - 1, - SRB1_logicalChannelConfig, - ue_context_pP->ue_context.measGapConfig, - (TDD_Config_t *) NULL, - NULL, - (SchedulingInfoList_t *) NULL, - 0, NULL, NULL, (MBSFN_SubframeConfigList_t *) NULL -#if defined(Rel10) || defined(Rel14) - , 0, (MBSFN_AreaInfoList_r9_t *) NULL, (PMCH_InfoList_r9_t *) NULL -#endif -# ifdef Rel14 - , - (SystemInformationBlockType1_v1310_IEs_t *)NULL -# endif - ); - break; - } - } - } - - MSC_LOG_TX_MESSAGE( - MSC_RRC_ENB, - MSC_RRC_UE, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.Header, // LG WARNING - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size, - MSC_AS_TIME_FMT" RRCConnectionSetup UE %x size %u", - MSC_AS_TIME_ARGS(ctxt_pP), - ue_context_pP->ue_context.rnti, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size); - - - LOG_I(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" [RAPROC] Logical Channel DL-CCCH, Generating RRCConnectionSetup (bytes %d)\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Tx_buffer.payload_size); - - // activate release timer, if RRCSetupComplete not received after 10 frames, remove UE - //ue_context_pP->ue_context.ue_release_timer=1; - // remove UE after 10 frames after RRCConnectionRelease is triggered - //ue_context_pP->ue_context.ue_release_timer_thres=100; - // activate release timer, if RRCSetupComplete not received after 100 frames, remove UE - ue_context_pP->ue_context.ue_release_timer=1; - // remove UE after 10 frames after RRCConnectionRelease is triggered - ue_context_pP->ue_context.ue_release_timer_thres=1000; -} - - -#if defined(ENABLE_ITTI) -//----------------------------------------------------------------------------- -char -openair_rrc_eNB_configuration( - const module_id_t enb_mod_idP, - RrcConfigurationReq* configuration -) -#else -char -openair_rrc_eNB_init( - const module_id_t enb_mod_idP -) -#endif -//----------------------------------------------------------------------------- -{ - protocol_ctxt_t ctxt; - int CC_id; - - PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, enb_mod_idP, ENB_FLAG_YES, NOT_A_RNTI, 0, 0,enb_mod_idP); - LOG_I(RRC, - PROTOCOL_RRC_CTXT_FMT" Init...\n", - PROTOCOL_RRC_CTXT_ARGS(&ctxt)); - -#if OCP_FRAMEWORK - while ( RC.rrc[enb_mod_idP] == NULL ) { - LOG_E(RRC, "RC.rrc not yet initialized, waiting 1 second\n"); - sleep(1); - } -#endif - AssertFatal(RC.rrc[enb_mod_idP] != NULL, "RC.rrc not initialized!"); - AssertFatal(NUMBER_OF_UE_MAX < (module_id_t)0xFFFFFFFFFFFFFFFF, " variable overflow"); -#ifdef ENABLE_ITTI - AssertFatal(configuration!=NULL,"configuration input is null\n"); -#endif - // for (j = 0; j < NUMBER_OF_UE_MAX; j++) - // RC.rrc[ctxt.module_id].Info.UE[j].Status = RRC_IDLE; //CH_READY; - // - //#if defined(ENABLE_USE_MME) - // // Connect eNB to MME - // if (EPC_MODE_ENABLED <= 0) - //#endif - // { - // /* Init security parameters */ - // for (j = 0; j < NUMBER_OF_UE_MAX; j++) { - // RC.rrc[ctxt.module_id].ciphering_algorithm[j] = SecurityAlgorithmConfig__cipheringAlgorithm_eea0; - // RC.rrc[ctxt.module_id].integrity_algorithm[j] = SecurityAlgorithmConfig__integrityProtAlgorithm_eia2; - // rrc_eNB_init_security(enb_mod_idP, j); - // } - // } - RC.rrc[ctxt.module_id]->Nb_ue = 0; - - for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { - RC.rrc[ctxt.module_id]->carrier[CC_id].Srb0.Active = 0; - } - - uid_linear_allocator_init(&RC.rrc[ctxt.module_id]->uid_allocator); - RB_INIT(&RC.rrc[ctxt.module_id]->rrc_ue_head); - // for (j = 0; j < (NUMBER_OF_UE_MAX + 1); j++) { - // RC.rrc[enb_mod_idP]->Srb2[j].Active = 0; - // } - - - RC.rrc[ctxt.module_id]->initial_id2_s1ap_ids = hashtable_create (NUMBER_OF_UE_MAX * 2, NULL, NULL); - RC.rrc[ctxt.module_id]->s1ap_id2_s1ap_ids = hashtable_create (NUMBER_OF_UE_MAX * 2, NULL, NULL); - - memcpy(&RC.rrc[ctxt.module_id]->configuration,configuration,sizeof(RrcConfigurationReq)); - - /// System Information INIT - - LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" Checking release \n", - PROTOCOL_RRC_CTXT_ARGS(&ctxt)); -#if defined(Rel10) || defined(Rel14) - - // can clear it at runtime - RC.rrc[ctxt.module_id]->carrier[0].MBMS_flag = 0; - - // This has to come from some top-level configuration - // only CC_id 0 is logged -#if defined(Rel10) - LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" Rel10 RRC detected, MBMS flag %d\n", -#else - LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" Rel14 RRC detected, MBMS flag %d\n", -#endif - PROTOCOL_RRC_CTXT_ARGS(&ctxt), - RC.rrc[ctxt.module_id]->carrier[0].MBMS_flag); - -#else - LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" Rel8 RRC\n", PROTOCOL_RRC_CTXT_ARGS(&ctxt)); -#endif -#ifdef CBA - - for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { - for (j = 0; j < NUM_MAX_CBA_GROUP; j++) { - RC.rrc[ctxt.module_id]->carrier[CC_id].cba_rnti[j] = CBA_OFFSET + j; - } - - if (RC.rrc[ctxt.module_id]->carrier[CC_id].num_active_cba_groups > NUM_MAX_CBA_GROUP) { - RC.rrc[ctxt.module_id]->carrier[CC_id].num_active_cba_groups = NUM_MAX_CBA_GROUP; - } - - LOG_D(RRC, - PROTOCOL_RRC_CTXT_FMT" Initialization of 4 cba_RNTI values (%x %x %x %x) num active groups %d\n", - PROTOCOL_RRC_CTXT_ARGS(&ctxt), - enb_mod_idP, RC.rrc[ctxt.module_id]->carrier[CC_id].cba_rnti[0], - RC.rrc[ctxt.module_id]->carrier[CC_id].cba_rnti[1], - RC.rrc[ctxt.module_id]->carrier[CC_id].cba_rnti[2], - RC.rrc[ctxt.module_id]->carrier[CC_id].cba_rnti[3], - RC.rrc[ctxt.module_id]->carrier[CC_id].num_active_cba_groups); - } - -#endif - - for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { - init_SI(&ctxt, - CC_id -#if defined(ENABLE_ITTI) - , configuration -#endif - ); - for (int ue_id = 0; ue_id < NUMBER_OF_UE_MAX; ue_id++) { - RC.rrc[ctxt.module_id]->carrier[CC_id].sizeof_paging[ue_id] = 0; - RC.rrc[ctxt.module_id]->carrier[CC_id].paging[ue_id] = (uint8_t*) malloc16(256); - } - } - - rrc_init_global_param(); - for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { - -#if defined(Rel10) || defined(Rel14) - switch (RC.rrc[ctxt.module_id]->carrier[CC_id].MBMS_flag) { - case 1: - case 2: - case 3: - LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" Configuring 1 MBSFN sync area\n", PROTOCOL_RRC_CTXT_ARGS(&ctxt)); - RC.rrc[ctxt.module_id]->carrier[CC_id].num_mbsfn_sync_area = 1; - break; - - case 4: - LOG_I(RRC, PROTOCOL_RRC_CTXT_FMT" Configuring 2 MBSFN sync area\n", PROTOCOL_RRC_CTXT_ARGS(&ctxt)); - RC.rrc[ctxt.module_id]->carrier[CC_id].num_mbsfn_sync_area = 2; - break; - - default: - RC.rrc[ctxt.module_id]->carrier[CC_id].num_mbsfn_sync_area = 0; - break; - } - - // if we are here the RC.rrc[enb_mod_idP]->MBMS_flag > 0, - /// MCCH INIT - if (RC.rrc[ctxt.module_id]->carrier[CC_id].MBMS_flag > 0) { - init_MCCH(ctxt.module_id, CC_id); - /// MTCH data bearer init - init_MBMS(ctxt.module_id, CC_id, 0); - } -#endif - - openair_rrc_top_init_eNB(RC.rrc[ctxt.module_id]->carrier[CC_id].MBMS_flag,0); - } - openair_rrc_on(&ctxt); - - return 0; - -} - -/*------------------------------------------------------------------------------*/ -int -rrc_eNB_decode_ccch( - protocol_ctxt_t* const ctxt_pP, - const SRB_INFO* const Srb_info, - const int CC_id -) -//----------------------------------------------------------------------------- -{ - module_id_t Idx; - asn_dec_rval_t dec_rval; - UL_CCCH_Message_t *ul_ccch_msg = NULL; - RRCConnectionRequest_r8_IEs_t* rrcConnectionRequest = NULL; - RRCConnectionReestablishmentRequest_r8_IEs_t* rrcConnectionReestablishmentRequest = NULL; - int i, rval; - struct rrc_eNB_ue_context_s* ue_context_p = NULL; - uint64_t random_value = 0; - int stmsi_received = 0; - - T(T_ENB_RRC_UL_CCCH_DATA_IN, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); - - //memset(ul_ccch_msg,0,sizeof(UL_CCCH_Message_t)); - - LOG_I(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Decoding UL CCCH %x.%x.%x.%x.%x.%x (%p)\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - ((uint8_t*) Srb_info->Rx_buffer.Payload)[0], - ((uint8_t *) Srb_info->Rx_buffer.Payload)[1], - ((uint8_t *) Srb_info->Rx_buffer.Payload)[2], - ((uint8_t *) Srb_info->Rx_buffer.Payload)[3], - ((uint8_t *) Srb_info->Rx_buffer.Payload)[4], - ((uint8_t *) Srb_info->Rx_buffer.Payload)[5], (uint8_t *) Srb_info->Rx_buffer.Payload); - dec_rval = uper_decode( - NULL, - &asn_DEF_UL_CCCH_Message, - (void**)&ul_ccch_msg, - (uint8_t*) Srb_info->Rx_buffer.Payload, - 100, - 0, - 0); - - /* -#if defined(ENABLE_ITTI) -# if defined(DISABLE_ITTI_XER_PRINT) - { - MessageDef *message_p; - - message_p = itti_alloc_new_message(TASK_RRC_ENB, RRC_UL_CCCH_MESSAGE); - memcpy(&message_p->ittiMsg, (void *)ul_ccch_msg, sizeof(RrcUlCcchMessage)); - - itti_send_msg_to_task(TASK_UNKNOWN, ctxt_pP->instance, message_p); - } -# else - { - char message_string[10000]; - size_t message_string_size; - - if ((message_string_size = - xer_sprint(message_string, sizeof(message_string), &asn_DEF_UL_CCCH_Message, (void *)ul_ccch_msg)) > 0) { - MessageDef *msg_p; - - msg_p = itti_alloc_new_message_sized(TASK_RRC_ENB, RRC_UL_CCCH, message_string_size + sizeof(IttiMsgText)); - msg_p->ittiMsg.rrc_ul_ccch.size = message_string_size; - memcpy(&msg_p->ittiMsg.rrc_ul_ccch.text, message_string, message_string_size); - - itti_send_msg_to_task(TASK_UNKNOWN, ctxt_pP->instance, msg_p); - } - } -# endif -#endif - */ - - for (i = 0; i < 8; i++) { - LOG_T(RRC, "%x.", ((uint8_t *) & ul_ccch_msg)[i]); - } - - if (dec_rval.consumed == 0) { - LOG_E(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" FATAL Error in receiving CCCH\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); - return -1; - } - - if (ul_ccch_msg->message.present == UL_CCCH_MessageType_PR_c1) { - - switch (ul_ccch_msg->message.choice.c1.present) { - - case UL_CCCH_MessageType__c1_PR_NOTHING: - LOG_I(RRC, - PROTOCOL_RRC_CTXT_FMT" Received PR_NOTHING on UL-CCCH-Message\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP)); - break; - - case UL_CCCH_MessageType__c1_PR_rrcConnectionReestablishmentRequest: - T(T_ENB_RRC_CONNECTION_REESTABLISHMENT_REQUEST, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); - -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC Connection Reestablishment Request\n"); - - for (i = 0; i < Srb_info->Rx_buffer.payload_size; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)Srb_info->Rx_buffer.Payload)[i]); - } - - LOG_F(RRC,"\n"); -#endif - LOG_D(RRC, - PROTOCOL_RRC_CTXT_UE_FMT"MAC_eNB--- MAC_DATA_IND (rrcConnectionReestablishmentRequest on SRB0) --> RRC_eNB\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); - rrcConnectionReestablishmentRequest = - &ul_ccch_msg->message.choice.c1.choice.rrcConnectionReestablishmentRequest.criticalExtensions.choice.rrcConnectionReestablishmentRequest_r8; - LOG_I(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" RRCConnectionReestablishmentRequest cause %s\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - ((rrcConnectionReestablishmentRequest->reestablishmentCause == ReestablishmentCause_otherFailure) ? "Other Failure" : - (rrcConnectionReestablishmentRequest->reestablishmentCause == ReestablishmentCause_handoverFailure) ? "Handover Failure" : - "reconfigurationFailure")); - /*{ - uint64_t c_rnti = 0; - - memcpy(((uint8_t *) & c_rnti) + 3, rrcConnectionReestablishmentRequest.UE_identity.c_RNTI.buf, - rrcConnectionReestablishmentRequest.UE_identity.c_RNTI.size); - ue_mod_id = rrc_eNB_get_UE_index(enb_mod_idP, c_rnti); - } - - if ((RC.rrc[enb_mod_idP]->phyCellId == rrcConnectionReestablishmentRequest.UE_identity.physCellId) && - (ue_mod_id != UE_INDEX_INVALID)){ - rrc_eNB_generate_RRCConnectionReestablishment(enb_mod_idP, frameP, ue_mod_id); - }else { - rrc_eNB_generate_RRCConnectionReestablishmentReject(enb_mod_idP, frameP, ue_mod_id); - } - */ - /* reject all reestablishment attempts for the moment */ -// rrc_eNB_generate_RRCConnectionReestablishmentReject(ctxt_pP, -// rrc_eNB_get_ue_context(RC.rrc[ctxt_pP->module_id], ctxt_pP->rnti), -// CC_id); -{ - uint16_t c_rnti = 0; - - if (rrcConnectionReestablishmentRequest->ue_Identity.physCellId != RC.rrc[ctxt_pP->module_id]->carrier[CC_id].physCellId) { - LOG_E(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" RRCConnectionReestablishmentRequest ue_Identity.physCellId(%ld) is not equal to current physCellId(%d), let's reject the UE\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - rrcConnectionReestablishmentRequest->ue_Identity.physCellId, - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].physCellId); - rrc_eNB_generate_RRCConnectionReestablishmentReject(ctxt_pP, ue_context_p, CC_id); - break; - } - LOG_D(RRC, "physCellId is %ld\n", rrcConnectionReestablishmentRequest->ue_Identity.physCellId); - - for (i = 0; i < rrcConnectionReestablishmentRequest->ue_Identity.shortMAC_I.size; i++) { - LOG_D(RRC, "rrcConnectionReestablishmentRequest->ue_Identity.shortMAC_I.buf[%d] = %x\n", - i, rrcConnectionReestablishmentRequest->ue_Identity.shortMAC_I.buf[i]); - } - - if (rrcConnectionReestablishmentRequest->ue_Identity.c_RNTI.size == 0 || - rrcConnectionReestablishmentRequest->ue_Identity.c_RNTI.size > 2) { - LOG_E(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" RRCConnectionReestablishmentRequest c_RNTI range error, let's reject the UE\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); - rrc_eNB_generate_RRCConnectionReestablishmentReject(ctxt_pP, ue_context_p, CC_id); - break; - - } - - c_rnti = BIT_STRING_to_uint16(&rrcConnectionReestablishmentRequest->ue_Identity.c_RNTI); - LOG_D(RRC, "c_rnti is %x\n", c_rnti); - - ue_context_p = rrc_eNB_get_ue_context(RC.rrc[ctxt_pP->module_id], c_rnti); - if (ue_context_p == NULL) { - LOG_E(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" RRCConnectionReestablishmentRequest without UE context, let's reject the UE\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); - rrc_eNB_generate_RRCConnectionReestablishmentReject(ctxt_pP, ue_context_p, CC_id); - break; - } - int UE_id = find_UE_id(ctxt_pP->module_id, c_rnti); - if(ue_context_p->ue_context.ue_reestablishment_timer > 0 || RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer > 0){ - LOG_I(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" RRCConnectionReestablishment(Previous) don't complete, let's reject the UE\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); - rrc_eNB_generate_RRCConnectionReestablishmentReject(ctxt_pP, ue_context_p, CC_id); - break; - } - LOG_D(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" UE context: %p\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - ue_context_p); - ue_context_p->ue_context.ul_failure_timer = 0; - ue_context_p->ue_context.ue_release_timer = 0; - ue_context_p->ue_context.ue_reestablishment_timer = 0; - ue_context_p->ue_context.ue_release_timer_s1 = 0; - ue_context_p->ue_context.ue_release_timer_rrc = 0; - - /* reset timers */ - ue_context_p->ue_context.ul_failure_timer = 0; - ue_context_p->ue_context.ue_release_timer = 0; - - // insert C-RNTI to map - for (i = 0; i < NUMBER_OF_UE_MAX; i++) { - if (reestablish_rnti_map[i][0] == 0) { - reestablish_rnti_map[i][0] = ctxt_pP->rnti; - reestablish_rnti_map[i][1] = c_rnti; - break; - } - } - LOG_D(RRC, "reestablish_rnti_map[%d] [0] %x, [1] %x\n", - i, reestablish_rnti_map[i][0], reestablish_rnti_map[i][1]); - -#if defined(ENABLE_ITTI) - ue_context_p->ue_context.reestablishment_cause = rrcConnectionReestablishmentRequest->reestablishmentCause; - LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Accept connection reestablishment request from UE physCellId %ld cause %ld\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - rrcConnectionReestablishmentRequest->ue_Identity.physCellId, - ue_context_p->ue_context.reestablishment_cause); -#else - LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Accept connection restablishment request for UE\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); -#endif - -#ifndef NO_RRM - send_msg(&S_rrc, msg_rrc_MR_attach_ind(ctxt_pP->module_id, Mac_id)); -#else - - ue_context_p->ue_context.primaryCC_id = CC_id; - - //LG COMMENT Idx = (ue_mod_idP * NB_RB_MAX) + DCCH; - Idx = DCCH; - // SRB1 - ue_context_p->ue_context.Srb1.Active = 1; - ue_context_p->ue_context.Srb1.Srb_info.Srb_id = Idx; - memcpy(&ue_context_p->ue_context.Srb1.Srb_info.Lchan_desc[0], - &DCCH_LCHAN_DESC, - LCHAN_DESC_SIZE); - memcpy(&ue_context_p->ue_context.Srb1.Srb_info.Lchan_desc[1], - &DCCH_LCHAN_DESC, - LCHAN_DESC_SIZE); - - // SRB2: set it to go through SRB1 with id 1 (DCCH) - ue_context_p->ue_context.Srb2.Active = 1; - ue_context_p->ue_context.Srb2.Srb_info.Srb_id = Idx; - memcpy(&ue_context_p->ue_context.Srb2.Srb_info.Lchan_desc[0], - &DCCH_LCHAN_DESC, - LCHAN_DESC_SIZE); - memcpy(&ue_context_p->ue_context.Srb2.Srb_info.Lchan_desc[1], - &DCCH_LCHAN_DESC, - LCHAN_DESC_SIZE); - - rrc_eNB_generate_RRCConnectionReestablishment(ctxt_pP, ue_context_p, CC_id); - LOG_I(RRC, PROTOCOL_RRC_CTXT_UE_FMT"CALLING RLC CONFIG SRB1 (rbid %d)\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - Idx); - - MSC_LOG_TX_MESSAGE(MSC_RRC_ENB, - MSC_PDCP_ENB, - NULL, - 0, - MSC_AS_TIME_FMT" CONFIG_REQ UE %x SRB", - MSC_AS_TIME_ARGS(ctxt_pP), - ue_context_p->ue_context.rnti); - - rrc_pdcp_config_asn1_req(ctxt_pP, - ue_context_p->ue_context.SRB_configList, - (DRB_ToAddModList_t *) NULL, - (DRB_ToReleaseList_t*) NULL, - 0xff, - NULL, - NULL, - NULL -# if defined(Rel10) || defined(Rel14) - , (PMCH_InfoList_r9_t *) NULL -# endif - ,NULL); - - rrc_rlc_config_asn1_req(ctxt_pP, - ue_context_p->ue_context.SRB_configList, - (DRB_ToAddModList_t*) NULL, - (DRB_ToReleaseList_t*) NULL -# if defined(Rel10) || defined(Rel14) - , (PMCH_InfoList_r9_t *) NULL -# endif - ); -#endif //NO_RRM - } - break; - - case UL_CCCH_MessageType__c1_PR_rrcConnectionRequest: - T(T_ENB_RRC_CONNECTION_REQUEST, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); - -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC Connection Request\n"); - - for (i = 0; i < Srb_info->Rx_buffer.payload_size; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)Srb_info->Rx_buffer.Payload)[i]); - } - - LOG_F(RRC,"\n"); -#endif - LOG_D(RRC, - PROTOCOL_RRC_CTXT_UE_FMT"MAC_eNB --- MAC_DATA_IND (rrcConnectionRequest on SRB0) --> RRC_eNB\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); - ue_context_p = rrc_eNB_get_ue_context( - RC.rrc[ctxt_pP->module_id], - ctxt_pP->rnti); - - if (ue_context_p != NULL) { - // erase content - rrc_eNB_free_mem_UE_context(ctxt_pP, ue_context_p); - - MSC_LOG_RX_DISCARDED_MESSAGE( - MSC_RRC_ENB, - MSC_RRC_UE, - Srb_info->Rx_buffer.Payload, - dec_rval.consumed, - MSC_AS_TIME_FMT" RRCConnectionRequest UE %x size %u (UE already in context)", - MSC_AS_TIME_ARGS(ctxt_pP), - ue_context_p->ue_context.rnti, - dec_rval.consumed); - } else { - rrcConnectionRequest = &ul_ccch_msg->message.choice.c1.choice.rrcConnectionRequest.criticalExtensions.choice.rrcConnectionRequest_r8; - { - if (InitialUE_Identity_PR_randomValue == rrcConnectionRequest->ue_Identity.present) { - AssertFatal(rrcConnectionRequest->ue_Identity.choice.randomValue.size == 5, - "wrong InitialUE-Identity randomValue size, expected 5, provided %d", - rrcConnectionRequest->ue_Identity.choice.randomValue.size); - memcpy(((uint8_t*) & random_value) + 3, - rrcConnectionRequest->ue_Identity.choice.randomValue.buf, - rrcConnectionRequest->ue_Identity.choice.randomValue.size); - /* if there is already a registered UE (with another RNTI) with this random_value, - * the current one must be removed from MAC/PHY (zombie UE) - */ -#if 0 - if ((ue_context_p = rrc_eNB_ue_context_random_exist(ctxt_pP, random_value))) { - LOG_W(RRC, "new UE rnti %x (coming with random value) is already there as UE %x, removing %x from MAC/PHY\n", - ctxt_pP->rnti, ue_context_p->ue_context.rnti, ctxt_pP->rnti); - rrc_mac_remove_ue(ctxt_pP->module_id, ctxt_pP->rnti); - ue_context_p = NULL; - return 0; - } else { - ue_context_p = rrc_eNB_get_next_free_ue_context(ctxt_pP, random_value); - } -#endif - if ((ue_context_p = rrc_eNB_ue_context_random_exist(ctxt_pP, random_value))) { - LOG_W(RRC, "new UE rnti %x (coming with random value) is already there as UE %x, removing %x from MAC/PHY\n", - ctxt_pP->rnti, ue_context_p->ue_context.rnti, ue_context_p->ue_context.rnti); - ue_context_p->ue_context.ul_failure_timer = 20000; - } - ue_context_p = rrc_eNB_get_next_free_ue_context(ctxt_pP, random_value); - } else if (InitialUE_Identity_PR_s_TMSI == rrcConnectionRequest->ue_Identity.present) { - /* Save s-TMSI */ - S_TMSI_t s_TMSI = rrcConnectionRequest->ue_Identity.choice.s_TMSI; - mme_code_t mme_code = BIT_STRING_to_uint8(&s_TMSI.mmec); - m_tmsi_t m_tmsi = BIT_STRING_to_uint32(&s_TMSI.m_TMSI); - random_value = (((uint64_t)mme_code) << 32) | m_tmsi; - if ((ue_context_p = rrc_eNB_ue_context_stmsi_exist(ctxt_pP, mme_code, m_tmsi))) { - LOG_I(RRC," S-TMSI exists, ue_context_p %p, old rnti %x => %x\n",ue_context_p,ue_context_p->ue_context.rnti,ctxt_pP->rnti); - rrc_mac_remove_ue(ctxt_pP->module_id, ue_context_p->ue_context.rnti); - stmsi_received=1; - /* replace rnti in the context */ - /* for that, remove the context from the RB tree */ - RB_REMOVE(rrc_ue_tree_s, &RC.rrc[ctxt_pP->module_id]->rrc_ue_head, ue_context_p); - /* and insert again, after changing rnti everywhere it has to be changed */ - ue_context_p->ue_id_rnti = ctxt_pP->rnti; - ue_context_p->ue_context.rnti = ctxt_pP->rnti; - RB_INSERT(rrc_ue_tree_s, &RC.rrc[ctxt_pP->module_id]->rrc_ue_head, ue_context_p); - /* reset timers */ - ue_context_p->ue_context.ul_failure_timer = 0; - ue_context_p->ue_context.ue_release_timer = 0; - ue_context_p->ue_context.ue_reestablishment_timer = 0; - ue_context_p->ue_context.ue_release_timer_s1 = 0; - ue_context_p->ue_context.ue_release_timer_rrc = 0; - } else { - LOG_I(RRC," S-TMSI doesn't exist, setting Initialue_identity_s_TMSI.m_tmsi to %p => %x\n",ue_context_p,m_tmsi); -// ue_context_p = rrc_eNB_get_next_free_ue_context(ctxt_pP, NOT_A_RANDOM_UE_IDENTITY); - ue_context_p = rrc_eNB_get_next_free_ue_context(ctxt_pP,random_value); - if (ue_context_p == NULL) - LOG_E(RRC, "%s:%d:%s: rrc_eNB_get_next_free_ue_context returned NULL\n", __FILE__, __LINE__, __FUNCTION__); - if (ue_context_p != NULL) { - ue_context_p->ue_context.Initialue_identity_s_TMSI.presence = TRUE; - ue_context_p->ue_context.Initialue_identity_s_TMSI.mme_code = mme_code; - ue_context_p->ue_context.Initialue_identity_s_TMSI.m_tmsi = m_tmsi; - } else { - /* TODO: do we have to break here? */ - //break; - } - } - - MSC_LOG_RX_MESSAGE( - MSC_RRC_ENB, - MSC_RRC_UE, - Srb_info->Rx_buffer.Payload, - dec_rval.consumed, - MSC_AS_TIME_FMT" RRCConnectionRequest UE %x size %u (s-TMSI mmec %u m_TMSI %u random UE id (0x%" PRIx64 ")", - MSC_AS_TIME_ARGS(ctxt_pP), - ue_context_p->ue_context.rnti, - dec_rval.consumed, - ue_context_p->ue_context.Initialue_identity_s_TMSI.mme_code, - ue_context_p->ue_context.Initialue_identity_s_TMSI.m_tmsi, - ue_context_p->ue_context.random_ue_identity); - } else { - LOG_E(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" RRCConnectionRequest without random UE identity or S-TMSI not supported, let's reject the UE\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); - rrc_eNB_generate_RRCConnectionReject(ctxt_pP, - rrc_eNB_get_ue_context(RC.rrc[ctxt_pP->module_id], ctxt_pP->rnti), - CC_id); - break; - } - - } - LOG_D(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" UE context: %p\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - ue_context_p); - - if (ue_context_p != NULL) { - - -#if defined(ENABLE_ITTI) - ue_context_p->ue_context.establishment_cause = rrcConnectionRequest->establishmentCause; - ue_context_p->ue_context.reestablishment_cause = ReestablishmentCause_spare1; - if (stmsi_received==0) - LOG_I(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Accept new connection from UE random UE identity (0x%" PRIx64 ") MME code %u TMSI %u cause %ld\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - ue_context_p->ue_context.random_ue_identity, - ue_context_p->ue_context.Initialue_identity_s_TMSI.mme_code, - ue_context_p->ue_context.Initialue_identity_s_TMSI.m_tmsi, - ue_context_p->ue_context.establishment_cause); - else - LOG_I(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Accept new connection from UE MME code %u TMSI %u cause %ld\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - ue_context_p->ue_context.Initialue_identity_s_TMSI.mme_code, - ue_context_p->ue_context.Initialue_identity_s_TMSI.m_tmsi, - ue_context_p->ue_context.establishment_cause); -#else - LOG_I(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Accept new connection for UE random UE identity (0x%" PRIx64 ")\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - ue_context_p->ue_context.random_ue_identity); -#endif - if (stmsi_received == 0) - RC.rrc[ctxt_pP->module_id]->Nb_ue++; - - } else { - // no context available - if (rrc_agent_registered[ctxt_pP->module_id]) { - agent_rrc_xface[ctxt_pP->module_id]->flexran_agent_notify_ue_state_change(ctxt_pP->module_id, - ctxt_pP->rnti, - PROTOCOL__FLEX_UE_STATE_CHANGE_TYPE__FLUESC_DEACTIVATED); - } - LOG_I(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Can't create new context for UE random UE identity (0x%" PRIx64 ")\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - random_value); - rrc_mac_remove_ue(ctxt_pP->module_id,ctxt_pP->rnti); - return -1; - } - } - -#ifndef NO_RRM - send_msg(&S_rrc, msg_rrc_MR_attach_ind(ctxt_pP->module_id, Mac_id)); -#else - - ue_context_p->ue_context.primaryCC_id = CC_id; - - //LG COMMENT Idx = (ue_mod_idP * NB_RB_MAX) + DCCH; - Idx = DCCH; - // SRB1 - ue_context_p->ue_context.Srb1.Active = 1; - ue_context_p->ue_context.Srb1.Srb_info.Srb_id = Idx; - memcpy(&ue_context_p->ue_context.Srb1.Srb_info.Lchan_desc[0], - &DCCH_LCHAN_DESC, - LCHAN_DESC_SIZE); - memcpy(&ue_context_p->ue_context.Srb1.Srb_info.Lchan_desc[1], - &DCCH_LCHAN_DESC, - LCHAN_DESC_SIZE); +///---------------------------------------------------------------------------------------------------------------/// +///---------------------------------------------------------------------------------------------------------------/// - // SRB2: set it to go through SRB1 with id 1 (DCCH) - ue_context_p->ue_context.Srb2.Active = 1; - ue_context_p->ue_context.Srb2.Srb_info.Srb_id = Idx; - memcpy(&ue_context_p->ue_context.Srb2.Srb_info.Lchan_desc[0], - &DCCH_LCHAN_DESC, - LCHAN_DESC_SIZE); - memcpy(&ue_context_p->ue_context.Srb2.Srb_info.Lchan_desc[1], - &DCCH_LCHAN_DESC, - LCHAN_DESC_SIZE); - - rrc_eNB_generate_RRCConnectionSetup(ctxt_pP, ue_context_p, CC_id); - LOG_I(RRC, PROTOCOL_RRC_CTXT_UE_FMT"CALLING RLC CONFIG SRB1 (rbid %d)\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - Idx); - - MSC_LOG_TX_MESSAGE( - MSC_RRC_ENB, - MSC_PDCP_ENB, - NULL, - 0, - MSC_AS_TIME_FMT" CONFIG_REQ UE %x SRB", - MSC_AS_TIME_ARGS(ctxt_pP), - ue_context_p->ue_context.rnti); - - rrc_pdcp_config_asn1_req(ctxt_pP, - ue_context_p->ue_context.SRB_configList, - (DRB_ToAddModList_t *) NULL, - (DRB_ToReleaseList_t*) NULL, - 0xff, - NULL, - NULL, - NULL -# if defined(Rel10) || defined(Rel14) - , (PMCH_InfoList_r9_t *) NULL -# endif - ,NULL); - - rrc_rlc_config_asn1_req(ctxt_pP, - ue_context_p->ue_context.SRB_configList, - (DRB_ToAddModList_t*) NULL, - (DRB_ToReleaseList_t*) NULL -# if defined(Rel10) || defined(Rel14) - , (PMCH_InfoList_r9_t *) NULL -# endif - ); -#endif //NO_RRM - - break; +void +openair_nrrrc_on( + const protocol_ctxt_t* const ctxt_pP +) +//----------------------------------------------------------------------------- +{ + int CC_id; - default: - LOG_E(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Unknown message\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); - rval = -1; - break; + LOG_I(NR_RRC, PROTOCOL_RRC_CTXT_FMT" gNB:OPENAIR NR RRC IN....\n", + PROTOCOL_RRC_CTXT_ARGS(ctxt_pP)); + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { + rrc_config_buffer (&RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].SI, BCCH, 1); + RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].SI.Active = 1; + rrc_config_buffer (&RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0, CCCH, 1); + RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].Srb0.Active = 1; } - - rval = 0; - } else { - LOG_E(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Unknown error \n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); - rval = -1; - } - - return rval; } -//----------------------------------------------------------------------------- -int -rrc_eNB_decode_dcch( +///---------------------------------------------------------------------------------------------------------------/// +///---------------------------------------------------------------------------------------------------------------/// + +static void +init_NR_SI( const protocol_ctxt_t* const ctxt_pP, - const rb_id_t Srb_id, - const uint8_t* const Rx_sdu, - const sdu_size_t sdu_sizeP + const int CC_id +#if defined(ENABLE_ITTI) + , + gNB_RrcConfigurationReq * configuration +#endif ) //----------------------------------------------------------------------------- { + int i; - asn_dec_rval_t dec_rval; - //UL_DCCH_Message_t uldcchmsg; - UL_DCCH_Message_t *ul_dcch_msg = NULL; //&uldcchmsg; - int i; - struct rrc_eNB_ue_context_s* ue_context_p = NULL; -#if defined(ENABLE_ITTI) -# if defined(ENABLE_USE_MME) - MessageDef * msg_delete_tunnels_p = NULL; - uint8_t xid; -#endif -#endif - - int dedicated_DRB=0; - - T(T_ENB_RRC_UL_DCCH_DATA_IN, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); + LOG_D(RRC,"%s()\n\n\n\n",__FUNCTION__); - if ((Srb_id != 1) && (Srb_id != 2)) { - LOG_E(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Received message on SRB%d, should not have ...\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - Srb_id); - } else { - LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Received message on SRB%d\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - Srb_id); - } - //memset(ul_dcch_msg,0,sizeof(UL_DCCH_Message_t)); + // copy basic parameters + RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].physCellId = configuration->Nid_cell[CC_id]; + RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].p_eNB = configuration->nb_antenna_ports[CC_id]; + RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].Ncp = configuration->prefix_type[CC_id]; + RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].dl_CarrierFreq = configuration->downlink_frequency[CC_id]; + RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].ul_CarrierFreq = configuration->downlink_frequency[CC_id]+ configuration->uplink_frequency_offset[CC_id]; + + ///MIB + RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_MIB_NR = 0; + RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].MIB_NR = (uint8_t*) malloc16(4); + RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_MIB_NR = do_MIB_NR(&RC.rrc[ctxt_pP->module_id]->carrier[CC_id],0, + #ifdef ENABLE_ITTI + configuration->ssb_SubcarrierOffset[CC_id], + configuration->pdcch_ConfigSIB1[CC_id], + configuration->subCarrierSpacingCommon[CC_id], + configuration->dmrs_TypeA_Position[CC_id] + #else + 0,0,15,2 + #endif + ); - LOG_D(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Decoding UL-DCCH Message\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); - dec_rval = uper_decode( - NULL, - &asn_DEF_UL_DCCH_Message, - (void**)&ul_dcch_msg, - Rx_sdu, - sdu_sizeP, - 0, - 0); - /* -#if defined(ENABLE_ITTI) -# if defined(DISABLE_ITTI_XER_PRINT) - { - MessageDef *message_p; + ///SIB1 + RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB1_NR = 0; + RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].SIB1_NR = (uint8_t*) malloc16(32); + AssertFatal(RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].SIB1_NR! + = NULL,PROTOCOL_RRC_CTXT_FMT" init_SI: FATAL, no memory for NR SIB1 allocated\n",PROTOCOL_RRC_CTXT_ARGS(ctxt_pP)); + + RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB1_NR = do_SIB1_NR(&RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id], + ctxt_pP->module_id, + CC_id + #if defined(ENABLE_ITTI) + ,configuration + #endif + ); + + AssertFatal(RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB1 != 255,"FATAL, RC.nr_rrc[enb_mod_idP].carrier[CC_id].sizeof_SIB1_NR == 255"); - message_p = itti_alloc_new_message(TASK_RRC_ENB, RRC_UL_DCCH_MESSAGE); - memcpy(&message_p->ittiMsg, (void *)ul_dcch_msg, sizeof(RrcUlDcchMessage)); + rrc_mac_config_req_eNB(ctxt_pP->module_id, CC_id, + RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].physCellId, + RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].p_eNB, + RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].Ncp, + RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].sib1->freqBandIndicator, + RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].dl_CarrierFreq, + 0, // rnti + (BCCH_BCH_Message_t *) + &RC.nr_rrc[ctxt_pP->module_id]->carrier[CC_id].mib + ); +} - itti_send_msg_to_task(TASK_UNKNOWN, ctxt_pP->instance, message_p); - } -# else - { - char message_string[10000]; - size_t message_string_size; - if ((message_string_size = - xer_sprint(message_string, sizeof(message_string), &asn_DEF_UL_DCCH_Message, (void *)ul_dcch_msg)) >= 0) { - MessageDef *msg_p; +char openair_rrc_gNB_configuration(const module_id_t gnb_mod_idP, gNB_RrcConfigurationReq* configuration){ + protocol_ctxt_t ctxt; + int CC_id; - msg_p = itti_alloc_new_message_sized(TASK_RRC_ENB, RRC_UL_DCCH, message_string_size + sizeof(IttiMsgText)); - msg_p->ittiMsg.rrc_ul_dcch.size = message_string_size; - memcpy(&msg_p->ittiMsg.rrc_ul_dcch.text, message_string, message_string_size); + PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, gnb_mod_idP, ENB_FLAG_YES, NOT_A_RNTI, 0, 0,gnb_mod_idP); + LOG_I(NR_RRC,PROTOCOL_NRRRC_CTXT_FMT" Init...\n",PROTOCOL_NRRRC_CTXT_ARGS(&ctxt)); - itti_send_msg_to_task(TASK_UNKNOWN, ctxt_pP->instance, msg_p); - } - } -# endif -#endif - */ - { - for (i = 0; i < sdu_sizeP; i++) { - LOG_T(RRC, "%x.", Rx_sdu[i]); + #if OCP_FRAMEWORK + while ( RC.nr_rrc[gnb_mod_idP] == NULL ) { + LOG_E(NR_RRC, "RC.nr_rrc not yet initialized, waiting 1 second\n"); + sleep(1); } + #endif + AssertFatal(RC.nr_rrc[gnb_mod_idP] != NULL, "RC.nr_rrc not initialized!"); + AssertFatal(NUMBER_OF_UE_MAX < (module_id_t)0xFFFFFFFFFFFFFFFF, " variable overflow"); + #ifdef ENABLE_ITTI + AssertFatal(configuration!=NULL,"configuration input is null\n"); + #endif - LOG_T(RRC, "\n"); - } + RC.nr_rrc[ctxt.module_id]->Nb_ue = 0; - if ((dec_rval.code != RC_OK) && (dec_rval.consumed == 0)) { - LOG_E(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Failed to decode UL-DCCH (%zu bytes)\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - dec_rval.consumed); - return -1; + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { + RC.nr_rrc[ctxt.module_id]->carrier[CC_id].Srb0.Active = 0; } - ue_context_p = rrc_eNB_get_ue_context( - RC.rrc[ctxt_pP->module_id], - ctxt_pP->rnti); - - if (ul_dcch_msg->message.present == UL_DCCH_MessageType_PR_c1) { - - switch (ul_dcch_msg->message.choice.c1.present) { - case UL_DCCH_MessageType__c1_PR_NOTHING: /* No components present */ - break; - - case UL_DCCH_MessageType__c1_PR_csfbParametersRequestCDMA2000: - break; - - case UL_DCCH_MessageType__c1_PR_measurementReport: - LOG_D(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" RLC RB %02d --- RLC_DATA_IND " - "%d bytes (measurementReport) ---> RRC_eNB\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - DCCH, - sdu_sizeP); - rrc_eNB_process_MeasurementReport( - ctxt_pP, - ue_context_p, - &ul_dcch_msg->message.choice.c1.choice.measurementReport. - criticalExtensions.choice.c1.choice.measurementReport_r8.measResults); - break; - - case UL_DCCH_MessageType__c1_PR_rrcConnectionReconfigurationComplete: -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC Connection Reconfiguration Complete\n"); - - for (i = 0; i < sdu_sizeP; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]); - } - - LOG_F(RRC,"\n"); -#endif - MSC_LOG_RX_MESSAGE( - MSC_RRC_ENB, - MSC_RRC_UE, - Rx_sdu, - sdu_sizeP, - MSC_AS_TIME_FMT" RRCConnectionReconfigurationComplete UE %x size %u", - MSC_AS_TIME_ARGS(ctxt_pP), - ue_context_p->ue_context.rnti, - sdu_sizeP); - - LOG_D(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" RLC RB %02d --- RLC_DATA_IND %d bytes " - "(RRCConnectionReconfigurationComplete) ---> RRC_eNB]\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - DCCH, - sdu_sizeP); - - if (ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.criticalExtensions. - present == - RRCConnectionReconfigurationComplete__criticalExtensions_PR_rrcConnectionReconfigurationComplete_r8) { - /*NN: revise the condition */ - if (ue_context_p->ue_context.Status == RRC_RECONFIGURED){ - dedicated_DRB = 1; - LOG_I(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (dedicated DRB, xid %ld)\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier); - }else { - dedicated_DRB = 0; - ue_context_p->ue_context.Status = RRC_RECONFIGURED; - LOG_I(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_RECONFIGURED (default DRB, xid %ld)\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP),ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier); - } - rrc_eNB_process_RRCConnectionReconfigurationComplete( - ctxt_pP, - ue_context_p, - ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier); - - //WARNING:Inform the controller about the UE activation. Should be moved to RRC agent in the future - if (rrc_agent_registered[ctxt_pP->module_id]) { - agent_rrc_xface[ctxt_pP->eNB_index]->flexran_agent_notify_ue_state_change(ctxt_pP->module_id, - ue_context_p->ue_id_rnti, - PROTOCOL__FLEX_UE_STATE_CHANGE_TYPE__FLUESC_UPDATED); - } - } -#if defined(ENABLE_ITTI) -# if defined(ENABLE_USE_MME) - if (EPC_MODE_ENABLED == 1) { - if (dedicated_DRB == 1){ -// rrc_eNB_send_S1AP_E_RAB_SETUP_RESP(ctxt_pP, -// ue_context_p, -// ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier); -if (ue_context_p->ue_context.nb_of_modify_e_rabs > 0) { - rrc_eNB_send_S1AP_E_RAB_MODIFY_RESP(ctxt_pP, - ue_context_p, - ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier); - - ue_context_p->ue_context.nb_of_modify_e_rabs = 0; - ue_context_p->ue_context.nb_of_failed_e_rabs = 0; - memset(ue_context_p->ue_context.modify_e_rab, 0, sizeof(ue_context_p->ue_context.modify_e_rab)); - for(int i = 0; i < NB_RB_MAX; i++) { - ue_context_p->ue_context.modify_e_rab[i].xid = -1; - } - - } else if(ue_context_p->ue_context.e_rab_release_command_flag == 1){ - xid = ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier; - ue_context_p->ue_context.e_rab_release_command_flag = 0; - //gtp tunnel delete - msg_delete_tunnels_p = itti_alloc_new_message(TASK_RRC_ENB, GTPV1U_ENB_DELETE_TUNNEL_REQ); - memset(>PV1U_ENB_DELETE_TUNNEL_REQ(msg_delete_tunnels_p), 0, sizeof(GTPV1U_ENB_DELETE_TUNNEL_REQ(msg_delete_tunnels_p))); - GTPV1U_ENB_DELETE_TUNNEL_REQ(msg_delete_tunnels_p).rnti = ue_context_p->ue_context.rnti; - for(i = 0; i < NB_RB_MAX; i++){ - if(xid == ue_context_p->ue_context.e_rab[i].xid){ - GTPV1U_ENB_DELETE_TUNNEL_REQ(msg_delete_tunnels_p).eps_bearer_id[GTPV1U_ENB_DELETE_TUNNEL_REQ(msg_delete_tunnels_p).num_erab++] = ue_context_p->ue_context.enb_gtp_ebi[i]; - ue_context_p->ue_context.enb_gtp_teid[i] = 0; - memset(&ue_context_p->ue_context.enb_gtp_addrs[i], 0, sizeof(ue_context_p->ue_context.enb_gtp_addrs[i])); - ue_context_p->ue_context.enb_gtp_ebi[i] = 0; - } - } - itti_send_msg_to_task(TASK_GTPV1_U, ctxt_pP->instance, msg_delete_tunnels_p); - //S1AP_E_RAB_RELEASE_RESPONSE - rrc_eNB_send_S1AP_E_RAB_RELEASE_RESPONSE(ctxt_pP, - ue_context_p, - xid); - } else { - rrc_eNB_send_S1AP_E_RAB_SETUP_RESP(ctxt_pP, - ue_context_p, - ul_dcch_msg->message.choice.c1.choice.rrcConnectionReconfigurationComplete.rrc_TransactionIdentifier); - } - }else { - if(ue_context_p->ue_context.reestablishment_cause == ReestablishmentCause_spare1){ - rrc_eNB_send_S1AP_INITIAL_CONTEXT_SETUP_RESP(ctxt_pP, - ue_context_p); - } else { - ue_context_p->ue_context.reestablishment_cause = ReestablishmentCause_spare1; - for (uint8_t e_rab = 0; e_rab < ue_context_p->ue_context.nb_of_e_rabs; e_rab++) { - if (ue_context_p->ue_context.e_rab[e_rab].status == E_RAB_STATUS_DONE) { - ue_context_p->ue_context.e_rab[e_rab].status = E_RAB_STATUS_ESTABLISHED; - } else { - ue_context_p->ue_context.e_rab[e_rab].status = E_RAB_STATUS_FAILED; - } - } - } - } - } -#else // establish a dedicated bearer - if (dedicated_DRB == 0 ) { - // ue_context_p->ue_context.e_rab[0].status = E_RAB_STATUS_ESTABLISHED; - rrc_eNB_reconfigure_DRBs(ctxt_pP,ue_context_p); - } - -#endif -#endif - break; - - case UL_DCCH_MessageType__c1_PR_rrcConnectionReestablishmentComplete: - T(T_ENB_RRC_CONNECTION_REESTABLISHMENT_COMPLETE, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); - -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC Connection Reestablishment Complete\n"); - - for (i = 0; i < sdu_sizeP; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]); - } - - LOG_F(RRC,"\n"); -#endif - - MSC_LOG_RX_MESSAGE( - MSC_RRC_ENB, - MSC_RRC_UE, - Rx_sdu, - sdu_sizeP, - MSC_AS_TIME_FMT" rrcConnectionReestablishmentComplete UE %x size %u", - MSC_AS_TIME_ARGS(ctxt_pP), - ue_context_p->ue_context.rnti, - sdu_sizeP); - - LOG_I(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" RLC RB %02d --- RLC_DATA_IND %d bytes " - "(rrcConnectionReestablishmentComplete) ---> RRC_eNB\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - DCCH, - sdu_sizeP); - { - int UE_id = find_UE_id(ctxt_pP->module_id, ctxt_pP->rnti); - RC.mac[ctxt_pP->module_id]->UE_list.UE_sched_ctrl[UE_id].ue_reestablishment_reject_timer = 0; - rnti_t reestablish_rnti = 0; - // select C-RNTI from map - for (i = 0; i < NUMBER_OF_UE_MAX; i++) { - if (reestablish_rnti_map[i][0] == ctxt_pP->rnti) { - reestablish_rnti = reestablish_rnti_map[i][1]; - ue_context_p = rrc_eNB_get_ue_context( - RC.rrc[ctxt_pP->module_id], - reestablish_rnti); - // clear currentC-RNTI from map - reestablish_rnti_map[i][0] = 0; - reestablish_rnti_map[i][1] = 0; - break; - } - } - LOG_D(RRC, "reestablish_rnti_map[%d] [0] %x, [1] %x\n", - i, reestablish_rnti_map[i][0], reestablish_rnti_map[i][1]); - - if (!ue_context_p) { - LOG_E(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" RRCConnectionReestablishmentComplete without UE context, falt\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); - break; - } - - if (ul_dcch_msg->message.choice.c1.choice.rrcConnectionReestablishmentComplete.criticalExtensions.present == - RRCConnectionReestablishmentComplete__criticalExtensions_PR_rrcConnectionReestablishmentComplete_r8) { - rrc_eNB_process_RRCConnectionReestablishmentComplete(ctxt_pP, reestablish_rnti, ue_context_p, - ul_dcch_msg->message.choice.c1.choice.rrcConnectionReestablishmentComplete.rrc_TransactionIdentifier, - &ul_dcch_msg->message.choice.c1.choice.rrcConnectionReestablishmentComplete.criticalExtensions.choice.rrcConnectionReestablishmentComplete_r8); - - //WARNING:Inform the controller about the UE activation. Should be moved to RRC agent in the future - if (mac_agent_registered[ctxt_pP->module_id]) { - agent_rrc_xface[ctxt_pP->eNB_index]->flexran_agent_notify_ue_state_change(ctxt_pP->module_id, - ue_context_p->ue_id_rnti, - PROTOCOL__FLEX_UE_STATE_CHANGE_TYPE__FLUESC_ACTIVATED); - } - } - //ue_context_p->ue_context.ue_release_timer = 0; - ue_context_p->ue_context.ue_reestablishment_timer = 1; - // remove UE after 100 frames after RRCConnectionReestablishmentRelease is triggered - ue_context_p->ue_context.ue_reestablishment_timer_thres = 1000; - } - break; - - case UL_DCCH_MessageType__c1_PR_rrcConnectionSetupComplete: -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC Connection SetupComplete\n"); - - for (i = 0; i < sdu_sizeP; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]); - } - - LOG_F(RRC,"\n"); -#endif - - MSC_LOG_RX_MESSAGE( - MSC_RRC_ENB, - MSC_RRC_UE, - Rx_sdu, - sdu_sizeP, - MSC_AS_TIME_FMT" RRCConnectionSetupComplete UE %x size %u", - MSC_AS_TIME_ARGS(ctxt_pP), - ue_context_p->ue_context.rnti, - sdu_sizeP); - - LOG_D(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" RLC RB %02d --- RLC_DATA_IND %d bytes " - "(RRCConnectionSetupComplete) ---> RRC_eNB\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - DCCH, - sdu_sizeP); - - if (ul_dcch_msg->message.choice.c1.choice.rrcConnectionSetupComplete.criticalExtensions.present == - RRCConnectionSetupComplete__criticalExtensions_PR_c1) { - if (ul_dcch_msg->message.choice.c1.choice.rrcConnectionSetupComplete.criticalExtensions.choice.c1. - present == - RRCConnectionSetupComplete__criticalExtensions__c1_PR_rrcConnectionSetupComplete_r8) { - rrc_eNB_process_RRCConnectionSetupComplete( - ctxt_pP, - ue_context_p, - &ul_dcch_msg->message.choice.c1.choice.rrcConnectionSetupComplete.criticalExtensions.choice.c1.choice.rrcConnectionSetupComplete_r8); - ue_context_p->ue_context.Status = RRC_CONNECTED; - LOG_I(RRC, PROTOCOL_RRC_CTXT_UE_FMT" UE State = RRC_CONNECTED \n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP)); - - //WARNING:Inform the controller about the UE activation. Should be moved to RRC agent in the future - if (rrc_agent_registered[ctxt_pP->module_id]) { - agent_rrc_xface[ctxt_pP->eNB_index]->flexran_agent_notify_ue_state_change(ctxt_pP->module_id, - ue_context_p->ue_id_rnti, - PROTOCOL__FLEX_UE_STATE_CHANGE_TYPE__FLUESC_ACTIVATED); - } - } - } - - ue_context_p->ue_context.ue_release_timer=0; - break; - - case UL_DCCH_MessageType__c1_PR_securityModeComplete: - T(T_ENB_RRC_SECURITY_MODE_COMPLETE, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); - -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC Security Mode Complete\n"); - - for (i = 0; i < sdu_sizeP; i++) eNB->pusch_vars[UE_id]{ - LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]); - } - - LOG_F(RRC,"\n"); -#endif - - MSC_LOG_RX_MESSAGE( - MSC_RRC_ENB, - MSC_RRC_UE, - Rx_sdu, - sdu_sizeP, - MSC_AS_TIME_FMT" securityModeComplete UE %x size %u", - MSC_AS_TIME_ARGS(ctxt_pP), - ue_context_p->ue_context.rnti, - sdu_sizeP); - - LOG_I(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" received securityModeComplete on UL-DCCH %d from UE\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - DCCH); - LOG_D(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" RLC RB %02d --- RLC_DATA_IND %d bytes " - "(securityModeComplete) ---> RRC_eNB\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - DCCH, - sdu_sizeP); -#ifdef XER_PRINT - xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void *)ul_dcch_msg); -#endif - // confirm with PDCP about the security mode for DCCH - //rrc_pdcp_config_req (enb_mod_idP, frameP, 1,CONFIG_ACTION_SET_SECURITY_MODE, (ue_mod_idP * NB_RB_MAX) + DCCH, 0x77); - // continue the procedure - rrc_eNB_generate_UECapabilityEnquiry( - ctxt_pP, - ue_context_p); - break; - - case UL_DCCH_MessageType__c1_PR_securityModeFailure: - T(T_ENB_RRC_SECURITY_MODE_FAILURE, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); - -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC Security Mode Failure\n"); - - for (i = 0; i < sdu_sizeP; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]); - } - - LOG_F(RRC,"\n"); -#endif - - MSC_LOG_RX_MESSAGE( - MSC_RRC_ENB, - MSC_RRC_UE, - Rx_sdu, - sdu_sizeP, - MSC_AS_TIME_FMT" securityModeFailure UE %x size %u", - MSC_AS_TIME_ARGS(ctxt_pP), - ue_context_p->ue_context.rnti, - sdu_sizeP); - - LOG_W(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" RLC RB %02d --- RLC_DATA_IND %d bytes " - "(securityModeFailure) ---> RRC_eNB\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - DCCH, - sdu_sizeP); -#ifdef XER_PRINT - xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void *)ul_dcch_msg); -#endif - // cancel the security mode in PDCP - - // followup with the remaining procedure -//#warning "LG Removed rrc_eNB_generate_UECapabilityEnquiry after receiving securityModeFailure" - rrc_eNB_generate_UECapabilityEnquiry(ctxt_pP, ue_context_p); - break; - - case UL_DCCH_MessageType__c1_PR_ueCapabilityInformation: - T(T_ENB_RRC_UE_CAPABILITY_INFORMATION, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); - -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC UECapablility Information \n"); - - for (i = 0; i < sdu_sizeP; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]); - } - - LOG_F(RRC,"\n"); -#endif - - MSC_LOG_RX_MESSAGE( - MSC_RRC_ENB, - MSC_RRC_UE, - Rx_sdu, - sdu_sizeP, - MSC_AS_TIME_FMT" ueCapabilityInformation UE %x size %u", - MSC_AS_TIME_ARGS(ctxt_pP), - ue_context_p->ue_context.rnti, - sdu_sizeP); - - LOG_I(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" received ueCapabilityInformation on UL-DCCH %d from UE\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - DCCH); - LOG_D(RRC, - PROTOCOL_RRC_CTXT_UE_FMT" RLC RB %02d --- RLC_DATA_IND %d bytes " - "(UECapabilityInformation) ---> RRC_eNB\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - DCCH, - sdu_sizeP); -#ifdef XER_PRINT - xer_fprint(stdout, &asn_DEF_UL_DCCH_Message, (void *)ul_dcch_msg); -#endif - LOG_I(RRC, "got UE capabilities for UE %x\n", ctxt_pP->rnti); - if (ue_context_p->ue_context.UE_Capability) { - LOG_I(RRC, "freeing old UE capabilities for UE %x\n", ctxt_pP->rnti); - asn_DEF_UE_EUTRA_Capability.free_struct(&asn_DEF_UE_EUTRA_Capability, - ue_context_p->ue_context.UE_Capability, 0); - ue_context_p->ue_context.UE_Capability = 0; - } - dec_rval = uper_decode(NULL, - &asn_DEF_UE_EUTRA_Capability, - (void **)&ue_context_p->ue_context.UE_Capability, - ul_dcch_msg->message.choice.c1.choice.ueCapabilityInformation.criticalExtensions. - choice.c1.choice.ueCapabilityInformation_r8.ue_CapabilityRAT_ContainerList.list. - array[0]->ueCapabilityRAT_Container.buf, - ul_dcch_msg->message.choice.c1.choice.ueCapabilityInformation.criticalExtensions. - choice.c1.choice.ueCapabilityInformation_r8.ue_CapabilityRAT_ContainerList.list. - array[0]->ueCapabilityRAT_Container.size, 0, 0); -#ifdef XER_PRINT - xer_fprint(stdout, &asn_DEF_UE_EUTRA_Capability, ue_context_p->ue_context.UE_Capability); -#endif - - if ((dec_rval.code != RC_OK) && (dec_rval.consumed == 0)) { - LOG_E(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Failed to decode UE capabilities (%zu bytes)\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - dec_rval.consumed); - asn_DEF_UE_EUTRA_Capability.free_struct(&asn_DEF_UE_EUTRA_Capability, - ue_context_p->ue_context.UE_Capability, 0); - ue_context_p->ue_context.UE_Capability = 0; - } - -#if defined(ENABLE_USE_MME) - - if (EPC_MODE_ENABLED == 1) { - rrc_eNB_send_S1AP_UE_CAPABILITIES_IND(ctxt_pP, - ue_context_p, - ul_dcch_msg); - } -#else - ue_context_p->ue_context.nb_of_e_rabs = 1; - for (i = 0; i < ue_context_p->ue_context.nb_of_e_rabs; i++){ - ue_context_p->ue_context.e_rab[i].status = E_RAB_STATUS_NEW; - ue_context_p->ue_context.e_rab[i].param.e_rab_id = 1+i; - ue_context_p->ue_context.e_rab[i].param.qos.qci=9; - } - ue_context_p->ue_context.setup_e_rabs =ue_context_p->ue_context.nb_of_e_rabs; -#endif - - rrc_eNB_generate_defaultRRCConnectionReconfiguration(ctxt_pP, - ue_context_p, - RC.rrc[ctxt_pP->module_id]->HO_flag); - break; - - case UL_DCCH_MessageType__c1_PR_ulHandoverPreparationTransfer: - T(T_ENB_RRC_UL_HANDOVER_PREPARATION_TRANSFER, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); - - break; - - case UL_DCCH_MessageType__c1_PR_ulInformationTransfer: - T(T_ENB_RRC_UL_INFORMATION_TRANSFER, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); - - LOG_D(RRC,"[MSG] RRC UL Information Transfer \n"); -#ifdef RRC_MSG_PRINT - LOG_F(RRC,"[MSG] RRC UL Information Transfer \n"); - - for (i = 0; i < sdu_sizeP; i++) { - LOG_F(RRC,"%02x ", ((uint8_t*)Rx_sdu)[i]); - } - - LOG_F(RRC,"\n"); -#endif - - - MSC_LOG_RX_MESSAGE( - MSC_RRC_ENB, - MSC_RRC_UE, - Rx_sdu, - sdu_sizeP, - MSC_AS_TIME_FMT" ulInformationTransfer UE %x size %u", - MSC_AS_TIME_ARGS(ctxt_pP), - ue_context_p->ue_context.rnti, - sdu_sizeP); - -#if defined(ENABLE_USE_MME) - - if (EPC_MODE_ENABLED == 1) { - rrc_eNB_send_S1AP_UPLINK_NAS(ctxt_pP, - ue_context_p, - ul_dcch_msg); - } - -#endif - break; + uid_linear_allocator_init(&nr_rrc.nr_rrc[ctxt.module_id]->uid_allocator); + RB_INIT(&RC.nr_rrc[ctxt.module_id]->rrc_ue_head); - case UL_DCCH_MessageType__c1_PR_counterCheckResponse: - T(T_ENB_RRC_COUNTER_CHECK_RESPONSE, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); + RC.nr_rrc[ctxt.module_id]->initial_id2_s1ap_ids = hashtable_create (NUMBER_OF_UE_MAX * 2, NULL, NULL); + RC.nr_rrc[ctxt.module_id]->s1ap_id2_s1ap_ids = hashtable_create (NUMBER_OF_UE_MAX * 2, NULL, NULL); - break; + memcpy(&RC.nr_rrc[ctxt.module_id]->configuration,configuration,sizeof(gNB_RrcConfigurationReq)); -#if defined(Rel10) || defined(Rel14) + /// System Information INIT - case UL_DCCH_MessageType__c1_PR_ueInformationResponse_r9: - T(T_ENB_RRC_UE_INFORMATION_RESPONSE_R9, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); + LOG_I(NR_RRC, PROTOCOL_NRRRC_CTXT_FMT" Checking release \n",PROTOCOL_NRRRC_CTXT_ARGS(&ctxt)); - break; + #ifdef CBA - case UL_DCCH_MessageType__c1_PR_proximityIndication_r9: - T(T_ENB_RRC_PROXIMITY_INDICATION_R9, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { + for (j = 0; j < NUM_MAX_CBA_GROUP; j++) { + RC.nr_rrc[ctxt.module_id]->carrier[CC_id].cba_rnti[j] = CBA_OFFSET + j; + } - break; + if (RC.nr_rrc[ctxt.module_id]->carrier[CC_id].num_active_cba_groups > NUM_MAX_CBA_GROUP) { + RC.nr_rrc[ctxt.module_id]->carrier[CC_id].num_active_cba_groups = NUM_MAX_CBA_GROUP; + } - case UL_DCCH_MessageType__c1_PR_rnReconfigurationComplete_r10: - T(T_ENB_RRC_RECONFIGURATION_COMPLETE_R10, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); + LOG_D(NR_RRC, + PROTOCOL_NRRRC_CTXT_FMT" Initialization of 4 cba_RNTI values (%x %x %x %x) num active groups %d\n", + PROTOCOL_NRRRC_CTXT_ARGS(&ctxt), + gnb_mod_idP, RC.nr_rrc[ctxt.module_id]->carrier[CC_id].cba_rnti[0], + RC.nr_rrc[ctxt.module_id]->carrier[CC_id].cba_rnti[1], + RC.nr_rrc[ctxt.module_id]->carrier[CC_id].cba_rnti[2], + RC.nr_rrc[ctxt.module_id]->carrier[CC_id].cba_rnti[3], + RC.nr_rrc[ctxt.module_id]->carrier[CC_id].num_active_cba_groups); + } - break; + #endif - case UL_DCCH_MessageType__c1_PR_mbmsCountingResponse_r10: - T(T_ENB_RRC_MBMS_COUNTING_RESPONSE_R10, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { + init_NR_SI(&ctxt, + CC_id + #if defined(ENABLE_ITTI) + ,configuration + #endif + ); + for (int ue_id = 0; ue_id < NUMBER_OF_UE_MAX; ue_id++){ + RC.nr_rrc[ctxt.module_id]->carrier[CC_id].sizeof_paging[ue_id] = 0; + RC.nr_rrc[ctxt.module_id]->carrier[CC_id].paging[ue_id] = (uint8_t*) malloc16(256); + } - break; + }//END for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) - case UL_DCCH_MessageType__c1_PR_interFreqRSTDMeasurementIndication_r10: - T(T_ENB_RRC_INTER_FREQ_RSTD_MEASUREMENT_INDICATION, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); + //rrc_init_NR_global_param(); - break; -#endif + for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { + openair_rrc_top_init_gNB(RC.nr_rrc[ctxt.module_id]->carrier[CC_id].MBMS_flag,0); + } - default: - T(T_ENB_RRC_UNKNOW_MESSAGE, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), - T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); + openair_nrrrc_on(&ctxt); - LOG_E(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Unknown message %s:%u\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - __FILE__, __LINE__); - return -1; - } + return 0; - return 0; - } else { - LOG_E(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Unknown error %s:%u\n", - PROTOCOL_RRC_CTXT_UE_ARGS(ctxt_pP), - __FILE__, __LINE__); - return -1; - } +}//END openair_rrc_eNB_configuration -} +///---------------------------------------------------------------------------------------------------------------/// +///---------------------------------------------------------------------------------------------------------------/// #if defined(ENABLE_ITTI) -void rrc_eNB_reconfigure_DRBs (const protocol_ctxt_t* const ctxt_pP, - rrc_eNB_ue_context_t* ue_context_pP){ - - int i; - int e_rab_done=0; - for (i = 0; - i < 3;//NB_RB_MAX - 3; // S1AP_MAX_E_RAB - i++) { - - if ( ue_context_pP->ue_context.e_rab[i].status < E_RAB_STATUS_DONE){ - ue_context_pP->ue_context.e_rab[i].status = E_RAB_STATUS_NEW; - ue_context_pP->ue_context.e_rab[i].param.e_rab_id = i + 1; - ue_context_pP->ue_context.e_rab[i].param.qos.qci = i % 9; - ue_context_pP->ue_context.e_rab[i].param.qos.allocation_retention_priority.priority_level= i % PRIORITY_LEVEL_LOWEST; - ue_context_pP->ue_context.e_rab[i].param.qos.allocation_retention_priority.pre_emp_capability= PRE_EMPTION_CAPABILITY_DISABLED; - ue_context_pP->ue_context.e_rab[i].param.qos.allocation_retention_priority.pre_emp_vulnerability= PRE_EMPTION_VULNERABILITY_DISABLED; - ue_context_pP->ue_context.e_rab[i].param.nas_pdu.buffer = NULL; - ue_context_pP->ue_context.e_rab[i].param.nas_pdu.length = 0; - // memset (ue_context_pP->ue_context.e_rab[i].param.sgw_addr.buffer,0,20); - ue_context_pP->ue_context.e_rab[i].param.sgw_addr.length = 0; - ue_context_pP->ue_context.e_rab[i].param.gtp_teid=0; - - ue_context_pP->ue_context.nb_of_e_rabs++; - e_rab_done++; - LOG_I(RRC,"setting up the dedicated DRBs %d (index %d) status %d \n", - ue_context_pP->ue_context.e_rab[i].param.e_rab_id, i, ue_context_pP->ue_context.e_rab[i].status); - } - } - ue_context_pP->ue_context.setup_e_rabs+=e_rab_done; - - rrc_eNB_generate_dedicatedRRCConnectionReconfiguration(ctxt_pP, ue_context_pP, 0); -} - -//----------------------------------------------------------------------------- -void* -rrc_enb_task( - void* args_p -) -//----------------------------------------------------------------------------- -{ +void* rrc_gnb_task(void* args_p){ MessageDef *msg_p; const char *msg_name_p; - instance_t instance; - int result; + instance_t instance; + int result; SRB_INFO *srb_info_p; - int CC_id; + int CC_id; + protocol_ctxt_t ctxt; + + itti_mark_task_ready(TASK_RRC_GNB); + LOG_I(NR_RRC,"Entering main loop of NR_RRC message task\n"); - protocol_ctxt_t ctxt; - itti_mark_task_ready(TASK_RRC_ENB); - LOG_I(RRC,"Entering main loop of RRC message task\n"); while (1) { - // Wait for a message - itti_receive_msg(TASK_RRC_ENB, &msg_p); + // Wait for a message + itti_receive_msg(TASK_RRC_GNB, &msg_p); msg_name_p = ITTI_MSG_NAME(msg_p); instance = ITTI_MSG_INSTANCE(msg_p); @@ -7094,7 +315,7 @@ rrc_enb_task( switch (ITTI_MSG_ID(msg_p)) { case TERMINATE_MESSAGE: - LOG_W(RRC, " *** Exiting RRC thread\n"); + LOG_W(RRC, " *** Exiting NR_RRC thread\n"); itti_exit_task(); break; @@ -7103,56 +324,12 @@ rrc_enb_task( break; /* Messages from MAC */ - case RRC_MAC_CCCH_DATA_IND: - PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, - instance, - ENB_FLAG_YES, - RRC_MAC_CCCH_DATA_IND(msg_p).rnti, - msg_p->ittiMsgHeader.lte_time.frame, - msg_p->ittiMsgHeader.lte_time.slot); - LOG_I(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Received %s\n", - PROTOCOL_RRC_CTXT_UE_ARGS(&ctxt), - msg_name_p); - CC_id = RRC_MAC_CCCH_DATA_IND(msg_p).CC_id; - srb_info_p = &RC.rrc[instance]->carrier[CC_id].Srb0; - - LOG_I(RRC,"Decoding CCCH : inst %d, CC_id %d, ctxt %p, sib_info_p->Rx_buffer.payload_size %d\n", - instance,CC_id,&ctxt, RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size); - AssertFatal(RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size < RRC_BUFFER_SIZE_MAX, - "CCCH message has size %d > %d\n", - RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size,RRC_BUFFER_SIZE_MAX); - memcpy(srb_info_p->Rx_buffer.Payload, - RRC_MAC_CCCH_DATA_IND(msg_p).sdu, - RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size); - srb_info_p->Rx_buffer.payload_size = RRC_MAC_CCCH_DATA_IND(msg_p).sdu_size; - - rrc_eNB_decode_ccch(&ctxt, srb_info_p, CC_id); - break; /* Messages from PDCP */ - case RRC_DCCH_DATA_IND: - PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt, - instance, - ENB_FLAG_YES, - RRC_DCCH_DATA_IND(msg_p).rnti, - msg_p->ittiMsgHeader.lte_time.frame, - msg_p->ittiMsgHeader.lte_time.slot); - LOG_I(RRC, PROTOCOL_RRC_CTXT_UE_FMT" Received on DCCH %d %s\n", - PROTOCOL_RRC_CTXT_UE_ARGS(&ctxt), - RRC_DCCH_DATA_IND(msg_p).dcch_index, - msg_name_p); - rrc_eNB_decode_dcch(&ctxt, - RRC_DCCH_DATA_IND(msg_p).dcch_index, - RRC_DCCH_DATA_IND(msg_p).sdu_p, - RRC_DCCH_DATA_IND(msg_p).sdu_size); - // Message buffer has been processed, free it now. - result = itti_free(ITTI_MSG_ORIGIN_ID(msg_p), RRC_DCCH_DATA_IND(msg_p).sdu_p); - AssertFatal(result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result); - break; -# if defined(ENABLE_USE_MME) +#if defined(ENABLE_USE_MME) /* Messages from S1AP */ case S1AP_DOWNLINK_NAS: @@ -7197,23 +374,23 @@ rrc_enb_task( /* Nothing to do. Apparently everything is done in S1AP processing */ //LOG_I(RRC, "[eNB %d] Received message %s, not processed because procedure not synched\n", //instance, msg_name_p); - if (rrc_eNB_get_ue_context(RC.rrc[instance], GTPV1U_ENB_DELETE_TUNNEL_RESP(msg_p).rnti) - && rrc_eNB_get_ue_context(RC.rrc[instance], GTPV1U_ENB_DELETE_TUNNEL_RESP(msg_p).rnti)->ue_context.ue_release_timer_rrc > 0) { - rrc_eNB_get_ue_context(RC.rrc[instance], GTPV1U_ENB_DELETE_TUNNEL_RESP(msg_p).rnti)->ue_context.ue_release_timer_rrc = - rrc_eNB_get_ue_context(RC.rrc[instance], GTPV1U_ENB_DELETE_TUNNEL_RESP(msg_p).rnti)->ue_context.ue_release_timer_thres_rrc; + if (rrc_eNB_get_ue_context(RC.nr_rrc[instance], GTPV1U_ENB_DELETE_TUNNEL_RESP(msg_p).rnti) + && rrc_eNB_get_ue_context(RC.nr_rrc[instance], GTPV1U_ENB_DELETE_TUNNEL_RESP(msg_p).rnti)->ue_context.ue_release_timer_rrc > 0) { + rrc_eNB_get_ue_context(RC.nr_rrc[instance], GTPV1U_ENB_DELETE_TUNNEL_RESP(msg_p).rnti)->ue_context.ue_release_timer_rrc = + rrc_eNB_get_ue_context(RC.nr_rrc[instance], GTPV1U_ENB_DELETE_TUNNEL_RESP(msg_p).rnti)->ue_context.ue_release_timer_thres_rrc; } break; -# endif +#endif - /* Messages from eNB app */ - case RRC_CONFIGURATION_REQ: - LOG_I(RRC, "[eNB %d] Received %s : %p\n", instance, msg_name_p,&RRC_CONFIGURATION_REQ(msg_p)); - openair_rrc_eNB_configuration(ENB_INSTANCE_TO_MODULE_ID(instance), &RRC_CONFIGURATION_REQ(msg_p)); + /* Messages from eNB app */ + case NRRRC_CONFIGURATION_REQ: + LOG_I(NR_RRC, "[gNB %d] Received %s : %p\n", instance, msg_name_p,&NRRRC_CONFIGURATION_REQ(msg_p)); + openair_rrc_gNB_configuration(GNB_INSTANCE_TO_MODULE_ID(instance), &NRRRC_CONFIGURATION_REQ(msg_p)); break; default: - LOG_E(RRC, "[eNB %d] Received unexpected message %s\n", instance, msg_name_p); + LOG_E(NR_RRC, "[gNB %d] Received unexpected message %s\n", instance, msg_name_p); break; } @@ -7222,11 +399,12 @@ rrc_enb_task( msg_p = NULL; } } -#endif + +#endif //END #if defined(ENABLE_ITTI) /*------------------------------------------------------------------------------*/ void -openair_rrc_top_init_eNB(int eMBMS_active,uint8_t HO_active) +openair_rrc_top_init_gNB(int eMBMS_active,uint8_t HO_active) //----------------------------------------------------------------------------- { @@ -7242,182 +420,29 @@ openair_rrc_top_init_eNB(int eMBMS_active,uint8_t HO_active) LOG_I(RRC,"[eNB] handover active state is %d \n", HO_active); for (module_id=0; module_id<NB_eNB_INST; module_id++) { - RC.rrc[module_id]->HO_flag = (uint8_t)HO_active; + RC.nr_rrc[module_id]->HO_flag = (uint8_t)HO_active; } -#if defined(Rel10) || defined(Rel14) + #if defined(Rel10) || defined(Rel14) LOG_I(RRC,"[eNB] eMBMS active state is %d \n", eMBMS_active); for (module_id=0; module_id<NB_eNB_INST; module_id++) { for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { - RC.rrc[module_id]->carrier[CC_id].MBMS_flag = (uint8_t)eMBMS_active; + RC.nr_rrc[module_id]->carrier[CC_id].MBMS_flag = (uint8_t)eMBMS_active; } } -#endif -#ifdef CBA + #endif + #ifdef CBA for (module_id=0; module_id<RC.nb_inst; module_id++) { for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { - RC.rrc[module_id]->carrier[CC_id].num_active_cba_groups = cba_group_active; - } - } - -#endif - } - - -} - -//----------------------------------------------------------------------------- -void -rrc_top_cleanup_eNB( - void -) -//----------------------------------------------------------------------------- -{ - - for (int i=0;i<RC.nb_inst;i++) free (RC.rrc[i]); - free(RC.rrc); -} - - -//----------------------------------------------------------------------------- -RRC_status_t -rrc_rx_tx( - protocol_ctxt_t* const ctxt_pP, - const int CC_id -) -//----------------------------------------------------------------------------- -{ - //uint8_t UE_id; - int32_t current_timestamp_ms, ref_timestamp_ms; - struct timeval ts; - struct rrc_eNB_ue_context_s *ue_context_p = NULL,*ue_to_be_removed = NULL; - -#ifdef LOCALIZATION - double estimated_distance; - protocol_ctxt_t ctxt; -#endif - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_RX_TX,VCD_FUNCTION_IN); - - check_handovers(ctxt_pP); - // counetr, and get the value and aggregate - - // check for UL failure - RB_FOREACH(ue_context_p, rrc_ue_tree_s, &(RC.rrc[ctxt_pP->module_id]->rrc_ue_head)) { - if ((ctxt_pP->frame == 0) && (ctxt_pP->subframe==0)) { - if (ue_context_p->ue_context.Initialue_identity_s_TMSI.presence == TRUE) { - LOG_I(RRC,"UE rnti %x:S-TMSI %x failure timer %d/8\n", - ue_context_p->ue_context.rnti, - ue_context_p->ue_context.Initialue_identity_s_TMSI.m_tmsi, - ue_context_p->ue_context.ul_failure_timer); - } - else { - LOG_I(RRC,"UE rnti %x failure timer %d/8\n", - ue_context_p->ue_context.rnti, - ue_context_p->ue_context.ul_failure_timer); - } - } - if (ue_context_p->ue_context.ul_failure_timer>0) { - ue_context_p->ue_context.ul_failure_timer++; - if (ue_context_p->ue_context.ul_failure_timer >= 8) { - // remove UE after 20 seconds after MAC has indicated UL failure - LOG_I(RRC,"Removing UE %x instance\n",ue_context_p->ue_context.rnti); - ue_to_be_removed = ue_context_p; - break; - } - } - if (ue_context_p->ue_context.ue_release_timer_s1>0) { - ue_context_p->ue_context.ue_release_timer_s1++; - if (ue_context_p->ue_context.ue_release_timer_s1 >= - ue_context_p->ue_context.ue_release_timer_thres_s1) { - LOG_I(RRC,"Removing UE %x instance Because of UE_CONTEXT_RELEASE_COMMAND not received after %d ms from sending request\n", - ue_context_p->ue_context.rnti, ue_context_p->ue_context.ue_release_timer_thres_s1); - ue_to_be_removed = ue_context_p; - break; - } - } - - if (ue_context_p->ue_context.ue_release_timer_rrc>0) { - ue_context_p->ue_context.ue_release_timer_rrc++; - if (ue_context_p->ue_context.ue_release_timer_rrc >= - ue_context_p->ue_context.ue_release_timer_thres_rrc) { - LOG_I(RRC,"Removing UE %x instance After UE_CONTEXT_RELEASE_Complete\n", ue_context_p->ue_context.rnti); - ue_to_be_removed = ue_context_p; - break; - } - } - - if (ue_context_p->ue_context.ue_reestablishment_timer>0) { - ue_context_p->ue_context.ue_reestablishment_timer++; - if (ue_context_p->ue_context.ue_reestablishment_timer >= - ue_context_p->ue_context.ue_reestablishment_timer_thres) { - LOG_I(RRC,"UE %d reestablishment_timer max\n",ue_context_p->ue_context.rnti); - ue_context_p->ue_context.ul_failure_timer = 20000; - ue_to_be_removed = ue_context_p; - ue_context_p->ue_context.ue_reestablishment_timer = 0; - break; - } - } - if (ue_context_p->ue_context.ue_release_timer>0) { - ue_context_p->ue_context.ue_release_timer++; - if (ue_context_p->ue_context.ue_release_timer >= - ue_context_p->ue_context.ue_release_timer_thres) { - LOG_I(RRC,"Removing UE %x instance\n",ue_context_p->ue_context.rnti); - ue_to_be_removed = ue_context_p; - break; - } - } - } - if (ue_to_be_removed) { - if(ue_to_be_removed->ue_context.ul_failure_timer >= 8) { - ue_to_be_removed->ue_context.ue_release_timer_s1 = 1; - ue_to_be_removed->ue_context.ue_release_timer_thres_s1 = 100; - ue_to_be_removed->ue_context.ue_release_timer = 0; - ue_to_be_removed->ue_context.ue_reestablishment_timer = 0; - } - rrc_eNB_free_UE(ctxt_pP->module_id,ue_to_be_removed); - if(ue_to_be_removed->ue_context.ul_failure_timer >= 8){ - ue_to_be_removed->ue_context.ul_failure_timer = 0; - } - } - -#ifdef RRC_LOCALIZATION - - /* for the localization, only primary CC_id might be relevant*/ - gettimeofday(&ts, NULL); - current_timestamp_ms = ts.tv_sec * 1000 + ts.tv_usec / 1000; - ref_timestamp_ms = RC.rrc[ctxt_pP->module_id]->reference_timestamp_ms; - RB_FOREACH(ue_context_p, rrc_ue_tree_s, &(RC.rrc[ctxt_pP->module_id]->rrc_ue_head)) { - ctxt = *ctxt_pP; - ctxt.rnti = ue_context_p->ue_context.rnti; - estimated_distance = rrc_get_estimated_ue_distance( - &ctxt, - CC_id, - RC.rrc[ctxt_pP->module_id]->loc_type); - - if ((current_timestamp_ms - ref_timestamp_ms > RC.rrc[ctxt_pP->module_id]->aggregation_period_ms) && - estimated_distance != -1) { - LOG_D(LOCALIZE, " RRC [UE/id %d -> eNB/id %d] timestamp %d frame %d estimated r = %f\n", - ctxt.rnti, - ctxt_pP->module_id, - current_timestamp_ms, - ctxt_pP->frame, - estimated_distance); - LOG_D(LOCALIZE, " RRC status %d\n", ue_context_p->ue_context.Status); - push_front(&RC.rrc[ctxt_pP->module_id]->loc_list, - estimated_distance); - RC.rrc[ctxt_pP->module_id]->reference_timestamp_ms = current_timestamp_ms; + RC.nr_rrc[module_id]->carrier[CC_id].num_active_cba_groups = cba_group_active; } } -#endif - (void)ts; /* remove gcc warning "unused variable" */ - (void)ref_timestamp_ms; /* remove gcc warning "unused variable" */ - (void)current_timestamp_ms; /* remove gcc warning "unused variable" */ + #endif - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_RX_TX,VCD_FUNCTION_OUT); - return (RRC_OK); -} + }//END if (RC.nb_inst > 0) +} \ No newline at end of file diff --git a/openair2/RRC/NR/rrc_types_NR.h b/openair2/RRC/NR/rrc_types_NR.h index f621d9b2dd05e7cd54d65200c0f157068fceb8a1..7b6c895ecd9aec9822dc11f9b504d7c400028dbf 100644 --- a/openair2/RRC/NR/rrc_types_NR.h +++ b/openair2/RRC/NR/rrc_types_NR.h @@ -51,14 +51,14 @@ typedef enum Rrc_Sub_State_NR_e { RRC_SUB_STATE_CONNECTED_NR, - RRC_SUB_STATE_INACTIVE_FIRST_NB_IoT = RRC_SUB_STATE_INACTIVE_NR, - RRC_SUB_STATE_INACTIVE_LAST_NB_IoT = RRC_SUB_STATE_INACTIVE_NR, + RRC_SUB_STATE_INACTIVE_FIRST_NR = RRC_SUB_STATE_INACTIVE_NR, + RRC_SUB_STATE_INACTIVE_LAST_NR = RRC_SUB_STATE_INACTIVE_NR, - RRC_SUB_STATE_IDLE_FIRST_NB_IoT = RRC_SUB_STATE_IDLE_SEARCHING_NR, - RRC_SUB_STATE_IDLE_LAST_NB_IoT = RRC_SUB_STATE_IDLE_NR, + RRC_SUB_STATE_IDLE_FIRST_NR = RRC_SUB_STATE_IDLE_SEARCHING_NR, + RRC_SUB_STATE_IDLE_LAST_NR = RRC_SUB_STATE_IDLE_NR, - RRC_SUB_STATE_CONNECTED_FIRST_NB_IoT = RRC_SUB_STATE_CONNECTED_NR, - RRC_SUB_STATE_CONNECTED_LAST_NB_IoT = RRC_SUB_STATE_CONNECTED_NR, + RRC_SUB_STATE_CONNECTED_FIRST_NR = RRC_SUB_STATE_CONNECTED_NR, + RRC_SUB_STATE_CONNECTED_LAST_NR = RRC_SUB_STATE_CONNECTED_NR, } Rrc_Sub_State_NR_t; #endif /* RRC_TYPES_H_ */ diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf index c4307f8ff2333d9bcbe202e719917912dbb947d9..5b865385861fe287efcc7944e01862a913c47760 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf @@ -2,15 +2,15 @@ Active_eNBs = ( "eNB-Eurecom-LTEBox"); # Asn1_verbosity, choice in: none, info, annoying Asn1_verbosity = "none"; -eNBs = +gNBs = ( { ////////// Identification parameters: - eNB_ID = 0xe00; + gNB_ID = 0xe00; cell_type = "CELL_MACRO_ENB"; - eNB_name = "eNB-Eurecom-LTEBox"; + gNB_name = "eNB-Eurecom-LTEBox"; // Tracking area code, 0x0000 and 0xfffe are reserved values tracking_area_code = "1"; @@ -25,43 +25,43 @@ eNBs = component_carriers = ( { - node_function = "3GPP_eNODEB"; - node_timing = "synch_to_ext_device"; - node_synch_ref = 0; - frame_type = "FDD"; - tdd_config = 3; - tdd_config_s = 0; - prefix_type = "NORMAL"; - eutra_band = 7; - downlink_frequency = 2685000000L; - uplink_frequency_offset = -120000000; - Nid_cell = 0; - N_RB_DL = 50; - Nid_cell_mbsfn = 0; - nb_antenna_ports = 1; - nb_antennas_tx = 1; - nb_antennas_rx = 1; + node_function = "3GPP_eNODEB"; + node_timing = "synch_to_ext_device"; + node_synch_ref = 0; + frame_type = "FDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 7; + downlink_frequency = 2685000000L; + uplink_frequency_offset = -120000000; + Nid_cell = 0; + N_RB_DL = 50; + Nid_cell_mbsfn = 0; + nb_antenna_ports = 1; + nb_antennas_tx = 1; + nb_antennas_rx = 1; tx_gain = 90; rx_gain = 125; - pbch_repetition = "FALSE"; - prach_root = 0; - prach_config_index = 0; - prach_high_speed = "DISABLE"; - prach_zero_correlation = 1; - prach_freq_offset = 2; - pucch_delta_shift = 1; - pucch_nRB_CQI = 0; - pucch_nCS_AN = 0; - pucch_n1_AN = 32; - pdsch_referenceSignalPower = -27; - pdsch_p_b = 0; - pusch_n_SB = 1; - pusch_enable64QAM = "DISABLE"; + pbch_repetition = "FALSE"; + prach_root = 0; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 0; + pucch_nCS_AN = 0; + pucch_n1_AN = 32; + pdsch_referenceSignalPower = -27; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; pusch_hoppingMode = "interSubFrame"; pusch_hoppingOffset = 0; - pusch_groupHoppingEnabled = "ENABLE"; - pusch_groupAssignment = 0; - pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; pusch_nDMRS1 = 1; phich_duration = "NORMAL"; phich_resource = "ONESIXTH"; @@ -79,7 +79,7 @@ eNBs = pucch_deltaF_Format1b = "deltaF3"; pucch_deltaF_Format2 = "deltaF0"; pucch_deltaF_Format2a = "deltaF0"; - pucch_deltaF_Format2b = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; rach_numberOfRA_Preambles = 64; rach_preamblesGroupAConfig = "DISABLE"; @@ -97,14 +97,14 @@ eNBs = pcch_default_PagingCycle = 128; pcch_nB = "oneT"; - bcch_modificationPeriodCoeff = 2; - ue_TimersAndConstants_t300 = 1000; - ue_TimersAndConstants_t301 = 1000; - ue_TimersAndConstants_t310 = 1000; - ue_TimersAndConstants_t311 = 10000; - ue_TimersAndConstants_n310 = 20; - ue_TimersAndConstants_n311 = 1; - ue_TransmissionMode = 1; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + ue_TransmissionMode = 1; } ); @@ -217,3 +217,222 @@ NETWORK_CONTROLLER : rrc_log_verbosity ="medium"; }; + + + + +Active_gNBs = ( "gNB_Eurecom_5GNRBox"); +# Asn1_verbosity, choice in: none, info, annoying +Asn1_verbosity = "none"; + +gNBs = +( + { + ////////// Identification parameters: + gNB_ID = 0xe00; + + cell_type = "CELL_MACRO_GNB"; + + gNB_name = "gNB_Eurecom_LTEBox"; + + // Tracking area code, 0x0000 and 0xfffe are reserved values + tracking_area_code = "1"; + + mobile_country_code = "208"; + + mobile_network_code = "93"; + + tr_s_preference = "local_mac" + + ////////// Physical parameters: + + component_carriers = ( + { + node_function = "3GPP_gNODEB"; + node_timing = "synch_to_ext_device"; + node_synch_ref = 0; + frame_type = "FDD"; + DL_prefix_type = "NORMAL"; + UL_prefix_type = "NORMAL"; + eutra_band = 7; + downlink_frequency = 2685000000L; + uplink_frequency_offset = -120000000; + Nid_cell = 0; + N_RB_DL = 50; + nb_antenna_ports = 1; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + tx_gain = 90; + rx_gain = 125; + MIB_subCarrierSpacingCommon = 0; + MIB_dmrs_TypeA_Position = 0; + pdcch_ConfigSIB1 = 0; + SIB1_frequencyOffsetSSB = 0; + SIB1_ssb_PeriodicityServingCell = 0; + SIB1_ss_PBCH_BlockPower = 0; + absoluteFrequencySSB = 0; + ssb_SubcarrierOffset = 0; + DL_FreqBandIndicatorNR = 0; + DL_absoluteFrequencyPointA = 0; + DL_offsetToCarrier = 0; + DL_SubcarrierSpacing = 0; + DL_SCS_SpecificCarrier_k0 = 0; + DL_carrierBandwidth = 0; + DL_locationAndBandwidth = 0; + UL_FreqBandIndicatorNR = 0; + UL_absoluteFrequencyPointA = 0; + FrequencyInfoUL_p_Max = 0; + frequencyShift7p5khz = 0; + UL_offsetToCarrier = 0; + UL_SubcarrierSpacing = 0; + UL_SCS_SpecificCarrier_k0 = 0; + UL_carrierBandwidth = 0; + UL_locationAndBandwidth = 0; + ServingCellConfigCommon_ssb_periodicityServingCell = 0; + ServingCellConfigCommon_dmrs_TypeA_Position = 0; + NIA_SubcarrierSpacing = 0; + ServingCellConfigCommon_ss_PBCH_BlockPower = 0; + referenceSubcarrierSpacing = 0; + dl_UL_TransmissionPeriodicity = 0; + nrofDownlinkSlots = 0; + nrofDownlinkSymbols = 0; + nrofUplinkSlots = 0; + nrofUplinkSymbols = 0; + rach_totalNumberOfRA_Preambles = 0; + rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice = 0; + rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth = 0; + rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth = 0; + rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf = 0; + rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one = 0; + rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two = 0; + rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four = 0; + rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight = 0; + rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen = 0; + rach_groupBconfigured = NULL; + rach_ra_Msg3SizeGroupA = 0; + rach_messagePowerOffsetGroupB = 0; + rach_numberOfRA_PreamblesGroupA = 0; + rach_ra_ContentionResolutionTimer = 0; + rsrp_ThresholdSSB = 0; + rsrp_ThresholdSSB_SUL = 0; + prach_RootSequenceIndex_choice = 0; + prach_RootSequenceIndex_l839 = 0; + prach_RootSequenceIndex_l139 = 0; + prach_msg1_SubcarrierSpacing = 0; + restrictedSetConfig = 0; + msg3_transformPrecoding = 0; + prach_ConfigurationIndex = 0; + prach_msg1_FDM = 0; + prach_msg1_FrequencyStart = 0; + zeroCorrelationZoneConfig = 0; + preambleReceivedTargetPower = 0; + preambleTransMax = 0; + powerRampingStep = 0; + ra_ResponseWindow = 0; + groupHoppingEnabledTransformPrecoding = NULL; + msg3_DeltaPreamble = 0; + p0_NominalWithGrant = 0; + PUSCH_TimeDomainResourceAllocation_k2 = 0; + PUSCH_TimeDomainResourceAllocation_mappingType = 0; + pucch_GroupHopping = 0; + p0_nominal = 0; + PDSCH_TimeDomainResourceAllocation_k0 = 0; + PDSCH_TimeDomainResourceAllocation_mappingType = 0; + rateMatchPatternId = 0; + RateMatchPattern_patternType = 0; + symbolsInResourceBlock = 0; + periodicityAndPattern = 0; + RateMatchPattern_controlResourceSet = 0; + RateMatchPattern_subcarrierSpacing = 0; + RateMatchPattern_mode = 0; + searchSpaceSIB1 = 0; + searchSpaceOtherSystemInformation = 0; + pagingSearchSpace = 0; + ra_SearchSpace = 0; + rach_ra_ControlResourceSet = 0; + PDCCH_common_controlResourceSetId = 0; + PDCCH_common_ControlResourceSet_duration = 0; + PDCCH_cce_REG_MappingType = 0; + PDCCH_reg_BundleSize = 0; + PDCCH_interleaverSize = 0; + PDCCH_shiftIndex = 0; + PDCCH_precoderGranularity = 0; + tci_PresentInDCI = NULL; + SearchSpaceId = 0; + commonSearchSpaces_controlResourceSetId = 0; + SearchSpace_monitoringSlotPeriodicityAndOffset_choice = 0; + SearchSpace_monitoringSlotPeriodicityAndOffset_sl1 = 0; + SearchSpace_monitoringSlotPeriodicityAndOffset_sl2 = 0; + SearchSpace_monitoringSlotPeriodicityAndOffset_sl4 = 0; + SearchSpace_monitoringSlotPeriodicityAndOffset_sl5 = 0; + SearchSpace_monitoringSlotPeriodicityAndOffset_sl8 = 0; + SearchSpace_monitoringSlotPeriodicityAndOffset_sl10 = 0; + SearchSpace_monitoringSlotPeriodicityAndOffset_sl16 = 0; + SearchSpace_monitoringSlotPeriodicityAndOffset_sl20 = 0; + SearchSpace_nrofCandidates_aggregationLevel1 = 0; + SearchSpace_nrofCandidates_aggregationLevel2 = 0; + SearchSpace_nrofCandidates_aggregationLevel4 = 0; + SearchSpace_nrofCandidates_aggregationLevel8 = 0; + SearchSpace_nrofCandidates_aggregationLevel16 = 0; + SearchSpace_searchSpaceType = 0; + Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1 = 0; + Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2 = 0; + Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4 = 0; + Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8 = 0; + Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16 = 0; + Common_dci_Format2_3_monitoringPeriodicity = 0; + Common_dci_Format2_3_nrofPDCCH_Candidates = 0; + ue_Specific__dci_Formats = 0; + } + ); + + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; + + + ////////// MME parameters: + mme_ip_address = ( { ipv4 = "192.168.12.26"; + ipv6 = "192:168:30::17"; + active = "yes"; + preference = "ipv4"; + } + ); + + NETWORK_INTERFACES : + { + + ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.19/24"; + ENB_INTERFACE_NAME_FOR_S1U = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.19/24"; + ENB_PORT_FOR_S1U = 2152; # Spec 2152 + }; + } +);