From 72ecd1c0052a55d8aefb645eb2c3e7c64057caae Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Thu, 17 Mar 2022 16:07:19 +0900 Subject: [PATCH] [SMF] Remove T_RELEASE_HOLDING timer --- src/smf/context.c | 10 ---------- src/smf/context.h | 3 --- src/smf/gsm-sm.c | 20 -------------------- src/smf/smf-sm.c | 26 ++++++++++++-------------- src/smf/timer.c | 8 -------- src/smf/timer.h | 2 -- 6 files changed, 12 insertions(+), 57 deletions(-) diff --git a/src/smf/context.c b/src/smf/context.c index 0a9925e29..e26a91ca3 100644 --- a/src/smf/context.c +++ b/src/smf/context.c @@ -1005,10 +1005,6 @@ smf_sess_t *smf_sess_add_by_apn(smf_ue_t *smf_ue, char *apn, uint8_t rat_type) sess->gtp_rat_type = rat_type; ogs_assert(sess->gtp_rat_type); - /* Setup Timer */ - sess->t_release_holding = ogs_timer_add( - ogs_app()->timer_mgr, smf_timer_release_holding_expire, sess); - memset(&e, 0, sizeof(e)); e.sess = sess; ogs_fsm_create(&sess->sm, smf_gsm_state_initial, smf_gsm_state_final); @@ -1215,10 +1211,6 @@ smf_sess_t *smf_sess_add_by_psi(smf_ue_t *smf_ue, uint8_t psi) /* Set Charging Id */ sess->charging.id = sess->index; - /* Setup Timer */ - sess->t_release_holding = ogs_timer_add( - ogs_app()->timer_mgr, smf_timer_release_holding_expire, sess); - memset(&e, 0, sizeof(e)); e.sess = sess; ogs_fsm_create(&sess->sm, smf_gsm_state_initial, smf_gsm_state_final); @@ -1562,8 +1554,6 @@ void smf_sess_remove(smf_sess_t *sess) /* Free SBI object memory */ ogs_sbi_object_free(&sess->sbi); - ogs_timer_delete(sess->t_release_holding); - smf_bearer_remove_all(sess); ogs_assert(sess->pfcp.bar); diff --git a/src/smf/context.h b/src/smf/context.h index 816d744e5..3ce15b93a 100644 --- a/src/smf/context.h +++ b/src/smf/context.h @@ -306,9 +306,6 @@ typedef struct smf_sess_s { char *n1n2message_location; } paging; - /* Release Holding timer of SMF session context */ - ogs_timer_t *t_release_holding; - /* State */ #define SMF_NGAP_STATE_NONE 0 #define SMF_NGAP_STATE_DELETE_TRIGGER_UE_REQUESTED 1 diff --git a/src/smf/gsm-sm.c b/src/smf/gsm-sm.c index 118e33a31..68f20cf45 100644 --- a/src/smf/gsm-sm.c +++ b/src/smf/gsm-sm.c @@ -311,26 +311,6 @@ void smf_gsm_state_operational(ogs_fsm_t *s, smf_event_t *e) } break; - case OGS_NAS_5GS_PDU_SESSION_RELEASE_COMPLETE: - ogs_assert(true == ogs_sbi_send_http_status_no_content(stream)); - - /* - * Race condition for PDU session release complete - * - CLIENT : /nsmf-pdusession/v1/sm-contexts/{smContextRef}/modify - * - SERVER : /namf-callback/v1/{supi}/sm-context-status/{psi}) - * - * ogs_sbi_send_http_status_no_content(stream); - * smf_sbi_send_sm_context_status_notify(sess); - * - * When executed as above, - * NOTIFY transmits first, and Modify's Response transmits later. - * - * Use the Release Timer to send Notify - * later than Modify's Response. - */ - ogs_timer_start(sess->t_release_holding, ogs_time_from_msec(1)); - break; - default: strerror = ogs_msprintf("Unknown message [%d]", nas_message->gsm.h.message_type); diff --git a/src/smf/smf-sm.c b/src/smf/smf-sm.c index beb82eb76..68ef56279 100644 --- a/src/smf/smf-sm.c +++ b/src/smf/smf-sm.c @@ -721,16 +721,6 @@ void smf_state_operational(ogs_fsm_t *s, smf_event_t *e) } break; - case SMF_TIMER_RELEASE_HOLDING: - sess = e->sbi.data; - ogs_assert(sess); - sess = smf_sess_cycle(sess); - ogs_assert(sess); - - ogs_assert(true == smf_sbi_send_sm_context_status_notify(sess)); - SMF_SESS_CLEAR(sess); - break; - default: ogs_error("Unknown timer[%s:%d]", smf_timer_get_name(e->timer_id), e->timer_id); @@ -756,11 +746,19 @@ void smf_state_operational(ogs_fsm_t *s, smf_event_t *e) sess->pti = nas_message.gsm.h.procedure_transaction_identity; - e->nas.message = &nas_message; - ogs_fsm_dispatch(&sess->sm, e); - if (OGS_FSM_CHECK(&sess->sm, smf_gsm_state_exception)) { - ogs_error("State machine exception"); + switch (nas_message.gsm.h.message_type) { + case OGS_NAS_5GS_PDU_SESSION_RELEASE_COMPLETE: + ogs_assert(true == ogs_sbi_send_http_status_no_content(stream)); + ogs_assert(true == smf_sbi_send_sm_context_status_notify(sess)); SMF_SESS_CLEAR(sess); + break; + default: + e->nas.message = &nas_message; + ogs_fsm_dispatch(&sess->sm, e); + if (OGS_FSM_CHECK(&sess->sm, smf_gsm_state_exception)) { + ogs_error("State machine exception"); + SMF_SESS_CLEAR(sess); + } } ogs_pkbuf_free(pkbuf); diff --git a/src/smf/timer.c b/src/smf/timer.c index f640c7681..b25ac204c 100644 --- a/src/smf/timer.c +++ b/src/smf/timer.c @@ -40,8 +40,6 @@ const char *smf_timer_get_name(smf_timer_e id) return "SMF_TIMER_SUBSCRIPTION_VALIDITY"; case SMF_TIMER_SBI_CLIENT_WAIT: return "SMF_TIMER_SBI_CLIENT_WAIT"; - case SMF_TIMER_RELEASE_HOLDING: - return "SMF_TIMER_RELEASE_HOLDING"; default: break; } @@ -68,7 +66,6 @@ static void timer_send_event(int timer_id, void *data) case SMF_TIMER_NF_INSTANCE_NO_HEARTBEAT: case SMF_TIMER_NF_INSTANCE_VALIDITY: case SMF_TIMER_SUBSCRIPTION_VALIDITY: - case SMF_TIMER_RELEASE_HOLDING: e = smf_event_new(SMF_EVT_SBI_TIMER); ogs_assert(e); e->timer_id = timer_id; @@ -140,8 +137,3 @@ void smf_timer_sbi_client_wait_expire(void *data) { timer_send_event(SMF_TIMER_SBI_CLIENT_WAIT, data); } - -void smf_timer_release_holding_expire(void *data) -{ - timer_send_event(SMF_TIMER_RELEASE_HOLDING, data); -} diff --git a/src/smf/timer.h b/src/smf/timer.h index 785524c02..bf0f76b94 100644 --- a/src/smf/timer.h +++ b/src/smf/timer.h @@ -39,7 +39,6 @@ typedef enum { SMF_TIMER_NF_INSTANCE_VALIDITY, SMF_TIMER_SUBSCRIPTION_VALIDITY, SMF_TIMER_SBI_CLIENT_WAIT, - SMF_TIMER_RELEASE_HOLDING, MAX_NUM_OF_SMF_TIMER, @@ -56,7 +55,6 @@ void smf_timer_nf_instance_no_heartbeat(void *data); void smf_timer_nf_instance_validity(void *data); void smf_timer_subscription_validity(void *data); void smf_timer_sbi_client_wait_expire(void *data); -void smf_timer_release_holding_expire(void *data); #ifdef __cplusplus }