[SMF] Remove T_RELEASE_HOLDING timer

This commit is contained in:
Sukchan Lee 2022-03-17 16:07:19 +09:00
parent 7f6f35fe6f
commit 72ecd1c005
6 changed files with 12 additions and 57 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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