Add F1AP procedures related to measurementTimingConfiguration
This commit is contained in:
@@ -381,6 +381,7 @@ typedef struct f1ap_cu_to_du_rrc_info_s {
|
||||
byte_array_t *cg_configinfo;
|
||||
byte_array_t *ue_cap;
|
||||
byte_array_t *meas_config;
|
||||
byte_array_t *meas_timing_config;
|
||||
byte_array_t *ho_prep_info;
|
||||
} f1ap_cu_to_du_rrc_info_t;
|
||||
|
||||
|
||||
@@ -57,8 +57,9 @@ static F1AP_CUtoDURRCInformation_t encode_cu_to_du_rrc_info(const f1ap_cu_to_du_
|
||||
}
|
||||
|
||||
/* optional: HandoverPreparationInformation */
|
||||
F1AP_ProtocolExtensionContainer_10696P60_t *p = NULL;
|
||||
if (cu2du->ho_prep_info) {
|
||||
F1AP_ProtocolExtensionContainer_10696P60_t *p = calloc_or_fail(1, sizeof(*p));
|
||||
p = calloc_or_fail(1, sizeof(*p));
|
||||
enc.iE_Extensions = (struct F1AP_ProtocolExtensionContainer *)p;
|
||||
asn1cSequenceAdd(p->list, F1AP_CUtoDURRCInformation_ExtIEs_t, ie_ext);
|
||||
ie_ext->id = F1AP_ProtocolIE_ID_id_HandoverPreparationInformation;
|
||||
@@ -68,6 +69,20 @@ static F1AP_CUtoDURRCInformation_t encode_cu_to_du_rrc_info(const f1ap_cu_to_du_
|
||||
F1AP_HandoverPreparationInformation_t *hpi = &ie_ext->extensionValue.choice.HandoverPreparationInformation;
|
||||
OCTET_STRING_fromBuf(hpi, (const char *)ba->buf, ba->len);
|
||||
}
|
||||
|
||||
/* optional: iE_Extensions */
|
||||
if (cu2du->meas_timing_config) {
|
||||
if (!p)
|
||||
p = calloc_or_fail(1, sizeof(*p));
|
||||
enc.iE_Extensions = (struct F1AP_ProtocolExtensionContainer *)p;
|
||||
asn1cSequenceAdd(p->list, F1AP_CUtoDURRCInformation_ExtIEs_t, ie_ext);
|
||||
ie_ext->id = F1AP_ProtocolIE_ID_id_MeasurementTimingConfiguration;
|
||||
ie_ext->criticality = F1AP_Criticality_ignore;
|
||||
ie_ext->extensionValue.present = F1AP_CUtoDURRCInformation_ExtIEs__extensionValue_PR_MeasurementTimingConfiguration;
|
||||
const byte_array_t *ba = cu2du->meas_timing_config;
|
||||
F1AP_MeasurementTimingConfiguration_t *mtc = &ie_ext->extensionValue.choice.MeasurementTimingConfiguration;
|
||||
OCTET_STRING_fromBuf(mtc, (const char *)ba->buf, ba->len);
|
||||
}
|
||||
return enc;
|
||||
}
|
||||
|
||||
@@ -98,6 +113,11 @@ static bool decode_cu_to_du_rrc_info(f1ap_cu_to_du_rrc_info_t *dec, const F1AP_C
|
||||
const F1AP_HandoverPreparationInformation_t *hopi = &cu2du_info_ext->extensionValue.choice.HandoverPreparationInformation;
|
||||
*dec->ho_prep_info = create_byte_array(hopi->size, (uint8_t*) hopi->buf);
|
||||
break;
|
||||
case F1AP_ProtocolIE_ID_id_MeasurementTimingConfiguration:
|
||||
dec->meas_timing_config = calloc_or_fail(1, sizeof(*dec->meas_timing_config));
|
||||
const F1AP_MeasurementTimingConfiguration_t *mtc = &cu2du_info_ext->extensionValue.choice.MeasurementTimingConfiguration;
|
||||
*dec->meas_timing_config = create_byte_array(mtc->size, (uint8_t *)mtc->buf);
|
||||
break;
|
||||
default:
|
||||
PRINT_ERROR("received unsupported F1AP CUtoDURRCInfo extension container %ld\n", cu2du_info_ext->id);
|
||||
}
|
||||
@@ -112,6 +132,7 @@ static f1ap_cu_to_du_rrc_info_t cp_cu_to_du_rrc_info(const f1ap_cu_to_du_rrc_inf
|
||||
CP_OPT_BYTE_ARRAY(dst.cg_configinfo, src->cg_configinfo);
|
||||
CP_OPT_BYTE_ARRAY(dst.ue_cap, src->ue_cap);
|
||||
CP_OPT_BYTE_ARRAY(dst.meas_config, src->meas_config);
|
||||
CP_OPT_BYTE_ARRAY(dst.meas_timing_config, src->meas_timing_config);
|
||||
CP_OPT_BYTE_ARRAY(dst.ho_prep_info, src->ho_prep_info);
|
||||
return dst;
|
||||
}
|
||||
@@ -126,6 +147,7 @@ static bool eq_cu_to_du_rrc_info(const f1ap_cu_to_du_rrc_info_t *a, const f1ap_c
|
||||
_F1_EQ_CHECK_OPTIONAL_IE(a, b, cg_configinfo, eq_ba);
|
||||
_F1_EQ_CHECK_OPTIONAL_IE(a, b, ue_cap, eq_ba);
|
||||
_F1_EQ_CHECK_OPTIONAL_IE(a, b, meas_config, eq_ba);
|
||||
_F1_EQ_CHECK_OPTIONAL_IE(a, b, meas_timing_config, eq_ba);
|
||||
_F1_EQ_CHECK_OPTIONAL_IE(a, b, ho_prep_info, eq_ba);
|
||||
return true;
|
||||
}
|
||||
@@ -135,6 +157,7 @@ static void free_cu_to_du_rrc_info(f1ap_cu_to_du_rrc_info_t *cu2du)
|
||||
FREE_OPT_BYTE_ARRAY(cu2du->cg_configinfo);
|
||||
FREE_OPT_BYTE_ARRAY(cu2du->ue_cap);
|
||||
FREE_OPT_BYTE_ARRAY(cu2du->meas_config);
|
||||
FREE_OPT_BYTE_ARRAY(cu2du->meas_timing_config);
|
||||
FREE_OPT_BYTE_ARRAY(cu2du->ho_prep_info);
|
||||
}
|
||||
|
||||
|
||||
@@ -755,6 +755,7 @@ static void test_f1ap_ue_context_setup_request()
|
||||
orig.cu_to_du_rrc_info.cg_configinfo = get_malloced_test_ba("CG-CONFIGINFO");
|
||||
orig.cu_to_du_rrc_info.ue_cap = get_malloced_test_ba("UE CAP");
|
||||
orig.cu_to_du_rrc_info.meas_config = get_malloced_test_ba("UE MEASUREMENT CONFIGURATION");
|
||||
orig.cu_to_du_rrc_info.meas_timing_config = get_malloced_test_ba("MEASUREMENT TIMING CONFIGURATION");
|
||||
orig.cu_to_du_rrc_info.ho_prep_info = get_malloced_test_ba("PREPARATION DATA FOR HANDOVER");
|
||||
orig.srbs_len = 2;
|
||||
orig.srbs = calloc_or_fail(orig.srbs_len, sizeof(*orig.srbs));
|
||||
@@ -996,6 +997,7 @@ static void test_f1ap_ue_context_modification_request()
|
||||
.cg_configinfo = get_malloced_test_ba("Modified"),
|
||||
.ue_cap = get_malloced_test_ba("UE forgot to send earlier"),
|
||||
.meas_config = get_malloced_test_ba("with updates from another cell"),
|
||||
.meas_timing_config = get_malloced_test_ba("measurement timing configuration"),
|
||||
.ho_prep_info = get_malloced_test_ba("prepare to ho soon!"),
|
||||
};
|
||||
_F1_MALLOC(orig.cu_to_du_rrc_info, cu2du);
|
||||
|
||||
@@ -93,7 +93,6 @@ static void ue_context_modification_required_direct(const f1ap_ue_context_modif_
|
||||
du2cu->cellGroupConfig = malloc(du2cu->cellGroupConfig_length * sizeof(*du2cu->cellGroupConfig));
|
||||
AssertFatal(du2cu->cellGroupConfig != NULL, "out of memory\n");
|
||||
memcpy(du2cu->cellGroupConfig, required->du_to_cu_rrc_information->cellGroupConfig, du2cu->cellGroupConfig_length);
|
||||
AssertFatal(required->du_to_cu_rrc_information->measGapConfig == NULL && required->du_to_cu_rrc_information->measGapConfig_length == 0, "not handled yet\n");
|
||||
AssertFatal(required->du_to_cu_rrc_information->requestedP_MaxFR1 == NULL && required->du_to_cu_rrc_information->requestedP_MaxFR1_length == 0, "not handled yet\n");
|
||||
}
|
||||
f1ap_msg->cause = required->cause;
|
||||
|
||||
@@ -117,7 +117,6 @@ static void ue_context_modification_required_f1ap(const f1ap_ue_context_modif_re
|
||||
du2cu->cellGroupConfig = malloc(du2cu->cellGroupConfig_length * sizeof(*du2cu->cellGroupConfig));
|
||||
AssertFatal(du2cu->cellGroupConfig != NULL, "out of memory\n");
|
||||
memcpy(du2cu->cellGroupConfig, required->du_to_cu_rrc_information->cellGroupConfig, du2cu->cellGroupConfig_length);
|
||||
AssertFatal(required->du_to_cu_rrc_information->measGapConfig == NULL && required->du_to_cu_rrc_information->measGapConfig_length == 0, "not handled yet\n");
|
||||
AssertFatal(required->du_to_cu_rrc_information->requestedP_MaxFR1 == NULL && required->du_to_cu_rrc_information->requestedP_MaxFR1_length == 0, "not handled yet\n");
|
||||
}
|
||||
f1ap_msg->cause = required->cause;
|
||||
|
||||
Reference in New Issue
Block a user