[#220] T3450 done

This commit is contained in:
Sukchan Lee 2019-07-20 22:30:53 +09:00
parent b34dafcb09
commit 6a1f628e44
5 changed files with 64 additions and 12 deletions

View File

@ -60,11 +60,25 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e);
void emm_state_de_registered(ogs_fsm_t *s, mme_event_t *e)
{
mme_ue_t *mme_ue = NULL;
ogs_assert(s);
ogs_assert(e);
mme_sm_debug(e);
mme_ue = e->mme_ue;
ogs_assert(mme_ue);
switch (e->id) {
case OGS_FSM_ENTRY_SIG:
CLEAR_MME_UE_ALL_TIMERS(mme_ue);
break;
case OGS_FSM_EXIT_SIG:
break;
default:
break;
}
common_register_state(s, e);
}
@ -633,7 +647,7 @@ void emm_state_authentication(ogs_fsm_t *s, mme_event_t *e)
mme_timer_get_name(e->timer_id), e->timer_id);
break;
}
return;
break;
default:
ogs_error("Unknown event[%s]", mme_event_get_name(e));
break;
@ -776,7 +790,7 @@ void emm_state_security_mode(ogs_fsm_t *s, mme_event_t *e)
mme_timer_get_name(e->timer_id), e->timer_id);
break;
}
return;
break;
default:
ogs_error("Unknown event[%s]", mme_event_get_name(e));
break;
@ -810,6 +824,9 @@ void emm_state_initial_context_setup(ogs_fsm_t *s, mme_event_t *e)
case NAS_ATTACH_COMPLETE:
ogs_debug("[EMM] Attach complete");
ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd);
CLEAR_MME_UE_TIMER(mme_ue->t3450);
rv = emm_handle_attach_complete(
mme_ue, &message->emm.attach_complete);
if (rv != OGS_OK) {
@ -865,6 +882,27 @@ void emm_state_initial_context_setup(ogs_fsm_t *s, mme_event_t *e)
break;
}
break;
case MME_EVT_EMM_TIMER:
switch (e->timer_id) {
case MME_TIMER_T3450:
if (mme_ue->t3450.retry_count >=
mme_timer_cfg(MME_TIMER_T3450)->max_count) {
ogs_warn("[EMM] Retransmission of IMSI[%s] failed. "
"Stop retransmission",
mme_ue->imsi_bcd);
CLEAR_MME_UE_TIMER(mme_ue->t3450);
OGS_FSM_TRAN(&mme_ue->sm, &emm_state_exception);
} else {
mme_ue->t3450.retry_count++;
nas_send_attach_accept(mme_ue);
}
break;
default:
ogs_error("Unknown timer[%s:%d]",
mme_timer_get_name(e->timer_id), e->timer_id);
break;
}
break;
default:
ogs_error("Unknown event[%s]", mme_event_get_name(e));
break;

View File

@ -140,10 +140,12 @@ int esm_handle_information_response(mme_sess_t *sess,
mme_vlr_t *vlr = mme_vlr_find_by_tai(&mme_ue->tai);
mme_ue->vlr = vlr;
if (vlr)
if (vlr) {
sgsap_send_location_update_request(mme_ue);
else
} else {
CLEAR_MME_UE_TIMER(mme_ue->t3450);
nas_send_attach_accept(mme_ue);
}
} else {
rv = mme_gtp_send_create_session_request(sess);
ogs_assert(rv == OGS_OK);

View File

@ -113,10 +113,12 @@ void mme_s11_handle_create_session_response(
mme_vlr_t *vlr = mme_vlr_find_by_tai(&mme_ue->tai);
mme_ue->vlr = vlr;
if (vlr)
if (vlr) {
sgsap_send_location_update_request(mme_ue);
else
} else {
CLEAR_MME_UE_TIMER(mme_ue->t3450);
nas_send_attach_accept(mme_ue);
}
} else if (OGS_FSM_CHECK(&mme_ue->sm, emm_state_registered)) {
nas_send_activate_default_bearer_context_request(bearer);

View File

@ -98,14 +98,23 @@ int nas_send_attach_accept(mme_ue_t *mme_ue)
ogs_assert(bearer);
ogs_assert(mme_bearer_next(bearer) == NULL);
rv = esm_build_activate_default_bearer_context_request(&esmbuf, sess);
ogs_assert(rv == OGS_OK && esmbuf);
if (mme_ue->t3450.pkbuf) {
s1apbuf = mme_ue->t3450.pkbuf;
rv = emm_build_attach_accept(&emmbuf, mme_ue, esmbuf);
ogs_assert(rv == OGS_OK && emmbuf);
} else {
rv = esm_build_activate_default_bearer_context_request(&esmbuf, sess);
ogs_assert(rv == OGS_OK && esmbuf);
rv = s1ap_build_initial_context_setup_request(&s1apbuf, mme_ue, emmbuf);
ogs_assert(rv == OGS_OK && s1apbuf);
rv = emm_build_attach_accept(&emmbuf, mme_ue, esmbuf);
ogs_assert(rv == OGS_OK && emmbuf);
rv = s1ap_build_initial_context_setup_request(&s1apbuf, mme_ue, emmbuf);
ogs_assert(rv == OGS_OK && s1apbuf);
}
mme_ue->t3450.pkbuf = ogs_pkbuf_copy(s1apbuf);
ogs_timer_start(mme_ue->t3450.timer,
mme_timer_cfg(MME_TIMER_T3450)->duration);
rv = nas_send_to_enb(mme_ue, s1apbuf);
ogs_assert(rv == OGS_OK);

View File

@ -102,6 +102,7 @@ void sgsap_handle_location_update_accept(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf)
ogs_debug(" P-TMSI[0x%08x]", mme_ue->p_tmsi);
}
CLEAR_MME_UE_TIMER(mme_ue->t3450);
nas_send_attach_accept(mme_ue);
return;