diff --git a/src/mme/s1ap-path.c b/src/mme/s1ap-path.c index 509af91e1..f4b1b6da6 100644 --- a/src/mme/s1ap-path.c +++ b/src/mme/s1ap-path.c @@ -298,15 +298,15 @@ void s1ap_send_paging(mme_ue_t *mme_ue, S1AP_CNDomain_t cn_domain) if (memcmp(&enb->supported_ta_list[i], &mme_ue->tai, sizeof(tai_t)) == 0) { - /* Build S1AP Paging message */ - rv = s1ap_build_paging(&s1apbuf, mme_ue, cn_domain); - ogs_assert(rv == OGS_OK && s1apbuf); + if (mme_ue->last_paging_msg) { + s1apbuf = mme_ue->last_paging_msg; + } else { + rv = s1ap_build_paging(&s1apbuf, mme_ue, cn_domain); + ogs_assert(rv == OGS_OK && s1apbuf); + } - /* Save it for later use */ - ogs_assert(mme_ue->last_paging_msg == NULL); mme_ue->last_paging_msg = ogs_pkbuf_copy(s1apbuf); - /* Send to enb */ rv = s1ap_send_to_enb(enb, s1apbuf, S1AP_NON_UE_SIGNALLING); ogs_assert(rv == OGS_OK); } @@ -322,40 +322,19 @@ void s1ap_t3413_timeout(void *data) mme_ue_t *mme_ue = data; ogs_assert(mme_ue); - if (mme_ue->max_paging_retry < MAX_NUM_OF_PAGING) { - ogs_pkbuf_t *s1apbuf = NULL; - mme_enb_t *enb = NULL; - int i; - int rv; - - /* Find enB with matched TAI */ - ogs_list_for_each(&mme_self()->enb_list, enb) { - for (i = 0; i < enb->num_of_supported_ta_list; i++) { - - if (memcmp(&enb->supported_ta_list[i], &mme_ue->tai, - sizeof(tai_t)) == 0) { - - /* Save it for later use */ - ogs_assert(mme_ue->last_paging_msg); - s1apbuf = mme_ue->last_paging_msg; - mme_ue->last_paging_msg = ogs_pkbuf_copy(s1apbuf); - - /* Send to enb */ - rv = s1ap_send_to_enb(enb, s1apbuf, S1AP_NON_UE_SIGNALLING); - ogs_assert(rv == OGS_OK); - } - } - } - - /* Start T3413 */ - ogs_timer_start(mme_ue->t3413, mme_self()->t3413_value); - - mme_ue->max_paging_retry++; - } else { + if (mme_ue->max_paging_retry >= MAX_NUM_OF_PAGING) { /* Paging failed */ ogs_warn("[EMM] Paging to IMSI[%s] failed. Stop paging", mme_ue->imsi_bcd); - CLEAR_PAGING_INFO(mme_ue); + if (mme_ue->last_paging_msg) { + ogs_pkbuf_free(mme_ue->last_paging_msg); + mme_ue->last_paging_msg = NULL; + } + } else { + mme_ue->max_paging_retry++; + /* If t3413 is timeout, last_paging_msg is used. + * We don't have to set CNDomain. So, we just set CNDomain to 0 */ + s1ap_send_paging(mme_ue, 0); } }