Fixes to F1 Setup Failure
* added missing Transaction ID to te F1 Setup Failure message struct * fill F1 Setup Failure transaction ID in RRC before calling the F1 Setup Failure function
This commit is contained in:
@@ -233,7 +233,9 @@ typedef struct f1ap_gnb_cu_configuration_update_s {
|
|||||||
typedef struct f1ap_setup_failure_s {
|
typedef struct f1ap_setup_failure_s {
|
||||||
uint16_t cause;
|
uint16_t cause;
|
||||||
uint16_t time_to_wait;
|
uint16_t time_to_wait;
|
||||||
uint16_t criticality_diagnostics;
|
uint16_t criticality_diagnostics;
|
||||||
|
/// Transaction ID (M)
|
||||||
|
uint64_t transaction_id;
|
||||||
} f1ap_setup_failure_t;
|
} f1ap_setup_failure_t;
|
||||||
|
|
||||||
typedef struct f1ap_gnb_cu_configuration_update_acknowledge_s {
|
typedef struct f1ap_gnb_cu_configuration_update_acknowledge_s {
|
||||||
|
|||||||
@@ -262,6 +262,9 @@ void rrc_gNB_process_f1_setup_req(f1ap_setup_req_t *req, sctp_assoc_t assoc_id)
|
|||||||
DevAssert(rrc);
|
DevAssert(rrc);
|
||||||
|
|
||||||
LOG_I(NR_RRC, "Received F1 Setup Request from gNB_DU %lu (%s) on assoc_id %d\n", req->gNB_DU_id, req->gNB_DU_name, assoc_id);
|
LOG_I(NR_RRC, "Received F1 Setup Request from gNB_DU %lu (%s) on assoc_id %d\n", req->gNB_DU_id, req->gNB_DU_name, assoc_id);
|
||||||
|
// pre-fill F1 Setup Failure message
|
||||||
|
f1ap_setup_failure_t fail = {.transaction_id = F1AP_get_next_transaction_identifier(0, 0)};
|
||||||
|
|
||||||
// check:
|
// check:
|
||||||
// - it is one cell
|
// - it is one cell
|
||||||
// - PLMN and Cell ID matches
|
// - PLMN and Cell ID matches
|
||||||
@@ -269,7 +272,7 @@ void rrc_gNB_process_f1_setup_req(f1ap_setup_req_t *req, sctp_assoc_t assoc_id)
|
|||||||
// else reject
|
// else reject
|
||||||
if (req->num_cells_available != 1) {
|
if (req->num_cells_available != 1) {
|
||||||
LOG_E(NR_RRC, "can only handle on DU cell, but gNB_DU %ld has %d\n", req->gNB_DU_id, req->num_cells_available);
|
LOG_E(NR_RRC, "can only handle on DU cell, but gNB_DU %ld has %d\n", req->gNB_DU_id, req->num_cells_available);
|
||||||
f1ap_setup_failure_t fail = {.cause = F1AP_CauseRadioNetwork_gNB_CU_Cell_Capacity_Exceeded};
|
fail.cause = F1AP_CauseRadioNetwork_gNB_CU_Cell_Capacity_Exceeded;
|
||||||
rrc->mac_rrc.f1_setup_failure(assoc_id, &fail);
|
rrc->mac_rrc.f1_setup_failure(assoc_id, &fail);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -283,7 +286,7 @@ void rrc_gNB_process_f1_setup_req(f1ap_setup_req_t *req, sctp_assoc_t assoc_id)
|
|||||||
cell_info->plmn.mcc,
|
cell_info->plmn.mcc,
|
||||||
cell_info->plmn.mnc_digit_length,
|
cell_info->plmn.mnc_digit_length,
|
||||||
cell_info->plmn.mnc);
|
cell_info->plmn.mnc);
|
||||||
f1ap_setup_failure_t fail = {.cause = F1AP_CauseRadioNetwork_plmn_not_served_by_the_gNB_CU};
|
fail.cause = F1AP_CauseRadioNetwork_plmn_not_served_by_the_gNB_CU;
|
||||||
rrc->mac_rrc.f1_setup_failure(assoc_id, &fail);
|
rrc->mac_rrc.f1_setup_failure(assoc_id, &fail);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -295,7 +298,7 @@ void rrc_gNB_process_f1_setup_req(f1ap_setup_req_t *req, sctp_assoc_t assoc_id)
|
|||||||
it->setup_req->gNB_DU_name,
|
it->setup_req->gNB_DU_name,
|
||||||
it->assoc_id,
|
it->assoc_id,
|
||||||
it->setup_req->gNB_DU_id);
|
it->setup_req->gNB_DU_id);
|
||||||
f1ap_setup_failure_t fail = {.cause = F1AP_CauseMisc_unspecified};
|
fail.cause = F1AP_CauseMisc_unspecified;
|
||||||
rrc->mac_rrc.f1_setup_failure(assoc_id, &fail);
|
rrc->mac_rrc.f1_setup_failure(assoc_id, &fail);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -312,7 +315,7 @@ void rrc_gNB_process_f1_setup_req(f1ap_setup_req_t *req, sctp_assoc_t assoc_id)
|
|||||||
exist_info->nr_pci,
|
exist_info->nr_pci,
|
||||||
new_info->nr_cellid,
|
new_info->nr_cellid,
|
||||||
new_info->nr_pci);
|
new_info->nr_pci);
|
||||||
f1ap_setup_failure_t fail = {.cause = F1AP_CauseMisc_unspecified};
|
fail.cause = F1AP_CauseMisc_unspecified;
|
||||||
rrc->mac_rrc.f1_setup_failure(assoc_id, &fail);
|
rrc->mac_rrc.f1_setup_failure(assoc_id, &fail);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -339,7 +342,7 @@ void rrc_gNB_process_f1_setup_req(f1ap_setup_req_t *req, sctp_assoc_t assoc_id)
|
|||||||
if (sys_info != NULL && sys_info->mib != NULL && !(sys_info->sib1 == NULL && get_softmodem_params()->sa)) {
|
if (sys_info != NULL && sys_info->mib != NULL && !(sys_info->sib1 == NULL && get_softmodem_params()->sa)) {
|
||||||
if (!extract_sys_info(sys_info, &mib, &sib1)) {
|
if (!extract_sys_info(sys_info, &mib, &sib1)) {
|
||||||
LOG_W(RRC, "rejecting DU ID %ld\n", req->gNB_DU_id);
|
LOG_W(RRC, "rejecting DU ID %ld\n", req->gNB_DU_id);
|
||||||
f1ap_setup_failure_t fail = {.cause = F1AP_CauseProtocol_semantic_error};
|
fail.cause = F1AP_CauseProtocol_semantic_error;
|
||||||
rrc->mac_rrc.f1_setup_failure(assoc_id, &fail);
|
rrc->mac_rrc.f1_setup_failure(assoc_id, &fail);
|
||||||
ASN_STRUCT_FREE(asn_DEF_NR_MeasurementTimingConfiguration, mtc);
|
ASN_STRUCT_FREE(asn_DEF_NR_MeasurementTimingConfiguration, mtc);
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user