forked from acouzens/open5gs
update state machine
This commit is contained in:
parent
6e6eb7a355
commit
f94553bc8a
|
@ -174,22 +174,28 @@ void emm_state_detached(fsm_t *s, event_t *e)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
d_error("NAS MAC Failure in emm_state_detached");
|
if (MME_HAVE_SGW_S11_PATH(mme_ue))
|
||||||
rv = nas_send_tau_reject(
|
{
|
||||||
mme_ue, EMM_CAUSE_MAC_FAILURE);
|
mme_s6a_send_air(mme_ue, NULL);
|
||||||
d_assert(rv == CORE_OK,,
|
FSM_TRAN(&mme_ue->sm,
|
||||||
"nas_send_tau_reject() failed");
|
&emm_state_authentication);
|
||||||
FSM_TRAN(s, emm_state_exception);
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
d_warn("No PDN Connection "
|
||||||
|
"in emm_state_detached");
|
||||||
|
rv = nas_send_tau_reject(mme_ue,
|
||||||
|
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
|
||||||
|
d_assert(rv == CORE_OK,,
|
||||||
|
"nas_send_tau_reject() failed");
|
||||||
|
FSM_TRAN(s, emm_state_exception);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
d_error("Unknown UE in emm_state_detached");
|
d_warn("Unknown UE in emm_state_detached");
|
||||||
rv = nas_send_tau_reject(mme_ue,
|
FSM_TRAN(&mme_ue->sm, &emm_state_identity);
|
||||||
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
|
|
||||||
d_assert(rv == CORE_OK,,
|
|
||||||
"nas_send_tau_reject() failed");
|
|
||||||
FSM_TRAN(s, emm_state_exception);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -289,12 +295,42 @@ void emm_state_identity(fsm_t *s, event_t *e)
|
||||||
FSM_TRAN(s, &emm_state_authentication);
|
FSM_TRAN(s, &emm_state_authentication);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (mme_ue->nas_eps.type == MME_EPS_TYPE_TAU_REQUEST)
|
||||||
|
{
|
||||||
|
if (SECURITY_CONTEXT_IS_VALID(mme_ue))
|
||||||
|
{
|
||||||
|
rv = nas_send_tau_accept(mme_ue);
|
||||||
|
d_assert(rv == CORE_OK,,
|
||||||
|
"nas_send_tau_accept() failed");
|
||||||
|
FSM_TRAN(&mme_ue->sm, &emm_state_attached);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (MME_HAVE_SGW_S11_PATH(mme_ue))
|
||||||
|
{
|
||||||
|
mme_s6a_send_air(mme_ue, NULL);
|
||||||
|
FSM_TRAN(&mme_ue->sm,
|
||||||
|
&emm_state_authentication);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
d_warn("No PDN Connection "
|
||||||
|
"in emm_state_identity");
|
||||||
|
rv = nas_send_tau_reject(mme_ue,
|
||||||
|
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
|
||||||
|
d_assert(rv == CORE_OK,,
|
||||||
|
"nas_send_tau_reject() failed");
|
||||||
|
FSM_TRAN(s, emm_state_exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (mme_ue->nas_eps.type ==
|
else if (mme_ue->nas_eps.type ==
|
||||||
MME_EPS_TYPE_SERVICE_REQUEST)
|
MME_EPS_TYPE_SERVICE_REQUEST)
|
||||||
{
|
{
|
||||||
if (SECURITY_CONTEXT_IS_VALID(mme_ue))
|
if (SECURITY_CONTEXT_IS_VALID(mme_ue))
|
||||||
{
|
{
|
||||||
rv = s1ap_send_initial_context_setup_request(mme_ue);
|
rv = s1ap_send_initial_context_setup_request(
|
||||||
|
mme_ue);
|
||||||
d_assert(rv == CORE_OK,,
|
d_assert(rv == CORE_OK,,
|
||||||
"s1ap_send_initial_context_setup_request() failed");
|
"s1ap_send_initial_context_setup_request() failed");
|
||||||
FSM_TRAN(&mme_ue->sm, &emm_state_attached);
|
FSM_TRAN(&mme_ue->sm, &emm_state_attached);
|
||||||
|
@ -306,7 +342,7 @@ void emm_state_identity(fsm_t *s, event_t *e)
|
||||||
enb_ue_t *enb_ue = NULL;
|
enb_ue_t *enb_ue = NULL;
|
||||||
|
|
||||||
d_warn("Have PDN Connection "
|
d_warn("Have PDN Connection "
|
||||||
"in emm_state_attached");
|
"in emm_state_identity");
|
||||||
rv = nas_send_service_reject(mme_ue,
|
rv = nas_send_service_reject(mme_ue,
|
||||||
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
|
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
|
||||||
d_assert(rv == CORE_OK,,
|
d_assert(rv == CORE_OK,,
|
||||||
|
@ -325,7 +361,7 @@ void emm_state_identity(fsm_t *s, event_t *e)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
d_warn("No PDN Connection "
|
d_warn("No PDN Connection "
|
||||||
"in emm_state_attached");
|
"in emm_state_identity");
|
||||||
rv = nas_send_service_reject(mme_ue,
|
rv = nas_send_service_reject(mme_ue,
|
||||||
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
|
EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
|
||||||
d_assert(rv == CORE_OK,,
|
d_assert(rv == CORE_OK,,
|
||||||
|
@ -334,34 +370,10 @@ void emm_state_identity(fsm_t *s, event_t *e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (mme_ue->nas_eps.type == MME_EPS_TYPE_TAU_REQUEST)
|
else
|
||||||
{
|
d_assert(0,, "Invalid NAS_EPS type[%d]",
|
||||||
if (SECURITY_CONTEXT_IS_VALID(mme_ue))
|
mme_ue->nas_eps.type);
|
||||||
{
|
|
||||||
rv = nas_send_tau_accept(mme_ue);
|
|
||||||
d_assert(rv == CORE_OK,,
|
|
||||||
"nas_send_tau_accept() failed");
|
|
||||||
FSM_TRAN(&mme_ue->sm, &emm_state_attached);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (MME_HAVE_SGW_S11_PATH(mme_ue))
|
|
||||||
{
|
|
||||||
mme_s6a_send_air(mme_ue, NULL);
|
|
||||||
FSM_TRAN(&mme_ue->sm, &emm_state_authentication);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
d_warn("No PDN Connection "
|
|
||||||
"in emm_state_attached");
|
|
||||||
rv = nas_send_tau_reject(
|
|
||||||
mme_ue, EMM_CAUSE_UE_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK);
|
|
||||||
d_assert(rv == CORE_OK,,
|
|
||||||
"nas_send_tau_reject() failed");
|
|
||||||
FSM_TRAN(s, emm_state_exception);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case NAS_EMM_STATUS:
|
case NAS_EMM_STATUS:
|
||||||
|
|
Loading…
Reference in New Issue