Merge remote-tracking branch 'origin/develop' into develop-NR_SA_F1AP_5GRECORDS
# Conflicts: # cmake_targets/CMakeLists.txt # cmake_targets/build_oai # openair1/PHY/INIT/nr_init_ru.c # openair1/PHY/NR_TRANSPORT/nr_ulsch.c # openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c # openair1/SCHED_NR/phy_procedures_nr_gNB.c # openair1/SIMULATION/NR_PHY/ulsim.c # openair2/COMMON/platform_constants.h # openair2/ENB_APP/enb_config.c # openair2/F1AP/f1ap_cu_interface_management.c # openair2/F1AP/f1ap_cu_rrc_message_transfer.c # openair2/F1AP/f1ap_cu_ue_context_management.c # openair2/F1AP/f1ap_du_interface_management.c # openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c # openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c # openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c # openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c # openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c # openair2/RRC/LTE/rrc_eNB.c # openair2/RRC/NR/rrc_gNB.c # openair2/RRC/NR_UE/rrc_UE.c
This commit is contained in:
@@ -2728,7 +2728,7 @@ do_RRCConnectionSetup(
|
||||
// assign_enum(&physicalConfigDedicated2->schedulingRequestConfig->choice.setup.dsr_TransMax,
|
||||
//SchedulingRequestConfig__setup__dsr_TransMax_n4);
|
||||
// assign_enum(&physicalConfigDedicated2->schedulingRequestConfig->choice.setup.dsr_TransMax = SchedulingRequestConfig__setup__dsr_TransMax_n4;
|
||||
physicalConfigDedicated2->schedulingRequestConfig->choice.setup.dsr_TransMax = LTE_SchedulingRequestConfig__setup__dsr_TransMax_n4;
|
||||
physicalConfigDedicated2->schedulingRequestConfig->choice.setup.dsr_TransMax = LTE_SchedulingRequestConfig__setup__dsr_TransMax_n64;
|
||||
rrcConnectionSetup->rrc_TransactionIdentifier = Transaction_id;
|
||||
rrcConnectionSetup->criticalExtensions.present = LTE_RRCConnectionSetup__criticalExtensions_PR_c1;
|
||||
rrcConnectionSetup->criticalExtensions.choice.c1.present = LTE_RRCConnectionSetup__criticalExtensions__c1_PR_rrcConnectionSetup_r8 ;
|
||||
@@ -3220,56 +3220,58 @@ uint8_t do_UECapabilityEnquiry( const protocol_ctxt_t *const ctxt_pP,
|
||||
dl_dcch_msg.message.choice.c1.choice.ueCapabilityEnquiry.criticalExtensions.choice.c1.choice.ueCapabilityEnquiry_r8.ue_CapabilityRequest.list.count=0;
|
||||
ASN_SEQUENCE_ADD(&dl_dcch_msg.message.choice.c1.choice.ueCapabilityEnquiry.criticalExtensions.choice.c1.choice.ueCapabilityEnquiry_r8.ue_CapabilityRequest.list,
|
||||
&rat);
|
||||
|
||||
/* request NR configuration */
|
||||
LTE_UECapabilityEnquiry_r8_IEs_t *r8 = &dl_dcch_msg.message.choice.c1.choice.ueCapabilityEnquiry.criticalExtensions.choice.c1.choice.ueCapabilityEnquiry_r8;
|
||||
LTE_UECapabilityEnquiry_v8a0_IEs_t r8_a0;
|
||||
LTE_UECapabilityEnquiry_v1180_IEs_t r11_80;
|
||||
LTE_UECapabilityEnquiry_v1310_IEs_t r13_10;
|
||||
LTE_UECapabilityEnquiry_v1430_IEs_t r14_30;
|
||||
LTE_UECapabilityEnquiry_v1510_IEs_t r15_10;
|
||||
|
||||
memset(&r8_a0, 0, sizeof(r8_a0));
|
||||
memset(&r11_80, 0, sizeof(r11_80));
|
||||
memset(&r13_10, 0, sizeof(r13_10));
|
||||
memset(&r14_30, 0, sizeof(r14_30));
|
||||
memset(&r15_10, 0, sizeof(r15_10));
|
||||
|
||||
r8->nonCriticalExtension = &r8_a0;
|
||||
r8_a0.nonCriticalExtension = &r11_80;
|
||||
r11_80.nonCriticalExtension = &r13_10;
|
||||
r13_10.nonCriticalExtension = &r14_30;
|
||||
r14_30.nonCriticalExtension = &r15_10;
|
||||
|
||||
/* TODO: no hardcoded values here */
|
||||
|
||||
nsa_band_list = (NR_FreqBandList_t *)calloc(1, sizeof(NR_FreqBandList_t));
|
||||
|
||||
nsa_band = (NR_FreqBandInformation_t *) calloc(1,sizeof(NR_FreqBandInformation_t));
|
||||
nsa_band->present = NR_FreqBandInformation_PR_bandInformationEUTRA;
|
||||
nsa_band->choice.bandInformationEUTRA = (NR_FreqBandInformationEUTRA_t *) calloc(1, sizeof(NR_FreqBandInformationEUTRA_t));
|
||||
nsa_band->choice.bandInformationEUTRA->bandEUTRA = eutra_band;
|
||||
ASN_SEQUENCE_ADD(&nsa_band_list->list, nsa_band);
|
||||
|
||||
nsa_band = (NR_FreqBandInformation_t *) calloc(1,sizeof(NR_FreqBandInformation_t));
|
||||
nsa_band->present = NR_FreqBandInformation_PR_bandInformationNR;
|
||||
nsa_band->choice.bandInformationNR = (NR_FreqBandInformationNR_t *) calloc(1, sizeof(NR_FreqBandInformationNR_t));
|
||||
if(nr_band > 0)
|
||||
nsa_band->choice.bandInformationNR->bandNR = nr_band;
|
||||
else
|
||||
nsa_band->choice.bandInformationNR->bandNR = 78;
|
||||
ASN_SEQUENCE_ADD(&nsa_band_list->list, nsa_band);
|
||||
|
||||
OCTET_STRING_t req_freq;
|
||||
//unsigned char req_freq_buf[5] = { 0x00, 0x20, 0x1a, 0x02, 0x68 }; // bands 7 & nr78
|
||||
unsigned char req_freq_buf[1024];
|
||||
enc_rval = uper_encode_to_buffer(&asn_DEF_NR_FreqBandList,
|
||||
NULL,
|
||||
(void *)nsa_band_list,
|
||||
req_freq_buf,
|
||||
1024);
|
||||
|
||||
xer_fprint(stdout, &asn_DEF_NR_FreqBandList, (void *)nsa_band_list);
|
||||
if (nr_band>0) {
|
||||
|
||||
/* request NR configuration */
|
||||
|
||||
memset(&r8_a0, 0, sizeof(r8_a0));
|
||||
memset(&r11_80, 0, sizeof(r11_80));
|
||||
memset(&r13_10, 0, sizeof(r13_10));
|
||||
memset(&r14_30, 0, sizeof(r14_30));
|
||||
memset(&r15_10, 0, sizeof(r15_10));
|
||||
|
||||
r8->nonCriticalExtension = &r8_a0;
|
||||
r8_a0.nonCriticalExtension = &r11_80;
|
||||
r11_80.nonCriticalExtension = &r13_10;
|
||||
r13_10.nonCriticalExtension = &r14_30;
|
||||
r14_30.nonCriticalExtension = &r15_10;
|
||||
|
||||
/* TODO: no hardcoded values here */
|
||||
|
||||
nsa_band_list = (NR_FreqBandList_t *)calloc(1, sizeof(NR_FreqBandList_t));
|
||||
|
||||
nsa_band = (NR_FreqBandInformation_t *) calloc(1,sizeof(NR_FreqBandInformation_t));
|
||||
nsa_band->present = NR_FreqBandInformation_PR_bandInformationEUTRA;
|
||||
nsa_band->choice.bandInformationEUTRA = (NR_FreqBandInformationEUTRA_t *) calloc(1, sizeof(NR_FreqBandInformationEUTRA_t));
|
||||
nsa_band->choice.bandInformationEUTRA->bandEUTRA = eutra_band;
|
||||
ASN_SEQUENCE_ADD(&nsa_band_list->list, nsa_band);
|
||||
|
||||
nsa_band = (NR_FreqBandInformation_t *) calloc(1,sizeof(NR_FreqBandInformation_t));
|
||||
nsa_band->present = NR_FreqBandInformation_PR_bandInformationNR;
|
||||
nsa_band->choice.bandInformationNR = (NR_FreqBandInformationNR_t *) calloc(1, sizeof(NR_FreqBandInformationNR_t));
|
||||
//if(nr_band > 0)
|
||||
nsa_band->choice.bandInformationNR->bandNR = nr_band;
|
||||
//else
|
||||
// nsa_band->choice.bandInformationNR->bandNR = 78;
|
||||
ASN_SEQUENCE_ADD(&nsa_band_list->list, nsa_band);
|
||||
|
||||
//unsigned char req_freq_buf[5] = { 0x00, 0x20, 0x1a, 0x02, 0x68 }; // bands 7 & nr78
|
||||
unsigned char req_freq_buf[1024];
|
||||
enc_rval = uper_encode_to_buffer(&asn_DEF_NR_FreqBandList,
|
||||
NULL,
|
||||
(void *)nsa_band_list,
|
||||
req_freq_buf,
|
||||
1024);
|
||||
|
||||
xer_fprint(stdout, &asn_DEF_NR_FreqBandList, (void *)nsa_band_list);
|
||||
|
||||
|
||||
|
||||
@@ -3280,14 +3282,16 @@ uint8_t do_UECapabilityEnquiry( const protocol_ctxt_t *const ctxt_pP,
|
||||
//0x01, 0x60, 0x18, 0x05, 0x80, 0xc0, 0x04, 0x04, 0xc1, 0x2c, 0x10, 0x08, 0x20, 0x30, 0x40, 0xe0, 0x82, 0x40, 0x28, 0x80, 0x9a
|
||||
// };
|
||||
|
||||
req_freq.buf = req_freq_buf;
|
||||
req_freq.size = (enc_rval.encoded+7)/8;
|
||||
req_freq.buf = req_freq_buf;
|
||||
req_freq.size = (enc_rval.encoded+7)/8;
|
||||
// req_freq.size = 21;
|
||||
|
||||
r15_10.requestedFreqBandsNR_MRDC_r15 = &req_freq;
|
||||
if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||
xer_fprint(stdout, &asn_DEF_LTE_DL_DCCH_Message, (void *)&dl_dcch_msg);
|
||||
r15_10.requestedFreqBandsNR_MRDC_r15 = &req_freq;
|
||||
// Add request for eutra-nr
|
||||
}
|
||||
// if ( LOG_DEBUGFLAG(DEBUG_ASN1) ) {
|
||||
xer_fprint(stdout, &asn_DEF_LTE_DL_DCCH_Message, (void *)&dl_dcch_msg);
|
||||
// }
|
||||
|
||||
enc_rval = uper_encode_to_buffer(&asn_DEF_LTE_DL_DCCH_Message,
|
||||
NULL,
|
||||
|
||||
@@ -211,13 +211,13 @@ typedef struct RB_INFO_TABLE_ENTRY_NB_IoT_s {
|
||||
RB_INFO_NB_IoT Rb_info;
|
||||
uint8_t Active;
|
||||
uint32_t Next_check_frame;
|
||||
uint8_t Status;
|
||||
uint8_t status;
|
||||
} RB_INFO_TABLE_ENTRY_NB_IoT;
|
||||
|
||||
typedef struct SRB_INFO_TABLE_ENTRY_NB_IoT_s {
|
||||
SRB_INFO_NB_IoT Srb_info;
|
||||
uint8_t Active;
|
||||
uint8_t Status;
|
||||
uint8_t status;
|
||||
uint32_t Next_check_frame;
|
||||
} SRB_INFO_TABLE_ENTRY_NB_IoT;
|
||||
|
||||
@@ -269,7 +269,7 @@ typedef struct eNB_RRC_UE_NB_IoT_s {
|
||||
e_LTE_CipheringAlgorithm_r12 ciphering_algorithm; //Specs. TS 36.331 V14.1.0 pag 432 Change position of chipering enumerative w.r.t previous version
|
||||
e_LTE_SecurityAlgorithmConfig__integrityProtAlgorithm integrity_algorithm;
|
||||
|
||||
uint8_t Status;
|
||||
uint8_t status;
|
||||
rnti_t rnti;
|
||||
uint64_t random_ue_identity;
|
||||
|
||||
|
||||
+343
-71
@@ -1056,7 +1056,7 @@ void release_UE_in_freeList(module_id_t mod_id) {
|
||||
if (id>=0) clean_eNb_dlsch(eNB_PHY->dlsch[id][0]);
|
||||
|
||||
// clean UCI entries for rnti
|
||||
for (i=0; i<NUMBER_OF_UCI_VARS_MAX; i++) {
|
||||
for (i=0; i<NUMBER_OF_UCI_MAX; i++) {
|
||||
if(eNB_PHY->uci_vars[i].rnti == rnti) {
|
||||
LOG_I(MAC, "clean eNb uci_vars[%d] UE %x \n",i, rnti);
|
||||
memset(&eNB_PHY->uci_vars[i],0,sizeof(LTE_eNB_UCI));
|
||||
@@ -1090,7 +1090,7 @@ void release_UE_in_freeList(module_id_t mod_id) {
|
||||
clean_eNb_ulsch(ulsch);
|
||||
}
|
||||
|
||||
for (i=0; i<NUMBER_OF_UCI_VARS_MAX; i++) {
|
||||
for (i=0; i<NUMBER_OF_UCI_MAX; i++) {
|
||||
if(eNB_PHY->uci_vars[i].rnti == rnti) {
|
||||
LOG_I(MAC, "clean eNb uci_vars[%d] UE %x \n",i, rnti);
|
||||
memset(&eNB_PHY->uci_vars[i],0,sizeof(LTE_eNB_UCI));
|
||||
@@ -3442,6 +3442,7 @@ void rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t
|
||||
ASN_SEQUENCE_ADD(&ReportConfig_list->list, ReportConfig_A5);
|
||||
|
||||
if (ue_context_pP->ue_context.does_nr) {
|
||||
LOG_I(RRC,"Configuring measurement for NR cell\n");
|
||||
ReportConfig_NR->reportConfigId = 7;
|
||||
ReportConfig_NR->reportConfig.present = LTE_ReportConfigToAddMod__reportConfig_PR_reportConfigInterRAT;
|
||||
ReportConfig_NR->reportConfig.choice.reportConfigInterRAT.triggerType.present = LTE_ReportConfigInterRAT__triggerType_PR_event;
|
||||
@@ -4568,7 +4569,6 @@ rrc_eNB_process_MeasurementReport(
|
||||
|
||||
case 7:
|
||||
LOG_D(RRC, "NR event frame %d subframe %d\n", ctxt_pP->frame, ctxt_pP->subframe);
|
||||
printf("NR event frame %d subframe %d\n", ctxt_pP->frame, ctxt_pP->subframe);
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -4593,6 +4593,9 @@ rrc_eNB_process_MeasurementReport(
|
||||
ue_context_pP->ue_context.gnb_x2_assoc_id = -1; // set when receiving X2AP_ENDC_SGNB_ADDITION_REQ_ACK
|
||||
|
||||
if(is_en_dc_supported(ue_context_pP->ue_context.UE_Capability)) {
|
||||
|
||||
AssertFatal(measResults2->measResultNeighCells!=NULL,"no measResultNeighCells, shouldn't happen!\n");
|
||||
AssertFatal(measResults2->measResultNeighCells->present==LTE_MeasResults__measResultNeighCells_PR_measResultNeighCellListNR_r15,"field is not LTE_MeasResults__measResultNeighCells_PR_measResultNeighCellListNR_r15");
|
||||
/** to add gNB as Secondary node CG-ConfigInfo to be added as per 36.423 r15 **/
|
||||
if(encode_CG_ConfigInfo(enc_buf,sizeof(enc_buf),ue_context_pP,&enc_size) == RRC_OK)
|
||||
LOG_I(RRC,"CG-ConfigInfo encoded successfully\n");
|
||||
@@ -4611,6 +4614,7 @@ rrc_eNB_process_MeasurementReport(
|
||||
X2AP_ENDC_SGNB_ADDITION_REQ(msg).rrc_buffer_size = enc_size;
|
||||
|
||||
X2AP_ENDC_SGNB_ADDITION_REQ(msg).target_physCellId
|
||||
//= measResults2->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0]->pci_r15;
|
||||
= measResults2->measResultNeighCells->choice.measResultListEUTRA.list.array[0]->physCellId;
|
||||
|
||||
//For the moment we have a single E-RAB which will be the one to be added to the gNB
|
||||
@@ -4633,6 +4637,32 @@ rrc_eNB_process_MeasurementReport(
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!ue_context_pP->ue_context.measResults->measResultNeighCells) {
|
||||
ue_context_pP->ue_context.measResults->measResultNeighCells = calloc(1,sizeof(*ue_context_pP->ue_context.measResults->measResultNeighCells));
|
||||
ue_context_pP->ue_context.measResults->measResultNeighCells->present = LTE_MeasResults__measResultNeighCells_PR_measResultNeighCellListNR_r15;
|
||||
ue_context_pP->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array = calloc(1, sizeof(*ue_context_pP->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array));
|
||||
ue_context_pP->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0] = calloc(1, sizeof(*ue_context_pP->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0]));
|
||||
ue_context_pP->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.count = 1;
|
||||
}
|
||||
struct LTE_MeasResultCellNR_r15 *ueCtxtMeasResultCellNR_r15 = ue_context_pP->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0];
|
||||
const struct LTE_MeasResultCellNR_r15 *measNeighCellNR0 = measResults2->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0];
|
||||
ueCtxtMeasResultCellNR_r15->pci_r15 = measNeighCellNR0->pci_r15;
|
||||
if (!ueCtxtMeasResultCellNR_r15->measResultCell_r15.rsrpResult_r15)
|
||||
ueCtxtMeasResultCellNR_r15->measResultCell_r15.rsrpResult_r15 = calloc(1, sizeof(*ueCtxtMeasResultCellNR_r15->measResultCell_r15.rsrpResult_r15));
|
||||
if (!ueCtxtMeasResultCellNR_r15->measResultCell_r15.rsrqResult_r15)
|
||||
ueCtxtMeasResultCellNR_r15->measResultCell_r15.rsrqResult_r15 = calloc(1, sizeof(*ueCtxtMeasResultCellNR_r15->measResultCell_r15.rsrqResult_r15));
|
||||
*ueCtxtMeasResultCellNR_r15->measResultCell_r15.rsrpResult_r15 = *measNeighCellNR0->measResultCell_r15.rsrpResult_r15;
|
||||
*ueCtxtMeasResultCellNR_r15->measResultCell_r15.rsrqResult_r15 = *measNeighCellNR0->measResultCell_r15.rsrqResult_r15;
|
||||
if (measNeighCellNR0->measResultRS_IndexList_r15) {
|
||||
if (!ueCtxtMeasResultCellNR_r15->measResultRS_IndexList_r15) {
|
||||
ueCtxtMeasResultCellNR_r15->measResultRS_IndexList_r15 = calloc(1,sizeof(*ueCtxtMeasResultCellNR_r15->measResultRS_IndexList_r15));
|
||||
ueCtxtMeasResultCellNR_r15->measResultRS_IndexList_r15->list.array = calloc(1, sizeof(ueCtxtMeasResultCellNR_r15->measResultRS_IndexList_r15->list.array));
|
||||
ueCtxtMeasResultCellNR_r15->measResultRS_IndexList_r15->list.array[0] = calloc(1, sizeof(*ueCtxtMeasResultCellNR_r15->measResultRS_IndexList_r15->list.array));
|
||||
ueCtxtMeasResultCellNR_r15->measResultRS_IndexList_r15->list.count = 1;
|
||||
}
|
||||
ueCtxtMeasResultCellNR_r15->measResultRS_IndexList_r15->list.array[0]->ssb_Index_r15 = measNeighCellNR0->measResultRS_IndexList_r15->list.array[0]->ssb_Index_r15;
|
||||
}
|
||||
}
|
||||
|
||||
if (measResults2->measResultNeighCells == NULL)
|
||||
@@ -5710,7 +5740,7 @@ rrc_eNB_generate_HO_RRCConnectionReconfiguration(const protocol_ctxt_t *const ct
|
||||
//SchedulingRequestConfig__setup__dsr_TransMax_n4);
|
||||
// assign_enum(&physicalConfigDedicated2->schedulingRequestConfig->choice.setup.dsr_TransMax = SchedulingRequestConfig__setup__dsr_TransMax_n4;
|
||||
physicalConfigDedicated2->schedulingRequestConfig->choice.setup.dsr_TransMax =
|
||||
LTE_SchedulingRequestConfig__setup__dsr_TransMax_n4;
|
||||
LTE_SchedulingRequestConfig__setup__dsr_TransMax_n64;
|
||||
LOG_D(RRC,
|
||||
"handover_config [FRAME %05d][RRC_eNB][MOD %02d][][--- MAC_CONFIG_REQ (SRB1 UE %x) --->][MAC_eNB][MOD %02d][]\n",
|
||||
ctxt_pP->frame, ctxt_pP->module_id, ue_context_pP->ue_context.rnti, ctxt_pP->module_id);
|
||||
@@ -7581,7 +7611,205 @@ rrc_eNB_decode_ccch(
|
||||
return rval;
|
||||
}
|
||||
|
||||
#define NCE nonCriticalExtension
|
||||
|
||||
static void
|
||||
get_ue_Category(
|
||||
LTE_UE_EUTRA_Capability_t *c,
|
||||
long *catDL,
|
||||
long *catUL
|
||||
)
|
||||
{
|
||||
if (c != NULL) { // v8.6
|
||||
*catDL=c->ue_Category; *catUL=c->ue_Category;
|
||||
struct LTE_UE_EUTRA_Capability_v920_IEs *c92=c->NCE;
|
||||
if (c92 != NULL) { // v9.2
|
||||
struct LTE_UE_EUTRA_Capability_v940_IEs *c94=c92->NCE;
|
||||
if (c94 != NULL) { // v9.4
|
||||
struct LTE_UE_EUTRA_Capability_v1020_IEs *c102=c94->NCE;
|
||||
if (c102 != NULL) { // v10.2
|
||||
if (c102->ue_Category_v1020) {*catDL=*c102->ue_Category_v1020;*catUL=*c102->ue_Category_v1020;}
|
||||
struct LTE_UE_EUTRA_Capability_v1060_IEs *c106=c102->NCE;
|
||||
if (c106 != NULL) { // v10.6
|
||||
struct LTE_UE_EUTRA_Capability_v1090_IEs *c109=c106->NCE;
|
||||
if (c109 != NULL) { // v10.9
|
||||
struct LTE_UE_EUTRA_Capability_v1130_IEs *c113=c109->NCE;
|
||||
if (c113 != NULL) { // v11.3
|
||||
struct LTE_UE_EUTRA_Capability_v1170_IEs *c117=c113->NCE;
|
||||
if (c117 != NULL) { // v11.7
|
||||
if (c117->ue_Category_v1170) {*catDL=*c117->ue_Category_v1170;
|
||||
struct LTE_UE_EUTRA_Capability_v1180_IEs *c118=c117->NCE;
|
||||
if (c118 != NULL) { // v11.8
|
||||
struct LTE_UE_EUTRA_Capability_v11a0_IEs *c11a=c118->NCE;
|
||||
if (c11a != NULL) { // v11.a
|
||||
if (c11a->ue_Category_v11a0) {*catDL=*c11a->ue_Category_v11a0;*catUL=*c11a->ue_Category_v11a0;}
|
||||
struct LTE_UE_EUTRA_Capability_v1250_IEs *c125=c11a->NCE;
|
||||
if (c125 != NULL) { // v12.5
|
||||
if (c125->ue_CategoryDL_r12) *catDL=*c125->ue_CategoryDL_r12;
|
||||
if (c125->ue_CategoryUL_r12) *catUL=*c125->ue_CategoryUL_r12;
|
||||
struct LTE_UE_EUTRA_Capability_v1260_IEs *c126=c125->NCE;
|
||||
if (c126 != NULL) { // v12.6
|
||||
if (c126->ue_CategoryDL_v1260) *catDL=*c126->ue_CategoryDL_v1260;
|
||||
struct LTE_UE_EUTRA_Capability_v1270_IEs *c127=c126->NCE;
|
||||
if (c127 != NULL) { // v12.7
|
||||
struct LTE_UE_EUTRA_Capability_v1280_IEs *c128=c127->NCE;
|
||||
if (c128 != NULL) { // v12.8
|
||||
struct LTE_UE_EUTRA_Capability_v1310_IEs *c131=c128->NCE;
|
||||
if (c131 != NULL) { // v13.1
|
||||
if (c131->ue_CategoryDL_v1310 && *c131->ue_CategoryDL_v1310 == 0) *catDL=17;
|
||||
if (c131->ue_CategoryDL_v1310 && *c131->ue_CategoryDL_v1310 == 1) *catDL=-1;
|
||||
if (c131->ue_CategoryUL_v1310 && *c131->ue_CategoryUL_v1310 == 0) *catUL=14;
|
||||
if (c131->ue_CategoryUL_v1310 && *c131->ue_CategoryUL_v1310 == 1) *catUL=-1;
|
||||
struct LTE_UE_EUTRA_Capability_v1320_IEs *c132=c131->NCE;
|
||||
if (c132 != NULL) { //v13.2
|
||||
struct LTE_UE_EUTRA_Capability_v1330_IEs *c133=c132->NCE;
|
||||
if (c133 != NULL) { // v13.3
|
||||
if (c133->ue_CategoryDL_v1330) *catDL=*c133->ue_CategoryDL_v1330;
|
||||
struct LTE_UE_EUTRA_Capability_v1340_IEs *c134=c133->NCE;
|
||||
if (c134 != NULL) { // v13.4
|
||||
if (c134->ue_CategoryUL_v1340) *catUL=*c134->ue_CategoryUL_v1340;
|
||||
struct LTE_UE_EUTRA_Capability_v1350_IEs *c135=c134->NCE;
|
||||
if (c135 != NULL) { // v13.5
|
||||
if (c135->ue_CategoryDL_v1350) *catDL=99; // Cat 1Bis
|
||||
if (c135->ue_CategoryUL_v1350) *catUL=99; // Cat 1Bis
|
||||
struct LTE_UE_EUTRA_Capability_v1360_IEs *c136=c135->NCE;
|
||||
if (c136 != NULL) { // v13.6
|
||||
struct LTE_UE_EUTRA_Capability_v1430_IEs *c143=c136->NCE;
|
||||
if (c143 != NULL) { // v14.3
|
||||
if (c143->ue_CategoryDL_v1430 && *c143->ue_CategoryDL_v1430 == LTE_UE_EUTRA_Capability_v1430_IEs__ue_CategoryDL_v1430_m2) *catDL=-2;
|
||||
if (c143->ue_CategoryUL_v1430 && *c143->ue_CategoryUL_v1430 == LTE_UE_EUTRA_Capability_v1430_IEs__ue_CategoryDL_v1430_m2) *catUL=-2;
|
||||
if (c143->ue_CategoryUL_v1430) *catUL=16+*c143->ue_CategoryUL_v1430;
|
||||
if (c143->ue_CategoryUL_v1430b)*catUL=21;
|
||||
struct LTE_UE_EUTRA_Capability_v1440_IEs *c144=c143->NCE;
|
||||
if (c144 != NULL) { // v14.4
|
||||
struct LTE_UE_EUTRA_Capability_v1450_IEs *c145=c144->NCE;
|
||||
if (c145 != NULL) { // v14.5
|
||||
if (c145->ue_CategoryDL_v1450) *catDL=*c145->ue_CategoryDL_v1450;
|
||||
struct LTE_UE_EUTRA_Capability_v1460_IEs *c146=c145->NCE;
|
||||
if (c146 != NULL) { // v14.6
|
||||
if (c146->ue_CategoryDL_v1460) *catDL=*c146->ue_CategoryDL_v1460;
|
||||
struct LTE_UE_EUTRA_Capability_v1510_IEs *c151=c146->NCE;
|
||||
if (c151 != NULL) { // v15.1
|
||||
struct LTE_UE_EUTRA_Capability_v1520_IEs *c152=c151->NCE;
|
||||
if (c152 != NULL) { // v15.20
|
||||
struct LTE_UE_EUTRA_Capability_v1530_IEs *c153=c152->NCE;
|
||||
if (c153 != NULL) { // v15.30
|
||||
if (c153->ue_CategoryDL_v1530) *catDL=*c153->ue_CategoryDL_v1530;
|
||||
if (c153->ue_CategoryUL_v1530) *catUL=*c153->ue_CategoryUL_v1530;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
is_ul_64QAM_supported(
|
||||
LTE_UE_EUTRA_Capability_t *c
|
||||
)
|
||||
//-----------------------------------------------------------------------------
|
||||
{
|
||||
return c != NULL // R8
|
||||
&& c->NCE != NULL // R92
|
||||
&& c->NCE->NCE != NULL // R94
|
||||
&& c->NCE->NCE->NCE != NULL // R102
|
||||
&& c->NCE->NCE->NCE->NCE != NULL // R106
|
||||
&& c->NCE->NCE->NCE->NCE->NCE != NULL // R109
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R113
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R117
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R118
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R11a
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R125
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250 != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250->supportedBandListEUTRA_v1250 != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250->supportedBandListEUTRA_v1250->list.array != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250->supportedBandListEUTRA_v1250->list.array[0]->ul_64QAM_r12 != NULL
|
||||
&& *c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250->supportedBandListEUTRA_v1250->list.array[0]->ul_64QAM_r12==LTE_SupportedBandEUTRA_v1250__ul_64QAM_r12_supported;
|
||||
}
|
||||
|
||||
static int
|
||||
is_dl_256QAM_supported(
|
||||
LTE_UE_EUTRA_Capability_t *c
|
||||
)
|
||||
//-----------------------------------------------------------------------------
|
||||
{
|
||||
return c != NULL // R8
|
||||
&& c->NCE != NULL // R92
|
||||
&& c->NCE->NCE != NULL // R94
|
||||
&& c->NCE->NCE->NCE != NULL // R102
|
||||
&& c->NCE->NCE->NCE->NCE != NULL // R106
|
||||
&& c->NCE->NCE->NCE->NCE->NCE != NULL // R109
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R113
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R117
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R118
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R11a
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R125
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250 != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250->supportedBandListEUTRA_v1250 != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250->supportedBandListEUTRA_v1250->list.array != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250->supportedBandListEUTRA_v1250->list.array[0]->dl_256QAM_r12 != NULL
|
||||
&& *c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1250->supportedBandListEUTRA_v1250->list.array[0]->dl_256QAM_r12==LTE_SupportedBandEUTRA_v1250__dl_256QAM_r12_supported;
|
||||
|
||||
}
|
||||
static int
|
||||
is_ul_256QAM_supported(
|
||||
LTE_UE_EUTRA_Capability_t *c
|
||||
)
|
||||
//-----------------------------------------------------------------------------
|
||||
{
|
||||
return c != NULL // R8
|
||||
&& c->NCE != NULL // R92
|
||||
&& c->NCE->NCE != NULL // R94
|
||||
&& c->NCE->NCE->NCE != NULL // R102
|
||||
&& c->NCE->NCE->NCE->NCE != NULL // R106
|
||||
&& c->NCE->NCE->NCE->NCE->NCE != NULL // R109
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R113
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R117
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R118
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R11a
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R125
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R126
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // 127
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // 128
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //131
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //132
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //133
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //134
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //135
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //136
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //143
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1430 != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1430->supportedBandCombination_v1430 != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1430->supportedBandCombination_v1430->list.array != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1430->supportedBandCombination_v1430->list.array[0]->bandParameterList_v1430 != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1430->supportedBandCombination_v1430->list.array[0]->bandParameterList_v1430->list.array != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1430->supportedBandCombination_v1430->list.array[0]->bandParameterList_v1430->list.array[0]->ul_256QAM_r14!=NULL
|
||||
&& *c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->rf_Parameters_v1430->supportedBandCombination_v1430->list.array[0]->bandParameterList_v1430->list.array[0]->ul_256QAM_r14==LTE_BandParameters_v1430__ul_256QAM_r14_supported;
|
||||
}
|
||||
|
||||
static int
|
||||
is_en_dc_supported(
|
||||
LTE_UE_EUTRA_Capability_t *c
|
||||
@@ -7591,32 +7819,31 @@ is_en_dc_supported(
|
||||
/* to be refined - check that the bands supported by the UE include
|
||||
* the band of the gNB
|
||||
*/
|
||||
#define NCE nonCriticalExtension
|
||||
return c != NULL
|
||||
&& c->NCE != NULL
|
||||
&& c->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL
|
||||
return c != NULL // R8
|
||||
&& c->NCE != NULL // R92
|
||||
&& c->NCE->NCE != NULL // R94
|
||||
&& c->NCE->NCE->NCE != NULL // R102
|
||||
&& c->NCE->NCE->NCE->NCE != NULL // R106
|
||||
&& c->NCE->NCE->NCE->NCE->NCE != NULL // R109
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R113
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R117
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R118
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R11a
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R125
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // R126
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // 127
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL // 128
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //131
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //132
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //133
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //134
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //135
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //136
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //143
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //144
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //145
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //146
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE != NULL //151
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->irat_ParametersNR_r15 != NULL
|
||||
&& c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->irat_ParametersNR_r15->en_DC_r15 != NULL
|
||||
&& *c->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->NCE->irat_ParametersNR_r15->en_DC_r15 ==
|
||||
@@ -7624,6 +7851,45 @@ is_en_dc_supported(
|
||||
#undef NCE
|
||||
}
|
||||
|
||||
int to_nr_rsrpq(long rsrpq_result,int nr_band) {
|
||||
|
||||
switch(nr_band) {
|
||||
case 1: // A
|
||||
case 70:
|
||||
case 74:
|
||||
case 34:
|
||||
case 38:
|
||||
case 39:
|
||||
case 40:
|
||||
case 50:
|
||||
case 51:
|
||||
return((rsrpq_result*10)-1180);
|
||||
case 66: // B
|
||||
return((rsrpq_result*10)-1175);
|
||||
case 77: // C
|
||||
case 78:
|
||||
case 79:
|
||||
return((rsrpq_result*10)-1170);
|
||||
case 28: // D
|
||||
return((rsrpq_result*10)-1165);
|
||||
case 2:
|
||||
case 5:
|
||||
case 7:
|
||||
case 41: // E
|
||||
return((rsrpq_result*10)-1160);
|
||||
case 3: // G
|
||||
case 8:
|
||||
case 12:
|
||||
case 20:
|
||||
case 71:
|
||||
return((rsrpq_result*10)-1150);
|
||||
case 25: // H
|
||||
return((rsrpq_result*10)-1145);
|
||||
default:
|
||||
AssertFatal(1==0,"Illegal NR band %d\n",nr_band);
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
int
|
||||
rrc_eNB_decode_dcch(
|
||||
@@ -8193,7 +8459,7 @@ rrc_eNB_decode_dcch(
|
||||
ASN_STRUCT_FREE(asn_DEF_NR_UE_NR_Capability,ue_context_p->ue_context.UE_Capability_nr);
|
||||
ue_context_p->ue_context.UE_Capability_nr = 0;
|
||||
}
|
||||
|
||||
LOG_I(RRC,"Received NR_UE_Capabilities\n");
|
||||
dec_rval = uper_decode(NULL,
|
||||
&asn_DEF_NR_UE_NR_Capability,
|
||||
(void **)&ue_context_p->ue_context.UE_Capability_nr,
|
||||
@@ -8218,6 +8484,8 @@ rrc_eNB_decode_dcch(
|
||||
|
||||
if (ul_dcch_msg->message.choice.c1.choice.ueCapabilityInformation.criticalExtensions.choice.c1.choice.ueCapabilityInformation_r8.ue_CapabilityRAT_ContainerList.list.array[i]->rat_Type ==
|
||||
LTE_RAT_Type_eutra_nr) {
|
||||
LOG_I(RRC,"Received UE_Capabilities_MRDC\n");
|
||||
|
||||
if(ue_context_p->ue_context.UE_Capability_MRDC) {
|
||||
ASN_STRUCT_FREE(asn_DEF_NR_UE_MRDC_Capability,ue_context_p->ue_context.UE_Capability_MRDC);
|
||||
ue_context_p->ue_context.UE_Capability_MRDC = 0;
|
||||
@@ -8574,7 +8842,6 @@ void handle_f1_setup_req(f1ap_setup_req_t *f1_setup_req) {
|
||||
F1AP_SETUP_RESP (msg_p).cells_to_activate[cu_cell_ind].nr_cellid = rrc->nr_cellid;
|
||||
F1AP_SETUP_RESP (msg_p).cells_to_activate[cu_cell_ind].nrpci = f1_setup_req->nr_pci[i];
|
||||
int num_SI= 0;
|
||||
|
||||
if (rrc->carrier[0].SIB23) {
|
||||
F1AP_SETUP_RESP (msg_p).cells_to_activate[cu_cell_ind].SI_container[num_SI] = rrc->carrier[0].SIB23;
|
||||
F1AP_SETUP_RESP (msg_p).cells_to_activate[cu_cell_ind].SI_container_length[num_SI] = rrc->carrier[0].sizeof_SIB23;
|
||||
@@ -8780,10 +9047,6 @@ void rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id) {
|
||||
struct rrc_eNB_ue_context_s *ue_to_be_removed[NUMBER_OF_UE_MAX];
|
||||
int removed_ue_count = 0;
|
||||
int cur_ue;
|
||||
#ifdef LOCALIZATION
|
||||
double estimated_distance = 0;
|
||||
protocol_ctxt_t ctxt;
|
||||
#endif
|
||||
MessageDef *msg;
|
||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_RX_TX, VCD_FUNCTION_IN);
|
||||
|
||||
@@ -8795,22 +9058,53 @@ void rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id) {
|
||||
}
|
||||
|
||||
// check for UL failure or for UE to be released
|
||||
FILE *fd=NULL;
|
||||
if ((ctxt_pP->frame&127) == 0 && ctxt_pP->subframe ==0)
|
||||
fd=fopen("RRC_stats.log","w+");
|
||||
|
||||
RB_FOREACH(ue_context_p, rrc_ue_tree_s, &(RC.rrc[ctxt_pP->module_id]->rrc_ue_head)) {
|
||||
ctxt_pP->rnti = ue_context_p->ue_id_rnti;
|
||||
|
||||
if ((ctxt_pP->frame == 0) && (ctxt_pP->subframe == 0)) {
|
||||
if (ue_context_p->ue_context.Initialue_identity_s_TMSI.presence == TRUE) {
|
||||
LOG_I(RRC, "UE rnti %x: S-TMSI %x failure timer %d/8\n",
|
||||
ue_context_p->ue_context.rnti,
|
||||
ue_context_p->ue_context.Initialue_identity_s_TMSI.m_tmsi,
|
||||
ue_context_p->ue_context.ul_failure_timer);
|
||||
} else {
|
||||
LOG_I(RRC, "UE rnti %x failure timer %d/8\n",
|
||||
ue_context_p->ue_context.rnti,
|
||||
ue_context_p->ue_context.ul_failure_timer);
|
||||
if ((ctxt_pP->frame&127) == 0 && ctxt_pP->subframe ==0) {
|
||||
if (fd) {
|
||||
if (ue_context_p->ue_context.Initialue_identity_s_TMSI.presence == TRUE) {
|
||||
fprintf(fd,"RRC UE rnti %x: S-TMSI %x failure timer %d/8\n",
|
||||
ue_context_p->ue_context.rnti,
|
||||
ue_context_p->ue_context.Initialue_identity_s_TMSI.m_tmsi,
|
||||
ue_context_p->ue_context.ul_failure_timer);
|
||||
} else {
|
||||
fprintf(fd,"RRC UE rnti %x failure timer %d/8\n",
|
||||
ue_context_p->ue_context.rnti,
|
||||
ue_context_p->ue_context.ul_failure_timer);
|
||||
}
|
||||
|
||||
if (ue_context_p->ue_context.UE_Capability) {
|
||||
long catDL,catUL;
|
||||
get_ue_Category(ue_context_p->ue_context.UE_Capability,&catDL,&catUL);
|
||||
fprintf(fd,"RRC UE cap: CatDL %ld, CatUL %ld, 64QAM UL %s, 256 QAM DL %s, 256 QAM UL %s, ENDC %s,\n",
|
||||
catDL,catUL,
|
||||
is_ul_64QAM_supported(ue_context_p->ue_context.UE_Capability) == 1 ? "yes" : "no",
|
||||
is_dl_256QAM_supported(ue_context_p->ue_context.UE_Capability) == 1 ? "yes" : "no",
|
||||
is_ul_256QAM_supported(ue_context_p->ue_context.UE_Capability) == 1 ? "yes" : "no",
|
||||
is_en_dc_supported(ue_context_p->ue_context.UE_Capability) == 1 ? "yes" : "no");
|
||||
}
|
||||
if (ue_context_p->ue_context.measResults) {
|
||||
fprintf(fd, "RRC PCell RSRP %ld, RSRQ %ld\n", ue_context_p->ue_context.measResults->measResultPCell.rsrpResult-140,
|
||||
ue_context_p->ue_context.measResults->measResultPCell.rsrqResult/2 - 20);
|
||||
if (ue_context_p->ue_context.measResults->measResultNeighCells &&
|
||||
ue_context_p->ue_context.measResults->measResultNeighCells->present == LTE_MeasResults__measResultNeighCells_PR_measResultNeighCellListNR_r15) {
|
||||
|
||||
fprintf(fd,"NR_pci %ld\n",ue_context_p->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0]->pci_r15);
|
||||
if(ue_context_p->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0]->measResultCell_r15.rsrpResult_r15)
|
||||
fprintf(fd,"NR_rsrp %f dB\n",to_nr_rsrpq(*ue_context_p->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0]->measResultCell_r15.rsrpResult_r15,RC.rrc[ctxt_pP->module_id]->nr_gnb_freq_band[0][0])/10.0);
|
||||
if (ue_context_p->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0]->measResultCell_r15.rsrqResult_r15)
|
||||
fprintf(fd,"NR_rsrq %f dB\n",to_nr_rsrpq(*ue_context_p->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0]->measResultCell_r15.rsrqResult_r15,RC.rrc[ctxt_pP->module_id]->nr_gnb_freq_band[0][0])/10.0);
|
||||
if (ue_context_p->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0]->measResultRS_IndexList_r15)
|
||||
fprintf(fd,"NR_ssb_index %ld\n",ue_context_p->ue_context.measResults->measResultNeighCells->choice.measResultNeighCellListNR_r15.list.array[0]->measResultRS_IndexList_r15->list.array[0]->ssb_Index_r15);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (ue_context_p->ue_context.ul_failure_timer > 0) {
|
||||
ue_context_p->ue_context.ul_failure_timer++;
|
||||
|
||||
@@ -9002,31 +9296,9 @@ void rrc_subframe_process(protocol_ctxt_t *const ctxt_pP, const int CC_id) {
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef RRC_LOCALIZATION
|
||||
/* for the localization, only primary CC_id might be relevant*/
|
||||
gettimeofday(&ts, NULL);
|
||||
current_timestamp_ms = ts.tv_sec * 1000 + ts.tv_usec / 1000;
|
||||
ref_timestamp_ms = RC.rrc[ctxt_pP->module_id]->reference_timestamp_ms;
|
||||
RB_FOREACH(ue_context_p, rrc_ue_tree_s, &(RC.rrc[ctxt_pP->module_id]->rrc_ue_head)) {
|
||||
ctxt = *ctxt_pP;
|
||||
ctxt.rnti = ue_context_p->ue_context.rnti;
|
||||
estimated_distance = rrc_get_estimated_ue_distance(&ctxt, CC_id, RC.rrc[ctxt_pP->module_id]->loc_type);
|
||||
if (fd!=NULL) fclose(fd);
|
||||
|
||||
|
||||
if ((current_timestamp_ms - ref_timestamp_ms > RC.rrc[ctxt_pP->module_id]->aggregation_period_ms) &&
|
||||
estimated_distance != -1) {
|
||||
LOG_D(LOCALIZE, "RRC [UE/id %d -> eNB/id %d] timestamp %d frame %d estimated r = %f\n",
|
||||
ctxt.rnti,
|
||||
ctxt_pP->module_id,
|
||||
current_timestamp_ms,
|
||||
ctxt_pP->frame,
|
||||
estimated_distance);
|
||||
LOG_D(LOCALIZE, "RRC status %d\n",
|
||||
ue_context_p->ue_context.Status);
|
||||
push_front(&RC.rrc[ctxt_pP->module_id]->loc_list, estimated_distance);
|
||||
RC.rrc[ctxt_pP->module_id]->reference_timestamp_ms = current_timestamp_ms;
|
||||
} // end if
|
||||
} // end RB_FOREACH
|
||||
#endif
|
||||
(void)ts; /* remove gcc warning "unused variable" */
|
||||
(void)ref_timestamp_ms; /* remove gcc warning "unused variable" */
|
||||
(void)current_timestamp_ms; /* remove gcc warning "unused variable" */
|
||||
|
||||
@@ -239,13 +239,13 @@ typedef struct RB_INFO_TABLE_ENTRY_NR_s {
|
||||
NR_RB_INFO Rb_info;
|
||||
uint8_t Active;
|
||||
uint32_t Next_check_frame;
|
||||
uint8_t Status;
|
||||
uint8_t status;
|
||||
} NR_RB_INFO_TABLE_ENTRY;
|
||||
|
||||
typedef struct SRB_INFO_TABLE_ENTRY_NR_s {
|
||||
NR_SRB_INFO Srb_info;
|
||||
uint8_t Active;
|
||||
uint8_t Status;
|
||||
uint8_t status;
|
||||
uint32_t Next_check_frame;
|
||||
} NR_SRB_INFO_TABLE_ENTRY;
|
||||
|
||||
@@ -317,7 +317,7 @@ typedef struct gNB_RRC_UE_s {
|
||||
NR_CipheringAlgorithm_t ciphering_algorithm;
|
||||
e_NR_IntegrityProtAlgorithm integrity_algorithm;
|
||||
|
||||
uint8_t Status;
|
||||
uint8_t status;
|
||||
rnti_t rnti;
|
||||
uint64_t random_ue_identity;
|
||||
|
||||
|
||||
+16
-16
@@ -437,7 +437,7 @@ rrc_gNB_generate_RRCSetup(
|
||||
F1AP_DL_RRC_MESSAGE (message_p).RAT_frequency_priority_information.en_dc = 0;
|
||||
itti_send_msg_to_task (TASK_CU_F1, ctxt_pP->module_id, message_p);
|
||||
LOG_D(NR_RRC, "Send F1AP_DL_RRC_MESSAGE with ITTI\n");
|
||||
|
||||
|
||||
break;
|
||||
|
||||
case ngran_gNB_DU:
|
||||
@@ -497,7 +497,7 @@ rrc_gNB_generate_RRCSetup(
|
||||
ue_context_pP->ue_context.masterCellGroup
|
||||
);
|
||||
nr_rrc_rlc_config_asn1_req(ctxt_pP,
|
||||
ue_context_pP->ue_context.SRB_configList,
|
||||
ue_context_pP->ue_context.SRB_configList,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
@@ -564,7 +564,7 @@ rrc_gNB_generate_RRCSetup_for_RRCReestablishmentRequest(
|
||||
ue_context_pP->ue_context.rnti,
|
||||
(NR_CellGroupConfig_t *)NULL
|
||||
);
|
||||
|
||||
|
||||
MSC_LOG_TX_MESSAGE(
|
||||
MSC_RRC_GNB,
|
||||
MSC_RRC_UE,
|
||||
@@ -687,7 +687,7 @@ rrc_gNB_process_RRCSetupComplete(
|
||||
PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP));
|
||||
ue_context_pP->ue_context.Srb1.Active = 1;
|
||||
ue_context_pP->ue_context.Srb1.Srb_info.Srb_id = 1;
|
||||
ue_context_pP->ue_context.Status = NR_RRC_CONNECTED;
|
||||
ue_context_pP->ue_context.status = NR_RRC_CONNECTED;
|
||||
|
||||
if (AMF_MODE_ENABLED) {
|
||||
rrc_gNB_send_NGAP_NAS_FIRST_REQ(ctxt_pP, ue_context_pP, rrcSetupComplete);
|
||||
@@ -879,14 +879,14 @@ rrc_gNB_generate_defaultRRCReconfiguration(
|
||||
// rrc_rlc_config_asn1_req
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
default :
|
||||
LOG_W(NR_RRC, "Unknown node type %d\n", RC.nrrrc[ctxt_pP->module_id]->node_type);
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void
|
||||
void
|
||||
rrc_gNB_generate_dedicatedRRCReconfiguration(
|
||||
const protocol_ctxt_t *const ctxt_pP,
|
||||
rrc_gNB_ue_context_t *ue_context_pP
|
||||
@@ -899,7 +899,7 @@ rrc_gNB_generate_dedicatedRRCReconfiguration(
|
||||
NR_DRB_ToAddModList_t **DRB_configList = NULL;
|
||||
NR_DRB_ToAddModList_t **DRB_configList2 = NULL;
|
||||
NR_SRB_ToAddModList_t **SRB_configList2 = NULL;
|
||||
NR_SRB_ToAddModList_t *SRB_configList = ue_context_pP->ue_context.SRB_configList;
|
||||
NR_SRB_ToAddModList_t *SRB_configList = ue_context_pP->ue_context.SRB_configList;
|
||||
struct NR_RRCReconfiguration_v1530_IEs__dedicatedNAS_MessageList
|
||||
*dedicatedNAS_MessageList = NULL;
|
||||
NR_DedicatedNAS_Message_t *dedicatedNAS_Message = NULL;
|
||||
@@ -1051,7 +1051,7 @@ rrc_gNB_generate_dedicatedRRCReconfiguration(
|
||||
fill_mastercellGroupConfig(cellGroupConfig, ue_context_pP->ue_context.masterCellGroup);
|
||||
size = do_RRCReconfiguration(ctxt_pP, buffer,
|
||||
xid,
|
||||
*SRB_configList2,
|
||||
*SRB_configList2,
|
||||
*DRB_configList,
|
||||
NULL,
|
||||
NULL,
|
||||
@@ -1262,7 +1262,7 @@ rrc_gNB_process_RRCReconfigurationComplete(
|
||||
|
||||
#ifndef ITTI_SIM
|
||||
LOG_I(NR_RRC,"Configuring PDCP DRBs/SRBs for UE %x\n",ue_context_pP->ue_context.rnti);
|
||||
|
||||
|
||||
nr_rrc_pdcp_config_asn1_req(ctxt_pP,
|
||||
SRB_configList, // NULL,
|
||||
DRB_configList,
|
||||
@@ -1495,7 +1495,7 @@ rrc_gNB_process_RRCConnectionReestablishmentComplete(
|
||||
|
||||
uint8_t next_xid = rrc_gNB_get_next_transaction_identifier(ctxt_pP->module_id);
|
||||
int ret = 0;
|
||||
ue_context_pP->ue_context.Status = NR_RRC_CONNECTED;
|
||||
ue_context_pP->ue_context.status = NR_RRC_CONNECTED;
|
||||
ue_context_pP->ue_context.ue_rrc_inactivity_timer = 1; // set rrc inactivity when UE goes into RRC_CONNECTED
|
||||
ue_context_pP->ue_context.reestablishment_xid = next_xid;
|
||||
SRB_configList2 = &ue_context_pP->ue_context.SRB_configList2[xid];
|
||||
@@ -1990,7 +1990,7 @@ int nr_rrc_gNB_decode_ccch(protocol_ctxt_t *const ctxt_pP,
|
||||
}
|
||||
#endif
|
||||
//c-plane not end
|
||||
if((ue_context_p->ue_context.Status != NR_RRC_RECONFIGURED) && (ue_context_p->ue_context.reestablishment_cause == NR_ReestablishmentCause_spare1)) {
|
||||
if((ue_context_p->ue_context.status != NR_RRC_RECONFIGURED) && (ue_context_p->ue_context.reestablishment_cause == NR_ReestablishmentCause_spare1)) {
|
||||
LOG_E(NR_RRC,
|
||||
PROTOCOL_NR_RRC_CTXT_UE_FMT" NR_RRCReestablishmentRequest (UE %x c-plane is not end), RRC establishment failed \n",
|
||||
PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP),c_rnti);
|
||||
@@ -2002,9 +2002,9 @@ int nr_rrc_gNB_decode_ccch(protocol_ctxt_t *const ctxt_pP,
|
||||
LOG_E(NR_RRC,
|
||||
PROTOCOL_NR_RRC_CTXT_UE_FMT" RRRCReconfigurationComplete(Previous) don't receive, delete the Previous UE,\nprevious Status %d, new Status NR_RRC_RECONFIGURED\n",
|
||||
PROTOCOL_NR_RRC_CTXT_UE_ARGS(ctxt_pP),
|
||||
ue_context_p->ue_context.Status
|
||||
ue_context_p->ue_context.status
|
||||
);
|
||||
ue_context_p->ue_context.Status = NR_RRC_RECONFIGURED;
|
||||
ue_context_p->ue_context.status = NR_RRC_RECONFIGURED;
|
||||
protocol_ctxt_t ctxt_old_p;
|
||||
PROTOCOL_CTXT_SET_BY_INSTANCE(&ctxt_old_p,
|
||||
ctxt_pP->instance,
|
||||
@@ -2707,13 +2707,13 @@ void rrc_gNB_process_f1_setup_req(f1ap_setup_req_t *f1_setup_req) {
|
||||
if (msg_p2 == NULL) {
|
||||
msg_p2 = itti_alloc_new_message (TASK_RRC_GNB, 0, F1AP_GNB_CU_CONFIGURATION_UPDATE);
|
||||
}
|
||||
|
||||
|
||||
F1AP_SETUP_RESP (msg_p).gNB_CU_name = rrc->node_name;
|
||||
F1AP_SETUP_RESP (msg_p).num_cells_to_activate = 0;
|
||||
|
||||
}
|
||||
|
||||
F1AP_GNB_CU_CONFIGURATION_UPDATE (msg_p2).gNB_CU_name = rrc->node_name;
|
||||
F1AP_GNB_CU_CONFIGURATION_UPDATE (msg_p2).gNB_CU_name = rrc->node_name;
|
||||
F1AP_GNB_CU_CONFIGURATION_UPDATE (msg_p2).cells_to_activate[cu_cell_ind].mcc = rrc->configuration.mcc[0];
|
||||
F1AP_GNB_CU_CONFIGURATION_UPDATE (msg_p2).cells_to_activate[cu_cell_ind].mnc = rrc->configuration.mnc[0];
|
||||
F1AP_GNB_CU_CONFIGURATION_UPDATE (msg_p2).cells_to_activate[cu_cell_ind].mnc_digit_length = rrc->configuration.mnc_digit_length[0];
|
||||
@@ -2731,7 +2731,7 @@ void rrc_gNB_process_f1_setup_req(f1ap_setup_req_t *f1_setup_req) {
|
||||
cu_cell_ind++;
|
||||
found_cell=1;
|
||||
F1AP_GNB_CU_CONFIGURATION_UPDATE (msg_p2).num_cells_to_activate = cu_cell_ind;
|
||||
// send
|
||||
// send
|
||||
break;
|
||||
} else {// setup_req mcc/mnc match rrc internal list element
|
||||
LOG_W(NR_RRC,"[Inst %d] No matching MCC/MNC: rrc->mcc/f1_setup_req->mcc %d/%d rrc->mnc/f1_setup_req->mnc %d/%d rrc->nr_cellid/f1_setup_req->nr_cellid %ld/%ld \n",
|
||||
|
||||
@@ -579,7 +579,7 @@ rrc_gNB_process_NGAP_INITIAL_CONTEXT_SETUP_REQ(
|
||||
}
|
||||
|
||||
// in case, send the S1SP initial context response if it is not sent with the attach complete message
|
||||
if (ue_context_p->ue_context.Status == NR_RRC_RECONFIGURED) {
|
||||
if (ue_context_p->ue_context.status == NR_RRC_RECONFIGURED) {
|
||||
LOG_I(NR_RRC, "Sending rrc_gNB_send_NGAP_INITIAL_CONTEXT_SETUP_RESP, cause %ld\n", ue_context_p->ue_context.reestablishment_cause);
|
||||
rrc_gNB_send_NGAP_INITIAL_CONTEXT_SETUP_RESP(&ctxt,ue_context_p);
|
||||
}
|
||||
|
||||
+42
-42
@@ -553,7 +553,7 @@ int8_t nr_rrc_ue_decode_NR_BCCH_BCH_Message(
|
||||
uint8_t *const bufferP,
|
||||
const uint8_t buffer_len ){
|
||||
NR_BCCH_BCH_Message_t *bcch_message = NULL;
|
||||
|
||||
|
||||
|
||||
if (NR_UE_rrc_inst[module_id].mib != NULL)
|
||||
SEQUENCE_free( &asn_DEF_NR_BCCH_BCH_Message, (void *)bcch_message, 1 );
|
||||
@@ -564,7 +564,7 @@ int8_t nr_rrc_ue_decode_NR_BCCH_BCH_Message(
|
||||
(void **)&bcch_message,
|
||||
(const void *)bufferP,
|
||||
buffer_len );
|
||||
|
||||
|
||||
if ((dec_rval.code != RC_OK) || (dec_rval.consumed == 0)) {
|
||||
LOG_I(NR_RRC,"NR_BCCH_BCH decode error\n");
|
||||
// free the memory
|
||||
@@ -578,10 +578,10 @@ int8_t nr_rrc_ue_decode_NR_BCCH_BCH_Message(
|
||||
//memcpy( (void *)mib,
|
||||
// (void *)&bcch_message->message.choice.mib,
|
||||
// sizeof(NR_MIB_t) );
|
||||
|
||||
|
||||
nr_rrc_mac_config_req_ue( 0, 0, 0, NR_UE_rrc_inst[module_id].mib, NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1289,7 +1289,7 @@ nr_rrc_ue_process_masterCellGroup(
|
||||
} else {
|
||||
if (NR_UE_rrc_inst[ctxt_pP->module_id].cell_group_config)
|
||||
NR_UE_rrc_inst[ctxt_pP->module_id].cell_group_config->spCellConfig = cellGroupConfig->spCellConfig;
|
||||
else
|
||||
else
|
||||
NR_UE_rrc_inst[ctxt_pP->module_id].cell_group_config = cellGroupConfig;
|
||||
}
|
||||
LOG_I(RRC,"Sending CellGroupConfig to MAC\n");
|
||||
@@ -1474,7 +1474,7 @@ int8_t nr_rrc_ue_decode_ccch( const protocol_ctxt_t *const ctxt_pP, const NR_SRB
|
||||
MessageDef *msg_p;
|
||||
|
||||
asn_dec_rval_t dec_rval = uper_decode( NULL,
|
||||
&asn_DEF_NR_DL_DCCH_Message,
|
||||
&asn_DEF_NR_DL_DCCH_Message,
|
||||
(void**)&nr_dl_dcch_msg,
|
||||
(uint8_t *)bufferP,
|
||||
buffer_len, 0, 0);
|
||||
@@ -1489,7 +1489,7 @@ int8_t nr_rrc_ue_decode_ccch( const protocol_ctxt_t *const ctxt_pP, const NR_SRB
|
||||
}
|
||||
|
||||
if(nr_dl_dcch_msg != NULL){
|
||||
switch(nr_dl_dcch_msg->message.present){
|
||||
switch(nr_dl_dcch_msg->message.present){
|
||||
case NR_DL_DCCH_MessageType_PR_c1:
|
||||
switch(nr_dl_dcch_msg->message.choice.c1->present){
|
||||
case NR_DL_DCCH_MessageType__c1_PR_rrcReconfiguration:
|
||||
@@ -1794,41 +1794,41 @@ int8_t nr_rrc_ue_decode_ccch( const protocol_ctxt_t *const ctxt_pP, const NR_SRB
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
int32_t
|
||||
nr_rrc_ue_establish_srb1(
|
||||
module_id_t ue_mod_idP,
|
||||
frame_t frameP,
|
||||
uint8_t gNB_index,
|
||||
NR_SRB_ToAddMod_t *SRB_config
|
||||
)
|
||||
//-----------------------------------------------------------------------------
|
||||
{
|
||||
// add descriptor from RRC PDU
|
||||
NR_UE_rrc_inst[ue_mod_idP].Srb1[gNB_index].Active = 1;
|
||||
NR_UE_rrc_inst[ue_mod_idP].Srb1[gNB_index].Status = RADIO_CONFIG_OK;//RADIO CFG
|
||||
NR_UE_rrc_inst[ue_mod_idP].Srb1[gNB_index].Srb_info.Srb_id = 1;
|
||||
LOG_I(NR_RRC, "[UE %d], CONFIG_SRB1 %d corresponding to gNB_index %d\n", ue_mod_idP, DCCH, gNB_index);
|
||||
return(0);
|
||||
}
|
||||
//-----------------------------------------------------------------------------
|
||||
int32_t
|
||||
nr_rrc_ue_establish_srb1(
|
||||
module_id_t ue_mod_idP,
|
||||
frame_t frameP,
|
||||
uint8_t gNB_index,
|
||||
NR_SRB_ToAddMod_t *SRB_config
|
||||
)
|
||||
//-----------------------------------------------------------------------------
|
||||
{
|
||||
// add descriptor from RRC PDU
|
||||
NR_UE_rrc_inst[ue_mod_idP].Srb1[gNB_index].Active = 1;
|
||||
NR_UE_rrc_inst[ue_mod_idP].Srb1[gNB_index].status = RADIO_CONFIG_OK;//RADIO CFG
|
||||
NR_UE_rrc_inst[ue_mod_idP].Srb1[gNB_index].Srb_info.Srb_id = 1;
|
||||
LOG_I(NR_RRC, "[UE %d], CONFIG_SRB1 %d corresponding to gNB_index %d\n", ue_mod_idP, DCCH, gNB_index);
|
||||
return(0);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
int32_t
|
||||
nr_rrc_ue_establish_srb2(
|
||||
module_id_t ue_mod_idP,
|
||||
frame_t frameP,
|
||||
uint8_t gNB_index,
|
||||
NR_SRB_ToAddMod_t *SRB_config
|
||||
)
|
||||
//-----------------------------------------------------------------------------
|
||||
{
|
||||
// add descriptor from RRC PDU
|
||||
NR_UE_rrc_inst[ue_mod_idP].Srb2[gNB_index].Active = 1;
|
||||
NR_UE_rrc_inst[ue_mod_idP].Srb2[gNB_index].Status = RADIO_CONFIG_OK;//RADIO CFG
|
||||
NR_UE_rrc_inst[ue_mod_idP].Srb2[gNB_index].Srb_info.Srb_id = 2;
|
||||
LOG_I(NR_RRC, "[UE %d], CONFIG_SRB2 %d corresponding to gNB_index %d\n", ue_mod_idP, DCCH1, gNB_index);
|
||||
return(0);
|
||||
}
|
||||
//-----------------------------------------------------------------------------
|
||||
int32_t
|
||||
nr_rrc_ue_establish_srb2(
|
||||
module_id_t ue_mod_idP,
|
||||
frame_t frameP,
|
||||
uint8_t gNB_index,
|
||||
NR_SRB_ToAddMod_t *SRB_config
|
||||
)
|
||||
//-----------------------------------------------------------------------------
|
||||
{
|
||||
// add descriptor from RRC PDU
|
||||
NR_UE_rrc_inst[ue_mod_idP].Srb2[gNB_index].Active = 1;
|
||||
NR_UE_rrc_inst[ue_mod_idP].Srb2[gNB_index].status = RADIO_CONFIG_OK;//RADIO CFG
|
||||
NR_UE_rrc_inst[ue_mod_idP].Srb2[gNB_index].Srb_info.Srb_id = 2;
|
||||
LOG_I(NR_RRC, "[UE %d], CONFIG_SRB2 %d corresponding to gNB_index %d\n", ue_mod_idP, DCCH1, gNB_index);
|
||||
return(0);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
int32_t
|
||||
@@ -2065,7 +2065,7 @@ int8_t nr_rrc_ue_decode_ccch( const protocol_ctxt_t *const ctxt_pP, const NR_SRB
|
||||
if (SRB_id == 1) {
|
||||
if (NR_UE_rrc_inst[ctxt_pP->module_id].SRB1_config[gNB_index]) {
|
||||
memcpy(NR_UE_rrc_inst[ctxt_pP->module_id].SRB1_config[gNB_index],
|
||||
radioBearerConfig->srb_ToAddModList->list.array[cnt],
|
||||
radioBearerConfig->srb_ToAddModList->list.array[cnt],
|
||||
sizeof(NR_SRB_ToAddMod_t));
|
||||
} else {
|
||||
NR_UE_rrc_inst[ctxt_pP->module_id].SRB1_config[gNB_index] = radioBearerConfig->srb_ToAddModList->list.array[cnt];
|
||||
|
||||
Reference in New Issue
Block a user