[#256] Remove timer of NAS message related to S1AP
This commit is contained in:
parent
835b3c9851
commit
a622feac84
|
@ -844,8 +844,6 @@ void emm_state_initial_context_setup(ogs_fsm_t *s, mme_event_t *e)
|
||||||
ogs_debug("[EMM] Attach complete");
|
ogs_debug("[EMM] Attach complete");
|
||||||
ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd);
|
ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd);
|
||||||
|
|
||||||
CLEAR_MME_UE_TIMER(mme_ue->t3450);
|
|
||||||
|
|
||||||
rv = emm_handle_attach_complete(
|
rv = emm_handle_attach_complete(
|
||||||
mme_ue, &message->emm.attach_complete);
|
mme_ue, &message->emm.attach_complete);
|
||||||
if (rv != OGS_OK) {
|
if (rv != OGS_OK) {
|
||||||
|
@ -900,20 +898,6 @@ void emm_state_initial_context_setup(ogs_fsm_t *s, mme_event_t *e)
|
||||||
break;
|
break;
|
||||||
case MME_EVT_EMM_TIMER:
|
case MME_EVT_EMM_TIMER:
|
||||||
switch (e->timer_id) {
|
switch (e->timer_id) {
|
||||||
case MME_TIMER_T3450:
|
|
||||||
if (mme_ue->t3450.retry_count >=
|
|
||||||
mme_timer_cfg(MME_TIMER_T3450)->max_count) {
|
|
||||||
ogs_warn("[EMM] Retransmission of IMSI[%s] failed. "
|
|
||||||
"Stop retransmission",
|
|
||||||
mme_ue->imsi_bcd);
|
|
||||||
OGS_FSM_TRAN(&mme_ue->sm, &emm_state_exception);
|
|
||||||
|
|
||||||
/* NOTE: Do I need to send Attach-Reject */
|
|
||||||
} else {
|
|
||||||
mme_ue->t3450.retry_count++;
|
|
||||||
nas_send_attach_accept(mme_ue);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
ogs_error("Unknown timer[%s:%d]",
|
ogs_error("Unknown timer[%s:%d]",
|
||||||
mme_timer_get_name(e->timer_id), e->timer_id);
|
mme_timer_get_name(e->timer_id), e->timer_id);
|
||||||
|
|
|
@ -144,7 +144,6 @@ int esm_handle_information_response(mme_sess_t *sess,
|
||||||
if (csmap) {
|
if (csmap) {
|
||||||
sgsap_send_location_update_request(mme_ue);
|
sgsap_send_location_update_request(mme_ue);
|
||||||
} else {
|
} else {
|
||||||
CLEAR_MME_UE_TIMER(mme_ue->t3450);
|
|
||||||
nas_send_attach_accept(mme_ue);
|
nas_send_attach_accept(mme_ue);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -2028,9 +2028,6 @@ enb_ue_t *enb_ue_add(mme_enb_t *enb)
|
||||||
|
|
||||||
enb_ue->enb = enb;
|
enb_ue->enb = enb;
|
||||||
|
|
||||||
enb_ue->t_ue_context_release.timer = ogs_timer_add(
|
|
||||||
self.timer_mgr, mme_timer_ue_context_release, enb_ue);
|
|
||||||
|
|
||||||
ogs_hash_set(self.mme_ue_s1ap_id_hash, &enb_ue->mme_ue_s1ap_id,
|
ogs_hash_set(self.mme_ue_s1ap_id_hash, &enb_ue->mme_ue_s1ap_id,
|
||||||
sizeof(enb_ue->mme_ue_s1ap_id), enb_ue);
|
sizeof(enb_ue->mme_ue_s1ap_id), enb_ue);
|
||||||
ogs_list_add(&enb->enb_ue_list, enb_ue);
|
ogs_list_add(&enb->enb_ue_list, enb_ue);
|
||||||
|
@ -2052,9 +2049,6 @@ void enb_ue_remove(enb_ue_t *enb_ue)
|
||||||
ogs_assert(enb_ue);
|
ogs_assert(enb_ue);
|
||||||
ogs_assert(enb_ue->enb);
|
ogs_assert(enb_ue->enb);
|
||||||
|
|
||||||
CLEAR_ENB_UE_ALL_TIMERS(enb_ue);
|
|
||||||
ogs_timer_delete(enb_ue->t_ue_context_release.timer);
|
|
||||||
|
|
||||||
/* De-associate S1 with NAS/EMM */
|
/* De-associate S1 with NAS/EMM */
|
||||||
enb_ue_deassociate(enb_ue);
|
enb_ue_deassociate(enb_ue);
|
||||||
|
|
||||||
|
|
|
@ -270,25 +270,6 @@ struct enb_ue_s {
|
||||||
#define S1AP_UE_CTX_REL_DELETE_INDIRECT_TUNNEL 4
|
#define S1AP_UE_CTX_REL_DELETE_INDIRECT_TUNNEL 4
|
||||||
uint8_t ue_ctx_rel_action;
|
uint8_t ue_ctx_rel_action;
|
||||||
|
|
||||||
#define CLEAR_ENB_UE_ALL_TIMERS(__eNB) \
|
|
||||||
do { \
|
|
||||||
CLEAR_ENB_UE_TIMER((__eNB)->t_ue_context_release); \
|
|
||||||
} while(0);
|
|
||||||
#define CLEAR_ENB_UE_TIMER(__eNB_UE_TIMER) \
|
|
||||||
do { \
|
|
||||||
ogs_timer_stop((__eNB_UE_TIMER).timer); \
|
|
||||||
if ((__eNB_UE_TIMER).pkbuf) { \
|
|
||||||
ogs_pkbuf_free((__eNB_UE_TIMER).pkbuf); \
|
|
||||||
(__eNB_UE_TIMER).pkbuf = NULL; \
|
|
||||||
} \
|
|
||||||
(__eNB_UE_TIMER).retry_count = 0; \
|
|
||||||
} while(0);
|
|
||||||
struct {
|
|
||||||
ogs_pkbuf_t *pkbuf;
|
|
||||||
ogs_timer_t *timer;
|
|
||||||
uint32_t retry_count;;
|
|
||||||
} t_ue_context_release;
|
|
||||||
|
|
||||||
/* Related Context */
|
/* Related Context */
|
||||||
mme_enb_t *enb;
|
mme_enb_t *enb;
|
||||||
mme_ue_t *mme_ue;
|
mme_ue_t *mme_ue;
|
||||||
|
|
|
@ -92,7 +92,6 @@ static void timeout(ogs_gtp_xact_t *xact, void *data)
|
||||||
|
|
||||||
enb_ue = mme_ue->enb_ue;
|
enb_ue = mme_ue->enb_ue;
|
||||||
if (enb_ue) {
|
if (enb_ue) {
|
||||||
CLEAR_ENB_UE_TIMER(enb_ue->t_ue_context_release);
|
|
||||||
s1ap_send_ue_context_release_command(enb_ue,
|
s1ap_send_ue_context_release_command(enb_ue,
|
||||||
S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release,
|
S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release,
|
||||||
S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0);
|
S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0);
|
||||||
|
|
|
@ -42,7 +42,6 @@ void mme_send_delete_session_or_mme_ue_context_release(mme_ue_t *mme_ue)
|
||||||
} else {
|
} else {
|
||||||
enb_ue_t *enb_ue = mme_ue->enb_ue;
|
enb_ue_t *enb_ue = mme_ue->enb_ue;
|
||||||
if (enb_ue) {
|
if (enb_ue) {
|
||||||
CLEAR_ENB_UE_TIMER(enb_ue->t_ue_context_release);
|
|
||||||
s1ap_send_ue_context_release_command(enb_ue,
|
s1ap_send_ue_context_release_command(enb_ue,
|
||||||
S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release,
|
S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release,
|
||||||
S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0);
|
S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0);
|
||||||
|
@ -61,7 +60,6 @@ void mme_send_delete_session_or_enb_ue_context_release(enb_ue_t *enb_ue)
|
||||||
if (mme_ue && SESSION_CONTEXT_IS_AVAILABLE(mme_ue)) {
|
if (mme_ue && SESSION_CONTEXT_IS_AVAILABLE(mme_ue)) {
|
||||||
mme_gtp_send_delete_all_sessions(mme_ue);
|
mme_gtp_send_delete_all_sessions(mme_ue);
|
||||||
} else {
|
} else {
|
||||||
CLEAR_ENB_UE_TIMER(enb_ue->t_ue_context_release);
|
|
||||||
s1ap_send_ue_context_release_command(enb_ue,
|
s1ap_send_ue_context_release_command(enb_ue,
|
||||||
S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release,
|
S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release,
|
||||||
S1AP_UE_CTX_REL_S1_CONTEXT_REMOVE, 0);
|
S1AP_UE_CTX_REL_S1_CONTEXT_REMOVE, 0);
|
||||||
|
@ -84,7 +82,6 @@ void mme_send_release_access_bearer_or_ue_context_release(enb_ue_t *enb_ue)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ogs_debug("No UE Context");
|
ogs_debug("No UE Context");
|
||||||
CLEAR_ENB_UE_TIMER(enb_ue->t_ue_context_release);
|
|
||||||
s1ap_send_ue_context_release_command(enb_ue,
|
s1ap_send_ue_context_release_command(enb_ue,
|
||||||
S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release,
|
S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release,
|
||||||
S1AP_UE_CTX_REL_S1_CONTEXT_REMOVE, 0);
|
S1AP_UE_CTX_REL_S1_CONTEXT_REMOVE, 0);
|
||||||
|
|
|
@ -148,7 +148,6 @@ void mme_s11_handle_create_session_response(
|
||||||
if (csmap) {
|
if (csmap) {
|
||||||
sgsap_send_location_update_request(mme_ue);
|
sgsap_send_location_update_request(mme_ue);
|
||||||
} else {
|
} else {
|
||||||
CLEAR_MME_UE_TIMER(mme_ue->t3450);
|
|
||||||
nas_send_attach_accept(mme_ue);
|
nas_send_attach_accept(mme_ue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -208,7 +207,6 @@ void mme_s11_handle_modify_bearer_response(
|
||||||
source_ue = target_ue->source_ue;
|
source_ue = target_ue->source_ue;
|
||||||
ogs_assert(source_ue);
|
ogs_assert(source_ue);
|
||||||
|
|
||||||
CLEAR_ENB_UE_TIMER(source_ue->t_ue_context_release);
|
|
||||||
s1ap_send_ue_context_release_command(source_ue,
|
s1ap_send_ue_context_release_command(source_ue,
|
||||||
S1AP_Cause_PR_radioNetwork,
|
S1AP_Cause_PR_radioNetwork,
|
||||||
S1AP_CauseRadioNetwork_successful_handover,
|
S1AP_CauseRadioNetwork_successful_handover,
|
||||||
|
@ -290,7 +288,6 @@ void mme_s11_handle_delete_session_response(
|
||||||
|
|
||||||
enb_ue = mme_ue->enb_ue;
|
enb_ue = mme_ue->enb_ue;
|
||||||
if (enb_ue) {
|
if (enb_ue) {
|
||||||
CLEAR_ENB_UE_TIMER(enb_ue->t_ue_context_release);
|
|
||||||
s1ap_send_ue_context_release_command(enb_ue,
|
s1ap_send_ue_context_release_command(enb_ue,
|
||||||
S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release,
|
S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release,
|
||||||
S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0);
|
S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0);
|
||||||
|
@ -307,7 +304,6 @@ void mme_s11_handle_delete_session_response(
|
||||||
|
|
||||||
enb_ue = mme_ue->enb_ue;
|
enb_ue = mme_ue->enb_ue;
|
||||||
if (enb_ue) {
|
if (enb_ue) {
|
||||||
CLEAR_ENB_UE_TIMER(enb_ue->t_ue_context_release);
|
|
||||||
s1ap_send_ue_context_release_command(enb_ue,
|
s1ap_send_ue_context_release_command(enb_ue,
|
||||||
S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release,
|
S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release,
|
||||||
S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0);
|
S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0);
|
||||||
|
@ -629,7 +625,6 @@ void mme_s11_handle_release_access_bearers_response(
|
||||||
|
|
||||||
enb_ue = mme_ue->enb_ue;
|
enb_ue = mme_ue->enb_ue;
|
||||||
if (enb_ue) {
|
if (enb_ue) {
|
||||||
CLEAR_ENB_UE_TIMER(enb_ue->t_ue_context_release);
|
|
||||||
s1ap_send_ue_context_release_command(enb_ue,
|
s1ap_send_ue_context_release_command(enb_ue,
|
||||||
S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release,
|
S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release,
|
||||||
S1AP_UE_CTX_REL_S1_REMOVE_AND_UNLINK, 0);
|
S1AP_UE_CTX_REL_S1_REMOVE_AND_UNLINK, 0);
|
||||||
|
|
|
@ -361,7 +361,6 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
|
||||||
enb_ue = mme_ue->enb_ue;
|
enb_ue = mme_ue->enb_ue;
|
||||||
ogs_assert(enb_ue);
|
ogs_assert(enb_ue);
|
||||||
|
|
||||||
CLEAR_ENB_UE_TIMER(enb_ue->t_ue_context_release);
|
|
||||||
s1ap_send_ue_context_release_command(enb_ue,
|
s1ap_send_ue_context_release_command(enb_ue,
|
||||||
S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release,
|
S1AP_Cause_PR_nas, S1AP_CauseNas_normal_release,
|
||||||
S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0);
|
S1AP_UE_CTX_REL_UE_CONTEXT_REMOVE, 0);
|
||||||
|
|
|
@ -22,9 +22,6 @@
|
||||||
#include "mme-context.h"
|
#include "mme-context.h"
|
||||||
|
|
||||||
static mme_timer_cfg_t g_mme_timer_cfg[MAX_NUM_OF_MME_TIMER] = {
|
static mme_timer_cfg_t g_mme_timer_cfg[MAX_NUM_OF_MME_TIMER] = {
|
||||||
[MME_TIMER_UE_CONTEXT_RELEASE] =
|
|
||||||
{ .max_count = 2, .duration = ogs_time_from_sec(1) },
|
|
||||||
|
|
||||||
/* Paging procedure for EPS services initiated */
|
/* Paging procedure for EPS services initiated */
|
||||||
[MME_TIMER_T3413] =
|
[MME_TIMER_T3413] =
|
||||||
{ .max_count = 2, .duration = ogs_time_from_sec(2) },
|
{ .max_count = 2, .duration = ogs_time_from_sec(2) },
|
||||||
|
@ -73,8 +70,6 @@ const char *mme_timer_get_name(mme_timer_e id)
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case MME_TIMER_S1_DELAYED_SEND:
|
case MME_TIMER_S1_DELAYED_SEND:
|
||||||
return "MME_TIMER_S1_DELAYED_SEND";
|
return "MME_TIMER_S1_DELAYED_SEND";
|
||||||
case MME_TIMER_UE_CONTEXT_RELEASE:
|
|
||||||
return "MME_TIMER_UE_CONTEXT_RELEASE";
|
|
||||||
case MME_TIMER_T3413:
|
case MME_TIMER_T3413:
|
||||||
return "MME_TIMER_T3413";
|
return "MME_TIMER_T3413";
|
||||||
case MME_TIMER_T3422:
|
case MME_TIMER_T3422:
|
||||||
|
@ -113,30 +108,6 @@ void mme_timer_s1_delayed_send(void *data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void s1_timer_event_send(
|
|
||||||
mme_timer_e timer_id, enb_ue_t *enb_ue)
|
|
||||||
{
|
|
||||||
int rv;
|
|
||||||
mme_event_t *e = NULL;
|
|
||||||
ogs_assert(enb_ue);
|
|
||||||
|
|
||||||
e = mme_event_new(MME_EVT_S1AP_TIMER);
|
|
||||||
e->timer_id = timer_id;
|
|
||||||
e->enb_ue = enb_ue;
|
|
||||||
e->enb = enb_ue->enb;
|
|
||||||
|
|
||||||
rv = ogs_queue_push(mme_self()->queue, e);
|
|
||||||
if (rv != OGS_OK) {
|
|
||||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
|
||||||
mme_event_free(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void mme_timer_ue_context_release(void *data)
|
|
||||||
{
|
|
||||||
s1_timer_event_send(MME_TIMER_UE_CONTEXT_RELEASE, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void emm_timer_event_send(
|
static void emm_timer_event_send(
|
||||||
mme_timer_e timer_id, mme_ue_t *mme_ue)
|
mme_timer_e timer_id, mme_ue_t *mme_ue)
|
||||||
{
|
{
|
||||||
|
|
|
@ -32,8 +32,6 @@ typedef enum {
|
||||||
|
|
||||||
MME_TIMER_S1_DELAYED_SEND,
|
MME_TIMER_S1_DELAYED_SEND,
|
||||||
|
|
||||||
MME_TIMER_UE_CONTEXT_RELEASE,
|
|
||||||
|
|
||||||
MME_TIMER_T3413,
|
MME_TIMER_T3413,
|
||||||
MME_TIMER_T3422,
|
MME_TIMER_T3422,
|
||||||
MME_TIMER_T3450,
|
MME_TIMER_T3450,
|
||||||
|
@ -57,7 +55,6 @@ mme_timer_cfg_t *mme_timer_cfg(mme_timer_e id);
|
||||||
const char *mme_timer_get_name(mme_timer_e id);
|
const char *mme_timer_get_name(mme_timer_e id);
|
||||||
|
|
||||||
void mme_timer_s1_delayed_send(void *data);
|
void mme_timer_s1_delayed_send(void *data);
|
||||||
void mme_timer_ue_context_release(void *data);
|
|
||||||
|
|
||||||
void mme_timer_t3413_expire(void *data);
|
void mme_timer_t3413_expire(void *data);
|
||||||
void mme_timer_t3422_expire(void *data);
|
void mme_timer_t3422_expire(void *data);
|
||||||
|
|
|
@ -99,23 +99,14 @@ int nas_send_attach_accept(mme_ue_t *mme_ue)
|
||||||
ogs_assert(bearer);
|
ogs_assert(bearer);
|
||||||
ogs_assert(mme_bearer_next(bearer) == NULL);
|
ogs_assert(mme_bearer_next(bearer) == NULL);
|
||||||
|
|
||||||
if (mme_ue->t3450.pkbuf) {
|
rv = esm_build_activate_default_bearer_context_request(&esmbuf, sess);
|
||||||
s1apbuf = mme_ue->t3450.pkbuf;
|
ogs_assert(rv == OGS_OK && esmbuf);
|
||||||
|
|
||||||
} else {
|
rv = emm_build_attach_accept(&emmbuf, mme_ue, esmbuf);
|
||||||
rv = esm_build_activate_default_bearer_context_request(&esmbuf, sess);
|
ogs_assert(rv == OGS_OK && emmbuf);
|
||||||
ogs_assert(rv == OGS_OK && esmbuf);
|
|
||||||
|
|
||||||
rv = emm_build_attach_accept(&emmbuf, mme_ue, esmbuf);
|
rv = s1ap_build_initial_context_setup_request(&s1apbuf, mme_ue, emmbuf);
|
||||||
ogs_assert(rv == OGS_OK && emmbuf);
|
ogs_assert(rv == OGS_OK && s1apbuf);
|
||||||
|
|
||||||
rv = s1ap_build_initial_context_setup_request(&s1apbuf, mme_ue, emmbuf);
|
|
||||||
ogs_assert(rv == OGS_OK && s1apbuf);
|
|
||||||
}
|
|
||||||
|
|
||||||
mme_ue->t3450.pkbuf = ogs_pkbuf_copy(s1apbuf);
|
|
||||||
ogs_timer_start(mme_ue->t3450.timer,
|
|
||||||
mme_timer_cfg(MME_TIMER_T3450)->duration);
|
|
||||||
|
|
||||||
rv = nas_send_to_enb(mme_ue, s1apbuf);
|
rv = nas_send_to_enb(mme_ue, s1apbuf);
|
||||||
ogs_assert(rv == OGS_OK);
|
ogs_assert(rv == OGS_OK);
|
||||||
|
@ -272,7 +263,6 @@ void nas_send_detach_accept(mme_ue_t *mme_ue)
|
||||||
ogs_assert(rv == OGS_OK);
|
ogs_assert(rv == OGS_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
CLEAR_ENB_UE_TIMER(enb_ue->t_ue_context_release);
|
|
||||||
s1ap_send_ue_context_release_command(enb_ue,
|
s1ap_send_ue_context_release_command(enb_ue,
|
||||||
S1AP_Cause_PR_nas, S1AP_CauseNas_detach,
|
S1AP_Cause_PR_nas, S1AP_CauseNas_detach,
|
||||||
S1AP_UE_CTX_REL_S1_REMOVE_AND_UNLINK, 0);
|
S1AP_UE_CTX_REL_S1_REMOVE_AND_UNLINK, 0);
|
||||||
|
|
|
@ -1595,7 +1595,6 @@ void s1ap_handle_handover_failure(mme_enb_t *enb, ogs_s1ap_message_t *message)
|
||||||
rv = s1ap_send_handover_preparation_failure(source_ue, Cause);
|
rv = s1ap_send_handover_preparation_failure(source_ue, Cause);
|
||||||
ogs_assert(rv == OGS_OK);
|
ogs_assert(rv == OGS_OK);
|
||||||
|
|
||||||
CLEAR_ENB_UE_TIMER(target_ue->t_ue_context_release);
|
|
||||||
s1ap_send_ue_context_release_command(
|
s1ap_send_ue_context_release_command(
|
||||||
target_ue, S1AP_Cause_PR_radioNetwork,
|
target_ue, S1AP_Cause_PR_radioNetwork,
|
||||||
S1AP_CauseRadioNetwork_ho_failure_in_target_EPC_eNB_or_target_system,
|
S1AP_CauseRadioNetwork_ho_failure_in_target_EPC_eNB_or_target_system,
|
||||||
|
@ -1667,7 +1666,6 @@ void s1ap_handle_handover_cancel(mme_enb_t *enb, ogs_s1ap_message_t *message)
|
||||||
rv = s1ap_send_handover_cancel_ack(source_ue);
|
rv = s1ap_send_handover_cancel_ack(source_ue);
|
||||||
ogs_assert(rv == OGS_OK);
|
ogs_assert(rv == OGS_OK);
|
||||||
|
|
||||||
CLEAR_ENB_UE_TIMER(target_ue->t_ue_context_release);
|
|
||||||
s1ap_send_ue_context_release_command(
|
s1ap_send_ue_context_release_command(
|
||||||
target_ue, S1AP_Cause_PR_radioNetwork,
|
target_ue, S1AP_Cause_PR_radioNetwork,
|
||||||
S1AP_CauseRadioNetwork_handover_cancelled,
|
S1AP_CauseRadioNetwork_handover_cancelled,
|
||||||
|
|
|
@ -299,23 +299,15 @@ void s1ap_send_ue_context_release_command(
|
||||||
rv = s1ap_delayed_send_to_enb_ue(enb_ue, s1apbuf, delay);
|
rv = s1ap_delayed_send_to_enb_ue(enb_ue, s1apbuf, delay);
|
||||||
ogs_assert(rv == OGS_OK);
|
ogs_assert(rv == OGS_OK);
|
||||||
} else {
|
} else {
|
||||||
if (enb_ue->t_ue_context_release.pkbuf) {
|
ogs_assert(action != S1AP_UE_CTX_REL_INVALID_ACTION);
|
||||||
s1apbuf = enb_ue->t_ue_context_release.pkbuf;
|
enb_ue->ue_ctx_rel_action = action;
|
||||||
} else {
|
|
||||||
ogs_assert(action != S1AP_UE_CTX_REL_INVALID_ACTION);
|
|
||||||
enb_ue->ue_ctx_rel_action = action;
|
|
||||||
|
|
||||||
ogs_debug(" Group[%d] Cause[%d] Action[%d] Delay[%d]",
|
ogs_debug(" Group[%d] Cause[%d] Action[%d] Delay[%d]",
|
||||||
group, (int)cause, action, delay);
|
group, (int)cause, action, delay);
|
||||||
|
|
||||||
rv = s1ap_build_ue_context_release_command(
|
rv = s1ap_build_ue_context_release_command(
|
||||||
&s1apbuf, enb_ue, group, cause);
|
&s1apbuf, enb_ue, group, cause);
|
||||||
ogs_assert(rv == OGS_OK && s1apbuf);
|
ogs_assert(rv == OGS_OK && s1apbuf);
|
||||||
}
|
|
||||||
|
|
||||||
enb_ue->t_ue_context_release.pkbuf = ogs_pkbuf_copy(s1apbuf);
|
|
||||||
ogs_timer_start(enb_ue->t_ue_context_release.timer,
|
|
||||||
mme_timer_cfg(MME_TIMER_UE_CONTEXT_RELEASE)->duration);
|
|
||||||
|
|
||||||
rv = s1ap_delayed_send_to_enb_ue(enb_ue, s1apbuf, 0);
|
rv = s1ap_delayed_send_to_enb_ue(enb_ue, s1apbuf, 0);
|
||||||
ogs_assert(rv == OGS_OK);
|
ogs_assert(rv == OGS_OK);
|
||||||
|
|
|
@ -194,23 +194,6 @@ void s1ap_state_operational(ogs_fsm_t *s, mme_event_t *e)
|
||||||
ogs_assert(OGS_OK == s1ap_send_to_enb_ue(e->enb_ue, e->pkbuf));
|
ogs_assert(OGS_OK == s1ap_send_to_enb_ue(e->enb_ue, e->pkbuf));
|
||||||
ogs_timer_delete(e->timer);
|
ogs_timer_delete(e->timer);
|
||||||
break;
|
break;
|
||||||
case MME_TIMER_UE_CONTEXT_RELEASE:
|
|
||||||
ogs_assert(e->enb_ue);
|
|
||||||
if (e->enb_ue->t_ue_context_release.retry_count >=
|
|
||||||
mme_timer_cfg(MME_TIMER_UE_CONTEXT_RELEASE)->max_count) {
|
|
||||||
ogs_warn("[S1AP] UE Context Release failed. Stop Releasing");
|
|
||||||
CLEAR_ENB_UE_TIMER(e->enb_ue->t_ue_context_release);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
e->enb_ue->t_ue_context_release.retry_count++;
|
|
||||||
/*
|
|
||||||
* If timeout, the saved pkbuf is used.
|
|
||||||
* We don't have to set function parameter.
|
|
||||||
* So, we just set all parameters to 0
|
|
||||||
*/
|
|
||||||
s1ap_send_ue_context_release_command(e->enb_ue, 0, 0, 0, 0);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
ogs_error("Unknown timer[%s:%d]",
|
ogs_error("Unknown timer[%s:%d]",
|
||||||
mme_timer_get_name(e->timer_id), e->timer_id);
|
mme_timer_get_name(e->timer_id), e->timer_id);
|
||||||
|
|
|
@ -101,7 +101,6 @@ void sgsap_handle_location_update_accept(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf)
|
||||||
ogs_debug(" P-TMSI[0x%08x]", mme_ue->p_tmsi);
|
ogs_debug(" P-TMSI[0x%08x]", mme_ue->p_tmsi);
|
||||||
}
|
}
|
||||||
|
|
||||||
CLEAR_MME_UE_TIMER(mme_ue->t3450);
|
|
||||||
nas_send_attach_accept(mme_ue);
|
nas_send_attach_accept(mme_ue);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue