update it

This commit is contained in:
Sukchan Lee 2017-09-07 23:51:06 +09:00
parent b0be746292
commit 08e459a632
6 changed files with 45 additions and 82 deletions

View File

@ -13,8 +13,8 @@
#include "emm_handler.h"
#include "emm_build.h"
#include "esm_handler.h"
#include "mme_s11_handler.h"
#include "nas_path.h"
#include "mme_gtp_path.h"
static void emm_state_attach_request(fsm_t *s, event_t *e,
mme_ue_t *mme_ue, nas_message_t *message);
@ -82,6 +82,7 @@ void emm_state_detached(fsm_t *s, event_t *e)
void emm_state_identity(fsm_t *s, event_t *e)
{
status_t rv;
mme_ue_t *mme_ue = NULL;
d_assert(s, return, "Null param");
@ -96,7 +97,6 @@ void emm_state_identity(fsm_t *s, event_t *e)
{
case FSM_ENTRY_SIG:
{
status_t rv;
pkbuf_t *emmbuf = NULL;
rv = emm_build_identity_request(&emmbuf, mme_ue);
@ -139,7 +139,9 @@ void emm_state_identity(fsm_t *s, event_t *e)
{
if (MME_HAVE_SGW_S11_PATH(mme_ue))
{
mme_s11_handle_delete_all_sessions_in_ue(mme_ue);
rv = mme_gtp_send_delete_all_sessions(mme_ue);
d_assert(rv == CORE_OK, break,
"mme_gtp_send_delete_all_sessions failed");
}
else
{
@ -431,7 +433,10 @@ void emm_state_attached(fsm_t *s, event_t *e)
if (MME_HAVE_SGW_S11_PATH(mme_ue))
{
mme_s11_handle_delete_all_sessions_in_ue(mme_ue);
status_t rv;
rv = mme_gtp_send_delete_all_sessions(mme_ue);
d_assert(rv == CORE_OK, break,
"mme_gtp_send_delete_all_sessions failed");
}
else
{
@ -526,6 +531,8 @@ void emm_state_exception(fsm_t *s, event_t *e)
static void emm_state_attach_request(fsm_t *s, event_t *e,
mme_ue_t *mme_ue, nas_message_t *message)
{
status_t rv;
d_assert(s, return, "Null param");
d_assert(e, return, "Null param");
d_assert(mme_ue, return, "Null param");
@ -550,7 +557,6 @@ static void emm_state_attach_request(fsm_t *s, event_t *e,
{
if (SECURITY_CONTEXT_IS_VALID(mme_ue))
{
status_t rv;
rv = nas_send_emm_to_esm(mme_ue, &mme_ue->pdn_connectivity_request);
d_assert(rv == CORE_OK,, "nas_send_emm_to_esm failed");
FSM_TRAN(s, &emm_state_default_esm);
@ -559,7 +565,9 @@ static void emm_state_attach_request(fsm_t *s, event_t *e,
{
if (MME_HAVE_SGW_S11_PATH(mme_ue))
{
mme_s11_handle_delete_all_sessions_in_ue(mme_ue);
rv = mme_gtp_send_delete_all_sessions(mme_ue);
d_assert(rv == CORE_OK, return,
"mme_gtp_send_delete_all_sessions failed");
}
else
{

View File

@ -154,6 +154,34 @@ status_t mme_gtp_send_delete_session_request(mme_sess_t *sess)
return CORE_OK;
}
status_t mme_gtp_send_delete_all_sessions(mme_ue_t *mme_ue)
{
status_t rv;
mme_sess_t *sess = NULL, *next_sess = NULL;
d_assert(mme_ue, return CORE_ERROR, "Null param");
sess = mme_sess_first(mme_ue);
while (sess != NULL)
{
next_sess = mme_sess_next(sess);
if (MME_HAVE_SGW_S1U_PATH(sess))
{
rv = mme_gtp_send_delete_session_request(sess);
d_assert(rv == CORE_OK, return CORE_ERROR,
"mme_gtp_send_delete_session_request error");
}
else
{
mme_sess_remove(sess);
}
sess = next_sess;
}
return CORE_OK;
}
status_t mme_gtp_send_create_bearer_response(mme_bearer_t *bearer)
{
status_t rv;

View File

@ -16,6 +16,8 @@ CORE_DECLARE(status_t) mme_gtp_send_modify_bearer_request(
mme_bearer_t *bearer);
CORE_DECLARE(status_t) mme_gtp_send_delete_session_request(
mme_sess_t *sess);
CORE_DECLARE(status_t) mme_gtp_send_delete_all_sessions(
mme_ue_t *mme_ue);
CORE_DECLARE(status_t) mme_gtp_send_create_bearer_response(
mme_bearer_t *bearer);
CORE_DECLARE(status_t) mme_gtp_send_release_access_bearers_response(

View File

@ -124,59 +124,6 @@ void mme_s11_handle_modify_bearer_response(
d_assert(rv == CORE_OK, return, "xact_commit error");
}
void mme_s11_handle_delete_all_sessions_in_ue(mme_ue_t *mme_ue)
{
status_t rv;
mme_sess_t *sess = NULL, *next_sess = NULL;
d_assert(mme_ue, return, "Null param");
sess = mme_sess_first(mme_ue);
while (sess != NULL)
{
next_sess = mme_sess_next(sess);
if (MME_HAVE_SGW_S1U_PATH(sess))
{
rv = mme_gtp_send_delete_session_request(sess);
d_assert(rv == CORE_OK, return,
"mme_gtp_send_delete_session_request error");
}
else
{
mme_sess_remove(sess);
}
sess = next_sess;
}
}
void mme_s11_handle_delete_session_response(
gtp_xact_t *xact, mme_ue_t *mme_ue, gtp_delete_session_response_t *rsp)
{
status_t rv;
mme_sess_t *sess = NULL;
d_assert(xact, return, "Null param");
d_assert(mme_ue, return, "Null param");
d_assert(rsp, return, "Null param");
sess = GTP_XACT_RETRIEVE_SESSION(xact);
d_assert(sess, return, "Null param");
if (rsp->cause.presence == 0)
{
d_error("No Cause");
return;
}
d_trace(3, "[GTP] Delete Session Response : "
"MME[%d] <-- SGW[%d]\n", mme_ue->mme_s11_teid, mme_ue->sgw_s11_teid);
mme_sess_remove(sess);
rv = gtp_xact_commit(xact);
d_assert(rv == CORE_OK, return, "xact_commit error");
}
void mme_s11_handle_create_bearer_request(
gtp_xact_t *xact, mme_ue_t *mme_ue, gtp_create_bearer_request_t *req)
{

View File

@ -15,7 +15,6 @@ CORE_DECLARE(void) mme_s11_handle_create_session_response(
gtp_create_session_response_t *rsp);
CORE_DECLARE(void) mme_s11_handle_modify_bearer_response(
gtp_xact_t *xact, mme_ue_t *mme_ue, gtp_modify_bearer_response_t *rsp);
CORE_DECLARE(void) mme_s11_handle_delete_all_sessions_in_ue(mme_ue_t *mme_ue);
CORE_DECLARE(void) mme_s11_handle_delete_session_response(
gtp_xact_t *xact, mme_ue_t *mme_ue, gtp_delete_session_response_t *rsp);
CORE_DECLARE(void) mme_s11_handle_create_bearer_request(

View File

@ -536,28 +536,7 @@ status_t s1ap_build_ue_context_release_commmand(
ies->uE_S1AP_IDs.choice.mME_UE_S1AP_ID = enb_ue->mme_ue_s1ap_id;
}
ies->cause.present = cause->present;
switch(ies->cause.present)
{
case S1ap_Cause_PR_radioNetwork:
ies->cause.choice.radioNetwork = cause->choice.radioNetwork;
break;
case S1ap_Cause_PR_transport:
ies->cause.choice.transport = cause->choice.transport;
break;
case S1ap_Cause_PR_nas:
ies->cause.choice.nas = cause->choice.nas;
break;
case S1ap_Cause_PR_protocol:
ies->cause.choice.protocol = cause->choice.protocol;
break;
case S1ap_Cause_PR_misc:
ies->cause.choice.misc = cause->choice.misc;
break;
default:
d_error("Invalid cause type : %d", ies->cause.present);
break;
}
s1ap_build_cause(&ies->cause, cause);
message.procedureCode = S1ap_ProcedureCode_id_UEContextRelease;
message.direction = S1AP_PDU_PR_initiatingMessage;