temporal commit for deleting s11 session
This commit is contained in:
parent
b95e40a851
commit
a21cb41c7a
|
@ -103,6 +103,23 @@ void emm_state_operational(fsm_t *s, event_t *e)
|
|||
ue->mme_s11_teid, ue->sgw_s11_teid);
|
||||
break;
|
||||
}
|
||||
case GTP_DELETE_SESSION_RESPONSE_TYPE:
|
||||
{
|
||||
mme_bearer_t *bearer = mme_bearer_first(ue);
|
||||
|
||||
while(bearer)
|
||||
{
|
||||
event_t e;
|
||||
event_set(&e, MME_EVT_ESM_BEARER_FROM_S6A);
|
||||
event_set_param1(&e, (c_uintptr_t)bearer->index);
|
||||
event_set_param2(&e,
|
||||
(c_uintptr_t)S6A_CMD_UPDATE_LOCATION);
|
||||
mme_event_send(&e);
|
||||
|
||||
bearer = mme_bearer_next(bearer);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -174,3 +174,39 @@ status_t mme_s11_build_modify_bearer_request(
|
|||
|
||||
return CORE_OK;
|
||||
}
|
||||
|
||||
status_t mme_s11_build_delete_session_request(pkbuf_t **pkbuf, mme_bearer_t *bearer)
|
||||
{
|
||||
status_t rv;
|
||||
pdn_t *pdn = NULL;
|
||||
mme_sgw_t *sgw = NULL;
|
||||
mme_ue_t *ue = NULL;
|
||||
gtp_message_t gtp_message;
|
||||
gtp_delete_session_request_t *req = >p_message.delete_session_request;
|
||||
|
||||
gtp_f_teid_t sender_cp_teid;
|
||||
|
||||
d_assert(bearer, return CORE_ERROR, "Null param");
|
||||
pdn = bearer->pdn;
|
||||
d_assert(pdn, return CORE_ERROR, "Null param");
|
||||
sgw = bearer->sgw;
|
||||
d_assert(sgw, return CORE_ERROR, "Null param");
|
||||
ue = bearer->ue;
|
||||
d_assert(ue, return CORE_ERROR, "Null param");
|
||||
|
||||
memset(>p_message, 0, sizeof(gtp_message_t));
|
||||
|
||||
memset(&mme_s11_teid, 0, sizeof(gtp_f_teid_t));
|
||||
mme_s11_teid.ipv4 = 1;
|
||||
mme_s11_teid.interface_type = GTP_F_TEID_S11_MME_GTP_C;
|
||||
mme_s11_teid.teid = htonl(ue->mme_s11_teid);
|
||||
mme_s11_teid.ipv4_addr = ue->mme_s11_addr;
|
||||
req->sender_f_teid_for_control_plane.presence = 1;
|
||||
req->sender_f_teid_for_control_plane.data = &mme_s11_teid;
|
||||
req->sender_f_teid_for_control_plane.len = GTP_F_TEID_IPV4_LEN;
|
||||
|
||||
rv = gtp_build_msg(pkbuf, GTP_DELETE_SESSION_REQUEST_TYPE, >p_message);
|
||||
d_assert(rv == CORE_OK, return CORE_ERROR, "gtp build failed");
|
||||
|
||||
return CORE_OK;
|
||||
}
|
||||
|
|
|
@ -93,3 +93,32 @@ void mme_s11_handle_modify_bearer_response(
|
|||
event_set_param2(&e, (c_uintptr_t)GTP_MODIFY_BEARER_RESPONSE_TYPE);
|
||||
mme_event_send(&e);
|
||||
}
|
||||
|
||||
void mme_s11_handle_delete_session_response(
|
||||
mme_ue_t *ue, gtp_delete_session_response_t *rsp)
|
||||
{
|
||||
event_t e;
|
||||
|
||||
gtp_f_teid_t *sgw_s11_teid = NULL;
|
||||
gtp_f_teid_t *sgw_s1u_teid = NULL;
|
||||
|
||||
mme_bearer_t *bearer = NULL;
|
||||
pdn_t *pdn = NULL;
|
||||
|
||||
d_assert(ue, return, "Null param");
|
||||
d_assert(rsp, return, "Null param");
|
||||
|
||||
if (rsp->cause == 0)
|
||||
{
|
||||
d_error("No Cause");
|
||||
return;
|
||||
}
|
||||
|
||||
d_info("[GTP] Delete Session Response : "
|
||||
"MME[%d] <-- SGW[%d]", ue->mme_s11_teid, ue->sgw_s11_teid);
|
||||
|
||||
event_set(&e, MME_EVT_EMM_UE_FROM_S11);
|
||||
event_set_param1(&e, (c_uintptr_t)ue->index);
|
||||
event_set_param2(&e, (c_uintptr_t)GTP_DELETE_SESSION_RESPONSE_TYPE);
|
||||
mme_event_send(&e);
|
||||
}
|
||||
|
|
|
@ -13,6 +13,8 @@ CORE_DECLARE(void) mme_s11_handle_create_session_response(
|
|||
mme_ue_t *ue, gtp_create_session_response_t *rsp);
|
||||
CORE_DECLARE(void) mme_s11_handle_modify_bearer_response(
|
||||
mme_ue_t *ue, gtp_modify_bearer_response_t *rsp);
|
||||
CORE_DECLARE(void) mme_s11_handle_delete_session_response(
|
||||
mme_ue_t *ue, gtp_delete_session_response_t *rsp);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -257,6 +257,10 @@ void mme_state_operational(fsm_t *s, event_t *e)
|
|||
mme_s11_handle_modify_bearer_response(
|
||||
ue, >p_message.modify_bearer_response);
|
||||
break;
|
||||
case GTP_DELETE_SESSION_RESPONSE_TYPE:
|
||||
mme_s11_handle_delete_session_response(
|
||||
ue, >p_message.delete_session_response);
|
||||
break;
|
||||
default:
|
||||
d_warn("Not implmeneted(type:%d)", type);
|
||||
break;
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#include "s1ap_build.h"
|
||||
#include "s1ap_conv.h"
|
||||
|
||||
|
||||
status_t s1ap_build_setup_rsp(pkbuf_t **pkbuf)
|
||||
{
|
||||
int erval;
|
||||
|
@ -257,3 +258,55 @@ status_t s1ap_build_initial_context_setup_request(
|
|||
|
||||
return CORE_OK;
|
||||
}
|
||||
|
||||
status_t s1ap_build_ue_context_release_commnad(
|
||||
pkbuf_t **s1apbuf, mme_ue_t *ue, S1ap_Cause_t cause)
|
||||
{
|
||||
char buf[INET_ADDRSTRLEN];
|
||||
|
||||
int encoded;
|
||||
s1ap_message_t message;
|
||||
S1ap_UEContextReleaseCommand_IEs_t *ies =
|
||||
&message.s1ap_UEContextReleaseCommand_IEs;
|
||||
|
||||
d_assert(ue, return CORE_ERROR, "Null param");
|
||||
|
||||
memset(&message, 0, sizeof(s1ap_message_t));
|
||||
|
||||
if (ue->mme_ue_s1ap_id == 0)
|
||||
{
|
||||
d_error("invalid mme ue s1ap id (idx: %d)", ue->index);
|
||||
return CORE_ERROR;
|
||||
}
|
||||
|
||||
if (ue->enb_ue_s1ap_id)
|
||||
{
|
||||
ies->uE_S1AP_IDs.present = S1ap_UE_S1AP_IDs_PR_uE_S1AP_ID_pair;
|
||||
ies->uE_S1AP_IDs.choice.uE_S1AP_ID_pair.mME_UE_S1AP_ID = ue->mme_ue_s1ap_id;
|
||||
ies->uE_S1AP_IDs.choice.uE_S1AP_ID_pair.eNB_UE_S1AP_ID = ue->enb_ue_s1ap_id;
|
||||
ies->uE_S1AP_IDs.choice.uE_S1AP_ID_pair.iE_Extensions = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
ies->uE_S1AP_IDs.present = S1ap_UE_S1AP_IDs_PR_mME_UE_S1AP_ID;
|
||||
ies->uE_S1AP_IDs.choice.mME_UE_S1AP_ID = ue->mme_ue_s1ap_id;
|
||||
}
|
||||
|
||||
ies->cause = cause;
|
||||
|
||||
message.procedureCode = S1ap_ProcedureCode_id_UEContextRelease;
|
||||
message.direction = S1AP_PDU_PR_initiatingMessage;
|
||||
|
||||
encoded = s1ap_encode_pdu(s1apbuf, &message);
|
||||
s1ap_free_pdu(&message);
|
||||
|
||||
d_assert(s1apbuf && encoded >= 0,return CORE_ERROR,);
|
||||
|
||||
d_info("[S1AP] UE Context Release Command : "
|
||||
"UE[mME-UE-S1AP-ID(%d)] <-- eNB[%s:%d]",
|
||||
ue->mme_ue_s1ap_id,
|
||||
INET_NTOP(&ue->enb->s1ap_sock->remote.sin_addr.s_addr, buf),
|
||||
ue->enb->enb_id);
|
||||
|
||||
return CORE_OK;
|
||||
}
|
||||
|
|
|
@ -15,6 +15,8 @@ CORE_DECLARE(status_t) s1ap_build_downlink_nas_transport(
|
|||
pkbuf_t **s1apbuf, mme_ue_t *ue, pkbuf_t *emmbuf);
|
||||
CORE_DECLARE(status_t) s1ap_build_initial_context_setup_request(
|
||||
pkbuf_t **s1apbuf, mme_bearer_t *bearer, pkbuf_t *emmbuf);
|
||||
CORE_DECLARE(status_t) s1ap_build_ue_context_release_commnad(
|
||||
pkbuf_t **s1apbuf, mme_ue_t *ue, S1ap_Cause_t cause);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue