forked from acouzens/open5gs
[SMF] Remove T_RELEASE_HOLDING timer
This commit is contained in:
parent
7f6f35fe6f
commit
72ecd1c005
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,12 +746,20 @@ void smf_state_operational(ogs_fsm_t *s, smf_event_t *e)
|
|||
|
||||
sess->pti = nas_message.gsm.h.procedure_transaction_identity;
|
||||
|
||||
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);
|
||||
break;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue