diff --git a/lib/sbi/ogs-sbi.h b/lib/sbi/ogs-sbi.h index f5430b202..cce262f48 100644 --- a/lib/sbi/ogs-sbi.h +++ b/lib/sbi/ogs-sbi.h @@ -28,6 +28,8 @@ #pragma GCC diagnostic ignored "-Wstrict-prototypes" #endif +#define OGS_SBI_DISABLE_NETWORK_SERVICE_REQUEST_WHILE_ACTIVATING 1 + #include "model/nf_profile.h" #include "model/nf_group_cond.h" #include "model/smf_info.h" diff --git a/src/smf/context.h b/src/smf/context.h index 2429a3138..dfdf4cd36 100644 --- a/src/smf/context.h +++ b/src/smf/context.h @@ -365,7 +365,6 @@ typedef struct smf_sess_s { /* Paging */ struct { - bool ue_requested_pdu_session_establishment_done; char *n1n2message_location; } paging; diff --git a/src/smf/n4-handler.c b/src/smf/n4-handler.c index c92409304..639a22a0a 100644 --- a/src/smf/n4-handler.c +++ b/src/smf/n4-handler.c @@ -396,8 +396,6 @@ void smf_5gc_n4_handle_session_modification_response( sess, stream, OpenAPI_ho_state_COMPLETED); } else { - sess->paging.ue_requested_pdu_session_establishment_done = true; - if (sess->up_cnx_state == OpenAPI_up_cnx_state_ACTIVATING) { sess->up_cnx_state = OpenAPI_up_cnx_state_ACTIVATED; smf_sbi_send_sm_context_updated_data_up_cnx_state( @@ -1195,6 +1193,7 @@ void smf_n4_handle_session_report_request( ogs_pfcp_downlink_data_service_information_t *info = NULL; uint8_t paging_policy_indication_value = 0; uint8_t qfi = 0; + smf_n1_n2_message_transfer_param_t param; if (pfcp_req->downlink_data_report.presence) { if (pfcp_req->downlink_data_report. @@ -1259,9 +1258,21 @@ void smf_n4_handle_session_report_request( return; } - if (sess->paging.ue_requested_pdu_session_establishment_done == true) { - smf_n1_n2_message_transfer_param_t param; - + switch (sess->up_cnx_state) { + case OpenAPI_up_cnx_state_NULL: + /* UE Requested PDU Session is NOT established */ + break; + case OpenAPI_up_cnx_state_ACTIVATED: + ogs_error("[%s:%s] PDU Session had already been ACTIVATED", + smf_ue->imsi_bcd, sess->session.name); + break; + case OpenAPI_up_cnx_state_ACTIVATING: +#if OGS_SBI_DISABLE_NETWORK_SERVICE_REQUEST_WHILE_ACTIVATING == 1 + ogs_warn("[%s:%s] UE is being triggering Service Request", + smf_ue->imsi_bcd, sess->session.name); + break; +#endif + case OpenAPI_up_cnx_state_DEACTIVATED: memset(¶m, 0, sizeof(param)); param.state = SMF_NETWORK_TRIGGERED_SERVICE_REQUEST; param.n2smbuf = @@ -1271,6 +1282,14 @@ void smf_n4_handle_session_report_request( param.n1n2_failure_txf_notif_uri = true; smf_namf_comm_send_n1_n2_message_transfer(sess, ¶m); + break; + case OpenAPI_up_cnx_state_SUSPENDED: + ogs_error("[%s:%s] PDU Session had been SUSPENDED", + smf_ue->imsi_bcd, sess->session.name); + break; + default: + ogs_error("Invalid UpCnxState[%d]", sess->up_cnx_state); + break; } } diff --git a/tests/registration/paging-test.c b/tests/registration/paging-test.c index 7d930e266..d601095ec 100644 --- a/tests/registration/paging-test.c +++ b/tests/registration/paging-test.c @@ -858,6 +858,7 @@ static void cm_connected_paging_func(abts_case *tc, void *data) rv = testgnb_ngap_send(ngap, sendbuf); ABTS_INT_EQUAL(tc, OGS_OK, rv); +#if OGS_SBI_DISABLE_NETWORK_SERVICE_REQUEST_WHILE_ACTIVATING == 0 /* Receive PDUSessionResourceSetupRequest + * DL NAS transport + * PDU session establishment accept */ @@ -867,12 +868,14 @@ static void cm_connected_paging_func(abts_case *tc, void *data) ABTS_INT_EQUAL(tc, NGAP_ProcedureCode_id_PDUSessionResourceSetup, test_ue->ngap_procedure_code); +#endif /* Receive GTP-U ICMP Packet */ recvbuf = testgnb_gtpu_read(gtpu); ABTS_PTR_NOTNULL(tc, recvbuf); ogs_pkbuf_free(recvbuf); +#if OGS_SBI_DISABLE_NETWORK_SERVICE_REQUEST_WHILE_ACTIVATING == 0 /* Send PDUSessionResourceSetupResponse(Unsuccessful) */ sendbuf = testngap_sess_build_pdu_session_resource_failed_to_setup( sess, @@ -881,6 +884,7 @@ static void cm_connected_paging_func(abts_case *tc, void *data) ABTS_PTR_NOTNULL(tc, sendbuf); rv = testgnb_ngap_send(ngap, sendbuf); ABTS_INT_EQUAL(tc, OGS_OK, rv); +#endif /* Send GTP-U ICMP Packet */ rv = test_gtpu_send_ping(gtpu, qos_flow, TEST_PING_IPV4); @@ -891,6 +895,16 @@ static void cm_connected_paging_func(abts_case *tc, void *data) ABTS_PTR_NOTNULL(tc, recvbuf); ogs_pkbuf_free(recvbuf); +#if OGS_SBI_DISABLE_NETWORK_SERVICE_REQUEST_WHILE_ACTIVATING == 1 + /* 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); +#endif + /* Receive UEContextReleaseCommand */ recvbuf = testgnb_ngap_read(ngap); ABTS_PTR_NOTNULL(tc, recvbuf); @@ -1867,6 +1881,7 @@ static void vonr_qos_flow_test1_func(abts_case *tc, void *data) ABTS_PTR_NOTNULL(tc, recvbuf); ogs_pkbuf_free(recvbuf); +#if OGS_SBI_DISABLE_NETWORK_SERVICE_REQUEST_WHILE_ACTIVATING == 0 /* Receive PDUSessionResourceSetupRequest */ recvbuf = testgnb_ngap_read(ngap); ABTS_PTR_NOTNULL(tc, recvbuf); @@ -1880,6 +1895,7 @@ static void vonr_qos_flow_test1_func(abts_case *tc, void *data) ABTS_PTR_NOTNULL(tc, sendbuf); rv = testgnb_ngap_send(ngap, sendbuf); ABTS_INT_EQUAL(tc, OGS_OK, rv); +#endif /* Send GTP-U ICMP Packet */ rv = test_gtpu_send_ping(gtpu, qos_flow, TEST_PING_IPV4); @@ -2304,6 +2320,7 @@ static void vonr_session_test2_func(abts_case *tc, void *data) ABTS_PTR_NOTNULL(tc, recvbuf); ogs_pkbuf_free(recvbuf); +#if OGS_SBI_DISABLE_NETWORK_SERVICE_REQUEST_WHILE_ACTIVATING == 0 /* Receive PDUSessionResourceSetupRequest */ recvbuf = testgnb_ngap_read(ngap); ABTS_PTR_NOTNULL(tc, recvbuf); @@ -2317,6 +2334,7 @@ static void vonr_session_test2_func(abts_case *tc, void *data) ABTS_PTR_NOTNULL(tc, sendbuf); rv = testgnb_ngap_send(ngap, sendbuf); ABTS_INT_EQUAL(tc, OGS_OK, rv); +#endif /* Send GTP-U ICMP Packet */ rv = test_gtpu_send_ping(gtpu, qos_flow, TEST_PING_IPV4); @@ -2742,6 +2760,7 @@ static void registration_ue_context_test4_func(abts_case *tc, void *data) rv = test_gtpu_send_ping(gtpu, qos_flow, TEST_PING_IPV4); ABTS_INT_EQUAL(tc, OGS_OK, rv); +#if OGS_SBI_DISABLE_NETWORK_SERVICE_REQUEST_WHILE_ACTIVATING == 0 /* Receive PDUSessionResourceSetupRequest */ recvbuf = testgnb_ngap_read(ngap); ABTS_PTR_NOTNULL(tc, recvbuf); @@ -2749,6 +2768,7 @@ static void registration_ue_context_test4_func(abts_case *tc, void *data) ABTS_INT_EQUAL(tc, NGAP_ProcedureCode_id_PDUSessionResourceSetup, test_ue->ngap_procedure_code); +#endif /* Send InitialContextSetupResponse */ sendbuf = testngap_build_initial_context_setup_response(test_ue, true); @@ -2756,11 +2776,13 @@ static void registration_ue_context_test4_func(abts_case *tc, void *data) rv = testgnb_ngap_send(ngap, sendbuf); ABTS_INT_EQUAL(tc, OGS_OK, rv); +#if OGS_SBI_DISABLE_NETWORK_SERVICE_REQUEST_WHILE_ACTIVATING == 0 /* Send PDUSessionResourceSetupResponse */ sendbuf = testngap_ue_build_pdu_session_resource_setup_response(test_ue); ABTS_PTR_NOTNULL(tc, sendbuf); rv = testgnb_ngap_send(ngap, sendbuf); ABTS_INT_EQUAL(tc, OGS_OK, rv); +#endif /* Receive GTP-U ICMP Packet */ recvbuf = testgnb_gtpu_read(gtpu); @@ -3171,6 +3193,7 @@ static void registration_idle_test1_func(abts_case *tc, void *data) rv = test_gtpu_send_ping(gtpu, qos_flow, TEST_PING_IPV4); ABTS_INT_EQUAL(tc, OGS_OK, rv); +#if OGS_SBI_DISABLE_NETWORK_SERVICE_REQUEST_WHILE_ACTIVATING == 0 /* Receive PDUSessionResourceSetupRequest */ recvbuf = testgnb_ngap_read(ngap); ABTS_PTR_NOTNULL(tc, recvbuf); @@ -3178,6 +3201,7 @@ static void registration_idle_test1_func(abts_case *tc, void *data) ABTS_INT_EQUAL(tc, NGAP_ProcedureCode_id_PDUSessionResourceSetup, test_ue->ngap_procedure_code); +#endif /* Send InitialContextSetupResponse */ sendbuf = testngap_build_initial_context_setup_response(test_ue, true); @@ -3185,11 +3209,13 @@ static void registration_idle_test1_func(abts_case *tc, void *data) rv = testgnb_ngap_send(ngap, sendbuf); ABTS_INT_EQUAL(tc, OGS_OK, rv); +#if OGS_SBI_DISABLE_NETWORK_SERVICE_REQUEST_WHILE_ACTIVATING == 0 /* 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); +#endif /* Receive GTP-U ICMP Packet */ recvbuf = testgnb_gtpu_read(gtpu);