diff --git a/src/amf/gmm-sm.c b/src/amf/gmm-sm.c index 9b4b42f39..6231e633c 100644 --- a/src/amf/gmm-sm.c +++ b/src/amf/gmm-sm.c @@ -1475,20 +1475,6 @@ static void common_register_state(ogs_fsm_t *s, amf_event_t *e, break; case OGS_NAS_5GS_IDENTITY_RESPONSE: - if (amf_ue->nas.message_type != OGS_NAS_5GS_REGISTRATION_REQUEST && - amf_ue->nas.message_type != OGS_NAS_5GS_SERVICE_REQUEST) { - ogs_error( - "No Received Registration Request or Service Request"); - r = ngap_send_error_indication2( - ran_ue, - NGAP_Cause_PR_protocol, - NGAP_CauseProtocol_semantic_error); - ogs_expect(r == OGS_OK); - ogs_assert(r != OGS_ERROR); - OGS_FSM_TRAN(s, gmm_state_exception); - break; - } - CLEAR_AMF_UE_TIMER(amf_ue->t3570); ogs_info("Identity response"); @@ -1498,7 +1484,17 @@ static void common_register_state(ogs_fsm_t *s, amf_event_t *e, ogs_error("gmm_handle_identity_response() " "failed [%d] in type [%d]", gmm_cause, amf_ue->nas.message_type); - r = nas_5gs_send_gmm_reject(ran_ue, amf_ue, gmm_cause); + if (amf_ue->nas.message_type == + OGS_NAS_5GS_REGISTRATION_REQUEST || + amf_ue->nas.message_type == + OGS_NAS_5GS_SERVICE_REQUEST) + r = nas_5gs_send_gmm_reject(ran_ue, amf_ue, gmm_cause); + else + r = ngap_send_error_indication2( + ran_ue, + NGAP_Cause_PR_protocol, + NGAP_CauseProtocol_semantic_error); + ogs_expect(r == OGS_OK); ogs_assert(r != OGS_ERROR); OGS_FSM_TRAN(s, gmm_state_exception); diff --git a/tests/common/ngap-build.c b/tests/common/ngap-build.c index 03a311173..82e837b46 100644 --- a/tests/common/ngap-build.c +++ b/tests/common/ngap-build.c @@ -2669,17 +2669,14 @@ ogs_pkbuf_t *test_ngap_build_malformed_initial_ue_message(int i) "000f007300000700 5500034002000026 001d1c0602940a5f 7f5f7e105c000209" "00007fff00000000 004c4c585f4e5f00 79000f405f7a8a1f 58755ff001940078" "954e005a40012800 0340025fc0007040 010000ab4021205f 5f5f5f4f3d7fff10" - "de5f5f765f000000 0000000000000000 00000000000000", - "000f" - "4049000005005500 0200030026001b1a 7e049a2167e5027e 005c000d0199f907" - "00000000c0000000 0010007900135099 f907000000010099 f907000001e9b19f" - "fa005a4001180070 400100", + "de5f5f765f000000 0000000000000000 00000000000000" + "", "", }; uint16_t len[TEST_NGAP_MAX_MESSAGE] = { 119, - 77, + 0, 0, }; char hexbuf[OGS_HUGE_LEN]; diff --git a/tests/registration/identity-test.c b/tests/registration/identity-test.c index 46d132cdc..6b8de0585 100644 --- a/tests/registration/identity-test.c +++ b/tests/registration/identity-test.c @@ -354,128 +354,11 @@ static void test1_func(abts_case *tc, void *data) test_ue_remove(test_ue); } -static void test2_func(abts_case *tc, void *data) -{ - int rv; - ogs_socknode_t *ngap; - ogs_socknode_t *gtpu; - ogs_pkbuf_t *gmmbuf; - ogs_pkbuf_t *gsmbuf; - ogs_pkbuf_t *nasbuf; - ogs_pkbuf_t *sendbuf; - ogs_pkbuf_t *recvbuf; - ogs_ngap_message_t message; - int i; - - ogs_nas_5gs_mobile_identity_suci_t mobile_identity_suci; - test_ue_t *test_ue = NULL; - test_sess_t *sess = NULL; - test_bearer_t *qos_flow = NULL; - - bson_t *doc = NULL; - - /* Setup Test UE & Session Context */ - memset(&mobile_identity_suci, 0, sizeof(mobile_identity_suci)); - - mobile_identity_suci.h.supi_format = OGS_NAS_5GS_SUPI_FORMAT_IMSI; - mobile_identity_suci.h.type = OGS_NAS_5GS_MOBILE_IDENTITY_SUCI; - mobile_identity_suci.routing_indicator1 = 0; - mobile_identity_suci.routing_indicator2 = 0xf; - mobile_identity_suci.routing_indicator3 = 0xf; - mobile_identity_suci.routing_indicator4 = 0xf; - mobile_identity_suci.protection_scheme_id = OGS_PROTECTION_SCHEME_NULL; - mobile_identity_suci.home_network_pki_value = 0; - - test_ue = test_ue_add_by_suci(&mobile_identity_suci, "0000203190"); - ogs_assert(test_ue); - - test_ue->nr_cgi.cell_id = 0x40001; - - test_ue->nas.registration.tsc = 0; - test_ue->nas.registration.ksi = OGS_NAS_KSI_NO_KEY_IS_AVAILABLE; - test_ue->nas.registration.follow_on_request = 1; - test_ue->nas.registration.value = OGS_NAS_5GS_REGISTRATION_TYPE_INITIAL; - - test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc"; - test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca"; - - /* gNB connects to AMF */ - ngap = testngap_client(AF_INET); - ABTS_PTR_NOTNULL(tc, ngap); - - /* gNB connects to UPF */ - gtpu = test_gtpu_server(1, AF_INET); - ABTS_PTR_NOTNULL(tc, gtpu); - - /* Send NG-Setup Reqeust */ - sendbuf = testngap_build_ng_setup_request(0x4000, 29); - ABTS_PTR_NOTNULL(tc, sendbuf); - rv = testgnb_ngap_send(ngap, sendbuf); - ABTS_INT_EQUAL(tc, OGS_OK, rv); - - /* Receive NG-Setup Response */ - recvbuf = testgnb_ngap_read(ngap); - ABTS_PTR_NOTNULL(tc, recvbuf); - testngap_recv(test_ue, recvbuf); - - /********** Insert Subscriber in Database */ - doc = test_db_new_simple(test_ue); - ABTS_PTR_NOTNULL(tc, doc); - ABTS_INT_EQUAL(tc, OGS_OK, test_db_insert_ue(test_ue, doc)); - - /* Send Identity response */ - test_ue->ran_ue_ngap_id = 1; - gmmbuf = testgmm_build_identity_response(test_ue); - ABTS_PTR_NOTNULL(tc, gmmbuf); - sendbuf = testngap_build_initial_ue_message(test_ue, gmmbuf, - NGAP_RRCEstablishmentCause_mo_Signalling, false, true); - ABTS_PTR_NOTNULL(tc, sendbuf); - rv = testgnb_ngap_send(ngap, sendbuf); - ABTS_INT_EQUAL(tc, OGS_OK, rv); - - /* Receive ErrorIndication */ - recvbuf = testgnb_ngap_read(ngap); - ABTS_PTR_NOTNULL(tc, recvbuf); - testngap_recv(test_ue, recvbuf); - ABTS_INT_EQUAL(tc, - NGAP_ProcedureCode_id_ErrorIndication, - test_ue->ngap_procedure_code); - - /* Receive UEContextReleaseCommand */ - recvbuf = testgnb_ngap_read(ngap); - ABTS_PTR_NOTNULL(tc, recvbuf); - testngap_recv(test_ue, recvbuf); - ABTS_INT_EQUAL(tc, - NGAP_ProcedureCode_id_UEContextRelease, - test_ue->ngap_procedure_code); - - /* Send UEContextReleaseComplete */ - sendbuf = testngap_build_ue_context_release_complete(test_ue); - ABTS_PTR_NOTNULL(tc, sendbuf); - 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)); - - /* gNB disonncect from UPF */ - testgnb_gtpu_close(gtpu); - - /* gNB disonncect from AMF */ - testgnb_ngap_close(ngap); - - /* Clear Test UE Context */ - test_ue_remove(test_ue); -} - abts_suite *test_identity(abts_suite *suite) { suite = ADD_SUITE(suite) abts_run_test(suite, test1_func, NULL); - abts_run_test(suite, test2_func, NULL); return suite; }