[SMF] Disable Network Service request while ACTIVATING

Disable Network triggered service request
while UE triggered service request

(#2294)
This commit is contained in:
Sukchan Lee 2023-05-06 18:00:57 +09:00
parent 4265b2a2bc
commit 7ce1137a10
4 changed files with 52 additions and 6 deletions

View File

@ -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"

View File

@ -365,7 +365,6 @@ typedef struct smf_sess_s {
/* Paging */
struct {
bool ue_requested_pdu_session_establishment_done;
char *n1n2message_location;
} paging;

View File

@ -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(&param, 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, &param);
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;
}
}

View File

@ -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);