diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index d18a7a40bd7270c1fe2da9dc80699bd330702636..6450e7d7db181016d7400c246f51d2d56c001829 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -333,7 +333,7 @@ add_custom_command ( add_list2_option(NR_RRC_ASN1_VERSION "Rel15" "ASN.1 version of NR_RRC interface") if (${NR_RRC_ASN1_VERSION} STREQUAL "Rel15") - set (RRC_GRAMMAR ${OPENAIR2_DIR}/RRC/NR/MESSAGES/ans1c/ASN1_files/NR-RRC-Definitions.asn) + set (RRC_GRAMMAR ${OPENAIR2_DIR}/RRC/NR/MESSAGES/asn1c/ASN1_files/NR-RRC-Definitions.asn) endif (${NR_RRC_ASN1_VERSION} STREQUAL "Rel15") set (NR_RRC_FULL_DIR ${asn1_generated_dir}/${NR_RRC_ASN1_VERSION}) diff --git a/openair2/COMMON/rrc_messages_types.h b/openair2/COMMON/rrc_messages_types.h index efb63eb70b97b47c13e63cf969341879a1a7a608..86612d3b5b2eb289e26dd30ed5de532873cacd48 100644 --- a/openair2/COMMON/rrc_messages_types.h +++ b/openair2/COMMON/rrc_messages_types.h @@ -64,6 +64,8 @@ typedef UL_DCCH_Message_t RrcUlDcchMessage; #define NBIOTRRC_CONFIGURATION_REQ(mSGpTR) (mSGpTR)->ittiMsg.nbiotrrc_configuration_req +#define NRRRC_CONFIGURATION_REQ(mSGpTR) (mSGpTR)->ittiMsg.nrrrc_configuration_req + #define NAS_KENB_REFRESH_REQ(mSGpTR) (mSGpTR)->ittiMsg.nas_kenb_refresh_req #define NAS_CELL_SELECTION_REQ(mSGpTR) (mSGpTR)->ittiMsg.nas_cell_selection_req #define NAS_CONN_ESTABLI_REQ(mSGpTR) (mSGpTR)->ittiMsg.nas_conn_establi_req @@ -87,13 +89,13 @@ typedef struct RrcStateInd_s { // eNB: ENB_APP -> RRC messages typedef struct RrcConfigurationReq_s { - uint32_t cell_identity; + uint32_t cell_identity; - uint16_t tac; + uint16_t tac; - uint16_t mcc; - uint16_t mnc; - uint8_t mnc_digit_length; + uint16_t mcc; + uint16_t mnc; + uint8_t mnc_digit_length; paging_drx_t default_drx; @@ -171,159 +173,250 @@ typedef struct RrcConfigurationReq_s { } RrcConfigurationReq; #define MAX_NUM_NBIOT_CELEVELS 3 typedef struct NbIoTRrcConfigurationReq_s { - uint32_t cell_identity; + uint32_t cell_identity; - uint16_t tac; + uint16_t tac; - uint16_t mcc; - uint16_t mnc; - uint8_t mnc_digit_length; - lte_frame_type_t frame_type; + uint16_t mcc; + uint16_t mnc; + uint8_t mnc_digit_length; + lte_frame_type_t frame_type; uint8_t tdd_config; uint8_t tdd_config_s; lte_prefix_type_t prefix_type; - lte_prefix_type_t prefix_type_UL; + lte_prefix_type_t prefix_type_UL; int16_t eutra_band; uint32_t downlink_frequency; int32_t uplink_frequency_offset; int16_t Nid_cell;// for testing, change later int16_t N_RB_DL;// for testing, change later //RACH - long rach_raResponseWindowSize_NB; - long rach_macContentionResolutionTimer_NB; - long rach_powerRampingStep_NB; - long rach_preambleInitialReceivedTargetPower_NB; - long rach_preambleTransMax_CE_NB; + long rach_raResponseWindowSize_NB; + long rach_macContentionResolutionTimer_NB; + long rach_powerRampingStep_NB; + long rach_preambleInitialReceivedTargetPower_NB; + long rach_preambleTransMax_CE_NB; //BCCH - long bcch_modificationPeriodCoeff_NB; + long bcch_modificationPeriodCoeff_NB; //PCCH - long pcch_defaultPagingCycle_NB; - long pcch_nB_NB; - long pcch_npdcch_NumRepetitionPaging_NB; + long pcch_defaultPagingCycle_NB; + long pcch_nB_NB; + long pcch_npdcch_NumRepetitionPaging_NB; //NPRACH - long nprach_CP_Length; - long nprach_rsrp_range; - long nprach_Periodicity[MAX_NUM_NBIOT_CELEVELS]; - long nprach_StartTime[MAX_NUM_NBIOT_CELEVELS]; - long nprach_SubcarrierOffset[MAX_NUM_NBIOT_CELEVELS]; - long nprach_NumSubcarriers[MAX_NUM_NBIOT_CELEVELS]; - long numRepetitionsPerPreambleAttempt_NB[MAX_NUM_NBIOT_CELEVELS]; - long nprach_SubcarrierMSG3_RangeStart; - long maxNumPreambleAttemptCE_NB; - long npdcch_NumRepetitions_RA[MAX_NUM_NBIOT_CELEVELS]; - long npdcch_StartSF_CSS_RA[MAX_NUM_NBIOT_CELEVELS]; - long npdcch_Offset_RA[MAX_NUM_NBIOT_CELEVELS]; + long nprach_CP_Length; + long nprach_rsrp_range; + long nprach_Periodicity[MAX_NUM_NBIOT_CELEVELS]; + long nprach_StartTime[MAX_NUM_NBIOT_CELEVELS]; + long nprach_SubcarrierOffset[MAX_NUM_NBIOT_CELEVELS]; + long nprach_NumSubcarriers[MAX_NUM_NBIOT_CELEVELS]; + long numRepetitionsPerPreambleAttempt_NB[MAX_NUM_NBIOT_CELEVELS]; + long nprach_SubcarrierMSG3_RangeStart; + long maxNumPreambleAttemptCE_NB; + long npdcch_NumRepetitions_RA[MAX_NUM_NBIOT_CELEVELS]; + long npdcch_StartSF_CSS_RA[MAX_NUM_NBIOT_CELEVELS]; + long npdcch_Offset_RA[MAX_NUM_NBIOT_CELEVELS]; //NPDSCH - long npdsch_nrs_Power; + long npdsch_nrs_Power; //NPUSCH - long npusch_ack_nack_numRepetitions_NB; - long npusch_srs_SubframeConfig_NB; - long npusch_threeTone_CyclicShift_r13; - long npusch_sixTone_CyclicShift_r13; - BOOLEAN_t npusch_groupHoppingEnabled; - long npusch_groupAssignmentNPUSCH_r13; + long npusch_ack_nack_numRepetitions_NB; + long npusch_srs_SubframeConfig_NB; + long npusch_threeTone_CyclicShift_r13; + long npusch_sixTone_CyclicShift_r13; + BOOLEAN_t npusch_groupHoppingEnabled; + long npusch_groupAssignmentNPUSCH_r13; //DL_GapConfig - long dl_GapThreshold_NB; - long dl_GapPeriodicity_NB; - long dl_GapDurationCoeff_NB; + long dl_GapThreshold_NB; + long dl_GapPeriodicity_NB; + long dl_GapDurationCoeff_NB; //Uplink power control Common - long npusch_p0_NominalNPUSCH; - long npusch_alpha; - long deltaPreambleMsg3; + long npusch_p0_NominalNPUSCH; + long npusch_alpha; + long deltaPreambleMsg3; //UE timers and constants - long ue_TimersAndConstants_t300_NB; - long ue_TimersAndConstants_t301_NB; - long ue_TimersAndConstants_t310_NB; - long ue_TimersAndConstants_t311_NB; - long ue_TimersAndConstants_n310_NB; - long ue_TimersAndConstants_n311_NB; + long ue_TimersAndConstants_t300_NB; + long ue_TimersAndConstants_t301_NB; + long ue_TimersAndConstants_t310_NB; + long ue_TimersAndConstants_t311_NB; + long ue_TimersAndConstants_n310_NB; + long ue_TimersAndConstants_n311_NB; } NbIoTRrcConfigurationReq; -// eNB: ENB_APP -> RRC messages -typedef struct RrcConfigurationReq_s { - uint32_t cell_identity; - - uint16_t tac; - - uint16_t mcc; - uint16_t mnc; - uint8_t mnc_digit_length; - - /* - paging_drx_t default_drx; +// gNB: GNB_APP -> RRC messages +typedef struct NRRrcConfigurationReq_s { + uint32_t cell_identity; + uint16_t tac; + uint16_t mcc; + uint16_t mnc; + uint8_t mnc_digit_length; int16_t nb_cc; 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]; - uint8_t pbch_repetition[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]; int16_t Nid_cell[MAX_NUM_CCs];// for testing, change later int16_t N_RB_DL[MAX_NUM_CCs];// for testing, change later int nb_antenna_ports[MAX_NUM_CCs]; - long prach_root[MAX_NUM_CCs]; - long prach_config_index[MAX_NUM_CCs]; - BOOLEAN_t prach_high_speed[MAX_NUM_CCs]; - long prach_zero_correlation[MAX_NUM_CCs]; - long prach_freq_offset[MAX_NUM_CCs]; - long pucch_delta_shift[MAX_NUM_CCs]; - long pucch_nRB_CQI[MAX_NUM_CCs]; - long pucch_nCS_AN[MAX_NUM_CCs]; -#if !defined(Rel10) && !defined(Rel14) - long pucch_n1_AN[MAX_NUM_CCs]; -#endif - long pdsch_referenceSignalPower[MAX_NUM_CCs]; - long pdsch_p_b[MAX_NUM_CCs]; - long pusch_n_SB[MAX_NUM_CCs]; - long pusch_hoppingMode[MAX_NUM_CCs]; - long pusch_hoppingOffset[MAX_NUM_CCs]; - BOOLEAN_t pusch_enable64QAM[MAX_NUM_CCs]; - BOOLEAN_t pusch_groupHoppingEnabled[MAX_NUM_CCs]; - long pusch_groupAssignment[MAX_NUM_CCs]; - BOOLEAN_t pusch_sequenceHoppingEnabled[MAX_NUM_CCs]; - long pusch_nDMRS1[MAX_NUM_CCs]; - long phich_duration[MAX_NUM_CCs]; - long phich_resource[MAX_NUM_CCs]; - BOOLEAN_t srs_enable[MAX_NUM_CCs]; - long srs_BandwidthConfig[MAX_NUM_CCs]; - long srs_SubframeConfig[MAX_NUM_CCs]; - BOOLEAN_t srs_ackNackST[MAX_NUM_CCs]; - BOOLEAN_t srs_MaxUpPts[MAX_NUM_CCs]; - long pusch_p0_Nominal[MAX_NUM_CCs]; - long pusch_alpha[MAX_NUM_CCs]; - long pucch_p0_Nominal[MAX_NUM_CCs]; - long msg3_delta_Preamble[MAX_NUM_CCs]; - long ul_CyclicPrefixLength[MAX_NUM_CCs]; - e_DeltaFList_PUCCH__deltaF_PUCCH_Format1 pucch_deltaF_Format1[MAX_NUM_CCs]; - e_DeltaFList_PUCCH__deltaF_PUCCH_Format1b pucch_deltaF_Format1b[MAX_NUM_CCs]; - e_DeltaFList_PUCCH__deltaF_PUCCH_Format2 pucch_deltaF_Format2[MAX_NUM_CCs]; - e_DeltaFList_PUCCH__deltaF_PUCCH_Format2a pucch_deltaF_Format2a[MAX_NUM_CCs]; - e_DeltaFList_PUCCH__deltaF_PUCCH_Format2b pucch_deltaF_Format2b[MAX_NUM_CCs]; - long rach_numberOfRA_Preambles[MAX_NUM_CCs]; - BOOLEAN_t rach_preamblesGroupAConfig[MAX_NUM_CCs]; - long rach_sizeOfRA_PreamblesGroupA[MAX_NUM_CCs]; - long rach_messageSizeGroupA[MAX_NUM_CCs]; - e_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB rach_messagePowerOffsetGroupB[MAX_NUM_CCs]; - long rach_powerRampingStep[MAX_NUM_CCs]; - long rach_preambleInitialReceivedTargetPower[MAX_NUM_CCs]; - long rach_preambleTransMax[MAX_NUM_CCs]; - long rach_raResponseWindowSize[MAX_NUM_CCs]; - long rach_macContentionResolutionTimer[MAX_NUM_CCs]; - long rach_maxHARQ_Msg3Tx[MAX_NUM_CCs]; - long bcch_modificationPeriodCoeff[MAX_NUM_CCs]; - long pcch_defaultPagingCycle[MAX_NUM_CCs]; - long pcch_nB[MAX_NUM_CCs]; - long ue_TimersAndConstants_t300[MAX_NUM_CCs]; - long ue_TimersAndConstants_t301[MAX_NUM_CCs]; - long ue_TimersAndConstants_t310[MAX_NUM_CCs]; - long ue_TimersAndConstants_t311[MAX_NUM_CCs]; - long ue_TimersAndConstants_n310[MAX_NUM_CCs]; - long ue_TimersAndConstants_n311[MAX_NUM_CCs]; - long ue_TransmissionMode[MAX_NUM_CCs]; - */ + + ///NR + //NR FrequencyInfoDL + long absoluteFrequencySSB[MAX_NUM_CCs]; + uint32_t ssb_SubcarrierOffset[MAX_NUM_CCs]; + long DL_FreqBandIndicatorNR[MAX_NUM_CCs]; + long DL_absoluteFrequencyPointA[MAX_NUM_CCs]; + + //NR DL SCS-SpecificCarrier + uint32_t DL_offsetToCarrier[MAX_NUM_CCs]; + long DL_SubcarrierSpacing[MAX_NUM_CCs]; + long DL_SCS_SpecificCarrier_k0[MAX_NUM_CCs]; + 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]; + + //NR FrequencyInfoUL + long UL_FreqBandIndicatorNR[MAX_NUM_CCs]; + long UL_absoluteFrequencyPointA[MAX_NUM_CCs]; + long FrequencyInfoUL_p_Max[MAX_NUM_CCs]; + long frequencyShift7p5khz[MAX_NUM_CCs]; + + //NR UL SCS-SpecificCarrier + uint32_t UL_offsetToCarrier[MAX_NUM_CCs]; + long UL_SubcarrierSpacing[MAX_NUM_CCs]; + long UL_SCS_SpecificCarrier_k0[MAX_NUM_CCs]; + uint32_t UL_carrierBandwidth[MAX_NUM_CCs]; + + // 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]; + + + //NR TDD-UL-DL-ConfigCommon + long referenceSubcarrierSpacing[MAX_NUM_CCs]; + long dl_UL_TransmissionPeriodicity[MAX_NUM_CCs]; + long nrofDownlinkSlots[MAX_NUM_CCs]; + long nrofDownlinkSymbols[MAX_NUM_CCs]; + long nrofUplinkSlots[MAX_NUM_CCs]; + long nrofUplinkSymbols[MAX_NUM_CCs]; + + //NR RACH-ConfigCommon + long rach_totalNumberOfRA_Preambles[MAX_NUM_CCs]; + long rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[MAX_NUM_CCs]; + long rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[MAX_NUM_CCs]; + long rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[MAX_NUM_CCs]; + long rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[MAX_NUM_CCs]; + long rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[MAX_NUM_CCs]; + long rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[MAX_NUM_CCs]; + uint32_t rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four[MAX_NUM_CCs]; + uint32_t rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight[MAX_NUM_CCs]; + uint32_t rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen[MAX_NUM_CCs]; + BOOLEAN_t rach_groupBconfigured[MAX_NUM_CCs]; + long rach_ra_Msg3SizeGroupA[MAX_NUM_CCs]; + long rach_messagePowerOffsetGroupB[MAX_NUM_CCs]; + long rach_numberOfRA_PreamblesGroupA[MAX_NUM_CCs]; + long rach_ra_ContentionResolutionTimer[MAX_NUM_CCs]; + long rsrp_ThresholdSSB[MAX_NUM_CCs]; + long rsrp_ThresholdSSB_SUL[MAX_NUM_CCs]; + long prach_RootSequenceIndex_choice[MAX_NUM_CCs]; + uint32_t prach_RootSequenceIndex_l839[MAX_NUM_CCs]; + uint32_t prach_RootSequenceIndex_l139[MAX_NUM_CCs]; + long prach_msg1_SubcarrierSpacing[MAX_NUM_CCs]; + long restrictedSetConfig[MAX_NUM_CCs]; + long msg3_transformPrecoding[MAX_NUM_CCs]; + //ssb-perRACH-OccasionAndCB-PreamblesPerSSB not sure + + //NR RACH-ConfigGeneric + uint32_t prach_ConfigurationIndex[MAX_NUM_CCs]; + long prach_msg1_FDM[MAX_NUM_CCs]; + long prach_msg1_FrequencyStart[MAX_NUM_CCs]; + uint32_t zeroCorrelationZoneConfig[MAX_NUM_CCs]; + long preambleReceivedTargetPower[MAX_NUM_CCs]; + long preambleTransMax[MAX_NUM_CCs]; + long powerRampingStep[MAX_NUM_CCs]; + long ra_ResponseWindow[MAX_NUM_CCs]; + + //NR PUSCH-ConfigCommon + BOOLEAN_t groupHoppingEnabledTransformPrecoding[MAX_NUM_CCs]; + long msg3_DeltaPreamble[MAX_NUM_CCs]; + long p0_NominalWithGrant[MAX_NUM_CCs]; + + ///NR PUSCH-TimeDomainResourceAllocation + uint32_t PUSCH_TimeDomainResourceAllocation_k2[MAX_NUM_CCs]; + long PUSCH_TimeDomainResourceAllocation_mappingType[MAX_NUM_CCs]; + + //NR PUCCH-ConfigCommon + long pucch_GroupHopping[MAX_NUM_CCs]; + long p0_nominal[MAX_NUM_CCs]; + + //NR PDSCH-ConfigCOmmon + //NR PDSCH-TimeDomainResourceAllocation + uint32_t PDSCH_TimeDomainResourceAllocation_k0[MAX_NUM_CCs]; + long PDSCH_TimeDomainResourceAllocation_mappingType[MAX_NUM_CCs]; + + + //NR RateMatchPattern is used to configure one rate matching pattern for PDSCH + long rateMatchPatternId[MAX_NUM_CCs]; + long RateMatchPattern_patternType[MAX_NUM_CCs]; + long symbolsInResourceBlock[MAX_NUM_CCs]; + long periodicityAndPattern[MAX_NUM_CCs]; + long RateMatchPattern_controlResourceSet[MAX_NUM_CCs]; ///ControlResourceSetId + long RateMatchPattern_subcarrierSpacing[MAX_NUM_CCs]; + long RateMatchPattern_mode[MAX_NUM_CCs]; + + //NR PDCCH-ConfigCommon + long searchSpaceSIB1[MAX_NUM_CCs]; + long searchSpaceOtherSystemInformation[MAX_NUM_CCs]; + long pagingSearchSpace[MAX_NUM_CCs]; + long ra_SearchSpace[MAX_NUM_CCs]; + long rach_ra_ControlResourceSet[MAX_NUM_CCs]; + //NR PDCCH-ConfigCommon commonControlResourcesSets + long PDCCH_common_controlResourceSetId[MAX_NUM_CCs]; + long PDCCH_common_ControlResourceSet_duration[MAX_NUM_CCs]; + long PDCCH_cce_REG_MappingType[MAX_NUM_CCs]; + long PDCCH_reg_BundleSize[MAX_NUM_CCs]; + long PDCCH_interleaverSize[MAX_NUM_CCs]; + long PDCCH_shiftIndex[MAX_NUM_CCs]; + long PDCCH_precoderGranularity[MAX_NUM_CCs]; //Corresponds to L1 parameter 'CORESET-precoder-granuality' + BOOLEAN_t tci_PresentInDCI[MAX_NUM_CCs]; + + //NR PDCCH-ConfigCommon commonSearchSpaces + long SearchSpaceId[MAX_NUM_CCs]; + long commonSearchSpaces_controlResourceSetId[MAX_NUM_CCs]; + long SearchSpace_monitoringSlotPeriodicityAndOffset_choice[MAX_NUM_CCs]; + long SearchSpace_monitoringSlotPeriodicityAndOffset_sl1[MAX_NUM_CCs]; + long SearchSpace_monitoringSlotPeriodicityAndOffset_sl2[MAX_NUM_CCs]; + long SearchSpace_monitoringSlotPeriodicityAndOffset_sl4[MAX_NUM_CCs]; + long SearchSpace_monitoringSlotPeriodicityAndOffset_sl5[MAX_NUM_CCs]; + long SearchSpace_monitoringSlotPeriodicityAndOffset_sl8[MAX_NUM_CCs]; + long SearchSpace_monitoringSlotPeriodicityAndOffset_sl10[MAX_NUM_CCs]; + long SearchSpace_monitoringSlotPeriodicityAndOffset_sl16[MAX_NUM_CCs]; + long SearchSpace_monitoringSlotPeriodicityAndOffset_sl20[MAX_NUM_CCs]; + long SearchSpace_nrofCandidates_aggregationLevel1[MAX_NUM_CCs]; + long SearchSpace_nrofCandidates_aggregationLevel2[MAX_NUM_CCs]; + long SearchSpace_nrofCandidates_aggregationLevel4[MAX_NUM_CCs]; + long SearchSpace_nrofCandidates_aggregationLevel8[MAX_NUM_CCs]; + long SearchSpace_nrofCandidates_aggregationLevel16[MAX_NUM_CCs]; + long SearchSpace_searchSpaceType[MAX_NUM_CCs]; + long Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1[MAX_NUM_CCs]; + long Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2[MAX_NUM_CCs]; + long Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4[MAX_NUM_CCs]; + long Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8[MAX_NUM_CCs]; + long Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16[MAX_NUM_CCs]; + long Common_dci_Format2_3_monitoringPeriodicity[MAX_NUM_CCs]; + long Common_dci_Format2_3_nrofPDCCH_Candidates[MAX_NUM_CCs]; + long ue_Specific__dci_Formats[MAX_NUM_CCs]; + + } gNB_RrcConfigurationReq; diff --git a/openair2/ENB_APP/NRRRC_paramsvalues.h b/openair2/ENB_APP/NRRRC_paramsvalues.h new file mode 100644 index 0000000000000000000000000000000000000000..2dfe59a7268be6d045a130df0dca363141c7e926 --- /dev/null +++ b/openair2/ENB_APP/NRRRC_paramsvalues.h @@ -0,0 +1,93 @@ +/* + * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The OpenAirInterface Software Alliance licenses this file to You under + * the OAI Public License, Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.openairinterface.org/?page_id=698 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------------------- + * For more information about the OpenAirInterface (OAI) Software Alliance: + * contact@openairinterface.org + */ + +/*! \file openair2/GNB_APP/RRC_paramsvalues.h + * \brief macro definitions for RRC authorized and asn1 parameters values, to be used in paramdef_t/chechedparam_t structure initializations + * \author Francois TABURET + * \date 2017 + * \version 0.1 + * \company NOKIA BellLabs France + * \email: francois.taburet@nokia-bell-labs.com + * \note + * \warning + */ +#ifndef __NRRRC_PARAMSVALUES__H__ +#define __NRRRC_PARAMSVALUES__H__ +/* cell configuration section name */ +#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 FRAMETYPE_OKVALUES {"FDD","TDD"} +#define FRAMETYPE_MODVALUES { FDD, TDD} + +#define TDDCFG(A) TDD_Config__subframeAssignment_ ## A +#define TDDCONFIG_OKRANGE { TDDCFG(sa0), TDDCFG(sa6)} + +#define TDDCFGS(A) TDD_Config__specialSubframePatterns_ ## A +#define TDDCONFIGS_OKRANGE { TDDCFGS(ssp0), TDDCFGS(ssp8)} + +#define PREFIX_OKVALUES {"NORMAL","EXTENDED"} +#define PREFIX_MODVALUES { NORMAL, EXTENDED} + +#define PREFIXUL_OKVALUES {"NORMAL","EXTENDED"} +#define PREFIXUL_MODVALUES { NORMAL, EXTENDED} + +#define NRBDL_OKVALUES {6,15,25,50,75,100} + +#define UETIMER_T300_OKVALUES {100,200,300,400,600,1000,1500,2000} +#define UETT300(A) UE_TimersAndConstants__t300_ ## A +#define UETIMER_T300_MODVALUES { UETT300(ms100), UETT300(ms200),UETT300(ms300),UETT300(ms400),UETT300(ms600),UETT300(ms1000),UETT300(ms1500),UETT300(ms2000)} + +#define UETIMER_T301_OKVALUES {100,200,300,400,600,1000,1500,2000} +#define UETT301(A) UE_TimersAndConstants__t301_ ## A +#define UETIMER_T301_MODVALUES { UETT301(ms100), UETT301(ms200),UETT301(ms300),UETT301(ms400),UETT301(ms600),UETT301(ms1000),UETT301(ms1500),UETT301(ms2000)} + +#define UETIMER_T310_OKVALUES {0,50,100,200,500,1000,2000} +#define UETT310(A) UE_TimersAndConstants__t310_ ## A +#define UETIMER_T310_MODVALUES { UETT310(ms0), UETT310(ms50),UETT310(ms100),UETT310(ms200),UETT310(ms500),UETT310(ms1000),UETT310(ms2000)} + +#define UETIMER_T311_OKVALUES {1000,3110,5000,10000,15000,20000,31100} +#define UETT311(A) UE_TimersAndConstants__t311_ ## A +#define UETIMER_T311_MODVALUES { UETT311(ms1000), UETT311(ms3000),UETT311(ms5000),UETT311(ms10000),UETT311(ms15000),UETT311(ms20000),UETT311(ms30000)} + +#define UETIMER_N310_OKVALUES {1,2,3,4,6,8,10,20} +#define UETN310(A) UE_TimersAndConstants__n310_ ## A +#define UETIMER_N310_MODVALUES { UETN310(n1), UETN310(n2),UETN310(n3),UETN310(n4),UETN310(n6),UETN310(n8),UETN310(n10),UETN310(n20)} + +#define UETIMER_N311_OKVALUES {1,2,3,4,5,6,8,10} +#define UETN311(A) UE_TimersAndConstants__n311_ ## A +#define UETIMER_N311_MODVALUES { UETN311(n1), UETN311(n2),UETN311(n3),UETN311(n4),UETN311(n5),UETN311(n6),UETN311(n8),UETN311(n10)} + +#endif diff --git a/openair2/ENB_APP/gnb_app.c b/openair2/ENB_APP/gnb_app.c new file mode 100644 index 0000000000000000000000000000000000000000..ccef5e4663ab789334616e08f0aa49f0d2728a06 --- /dev/null +++ b/openair2/ENB_APP/gnb_app.c @@ -0,0 +1,291 @@ +/* + * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The OpenAirInterface Software Alliance licenses this file to You under + * the OAI Public License, Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.openairinterface.org/?page_id=698 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------------------- + * For more information about the OpenAirInterface (OAI) Software Alliance: + * contact@openairinterface.org + */ + +/* + gnb_app.c + ------------------- + AUTHOR : Laurent Winckel, Sebastien ROUX, Lionel GAUTHIER, Navid Nikaein + COMPANY : EURECOM + EMAIL : Lionel.Gauthier@eurecom.fr and Navid Nikaein +*/ + +#include <string.h> +#include <stdio.h> + +#include "gnb_app.h" +#include "gnb_config.h" +#include "assertions.h" +#include "common/ran_context.h" + +#include "log.h" + +#if defined(ENABLE_ITTI) +# include "intertask_interface.h" +# include "timer.h" +# if defined(ENABLE_USE_MME) +# include "s1ap_eNB.h" +# include "sctp_eNB_task.h" +# include "gtpv1u_eNB_task.h" +# endif + +extern unsigned char NB_gNB_INST; +#endif + +extern RAN_CONTEXT_t RC; + +#if defined(ENABLE_ITTI) + +/*------------------------------------------------------------------------------*/ +# if defined(ENABLE_USE_MME) +# define ENB_REGISTER_RETRY_DELAY 10 +# endif + +/*------------------------------------------------------------------------------*/ + +/* +static void configure_phy(module_id_t enb_id, const Enb_properties_array_t* enb_properties) +{ + MessageDef *msg_p; + int CC_id; + + msg_p = itti_alloc_new_message (TASK_ENB_APP, PHY_CONFIGURATION_REQ); + + for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) { + PHY_CONFIGURATION_REQ (msg_p).frame_type[CC_id] = enb_properties->properties[enb_id]->frame_type[CC_id]; + PHY_CONFIGURATION_REQ (msg_p).prefix_type[CC_id] = enb_properties->properties[enb_id]->prefix_type[CC_id]; + PHY_CONFIGURATION_REQ (msg_p).downlink_frequency[CC_id] = enb_properties->properties[enb_id]->downlink_frequency[CC_id]; + PHY_CONFIGURATION_REQ (msg_p).uplink_frequency_offset[CC_id] = enb_properties->properties[enb_id]->uplink_frequency_offset[CC_id]; + PHY_CONFIGURATION_REQ (msg_p).nb_antennas_tx[CC_id] = enb_properties->properties[enb_id]->nb_antennas_tx[CC_id]; + PHY_CONFIGURATION_REQ (msg_p).nb_antennas_rx[CC_id] = enb_properties->properties[enb_id]->nb_antennas_rx[CC_id]; + PHY_CONFIGURATION_REQ (msg_p).tx_gain[CC_id] = enb_properties->properties[enb_id]->tx_gain[CC_id]; + PHY_CONFIGURATION_REQ (msg_p).rx_gain[CC_id] = enb_properties->properties[enb_id]->rx_gain[CC_id]; + } + + itti_send_msg_to_task (TASK_PHY_ENB, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p); +} +*/ + +/*------------------------------------------------------------------------------*/ +static void configure_rrc(uint32_t enb_id) +{ + MessageDef *msg_p = NULL; + // int CC_id; + + msg_p = itti_alloc_new_message (TASK_ENB_APP, RRC_CONFIGURATION_REQ); + + if (RC.rrc[enb_id]) { + RCconfig_NRRRC(msg_p,enb_id, RC.rrc[enb_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); + + } + else AssertFatal(0,"RRC context for eNB %d not allocated\n",enb_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) +{ + uint32_t enb_id; + MessageDef *msg_p; + uint32_t register_enb_pending = 0; + + for (enb_id = enb_id_start; (enb_id < enb_id_end) ; enb_id++) { + { + s1ap_register_enb_req_t *s1ap_register_eNB; + + /* 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); + + RCconfig_S1(msg_p, enb_id); + + if (enb_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); + + LOG_I(ENB_APP,"[eNB %d] eNB_app_register for instance %d\n", enb_id, ENB_MODULE_ID_TO_INSTANCE(enb_id)); + + itti_send_msg_to_task (TASK_S1AP, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p); + + register_enb_pending++; + } + } + + return register_enb_pending; +} +# endif +#endif + +/*------------------------------------------------------------------------------*/ +void *eNB_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; +# if defined(ENABLE_USE_MME) + uint32_t register_enb_pending; + uint32_t registered_enb; + long enb_register_retry_timer_id; +# endif + uint32_t enb_id; + MessageDef *msg_p = NULL; + const char *msg_name = NULL; + instance_t instance; + int result; + /* for no gcc warnings */ + (void)instance; + + itti_mark_task_ready (TASK_ENB_APP); + + LOG_I(PHY, "%s() Task ready initialise structures\n", __FUNCTION__); + + RCconfig_L1(); + + 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"); + + AssertFatal (enb_nb <= RC.nb_inst, + "Number of eNB is greater than eNB defined in configuration file (%d/%d)!", + enb_nb, RC.nb_inst); + + LOG_I(ENB_APP,"Allocating eNB_RRC_INST for %d instances\n",RC.nb_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); + + 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); + } + +# 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); +# else + /* Start L2L1 task */ + msg_p = itti_alloc_new_message(TASK_ENB_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); + + 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"); + itti_exit_task (); + break; + + case MESSAGE_TEST: + LOG_I(ENB_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, + S1AP_REGISTER_ENB_CNF(msg_p).nb_mme); + + DevAssert(register_enb_pending > 0); + register_enb_pending--; + + /* Check if at least eNB is registered with one MME */ + if (S1AP_REGISTER_ENB_CNF(msg_p).nb_mme > 0) { + registered_enb++; + } + + /* 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 */ + MessageDef *msg_init_p; + + msg_init_p = itti_alloc_new_message (TASK_ENB_APP, INITIALIZE_MESSAGE); + itti_send_msg_to_task (TASK_L2L1, INSTANCE_DEFAULT, msg_init_p); + + } else { + uint32_t not_associated = enb_nb - registered_enb; + + 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); + + /* 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"); + + sleep(ENB_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); + } + } + } + + break; + + case S1AP_DEREGISTERED_ENB_IND: + LOG_W(ENB_APP, "[eNB %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); + + if (TIMER_HAS_EXPIRED (msg_p).timer_id == enb_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); + } + + break; +# endif + + default: + LOG_E(ENB_APP, "Received unexpected message %s\n", msg_name); + break; + } + + result = itti_free (ITTI_MSG_ORIGIN_ID(msg_p), msg_p); + AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result); + } while (1); + +#endif + + + return NULL; +} diff --git a/openair2/ENB_APP/gnb_app.h b/openair2/ENB_APP/gnb_app.h new file mode 100644 index 0000000000000000000000000000000000000000..3fd33f38b62b1dfcb5bbcf9abeb1591973c8d545 --- /dev/null +++ b/openair2/ENB_APP/gnb_app.h @@ -0,0 +1,38 @@ +/* + * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The OpenAirInterface Software Alliance licenses this file to You under + * the OAI Public License, Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.openairinterface.org/?page_id=698 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------------------- + * For more information about the OpenAirInterface (OAI) Software Alliance: + * contact@openairinterface.org + */ + +/* + gnb_app.h + ------------------- + AUTHOR : Laurent Winckel, Sebastien ROUX, Lionel GAUTHIER, Navid Nikaein + COMPANY : EURECOM + EMAIL : Lionel.Gauthier@eurecom.fr +*/ + +#ifndef GNB_APP_H_ +#define GNB_APP_H_ + +#include <stdint.h> + +void *gNB_app_task(void *args_p); + + +#endif /* GNB_APP_H_ */ diff --git a/openair2/ENB_APP/gnb_config.c b/openair2/ENB_APP/gnb_config.c new file mode 100644 index 0000000000000000000000000000000000000000..9e341cd7ef136849f9379f86ed875d1bb1b4cb65 --- /dev/null +++ b/openair2/ENB_APP/gnb_config.c @@ -0,0 +1,1958 @@ +#include <string.h> +#include <inttypes.h> + +#include "log.h" +#include "log_extern.h" +#include "assertions.h" +#include "gnb_config.h" +#include "UTIL/OTG/otg.h" +#include "UTIL/OTG/otg_externs.h" +#if defined(ENABLE_ITTI) +# include "intertask_interface.h" +# if defined(ENABLE_USE_MME) +# include "s1ap_eNB.h" +# include "sctp_eNB_task.h" +# endif +#endif +#include "sctp_default_values.h" +// #include "SystemInformationBlockType2.h" +// #include "LAYER2/MAC/extern.h" +// #include "LAYER2/MAC/proto.h" +#include "PHY/extern.h" +#include "targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h" +#include "nfapi_vnf.h" +#include "nfapi_pnf.h" + +#include "L1_paramdef.h" +#include "MACRLC_paramdef.h" +#include "common/config/config_userapi.h" +#include "RRC_config_tools.h" +#include "gnb_paramdef.h" + + +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; + + ///NR + //NR FrequencyInfoDL + long absoluteFrequencySSB = 0; + uint32_t ssb_SubcarrierOffset = 0; + long DL_FreqBandIndicatorNR = 0; + long 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; + + // NR BWP-DownlinkCommon + uint32_t DL_locationAndBandwidth = 0; + //NR_prefix_type_t DL_prefix_type[MAX_NUM_CCs]; + + //NR FrequencyInfoUL + long UL_FreqBandIndicatorNR = 0; + long UL_absoluteFrequencyPointA = 0; + long FrequencyInfoUL_p_Max = 0; + long 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; + + // NR BWP-UplinkCommon + uint32_t UL_locationAndBandwidth = 0; + //NR_prefix_type_t UL_prefix_type; + + + long ssb_periodicityServingCell = 0; + long dmrs_TypeA_Position = 0; + long NIA_SubcarrierSpacing = 0; + long 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; + + //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; + //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; + + //PUSCH-ConfigCommon + char* groupHoppingEnabledTransformPrecoding = NULL; + long msg3_DeltaPreamble = 0; + long p0_NominalWithGrant = 0; + + ///PUSCH-TimeDomainResourceAllocation + long PUSCH_TimeDomainResourceAllocation_k2 = 0; + long PUSCH_TimeDomainResourceAllocation_mappingType = 0; + + //PUCCH-ConfigCommon + long pucch_GroupHopping = 0; + long p0_nominal = 0; + + //PDSCH-ConfigCOmmon + //PDSCH-TimeDomainResourceAllocation + long PDSCH_TimeDomainResourceAllocation_k0 = 0; + long 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; + + //PDCCH-ConfigCommon + long searchSpaceSIB1 = 0; + long searchSpaceOtherSystemInformation = 0; + long pagingSearchSpace = 0; + long ra_SearchSpace = 0; + long 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; + + //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; + + paramdef_t GNBSParams[] = GNBSPARAMS_DESC; + + paramdef_t GNBParams[] = GNBPARAMS_DESC; + paramlist_def_t GNBParamList = {GNB_CONFIG_STRING_GNB_LIST,NULL,0}; + + checkedparam_t config_check_CCparams[] = CCPARAMS_CHECK; + paramdef_t CCsParams[] = CCPARAMS_DESC; + paramlist_def_t CCsParamList = {GNB_CONFIG_STRING_COMPONENT_CARRIERS,NULL,0}; + + 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); + + #if defined(ENABLE_ITTI) && defined(ENABLE_USE_MME) + + if (strcasecmp( *(GNBSParams[GNB_ASN1_VERBOSITY_IDX].strptr), GNB_CONFIG_STRING_ASN1_VERBOSITY_NONE) == 0) { + asn_debug = 0; + asn1_xer_print = 0; + } else if (strcasecmp( *(GNBSParams[GNB_ASN1_VERBOSITY_IDX].strptr), GNB_CONFIG_STRING_ASN1_VERBOSITY_INFO) == 0) { + asn_debug = 1; + asn1_xer_print = 1; + } else if (strcasecmp(*(GNBSParams[GNB_ASN1_VERBOSITY_IDX].strptr) , GNB_CONFIG_STRING_ASN1_VERBOSITY_ANNOYING) == 0) { + asn_debug = 1; + asn1_xer_print = 2; + } else { + asn_debug = 0; + asn1_xer_print = 0; + } + + #endif + + if (num_gnbs>0) { + // Output a list of all gNBs. + config_getlist( &GNBParamList,GNBParams,sizeof(GNBParams)/sizeof(paramdef_t),NULL); + + if (GNBParamList.paramarray[i][GNB_GNB_ID_IDX].uptr == NULL) { + // Calculate a default gNB ID + # if defined(ENABLE_USE_MME) + uint32_t hash; + hash = s1ap_generate_eNB_id (); + gnb_id = i + (hash & 0xFFFF8); + # else + gnb_id = i; + # endif + } else { + gnb_id = *(GNBParamList.paramarray[i][GNB_GNB_ID_IDX].uptr); + } + + printf("NRRRC %d: Southbound Transport %s\n",i,*(GNBParamList.paramarray[i][GNB_TRANSPORT_S_PREFERENCE_IDX].strptr)); + + if (strcmp(*(GNBParamList.paramarray[i][GNB_TRANSPORT_S_PREFERENCE_IDX].strptr), "local_mac") == 0) { + + } else if (strcmp(*(GNBParamList.paramarray[i][GNB_TRANSPORT_S_PREFERENCE_IDX].strptr), "cudu") == 0) { + rrc->eth_params_s.local_if_name = strdup(*(GNBParamList.paramarray[i][GNB_LOCAL_S_IF_NAME_IDX].strptr)); + rrc->eth_params_s.my_addr = strdup(*(GNBParamList.paramarray[i][GNB_LOCAL_S_ADDRESS_IDX].strptr)); + rrc->eth_params_s.remote_addr = strdup(*(GNBParamList.paramarray[i][GNB_REMOTE_S_ADDRESS_IDX].strptr)); + rrc->eth_params_s.my_portc = *(GNBParamList.paramarray[i][GNB_LOCAL_S_PORTC_IDX].uptr); + rrc->eth_params_s.remote_portc = *(GNBParamList.paramarray[i][GNB_REMOTE_S_PORTC_IDX].uptr); + rrc->eth_params_s.my_portd = *(GNBParamList.paramarray[i][GNB_LOCAL_S_PORTD_IDX].uptr); + rrc->eth_params_s.remote_portd = *(GNBParamList.paramarray[i][GNB_REMOTE_S_PORTD_IDX].uptr); + rrc->eth_params_s.transp_preference = ETH_UDP_MODE; + } else { // other midhaul + } + + // search if in active list + + for (k=0; k <num_gnbs ; k++) { + if (strcmp(GNBSParams[GNB_ACTIVE_GNBS_IDX].strlistptr[k], *(GNBParamList.paramarray[i][GNB_GNB_NAME_IDX].strptr) )== 0) { + + char gnbpath[MAX_OPTNAME_SIZE + 8]; + + NRRRC_CONFIGURATION_REQ (msg_p).cell_identity = gnb_id; + NRRRC_CONFIGURATION_REQ (msg_p).tac = (uint16_t)atoi( *(GNBParamList.paramarray[i][GNB_TRACKING_AREA_CODE_IDX].strptr) ); + NRRRC_CONFIGURATION_REQ (msg_p).mcc = (uint16_t)atoi( *(GNBParamList.paramarray[i][GNB_MOBILE_COUNTRY_CODE_IDX].strptr) ); + NRRRC_CONFIGURATION_REQ (msg_p).mnc = (uint16_t)atoi( *(GNBParamList.paramarray[i][GNB_MOBILE_NETWORK_CODE_IDX].strptr) ); + NRRRC_CONFIGURATION_REQ (msg_p).mnc_digit_length = strlen(*(GNBParamList.paramarray[i][GNB_MOBILE_NETWORK_CODE_IDX].strptr)); + AssertFatal((NRRRC_CONFIGURATION_REQ (msg_p).mnc_digit_length == 2) || + (NRRRC_CONFIGURATION_REQ (msg_p).mnc_digit_length == 3),"BAD MNC DIGIT LENGTH %d", + NRRRC_CONFIGURATION_REQ (msg_p).mnc_digit_length); + + // Parse optional physical parameters + sprintf(gnbpath,"%s.[%i]",GNB_CONFIG_STRING_GNB_LIST,k), + config_getlist( &CCsParamList,NULL,0,gnbpath); + + LOG_I(NRRRC,"num component carriers %d \n", num_component_carriers); + + if ( CCsParamList.numelt> 0) { + + char ccspath[MAX_OPTNAME_SIZE*2 + 16]; + + for (j = 0; j < CCsParamList.numelt ;j++) { + + sprintf(ccspath,"%s.%s.[%i]",gnbpath,GNB_CONFIG_STRING_COMPONENT_CARRIERS,j); + config_get( CCsParams,sizeof(CCsParams)/sizeof(paramdef_t),ccspath); + + nb_cc++; + + // NRRRC_CONFIGURATION_REQ (msg_p).tdd_config[j] = tdd_config; + // AssertFatal (tdd_config <= TDD_Config__subframeAssignment_sa6, + // "Failed to parse gNB configuration file %s, gnb %d illegal tdd_config %d (should be 0-%d)!", + // RC.config_file_name, i, tdd_config, TDD_Config__subframeAssignment_sa6); + + // NRRRC_CONFIGURATION_REQ (msg_p).tdd_config_s[j] = tdd_config_s; + // AssertFatal (tdd_config_s <= TDD_Config__specialSubframePatterns_ssp8, + // "Failed to parse gNB configuration file %s, gnb %d illegal tdd_config_s %d (should be 0-%d)!", + // RC.config_file_name, i, tdd_config_s, TDD_Config__specialSubframePatterns_ssp8); + + if (!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; + }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); + } + + NRRRC_CONFIGURATION_REQ (msg_p).eutra_band[j] = eutra_band; + NRRRC_CONFIGURATION_REQ (msg_p).downlink_frequency[j] = (uint32_t) downlink_frequency; + NRRRC_CONFIGURATION_REQ (msg_p).uplink_frequency_offset[j] = (unsigned int) uplink_frequency_offset; + NRRRC_CONFIGURATION_REQ (msg_p).Nid_cell[j]= Nid_cell; + + if (Nid_cell>503) { + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Nid_cell choice: 0...503 !\n", + RC.config_file_name, i, Nid_cell); + } + + NRRRC_CONFIGURATION_REQ (msg_p).N_RB_DL[j]= N_RB_DL; + + if ((N_RB_DL!=6) && (N_RB_DL!=15) && (N_RB_DL!=25) && (N_RB_DL!=50) && (N_RB_DL!=75) && (N_RB_DL!=100)) { + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for N_RB_DL choice: 6,15,25,50,75,100 !\n", + RC.config_file_name, i, N_RB_DL); + } + + if (strcmp(frame_type, "FDD") == 0) { + NRRRC_CONFIGURATION_REQ (msg_p).frame_type[j] = FDD; + }else if (strcmp(frame_type, "TDD") == 0) { + NRRRC_CONFIGURATION_REQ (msg_p).frame_type[j] = TDD; + }else { + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for frame_type choice: FDD or TDD !\n", + RC.config_file_name, i, frame_type); + } + + if (!prefix_type){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d define %s: NORMAL,EXTENDED!\n", + RC.config_file_name, i, ENB_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; + }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); + } + + NRRRC_CONFIGURATION_REQ (msg_p).eutra_band[j] = eutra_band; + NRRRC_CONFIGURATION_REQ (msg_p).downlink_frequency[j] = (uint32_t) downlink_frequency; + NRRRC_CONFIGURATION_REQ (msg_p).uplink_frequency_offset[j] = (unsigned int) uplink_frequency_offset; + + if (config_check_band_frequencies(j, + NRRRC_CONFIGURATION_REQ (msg_p).eutra_band[j], + NRRRC_CONFIGURATION_REQ (msg_p).downlink_frequency[j], + NRRRC_CONFIGURATION_REQ (msg_p).uplink_frequency_offset[j], + NRRRC_CONFIGURATION_REQ (msg_p).frame_type[j])) { + AssertFatal(0, "error calling enb_check_band_frequencies\n"); + } + + if ((nb_antenna_ports <1) || (nb_antenna_ports > 2)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, enb %d unknown value \"%d\" for nb_antenna_ports choice: 1..2 !\n", + RC.config_file_name, i, nb_antenna_ports); + } + NRRRC_CONFIGURATION_REQ (msg_p).nb_antenna_ports[j] = nb_antenna_ports; + + + //////////////////////////////////////////////////////////////////////////////// + //---------------------------NR--------Configuration--------------------------// + //////////////////////////////////////////////////////////////////////////////// + + ////////////////////////////////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", + RC.config_file_name, i, absoluteFrequencySSB); + } + + NRRRC_CONFIGURATION_REQ (msg_p).ssb_SubcarrierOffset[j] = ssb_SubcarrierOffset; + if ((ssb_SubcarrierOffset <1) || (ssb_SubcarrierOffset > 23)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for ssb_SubcarrierOffset choice: 1..23 !\n", + RC.config_file_name, i, ssb_SubcarrierOffset); + } + + NRRRC_CONFIGURATION_REQ (msg_p).DL_FreqBandIndicatorNR[j] = DL_FreqBandIndicatorNR; + if ((DL_FreqBandIndicatorNR <1) || (DL_FreqBandIndicatorNR > 1024)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for DL_FreqBandIndicatorNR choice: 1..1024 !\n", + RC.config_file_name, i, DL_FreqBandIndicatorNR); + } + + NRRRC_CONFIGURATION_REQ (msg_p).DL_absoluteFrequencyPointA[j] = DL_absoluteFrequencyPointA; + if ((DL_absoluteFrequencyPointA <0) || (DL_absoluteFrequencyPointA > 3279165)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for DL_absoluteFrequencyPointA choice: 0..3279165 !\n", + RC.config_file_name, i, DL_absoluteFrequencyPointA); + } + + + /////////////////////////////////NR DL SCS-SpecificCarrier/////////////////////////// + NRRRC_CONFIGURATION_REQ (msg_p).DL_offsetToCarrier[j] = DL_offsetToCarrier; + if ((DL_offsetToCarrier <0) || (DL_offsetToCarrier > 2199)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for DL_offsetToCarrier choice: 0..11 !\n", + RC.config_file_name, i, DL_offsetToCarrier); + } + + if (strcmp(DL_SubcarrierSpacing,"kHz15")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).DL_SubcarrierSpacing[j] = SubcarrierSpacing_kHz15; + }else if (strcmp(pusch_alpha,"kHz30")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).DL_SubcarrierSpacing[j] = SubcarrierSpacing_kHz30; + }else if (strcmp(pusch_alpha,"kHz60")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).DL_SubcarrierSpacing[j] = SubcarrierSpacing_kHz60; + }else if (strcmp(pusch_alpha,"kHz120")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).DL_SubcarrierSpacing[j] = SubcarrierSpacing_kHz120; + }else if (strcmp(pusch_alpha,"kHz240")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).DL_SubcarrierSpacing[j] = SubcarrierSpacing_kHz240; + }else { + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for DL_SubcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n", + RC.config_file_name, i, DL_SubcarrierSpacing); + } + + switch (DL_SCS_SpecificCarrier_k0) { + case -6: + NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SpecificCarrier_k0[j] = SCS_SpecificCarrier__k0_n_6; + break; + + case 0: + NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SpecificCarrier_k0[j] = SCS_SpecificCarrier__k0_n0; + break; + + case 6: + NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SpecificCarrier_k0[j] = SCS_SpecificCarrier__k0_n6; + break; + + default: + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for DL_SCS_SpecificCarrier_k0 choice: -6,0,6 !\n", + RC.config_file_name, i, DL_SCS_SpecificCarrier_k0); + break; + } + + NRRRC_CONFIGURATION_REQ (msg_p).DL_carrierBandwidth[j] = DL_carrierBandwidth; + if ((DL_carrierBandwidth <1) || (DL_carrierBandwidth > 275)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for DL_carrierBandwidth choice: 1..275 !\n", + RC.config_file_name, i, DL_carrierBandwidth); + } + + /////////////////////////////////NR BWP-DownlinkCommon/////////////////////////// + NRRRC_CONFIGURATION_REQ (msg_p).DL_locationAndBandwidth[j] = DL_locationAndBandwidth; + if ((DL_locationAndBandwidth <0) || (DL_locationAndBandwidth > 37949)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for DL_locationAndBandwidth choice: 0..11 !\n", + RC.config_file_name, i, DL_locationAndBandwidth); + } + + /////////////////////////////////NR FrequencyInfoUL////////////////////////////// + NRRRC_CONFIGURATION_REQ (msg_p).UL_FreqBandIndicatorNR[j] = UL_FreqBandIndicatorNR; + if ((UL_FreqBandIndicatorNR <1) || (UL_FreqBandIndicatorNR > 1024)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for UL_FreqBandIndicatorNR choice: 1..1024 !\n", + RC.config_file_name, i, UL_FreqBandIndicatorNR); + } + + NRRRC_CONFIGURATION_REQ (msg_p).UL_absoluteFrequencyPointA[j] = UL_absoluteFrequencyPointA; + if ((UL_absoluteFrequencyPointA <0) || (UL_absoluteFrequencyPointA > 3279165)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for UL_absoluteFrequencyPointA choice: 0..3279165 !\n", + RC.config_file_name, i, UL_absoluteFrequencyPointA); + } + + NRRRC_CONFIGURATION_REQ (msg_p).FrequencyInfoUL_p_Max[j] = FrequencyInfoUL_p_Max; + if ((FrequencyInfoUL_p_Max <-30) || (FrequencyInfoUL_p_Max > 33)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for FrequencyInfoUL_p_Max choice: -30..33 !\n", + RC.config_file_name, i, FrequencyInfoUL_p_Max); + } + + if (strcmp(frequencyShift7p5khz, "TRUE") == 0) { + RRC_CONFIGURATION_REQ (msg_p).frequencyShift7p5khz[j] = FrequencyInfoUL__frequencyShift7p5khz_true; + } + + /////////////////////////////////NR UL SCS-SpecificCarrier/////////////////////////// + NRRRC_CONFIGURATION_REQ (msg_p).UL_offsetToCarrier[j] = UL_offsetToCarrier; + if ((UL_offsetToCarrier <0) || (UL_offsetToCarrier > 2199)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for UL_offsetToCarrier choice: 0..11 !\n", + RC.config_file_name, i, UL_offsetToCarrier); + } + + if (strcmp(UL_SubcarrierSpacing,"kHz15")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).UL_SubcarrierSpacing[j] = SubcarrierSpacing_kHz15; + }else if (strcmp(pusch_alpha,"kHz30")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).UL_SubcarrierSpacing[j] = SubcarrierSpacing_kHz30; + }else if (strcmp(pusch_alpha,"kHz60")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).UL_SubcarrierSpacing[j] = SubcarrierSpacing_kHz60; + }else if (strcmp(pusch_alpha,"kHz120")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).UL_SubcarrierSpacing[j] = SubcarrierSpacing_kHz120; + }else if (strcmp(pusch_alpha,"kHz240")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).UL_SubcarrierSpacing[j] = SubcarrierSpacing_kHz240; + }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for UL_SubcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n", + RC.config_file_name, i, UL_SubcarrierSpacing); + } + + switch (UL_SCS_SpecificCarrier_k0) { + case -6: + NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SpecificCarrier_k0[j] = SCS_SpecificCarrier__k0_n_6; + break; + + case 0: + NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SpecificCarrier_k0[j] = SCS_SpecificCarrier__k0_n0; + break; + + case 6: + NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SpecificCarrier_k0[j] = SCS_SpecificCarrier__k0_n6; + break; + + default: + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for UL_SCS_SpecificCarrier_k0 choice: -6,0,6 !\n", + RC.config_file_name, i, UL_SCS_SpecificCarrier_k0); + break; + } + + NRRRC_CONFIGURATION_REQ (msg_p).UL_carrierBandwidth[j] = UL_carrierBandwidth; + if ((UL_carrierBandwidth <1) || (UL_carrierBandwidth > 275)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for UL_carrierBandwidth choice: 1..275 !\n", + RC.config_file_name, i, UL_carrierBandwidth); + } + + + + //Not Sure the value selection + NRRRC_CONFIGURATION_REQ (msg_p).absoluteFrequencyPointA[j] = absoluteFrequencyPointA; + + NRRRC_CONFIGURATION_REQ (msg_p).ControlResourceSetId[j] = ControlResourceSetId; + if ((ControlResourceSetId <0) || (ControlResourceSetId > 11)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for ControlResourceSetId choice: 0..11 !\n", + RC.config_file_name, i, ControlResourceSetId); + } + + /////////////////////////////////NR BWP-UplinkCommon/////////////////////////// + NRRRC_CONFIGURATION_REQ (msg_p).UL_locationAndBandwidth[j] = UL_locationAndBandwidth; + if ((UL_locationAndBandwidth <0) || (UL_locationAndBandwidth > 37949)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for UL_locationAndBandwidth choice: 0..11 !\n", + RC.config_file_name, i, UL_locationAndBandwidth); + } + + switch (ssb_periodicityServingCell) { + case 5: + NRRRC_CONFIGURATION_REQ (msg_p).ssb_periodicityServingCell[j] = ServingCellConfigCommon__ssb_periodicityServingCell_ms5; + break; + + case 10: + NRRRC_CONFIGURATION_REQ (msg_p).ssb_periodicityServingCell[j] = ServingCellConfigCommon__ssb_periodicityServingCell_ms10; + break; + + case 20: + NRRRC_CONFIGURATION_REQ (msg_p).ssb_periodicityServingCell[j] = ServingCellConfigCommon__ssb_periodicityServingCell_ms20; + break; + + case 40: + NRRRC_CONFIGURATION_REQ (msg_p).ssb_periodicityServingCell[j] = ServingCellConfigCommon__ssb_periodicityServingCell_ms40; + break; + + case 80: + NRRRC_CONFIGURATION_REQ (msg_p).ssb_periodicityServingCell[j] = ServingCellConfigCommon__ssb_periodicityServingCell_ms80; + break; + + case 160: + NRRRC_CONFIGURATION_REQ (msg_p).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); + break; + } + + switch (dmrs_TypeA_Position) { + case 2: + NRRRC_CONFIGURATION_REQ (msg_p).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; + 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); + break; + } + + if (strcmp(NIA_SubcarrierSpacing,"kHz15")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = SubcarrierSpacing_kHz15; + }else if (strcmp(pusch_alpha,"kHz30")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = SubcarrierSpacing_kHz30; + }else if (strcmp(pusch_alpha,"kHz60")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = SubcarrierSpacing_kHz60; + }else if (strcmp(pusch_alpha,"kHz120")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = SubcarrierSpacing_kHz120; + }else if (strcmp(pusch_alpha,"kHz240")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = SubcarrierSpacing_kHz240; + }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for NIA_SubcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n", + RC.config_file_name, i, NIA_SubcarrierSpacing); + } + + 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); + } + + /////////////////////////////////NR TDD-UL-DL-ConfigCommon/////////////////////////// + if (strcmp(referenceSubcarrierSpacing,"kHz15")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = SubcarrierSpacing_kHz15; + }else if (strcmp(pusch_alpha,"kHz30")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = SubcarrierSpacing_kHz30; + }else if (strcmp(pusch_alpha,"kHz60")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = SubcarrierSpacing_kHz60; + }else if (strcmp(pusch_alpha,"kHz120")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = SubcarrierSpacing_kHz120; + }else if (strcmp(pusch_alpha,"kHz240")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = SubcarrierSpacing_kHz240; + }else { + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for referenceSubcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n", + RC.config_file_name, i, referenceSubcarrierSpacing); + } + + if (strcmp(dl_UL_TransmissionPeriodicity,"ms0p5")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms0p5; + }else if (strcmp(pusch_alpha,"ms0p625")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms0p625; + }else if (strcmp(pusch_alpha,"ms1")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms1; + }else if (strcmp(pusch_alpha,"ms1p25")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms1p25; + }else if (strcmp(pusch_alpha,"ms2")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms2; + }else if (strcmp(pusch_alpha,"ms2p5")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms2p5; + }else if (strcmp(pusch_alpha,"ms5")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms5; + }else if (strcmp(pusch_alpha,"ms10")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms10; + }else { + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for dl_UL_TransmissionPeriodicity choice: minusinfinity,ms0p5,ms0p625,ms1,ms1p25,ms2,ms2p5,ms5,ms10 !\n", + RC.config_file_name, i, dl_UL_TransmissionPeriodicity); + } + + NRRRC_CONFIGURATION_REQ (msg_p).nrofDownlinkSlots[j] = nrofDownlinkSlots; + if ((nrofDownlinkSlots < 0) || (nrofDownlinkSlots > 320)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for nrofDownlinkSlots choice: 0..320 !\n", + RC.config_file_name, i, nrofDownlinkSlots); + } + + NRRRC_CONFIGURATION_REQ (msg_p).nrofDownlinkSymbols[j] = nrofDownlinkSymbols; + if ((nrofDownlinkSymbols < 0) || (nrofDownlinkSymbols > 13)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for nrofDownlinkSymbols choice: 0..13 !\n", + RC.config_file_name, i, nrofDownlinkSymbols); + } + + NRRRC_CONFIGURATION_REQ (msg_p).nrofUplinkSlots[j] = nrofUplinkSlots; + if ((nrofUplinkSlots < 0) || (nrofUplinkSlots > 320)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for nrofUplinkSlots choice: 0..320 !\n", + RC.config_file_name, i, nrofUplinkSlots); + } + + NRRRC_CONFIGURATION_REQ (msg_p).nrofUplinkSymbols[j] = nrofUplinkSymbols; + if ((nrofUplinkSymbols < 0) || (nrofUplinkSymbols > 13)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for nrofUplinkSymbols choice: 0..13 !\n", + RC.config_file_name, i, nrofUplinkSymbols); + } + + /////////////////////////////////NR RACH-ConfigCommon/////////////////////////// + + NRRRC_CONFIGURATION_REQ (msg_p).rach_totalNumberOfRA_Preambles[j] = rach_totalNumberOfRA_Preambles; + if ((rach_totalNumberOfRA_Preambles <1) || (rach_totalNumberOfRA_Preambles>63)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_numberOfRA_Preambles choice: 1..63 !\n", + RC.config_file_name, i, rach_totalNumberOfRA_Preambles); + } + + if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"oneEighth")==0) { + + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneEighth; + switch (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth){ + case 4: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n4; + break; + case 8: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n8; + break; + case 12: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n12; + break; + case 16: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n16; + break; + case 20: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n20; + break; + case 24: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n24; + break; + case 28: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n28; + break; + case 32: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n32; + break; + case 36: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n36; + break; + case 40: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n40; + break; + case 44: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n44; + break; + case 48: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n48; + break; + case 52: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n52; + break; + case 56: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n56; + break; + case 60: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n60; + break; + case 64: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n64; + break; + default: + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth choice: 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64!\n", + RC.config_file_name, i, rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth); + break; + }//End oneEighth + + }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"oneFourth")==0) { + + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneFourth; + switch (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth){ + case 4: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n4; + break; + case 8: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n8; + break; + case 12: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n12; + break; + case 16: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n16; + break; + case 20: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n20; + break; + case 24: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n24; + break; + case 28: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n28; + break; + case 32: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n32; + break; + case 36: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n36; + break; + case 40: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n40; + break; + case 44: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n44; + break; + case 48: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n48; + break; + case 52: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n52; + break; + case 56: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n56; + break; + case 60: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n60; + break; + case 64: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n64; + break; + default: + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth choice: 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64!\n", + RC.config_file_name, i, rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth); + break; + }//End oneFourth + + }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"oneHalf")==0) { + + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneHalf; + switch (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf){ + case 4: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n4; + break; + case 8: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n8; + break; + case 12: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n12; + break; + case 16: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n16; + break; + case 20: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n20; + break; + case 24: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n24; + break; + case 28: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n28; + break; + case 32: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n32; + break; + case 36: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n36; + break; + case 40: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n40; + break; + case 44: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n44; + break; + case 48: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n48; + break; + case 52: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n52; + break; + case 56: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n56; + break; + case 60: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n60; + break; + case 64: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n64; + break; + default: + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf choice: 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64!\n", + RC.config_file_name, i, rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf); + break; + }//End oneHalf + + }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"one")==0) { + + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_one; + switch (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one){ + case 4: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n4; + break; + case 8: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n8; + break; + case 12: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n12; + break; + case 16: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n16; + break; + case 20: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n20; + break; + case 24: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n24; + break; + case 28: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n28; + break; + case 32: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n32; + break; + case 36: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n36; + break; + case 40: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n40; + break; + case 44: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n44; + break; + case 48: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n48; + break; + case 52: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n52; + break; + case 56: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n56; + break; + case 60: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n60; + break; + case 64: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n64; + break; + default: + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one choice: 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64!\n", + RC.config_file_name, i, rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one); + break; + }//End one + + }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"two")==0) { + + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_two; + switch (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one){ + case 4: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n4; + break; + case 8: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n8; + break; + case 12: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n12; + break; + case 16: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n16; + break; + case 20: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n20; + break; + case 24: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n24; + break; + case 28: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n28; + break; + case 32: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n32; + break; + default: + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two choice: 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64!\n", + RC.config_file_name, i, rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two); + break; + }//End two + + }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"four")==0) { + + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_four; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four[j] = rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four; + if ((rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four < 1) || (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four > 16)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four choice: 1..16 !\n", + RC.config_file_name, i, rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four); + }//End four + + }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"eight")==0) { + + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_eight; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight[j] = rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight; + if ((rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight < 1) || (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight > 8)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight choice: 1..8 !\n", + RC.config_file_name, i, rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight); + }//End eight + + }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"sixteen")==0) { + + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_sixteen; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen[j] = rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen; + if ((rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen < 1) || (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen > 4)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen choice: 1..4 !\n", + RC.config_file_name, i, rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen); + }//End sixteen + + }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"NOTHING")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_NOTHING; + }else { + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice: oneEighth,oneFourth,oneHalf,one,two,four,eight,sixteen !\n", + RC.config_file_name, i, rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice); + } + + if (strcmp(rach_groupBconfigured , "ENABLE") == 0) { + NRRRC_CONFIGURATION_REQ (msg_p).rach_groupBconfigured [j] = TRUE; + + switch (rach_ra_Msg3SizeGroupA) { + case 56: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b56; + break; + case 144: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b144; + break; + case 208: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b208; + break; + case 256: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b256; + break; + case 282: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b282; + break; + case 480: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b480; + break; + case 640: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b640; + break; + case 800: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b800; + break; + case 1000: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b1000; + break; + default: + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ra_Msg3SizeGroupA choice: 56,144,208,256,282,480,640,800,1000!\n", + RC.config_file_name, i, rach_ra_Msg3SizeGroupA); + break; + }// End switch (rach_ra_Msg3SizeGroupA) + + if (strcmp(rach_messagePowerOffsetGroupB,"minusinfinity")==0) { + RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_minusinfinity; + }else if (strcmp(rach_messagePowerOffsetGroupB,"dB0")==0) { + RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB0; + }else if (strcmp(rach_messagePowerOffsetGroupB,"dB5")==0) { + RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB5; + }else if (strcmp(rach_messagePowerOffsetGroupB,"dB8")==0) { + RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB8; + }else if (strcmp(rach_messagePowerOffsetGroupB,"dB10")==0) { + RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB10; + }else if (strcmp(rach_messagePowerOffsetGroupB,"dB12")==0) { + RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB12; + }else if (strcmp(rach_messagePowerOffsetGroupB,"dB15")==0) { + RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB15; + }else if (strcmp(rach_messagePowerOffsetGroupB,"dB18")==0) { + RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB18; + }else{ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for rach_messagePowerOffsetGroupB choice: minusinfinity,dB0,dB5,dB8,dB10,dB12,dB15,dB18!\n", + RC.config_file_name, i, rach_messagePowerOffsetGroupB); + }// End if (strcmp(rach_messagePowerOffsetGroupB,"minusinfinity")==0) + + NRRRC_CONFIGURATION_REQ (msg_p).rach_numberOfRA_PreamblesGroupA[j] = rach_numberOfRA_PreamblesGroupA; + if ((rach_numberOfRA_PreamblesGroupA <1) || (rach_numberOfRA_PreamblesGroupA>64)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_numberOfRA_PreamblesGroupA choice: 1..63 !\n", + RC.config_file_name, i, rach_numberOfRA_PreamblesGroupA); + } + + }// End if (strcmp(rach_groupBconfigured , "ENABLE") == 0) + + switch (rach_ra_ContentionResolutionTimer) { + case 8: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = RACH_ConfigCommon__ra_ContentionResolutionTimer_sf8; + break; + case 16: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = RACH_ConfigCommon__ra_ContentionResolutionTimer_sf16; + break; + case 24: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = RACH_ConfigCommon__ra_ContentionResolutionTimer_sf24; + break; + case 32: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = RACH_ConfigCommon__ra_ContentionResolutionTimer_sf32; + break; + case 40: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = RACH_ConfigCommon__ra_ContentionResolutionTimer_sf40; + break; + case 48: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = RACH_ConfigCommon__ra_ContentionResolutionTimer_sf48; + break; + case 56: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = RACH_ConfigCommon__ra_ContentionResolutionTimer_sf56; + break; + case 64: + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = RACH_ConfigCommon__ra_ContentionResolutionTimer_sf64; + break; + default: + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ra_ContentionResolutionTimer choice: 8,16,24,32,40,48,56,64!\n", + RC.config_file_name, i, rach_ra_ContentionResolutionTimer); + break; + }// End switch (rach_ra_ContentionResolutionTimer) + + + NRRRC_CONFIGURATION_REQ (msg_p).rsrp_ThresholdSSB[j] = rsrp_ThresholdSSB; + if ((rsrp_ThresholdSSB <0) || (rsrp_ThresholdSSB>124)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rsrp_ThresholdSSB choice: 0..124 !\n", + RC.config_file_name, i, rsrp_ThresholdSSB); + } + + NRRRC_CONFIGURATION_REQ (msg_p).rsrp_ThresholdSSB_SUL[j] = rsrp_ThresholdSSB_SUL; + if ((rsrp_ThresholdSSB_SUL <0) || (rsrp_ThresholdSSB_SUL>124)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rsrp_ThresholdSSB_SUL choice: 0..124 !\n", + RC.config_file_name, i, rsrp_ThresholdSSB_SUL); + } + + if (strcmp(prach_RootSequenceIndex_choice , "l839") == 0) { + NRRRC_CONFIGURATION_REQ (msg_p).prach_RootSequenceIndex_choice[j] = RACH_ConfigCommon__prach_RootSequenceIndex_PR_l839; + NRRRC_CONFIGURATION_REQ (msg_p).prach_RootSequenceIndex_l839[j] = prach_RootSequenceIndex_l839; + }else if (strcmp(prach_RootSequenceIndex_choice , "l139") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).prach_RootSequenceIndex_choice[j] = RACH_ConfigCommon__prach_RootSequenceIndex_PR_l139; + NRRRC_CONFIGURATION_REQ (msg_p).prach_RootSequenceIndex_l139[j] = prach_RootSequenceIndex_l139; + }else { + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for prach_RootSequenceIndex !\n", + RC.config_file_name, i, prach_RootSequenceIndex); + } + + if (strcmp(prach_msg1_SubcarrierSpacing,"kHz15")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = SubcarrierSpacing_kHz15; + }else if (strcmp(pusch_alpha,"kHz30")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = SubcarrierSpacing_kHz30; + }else if (strcmp(pusch_alpha,"kHz60")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = SubcarrierSpacing_kHz60; + }else if (strcmp(pusch_alpha,"kHz120")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = SubcarrierSpacing_kHz120; + }else if (strcmp(pusch_alpha,"kHz240")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = SubcarrierSpacing_kHz240; + }else { + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for prach_msg1_SubcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n", + RC.config_file_name, i, prach_msg1_SubcarrierSpacing); + } + + if (strcmp(restrictedSetConfig , "unrestrictedSet") == 0) { + NRRRC_CONFIGURATION_REQ (msg_p).restrictedSetConfig[j] = RACH_ConfigCommon__restrictedSetConfig_unrestrictedSet; + }else if (strcmp(restrictedSetConfig , "restrictedSetTypeA") == 0) { + NRRRC_CONFIGURATION_REQ (msg_p).restrictedSetConfig[j] = RACH_ConfigCommon__restrictedSetConfig_restrictedSetTypeA; + }else if (strcmp(restrictedSetConfig , "restrictedSetTypeB") == 0) { + NRRRC_CONFIGURATION_REQ (msg_p).restrictedSetConfig[j] = RACH_ConfigCommon__restrictedSetConfig_restrictedSetTypeB; + }else { + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for restrictedSetConfig !\n", + RC.config_file_name, i, restrictedSetConfig); + } + + if (strcmp(msg3_transformPrecoding , "ENABLE") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).msg3_transformPrecoding[j] = RACH_ConfigCommon__msg3_transformPrecoding_enabled; + } + + ////////////////////////////////NR RACH-ConfigGeneric////////////////////////////// + NRRRC_CONFIGURATION_REQ (msg_p).prach_ConfigurationIndex[j] = prach_ConfigurationIndex; + if ((prach_ConfigurationIndex <0) || (prach_ConfigurationIndex>255)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for prach_ConfigurationIndex choice: 0..255 !\n", + RC.config_file_name, i, prach_ConfigurationIndex); + } + + if (strcmp(prach_msg1_FDM , "one") == 0) { + NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_FDM[j] = RACH_ConfigGeneric__msg1_FDM_one; + }else if (strcmp(prach_msg1_FDM , "two") == 0) { + NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_FDM[j] = RACH_ConfigGeneric__msg1_FDM_two; + }else if (strcmp(prach_msg1_FDM , "four") == 0) { + NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_FDM[j] = RACH_ConfigGeneric__msg1_FDM_four; + }else if (strcmp(prach_msg1_FDM , "eight") == 0) { + NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_FDM[j] = RACH_ConfigGeneric__msg1_FDM_eight; + }else { + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for prach_msg1_FDM !\n", + RC.config_file_name, i, prach_msg1_FDM); + } + + NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_FrequencyStart[j] = prach_msg1_FrequencyStart; + if ((prach_msg1_FrequencyStart <0) || (prach_msg1_FrequencyStart>274)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for prach_msg1_FrequencyStart choice: 0..274 !\n", + RC.config_file_name, i, prach_msg1_FrequencyStart); + } + + NRRRC_CONFIGURATION_REQ (msg_p).zeroCorrelationZoneConfig[j] = zeroCorrelationZoneConfig; + if ((zeroCorrelationZoneConfig <0) || (zeroCorrelationZoneConfig>15)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for zeroCorrelationZoneConfig choice: 0..15 !\n", + RC.config_file_name, i, zeroCorrelationZoneConfig); + } + + NRRRC_CONFIGURATION_REQ (msg_p).preambleReceivedTargetPower[j] = preambleReceivedTargetPower; + if ((preambleReceivedTargetPower <-200) || (preambleReceivedTargetPower>-74)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for preambleReceivedTargetPower choice: -200..-74 !\n", + RC.config_file_name, i, preambleReceivedTargetPower); + } + + switch (preambleTransMax) { + case 3: + NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = RACH_ConfigGeneric__preambleTransMax_n3; + break; + case 4: + NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = RACH_ConfigGeneric__preambleTransMax_n4; + break; + case 5: + NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = RACH_ConfigGeneric__preambleTransMax_n5; + break; + case 6: + NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = RACH_ConfigGeneric__preambleTransMax_n6; + break; + case 7: + NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = RACH_ConfigGeneric__preambleTransMax_n7; + break; + case 8: + NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = RACH_ConfigGeneric__preambleTransMax_n8; + break; + case 10: + NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = RACH_ConfigGeneric__preambleTransMax_n10; + break; + case 20: + NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = RACH_ConfigGeneric__preambleTransMax_n20; + break; + case 50: + NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = RACH_ConfigGeneric__preambleTransMax_n50; + break; + case 100: + NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = RACH_ConfigGeneric__preambleTransMax_n100; + break; + case 200: + NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = RACH_ConfigGeneric__preambleTransMax_n200; + break; + default: + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for preambleTransMax choice: 3,4,5,6,7,8,10,20,50,100,200 !\n", + RC.config_file_name, i, preambleTransMax); + break; + } + + if (strcmp(powerRampingStep , "dB0") == 0) { + NRRRC_CONFIGURATION_REQ (msg_p).powerRampingStep[j] = RACH_ConfigGeneric__powerRampingStep_dB0; + }else if (strcmp(powerRampingStep , "dB2") == 0) { + NRRRC_CONFIGURATION_REQ (msg_p).powerRampingStep[j] = RACH_ConfigGeneric__powerRampingStep_dB2; + }else if (strcmp(powerRampingStep , "dB4") == 0) { + NRRRC_CONFIGURATION_REQ (msg_p).powerRampingStep[j] = RACH_ConfigGeneric__powerRampingStep_dB4; + }else if (strcmp(powerRampingStep , "dB6") == 0) { + NRRRC_CONFIGURATION_REQ (msg_p).powerRampingStep[j] = RACH_ConfigGeneric__powerRampingStep_dB6; + }else { + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for powerRampingStep !\n", + RC.config_file_name, i, powerRampingStep); + } + + switch (ra_ResponseWindow) { + case 1: + NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] = RACH_ConfigGeneric__ra_ResponseWindow_sl1; + break; + case 2: + NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] = RACH_ConfigGeneric__ra_ResponseWindow_sl2; + break; + case 4: + NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] = RACH_ConfigGeneric__ra_ResponseWindow_sl4; + break; + case 8: + NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] = RACH_ConfigGeneric__ra_ResponseWindow_sl8; + break; + case 10: + NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] = RACH_ConfigGeneric__ra_ResponseWindow_sl10; + break; + case 20: + NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] = RACH_ConfigGeneric__ra_ResponseWindow_sl20; + break; + case 40: + NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] = RACH_ConfigGeneric__ra_ResponseWindow_sl40; + break; + case 80: + NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] = RACH_ConfigGeneric__ra_ResponseWindow_sl80; + break; + default: + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for ra_ResponseWindow choice: 1,2,4,8,10,20,40,80 !\n", + RC.config_file_name, i, ra_ResponseWindow); + break; + } + + /////////////////////////////////NR PUSCH-ConfigCommon/////////////////////////// + if (strcmp(groupHoppingEnabledTransformPrecoding , "ENABLE") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).groupHoppingEnabledTransformPrecoding[j] = PUSCH_ConfigCommon__groupHoppingEnabledTransformPrecoding_enabled; + } + + NRRRC_CONFIGURATION_REQ (msg_p).msg3_DeltaPreamble[j] = msg3_DeltaPreamble; + if ((msg3_DeltaPreamble <-1) || (msg3_DeltaPreamble>6)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for msg3_DeltaPreamble choice: -1..6 !\n", + RC.config_file_name, i, msg3_DeltaPreamble); + } + + NRRRC_CONFIGURATION_REQ (msg_p).p0_NominalWithGrant[j] = p0_NominalWithGrant; + if ((p0_NominalWithGrant <-202) || (p0_NominalWithGrant>24)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for p0_NominalWithGrant choice: -202..24 !\n", + RC.config_file_name, i, p0_NominalWithGrant); + } + + /////////////////////////////////NR PUSCH-TimeDomainResourceAllocation/////////////////////////// + NRRRC_CONFIGURATION_REQ (msg_p).PUSCH_TimeDomainResourceAllocation_k2[j] = PUSCH_TimeDomainResourceAllocation_k2; + if ((PUSCH_TimeDomainResourceAllocation_k2 <0) || (PUSCH_TimeDomainResourceAllocation_k2>7)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PUSCH_TimeDomainResourceAllocation_k2 choice: 0..7 !\n", + RC.config_file_name, i, PUSCH_TimeDomainResourceAllocation_k2); + } + + if (strcmp(PUSCH_TimeDomainResourceAllocation_mappingType , "typeA") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).PUSCH_TimeDomainResourceAllocation_mappingType[j] = PUSCH_TimeDomainResourceAllocation__mappingType_typeA; + }else if (strcmp(PUSCH_TimeDomainResourceAllocation_mappingType , "typeB") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).PUSCH_TimeDomainResourceAllocation_mappingType[j] = PUSCH_TimeDomainResourceAllocation__mappingType_typeB; + }else { + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PUSCH_TimeDomainResourceAllocation_mappingType !\n", + RC.config_file_name, i, PUSCH_TimeDomainResourceAllocation_mappingType); + } + + /////////////////////////////////NR PUCCH-ConfigCommon/////////////////////////// + if (strcmp(pucch_GroupHopping , "neither") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).pucch_GroupHopping[j] = PUCCH_ConfigCommon__pucch_GroupHopping_neither; + }else if (strcmp(pucch_GroupHopping , "enable") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).pucch_GroupHopping[j] = PUCCH_ConfigCommon__pucch_GroupHopping_enable; + }else if (strcmp(pucch_GroupHopping , "disable") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).pucch_GroupHopping[j] = PUCCH_ConfigCommon__pucch_GroupHopping_disable; + }else { + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for pucch_GroupHopping !\n", + RC.config_file_name, i, pucch_GroupHopping); + } + + NRRRC_CONFIGURATION_REQ (msg_p).p0_nominal[j] = p0_nominal; + if ((p0_nominal <-202) || (p0_nominal>24)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for p0_nominal choice: -202..24 !\n", + RC.config_file_name, i, p0_nominal); + } + + //////////////////////////////////NR PDSCH-TimeDomainResourceAllocation/////////////////////////// + NRRRC_CONFIGURATION_REQ (msg_p).PDSCH_TimeDomainResourceAllocation_k0[j] = PDSCH_TimeDomainResourceAllocation_k0; + if ((PDSCH_TimeDomainResourceAllocation_k0 <1) || (PDSCH_TimeDomainResourceAllocation_k0>3)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDSCH_TimeDomainResourceAllocation_k0 choice: 0..7 !\n", + RC.config_file_name, i, PDSCH_TimeDomainResourceAllocation_k0); + } + + if (strcmp(PDSCH_TimeDomainResourceAllocation_mappingType , "typeA") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).PDSCH_TimeDomainResourceAllocation_mappingType[j] = PDSCH_TimeDomainResourceAllocation__mappingType_typeA; + }else if (strcmp(PDSCH_TimeDomainResourceAllocation_mappingType , "typeB") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).PDSCH_TimeDomainResourceAllocation_mappingType[j] = PDSCH_TimeDomainResourceAllocation__mappingType_typeB; + }else { + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDSCH_TimeDomainResourceAllocation_mappingType !\n", + RC.config_file_name, i, PDSCH_TimeDomainResourceAllocation_mappingType); + } + + //////////////////////////////////NR RateMatchPattern/////////////////////////// + NRRRC_CONFIGURATION_REQ (msg_p).rateMatchPatternId[j] = rateMatchPatternId; + if ((rateMatchPatternId <0) || (rateMatchPatternId>3)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rateMatchPatternId choice: 0..3 !\n", + RC.config_file_name, i, rateMatchPatternId); + } + + if (strcmp(RateMatchPattern_patternType , "NOTHING") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_patternType[j] = RateMatchPattern__patternType_PR_NOTHING; + }else if (strcmp(RateMatchPattern_patternType , "bitmaps") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_patternType[j] = RateMatchPattern__patternType_PR_bitmaps; + }else if (strcmp(RateMatchPattern_patternType , "controlResourceSet") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_patternType[j] = RateMatchPattern__patternType_PR_controlResourceSet; + }else { + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPattern_patternType !\n", + RC.config_file_name, i, RateMatchPattern_patternType); + } + + if (strcmp(symbolsInResourceBlock , "NOTHING") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).symbolsInResourceBlock[j] = RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_NOTHING; + }else if (strcmp(symbolsInResourceBlock , "oneSlot") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).symbolsInResourceBlock[j] = RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_oneSlot; + }else if (strcmp(symbolsInResourceBlock , "twoSlots") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).symbolsInResourceBlock[j] = RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_twoSlots; + }else { + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for symbolsInResourceBlock !\n", + RC.config_file_name, i, symbolsInResourceBlock); + } + + switch(periodicityAndPattern){ + case 2: + NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] = RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n2; + break; + case 4: + NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] = RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n4; + break; + case 5: + NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] = RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n5; + break; + case 8: + NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] = RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n8; + break; + case 10: + NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] = RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n10; + break; + case 20: + NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] = RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n20; + break; + case 40: + NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] = RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n40; + break; + default: + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for periodicityAndPattern choice: 2,4,5,8,10,20,40 !\n", + RC.config_file_name, i, periodicityAndPattern); + break; + } + + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_controlResourceSet[j] = RateMatchPattern_controlResourceSet; + if ((RateMatchPattern_controlResourceSet <0) || (RateMatchPattern_controlResourceSet>11)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPattern_controlResourceSet choice: 0..3 !\n", + RC.config_file_name, i, RateMatchPattern_controlResourceSet); + } + + if (strcmp(RateMatchPattern_subcarrierSpacing,"kHz15")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = SubcarrierSpacing_kHz15; + }else if (strcmp(pusch_alpha,"kHz30")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = SubcarrierSpacing_kHz30; + }else if (strcmp(pusch_alpha,"kHz60")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = SubcarrierSpacing_kHz60; + }else if (strcmp(pusch_alpha,"kHz120")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = SubcarrierSpacing_kHz120; + }else if (strcmp(pusch_alpha,"kHz240")==0) { + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = SubcarrierSpacing_kHz240; + }else { + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for RateMatchPattern_subcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n", + RC.config_file_name, i, RateMatchPattern_subcarrierSpacing); + } + + if (strcmp(RateMatchPattern_mode , "dynamic") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_mode[j] = RateMatchPattern__mode_dynamic; + }else if (strcmp(RateMatchPattern_mode , "semiStatic") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_mode[j] = RateMatchPattern__mode_semiStatic; + }else { + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPattern_mode !\n", + RC.config_file_name, i, RateMatchPattern_mode); + } + + //////////////////////////////////NR PDCCH-ConfigCommon/////////////////////////// + NRRRC_CONFIGURATION_REQ (msg_p).searchSpaceSIB1[j] = searchSpaceSIB1; + if ((searchSpaceSIB1 <0) || (searchSpaceSIB1>39)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for searchSpaceSIB1 choice: 0..39 !\n", + RC.config_file_name, i, searchSpaceSIB1); + } + + NRRRC_CONFIGURATION_REQ (msg_p).searchSpaceOtherSystemInformation[j] = searchSpaceOtherSystemInformation; + if ((searchSpaceOtherSystemInformation <0) || (searchSpaceOtherSystemInformation>39)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for searchSpaceOtherSystemInformation choice: 0..39 !\n", + RC.config_file_name, i, searchSpaceOtherSystemInformation); + } + + NRRRC_CONFIGURATION_REQ (msg_p).pagingSearchSpace[j] = pagingSearchSpace; + if ((pagingSearchSpace <0) || (pagingSearchSpace>39)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for pagingSearchSpace choice: 0..39 !\n", + RC.config_file_name, i, pagingSearchSpace); + } + + NRRRC_CONFIGURATION_REQ (msg_p).ra_SearchSpace[j] = ra_SearchSpace; + if ((ra_SearchSpace <0) || (ra_SearchSpace>39)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for ra_SearchSpace choice: 0..39 !\n", + RC.config_file_name, i, ra_SearchSpace); + } + + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ControlResourceSet[j] = rach_ra_ControlResourceSet; + if ((rach_ra_ControlResourceSet <0) || (rach_ra_ControlResourceSet>11)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ra_ControlResourceSet choice: 0..11 !\n", + RC.config_file_name, i, rach_ra_ControlResourceSet); + } + + //////////////////////////////////NR PDCCH commonControlResourcesSets/////////////////////////// + NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_common_controlResourceSetId[j] = PDCCH_common_controlResourceSetId; + if ((PDCCH_common_controlResourceSetId <0) || (PDCCH_common_controlResourceSetId>11)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDCCH_common_controlResourceSetId choice: 0..11 !\n", + RC.config_file_name, i, PDCCH_common_controlResourceSetId); + } + + NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_common_ControlResourceSet_duration[j] = PDCCH_common_ControlResourceSet_duration; + if ((PDCCH_common_ControlResourceSet_duration <0) || (PDCCH_common_ControlResourceSet_duration>3)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDCCH_common_ControlResourceSet_duration choice: 0..11 !\n", + RC.config_file_name, i, PDCCH_common_ControlResourceSet_duration); + } + + if (strcmp(PDCCH_cce_REG_MappingType , "NOTHING") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_cce_REG_MappingType[j] = ControlResourceSet__cce_REG_MappingType_PR_NOTHING; + }else if (strcmp(PDCCH_cce_REG_MappingType , "interleaved") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_cce_REG_MappingType[j] = ControlResourceSet__cce_REG_MappingType_PR_interleaved; + }else if (strcmp(PDCCH_cce_REG_MappingType , "nonInterleaved") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_cce_REG_MappingType[j] = ControlResourceSet__cce_REG_MappingType_PR_nonInterleaved; + }else { + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDCCH_cce_REG_MappingType !\n", + RC.config_file_name, i, PDCCH_cce_REG_MappingType); + } + + switch(PDCCH_reg_BundleSize){ + case 2: + NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_reg_BundleSize[j] = ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n2; + break; + case 3: + NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_reg_BundleSize[j] = ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n3; + break; + case 6: + NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_reg_BundleSize[j] = ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n6; + break; + default: + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDCCH_reg_BundleSize choice: 2,3,6 !\n", + RC.config_file_name, i, PDCCH_reg_BundleSize); + break; + } + + switch(PDCCH_interleaverSize){ + case 2: + NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_interleaverSize[j] = ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n2; + break; + case 3: + NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_interleaverSize[j] = ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n3; + break; + case 6: + NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_interleaverSize[j] = ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n6; + break; + default: + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDCCH_interleaverSize choice: 2,3,6 !\n", + RC.config_file_name, i, PDCCH_interleaverSize); + break; + } + + NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_shiftIndex[j] = PDCCH_shiftIndex; + if ((PDCCH_shiftIndex <0) || (PDCCH_shiftIndex>274)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDCCH_shiftIndex choice: 0..274 !\n", + RC.config_file_name, i, PDCCH_shiftIndex); + } + + if (strcmp(PDCCH_precoderGranularity , "sameAsREG-bundle") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_precoderGranularity[j] = ControlResourceSet__precoderGranularity_sameAsREG_bundle; + }else if (strcmp(PDCCH_precoderGranularity , "allContiguousRBs") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_precoderGranularity[j] = ControlResourceSet__precoderGranularity_allContiguousRBs; + }else { + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDCCH_precoderGranularity !\n", + RC.config_file_name, i, PDCCH_precoderGranularity); + } + + if (strcmp(tci_PresentInDCI , "ENABLE") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).tci_PresentInDCI[j] = ControlResourceSet__tci_PresentInDCI_enabled; + } + + //////////////////////////////////NR PDCCH commonControlResourcesSets/////////////////////////// + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpaceId[j] = SearchSpaceId; + if ((SearchSpaceId <0) || (SearchSpaceId>39)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpaceId choice: 0..39 !\n", + RC.config_file_name, i, SearchSpaceId); + } + + NRRRC_CONFIGURATION_REQ (msg_p).commonSearchSpaces_controlResourceSetId[j] = commonSearchSpaces_controlResourceSetId; + if ((commonSearchSpaces_controlResourceSetId <0) || (commonSearchSpaces_controlResourceSetId>11)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for commonSearchSpaces_controlResourceSetId choice: 0..11 !\n", + RC.config_file_name, i, commonSearchSpaces_controlResourceSetId); + } + + if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl1") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] = SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1; + + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_sl1[j] = NULL; + + }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl2") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] = SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl2; + + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_sl2[j] = SearchSpace_monitoringSlotPeriodicityAndOffset_sl2; + if ((SearchSpace_monitoringSlotPeriodicityAndOffset_sl2 <0) || (SearchSpace_monitoringSlotPeriodicityAndOffset_sl2>1)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_monitoringSlotPeriodicityAndOffset_sl2 choice: 0..1 !\n", + RC.config_file_name, i, SearchSpace_monitoringSlotPeriodicityAndOffset_sl2); + } + + }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl4") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] = SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl4; + + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_sl4[j] = SearchSpace_monitoringSlotPeriodicityAndOffset_sl4; + if ((SearchSpace_monitoringSlotPeriodicityAndOffset_sl4 <0) || (SearchSpace_monitoringSlotPeriodicityAndOffset_sl4>3)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_monitoringSlotPeriodicityAndOffset_sl4 choice: 0..3 !\n", + RC.config_file_name, i, SearchSpace_monitoringSlotPeriodicityAndOffset_sl4); + } + + }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl5") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] = SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl5; + + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_sl5[j] = SearchSpace_monitoringSlotPeriodicityAndOffset_sl5; + if ((SearchSpace_monitoringSlotPeriodicityAndOffset_sl5 <0) || (SearchSpace_monitoringSlotPeriodicityAndOffset_sl5>4)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_monitoringSlotPeriodicityAndOffset_sl5 choice: 0..4 !\n", + RC.config_file_name, i, SearchSpace_monitoringSlotPeriodicityAndOffset_sl5); + } + + }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl8") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] = SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl8; + + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_sl8[j] = SearchSpace_monitoringSlotPeriodicityAndOffset_sl8; + if ((SearchSpace_monitoringSlotPeriodicityAndOffset_sl8 <0) || (SearchSpace_monitoringSlotPeriodicityAndOffset_sl8>7)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_monitoringSlotPeriodicityAndOffset_sl8 choice: 0..7 !\n", + RC.config_file_name, i, SearchSpace_monitoringSlotPeriodicityAndOffset_sl8); + } + + }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl10") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] = SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl10; + + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_sl10[j] = SearchSpace_monitoringSlotPeriodicityAndOffset_sl10; + if ((SearchSpace_monitoringSlotPeriodicityAndOffset_sl10 <0) || (SearchSpace_monitoringSlotPeriodicityAndOffset_sl10>9)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_monitoringSlotPeriodicityAndOffset_sl10 choice: 0..9 !\n", + RC.config_file_name, i, SearchSpace_monitoringSlotPeriodicityAndOffset_sl10); + } + + }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl16") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] = SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl16; + + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_sl16[j] = SearchSpace_monitoringSlotPeriodicityAndOffset_sl16; + if ((SearchSpace_monitoringSlotPeriodicityAndOffset_sl16 <0) || (SearchSpace_monitoringSlotPeriodicityAndOffset_sl16>15)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_monitoringSlotPeriodicityAndOffset_sl16 choice: 0..15 !\n", + RC.config_file_name, i, SearchSpace_monitoringSlotPeriodicityAndOffset_sl16); + } + + }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl20") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] = SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl20; + + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_sl20[j] = SearchSpace_monitoringSlotPeriodicityAndOffset_sl20; + if ((SearchSpace_monitoringSlotPeriodicityAndOffset_sl20 <0) || (SearchSpace_monitoringSlotPeriodicityAndOffset_sl20>19)){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_monitoringSlotPeriodicityAndOffset_sl20 choice: 0..19 !\n", + RC.config_file_name, i, SearchSpace_monitoringSlotPeriodicityAndOffset_sl20); + } + + }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "UNABLE") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] = SearchSpace__monitoringSlotPeriodicityAndOffset_PR_NOTHING; + + }else { + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_monitoringSlotPeriodicityAndOffset_choice !\n", + RC.config_file_name, i, SearchSpace_monitoringSlotPeriodicityAndOffset_choice); + }// End if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl1") + + + switch(SearchSpace_nrofCandidates_aggregationLevel1){ + case 0: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] = SearchSpace__nrofCandidates__aggregationLevel1_n0; + break; + case 1: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] = SearchSpace__nrofCandidates__aggregationLevel1_n1; + break; + case 2: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] = SearchSpace__nrofCandidates__aggregationLevel1_n2; + break; + case 3: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] = SearchSpace__nrofCandidates__aggregationLevel1_n3; + break; + case 4: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] = SearchSpace__nrofCandidates__aggregationLevel1_n4; + break; + case 5: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] = SearchSpace__nrofCandidates__aggregationLevel1_n5; + break; + case 6: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] = SearchSpace__nrofCandidates__aggregationLevel1_n6; + break; + case 8: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] = SearchSpace__nrofCandidates__aggregationLevel1_n8; + break; + default: + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_nrofCandidates_aggregationLevel1 choice: 0,1,2,3,4,5,6,8 !\n", + RC.config_file_name, i, SearchSpace_nrofCandidates_aggregationLevel1); + break; + } + + switch(SearchSpace_nrofCandidates_aggregationLevel2){ + case 0: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] = SearchSpace__nrofCandidates__aggregationLevel2_n0; + break; + case 1: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] = SearchSpace__nrofCandidates__aggregationLevel2_n1; + break; + case 2: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] = SearchSpace__nrofCandidates__aggregationLevel2_n2; + break; + case 3: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] = SearchSpace__nrofCandidates__aggregationLevel2_n3; + break; + case 4: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] = SearchSpace__nrofCandidates__aggregationLevel2_n4; + break; + case 5: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] = SearchSpace__nrofCandidates__aggregationLevel2_n5; + break; + case 6: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] = SearchSpace__nrofCandidates__aggregationLevel2_n6; + break; + case 8: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] = SearchSpace__nrofCandidates__aggregationLevel2_n8; + break; + default: + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_nrofCandidates_aggregationLevel2 choice: 0,1,2,3,4,5,6,8 !\n", + RC.config_file_name, i, SearchSpace_nrofCandidates_aggregationLevel2); + break; + } + + switch(SearchSpace_nrofCandidates_aggregationLevel4){ + case 0: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] = SearchSpace__nrofCandidates__aggregationLevel4_n0; + break; + case 1: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] = SearchSpace__nrofCandidates__aggregationLevel4_n1; + break; + case 2: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] = SearchSpace__nrofCandidates__aggregationLevel4_n2; + break; + case 3: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] = SearchSpace__nrofCandidates__aggregationLevel4_n3; + break; + case 4: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] = SearchSpace__nrofCandidates__aggregationLevel4_n4; + break; + case 5: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] = SearchSpace__nrofCandidates__aggregationLevel4_n5; + break; + case 6: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] = SearchSpace__nrofCandidates__aggregationLevel4_n6; + break; + case 8: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] = SearchSpace__nrofCandidates__aggregationLevel4_n8; + break; + default: + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_nrofCandidates_aggregationLevel4 choice: 0,1,2,3,4,5,6,8 !\n", + RC.config_file_name, i, SearchSpace_nrofCandidates_aggregationLevel4); + break; + } + + switch(SearchSpace_nrofCandidates_aggregationLevel8){ + case 0: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] = SearchSpace__nrofCandidates__aggregationLevel8_n0; + break; + case 1: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] = SearchSpace__nrofCandidates__aggregationLevel8_n1; + break; + case 2: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] = SearchSpace__nrofCandidates__aggregationLevel8_n2; + break; + case 3: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] = SearchSpace__nrofCandidates__aggregationLevel8_n3; + break; + case 4: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] = SearchSpace__nrofCandidates__aggregationLevel8_n4; + break; + case 5: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] = SearchSpace__nrofCandidates__aggregationLevel8_n5; + break; + case 6: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] = SearchSpace__nrofCandidates__aggregationLevel8_n6; + break; + case 8: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] = SearchSpace__nrofCandidates__aggregationLevel8_n8; + break; + default: + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_nrofCandidates_aggregationLevel8 choice: 0,1,2,3,4,5,6,8 !\n", + RC.config_file_name, i, SearchSpace_nrofCandidates_aggregationLevel8); + break; + } + + switch(SearchSpace_nrofCandidates_aggregationLevel16){ + case 0: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] = SearchSpace__nrofCandidates__aggregationLevel16_n0; + break; + case 1: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] = SearchSpace__nrofCandidates__aggregationLevel16_n1; + break; + case 2: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] = SearchSpace__nrofCandidates__aggregationLevel16_n2; + break; + case 3: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] = SearchSpace__nrofCandidates__aggregationLevel16_n3; + break; + case 4: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] = SearchSpace__nrofCandidates__aggregationLevel16_n4; + break; + case 5: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] = SearchSpace__nrofCandidates__aggregationLevel16_n5; + break; + case 6: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] = SearchSpace__nrofCandidates__aggregationLevel16_n6; + break; + case 8: + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] = SearchSpace__nrofCandidates__aggregationLevel16_n8; + break; + default: + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_nrofCandidates_aggregationLevel16 choice: 0,1,2,3,4,5,6,8 !\n", + RC.config_file_name, i, SearchSpace_nrofCandidates_aggregationLevel16); + break; + } + + if (strcmp(SearchSpace_searchSpaceType , "NOTHING") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_searchSpaceType[j] = SearchSpace__searchSpaceType_PR_NOTHING; + }else if (strcmp(SearchSpace_searchSpaceType , "common") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_searchSpaceType[j] = SearchSpace__searchSpaceType_PR_common; + }else if (strcmp(SearchSpace_searchSpaceType , "ue_Specific") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_searchSpaceType[j] = SearchSpace__searchSpaceType_PR_ue_Specific; + }else { + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_searchSpaceType !\n", + RC.config_file_name, i, SearchSpace_searchSpaceType); + } + + switch(Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1){ + case 1: + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1[j] = SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel1_n1; + break; + case 2: + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1[j] = SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel1_n2; + break; + default: + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1 choice: 1,2 !\n", + RC.config_file_name, i, Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1); + break; + } + + switch(Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2){ + case 1: + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2[j] = SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel2_n1; + break; + case 2: + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2[j] = SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel2_n2; + break; + default: + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2 choice: 1,2 !\n", + RC.config_file_name, i, Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2); + break; + } + + switch(Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4){ + case 1: + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4[j] = SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel4_n1; + break; + case 2: + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4[j] = SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel4_n2; + break; + default: + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4 choice: 1,2 !\n", + RC.config_file_name, i, Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4); + break; + } + + switch(Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8){ + case 1: + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8[j] = SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel8_n1; + break; + case 2: + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8[j] = SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel8_n2; + break; + default: + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8 choice: 1,2 !\n", + RC.config_file_name, i, Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8); + break; + } + + switch(Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16){ + case 1: + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16[j] = SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel16_n1; + break; + case 2: + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16[j] = SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel16_n2; + break; + default: + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16 choice: 1,2 !\n", + RC.config_file_name, i, Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16); + break; + } + + switch(Common_dci_Format2_3_monitoringPeriodicity){ + case 1: + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] = SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n1; + break; + case 2: + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] = SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n2; + break; + case 4: + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] = SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n4; + break; + case 5: + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] = SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n5; + break; + case 8: + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] = SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n8; + break; + case 10: + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] = SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n10; + break; + case 16: + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] = SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n16; + break; + case 20: + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] = SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n20; + break; + default: + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Common_dci_Format2_3_monitoringPeriodicity choice: 1,2,4,5,8,10,16,20 !\n", + RC.config_file_name, i, Common_dci_Format2_3_monitoringPeriodicity); + break; + } + + switch(Common_dci_Format2_3_nrofPDCCH_Candidates){ + case 1: + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_nrofPDCCH_Candidates[j] = SearchSpace__searchSpaceType__common__dci_Format2_3__nrofPDCCH_Candidates_n1; + break; + case 2: + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_nrofPDCCH_Candidates[j] = SearchSpace__searchSpaceType__common__dci_Format2_3__nrofPDCCH_Candidates_n2; + break; + default: + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Common_dci_Format2_3_nrofPDCCH_Candidates choice: 1,2 !\n", + RC.config_file_name, i, Common_dci_Format2_3_nrofPDCCH_Candidates); + break; + } + + if (strcmp(ue_Specific__dci_Formats , "formats0-0-And-1-0") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).ue_Specific__dci_Formats[j] = SearchSpace__searchSpaceType__ue_Specific__dci_Formats_formats0_0_And_1_0; + }else if (strcmp(ue_Specific__dci_Formats , "formats0-1-And-1-1") == 0){ + NRRRC_CONFIGURATION_REQ (msg_p).ue_Specific__dci_Formats[j] = SearchSpace__searchSpaceType__ue_Specific__dci_Formats_formats0_1_And_1_1; + }else { + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for ue_Specific__dci_Formats !\n", + RC.config_file_name, i, ue_Specific__dci_Formats); + } + + + }//End for (j = 0; j < CCsParamList.numelt ;j++) + + }//End if ( CCsParamList.numelt> 0) + + }//End for (k=0; k <num_gnbs ; k++) + + }//End for (k=0; k <num_gnbs ; k++) + + + }//End if (num_gnbs>0) + + +}//End RCconfig_NRRRC function + +void NRRCConfig(void) { + + // paramlist_def_t MACRLCParamList = {CONFIG_STRING_MACRLC_LIST,NULL,0}; + // paramlist_def_t L1ParamList = {CONFIG_STRING_L1_LIST,NULL,0}; + // paramlist_def_t RUParamList = {CONFIG_STRING_RU_LIST,NULL,0}; + paramdef_t GNBSParams[] = GNBSPARAMS_DESC; + paramlist_def_t CCsParamList = {GNB_CONFIG_STRING_COMPONENT_CARRIERS,NULL,0}; + + char aprefix[MAX_OPTNAME_SIZE*2 + 8]; + + + +/* get global parameters, defined outside any section in the config file */ + + printf("Getting GNBSParams\n"); + + config_get( GNBSParams,sizeof(GNBSParams)/sizeof(paramdef_t),NULL); + RC.nb_nr_inst = GNBSParams[GNB_ACTIVE_GNBS_IDX].numelt; + + if (RC.nb_nr_inst > 0) { + RC.nb_CC = (int *)malloc((1+RC.nb_nr_inst)*sizeof(int)); + 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; + } + } + +/* + // Get num MACRLC instances + config_getlist( &MACRLCParamList,NULL,0, NULL); + RC.nb_macrlc_inst = MACRLCParamList.numelt; + // Get num L1 instances + config_getlist( &L1ParamList,NULL,0, NULL); + RC.nb_L1_inst = L1ParamList.numelt; + + // Get num RU instances + config_getlist( &RUParamList,NULL,0, NULL); + RC.nb_RU = RUParamList.numelt; + */ + + +} diff --git a/openair2/ENB_APP/gnb_config.h b/openair2/ENB_APP/gnb_config.h new file mode 100644 index 0000000000000000000000000000000000000000..179f7ac03d6b390fa6a46c46a21e4968e5b3c2d8 --- /dev/null +++ b/openair2/ENB_APP/gnb_config.h @@ -0,0 +1,110 @@ +/* + * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The OpenAirInterface Software Alliance licenses this file to You under + * the OAI Public License, Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.openairinterface.org/?page_id=698 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------------------- + * For more information about the OpenAirInterface (OAI) Software Alliance: + * contact@openairinterface.org + */ + +/* + gnb_config.h + ------------------- + AUTHOR : Lionel GAUTHIER, Navid Nikaein, Laurent Winckel + COMPANY : EURECOM + EMAIL : Lionel.Gauthier@eurecom.fr, navid.nikaein@eurecom.fr +*/ + +#ifndef GNB_CONFIG_H_ +#define GNB_CONFIG_H_ +#include <sys/socket.h> +#include <netinet/in.h> +#include <arpa/inet.h> +#include <libconfig.h> + +#include "commonDef.h" +#include "platform_types.h" +#include "platform_constants.h" +#include "PHY/impl_defs_lte.h" +#include "PHY/defs.h" +#include "s1ap_messages_types.h" +//#ifdef CMAKER +//#include "SystemInformationBlockType2.h" +//#include "rrc_messages_types.h" +//#else +//#include "RRC/LITE/MESSAGES/SystemInformationBlockType2.h" +//#endif +#include "intertask_interface_types.h" +#include "RRC/NR/defs_NR.h" + +#define IPV4_STR_ADDR_TO_INT_NWBO(AdDr_StR,NwBo,MeSsAgE ) do {\ + struct in_addr inp;\ + if ( inet_aton(AdDr_StR, &inp ) < 0 ) {\ + AssertFatal (0, MeSsAgE);\ + } else {\ + NwBo = inp.s_addr;\ + }\ + } while (0); + +/** @defgroup _enb_app ENB APP + * @ingroup _oai2 + * @{ + */ + +// Hard to find a defined value for max enb... +#define MAX_ENB 16 + +/* +typedef struct mme_ip_address_s { + unsigned ipv4:1; + unsigned ipv6:1; + unsigned active:1; + char *ipv4_address; + char *ipv6_address; +} mme_ip_address_t; + +typedef struct ru_config_s { + // indicates if local or remote rf is used (1 == LOCAL) + unsigned local_rf:1; + // indicates if UDP socket is used + unsigned udp:1; + // indicates if RAW socket is used + unsigned raw:1; + char *ru_if_name; + char *local_address; + char *remote_address; + uint16_t local_port; + uint16_t remote_port; + uint8_t udpif4p5; + uint8_t rawif4p5; + uint8_t rawif5_mobipass; + uint8_t if_compress; +} ru_config_t; +*/ +//extern void RCconfig_RU(void); +//extern void RCconfig_flexran(void); +//extern void RCconfig_L1(void); +//extern void RCconfig_macrlc(void); +//extern int RCconfig_gtpu(void ); +extern void NRRCConfig(void); + +//void enb_config_display(void); +//void ru_config_display(void); + +int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc); +//int RCconfig_S1(MessageDef *msg_p, uint32_t i); + +#endif /* GNB_CONFIG_H_ */ +/** @} */ diff --git a/openair2/ENB_APP/gnb_paramdef.h b/openair2/ENB_APP/gnb_paramdef.h new file mode 100644 index 0000000000000000000000000000000000000000..e909da3ce5b3ed890e3e3747174e33f6a7c4d5e4 --- /dev/null +++ b/openair2/ENB_APP/gnb_paramdef.h @@ -0,0 +1,404 @@ +/* + * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The OpenAirInterface Software Alliance licenses this file to You under + * the OAI Public License, Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.openairinterface.org/?page_id=698 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------------------- + * For more information about the OpenAirInterface (OAI) Software Alliance: + * contact@openairinterface.org + */ + +/*! \file openair2/GNB_APP/gnb_paramdef.f + * \brief definition of configuration parameters for all eNodeB modules + * \author Francois TABURET + * \date 2017 + * \version 0.1 + * \company NOKIA BellLabs France + * \email: francois.taburet@nokia-bell-labs.com + * \note + * \warning + */ + +#include "common/config/config_paramdesc.h" +#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" + + +// 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" + +#if defined(ENABLE_ITTI) && defined(ENABLE_USE_MME) +extern int asn_debug; +extern int asn1_xer_print; +#endif + +#ifdef LIBCONFIG_LONG +#define libconfig_int long +#else +#define libconfig_int int +#endif + +typedef enum { + RU = 0, + L1 = 1, + L2 = 2, + L3 = 3, + S1 = 4, + lastel = 5 +} NRRC_config_functions_t; + +#define CONFIG_STRING_ACTIVE_RUS "Active_RUs" +/*------------------------------------------------------------------------------------------------------------------------------------------*/ +/* RUs configuration section name */ +#define CONFIG_STRING_RU_LIST "RUs" +#define CONFIG_STRING_RU_CONFIG "ru_config" + +/* RUs configuration parameters name */ +#define CONFIG_STRING_RU_LOCAL_IF_NAME "local_if_name" +#define CONFIG_STRING_RU_LOCAL_ADDRESS "local_address" +#define CONFIG_STRING_RU_REMOTE_ADDRESS "remote_address" +#define CONFIG_STRING_RU_LOCAL_PORTC "local_portc" +#define CONFIG_STRING_RU_REMOTE_PORTC "remote_portc" +#define CONFIG_STRING_RU_LOCAL_PORTD "local_portd" +#define CONFIG_STRING_RU_REMOTE_PORTD "remote_portd" +#define CONFIG_STRING_RU_LOCAL_RF "local_rf" +#define CONFIG_STRING_RU_TRANSPORT_PREFERENCE "tr_preference" +#define CONFIG_STRING_RU_BAND_LIST "bands" +#define CONFIG_STRING_RU_GNB_LIST "gNB_instances" +#define CONFIG_STRING_RU_NB_TX "nb_tx" +#define CONFIG_STRING_RU_NB_RX "nb_rx" +#define CONFIG_STRING_RU_ATT_TX "att_tx" +#define CONFIG_STRING_RU_ATT_RX "att_rx" +#define CONFIG_STRING_RU_MAX_RS_EPRE "max_pdschReferenceSignalPower" +#define CONFIG_STRING_RU_MAX_RXGAIN "max_rxgain" +#define CONFIG_STRING_RU_IF_COMPRESSION "if_compression" +#define CONFIG_STRING_RU_NBIOTRRC_LIST "NbIoT_RRC_instances" + +#define RU_LOCAL_IF_NAME_IDX 0 +#define RU_LOCAL_ADDRESS_IDX 1 +#define RU_REMOTE_ADDRESS_IDX 2 +#define RU_LOCAL_PORTC_IDX 3 +#define RU_REMOTE_PORTC_IDX 4 +#define RU_LOCAL_PORTD_IDX 5 +#define RU_REMOTE_PORTD_IDX 6 +#define RU_TRANSPORT_PREFERENCE_IDX 7 +#define RU_LOCAL_RF_IDX 8 +#define RU_NB_TX_IDX 9 +#define RU_NB_RX_IDX 10 +#define RU_MAX_RS_EPRE_IDX 11 +#define RU_MAX_RXGAIN_IDX 12 +#define RU_BAND_LIST_IDX 13 +#define RU_GNB_LIST_IDX 14 +#define RU_ATT_TX_IDX 15 +#define RU_ATT_RX_IDX 16 +#define RU_NBIOTRRC_LIST_IDX 17 + + + +/*-----------------------------------------------------------------------------------------------------------------------------------------*/ +/* RU configuration parameters */ +/* optname helpstr paramflags XXXptr defXXXval type numelt */ +/*-----------------------------------------------------------------------------------------------------------------------------------------*/ +#define RUPARAMS_DESC { \ +{CONFIG_STRING_RU_LOCAL_IF_NAME, NULL, 0, strptr:NULL, defstrval:"lo", TYPE_STRING, 0}, \ +{CONFIG_STRING_RU_LOCAL_ADDRESS, NULL, 0, strptr:NULL, defstrval:"127.0.0.2", TYPE_STRING, 0}, \ +{CONFIG_STRING_RU_REMOTE_ADDRESS, NULL, 0, strptr:NULL, defstrval:"127.0.0.1", TYPE_STRING, 0}, \ +{CONFIG_STRING_RU_LOCAL_PORTC, NULL, 0, uptr:NULL, defuintval:50000, TYPE_UINT, 0}, \ +{CONFIG_STRING_RU_REMOTE_PORTC, NULL, 0, uptr:NULL, defuintval:50000, TYPE_UINT, 0}, \ +{CONFIG_STRING_RU_LOCAL_PORTD, NULL, 0, uptr:NULL, defuintval:50001, TYPE_UINT, 0}, \ +{CONFIG_STRING_RU_REMOTE_PORTD, NULL, 0, uptr:NULL, defuintval:50001, TYPE_UINT, 0}, \ +{CONFIG_STRING_RU_TRANSPORT_PREFERENCE, NULL, 0, strptr:NULL, defstrval:"udp_if5", TYPE_STRING, 0}, \ +{CONFIG_STRING_RU_LOCAL_RF, NULL, 0, strptr:NULL, defstrval:"yes", TYPE_STRING, 0}, \ +{CONFIG_STRING_RU_NB_TX, NULL, 0, uptr:NULL, defuintval:1, TYPE_UINT, 0}, \ +{CONFIG_STRING_RU_NB_RX, NULL, 0, uptr:NULL, defuintval:1, TYPE_UINT, 0}, \ +{CONFIG_STRING_RU_MAX_RS_EPRE, NULL, 0, iptr:NULL, defintval:-29, TYPE_INT, 0}, \ +{CONFIG_STRING_RU_MAX_RXGAIN, NULL, 0, iptr:NULL, defintval:120, TYPE_INT, 0}, \ +{CONFIG_STRING_RU_BAND_LIST, NULL, 0, uptr:NULL, defintarrayval:DEFBANDS, TYPE_INTARRAY, 1}, \ +{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}, \ +} + +/*---------------------------------------------------------------------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------------------------------------------------------------------*/ +/* value definitions for ASN1 verbosity parameter */ +#define GNB_CONFIG_STRING_ASN1_VERBOSITY_NONE "none" +#define GNB_CONFIG_STRING_ASN1_VERBOSITY_ANNOYING "annoying" +#define GNB_CONFIG_STRING_ASN1_VERBOSITY_INFO "info" + + +/* global parameters, not under a specific section */ +#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 */ +/*--------------------------------------------------------------------------------------------------------------------------------------------------------------*/ +#define GNBSPARAMS_DESC { \ +{GNB_CONFIG_STRING_ASN1_VERBOSITY, NULL, 0, uptr:NULL, defstrval:GNB_CONFIG_STRING_ASN1_VERBOSITY_NONE, TYPE_STRING, 0}, \ +{GNB_CONFIG_STRING_ACTIVE_GNBS, NULL, 0, uptr:NULL, defstrval:NULL, TYPE_STRINGLIST, 0} \ +} +#define GNB_ASN1_VERBOSITY_IDX 0 +#define GNB_ACTIVE_GNBS_IDX 1 + +/*------------------------------------------------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------------------------------------------------*/ + + +/* cell configuration parameters names */ +#define GNB_CONFIG_STRING_GNB_ID "gNB_ID" +#define GNB_CONFIG_STRING_CELL_TYPE "cell_type" +#define GNB_CONFIG_STRING_GNB_NAME "gNB_name" +#define GNB_CONFIG_STRING_TRACKING_AREA_CODE "tracking_area_code" +#define GNB_CONFIG_STRING_MOBILE_COUNTRY_CODE "mobile_country_code" +#define GNB_CONFIG_STRING_MOBILE_NETWORK_CODE "mobile_network_code" +#define GNB_CONFIG_STRING_TRANSPORT_S_PREFERENCE "tr_s_preference" +#define GNB_CONFIG_STRING_LOCAL_S_IF_NAME "local_s_if_name" +#define GNB_CONFIG_STRING_LOCAL_S_ADDRESS "local_s_address" +#define GNB_CONFIG_STRING_REMOTE_S_ADDRESS "remote_s_address" +#define GNB_CONFIG_STRING_LOCAL_S_PORTC "local_s_portc" +#define GNB_CONFIG_STRING_REMOTE_S_PORTC "remote_s_portc" +#define GNB_CONFIG_STRING_LOCAL_S_PORTD "local_s_portd" +#define GNB_CONFIG_STRING_REMOTE_S_PORTD "remote_s_portd" + +/*-----------------------------------------------------------------------------------------------------------------------------------------*/ +/* cell configuration parameters */ +/* optname helpstr paramflags XXXptr defXXXval type numelt */ +/*-----------------------------------------------------------------------------------------------------------------------------------------*/ +#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_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}, \ +{GNB_CONFIG_STRING_TRANSPORT_S_PREFERENCE, NULL, 0, strptr:NULL, defstrval:"local_mac", TYPE_STRING, 0}, \ +{GNB_CONFIG_STRING_LOCAL_S_IF_NAME, NULL, 0, strptr:NULL, defstrval:"lo", TYPE_STRING, 0}, \ +{GNB_CONFIG_STRING_LOCAL_S_ADDRESS, NULL, 0, strptr:NULL, defstrval:"127.0.0.1", TYPE_STRING, 0}, \ +{GNB_CONFIG_STRING_REMOTE_S_ADDRESS, NULL, 0, strptr:NULL, defstrval:"127.0.0.2", TYPE_STRING, 0}, \ +{GNB_CONFIG_STRING_LOCAL_S_PORTC, NULL, 0, uptr:NULL, defuintval:50000, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_REMOTE_S_PORTC, NULL, 0, uptr:NULL, defuintval:50000, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_LOCAL_S_PORTD, NULL, 0, uptr:NULL, defuintval:50001, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_REMOTE_S_PORTD, NULL, 0, uptr:NULL, defuintval:50001, TYPE_UINT, 0}, \ +} +#define GNB_GNB_ID_IDX 0 +#define GNB_CELL_TYPE_IDX 1 +#define GNB_GNB_NAME_IDX 2 +#define GNB_TRACKING_AREA_CODE_IDX 3 +#define GNB_MOBILE_COUNTRY_CODE_IDX 4 +#define GNB_MOBILE_NETWORK_CODE_IDX 5 +#define GNB_TRANSPORT_S_PREFERENCE_IDX 6 +#define GNB_LOCAL_S_IF_NAME_IDX 7 +#define GNB_LOCAL_S_ADDRESS_IDX 8 +#define GNB_REMOTE_S_ADDRESS_IDX 9 +#define GNB_LOCAL_S_PORTC_IDX 10 +#define GNB_REMOTE_S_PORTC_IDX 11 +#define GNB_LOCAL_S_PORTD_IDX 12 +#define GNB_REMOTE_S_PORTD_IDX 13 +/*-------------------------------------------------------------------------------------------------------------------------------------------------*/ +/*-------------------------------------------------------------------------------------------------------------------------------------------------*/ + + +/* 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" + + ///NR + //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" + + //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" + + // NR BWP-DOWNLINKCOMMON +#define GNB_CONFIG_STRING_DL_LOCATIONANDBANDWIDTH "DL_locationAndBandwidth" +///#define GNB_CONFIG_STRING_DL_PREFIX_TYPE; + + //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" + + //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" + + // 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" + + + //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" + + //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" + //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" + + //PUSCH-CONFIGCOMMON +#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" + + //PUCCH-CONFIGCOMMON +#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" + + //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" + + //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" + //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" + + //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; + + diff --git a/openair2/RRC/NR/MESSAGES/asn1_msg.c b/openair2/RRC/NR/MESSAGES/asn1_msg.c index a05b27ddc361f93e62c6bb6bac70803b662ac152..ab5d69fba33486e6aa7765173693ca52e67dc25d 100644 --- a/openair2/RRC/NR/MESSAGES/asn1_msg.c +++ b/openair2/RRC/NR/MESSAGES/asn1_msg.c @@ -48,41 +48,42 @@ #include <asn_internal.h> /* for _ASN_DEFAULT_STACK_MAX */ #include <per_encoder.h> +#include "RRC/NR/defs_NR.h" +//#include "RRC/LITE/extern.h" + +#if defined(Rel15) #include "assertions.h" -#include "RRCConnectionRequest.h" -#include "UL-CCCH-Message.h" +//#include "RRCConnectionRequest.h" +//#include "UL-CCCH-Message.h" #include "UL-DCCH-Message.h" -#include "DL-CCCH-Message.h" +//#include "DL-CCCH-Message.h" #include "DL-DCCH-Message.h" -#include "EstablishmentCause.h" -#include "RRCConnectionSetup.h" +//#include "EstablishmentCause.h" +//#include "RRCConnectionSetup.h" #include "SRB-ToAddModList.h" #include "DRB-ToAddModList.h" -#if defined(Rel10) || defined(Rel14) -#include "MCCH-Message.h" +//#include "MCCH-Message.h" //#define MRB1 1 -#endif -#include "RRC/LITE/defs.h" -#include "RRC/LITE/extern.h" -#include "RRCConnectionSetupComplete.h" -#include "RRCConnectionReconfigurationComplete.h" -#include "RRCConnectionReconfiguration.h" -#include "MasterInformationBlock.h" -#include "SystemInformation.h" +//#include "RRCConnectionSetupComplete.h" +//#include "RRCConnectionReconfigurationComplete.h" +//#include "RRCConnectionReconfiguration.h" +#include "MIB.h" +//#include "SystemInformation.h" -#include "SystemInformationBlockType1.h" +#include "SIB1.h" -#include "SIB-Type.h" +//#include "SIB-Type.h" -#include "BCCH-DL-SCH-Message.h" +//#include "BCCH-DL-SCH-Message.h" -#include "PHY/defs.h" +//#include "PHY/defs.h" #include "MeasObjectToAddModList.h" #include "ReportConfigToAddModList.h" #include "MeasIdToAddModList.h" #include "enb_config.h" +#endif #if defined(ENABLE_ITTI) # include "intertask_interface.h" @@ -110,7 +111,9 @@ typedef struct xer_sprint_string_s { size_t string_index; } xer_sprint_string_t; -extern unsigned char NB_eNB_INST; +//repplace LTE +//extern unsigned char NB_eNB_INST; +extern unsigned char NB_gNB_INST; extern uint8_t usim_test; extern RAN_CONTEXT_t RC; @@ -129,7 +132,7 @@ uint16_t two_tier_hexagonal_adjacent_cellIds[7][6] = {{1,2,4,5,7,8}, // CellI * This is a helper function for xer_sprint, which directs all incoming data * into the provided string. */ -static int xer__print2s (const void *buffer, size_t size, void *app_key) +static int xer__print2s_NR (const void *buffer, size_t size, void *app_key) { xer_sprint_string_t *string_buffer = (xer_sprint_string_t *) app_key; size_t string_remaining = string_buffer->string_size - string_buffer->string_index; @@ -146,7 +149,7 @@ static int xer__print2s (const void *buffer, size_t size, void *app_key) return 0; } -int xer_sprint (char *string, size_t string_size, asn_TYPE_descriptor_t *td, void *sptr) +int xer_sprint_NR (char *string, size_t string_size, asn_TYPE_descriptor_t *td, void *sptr) { asn_enc_rval_t er; xer_sprint_string_t string_buffer; @@ -170,13 +173,13 @@ int xer_sprint (char *string, size_t string_size, asn_TYPE_descriptor_t *td, voi return er.encoded; } -uint16_t get_adjacent_cell_id(uint8_t Mod_id,uint8_t index) +uint16_t get_adjacent_cell_id_NR(uint8_t Mod_id,uint8_t index) { return(two_tier_hexagonal_adjacent_cellIds[Mod_id][index]); } /* This only works for the hexagonal topology...need a more general function for other topologies */ -uint8_t get_adjacent_cell_mod_id(uint16_t phyCellId) +uint8_t get_adjacent_cell_mod_id_NR(uint16_t phyCellId) { uint8_t i; @@ -190,94 +193,89 @@ uint8_t get_adjacent_cell_mod_id(uint16_t phyCellId) return 0xFF; //error! } -uint8_t do_MIB(rrc_eNB_carrier_data_t *carrier, uint32_t N_RB_DL, uint32_t phich_Resource, uint32_t phich_duration, uint32_t frame) +//------------------------------------------------------------------------------ + +uint8_t do_MIB_NR(rrc_gNB_carrier_data_t *carrier, + uint32_t frame, + uint32_t ssb_SubcarrierOffset, + uint32_t pdcch_ConfigSIB1, + uint32_t subCarrierSpacingCommon, + uint32_t dmrs_TypeA_Position) { asn_enc_rval_t enc_rval; - BCCH_BCH_Message_t *mib=&carrier->mib ; - uint8_t sfn = (uint8_t)((frame>>2)&0xff); - uint16_t *spare= calloc(1, sizeof(uint16_t)); + + BCCH_BCH_Message_t *mib=&carrier->mib_NR ; + memset(mib,0,sizeof(BCCH_BCH_Message_t)); + mib->message.present = BCCH_BCH_MessageType_PR_mib; + + //36.331 SFN BIT STRING (SIZE (8) , 38.331 SFN BIT STRING (SIZE (6)) + uint8_t sfn = (uint8_t)((frame>>4)&0x3f); + mib->message.choice.mib.systemFrameNumber.buf = &sfn; + mib->message.choice.mib.systemFrameNumber.size = 1; + mib->message.choice.mib.systemFrameNumber.bits_unused=0; + + //38.331 spare BIT STRING (SIZE (1)) + uint8_t *spare= calloc(1, sizeof(uint8_t)); if (spare == NULL) abort(); + mib->message.choice.mib.spare.buf = (uint8_t *)spare; + mib->message.choice.mib.spare.size = 1; + mib->message.choice.mib.spare.bits_unused = 7; // This makes a spare of 1 bits - switch (N_RB_DL) { + mib->message.choice.mib.ssb_SubcarrierOffset = ssb_SubcarrierOffset; + mib->message.choice.mib.pdcch_ConfigSIB1 = pdcch_ConfigSIB1; + + switch (subCarrierSpacingCommon) { + case 15: + mib->message.choice.mib.subCarrierSpacingCommon = MIB__subCarrierSpacingCommon_scs15or60; + break; - case 6: - mib->message.dl_Bandwidth = MasterInformationBlock__dl_Bandwidth_n6; - break; + case 30: + mib->message.choice.mib.subCarrierSpacingCommon = MIB__subCarrierSpacingCommon_scs30or120; + break; - case 15: - mib->message.dl_Bandwidth = MasterInformationBlock__dl_Bandwidth_n15; - break; + case 60: + mib->message.choice.mib.subCarrierSpacingCommon = MIB__subCarrierSpacingCommon_scs15or60; + break; - case 25: - mib->message.dl_Bandwidth = MasterInformationBlock__dl_Bandwidth_n25; - break; + case 120: + mib->message.choice.mib.subCarrierSpacingCommon = MIB__subCarrierSpacingCommon_scs30or120; + break; - case 50: - mib->message.dl_Bandwidth = MasterInformationBlock__dl_Bandwidth_n50; - break; + default: + AssertFatal(1==0,"Unknown subCarrierSpacingCommon %d\n",subCarrierSpacingCommon); + } - case 75: - mib->message.dl_Bandwidth = MasterInformationBlock__dl_Bandwidth_n75; - break; + switch (dmrs_TypeA_Position) { + case 2: + mib->message.choice.mib.dmrs_TypeA_Position = MIB__dmrs_TypeA_Position_pos2; + break; + + case 3: + mib->message.choice.mib.dmrs_TypeA_Position = MIB__dmrs_TypeA_Position_pos3; + break; + + default: + AssertFatal(1==0,"Unknown dmrs_TypeA_Position %d\n",dmrs_TypeA_Position); - case 100: - mib->message.dl_Bandwidth = MasterInformationBlock__dl_Bandwidth_n100; - break; - default: - AssertFatal(1==0,"Unknown dl_Bandwidth %d\n",N_RB_DL); } - AssertFatal(phich_Resource <= PHICH_Config__phich_Resource_two,"Illegal phich_Resource\n"); - mib->message.phich_Config.phich_Resource = phich_Resource; - AssertFatal(phich_Resource <= PHICH_Config__phich_Duration_extended,"Illegal phich_Duration\n"); - mib->message.phich_Config.phich_Duration = phich_duration; - LOG_I(RRC,"[MIB] systemBandwidth %x, phich_duration %x, phich_resource %x,sfn %x\n", - (uint32_t)mib->message.dl_Bandwidth, - (uint32_t)phich_duration, - (uint32_t)phich_Resource, - (uint32_t)sfn); - - mib->message.systemFrameNumber.buf = &sfn; - mib->message.systemFrameNumber.size = 1; - mib->message.systemFrameNumber.bits_unused=0; - mib->message.spare.buf = (uint8_t *)spare; -#ifndef Rel14 - mib->message.spare.size = 2; - mib->message.spare.bits_unused = 6; // This makes a spare of 10 bits -#else - mib->message.spare.size = 1; - mib->message.spare.bits_unused = 3; // This makes a spare of 5 bits - mib->message.schedulingInfoSIB1_BR_r13 = 0; // turn off eMTC -#endif + // assign_enum + mib->message.choice.mib.cellBarred = MIB__cellBarred_notBarred; + // assign_enum + mib->message.choice.mib.intraFreqReselection = MIB__intraFreqReselection_notAllowed; + + + //encode MIB to data enc_rval = uper_encode_to_buffer(&asn_DEF_BCCH_BCH_Message, (void*)mib, - carrier->MIB, + carrier->MIB_NR, 24); AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n", enc_rval.failed_type->name, enc_rval.encoded); - /* -#if defined(ENABLE_ITTI) -# if !defined(DISABLE_XER_SPRINT) - { - char message_string[20000]; - size_t message_string_size; - - if ((message_string_size = xer_sprint(message_string, sizeof(message_string), &asn_DEF_BCCH_BCH_Message, (void *) &mib)) > 0) { - MessageDef *msg_p; - - msg_p = itti_alloc_new_message_sized (TASK_RRC_ENB, RRC_DL_BCCH, message_string_size + sizeof (IttiMsgText)); - msg_p->ittiMsg.rrc_dl_bcch.size = message_string_size; - memcpy(&msg_p->ittiMsg.rrc_dl_bcch.text, message_string, message_string_size); - itti_send_msg_to_task(TASK_UNKNOWN, enb_module_idP, msg_p); - } - } -# endif -#endif - */ if (enc_rval.encoded==-1) { return(-1); } @@ -285,12 +283,15 @@ uint8_t do_MIB(rrc_eNB_carrier_data_t *carrier, uint32_t N_RB_DL, uint32_t phich return((enc_rval.encoded+7)/8); } -uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier, - int Mod_id,int CC_id -#if defined(ENABLE_ITTI) - , RrcConfigurationReq *configuration -#endif - ) +//------------------------------------------------------------------------------ + +uint8_t do_SIB1_NR(rrc_gNB_carrier_data_t *carrier, + int Mod_id, + int CC_id + #if defined(ENABLE_ITTI) + , gNB_RrcConfigurationReq *configuration + #endif + ) { // SystemInformation_t systemInformation; @@ -302,7 +303,7 @@ uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier, uint8_t *buffer = carrier->SIB1; BCCH_DL_SCH_Message_t *bcch_message = &carrier->siblock1; - SystemInformationBlockType1_t **sib1 = &carrier->sib1; + SIB1_t **sib1 = &carrier->sib1; memset(bcch_message,0,sizeof(BCCH_DL_SCH_Message_t)); @@ -494,6 +495,8 @@ uint8_t do_SIB1(rrc_eNB_carrier_data_t *carrier, return((enc_rval.encoded+7)/8); } +//------------------------------------------------------------------------------ +/* uint8_t do_SIB23(uint8_t Mod_id, int CC_id @@ -960,9 +963,7 @@ uint8_t do_SIB23(uint8_t Mod_id, bcch_message->message.present = BCCH_DL_SCH_MessageType_PR_c1; bcch_message->message.choice.c1.present = BCCH_DL_SCH_MessageType__c1_PR_systemInformation; - /* memcpy((void*)&bcch_message.message.choice.c1.choice.systemInformation, - (void*)systemInformation, - sizeof(SystemInformation_t));*/ + //memcpy((void*)&bcch_message.message.choice.c1.choice.systemInformation,(void*)systemInformation,sizeof(SystemInformation_t)); bcch_message->message.choice.c1.choice.systemInformation.criticalExtensions.present = SystemInformation__criticalExtensions_PR_systemInformation_r8; @@ -1024,7 +1025,11 @@ uint8_t do_SIB23(uint8_t Mod_id, return((enc_rval.encoded+7)/8); } +*/ + +//------------------------------------------------------------------------------ +/* uint8_t do_RRCConnectionRequest(uint8_t Mod_id, uint8_t *buffer,uint8_t *rv) { @@ -1109,7 +1114,11 @@ uint8_t do_RRCConnectionRequest(uint8_t Mod_id, uint8_t *buffer,uint8_t *rv) return((enc_rval.encoded+7)/8); } +*/ +//------------------------------------------------------------------------------ + +/* uint8_t do_RRCConnectionSetupComplete(uint8_t Mod_id, uint8_t *buffer, const uint8_t Transaction_id, const int dedicatedInfoNASLength, const char *dedicatedInfoNAS) { @@ -1140,24 +1149,24 @@ uint8_t do_RRCConnectionSetupComplete(uint8_t Mod_id, uint8_t *buffer, const uin rrcConnectionSetupComplete->criticalExtensions.choice.c1.choice.rrcConnectionSetupComplete_r8.registeredMME = NULL;//calloc(1,sizeof(*rrcConnectionSetupComplete->criticalExtensions.choice.c1.choice.rrcConnectionSetupComplete_r8.registeredMME)); - /* - rrcConnectionSetupComplete->criticalExtensions.choice.c1.choice.rrcConnectionSetupComplete_r8.registeredMME->plmn_Identity=NULL; - rrcConnectionSetupComplete->criticalExtensions.choice.c1.choice.rrcConnectionSetupComplete_r8.registeredMME->mmegi.buf = calloc(2,1); - rrcConnectionSetupComplete->criticalExtensions.choice.c1.choice.rrcConnectionSetupComplete_r8.registeredMME->mmegi.buf[0] = 0x0; - rrcConnectionSetupComplete->criticalExtensions.choice.c1.choice.rrcConnectionSetupComplete_r8.registeredMME->mmegi.buf[1] = 0x1; - rrcConnectionSetupComplete->criticalExtensions.choice.c1.choice.rrcConnectionSetupComplete_r8.registeredMME->mmegi.size=2; - rrcConnectionSetupComplete->criticalExtensions.choice.c1.choice.rrcConnectionSetupComplete_r8.registeredMME->mmegi.bits_unused=0; - */ + + //rrcConnectionSetupComplete->criticalExtensions.choice.c1.choice.rrcConnectionSetupComplete_r8.registeredMME->plmn_Identity=NULL; + //rrcConnectionSetupComplete->criticalExtensions.choice.c1.choice.rrcConnectionSetupComplete_r8.registeredMME->mmegi.buf = calloc(2,1); + //rrcConnectionSetupComplete->criticalExtensions.choice.c1.choice.rrcConnectionSetupComplete_r8.registeredMME->mmegi.buf[0] = 0x0; + //rrcConnectionSetupComplete->criticalExtensions.choice.c1.choice.rrcConnectionSetupComplete_r8.registeredMME->mmegi.buf[1] = 0x1; + //rrcConnectionSetupComplete->criticalExtensions.choice.c1.choice.rrcConnectionSetupComplete_r8.registeredMME->mmegi.size=2; + //rrcConnectionSetupComplete->criticalExtensions.choice.c1.choice.rrcConnectionSetupComplete_r8.registeredMME->mmegi.bits_unused=0; + memset(&rrcConnectionSetupComplete->criticalExtensions.choice.c1.choice.rrcConnectionSetupComplete_r8.dedicatedInfoNAS,0,sizeof(OCTET_STRING_t)); OCTET_STRING_fromBuf(&rrcConnectionSetupComplete->criticalExtensions.choice.c1.choice.rrcConnectionSetupComplete_r8.dedicatedInfoNAS, dedicatedInfoNAS, dedicatedInfoNASLength); - /* - rrcConnectionSetupComplete->criticalExtensions.choice.c1.choice.rrcConnectionSetupComplete_r8.registeredMME->mmec.buf = calloc(1,1); - rrcConnectionSetupComplete->criticalExtensions.choice.c1.choice.rrcConnectionSetupComplete_r8.registeredMME->mmec.buf[0] = 0x98; - rrcConnectionSetupComplete->criticalExtensions.choice.c1.choice.rrcConnectionSetupComplete_r8.registeredMME->mmec.size=1; - rrcConnectionSetupComplete->criticalExtensions.choice.c1.choice.rrcConnectionSetupComplete_r8.registeredMME->mmec.bits_unused=0; - */ + + //rrcConnectionSetupComplete->criticalExtensions.choice.c1.choice.rrcConnectionSetupComplete_r8.registeredMME->mmec.buf = calloc(1,1); + //rrcConnectionSetupComplete->criticalExtensions.choice.c1.choice.rrcConnectionSetupComplete_r8.registeredMME->mmec.buf[0] = 0x98; + //rrcConnectionSetupComplete->criticalExtensions.choice.c1.choice.rrcConnectionSetupComplete_r8.registeredMME->mmec.size=1; + //rrcConnectionSetupComplete->criticalExtensions.choice.c1.choice.rrcConnectionSetupComplete_r8.registeredMME->mmec.bits_unused=0; + enc_rval = uper_encode_to_buffer(&asn_DEF_UL_DCCH_Message, (void*)&ul_dcch_msg, @@ -1192,8 +1201,11 @@ uint8_t do_RRCConnectionSetupComplete(uint8_t Mod_id, uint8_t *buffer, const uin return((enc_rval.encoded+7)/8); } +*/ //------------------------------------------------------------------------------ + +/* uint8_t do_RRCConnectionReconfigurationComplete( const protocol_ctxt_t* const ctxt_pP, @@ -1253,9 +1265,11 @@ do_RRCConnectionReconfigurationComplete( return((enc_rval.encoded+7)/8); } - +*/ //------------------------------------------------------------------------------ + +/* uint8_t do_RRCConnectionSetup( const protocol_ctxt_t* const ctxt_pP, @@ -1444,16 +1458,16 @@ do_RRCConnectionSetup( physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic=CALLOC(1,sizeof(*physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic)); physicalConfigDedicated2->cqi_ReportConfig->cqi_ReportPeriodic->present = CQI_ReportPeriodic_PR_release; - /* - 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; - */ + + //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 if (rrc->srs_enable[CC_id]==1) { @@ -1516,36 +1530,36 @@ do_RRCConnectionSetup( case 2: physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode= AntennaInfoDedicated__transmissionMode_tm2; break; - /* - case 3: - physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode= AntennaInfoDedicated__transmissionMode_tm3; - physicalConfigDedicated2->antennaInfo->choice.explicitValue.codebookSubsetRestriction= CALLOC(1, - sizeof(*physicalConfigDedicated2->antennaInfo->choice.explicitValue.codebookSubsetRestriction)); - physicalConfigDedicated2->antennaInfo->choice.explicitValue.codebookSubsetRestriction->present = - AntennaInfoDedicated__codebookSubsetRestriction_PR_n2TxAntenna_tm3; - physicalConfigDedicated2->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm3.buf= MALLOC(1); - physicalConfigDedicated2->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm3.buf[0] = 0xc0; - physicalConfigDedicated2->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm3.size=1; - physicalConfigDedicated2->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm3.bits_unused=6; - - 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; - - case 7: - physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode= AntennaInfoDedicated__transmissionMode_tm7; - break; - */ + + //case 3: + // physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode= AntennaInfoDedicated__transmissionMode_tm3; + // physicalConfigDedicated2->antennaInfo->choice.explicitValue.codebookSubsetRestriction= CALLOC(1, + // sizeof(*physicalConfigDedicated2->antennaInfo->choice.explicitValue.codebookSubsetRestriction)); + // physicalConfigDedicated2->antennaInfo->choice.explicitValue.codebookSubsetRestriction->present = + // AntennaInfoDedicated__codebookSubsetRestriction_PR_n2TxAntenna_tm3; + // physicalConfigDedicated2->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm3.buf= MALLOC(1); + // physicalConfigDedicated2->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm3.buf[0] = 0xc0; + // physicalConfigDedicated2->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm3.size=1; + // physicalConfigDedicated2->antennaInfo->choice.explicitValue.codebookSubsetRestriction->choice.n2TxAntenna_tm3.bits_unused=6; + + // 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; + + //case 7: + // physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode= AntennaInfoDedicated__transmissionMode_tm7; + // break; + } @@ -1649,8 +1663,11 @@ do_RRCConnectionSetup( return((enc_rval.encoded+7)/8); } +*/ //------------------------------------------------------------------------------ + +/* uint8_t do_SecurityModeCommand( const protocol_ctxt_t* const ctxt_pP, @@ -1728,8 +1745,11 @@ do_SecurityModeCommand( // exit(-1); return((enc_rval.encoded+7)/8); } +*/ //------------------------------------------------------------------------------ + +/* uint8_t do_UECapabilityEnquiry( const protocol_ctxt_t* const ctxt_pP, @@ -1804,8 +1824,11 @@ do_UECapabilityEnquiry( return((enc_rval.encoded+7)/8); } +*/ //------------------------------------------------------------------------------ + +/* uint16_t do_RRCConnectionReconfiguration( const protocol_ctxt_t* const ctxt_pP, @@ -1963,8 +1986,11 @@ do_RRCConnectionReconfiguration( return((enc_rval.encoded+7)/8); } +*/ //------------------------------------------------------------------------------ + +/* uint8_t do_RRCConnectionReestablishmentReject( uint8_t Mod_id, @@ -2021,8 +2047,11 @@ do_RRCConnectionReestablishmentReject( return((enc_rval.encoded+7)/8); } +*/ //------------------------------------------------------------------------------ + +/* uint8_t do_RRCConnectionReject( uint8_t Mod_id, @@ -2043,7 +2072,7 @@ do_RRCConnectionReject( // RRCConnectionReject rrcConnectionReject->criticalExtensions.present = RRCConnectionReject__criticalExtensions_PR_c1; rrcConnectionReject->criticalExtensions.choice.c1.present = RRCConnectionReject__criticalExtensions__c1_PR_rrcConnectionReject_r8; - /* let's put a wait time of 1s for the moment */ + /// let's put a wait time of 1s for the moment rrcConnectionReject->criticalExtensions.choice.c1.choice.rrcConnectionReject_r8.waitTime = 1; #ifdef XER_PRINT @@ -2082,7 +2111,11 @@ do_RRCConnectionReject( return((enc_rval.encoded+7)/8); } +*/ +//------------------------------------------------------------------------------ + +/* uint8_t do_RRCConnectionRelease( uint8_t Mod_id, uint8_t *buffer, @@ -2120,10 +2153,15 @@ uint8_t do_RRCConnectionRelease( return((enc_rval.encoded+7)/8); } +*/ +/* uint8_t TMGI[5] = {4,3,2,1,0};//TMGI is a string of octet, ref. TS 24.008 fig. 10.5.4a +*/ +//------------------------------------------------------------------------------ +/* #if defined(Rel10) || defined(Rel14) uint8_t do_MBSFNAreaConfig(uint8_t Mod_id, uint8_t sync_area, @@ -2190,10 +2228,10 @@ uint8_t do_MBSFNAreaConfig(uint8_t Mod_id, pmch_Info_1 = CALLOC(1,sizeof(PMCH_Info_r9_t)); memset((void*)pmch_Info_1,0,sizeof(PMCH_Info_r9_t)); - /* - * take the value of last mbsfn subframe in this CSA period because there is only one PMCH in this mbsfn area - * Note: this has to be set based on the subframeAllocation and CSA - */ + + ///take the value of last mbsfn subframe in this CSA period because there is only one PMCH in this mbsfn area + ///Note: this has to be set based on the subframeAllocation and CSA + pmch_Info_1->pmch_Config_r9.sf_AllocEnd_r9= 3; pmch_Info_1->pmch_Config_r9.dataMCS_r9= 7; pmch_Info_1->pmch_Config_r9.mch_SchedulingPeriod_r9= PMCH_Config_r9__mch_SchedulingPeriod_r9_rf16; @@ -2218,23 +2256,23 @@ uint8_t do_MBSFNAreaConfig(uint8_t Mod_id, mbms_Session_1->logicalChannelIdentity_r9= MTCH; ASN_SEQUENCE_ADD(&pmch_Info_1->mbms_SessionInfoList_r9.list,mbms_Session_1); - /* // Session 2 + /// Session 2 //mbms_Session_2 = CALLOC(1,sizeof(MBMS_SessionInfo_r9_t)); - memset(mbms_Session_2,0,sizeof(MBMS_SessionInfo_r9_t)); - // TMGI value - mbms_Session_2->tmgi_r9.plmn_Id_r9.present= TMGI_r9__plmn_Id_r9_PR_plmn_Index_r9; - mbms_Session_2->tmgi_r9.plmn_Id_r9.choice.plmn_Index_r9= 1; - // Service ID - memset(&mbms_Session_2->tmgi_r9.serviceId_r9,0,sizeof(OCTET_STRING_t));// need to check - OCTET_STRING_fromBuf(&mbms_Session_2->tmgi_r9.serviceId_r9,(const char*)&TMGI[3],3); - // Session ID is still missing here - mbms_Session_2->sessionID_r9->buf= MALLOC(1); - mbms_Session_2->sessionID_r9->size= 1; - mbms_Session_2->sessionID_r9->buf[0]= 0x11; - // Logical Channel ID - mbms_Session_2->logicalChannelIdentity_r9= 2; - ASN_SEQUENCE_ADD(&pmch_Info_1->mbms_SessionInfoList_r9.list,mbms_Session_2); - */ + //memset(mbms_Session_2,0,sizeof(MBMS_SessionInfo_r9_t)); + /// TMGI value + //mbms_Session_2->tmgi_r9.plmn_Id_r9.present= TMGI_r9__plmn_Id_r9_PR_plmn_Index_r9; + //mbms_Session_2->tmgi_r9.plmn_Id_r9.choice.plmn_Index_r9= 1; + /// Service ID + //memset(&mbms_Session_2->tmgi_r9.serviceId_r9,0,sizeof(OCTET_STRING_t));// need to check + //OCTET_STRING_fromBuf(&mbms_Session_2->tmgi_r9.serviceId_r9,(const char*)&TMGI[3],3); + /// Session ID is still missing here + //mbms_Session_2->sessionID_r9->buf= MALLOC(1); + //mbms_Session_2->sessionID_r9->size= 1; + //mbms_Session_2->sessionID_r9->buf[0]= 0x11; + /// Logical Channel ID + //mbms_Session_2->logicalChannelIdentity_r9= 2; + //ASN_SEQUENCE_ADD(&pmch_Info_1->mbms_SessionInfoList_r9.list,mbms_Session_2); + ASN_SEQUENCE_ADD(&(*mbsfnAreaConfiguration)->pmch_InfoList_r9.list,pmch_Info_1); #ifdef XER_PRINT @@ -2278,7 +2316,11 @@ uint8_t do_MBSFNAreaConfig(uint8_t Mod_id, return((enc_rval.encoded+7)/8); } #endif +*/ + +//------------------------------------------------------------------------------ +/* uint8_t do_MeasurementReport(uint8_t Mod_id, uint8_t *buffer,int measid,int phy_id,long rsrp_s,long rsrq_s,long rsrp_t,long rsrq_t) { @@ -2406,7 +2448,11 @@ uint8_t do_MeasurementReport(uint8_t Mod_id, uint8_t *buffer,int measid,int phy_ return((enc_rval.encoded+7)/8); } +*/ + +//------------------------------------------------------------------------------ +/* uint8_t do_DLInformationTransfer(uint8_t Mod_id, uint8_t **buffer, uint8_t transaction_id, uint32_t pdu_length, uint8_t *pdu_buffer) { ssize_t encoded; @@ -2427,30 +2473,34 @@ uint8_t do_DLInformationTransfer(uint8_t Mod_id, uint8_t **buffer, uint8_t trans encoded = uper_encode_to_new_buffer (&asn_DEF_DL_DCCH_Message, NULL, (void*) &dl_dcch_msg, (void **) buffer); - /* -#if defined(ENABLE_ITTI) -# if !defined(DISABLE_XER_SPRINT) - { - char message_string[10000]; - size_t message_string_size; - - if ((message_string_size = xer_sprint(message_string, sizeof(message_string), &asn_DEF_DL_DCCH_Message, (void *)&dl_dcch_msg)) > 0) { - MessageDef *msg_p; - - msg_p = itti_alloc_new_message_sized (TASK_RRC_ENB, RRC_DL_DCCH, message_string_size + sizeof (IttiMsgText)); - msg_p->ittiMsg.rrc_dl_dcch.size = message_string_size; - memcpy(&msg_p->ittiMsg.rrc_dl_dcch.text, message_string, message_string_size); - - itti_send_msg_to_task(TASK_UNKNOWN, Mod_id, msg_p); - } - } -# endif -#endif - */ + +// #if defined(ENABLE_ITTI) +// # if !defined(DISABLE_XER_SPRINT) +// { +// char message_string[10000]; +// size_t message_string_size; + +// if ((message_string_size = xer_sprint(message_string, sizeof(message_string), &asn_DEF_DL_DCCH_Message, (void *)&dl_dcch_msg)) > 0) { +// MessageDef *msg_p; + +// msg_p = itti_alloc_new_message_sized (TASK_RRC_ENB, RRC_DL_DCCH, message_string_size + sizeof (IttiMsgText)); +// msg_p->ittiMsg.rrc_dl_dcch.size = message_string_size; +// memcpy(&msg_p->ittiMsg.rrc_dl_dcch.text, message_string, message_string_size); + +// itti_send_msg_to_task(TASK_UNKNOWN, Mod_id, msg_p); +// } +// } +// # endif +// #endif + return encoded; } +*/ +//------------------------------------------------------------------------------ + +/* uint8_t do_ULInformationTransfer(uint8_t **buffer, uint32_t pdu_length, uint8_t *pdu_buffer) { ssize_t encoded; @@ -2472,10 +2522,14 @@ uint8_t do_ULInformationTransfer(uint8_t **buffer, uint32_t pdu_length, uint8_t return encoded; } +*/ + +//------------------------------------------------------------------------------ +/* OAI_UECapability_t *fill_ue_capability(char *UE_EUTRA_Capability_xer_fname) { - static OAI_UECapability_t UECapability; /* TODO declared static to allow returning this has an address should be allocated in a cleaner way. */ + static OAI_UECapability_t UECapability; /// TODO declared static to allow returning this has an address should be allocated in a cleaner way. static SupportedBandEUTRA_t Bandlist[4]; // the macro ASN_SEQUENCE_ADD() does not copy the source, but only stores a reference to it static InterFreqBandInfo_t InterFreqBandInfo[4][4]; // the macro ASN_SEQUENCE_ADD() does not copy the source, but only stores a reference to it static BandInfoEUTRA_t BandInfoEUTRA[4]; // the macro ASN_SEQUENCE_ADD() does not copy the source, but only stores a reference to it @@ -2652,7 +2706,7 @@ OAI_UECapability_t *fill_ue_capability(char *UE_EUTRA_Capability_xer_fname) UECapability.sdu_size, enc_rval.encoded + 7); { char *sdu; - sdu = malloc (3 * UECapability.sdu_size + 1 /* For '\0' */); + //sdu = malloc (3 * UECapability.sdu_size + 1 ); ///* For '\0' for (i = 0; i < UECapability.sdu_size; i++) { sprintf (&sdu[3 * i], "%02x.", UECapability.sdu[i]); diff --git a/openair2/RRC/NR/MESSAGES/asn1_msg.h b/openair2/RRC/NR/MESSAGES/asn1_msg.h new file mode 100644 index 0000000000000000000000000000000000000000..640c86dade3cbb788ae3f1fc3e09abd3b78d0c56 --- /dev/null +++ b/openair2/RRC/NR/MESSAGES/asn1_msg.h @@ -0,0 +1,274 @@ +/* + * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The OpenAirInterface Software Alliance licenses this file to You under + * the OAI Public License, Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.openairinterface.org/?page_id=698 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------------------- + * For more information about the OpenAirInterface (OAI) Software Alliance: + * contact@openairinterface.org + */ + +/*! \file asn1_msg.h +* \brief primitives to build the asn1 messages +* \author Raymond Knopp and Navid Nikaein +* \date 2011 +* \version 1.0 +* \company Eurecom +* \email: raymond.knopp@eurecom.fr and navid.nikaein@eurecom.fr +*/ + +#ifdef USER_MODE +#include <stdio.h> +#include <sys/types.h> +#include <stdlib.h> /* for atoi(3) */ +#include <unistd.h> /* for getopt(3) */ +#include <string.h> /* for strerror(3) */ +#include <sysexits.h> /* for EX_* exit codes */ +#include <errno.h> /* for errno */ +#else +#include <linux/module.h> /* Needed by all modules */ +#endif + +#include <asn_application.h> +#include <asn_internal.h> /* for _ASN_DEFAULT_STACK_MAX */ + +#include "RRC/NR/defs_NR.h" + +/* + * The variant of the above function which dumps the BASIC-XER (XER_F_BASIC) + * output into the chosen string buffer. + * RETURN VALUES: + * 0: The structure is printed. + * -1: Problem printing the structure. + * WARNING: No sensible errno value is returned. + */ +int xer_sprint_NR(char *string, size_t string_size, struct asn_TYPE_descriptor_s *td, void *sptr); + +uint16_t get_adjacent_cell_id_NR(uint8_t Mod_id,uint8_t index); + +uint8_t get_adjacent_cell_mod_id_NR(uint16_t phyCellId); + +/** +\brief Generate configuration for SIB1 (eNB). +@param carrier pointer to Carrier information +@param N_RB_DL Number of downlink PRBs +@param phich_Resource PHICH resoure parameter +@param phich_duration PHICH duration parameter +@param frame radio frame number +@return size of encoded bit stream in bytes*/ +uint8_t do_MIB_NR(rrc_gNB_carrier_data_t *carrier, + uint32_t frame, + uint32_t ssb_SubcarrierOffset, + uint32_t pdcch_ConfigSIB1, + uint32_t subCarrierSpacingCommon, + uint32_t dmrs_TypeA_Position); +/** +\brief Generate configuration for SIB1 (eNB). +@param carrier pointer to Carrier information +@param Mod_id Instance of eNB +@param Component carrier Component carrier to configure +@param configuration Pointer Configuration Request structure +@return size of encoded bit stream in bytes*/ + +uint8_t do_SIB1_NR(rrc_gNB_carrier_data_t *carrier,int Mod_id,int CC_id, gNB_RrcConfigurationReq *configuration + ); + +/** +\brief Generate a default configuration for SIB2/SIB3 in one System Information PDU (eNB). +@param Mod_id Index of eNB (used to derive some parameters) +@param buffer Pointer to PER-encoded ASN.1 description of SI PDU +@param systemInformation Pointer to asn1c C representation of SI PDU +@param sib2 Pointer (returned) to sib2 component withing SI PDU +@param sib3 Pointer (returned) to sib3 component withing SI PDU +@param sib13 Pointer (returned) to sib13 component withing SI PDU +@param MBMS_flag Indicates presence of MBMS system information (when 1) +@return size of encoded bit stream in bytes*/ + +/*uint8_t do_SIB23(uint8_t Mod_id, + int CC_id +#if defined(ENABLE_ITTI) + , RrcConfigurationReq *configuration +#endif + ); + +/** +\brief Generate an RRCConnectionRequest UL-CCCH-Message (UE) based on random string or S-TMSI. This +routine only generates an mo-data establishment cause. +@param buffer Pointer to PER-encoded ASN.1 description of UL-DCCH-Message PDU +@param rv 5 byte random string or S-TMSI +@returns Size of encoded bit stream in bytes*/ + +/*uint8_t do_RRCConnectionRequest(uint8_t Mod_id, uint8_t *buffer,uint8_t *rv); + +/** \brief Generate an RRCConnectionSetupComplete UL-DCCH-Message (UE) +@param buffer Pointer to PER-encoded ASN.1 description of UL-DCCH-Message PDU +@returns Size of encoded bit stream in bytes*/ + +/*uint8_t do_RRCConnectionSetupComplete(uint8_t Mod_id, uint8_t* buffer, const uint8_t Transaction_id, const int dedicatedInfoNASLength, + const char* dedicatedInfoNAS); + +/** \brief Generate an RRCConnectionReconfigurationComplete UL-DCCH-Message (UE) +@param buffer Pointer to PER-encoded ASN.1 description of UL-DCCH-Message PDU +@returns Size of encoded bit stream in bytes*/ + +/*uint8_t +do_RRCConnectionReconfigurationComplete( + const protocol_ctxt_t* const ctxt_pP, + uint8_t* buffer, + const uint8_t Transaction_id +); + +/** +\brief Generate an RRCConnectionSetup DL-CCCH-Message (eNB). This routine configures SRB_ToAddMod (SRB1/SRB2) and +PhysicalConfigDedicated IEs. The latter does not enable periodic CQI reporting (PUCCH format 2/2a/2b) or SRS. +@param ctxt_pP Running context +@param ue_context_pP UE context +@param CC_id Component Carrier ID +@param buffer Pointer to PER-encoded ASN.1 description of DL-CCCH-Message PDU +@param transmission_mode Transmission mode for UE (1-9) +@param UE_id UE index for this message +@param Transaction_id Transaction_ID for this message +@param SRB_configList Pointer (returned) to SRB1_config/SRB2_config(later) IEs for this UE +@param physicalConfigDedicated Pointer (returned) to PhysicalConfigDedicated IE for this UE +@returns Size of encoded bit stream in bytes*/ +/*uint8_t +do_RRCConnectionSetup( + const protocol_ctxt_t* const ctxt_pP, + rrc_eNB_ue_context_t* const ue_context_pP, + int CC_id, + uint8_t* const buffer, + const uint8_t transmission_mode, + const uint8_t Transaction_id, + SRB_ToAddModList_t** SRB_configList, + struct PhysicalConfigDedicated** physicalConfigDedicated +); + +/** +\brief Generate an RRCConnectionReconfiguration DL-DCCH-Message (eNB). This routine configures SRBToAddMod (SRB2) and one DRBToAddMod +(DRB3). PhysicalConfigDedicated is not updated. +@param ctxt_pP Running context +@param buffer Pointer to PER-encoded ASN.1 description of DL-CCCH-Message PDU +@param Transaction_id Transaction_ID for this message +@param SRB_list Pointer to SRB List to be added/modified (NULL if no additions/modifications) +@param DRB_list Pointer to DRB List to be added/modified (NULL if no additions/modifications) +@param DRB_list2 Pointer to DRB List to be released (NULL if none to be released) +@param sps_Config Pointer to sps_Config to be modified (NULL if no modifications, or default if initial configuration) +@param physicalConfigDedicated Pointer to PhysicalConfigDedicated to be modified (NULL if no modifications) +@param MeasObj_list Pointer to MeasObj List to be added/modified (NULL if no additions/modifications) +@param ReportConfig_list Pointer to ReportConfig List (NULL if no additions/modifications) +@param QuantityConfig Pointer to QuantityConfig to be modified (NULL if no modifications) +@param MeasId_list Pointer to MeasID List (NULL if no additions/modifications) +@param mobilityInfo mobility control information for handover +@param speedStatePars speed state parameteres for handover +@param mac_MainConfig Pointer to Mac_MainConfig(NULL if no modifications) +@param measGapConfig Pointer to MeasGapConfig (NULL if no modifications) +@param cba_rnti RNTI for the cba transmission +@returns Size of encoded bit stream in bytes*/ + +/*uint16_t +do_RRCConnectionReconfiguration( + const protocol_ctxt_t* const ctxt_pP, + uint8_t *buffer, + uint8_t Transaction_id, + SRB_ToAddModList_t *SRB_list, + DRB_ToAddModList_t *DRB_list, + DRB_ToReleaseList_t *DRB_list2, + struct SPS_Config *sps_Config, + struct PhysicalConfigDedicated *physicalConfigDedicated, + MeasObjectToAddModList_t *MeasObj_list, + ReportConfigToAddModList_t *ReportConfig_list, + QuantityConfig_t *quantityConfig, + MeasIdToAddModList_t *MeasId_list, + MAC_MainConfig_t *mac_MainConfig, + MeasGapConfig_t *measGapConfig, + MobilityControlInfo_t *mobilityInfo, + struct MeasConfig__speedStatePars *speedStatePars, + RSRP_Range_t *rsrp, + C_RNTI_t *cba_rnti, + struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList* dedicatedInfoNASList +#if defined(Rel10) || defined(Rel14) + , SCellToAddMod_r10_t *SCell_config +#endif + ); + +/** +\brief Generate an RRCConnectionReestablishmentReject DL-CCCH-Message (eNB). +@param Mod_id Module ID of eNB +@param buffer Pointer to PER-encoded ASN.1 description of DL-CCCH-Message PDU +@returns Size of encoded bit stream in bytes*/ +/*uint8_t +do_RRCConnectionReestablishmentReject( + uint8_t Mod_id, + uint8_t* const buffer); + +/** +\brief Generate an RRCConnectionReject DL-CCCH-Message (eNB). +@param Mod_id Module ID of eNB +@param buffer Pointer to PER-encoded ASN.1 description of DL-CCCH-Message PDU +@returns Size of encoded bit stream in bytes*/ +/*uint8_t +do_RRCConnectionReject( + uint8_t Mod_id, + uint8_t* const buffer); + +/** +\brief Generate an RRCConnectionRequest UL-CCCH-Message (UE) based on random string or S-TMSI. This +routine only generates an mo-data establishment cause. +@param Mod_id Module ID of eNB +@param buffer Pointer to PER-encoded ASN.1 description of UL-DCCH-Message PDU +@param transaction_id Transaction index +@returns Size of encoded bit stream in bytes*/ + +/*uint8_t do_RRCConnectionRelease(uint8_t Mod_id, uint8_t *buffer,int Transaction_id); + +/*** + * \brief Generate an MCCH-Message (eNB). This routine configures MBSFNAreaConfiguration (PMCH-InfoList and Subframe Allocation for MBMS data) + * @param buffer Pointer to PER-encoded ASN.1 description of MCCH-Message PDU + * @returns Size of encoded bit stream in bytes +*/ +/*uint8_t do_MCCHMessage(uint8_t *buffer); +#if defined(Rel10) || defined(Rel14) +/*** + * \brief Generate an MCCH-Message (eNB). This routine configures MBSFNAreaConfiguration (PMCH-InfoList and Subframe Allocation for MBMS data) + * @param buffer Pointer to PER-encoded ASN.1 description of MCCH-Message PDU + * @returns Size of encoded bit stream in bytes +*/ +/*uint8_t do_MBSFNAreaConfig(uint8_t Mod_id, + uint8_t sync_area, + uint8_t *buffer, + MCCH_Message_t *mcch_message, + MBSFNAreaConfiguration_r9_t **mbsfnAreaConfiguration); +#endif + +uint8_t do_MeasurementReport(uint8_t Mod_id, uint8_t *buffer,int measid,int phy_id,long rsrp_s,long rsrq_s,long rsrp_t,long rsrq_t); + +uint8_t do_DLInformationTransfer(uint8_t Mod_id, uint8_t **buffer, uint8_t transaction_id, uint32_t pdu_length, uint8_t *pdu_buffer); + +uint8_t do_ULInformationTransfer(uint8_t **buffer, uint32_t pdu_length, uint8_t *pdu_buffer); + +OAI_UECapability_t *fill_ue_capability(char *UE_EUTRA_Capability_xer); + +uint8_t +do_UECapabilityEnquiry( + const protocol_ctxt_t* const ctxt_pP, + uint8_t* const buffer, + const uint8_t Transaction_id +); + +uint8_t do_SecurityModeCommand( + const protocol_ctxt_t* const ctxt_pP, + uint8_t* const buffer, + const uint8_t Transaction_id, + const uint8_t cipheringAlgorithm, + const uint8_t integrityProtAlgorithm); diff --git a/openair2/RRC/NR/MESSAGES/asn1c/ASN1_files/NR-InterNodeDefinitions.asn b/openair2/RRC/NR/MESSAGES/asn1c/ASN1_files/NR-InterNodeDefinitions.asn new file mode 100755 index 0000000000000000000000000000000000000000..13cbb9258444b5cc4477adc5a1a9078e871aed0d --- /dev/null +++ b/openair2/RRC/NR/MESSAGES/asn1c/ASN1_files/NR-InterNodeDefinitions.asn @@ -0,0 +1,282 @@ +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/asn1c/ASN1_files/NR-RRC-Definitions.asn b/openair2/RRC/NR/MESSAGES/asn1c/ASN1_files/NR-RRC-Definitions.asn new file mode 100755 index 0000000000000000000000000000000000000000..84426f50bb5ed9112bb03da3050b28217d19f3c7 --- /dev/null +++ b/openair2/RRC/NR/MESSAGES/asn1c/ASN1_files/NR-RRC-Definitions.asn @@ -0,0 +1,5480 @@ +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/asn1c/ASN1_files/NR-UE-Variables.asn b/openair2/RRC/NR/MESSAGES/asn1c/ASN1_files/NR-UE-Variables.asn new file mode 100755 index 0000000000000000000000000000000000000000..3eeec31891fd642cffb55a28fd5987f81b2daee7 --- /dev/null +++ b/openair2/RRC/NR/MESSAGES/asn1c/ASN1_files/NR-UE-Variables.asn @@ -0,0 +1,46 @@ +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/asn1c/ASN1_files/extract_asn1_from_spce.pl b/openair2/RRC/NR/MESSAGES/asn1c/ASN1_files/extract_asn1_from_spce.pl new file mode 100755 index 0000000000000000000000000000000000000000..18f6792a8c870819ba1ceac1641866d6376b0eec --- /dev/null +++ b/openair2/RRC/NR/MESSAGES/asn1c/ASN1_files/extract_asn1_from_spce.pl @@ -0,0 +1,82 @@ +#!/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 88d2510fb6d20012dd6cd6c7fe0d873908321ea9..0a2b19f65c03d90e156af47d92f81928c57e0a6f 100644 --- a/openair2/RRC/NR/defs_NR.h +++ b/openair2/RRC/NR/defs_NR.h @@ -92,7 +92,7 @@ typedef unsigned int uid_NR_t; typedef struct uid_linear_allocator_NR_s { unsigned int bitmap[UID_LINEAR_ALLOCATOR_BITMAP_SIZE_NR]; } 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) @@ -391,9 +391,10 @@ typedef struct { // buffer that contains the encoded messages uint8_t *MIB_NR; uint8_t sizeof_MIB_NR; + + uint8_t *SIB1_NR; + uint8_t sizeof_SIB1_NR; /* - uint8_t *SIB1_NB_IoT; - uint8_t sizeof_SIB1_NB_IoT; uint8_t *SIB23_NB_IoT; uint8_t sizeof_SIB23_NB_IoT; */ @@ -425,7 +426,7 @@ typedef struct { uint32_t dl_CarrierFreq; //detected by the UE uint32_t ul_CarrierFreq; //detected by the UE uint16_t physCellId; //not stored in the MIB-NB but is getting through NPSS/NSSS - + //are the only static one (memory has been already allocated) BCCH_BCH_Message_t mib_NR; diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c index ef3658af07d21159ce07971573f61eb268fbff7a..75c6c195d1f016ae7893b7eed25207c32bf9576a 100644 --- a/openair2/RRC/NR/rrc_gNB.c +++ b/openair2/RRC/NR/rrc_gNB.c @@ -89,7 +89,7 @@ #if defined(ENABLE_ITTI) # include "intertask_interface.h" #endif - + #if ENABLE_RAL # include "rrc_eNB_ral.h" #endif @@ -138,59 +138,54 @@ init_SI( const int CC_id #if defined(ENABLE_ITTI) , - RrcConfigurationReq * configuration + gNB_RrcConfigurationReq * configuration #endif ) //----------------------------------------------------------------------------- { -#if defined(Rel10) || defined(Rel14) int i; -#endif - -#ifdef Rel14 - SystemInformationBlockType1_v1310_IEs_t *sib1_v13ext=(SystemInformationBlockType1_v1310_IEs_t *)NULL; -#endif LOG_D(RRC,"%s()\n\n\n\n",__FUNCTION__); - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].MIB = (uint8_t*) malloc16(4); // copy basic parameters - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].physCellId = configuration->Nid_cell[CC_id]; - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].p_eNB = configuration->nb_antenna_ports[CC_id]; - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].Ncp = configuration->prefix_type[CC_id]; - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].dl_CarrierFreq = configuration->downlink_frequency[CC_id]; - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].ul_CarrierFreq = configuration->downlink_frequency[CC_id]+ configuration->uplink_frequency_offset[CC_id]; -#ifdef Rel14 - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].pbch_repetition = configuration->pbch_repetition[CC_id]; -#endif - LOG_I(RRC, "Configuring MIB (N_RB_DL %d,phich_Resource %d,phich_Duration %d)\n", - (int)configuration->N_RB_DL[CC_id], - (int)configuration->phich_resource[CC_id], - (int)configuration->phich_duration[CC_id]); - do_MIB(&RC.rrc[ctxt_pP->module_id]->carrier[CC_id], -#ifdef ENABLE_ITTI - configuration->N_RB_DL[CC_id], - configuration->phich_resource[CC_id], - configuration->phich_duration[CC_id] -#else - 50,0,0 -#endif - ,0); + 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_SIB1 = 0; - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB23 = 0; - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].SIB1 = (uint8_t*) malloc16(32); - - AssertFatal(RC.rrc[ctxt_pP->module_id]->carrier[CC_id].SIB1!=NULL,PROTOCOL_RRC_CTXT_FMT" init_SI: FATAL, no memory for SIB1 allocated\n", - PROTOCOL_RRC_CTXT_ARGS(ctxt_pP)); - RC.rrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB1 = do_SIB1(&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.rrc[enb_mod_idP].carrier[CC_id].sizeof_SIB1 == 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"); @@ -301,7 +296,7 @@ init_SI( #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,