Use F1AP Setup Failure enc/dec lib in stack
This commit is contained in:
@@ -126,70 +126,22 @@ int CU_send_F1_SETUP_RESPONSE(sctp_assoc_t assoc_id, f1ap_setup_resp_t *f1ap_set
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief F1 Setup Failure encoding and transmission
|
||||||
|
*/
|
||||||
int CU_send_F1_SETUP_FAILURE(sctp_assoc_t assoc_id, const f1ap_setup_failure_t *fail)
|
int CU_send_F1_SETUP_FAILURE(sctp_assoc_t assoc_id, const f1ap_setup_failure_t *fail)
|
||||||
{
|
{
|
||||||
LOG_D(F1AP, "CU_send_F1_SETUP_FAILURE\n");
|
LOG_D(F1AP, "CU_send_F1_SETUP_FAILURE\n");
|
||||||
F1AP_F1AP_PDU_t pdu= {0};
|
uint8_t *buffer = NULL;
|
||||||
uint8_t *buffer=NULL;
|
uint32_t len = 0;
|
||||||
uint32_t len=0;
|
/* Encode F1 Setup Failure */
|
||||||
/* Create */
|
F1AP_F1AP_PDU_t *pdu = encode_f1ap_setup_failure(fail);
|
||||||
/* 0. Message Type */
|
if (f1ap_encode_pdu(pdu, &buffer, &len) < 0) {
|
||||||
asn1cCalloc(pdu.choice.unsuccessfulOutcome, UnsuccessfulOutcome);
|
|
||||||
pdu.present = F1AP_F1AP_PDU_PR_unsuccessfulOutcome;
|
|
||||||
UnsuccessfulOutcome->procedureCode = F1AP_ProcedureCode_id_F1Setup;
|
|
||||||
UnsuccessfulOutcome->criticality = F1AP_Criticality_reject;
|
|
||||||
UnsuccessfulOutcome->value.present = F1AP_UnsuccessfulOutcome__value_PR_F1SetupFailure;
|
|
||||||
F1AP_F1SetupFailure_t *out = &pdu.choice.unsuccessfulOutcome->value.choice.F1SetupFailure;
|
|
||||||
/* mandatory */
|
|
||||||
/* c1. Transaction ID (integer value)*/
|
|
||||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_F1SetupFailureIEs_t, ie1);
|
|
||||||
ie1->id = F1AP_ProtocolIE_ID_id_TransactionID;
|
|
||||||
ie1->criticality = F1AP_Criticality_reject;
|
|
||||||
ie1->value.present = F1AP_F1SetupFailureIEs__value_PR_TransactionID;
|
|
||||||
ie1->value.choice.TransactionID = F1AP_get_next_transaction_identifier(0, 0);
|
|
||||||
/* mandatory */
|
|
||||||
/* c2. Cause */
|
|
||||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_F1SetupFailureIEs_t, ie2);
|
|
||||||
ie2->id = F1AP_ProtocolIE_ID_id_Cause;
|
|
||||||
ie2->criticality = F1AP_Criticality_ignore;
|
|
||||||
ie2->value.present = F1AP_F1SetupFailureIEs__value_PR_Cause;
|
|
||||||
ie2->value.choice.Cause.present = F1AP_Cause_PR_radioNetwork;
|
|
||||||
ie2->value.choice.Cause.choice.radioNetwork = F1AP_CauseRadioNetwork_unspecified;
|
|
||||||
|
|
||||||
/* optional */
|
|
||||||
/* c3. TimeToWait */
|
|
||||||
if (0) {
|
|
||||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_F1SetupFailureIEs_t, ie3);
|
|
||||||
ie3->id = F1AP_ProtocolIE_ID_id_TimeToWait;
|
|
||||||
ie3->criticality = F1AP_Criticality_ignore;
|
|
||||||
ie3->value.present = F1AP_F1SetupFailureIEs__value_PR_TimeToWait;
|
|
||||||
ie3->value.choice.TimeToWait = F1AP_TimeToWait_v10s;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* optional */
|
|
||||||
/* c4. CriticalityDiagnostics*/
|
|
||||||
if (0) {
|
|
||||||
asn1cSequenceAdd(out->protocolIEs.list, F1AP_F1SetupFailureIEs_t, ie4);
|
|
||||||
ie4->id = F1AP_ProtocolIE_ID_id_CriticalityDiagnostics;
|
|
||||||
ie4->criticality = F1AP_Criticality_ignore;
|
|
||||||
ie4->value.present = F1AP_F1SetupFailureIEs__value_PR_CriticalityDiagnostics;
|
|
||||||
asn1cCallocOne(ie4->value.choice.CriticalityDiagnostics.procedureCode,
|
|
||||||
F1AP_ProcedureCode_id_UEContextSetup);
|
|
||||||
asn1cCallocOne(ie4->value.choice.CriticalityDiagnostics.triggeringMessage,
|
|
||||||
F1AP_TriggeringMessage_initiating_message);
|
|
||||||
asn1cCallocOne(ie4->value.choice.CriticalityDiagnostics.procedureCriticality,
|
|
||||||
F1AP_Criticality_reject);
|
|
||||||
asn1cCallocOne(ie4->value.choice.CriticalityDiagnostics.transactionID,
|
|
||||||
0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* encode */
|
|
||||||
if (f1ap_encode_pdu(&pdu, &buffer, &len) < 0) {
|
|
||||||
LOG_E(F1AP, "Failed to encode F1 setup failure\n");
|
LOG_E(F1AP, "Failed to encode F1 setup failure\n");
|
||||||
|
ASN_STRUCT_FREE(asn_DEF_F1AP_F1AP_PDU, pdu);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
ASN_STRUCT_FREE(asn_DEF_F1AP_F1AP_PDU, pdu);
|
||||||
ASN_STRUCT_RESET(asn_DEF_F1AP_F1AP_PDU, &pdu);
|
|
||||||
f1ap_itti_send_sctp_data_req(assoc_id, buffer, len);
|
f1ap_itti_send_sctp_data_req(assoc_id, buffer, len);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -337,25 +337,16 @@ int DU_handle_F1_SETUP_RESPONSE(instance_t instance, sctp_assoc_t assoc_id, uint
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// SETUP FAILURE
|
/**
|
||||||
|
* @brief F1 Setup Failure handler (DU)
|
||||||
|
*/
|
||||||
int DU_handle_F1_SETUP_FAILURE(instance_t instance, sctp_assoc_t assoc_id, uint32_t stream, F1AP_F1AP_PDU_t *pdu)
|
int DU_handle_F1_SETUP_FAILURE(instance_t instance, sctp_assoc_t assoc_id, uint32_t stream, F1AP_F1AP_PDU_t *pdu)
|
||||||
{
|
{
|
||||||
F1AP_F1SetupFailure_t *out;
|
f1ap_setup_failure_t fail;
|
||||||
F1AP_F1SetupFailureIEs_t *ie;
|
if (!decode_f1ap_setup_failure(pdu, &fail)) {
|
||||||
f1ap_setup_failure_t fail = {0};
|
LOG_E(F1AP, "Failed to decode F1AP Setup Failure\n");
|
||||||
out = &pdu->choice.unsuccessfulOutcome->value.choice.F1SetupFailure;
|
return -1;
|
||||||
/* Transaction ID */
|
|
||||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_F1SetupFailureIEs_t, ie, out, F1AP_ProtocolIE_ID_id_TransactionID, true);
|
|
||||||
/* Cause */
|
|
||||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_F1SetupFailureIEs_t, ie, out,
|
|
||||||
F1AP_ProtocolIE_ID_id_Cause, true);
|
|
||||||
|
|
||||||
if(0) {
|
|
||||||
/* TimeToWait */
|
|
||||||
F1AP_FIND_PROTOCOLIE_BY_ID(F1AP_F1SetupFailureIEs_t, ie, out,
|
|
||||||
F1AP_ProtocolIE_ID_id_TimeToWait, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
f1_setup_failure(&fail);
|
f1_setup_failure(&fail);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user