update it

This commit is contained in:
Sukchan Lee 2017-04-11 12:16:07 +09:00
parent 480ec5af15
commit 8bdfef6a35
6 changed files with 81 additions and 27 deletions

View File

@ -42,6 +42,7 @@ void emm_state_operational(fsm_t *s, event_t *e)
break;
}
case EVT_LO_MME_EMM_AUTH_REQ:
case EVT_LO_MME_EMM_LOCATION_UPDATE:
{
index_t index = event_get_param1(e);
mme_ue_t *ue = NULL;
@ -50,13 +51,35 @@ void emm_state_operational(fsm_t *s, event_t *e)
ue = mme_ue_find(index);
d_assert(ue, return, "Null param");
emm_handle_authentication_request(ue);
switch(event_get(e))
{
case EVT_LO_MME_EMM_AUTH_REQ:
{
emm_handle_authentication_request(ue);
d_info("[NAS] Authentication request : UE[%s] <-- EMM",
ue->imsi_bcd);
break;
}
case EVT_LO_MME_EMM_LOCATION_UPDATE:
{
mme_esm_t *esm = mme_esm_first(ue);
d_info("[NAS] Authentication request : UE[%s] <-- EMM",
ue->imsi_bcd);
d_info("[NAS] Location Update : EMM[%s] <-- HSS",
ue->imsi_bcd);
while(esm)
{
event_t e;
event_set(&e, EVT_LO_MME_ESM_INFO_REQ);
event_set_param1(&e, (c_uintptr_t)esm->index);
mme_event_send(&e);
esm = mme_esm_next(esm);
}
break;
}
}
break;
}
case EVT_MSG_MME_EMM:
{
index_t index = event_get_param1(e);

View File

@ -40,6 +40,30 @@ void esm_state_operational(fsm_t *s, event_t *e)
{
break;
}
case EVT_LO_MME_ESM_INFO_REQ:
{
index_t index = event_get_param1(e);
mme_esm_t *esm = NULL;
mme_ue_t *ue = NULL;
d_assert(index, return, "Null param");
esm = mme_esm_find(index);
d_assert(esm, return, "Null param");
ue = esm->ue;
d_assert(ue, return, "Null param");
switch(event_get(e))
{
case EVT_LO_MME_ESM_INFO_REQ:
{
d_info("[NAS] ESM information request : "
"UE[%s] <--- ESM[%d]", ue->imsi_bcd, esm->pti);
break;
}
}
break;
}
case EVT_MSG_MME_ESM:
{
index_t index = event_get_param1(e);
@ -61,6 +85,8 @@ void esm_state_operational(fsm_t *s, event_t *e)
{
esm_handle_pdn_connectivity_request(
esm, &message->esm.pdn_connectivity_request);
d_info("[NAS] PDN connectivity request : "
"UE[%s] --> ESM[%d]", ue->imsi_bcd, esm->pti);
break;
}
default:

View File

@ -10,6 +10,8 @@
static char EVT_NAME_LO_MME_S1AP_ACCEPT[] = "LO_MME_S1AP_ACCEPT";
static char EVT_NAME_LO_MME_S1AP_CONNREFUSED[] = "LO_MME_S1AP_CONNREFUSED";
static char EVT_NAME_LO_MME_EMM_AUTH_REQ[] = "LO_MME_EMM_AUTH_REQ";
static char EVT_NAME_LO_MME_EMM_LOCATION_UPDATE[] = "LO_MME_EMM_LOCATION_UPDATE";
static char EVT_NAME_LO_MME_ESM_INFO_REQ[] = "LO_MME_ESM_INFO_REQ";
static char EVT_NAME_TM_MME_S11_T3[] = "TM_MME_S11_T3";
@ -36,6 +38,10 @@ char* mme_event_get_name(event_t *e)
return EVT_NAME_LO_MME_S1AP_CONNREFUSED;
case EVT_LO_MME_EMM_AUTH_REQ:
return EVT_NAME_LO_MME_EMM_AUTH_REQ;
case EVT_LO_MME_EMM_LOCATION_UPDATE:
return EVT_NAME_LO_MME_EMM_LOCATION_UPDATE;
case EVT_LO_MME_ESM_INFO_REQ:
return EVT_NAME_LO_MME_ESM_INFO_REQ;
case EVT_TM_MME_S11_T3:
return EVT_NAME_TM_MME_S11_T3;

View File

@ -20,6 +20,8 @@ typedef enum {
EVT_LO_MME_S1AP_ACCEPT,
EVT_LO_MME_S1AP_CONNREFUSED,
EVT_LO_MME_EMM_AUTH_REQ,
EVT_LO_MME_EMM_LOCATION_UPDATE,
EVT_LO_MME_ESM_INFO_REQ,
EVT_TM_MME_S11_T3,

View File

@ -3,11 +3,9 @@
#include "core_debug.h"
#include "core_pool.h"
#include "nas_message.h"
#include "s6a_lib.h"
#include "mme_event.h"
#include "mme_s6a_handler.h"
#define MAX_NUM_SESSION_STATE 32
@ -34,8 +32,8 @@ static void mme_s6a_aia_cb(void *data, struct msg **msg)
int error = 0;
int new;
mme_ue_t *ue = NULL;
event_t e;
mme_ue_t *ue = NULL;
CHECK_SYS_DO(clock_gettime(CLOCK_REALTIME, &ts), return);
@ -257,18 +255,11 @@ static void mme_s6a_ula_cb(void *data, struct msg **msg)
int error = 0;
int new;
event_t e;
mme_ue_t *ue = NULL;
pdn_t *pdn = NULL;
c_uint8_t pdn_added = 0;
nas_message_t message;
#if 0
pkbuf_t *sendbuf = NULL;
event_t e;
nas_authentication_request_t *authentication_request =
&message.emm.authentication_request;
#endif
CHECK_SYS_DO(clock_gettime(CLOCK_REALTIME, &ts), return);
/* Search the session, retrieve its data */
@ -281,7 +272,7 @@ static void mme_s6a_ula_cb(void *data, struct msg **msg)
ue = mi->ue;
d_assert(ue, error++; goto out,);
d_info("[S6A] Authentication-Information-Response : UE[%s] <-- HSS",
d_info("[S6A] Update-Location-Response : UE[%s] <-- HSS",
ue->imsi_bcd);
/* Value of Result Code */
@ -429,17 +420,9 @@ static void mme_s6a_ula_cb(void *data, struct msg **msg)
d_assert(fd_msg_avp_hdr(avp, &hdr) == 0 && hdr, error++; goto out,);
ue->subscribed_rau_tau_timer = hdr->avp_value->i32;
memset(&message, 0, sizeof(message));
message.h.security_header_type =
NAS_SECURITY_HEADER_INTEGRITY_PROTECTED_AND_CIPHERED;
message.h.protocol_discriminator = NAS_PROTOCOL_DISCRIMINATOR_EMM;
#if 0
message.esm.h.protocol_discriminator = NAS_PROTOCOL_DISCRIMINATOR_ESM;
message.esm.h.procedure_transaction_identity = 33;
message.esm.h.message_type = NAS_ESM_INFORMATION_REQUEST;
#endif
event_set(&e, EVT_LO_MME_EMM_LOCATION_UPDATE);
event_set_param1(&e, (c_uintptr_t)ue->index);
mme_event_send(&e);
out:
/* Free the message */
d_assert(pthread_mutex_lock(&s6a_config->stats_lock) == 0,,);

View File

@ -145,6 +145,7 @@ void mme_state_operational(fsm_t *s, event_t *e)
break;
}
case EVT_LO_MME_EMM_AUTH_REQ:
case EVT_LO_MME_EMM_LOCATION_UPDATE:
{
index_t index = event_get_param1(e);
mme_ue_t *ue = NULL;
@ -180,6 +181,19 @@ void mme_state_operational(fsm_t *s, event_t *e)
pkbuf_free(pkbuf);
break;
}
case EVT_LO_MME_ESM_INFO_REQ:
{
index_t index = event_get_param1(e);
mme_esm_t *esm = NULL;
d_assert(index, break, "Null param");
esm = mme_esm_find(index);
d_assert(esm, break, "No ESM context");
d_assert(FSM_STATE(&esm->sm), break, "No ESM State Machine");
fsm_dispatch(&esm->sm, (fsm_event_t*)e);
break;
}
case EVT_MSG_MME_ESM:
{
nas_message_t message;