under re-architecturing

This commit is contained in:
Sukchan Lee 2017-08-09 20:49:18 +09:00
parent e6e2183801
commit 69607fbbb4
10 changed files with 202 additions and 276 deletions

View File

@ -22,7 +22,7 @@
#include "emm_handler.h"
static status_t emm_send_to_enb(enb_ue_t *enb_ue, pkbuf_t *pkbuf)
static status_t emm_send_s1ap_to_enb(enb_ue_t *enb_ue, pkbuf_t *pkbuf)
{
mme_enb_t *enb = NULL;
@ -33,6 +33,22 @@ static status_t emm_send_to_enb(enb_ue_t *enb_ue, pkbuf_t *pkbuf)
return s1ap_send_to_enb(enb, pkbuf);
}
static status_t emm_send_nas_to_enb(mme_ue_t *mme_ue, pkbuf_t *pkbuf)
{
status_t rv;
pkbuf_t *s1apbuf = NULL;
enb_ue_t *enb_ue = NULL;
enb_ue = mme_ue->enb_ue;
d_assert(enb_ue, return CORE_ERROR, "Null param");
rv = s1ap_build_downlink_nas_transport(&s1apbuf, enb_ue, pkbuf);
d_assert(rv == CORE_OK && s1apbuf,
pkbuf_free(pkbuf); return CORE_ERROR, "s1ap build error");
return emm_send_s1ap_to_enb(enb_ue, s1apbuf);
}
static void emm_handle_esm_message_container(
mme_ue_t *mme_ue, nas_esm_message_container_t *esm_message_container)
{
@ -136,38 +152,14 @@ void emm_handle_attach_request(
/* Update Kenb */
mme_kdf_enb(mme_ue->kasme, mme_ue->ul_count.i32, mme_ue->kenb);
/* FIXME :
* Need to refine the code to start from ESM_Info_req.
* Call esm_handle_s6a_update_location(bearer) here
* or send event ?
*/
{
mme_sess_t *sess = mme_sess_first(mme_ue);
while(sess)
{
mme_bearer_t *bearer = mme_bearer_first(sess);
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);
}
sess = mme_sess_next(sess);
}
}
/* Send ESM Information Request */
emm_handle_esm_information_request(mme_ue);
}
else
{
if (MME_SESSION_IS_CREATED(mme_ue))
{
emm_handle_delete_session_request(mme_ue);
emm_handle_s11_delete_session_request(mme_ue);
}
else
{
@ -205,38 +197,14 @@ void emm_handle_attach_request(
mme_kdf_enb(mme_ue->kasme, mme_ue->ul_count.i32,
mme_ue->kenb);
/* FIXME :
* Need to refine the code to start from ESM_Info_req.
* Call esm_handle_s6a_update_location(bearer) here
* or send event ?
*/
{
mme_sess_t *sess = mme_sess_first(mme_ue);
while(sess)
{
mme_bearer_t *bearer = mme_bearer_first(sess);
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);
}
sess = mme_sess_next(sess);
}
}
/* Send ESM Information Request */
emm_handle_esm_information_request(mme_ue);
}
else
{
if (MME_SESSION_IS_CREATED(mme_ue))
{
emm_handle_delete_session_request(mme_ue);
emm_handle_s11_delete_session_request(mme_ue);
}
else
{
@ -264,17 +232,13 @@ void emm_handle_attach_request(
void emm_handle_identity_request(mme_ue_t *mme_ue)
{
status_t rv;
enb_ue_t *enb_ue = NULL;
pkbuf_t *emmbuf = NULL, *s1apbuf = NULL;
pkbuf_t *emmbuf = NULL;
nas_message_t message;
nas_identity_request_t *identity_request =
&message.emm.identity_request;
d_assert(mme_ue, return, "Null param");
enb_ue = mme_ue->enb_ue;
d_assert(enb_ue, return, "Null param");
memset(&message, 0, sizeof(message));
message.emm.h.protocol_discriminator = NAS_PROTOCOL_DISCRIMINATOR_EMM;
@ -284,12 +248,7 @@ void emm_handle_identity_request(mme_ue_t *mme_ue)
identity_request->identity_type.type = NAS_IDENTITY_TYPE_2_IMSI;
d_assert(nas_plain_encode(&emmbuf, &message) == CORE_OK && emmbuf,,);
rv = s1ap_build_downlink_nas_transport(&s1apbuf, enb_ue, emmbuf);
d_assert(rv == CORE_OK && s1apbuf,
pkbuf_free(emmbuf); return, "s1ap build error");
d_assert(emm_send_to_enb(enb_ue, s1apbuf) == CORE_OK,, "s1ap send error");
d_assert(emm_send_nas_to_enb(mme_ue, emmbuf) == CORE_OK,,);
}
void emm_handle_identity_response(
@ -332,7 +291,7 @@ void emm_handle_identity_response(
{
if (MME_SESSION_IS_CREATED(mme_ue))
{
emm_handle_delete_session_request(mme_ue);
emm_handle_s11_delete_session_request(mme_ue);
}
else
{
@ -343,17 +302,13 @@ void emm_handle_identity_response(
void emm_handle_authentication_request(mme_ue_t *mme_ue)
{
status_t rv;
enb_ue_t *enb_ue = NULL;
pkbuf_t *emmbuf = NULL, *s1apbuf = NULL;
pkbuf_t *emmbuf = NULL;
nas_message_t message;
nas_authentication_request_t *authentication_request =
&message.emm.authentication_request;
d_assert(mme_ue, return, "Null param");
enb_ue = mme_ue->enb_ue;
d_assert(enb_ue, return, "Null param");
d_trace(3, "[NAS] Authentication request : UE[%s] <-- EMM\n",
mme_ue->imsi_bcd);
@ -370,20 +325,14 @@ void emm_handle_authentication_request(mme_ue_t *mme_ue)
AUTN_LEN;
d_assert(nas_plain_encode(&emmbuf, &message) == CORE_OK && emmbuf,,);
rv = s1ap_build_downlink_nas_transport(&s1apbuf, enb_ue, emmbuf);
d_assert(rv == CORE_OK && s1apbuf,
pkbuf_free(emmbuf); return, "s1ap build error");
d_assert(emm_send_to_enb(enb_ue, s1apbuf) == CORE_OK,, "s1ap send error");
d_assert(emm_send_nas_to_enb(mme_ue, emmbuf) == CORE_OK,,);
}
void emm_handle_authentication_response(mme_ue_t *mme_ue,
nas_authentication_response_t *authentication_response)
{
status_t rv;
enb_ue_t *enb_ue = NULL;
pkbuf_t *emmbuf = NULL, *s1apbuf = NULL;
pkbuf_t *emmbuf = NULL;
int i;
nas_authentication_response_parameter_t *authentication_response_parameter =
@ -400,8 +349,6 @@ void emm_handle_authentication_response(mme_ue_t *mme_ue,
&security_mode_command->replayed_ue_security_capabilities;
d_assert(mme_ue, return, "Null param");
enb_ue = mme_ue->enb_ue;
d_assert(enb_ue, return, "Null param");
if (authentication_response_parameter->length != mme_ue->xres_len ||
memcmp(authentication_response_parameter->res,
@ -473,45 +420,7 @@ void emm_handle_authentication_response(mme_ue_t *mme_ue,
rv = nas_security_encode(&emmbuf, mme_ue, &message);
d_assert(rv == CORE_OK && emmbuf, return, "emm build error");
rv = s1ap_build_downlink_nas_transport(&s1apbuf, enb_ue, emmbuf);
d_assert(rv == CORE_OK && s1apbuf,
pkbuf_free(emmbuf); return, "s1ap build error");
d_assert(emm_send_to_enb(enb_ue, s1apbuf) == CORE_OK,, "s1ap send error");
}
void emm_handle_create_session_response(mme_bearer_t *bearer)
{
status_t rv;
mme_ue_t *mme_ue = NULL;
enb_ue_t *enb_ue = NULL;
pkbuf_t *esmbuf = NULL, *emmbuf = NULL, *s1apbuf = NULL;
d_assert(bearer, return, "Null param");
mme_ue = bearer->mme_ue;
d_assert(mme_ue, return, "Null param");
enb_ue = mme_ue->enb_ue;
d_assert(enb_ue, return, "Null param");
rv = esm_build_activate_default_bearer_context(&esmbuf, bearer);
d_assert(rv == CORE_OK && esmbuf,
return, "bearer build error");
d_trace(3, "[NAS] Activate default bearer context request : "
"EMM <-- ESM[%d]\n", bearer->ebi);
rv = emm_build_attach_accept(&emmbuf, mme_ue, esmbuf);
d_assert(rv == CORE_OK && emmbuf,
pkbuf_free(esmbuf); return, "emm build error");
d_trace(3, "[NAS] Attach accept : UE[%s] <-- EMM\n", mme_ue->imsi_bcd);
rv = s1ap_build_initial_context_setup_request(&s1apbuf, bearer, emmbuf);
d_assert(rv == CORE_OK && s1apbuf,
pkbuf_free(emmbuf); return, "s1ap build error");
d_assert(emm_send_to_enb(enb_ue, s1apbuf) == CORE_OK,, "s1ap send error");
d_assert(emm_send_nas_to_enb(mme_ue, emmbuf) == CORE_OK,,);
}
void emm_handle_attach_accept(mme_ue_t *mme_ue)
@ -522,7 +431,7 @@ void emm_handle_attach_accept(mme_ue_t *mme_ue)
mme_bearer_t *bearer = mme_default_bearer_in_sess(sess);
if (bearer)
{
emm_handle_create_session_response(bearer);
emm_handle_s11_create_session_response(bearer);
}
sess = mme_sess_next(sess);
}
@ -532,8 +441,7 @@ void emm_handle_attach_complete(
mme_ue_t *mme_ue, nas_attach_complete_t *attach_complete)
{
status_t rv;
enb_ue_t *enb_ue = NULL;
pkbuf_t *emmbuf = NULL, *s1apbuf = NULL;
pkbuf_t *emmbuf = NULL;
nas_message_t message;
nas_emm_information_t *emm_information = &message.emm.emm_information;
@ -546,8 +454,6 @@ void emm_handle_attach_complete(
time_exp_lt(&time_exp, time_now());
d_assert(mme_ue, return, "Null param");
enb_ue = mme_ue->enb_ue;
d_assert(enb_ue, return, "Null param");
emm_handle_esm_message_container(
mme_ue, &attach_complete->esm_message_container);
@ -588,20 +494,7 @@ void emm_handle_attach_complete(
rv = nas_security_encode(&emmbuf, mme_ue, &message);
d_assert(rv == CORE_OK && emmbuf, return, "emm build error");
rv = s1ap_build_downlink_nas_transport(&s1apbuf, enb_ue, emmbuf);
d_assert(rv == CORE_OK && s1apbuf,
pkbuf_free(emmbuf); return, "s1ap build error");
d_assert(emm_send_to_enb(enb_ue, s1apbuf) == CORE_OK,, "s1ap send error");
}
void emm_handle_emm_status(mme_ue_t *mme_ue, nas_emm_status_t *emm_status)
{
d_assert(mme_ue, return, "Null param");
d_warn("[NAS] EMM status(%d) : UE[%s] --> EMM",
emm_status->emm_cause, mme_ue->imsi_bcd);
d_assert(emm_send_nas_to_enb(mme_ue, emmbuf) == CORE_OK,,);
}
void emm_handle_detach_request(
@ -642,7 +535,7 @@ void emm_handle_detach_request(
if (MME_SESSION_IS_CREATED(mme_ue))
{
emm_handle_delete_session_request(mme_ue);
emm_handle_s11_delete_session_request(mme_ue);
}
else
{
@ -657,7 +550,7 @@ void emm_handle_detach_accept(
status_t rv;
nas_message_t message;
pkbuf_t *emmbuf = NULL, *s1apbuf = NULL;
pkbuf_t *emmbuf = NULL;
mme_enb_t *enb = NULL;
enb_ue_t *enb_ue = NULL;
nas_detach_type_t *detach_type = NULL;
@ -688,13 +581,7 @@ void emm_handle_detach_accept(
rv = nas_security_encode(&emmbuf, mme_ue, &message);
d_assert(rv == CORE_OK && emmbuf, return, "emm build error");
rv = s1ap_build_downlink_nas_transport(&s1apbuf, enb_ue, emmbuf);
d_assert(rv == CORE_OK && s1apbuf,
pkbuf_free(emmbuf); return, "s1ap build error");
d_assert(emm_send_to_enb(enb_ue, s1apbuf) == CORE_OK,,
"s1ap send error");
d_assert(emm_send_nas_to_enb(mme_ue, emmbuf) == CORE_OK,,);
}
event_set(&e, MME_EVT_S1AP_UE_FROM_EMM);
@ -704,7 +591,121 @@ void emm_handle_detach_accept(
mme_event_send(&e);
}
void emm_handle_delete_session_request(mme_ue_t *mme_ue)
void emm_handle_service_request(
mme_ue_t *mme_ue, nas_service_request_t *service_request)
{
status_t rv;
pkbuf_t *s1apbuf = NULL;
enb_ue_t *enb_ue = NULL;
mme_sess_t *sess = NULL;
mme_bearer_t *bearer = NULL;
d_assert(mme_ue, return, "Null param");
enb_ue = mme_ue->enb_ue;
d_assert(enb_ue, return, "Null param");
sess = mme_sess_first(mme_ue);
d_assert(sess, return, "Null param");
bearer = mme_default_bearer_in_sess(sess);
d_assert(bearer, return, "Null param");
rv = s1ap_build_initial_context_setup_request(&s1apbuf, bearer, NULL);
d_assert(rv == CORE_OK && s1apbuf, return, "s1ap build error");
d_assert(emm_send_s1ap_to_enb(enb_ue, s1apbuf) == CORE_OK,, "s1ap send error");
}
void emm_handle_emm_status(mme_ue_t *mme_ue, nas_emm_status_t *emm_status)
{
d_assert(mme_ue, return, "Null param");
d_warn("[NAS] EMM status(%d) : UE[%s] --> EMM",
emm_status->emm_cause, mme_ue->imsi_bcd);
}
/***********************************************************************
* ESM Layer in EMM Handler
*/
void emm_handle_esm_information_request(mme_ue_t *mme_ue)
{
status_t rv;
pkbuf_t *esmbuf = NULL;
mme_sess_t *sess = NULL;
mme_bearer_t *bearer = NULL;
d_assert(mme_ue, return, "Null param");
sess = mme_sess_first(mme_ue);
d_assert(sess, return, "Null param");
bearer = mme_default_bearer_in_sess(sess);
d_assert(bearer, return, "Null param");
rv = esm_build_information_request(&esmbuf, bearer);
d_assert(rv == CORE_OK && esmbuf, return, "esm_build failed");
d_assert(emm_send_nas_to_enb(mme_ue, esmbuf) == CORE_OK,,);
}
/***********************************************************************
* S6A Layer in EMM Handler
*/
void emm_handle_s6a_aia(mme_ue_t *mme_ue, c_uint32_t result_code)
{
if (result_code != ER_DIAMETER_SUCCESS)
{
/* TODO */
/* Send Attach Reject */
return;
}
emm_handle_authentication_request(mme_ue);
}
void emm_handle_s6a_ula(mme_ue_t *mme_ue, c_uint32_t result_code)
{
if (result_code != ER_DIAMETER_SUCCESS)
{
/* TODO */
return;
}
emm_handle_esm_information_request(mme_ue);
}
/***********************************************************************
* S11 Layer in EMM Handler
*/
void emm_handle_s11_create_session_response(mme_bearer_t *bearer)
{
status_t rv;
mme_ue_t *mme_ue = NULL;
enb_ue_t *enb_ue = NULL;
pkbuf_t *esmbuf = NULL, *emmbuf = NULL, *s1apbuf = NULL;
d_assert(bearer, return, "Null param");
mme_ue = bearer->mme_ue;
d_assert(mme_ue, return, "Null param");
enb_ue = mme_ue->enb_ue;
d_assert(enb_ue, return, "Null param");
rv = esm_build_activate_default_bearer_context(&esmbuf, bearer);
d_assert(rv == CORE_OK && esmbuf,
return, "bearer build error");
d_trace(3, "[NAS] Activate default bearer context request : "
"EMM <-- ESM[%d]\n", bearer->ebi);
rv = emm_build_attach_accept(&emmbuf, mme_ue, esmbuf);
d_assert(rv == CORE_OK && emmbuf,
pkbuf_free(esmbuf); return, "emm build error");
d_trace(3, "[NAS] Attach accept : UE[%s] <-- EMM\n", mme_ue->imsi_bcd);
rv = s1ap_build_initial_context_setup_request(&s1apbuf, bearer, emmbuf);
d_assert(rv == CORE_OK && s1apbuf,
pkbuf_free(emmbuf); return, "s1ap build error");
d_assert(emm_send_s1ap_to_enb(enb_ue, s1apbuf) == CORE_OK,, "s1ap send error");
}
void emm_handle_s11_delete_session_request(mme_ue_t *mme_ue)
{
status_t rv;
pkbuf_t *s11buf = NULL;
@ -727,7 +728,7 @@ void emm_handle_delete_session_request(mme_ue_t *mme_ue)
}
}
void emm_handle_delete_session_response(mme_bearer_t *bearer)
void emm_handle_s11_delete_session_response(mme_bearer_t *bearer)
{
mme_ue_t *mme_ue = NULL;
mme_sess_t *sess;
@ -767,30 +768,7 @@ void emm_handle_delete_session_response(mme_bearer_t *bearer)
}
}
void emm_handle_service_request(
mme_ue_t *mme_ue, nas_service_request_t *service_request)
{
status_t rv;
pkbuf_t *s1apbuf = NULL;
enb_ue_t *enb_ue = NULL;
mme_sess_t *sess = NULL;
mme_bearer_t *bearer = NULL;
d_assert(mme_ue, return, "Null param");
enb_ue = mme_ue->enb_ue;
d_assert(enb_ue, return, "Null param");
sess = mme_sess_first(mme_ue);
d_assert(sess, return, "Null param");
bearer = mme_default_bearer_in_sess(sess);
d_assert(bearer, return, "Null param");
rv = s1ap_build_initial_context_setup_request(&s1apbuf, bearer, NULL);
d_assert(rv == CORE_OK && s1apbuf, return, "s1ap build error");
d_assert(emm_send_to_enb(enb_ue, s1apbuf) == CORE_OK,, "s1ap send error");
}
void emm_handle_downlink_data_notification(gtp_xact_t *xact,
void emm_handle_s11_downlink_data_notification(gtp_xact_t *xact,
mme_bearer_t *bearer)
{
status_t rv;
@ -815,16 +793,3 @@ void emm_handle_downlink_data_notification(gtp_xact_t *xact,
sess->sgw_s11_teid, s11buf) == CORE_OK,
return , "xact commit error");
}
void emm_handle_s6a_aia(mme_ue_t *mme_ue, c_uint32_t result_code)
{
if (result_code == ER_DIAMETER_SUCCESS)
{
emm_handle_authentication_request(mme_ue);
}
else
{
/* TODO */
/* Send Attach Reject */
}
}

View File

@ -28,19 +28,22 @@ CORE_DECLARE(void) emm_handle_detach_request(
CORE_DECLARE(void) emm_handle_detach_accept(
mme_ue_t *mme_ue, nas_detach_request_from_ue_t *detach_request);
CORE_DECLARE(void) emm_handle_emm_status(
mme_ue_t *mme_ue, nas_emm_status_t *emm_status);
CORE_DECLARE(void) emm_handle_service_request(
mme_ue_t *mme_ue, nas_service_request_t *service_request);
CORE_DECLARE(void) emm_handle_create_session_response(mme_bearer_t *bearer);
CORE_DECLARE(void) emm_handle_delete_session_request(mme_ue_t *mme_ue);
CORE_DECLARE(void) emm_handle_delete_session_response(mme_bearer_t *bearer);
CORE_DECLARE(void) emm_handle_downlink_data_notification(gtp_xact_t *xact,
mme_bearer_t *bearer);
CORE_DECLARE(void) emm_handle_emm_status(
mme_ue_t *mme_ue, nas_emm_status_t *emm_status);
CORE_DECLARE(void) emm_handle_esm_information_request(mme_ue_t *mme_ue);
CORE_DECLARE(void) emm_handle_s6a_aia(mme_ue_t *mme_ue, c_uint32_t result_code);
CORE_DECLARE(void) emm_handle_s6a_ula(mme_ue_t *mme_ue, c_uint32_t result_code);
CORE_DECLARE(void) emm_handle_s11_create_session_response(mme_bearer_t *bearer);
CORE_DECLARE(void) emm_handle_s11_delete_session_request(mme_ue_t *mme_ue);
CORE_DECLARE(void) emm_handle_s11_delete_session_response(mme_bearer_t *bearer);
CORE_DECLARE(void) emm_handle_s11_downlink_data_notification(gtp_xact_t *xact,
mme_bearer_t *bearer);
#ifdef __cplusplus
}

View File

@ -56,17 +56,17 @@ void emm_state_operational(fsm_t *s, event_t *e)
switch(event_get_param2(e))
{
case GTP_CREATE_SESSION_RESPONSE_TYPE:
emm_handle_create_session_response(bearer);
emm_handle_s11_create_session_response(bearer);
break;
case GTP_DELETE_SESSION_RESPONSE_TYPE:
emm_handle_delete_session_response(bearer);
emm_handle_s11_delete_session_response(bearer);
break;
case GTP_DOWNLINK_DATA_NOTIFICATION_TYPE:
{
mme_ue_t *mme_ue = NULL;
gtp_xact_t *xact = (gtp_xact_t *)event_get_param3(e);
emm_handle_downlink_data_notification(xact, bearer);
emm_handle_s11_downlink_data_notification(xact, bearer);
mme_ue = bearer->mme_ue;
d_assert(mme_ue, break, "Null param");
@ -99,24 +99,8 @@ void emm_state_operational(fsm_t *s, event_t *e)
}
case S6A_CMD_UPDATE_LOCATION:
{
mme_sess_t *sess = mme_sess_first(mme_ue);
while(sess)
{
mme_bearer_t *bearer = mme_bearer_first(sess);
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);
}
sess = mme_sess_next(sess);
}
c_uint32_t result_code = event_get_param3(e);
emm_handle_s6a_ula(mme_ue, result_code);
break;
}
case GTP_MODIFY_BEARER_RESPONSE_TYPE:
@ -220,16 +204,6 @@ void emm_state_operational(fsm_t *s, event_t *e)
}
break;
}
case MME_EVT_EMM_UE_T3:
{
index_t index = event_get_param1(e);
mme_ue_t *mme_ue = NULL;
d_assert(index, return, "Null param");
mme_ue = mme_ue_find(index);
d_assert(mme_ue, return, "Null param");
break;
}
case MME_EVT_EMM_UE_T3413:
{
index_t index = event_get_param1(e);

View File

@ -28,32 +28,6 @@ void esm_handle_pdn_connectivity_request(mme_bearer_t *bearer,
}
}
void esm_handle_s6a_update_location(mme_bearer_t *bearer)
{
status_t rv;
mme_ue_t *mme_ue = NULL;
enb_ue_t *enb_ue = NULL;
mme_enb_t *enb = NULL;
pkbuf_t *esmbuf = NULL, *s1apbuf = NULL;
d_assert(bearer, return, "Null param");
mme_ue = bearer->mme_ue;
d_assert(mme_ue, return, "Null param");
enb_ue = mme_ue->enb_ue;
d_assert(enb_ue, return, "Null param");
enb = enb_ue->enb;
d_assert(enb, return, "Null param");
rv = esm_build_information_request(&esmbuf, bearer);
d_assert(rv == CORE_OK && esmbuf, return, "esm_build failed");
rv = s1ap_build_downlink_nas_transport(&s1apbuf, enb_ue, esmbuf);
d_assert(rv == CORE_OK && s1apbuf,
pkbuf_free(esmbuf); return, "s1ap build error");
d_assert(s1ap_send_to_enb(enb, s1apbuf) == CORE_OK,, "s1ap send error");
}
void esm_handle_modify_bearer_request(mme_bearer_t *bearer)
{
status_t rv;

View File

@ -11,7 +11,6 @@ extern "C" {
CORE_DECLARE(void) esm_handle_pdn_connectivity_request(mme_bearer_t *bearer,
nas_pdn_connectivity_request_t *pdn_connectivity_request);
CORE_DECLARE(void) esm_handle_s6a_update_location(mme_bearer_t *bearer);
CORE_DECLARE(void) esm_handle_information_response(mme_bearer_t *bearer,
nas_esm_information_response_t *bearer_information_response);
CORE_DECLARE(void) esm_handle_modify_bearer_request(mme_bearer_t *bearer);

View File

@ -41,7 +41,6 @@ void esm_state_operational(fsm_t *s, event_t *e)
{
break;
}
case MME_EVT_ESM_BEARER_FROM_S6A:
case MME_EVT_ESM_BEARER_TO_S11:
{
index_t index = event_get_param1(e);
@ -56,14 +55,6 @@ void esm_state_operational(fsm_t *s, event_t *e)
switch(event_get_param2(e))
{
case S6A_CMD_UPDATE_LOCATION:
{
d_trace(3, "[NAS] ESM information request : "
"UE[%s] <--- ESM[%d]\n",
mme_ue->imsi_bcd, bearer->pti);
esm_handle_s6a_update_location(bearer);
break;
}
case GTP_MODIFY_BEARER_REQUEST_TYPE:
{
esm_handle_modify_bearer_request(bearer);

View File

@ -29,9 +29,19 @@ char* mme_event_get_name(event_t *e)
case MME_EVT_EMM_UE_MSG:
return "MME_EVT_EMM_UE_MSG";
case MME_EVT_EMM_UE_FROM_S6A:
return "MME_EVT_EMM_UE_FROM_S6A";
case MME_EVT_EMM_UE_FROM_S11:
return "MME_EVT_EMM_UE_FROM_S11";
case MME_EVT_EMM_BEARER_FROM_S11:
return "MME_EVT_EMM_BEARER_FROM_S11";
case MME_EVT_EMM_UE_T3413:
return "MME_EVT_EMM_UE_T3413";
case MME_EVT_ESM_BEARER_MSG:
return "MME_EVT_ESM_BEARER_MSG";
case MME_EVT_ESM_BEARER_TO_S11:
return "MME_EVT_ESM_BEARER_TO_S11";
case MME_EVT_S11_UE_MSG:
return "MME_EVT_S11_UE_MSG";

View File

@ -25,11 +25,9 @@ typedef enum {
MME_EVT_EMM_UE_FROM_S6A,
MME_EVT_EMM_UE_FROM_S11,
MME_EVT_EMM_BEARER_FROM_S11,
MME_EVT_EMM_UE_T3,
MME_EVT_EMM_UE_T3413,
MME_EVT_ESM_BEARER_MSG,
MME_EVT_ESM_BEARER_FROM_S6A,
MME_EVT_ESM_BEARER_TO_S11,
MME_EVT_S11_UE_MSG,

View File

@ -342,11 +342,12 @@ static void mme_s6a_ula_cb(void *data, struct msg **msg)
struct sess_state *mi = NULL;
struct timespec ts;
struct session *sess;
struct avp *avp;
struct avp *avp, *avpch;
struct avp *avpch1, *avpch2, *avpch3, *avpch4, *avpch5;
struct avp_hdr *hdr;
unsigned long dur;
int error = 0;
c_uint32_t result_code = 0;
int new;
event_t e;
@ -374,17 +375,29 @@ static void mme_s6a_ula_cb(void *data, struct msg **msg)
if (avp)
{
CHECK_FCT_DO( fd_msg_avp_hdr(avp, &hdr), return);
d_trace(3, "Status: %d\n", hdr->avp_value->i32);
if (hdr->avp_value->i32 != ER_DIAMETER_SUCCESS)
{
d_error("ERROR DIAMETER Result Code(%d)", hdr->avp_value->i32);
error++;
}
result_code = hdr->avp_value->i32;
d_trace(3, "Result Code: %d\n", hdr->avp_value->i32);
}
else
{
d_error("no Result-Code");
error++;
CHECK_FCT_DO( fd_msg_search_avp(*msg,
fd_experimental_result, &avp), return );
if (avp)
{
CHECK_FCT_DO( fd_avp_search_avp(avp,
fd_experimental_result_code, &avpch), return );
if (avpch)
{
CHECK_FCT_DO( fd_msg_avp_hdr(avpch, &hdr), return);
result_code = hdr->avp_value->i32;
d_trace(3, "Experimental Result Code: %d\n", result_code);
}
}
else
{
d_error("no Result-Code");
error++;
}
}
/* Value of Origin-Host */
@ -638,6 +651,7 @@ static void mme_s6a_ula_cb(void *data, struct msg **msg)
event_set(&e, MME_EVT_EMM_UE_FROM_S6A);
event_set_param1(&e, (c_uintptr_t)mme_ue->index);
event_set_param2(&e, (c_uintptr_t)S6A_CMD_UPDATE_LOCATION);
event_set_param3(&e, (c_uintptr_t)result_code);
mme_event_send(&e);
/* Free the message */

View File

@ -223,7 +223,6 @@ void mme_state_operational(fsm_t *s, event_t *e)
case MME_EVT_EMM_UE_FROM_S6A:
case MME_EVT_EMM_UE_FROM_S11:
case MME_EVT_EMM_BEARER_FROM_S11:
case MME_EVT_EMM_UE_T3:
case MME_EVT_EMM_UE_T3413:
{
index_t index = event_get_param1(e);
@ -249,7 +248,6 @@ void mme_state_operational(fsm_t *s, event_t *e)
break;
}
case MME_EVT_ESM_BEARER_FROM_S6A:
case MME_EVT_ESM_BEARER_TO_S11:
case MME_EVT_ESM_BEARER_MSG:
{