[AMF/MME] No STATE Change for the EMM/GMM-STATUS

This commit is contained in:
Sukchan Lee 2024-02-03 10:14:38 +09:00
parent 47419be650
commit be12610fb6
4 changed files with 109 additions and 40 deletions

View File

@ -1398,9 +1398,8 @@ static void common_register_state(ogs_fsm_t *s, amf_event_t *e,
break;
case OGS_NAS_5GS_5GMM_STATUS:
ogs_warn("[%s] 5GMM STATUS : Cause[%d]", amf_ue->suci,
nas_message->gmm.gmm_status.gmm_cause);
OGS_FSM_TRAN(s, &gmm_state_exception);
ogs_warn("[%s] 5GMM STATUS : Cause[%d]",
amf_ue->suci, nas_message->gmm.gmm_status.gmm_cause);
break;
case OGS_NAS_5GS_DEREGISTRATION_REQUEST_FROM_UE:
@ -1648,7 +1647,6 @@ void gmm_state_authentication(ogs_fsm_t *s, amf_event_t *e)
case OGS_NAS_5GS_5GMM_STATUS:
ogs_warn("[%s] 5GMM STATUS : Cause[%d]",
amf_ue->suci, nas_message->gmm.gmm_status.gmm_cause);
OGS_FSM_TRAN(s, &gmm_state_exception);
break;
case OGS_NAS_5GS_DEREGISTRATION_REQUEST_FROM_UE:
@ -1954,7 +1952,6 @@ void gmm_state_security_mode(ogs_fsm_t *s, amf_event_t *e)
case OGS_NAS_5GS_5GMM_STATUS:
ogs_warn("[%s] 5GMM STATUS : Cause[%d]",
amf_ue->supi, nas_message->gmm.gmm_status.gmm_cause);
OGS_FSM_TRAN(s, &gmm_state_exception);
break;
case OGS_NAS_5GS_DEREGISTRATION_REQUEST_FROM_UE:
@ -2315,7 +2312,6 @@ void gmm_state_initial_context_setup(ogs_fsm_t *s, amf_event_t *e)
case OGS_NAS_5GS_5GMM_STATUS:
ogs_warn("[%s] 5GMM STATUS : Cause[%d]",
amf_ue->supi, nas_message->gmm.gmm_status.gmm_cause);
OGS_FSM_TRAN(s, &gmm_state_exception);
break;
case OGS_NAS_5GS_DEREGISTRATION_REQUEST_FROM_UE:

View File

@ -814,9 +814,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e,
case OGS_NAS_EPS_EMM_STATUS:
ogs_warn("EMM STATUS : IMSI[%s] Cause[%d]",
mme_ue->imsi_bcd,
message->emm.emm_status.emm_cause);
OGS_FSM_TRAN(s, &emm_state_exception);
mme_ue->imsi_bcd, message->emm.emm_status.emm_cause);
break;
case OGS_NAS_EPS_DETACH_REQUEST:
@ -1037,9 +1035,7 @@ void emm_state_authentication(ogs_fsm_t *s, mme_event_t *e)
break;
case OGS_NAS_EPS_EMM_STATUS:
ogs_warn("EMM STATUS : IMSI[%s] Cause[%d]",
mme_ue->imsi_bcd,
message->emm.emm_status.emm_cause);
OGS_FSM_TRAN(s, &emm_state_exception);
mme_ue->imsi_bcd, message->emm.emm_status.emm_cause);
break;
case OGS_NAS_EPS_DETACH_REQUEST:
ogs_warn("[%s] Detach request", mme_ue->imsi_bcd);
@ -1251,9 +1247,7 @@ void emm_state_security_mode(ogs_fsm_t *s, mme_event_t *e)
break;
case OGS_NAS_EPS_EMM_STATUS:
ogs_warn("EMM STATUS : IMSI[%s] Cause[%d]",
mme_ue->imsi_bcd,
message->emm.emm_status.emm_cause);
OGS_FSM_TRAN(s, &emm_state_exception);
mme_ue->imsi_bcd, message->emm.emm_status.emm_cause);
break;
case OGS_NAS_EPS_DETACH_REQUEST:
ogs_warn("[%s] Detach request", mme_ue->imsi_bcd);
@ -1503,9 +1497,7 @@ void emm_state_initial_context_setup(ogs_fsm_t *s, mme_event_t *e)
case OGS_NAS_EPS_EMM_STATUS:
ogs_warn("EMM STATUS : IMSI[%s] Cause[%d]",
mme_ue->imsi_bcd,
message->emm.emm_status.emm_cause);
OGS_FSM_TRAN(s, &emm_state_exception);
mme_ue->imsi_bcd, message->emm.emm_status.emm_cause);
break;
case OGS_NAS_EPS_DETACH_REQUEST:
ogs_warn("[%s] Detach request", mme_ue->imsi_bcd);

View File

