Introduce handler/callback for Bearer Context Setup Failure in stack
This commit does not introduce the callback on the CU-UP to trigger a Bearer Context Setup Failure when the setup of the bearer context was unsuccessful. This should be handled properly in the stack e.g. in e1_bearer_context_setup (a comment in the code says "We assume all DRBs to setup have been setup successfully, so we always send successful outcome in response and no failed DRBs")
This commit is contained in:
@@ -38,6 +38,8 @@ MESSAGE_DEF(E1AP_SETUP_FAIL, MESSAGE_PRIORITY_MED, e1ap_setup_fail_t, e1ap_setup
|
||||
MESSAGE_DEF(E1AP_BEARER_CONTEXT_SETUP_REQ , MESSAGE_PRIORITY_MED , e1ap_bearer_setup_req_t , e1ap_bearer_setup_req)
|
||||
/* E1AP Bearer Context Setup Response: gNB-CU-UP -> gNB-CU-CP */
|
||||
MESSAGE_DEF(E1AP_BEARER_CONTEXT_SETUP_RESP , MESSAGE_PRIORITY_MED , e1ap_bearer_setup_resp_t , e1ap_bearer_setup_resp)
|
||||
/* E1AP Bearer Context Setup Failure: gNB-CU-UP -> gNB-CU-CP */
|
||||
MESSAGE_DEF(E1AP_BEARER_CONTEXT_SETUP_FAILURE , MESSAGE_PRIORITY_MED , e1ap_bearer_context_setup_failure_t , e1ap_bearer_setup_fail)
|
||||
/* E1AP Bearer Context Modification Request: gNB-CU-CP -> gNB-CU-UP */
|
||||
MESSAGE_DEF(E1AP_BEARER_CONTEXT_MODIFICATION_REQ , MESSAGE_PRIORITY_MED , e1ap_bearer_mod_req_t , e1ap_bearer_mod_req)
|
||||
/* E1AP Bearer Context Modification Response: gNB-CU-UP -> gNB-CU-CP */
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
#define E1AP_SETUP_FAIL(mSGpTR) (mSGpTR)->ittiMsg.e1ap_setup_fail
|
||||
#define E1AP_BEARER_CONTEXT_SETUP_REQ(mSGpTR) (mSGpTR)->ittiMsg.e1ap_bearer_setup_req
|
||||
#define E1AP_BEARER_CONTEXT_SETUP_RESP(mSGpTR) (mSGpTR)->ittiMsg.e1ap_bearer_setup_resp
|
||||
#define E1AP_BEARER_CONTEXT_SETUP_FAILURE(mSGpTR) (mSGpTR)->ittiMsg.e1ap_bearer_setup_fail
|
||||
#define E1AP_BEARER_CONTEXT_MODIFICATION_REQ(mSGpTR) (mSGpTR)->ittiMsg.e1ap_bearer_mod_req
|
||||
#define E1AP_BEARER_CONTEXT_MODIFICATION_RESP(mSGpTR) (mSGpTR)->ittiMsg.e1ap_bearer_modif_resp
|
||||
#define E1AP_BEARER_CONTEXT_RELEASE_CMD(mSGpTR) (mSGpTR)->ittiMsg.e1ap_bearer_release_cmd
|
||||
|
||||
+24
-4
@@ -386,10 +386,10 @@ void e1apCUUP_send_BEARER_CONTEXT_SETUP_RESPONSE(sctp_assoc_t assoc_id, const e1
|
||||
e1ap_encode_send(UPtype, assoc_id, pdu, 0, __func__);
|
||||
}
|
||||
|
||||
int e1apCUUP_send_BEARER_CONTEXT_SETUP_FAILURE(instance_t instance)
|
||||
static void e1apCUUP_send_BEARER_CONTEXT_SETUP_FAILURE(sctp_assoc_t assoc_id, const e1ap_bearer_context_setup_failure_t *msg)
|
||||
{
|
||||
AssertFatal(false, "Not implemented yet\n");
|
||||
return -1;
|
||||
E1AP_E1AP_PDU_t *pdu = encode_E1_bearer_context_setup_failure(msg);
|
||||
e1ap_encode_send(UPtype, assoc_id, pdu, 0, __func__);
|
||||
}
|
||||
|
||||
int e1apCUUP_handle_BEARER_CONTEXT_SETUP_REQUEST(sctp_assoc_t assoc_id, e1ap_upcp_inst_t *e1_inst, const E1AP_E1AP_PDU_t *pdu)
|
||||
@@ -423,9 +423,21 @@ int e1apCUCP_handle_BEARER_CONTEXT_SETUP_RESPONSE(sctp_assoc_t assoc_id, e1ap_up
|
||||
|
||||
int e1apCUCP_handle_BEARER_CONTEXT_SETUP_FAILURE(sctp_assoc_t assoc_id, e1ap_upcp_inst_t *inst, const E1AP_E1AP_PDU_t *pdu)
|
||||
{
|
||||
AssertFatal(false, "Not implemented yet\n");
|
||||
e1ap_bearer_context_setup_failure_t fail = {0};
|
||||
if (!decode_E1_bearer_context_setup_failure(&fail, pdu)) {
|
||||
LOG_E(E1AP, "Failed to decode Bearer Context Setup Failure\n");
|
||||
free_e1_bearer_context_setup_failure(&fail);
|
||||
return -1;
|
||||
}
|
||||
LOG_E(E1AP, "Received Bearer Context Setup Failure with cause value%d \n", fail.cause.value);
|
||||
|
||||
MessageDef *msg = itti_alloc_new_message(TASK_CUCP_E1, 0, E1AP_BEARER_CONTEXT_SETUP_FAILURE);
|
||||
E1AP_BEARER_CONTEXT_SETUP_FAILURE(msg) = fail;
|
||||
msg->ittiMsgHeader.originInstance = assoc_id;
|
||||
instance_t instance = 0;
|
||||
itti_send_msg_to_task(TASK_RRC_GNB, instance, msg);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void e1apCUCP_send_BEARER_CONTEXT_MODIFICATION_REQUEST(sctp_assoc_t assoc_id, e1ap_bearer_mod_req_t *const bearerCxt)
|
||||
{
|
||||
@@ -1028,6 +1040,14 @@ void *E1AP_CUUP_task(void *arg)
|
||||
free_e1ap_context_setup_response(resp);
|
||||
} break;
|
||||
|
||||
case E1AP_BEARER_CONTEXT_SETUP_FAILURE: {
|
||||
const e1ap_bearer_context_setup_failure_t *fail = &E1AP_BEARER_CONTEXT_SETUP_FAILURE(msg);
|
||||
const e1ap_upcp_inst_t *inst = getCxtE1(myInstance);
|
||||
AssertFatal(inst, "no E1 instance found for instance %ld\n", myInstance);
|
||||
e1apCUUP_send_BEARER_CONTEXT_SETUP_FAILURE(inst->cuup.assoc_id, fail);
|
||||
free_e1_bearer_context_setup_failure(fail);
|
||||
} break;
|
||||
|
||||
case E1AP_BEARER_CONTEXT_MODIFICATION_RESP: {
|
||||
const e1ap_bearer_modif_resp_t *resp = &E1AP_BEARER_CONTEXT_MODIFICATION_RESP(msg);
|
||||
const e1ap_upcp_inst_t *inst = getCxtE1(myInstance);
|
||||
|
||||
@@ -2551,6 +2551,16 @@ void rrc_gNB_process_e1_bearer_context_setup_resp(e1ap_bearer_setup_resp_t *resp
|
||||
rrc_gNB_generate_UeContextModificationRequest(rrc, ue_context_p, nb_drb, drbs, 0, NULL);
|
||||
}
|
||||
|
||||
/** @brief E1AP Bearer Context Setup Failure processing on CU-CP */
|
||||
void rrc_gNB_process_e1_bearer_context_setup_failure(e1ap_bearer_context_setup_failure_t *msg)
|
||||
{
|
||||
LOG_E(RRC,
|
||||
"Received E1AP Bearer Context Setup Failure for UE CU-CP ID %d with cause (%d, %d)\n",
|
||||
msg->gNB_cu_cp_ue_id,
|
||||
msg->cause.type,
|
||||
msg->cause.value);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief E1AP Bearer Context Modification Response processing on CU-CP
|
||||
*/
|
||||
@@ -2864,6 +2874,11 @@ void *rrc_gnb_task(void *args_p) {
|
||||
free_e1ap_context_setup_response(&E1AP_BEARER_CONTEXT_SETUP_RESP(msg_p));
|
||||
break;
|
||||
|
||||
case E1AP_BEARER_CONTEXT_SETUP_FAILURE:
|
||||
rrc_gNB_process_e1_bearer_context_setup_failure(&E1AP_BEARER_CONTEXT_SETUP_FAILURE(msg_p));
|
||||
free_e1_bearer_context_setup_failure(&E1AP_BEARER_CONTEXT_SETUP_FAILURE(msg_p));
|
||||
break;
|
||||
|
||||
case E1AP_BEARER_CONTEXT_MODIFICATION_RESP:
|
||||
rrc_gNB_process_e1_bearer_context_modif_resp(&E1AP_BEARER_CONTEXT_MODIFICATION_RESP(msg_p));
|
||||
free_e1ap_context_mod_response(&E1AP_BEARER_CONTEXT_MODIFICATION_RESP(msg_p));
|
||||
|
||||
Reference in New Issue
Block a user