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 *cg_configinfo;
|
||||||
byte_array_t *ue_cap;
|
byte_array_t *ue_cap;
|
||||||
byte_array_t *meas_config;
|
byte_array_t *meas_config;
|
||||||
|
byte_array_t *meas_timing_config;
|
||||||
byte_array_t *ho_prep_info;
|
byte_array_t *ho_prep_info;
|
||||||
} f1ap_cu_to_du_rrc_info_t;
|
} 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 */
|
/* optional: HandoverPreparationInformation */
|
||||||
|
F1AP_ProtocolExtensionContainer_10696P60_t *p = NULL;
|
||||||
if (cu2du->ho_prep_info) {
|
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;
|
enc.iE_Extensions = (struct F1AP_ProtocolExtensionContainer *)p;
|
||||||
asn1cSequenceAdd(p->list, F1AP_CUtoDURRCInformation_ExtIEs_t, ie_ext);
|
asn1cSequenceAdd(p->list, F1AP_CUtoDURRCInformation_ExtIEs_t, ie_ext);
|
||||||
ie_ext->id = F1AP_ProtocolIE_ID_id_HandoverPreparationInformation;
|
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;
|
F1AP_HandoverPreparationInformation_t *hpi = &ie_ext->extensionValue.choice.HandoverPreparationInformation;
|
||||||
OCTET_STRING_fromBuf(hpi, (const char *)ba->buf, ba->len);
|
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;
|
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;
|
const F1AP_HandoverPreparationInformation_t *hopi = &cu2du_info_ext->extensionValue.choice.HandoverPreparationInformation;
|
||||||
*dec->ho_prep_info = create_byte_array(hopi->size, (uint8_t*) hopi->buf);
|
*dec->ho_prep_info = create_byte_array(hopi->size, (uint8_t*) hopi->buf);
|
||||||
break;
|
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:
|
default:
|
||||||
PRINT_ERROR("received unsupported F1AP CUtoDURRCInfo extension container %ld\n", cu2du_info_ext->id);
|
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.cg_configinfo, src->cg_configinfo);
|
||||||
CP_OPT_BYTE_ARRAY(dst.ue_cap, src->ue_cap);
|
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_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);
|
CP_OPT_BYTE_ARRAY(dst.ho_prep_info, src->ho_prep_info);
|
||||||
return dst;
|
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, cg_configinfo, eq_ba);
|
||||||
_F1_EQ_CHECK_OPTIONAL_IE(a, b, ue_cap, 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_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);
|
_F1_EQ_CHECK_OPTIONAL_IE(a, b, ho_prep_info, eq_ba);
|
||||||
return true;
|
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->cg_configinfo);
|
||||||
FREE_OPT_BYTE_ARRAY(cu2du->ue_cap);
|
FREE_OPT_BYTE_ARRAY(cu2du->ue_cap);
|
||||||
FREE_OPT_BYTE_ARRAY(cu2du->meas_config);
|
FREE_OPT_BYTE_ARRAY(cu2du->meas_config);
|
||||||
|
FREE_OPT_BYTE_ARRAY(cu2du->meas_timing_config);
|
||||||
FREE_OPT_BYTE_ARRAY(cu2du->ho_prep_info);
|
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.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.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_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.cu_to_du_rrc_info.ho_prep_info = get_malloced_test_ba("PREPARATION DATA FOR HANDOVER");
|
||||||
orig.srbs_len = 2;
|
orig.srbs_len = 2;
|
||||||
orig.srbs = calloc_or_fail(orig.srbs_len, sizeof(*orig.srbs));
|
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"),
|
.cg_configinfo = get_malloced_test_ba("Modified"),
|
||||||
.ue_cap = get_malloced_test_ba("UE forgot to send earlier"),
|
.ue_cap = get_malloced_test_ba("UE forgot to send earlier"),
|
||||||
.meas_config = get_malloced_test_ba("with updates from another cell"),
|
.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!"),
|
.ho_prep_info = get_malloced_test_ba("prepare to ho soon!"),
|
||||||
};
|
};
|
||||||
_F1_MALLOC(orig.cu_to_du_rrc_info, cu2du);
|
_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));
|
du2cu->cellGroupConfig = malloc(du2cu->cellGroupConfig_length * sizeof(*du2cu->cellGroupConfig));
|
||||||
AssertFatal(du2cu->cellGroupConfig != NULL, "out of memory\n");
|
AssertFatal(du2cu->cellGroupConfig != NULL, "out of memory\n");
|
||||||
memcpy(du2cu->cellGroupConfig, required->du_to_cu_rrc_information->cellGroupConfig, du2cu->cellGroupConfig_length);
|
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");
|
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;
|
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));
|
du2cu->cellGroupConfig = malloc(du2cu->cellGroupConfig_length * sizeof(*du2cu->cellGroupConfig));
|
||||||
AssertFatal(du2cu->cellGroupConfig != NULL, "out of memory\n");
|
AssertFatal(du2cu->cellGroupConfig != NULL, "out of memory\n");
|
||||||
memcpy(du2cu->cellGroupConfig, required->du_to_cu_rrc_information->cellGroupConfig, du2cu->cellGroupConfig_length);
|
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");
|
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;
|
f1ap_msg->cause = required->cause;
|
||||||
|
|||||||
Reference in New Issue
Block a user