forked from acouzens/open5gs
[#220] T3450 done
This commit is contained in:
parent
b34dafcb09
commit
6a1f628e44
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue