mirror of
https://github.com/open5gs/open5gs.git
synced 2026-05-05 23:37:22 +00:00
if EMM_STATUS is received, EMM state will be recovered to an initial state
This commit is contained in:
parent
9b8eef2545
commit
2701add779
8 changed files with 93 additions and 53 deletions
|
|
@ -451,16 +451,6 @@ status_t emm_handle_service_request(
|
|||
return CORE_OK;
|
||||
}
|
||||
|
||||
status_t emm_handle_emm_status(mme_ue_t *mme_ue, nas_emm_status_t *emm_status)
|
||||
{
|
||||
d_assert(mme_ue, return CORE_ERROR, "Null param");
|
||||
|
||||
d_warn("[NAS] EMM status(%d) : UE[%s] --> EMM",
|
||||
emm_status->emm_cause, mme_ue->imsi_bcd);
|
||||
|
||||
return CORE_OK;
|
||||
}
|
||||
|
||||
status_t emm_handle_tau_request(
|
||||
mme_ue_t *mme_ue, nas_tracking_area_update_request_t *tau_request)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -23,8 +23,6 @@ CORE_DECLARE(status_t) emm_handle_detach_request(
|
|||
CORE_DECLARE(status_t) emm_handle_service_request(
|
||||
mme_ue_t *mme_ue, nas_service_request_t *service_request);
|
||||
|
||||
CORE_DECLARE(status_t) emm_handle_emm_status(
|
||||
mme_ue_t *mme_ue, nas_emm_status_t *emm_status);
|
||||
CORE_DECLARE(status_t) emm_handle_tau_request(
|
||||
mme_ue_t *mme_ue, nas_tracking_area_update_request_t *tau_request);
|
||||
|
||||
|
|
|
|||
|
|
@ -271,8 +271,11 @@ void emm_state_identity(fsm_t *s, event_t *e)
|
|||
}
|
||||
case NAS_EMM_STATUS:
|
||||
{
|
||||
emm_handle_emm_status(mme_ue, &message->emm.emm_status);
|
||||
FSM_TRAN(s, &emm_state_detached);
|
||||
d_warn("[NAS] EMM STATUS [IMSI:%s,Cause:%d] "
|
||||
"in emm_state_identity",
|
||||
mme_ue->imsi_bcd,
|
||||
message->emm.emm_status.emm_cause);
|
||||
FSM_TRAN(s, &emm_state_exception);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
|
@ -363,8 +366,11 @@ void emm_state_authentication(fsm_t *s, event_t *e)
|
|||
}
|
||||
case NAS_EMM_STATUS:
|
||||
{
|
||||
emm_handle_emm_status(mme_ue, &message->emm.emm_status);
|
||||
FSM_TRAN(s, &emm_state_detached);
|
||||
d_warn("[NAS] EMM STATUS [IMSI:%s,Cause:%d] "
|
||||
"in emm_state_authentication",
|
||||
mme_ue->imsi_bcd,
|
||||
message->emm.emm_status.emm_cause);
|
||||
FSM_TRAN(s, &emm_state_exception);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
|
@ -444,8 +450,11 @@ void emm_state_security_mode(fsm_t *s, event_t *e)
|
|||
}
|
||||
case NAS_EMM_STATUS:
|
||||
{
|
||||
emm_handle_emm_status(mme_ue, &message->emm.emm_status);
|
||||
FSM_TRAN(s, &emm_state_detached);
|
||||
d_warn("[NAS] EMM STATUS [IMSI:%s,Cause:%d] "
|
||||
"in emm_state_security_mode",
|
||||
mme_ue->imsi_bcd,
|
||||
message->emm.emm_status.emm_cause);
|
||||
FSM_TRAN(s, &emm_state_exception);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
|
@ -529,8 +538,11 @@ void emm_state_initial_context_setup(fsm_t *s, event_t *e)
|
|||
}
|
||||
case NAS_EMM_STATUS:
|
||||
{
|
||||
emm_handle_emm_status(mme_ue, &message->emm.emm_status);
|
||||
FSM_TRAN(s, &emm_state_detached);
|
||||
d_warn("[NAS] EMM STATUS [IMSI:%s,Cause:%d] "
|
||||
"in emm_state_initial_context_setup",
|
||||
mme_ue->imsi_bcd,
|
||||
message->emm.emm_status.emm_cause);
|
||||
FSM_TRAN(s, &emm_state_exception);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
|
@ -648,8 +660,11 @@ void emm_state_attached(fsm_t *s, event_t *e)
|
|||
}
|
||||
case NAS_EMM_STATUS:
|
||||
{
|
||||
emm_handle_emm_status(mme_ue, &message->emm.emm_status);
|
||||
FSM_TRAN(s, &emm_state_detached);
|
||||
d_warn("[NAS] EMM STATUS [IMSI:%s,Cause:%d] "
|
||||
"in emm_state_attached",
|
||||
mme_ue->imsi_bcd,
|
||||
message->emm.emm_status.emm_cause);
|
||||
FSM_TRAN(s, &emm_state_exception);
|
||||
break;
|
||||
}
|
||||
case NAS_DETACH_REQUEST:
|
||||
|
|
|
|||
|
|
@ -169,8 +169,6 @@ void mme_s11_handle_delete_session_response(
|
|||
|
||||
if (FSM_CHECK(&mme_ue->sm, emm_state_authentication))
|
||||
{
|
||||
d_trace(3,
|
||||
"[MME] Delete Session Response in emm_state_authentication\n");
|
||||
GTP_COUNTER_CHECK(mme_ue, GTP_COUNTER_DELETE_SESSION,
|
||||
CLEAR_SGW_S11_PATH(mme_ue);
|
||||
mme_s6a_send_air(mme_ue, NULL);
|
||||
|
|
@ -180,7 +178,6 @@ void mme_s11_handle_delete_session_response(
|
|||
}
|
||||
else if (FSM_CHECK(&mme_ue->sm, emm_state_detached))
|
||||
{
|
||||
d_trace(3, "[MME] Delete Session Response in emm_state_detached\n");
|
||||
GTP_COUNTER_CHECK(mme_ue, GTP_COUNTER_DELETE_SESSION,
|
||||
CLEAR_SGW_S11_PATH(mme_ue);
|
||||
rv = nas_send_detach_accept(mme_ue);
|
||||
|
|
@ -196,8 +193,6 @@ void mme_s11_handle_delete_session_response(
|
|||
|
||||
if (FSM_CHECK(&bearer->sm, esm_state_pdn_will_disconnect))
|
||||
{
|
||||
d_trace(3, "[MME] Delete Session Response"
|
||||
"in emm_state_detached and esm_state_pdn_will_disconnect\n");
|
||||
GTP_COUNTER_CHECK(mme_ue, GTP_COUNTER_DELETE_SESSION,);
|
||||
|
||||
rv = nas_send_deactivate_bearer_context_request(bearer);
|
||||
|
|
@ -206,8 +201,6 @@ void mme_s11_handle_delete_session_response(
|
|||
}
|
||||
else if (FSM_CHECK(&bearer->sm, esm_state_active))
|
||||
{
|
||||
d_trace(3, "[MME] Delete Session Response"
|
||||
"in emm_state_detached and esm_state_active\n");
|
||||
GTP_COUNTER_CHECK(mme_ue, GTP_COUNTER_DELETE_SESSION,
|
||||
S1ap_Cause_t cause;
|
||||
enb_ue_t *enb_ue = NULL;
|
||||
|
|
@ -227,10 +220,9 @@ void mme_s11_handle_delete_session_response(
|
|||
d_assert(0,, "Invalid ESM state");
|
||||
}
|
||||
}
|
||||
else if (FSM_CHECK(&mme_ue->sm, emm_state_initial_context_setup))
|
||||
else if (FSM_CHECK(&mme_ue->sm, emm_state_initial_context_setup) ||
|
||||
FSM_CHECK(&mme_ue->sm, emm_state_exception))
|
||||
{
|
||||
d_trace(3, "[MME] Delete Session Response "
|
||||
"in emm_state_initial_context_setup\n");
|
||||
GTP_COUNTER_CHECK(mme_ue, GTP_COUNTER_DELETE_SESSION,
|
||||
S1ap_Cause_t cause;
|
||||
enb_ue_t *enb_ue = NULL;
|
||||
|
|
|
|||
|
|
@ -271,7 +271,23 @@ void mme_state_operational(fsm_t *s, event_t *e)
|
|||
fsm_dispatch(&mme_ue->sm, (fsm_event_t*)e);
|
||||
if (FSM_CHECK(&mme_ue->sm, emm_state_exception))
|
||||
{
|
||||
mme_ue_remove(mme_ue);
|
||||
if (MME_HAVE_SGW_S11_PATH(mme_ue))
|
||||
{
|
||||
rv = mme_gtp_send_delete_all_sessions(mme_ue);
|
||||
d_assert(rv == CORE_OK, pkbuf_free(pkbuf); break,
|
||||
"gtp send failed");
|
||||
}
|
||||
else
|
||||
{
|
||||
S1ap_Cause_t cause;
|
||||
|
||||
cause.present = S1ap_Cause_PR_nas;
|
||||
cause.choice.nas = S1ap_CauseNas_normal_release;
|
||||
rv = s1ap_send_ue_context_release_commmand(enb_ue, &cause,
|
||||
S1AP_UE_CTX_REL_REMOVE_MME_UE_CONTEXT, 0);
|
||||
d_assert(rv == CORE_OK, pkbuf_free(pkbuf); break,
|
||||
"s1ap send failed");
|
||||
}
|
||||
}
|
||||
|
||||
pkbuf_free(pkbuf);
|
||||
|
|
|
|||
|
|
@ -150,7 +150,7 @@ status_t nas_security_decode(mme_ue_t *mme_ue,
|
|||
|
||||
if (memcmp(mac + 2, pkbuf->payload + 2, 2) != 0)
|
||||
{
|
||||
d_error("NAS MAC verification failed");
|
||||
d_warn("NAS MAC verification failed");
|
||||
mme_ue->mac_failed = 1;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -570,6 +570,7 @@ static void attach_test2(abts_case *tc, void *data)
|
|||
* Send Initial-UE Message + Attach Request + PDN Connectivity */
|
||||
core_sleep(time_from_msec(300));
|
||||
|
||||
mme_self()->mme_ue_s1ap_id = 0;
|
||||
rv = tests1ap_build_initial_ue_msg(&sendbuf, msgindex);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
rv = tests1ap_enb_send(sock, sendbuf);
|
||||
|
|
@ -634,12 +635,20 @@ static void attach_test2(abts_case *tc, void *data)
|
|||
rv = tests1ap_enb_send(sock, sendbuf);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
|
||||
/* Send EMM Status */
|
||||
rv = tests1ap_build_emm_status(&sendbuf, msgindex);
|
||||
/* Send Attach Complete + Activate default EPS bearer cotext accept */
|
||||
rv = tests1ap_build_attach_complete(&sendbuf, msgindex);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
rv = tests1ap_enb_send(sock, sendbuf);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
|
||||
/* Receive EMM information */
|
||||
recvbuf = pkbuf_alloc(0, MAX_SDU_LEN);
|
||||
rv = tests1ap_enb_read(sock, recvbuf);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
pkbuf_free(recvbuf);
|
||||
|
||||
core_sleep(time_from_msec(300));
|
||||
|
||||
/*****************************************************************
|
||||
* Attach Request : IMSI, Integrity Protected, MAC Matched
|
||||
* Send Initial-UE Message + Attach Request + PDN Connectivity */
|
||||
|
|
@ -1146,6 +1155,7 @@ static void attach_test4(abts_case *tc, void *data)
|
|||
* Send Initial-UE Message + Attach Request + PDN Connectivity */
|
||||
core_sleep(time_from_msec(300));
|
||||
|
||||
mme_self()->mme_ue_s1ap_id = 0;
|
||||
rv = tests1ap_build_initial_ue_msg(&sendbuf, msgindex);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
rv = tests1ap_enb_send(sock, sendbuf);
|
||||
|
|
@ -1181,8 +1191,6 @@ static void attach_test4(abts_case *tc, void *data)
|
|||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
pkbuf_free(recvbuf);
|
||||
|
||||
core_sleep(time_from_msec(300));
|
||||
|
||||
#if 0
|
||||
rv = testgtpu_build_slacc_rs(&sendbuf, 0);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
|
|
@ -1195,6 +1203,26 @@ static void attach_test4(abts_case *tc, void *data)
|
|||
pkbuf_free(recvbuf);
|
||||
#endif
|
||||
|
||||
/* Send EMM Status */
|
||||
rv = tests1ap_build_emm_status(&sendbuf, msgindex);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
rv = tests1ap_enb_send(sock, sendbuf);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
|
||||
/* Receive UE Context Release Command */
|
||||
recvbuf = pkbuf_alloc(0, MAX_SDU_LEN);
|
||||
rv = tests1ap_enb_read(sock, recvbuf);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
pkbuf_free(recvbuf);
|
||||
|
||||
/* Send UE Context Release Complete */
|
||||
rv = tests1ap_build_ue_context_release_complete(&sendbuf, msgindex);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
rv = tests1ap_enb_send(sock, sendbuf);
|
||||
ABTS_INT_EQUAL(tc, CORE_OK, rv);
|
||||
|
||||
core_sleep(time_from_msec(300));
|
||||
|
||||
doc = BCON_NEW("imsi", BCON_UTF8("001010000000002"));
|
||||
ABTS_PTR_NOTNULL(tc, doc);
|
||||
ABTS_TRUE(tc, mongoc_collection_remove(collection,
|
||||
|
|
|
|||
|
|
@ -674,7 +674,9 @@ status_t tests1ap_build_attach_complete(pkbuf_t **pkbuf, int i)
|
|||
"",
|
||||
|
||||
|
||||
"",
|
||||
"000d"
|
||||
"403a000005000000 05c0000000010008 0002001f001a000e 0d27127c47860207"
|
||||
"4300035200c20064 40080000f1101079 baf0004340060000 f1105ba0",
|
||||
"000d"
|
||||
"403a000005000000 05c0010000020008 00020011001a000e 0d27225d92bb0207"
|
||||
"4300035200c20064 40080000f1101079 baf0004340060000 f1105ba0",
|
||||
|
|
@ -700,7 +702,7 @@ status_t tests1ap_build_attach_complete(pkbuf_t **pkbuf, int i)
|
|||
62,
|
||||
0,
|
||||
|
||||
0,
|
||||
62,
|
||||
62,
|
||||
0,
|
||||
|
||||
|
|
@ -730,28 +732,27 @@ status_t tests1ap_build_emm_status(pkbuf_t **pkbuf, int i)
|
|||
"",
|
||||
"",
|
||||
|
||||
"000d403300000500 0000020001000800 02001f001a000a09 27574292cc020760"
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
|
||||
"",
|
||||
"",
|
||||
"000d403300000500 0000020001000800 020001001a000a09 276941dec8020760"
|
||||
"65006440080000f1 10002343d0004340 060000f1103039",
|
||||
|
||||
"",
|
||||
"",
|
||||
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
};
|
||||
c_uint16_t len[TESTS1AP_MAX_MESSAGE] = {
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
|
||||
55,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
55,
|
||||
};
|
||||
char hexbuf[MAX_SDU_LEN];
|
||||
|
||||
|
|
@ -867,7 +868,7 @@ status_t tests1ap_build_ue_context_release_complete(pkbuf_t **pkbuf, int i)
|
|||
"2017"
|
||||
"0012000002000040 05c0020000c80008 40020002",
|
||||
"",
|
||||
"",
|
||||
"2017001200000200 004005c000000001 00084002001f",
|
||||
|
||||
|
||||
"2017"
|
||||
|
|
@ -891,7 +892,7 @@ status_t tests1ap_build_ue_context_release_complete(pkbuf_t **pkbuf, int i)
|
|||
|
||||
22,
|
||||
0,
|
||||
0,
|
||||
22,
|
||||
|
||||
22,
|
||||
22,
|
||||
|
|
@ -1351,7 +1352,7 @@ status_t tests1ap_build_deactivate_bearer_accept(
|
|||
"0500000005c00000 0001000800030001 00001a000a0927a9 a1b2bd057200ce00"
|
||||
"6440080055f50100 19d0100043400600 55f5011022",
|
||||
"000d40370000"
|
||||
"0500000005c00000 0001000800030001 00001a000a09274c b2ebbd056200ce00"
|
||||
"0500000005c00000 0001000800030001 00001a000a09277d 7f1f80056200ce00"
|
||||
"6440080055f50100 19d0100043400600 55f5011022",
|
||||
|
||||
"",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue