auth process skip routine is added

This commit is contained in:
Sukchan Lee 2017-07-26 23:27:03 +09:00
parent 6d8af29f6e
commit 773d31a17e
4 changed files with 91 additions and 37 deletions

View File

@ -203,6 +203,29 @@ void emm_handle_attach_request(
d_info("[NAS] Attach request : UE_IMSI[%s] --> EMM", imsi_bcd);
if (mme_ue->security_context_available)
{
if (enb_ue->mac_failed)
{
int delete_session_request_handled = 0;
emm_handle_delete_session_request(
mme_ue, &delete_session_request_handled);
if (!delete_session_request_handled)
{
mme_s6a_send_air(mme_ue);
}
}
else
{
emm_handle_attach_accept(mme_ue);
}
}
else
{
mme_s6a_send_air(mme_ue);
}
break;
}
case NAS_EPS_MOBILE_IDENTITY_GUTI:
@ -221,7 +244,6 @@ void emm_handle_attach_request(
guti.mme_code,
guti.m_tmsi);
/* FIXME :Check if GUTI was assigend from us */
/* FIXME :If not, forward the message to other MME */
@ -230,12 +252,29 @@ void emm_handle_attach_request(
* The record with GUTI,IMSI should be
* stored in permanent DB
*/
if (memcmp(&guti, &mme_ue->guti, sizeof(guti_t)) != 0)
{
emm_handle_identity_request(mme_ue);
return;
}
if (mme_ue->security_context_available)
{
if (enb_ue->mac_failed)
{
d_assert(0, return, "Not Implmeneted");
}
else
{
if (memcmp(&guti, &mme_ue->guti, sizeof(guti_t)) != 0)
{
emm_handle_identity_request(mme_ue);
}
else
{
emm_handle_attach_accept(mme_ue);
}
}
}
else
{
d_assert(0, return, "Not Implmeneted");
}
break;
}
default:
@ -246,29 +285,6 @@ void emm_handle_attach_request(
return;
}
}
if (mme_ue->security_context_available)
{
if (enb_ue->mac_failed)
{
int delete_session_request_handled = 0;
emm_handle_delete_session_request(
mme_ue, &delete_session_request_handled);
if (!delete_session_request_handled)
{
mme_s6a_send_air(mme_ue);
}
}
else
{
}
}
else
{
mme_s6a_send_air(mme_ue);
}
}
void emm_handle_identity_request(mme_ue_t *mme_ue)
@ -305,9 +321,13 @@ void emm_handle_identity_response(
mme_ue_t *mme_ue, nas_identity_response_t *identity_response)
{
nas_mobile_identity_t *mobile_identity = NULL;
enb_ue_t *enb_ue = NULL;
d_assert(identity_response, return, "Null param");
d_assert(mme_ue, return, "Null param");
d_assert(identity_response, return, "Null param");
enb_ue = mme_ue->enb_ue;
d_assert(enb_ue, return, "Null param");
mobile_identity = &identity_response->mobile_identity;
@ -329,10 +349,28 @@ void emm_handle_identity_response(
return;
}
/* TODO : check if authorization process is needed or not */
/* Send Authentication Information Request to HSS */
mme_s6a_send_air(mme_ue);
if (mme_ue->security_context_available)
{
if (enb_ue->mac_failed)
{
int delete_session_request_handled = 0;
emm_handle_delete_session_request(
mme_ue, &delete_session_request_handled);
if (!delete_session_request_handled)
{
mme_s6a_send_air(mme_ue);
}
}
else
{
emm_handle_attach_accept(mme_ue);
}
}
else
{
mme_s6a_send_air(mme_ue);
}
}
void emm_handle_authentication_request(mme_ue_t *mme_ue)
@ -506,6 +544,20 @@ void emm_handle_create_session_response(mme_bearer_t *bearer)
d_assert(emm_send_to_enb(enb_ue, s1apbuf) == CORE_OK,, "s1ap send error");
}
void emm_handle_attach_accept(mme_ue_t *mme_ue)
{
mme_sess_t *sess = mme_sess_first(mme_ue);
while (sess != NULL)
{
mme_bearer_t *bearer = mme_default_bearer_in_sess(sess);
if (bearer)
{
emm_handle_create_session_response(bearer);
}
sess = mme_sess_next(sess);
}
}
void emm_handle_attach_complete(
mme_ue_t *mme_ue, nas_attach_complete_t *attach_complete)
{
@ -693,7 +745,7 @@ void emm_handle_delete_session_request(mme_ue_t *mme_ue, int *handled)
while (sess != NULL)
{
mme_bearer_t *bearer = mme_default_bearer_in_sess(sess);
if (bearer && bearer->sgw)
if (bearer)
{
rv = mme_s11_build_delete_session_request(&s11buf, sess);
d_assert(rv == CORE_OK, return, "S11 build error");
@ -736,6 +788,7 @@ void emm_handle_delete_session_response(mme_bearer_t *bearer)
break;
}
case NAS_ATTACH_REQUEST:
case NAS_IDENTITY_RESPONSE:
{
enb_ue_t *enb_ue = mme_ue->enb_ue;
d_assert(enb_ue, return, "Null param");

View File

@ -15,6 +15,7 @@ CORE_DECLARE(void) emm_handle_authentication_request(mme_ue_t *mme_ue);
CORE_DECLARE(void) emm_handle_authentication_response(
mme_ue_t *mme_ue, nas_authentication_response_t *authentication_response);
CORE_DECLARE(void) emm_handle_create_session_response(mme_bearer_t *bearer);
CORE_DECLARE(void) emm_handle_attach_accept(mme_ue_t *mme_ue);
CORE_DECLARE(void) emm_handle_attach_complete(
mme_ue_t *mme_ue, nas_attach_complete_t *attach_complete);
CORE_DECLARE(void) emm_handle_emm_status(

View File

@ -424,9 +424,9 @@ static void nas_sm_test2(abts_case *tc, void *data)
ABTS_INT_EQUAL(tc, CORE_OK, rv);
rv = tests1ap_enb_send(sock, sendbuf);
ABTS_INT_EQUAL(tc, CORE_OK, rv);
#endif
core_sleep(time_from_msec(300));
#endif
/* eNB disonncect from MME */
rv = tests1ap_enb_close(sock);

View File

@ -129,8 +129,8 @@ status_t tests1ap_build_initial_ue_msg(pkbuf_t **pkbuf, int i)
"00000a005c0a0090 11034f18a6f15d01 00004300060000f1 1030390064400800"
"00f110002343d000 86400130",
"000c405300000500 080003001f00001a 002a291776c92a15 8207410108091010"
"103254866205f0f0 000000000e0201d0 11d1270780000a00 000d00c100430006"
"000c405300000500 080003001f00001a 002a2917acba67c4 8207410108091010"
"103254866205f0f0 000000000e023cd0 11d1270780000a00 000d00c100430006"
"0000f1102b670064 40080000f1109d67 aa500086400130",
"",