@ -35,6 +35,9 @@ static void test1_func(abts_case *tc, void *data)
test_sess_t *sess = NULL;
test_bearer_t *bearer = NULL;
uint32_t enb_ue_s1ap_id;
uint64_t mme_ue_s1ap_id;
bson_t *doc = NULL;
/* Setup Test UE & Session Context */
@ -53,7 +56,7 @@ static void test1_func(abts_case *tc, void *data)
ogs_assert(test_ue);
test_ue->e_cgi.cell_id = 0x1079baf0;
test_ue->nas.ksi = OGS_NAS_KSI_NO_KEY_IS_AVAILABLE;
test_ue->nas.ksi = 0;
test_ue->nas.value = OGS_NAS_ATTACH_TYPE_COMBINED_EPS_IMSI_ATTACH;
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
@ -88,7 +91,9 @@ static void test1_func(abts_case *tc, void *data)
ABTS_INT_EQUAL(tc, OGS_OK, test_db_insert_ue(test_ue, doc));
/* Send Attach Request */
sess->pdn_connectivity_param.pco = 1;
memset(&sess->pdn_connectivity_param,
0, sizeof(sess->pdn_connectivity_param));
sess->pdn_connectivity_param.eit = 1;
sess->pdn_connectivity_param.request_type =
OGS_NAS_EPS_REQUEST_TYPE_INITIAL;
esmbuf = testesm_build_pdn_connectivity_request(sess, false);
@ -101,9 +106,10 @@ static void test1_func(abts_case *tc, void *data)
test_ue->attach_request_param.tmsi_status = 1;
test_ue->attach_request_param.mobile_station_classmark_2 = 1;
test_ue->attach_request_param.ue_usage_setting = 1;
emmbuf = testemm_build_attach_request(test_ue, esmbuf, false, false);
emmbuf = testemm_build_attach_request(test_ue, esmbuf, true, false);
ABTS_PTR_NOTNULL(tc, emmbuf);
memset(&test_ue->initial_ue_param, 0, sizeof(test_ue->initial_ue_param));
sendbuf = test_s1ap_build_initial_ue_message(
test_ue, emmbuf, S1AP_RRC_Establishment_Cause_mo_Signalling, false);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
@ -137,6 +143,20 @@ static void test1_func(abts_case *tc, void *data)
rv = testenb_s1ap_send(s1ap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
/* Receive ESM Information Request */
recvbuf = testenb_s1ap_read(s1ap);
ABTS_PTR_NOTNULL(tc, recvbuf);
tests1ap_recv(test_ue, recvbuf);
/* Send ESM Information Response */
sess->esm_information_param.epco = 1;
esmbuf = testesm_build_esm_information_response(sess);
ABTS_PTR_NOTNULL(tc, esmbuf);
sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf);
ABTS_PTR_NOTNULL(tc, sendbuf);
rv = testenb_s1ap_send(s1ap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
/* Receive Initial Context Setup Request +
* Attach Accept +
* Activate Default Bearer Context Request */
@ -153,6 +173,44 @@ static void test1_func(abts_case *tc, void *data)
rv = testenb_s1ap_send(s1ap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
/* Send UE Capability Info Indication */
sendbuf = tests1ap_build_ue_radio_capability_info_indication(test_ue);
ABTS_PTR_NOTNULL(tc, sendbuf);
rv = testenb_s1ap_send(s1ap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
/* Send Initial Context Setup Response */
sendbuf = test_s1ap_build_initial_context_setup_response(test_ue);
ABTS_PTR_NOTNULL(tc, sendbuf);
rv = testenb_s1ap_send(s1ap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
/* Send Attach Complete + Activate default EPS bearer cotext accept */
test_ue->nr_cgi.cell_id = 0x1234502;
bearer = test_bearer_find_by_ue_ebi(test_ue, 5);
ogs_assert(bearer);
esmbuf = testesm_build_activate_default_eps_bearer_context_accept(
bearer, false);
ABTS_PTR_NOTNULL(tc, esmbuf);
emmbuf = testemm_build_attach_complete(test_ue, esmbuf);
ABTS_PTR_NOTNULL(tc, emmbuf);
sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, emmbuf);
ABTS_PTR_NOTNULL(tc, sendbuf);
rv = testenb_s1ap_send(s1ap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
/* Receive EMM information */
recvbuf = testenb_s1ap_read(s1ap);
ABTS_PTR_NOTNULL(tc, recvbuf);
tests1ap_recv(test_ue, recvbuf);
/* Send UE Context Release Request */
sendbuf = test_s1ap_build_ue_context_release_request(test_ue,
S1AP_Cause_PR_radioNetwork, S1AP_CauseRadioNetwork_user_inactivity);
ABTS_PTR_NOTNULL(tc, sendbuf);
rv = testenb_s1ap_send(s1ap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
/* Receive UE Context Release Command */
recvbuf = testenb_s1ap_read(s1ap);
ABTS_PTR_NOTNULL(tc, recvbuf);

View File

@ -73,7 +73,7 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, gtpu);
/* Send NG-Setup Reqeust */
sendbuf = testngap_build_ng_setup_request(0x4000, 28);
sendbuf = testngap_build_ng_setup_request(0x4000, 22);
ABTS_PTR_NOTNULL(tc, sendbuf);
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
@ -89,6 +89,7 @@ static void test1_func(abts_case *tc, void *data)
ABTS_INT_EQUAL(tc, OGS_OK, test_db_insert_ue(test_ue, doc));
/* Send Registration request */
test_ue->registration_request_param.guti = 1;
gmmbuf = testgmm_build_registration_request(test_ue, NULL, false, false);
ABTS_PTR_NOTNULL(tc, gmmbuf);
@ -106,6 +107,19 @@ static void test1_func(abts_case *tc, void *data)
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
/* Receive Identity request */
recvbuf = testgnb_ngap_read(ngap);
ABTS_PTR_NOTNULL(tc, recvbuf);
testngap_recv(test_ue, recvbuf);
/* Send Identity response */
gmmbuf = testgmm_build_identity_response(test_ue);
ABTS_PTR_NOTNULL(tc, gmmbuf);
sendbuf = testngap_build_uplink_nas_transport(test_ue, gmmbuf);
ABTS_PTR_NOTNULL(tc, sendbuf);
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
/* Receive Authentication request */
recvbuf = testgnb_ngap_read(ngap);
ABTS_PTR_NOTNULL(tc, recvbuf);
@ -132,6 +146,15 @@ static void test1_func(abts_case *tc, void *data)
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
/* Send GMM Status */
gmmbuf = testgmm_build_gmm_status(test_ue,
OGS_5GMM_CAUSE_MESSAGE_NOT_COMPATIBLE_WITH_THE_PROTOCOL_STATE);
ABTS_PTR_NOTNULL(tc, gmmbuf);
sendbuf = testngap_build_uplink_nas_transport(test_ue, gmmbuf);
ABTS_PTR_NOTNULL(tc, sendbuf);
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
/* Receive InitialContextSetupRequest +
* Registration accept */
recvbuf = testgnb_ngap_read(ngap);
@ -141,6 +164,12 @@ static void test1_func(abts_case *tc, void *data)
NGAP_ProcedureCode_id_InitialContextSetup,
test_ue->ngap_procedure_code);
/* Send UERadioCapabilityInfoIndication */
sendbuf = testngap_build_ue_radio_capability_info_indication(test_ue);
ABTS_PTR_NOTNULL(tc, sendbuf);
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
/* Send InitialContextSetupResponse */
sendbuf = testngap_build_initial_context_setup_response(test_ue, false);
ABTS_PTR_NOTNULL(tc, sendbuf);
@ -167,7 +196,7 @@ static void test1_func(abts_case *tc, void *data)
sess->ul_nas_transport_param.request_type =
OGS_NAS_5GS_REQUEST_TYPE_INITIAL;
sess->ul_nas_transport_param.dnn = 1;
sess->ul_nas_transport_param.s_nssai = 1;
sess->ul_nas_transport_param.s_nssai = 0;
sess->pdu_session_establishment_param.ssc_mode = 1;
sess->pdu_session_establishment_param.epco = 1;
@ -192,24 +221,16 @@ static void test1_func(abts_case *tc, void *data)
NGAP_ProcedureCode_id_PDUSessionResourceSetup,
test_ue->ngap_procedure_code);
/*
* Related to issue #536. When running with VirtualBox 1 Core,
* AMF sends namf-callback response very late. In SMF,
* the Session context has already been removed, so an assertion occurs.
*
* It seems to be related to the response part of MHD. We will check
* if the same situation occurs after upgrading to nghttp2.
*
* If this issue still occurs on nghttp2,
* I will remove the assertion from SMF.
*/
ogs_msleep(100);
/* Send PDUSessionResourceSetupResponse */
sendbuf = testngap_sess_build_pdu_session_resource_setup_response(sess);
ABTS_PTR_NOTNULL(tc, sendbuf);
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
/* Send GMM Status */
gmmbuf = testgmm_build_gmm_status(test_ue,
OGS_5GMM_CAUSE_MESSAGE_NOT_COMPATIBLE_WITH_THE_PROTOCOL_STATE);
ABTS_PTR_NOTNULL(tc, gmmbuf);
sendbuf = testngap_build_uplink_nas_transport(test_ue, gmmbuf);
/* Send UEContextReleaseRequest */
sendbuf = testngap_build_ue_context_release_request(test_ue,
NGAP_Cause_PR_radioNetwork, NGAP_CauseRadioNetwork_user_inactivity,
true);
ABTS_PTR_NOTNULL(tc, sendbuf);
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
@ -228,6 +249,8 @@ static void test1_func(abts_case *tc, void *data)
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(300);
/********** Remove Subscriber in Database */
ABTS_INT_EQUAL(tc, OGS_OK, test_db_remove_ue(test_ue));