From f64b55aa2a7a4db10a2d7335c42e1ac3d1e760b7 Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Thu, 14 Sep 2017 18:01:26 +0900 Subject: [PATCH] enb_ue_t -> source_ue and target_ue during S1 handover --- src/mme/mme_context.c | 17 +++++------ src/mme/mme_context.h | 9 +++--- src/mme/mme_sm.c | 3 +- src/mme/s1ap_handler.c | 65 ++++++++++++++++++++---------------------- src/mme/s1ap_path.c | 22 +++++++------- 5 files changed, 57 insertions(+), 59 deletions(-) diff --git a/src/mme/mme_context.c b/src/mme/mme_context.c index fb4ee12573..4c51873b85 100644 --- a/src/mme/mme_context.c +++ b/src/mme/mme_context.c @@ -1456,7 +1456,7 @@ status_t mme_ue_set_imsi(mme_ue_t *mme_ue, c_int8_t *imsi_bcd) return CORE_OK; } -status_t mme_associate_ue_context(mme_ue_t *mme_ue, enb_ue_t *enb_ue) +status_t mme_ue_associate_enb_ue(mme_ue_t *mme_ue, enb_ue_t *enb_ue) { d_assert(mme_ue, return CORE_ERROR, "Null param"); d_assert(enb_ue, return CORE_ERROR, "Null param"); @@ -1467,17 +1467,18 @@ status_t mme_associate_ue_context(mme_ue_t *mme_ue, enb_ue_t *enb_ue) return CORE_OK; } -status_t mme_handover_associate_ue_context(mme_ue_t *mme_ue, enb_ue_t *target) +status_t mme_ue_associate_target_ue(mme_ue_t *mme_ue, enb_ue_t *target_ue) { - enb_ue_t *source = NULL; + enb_ue_t *source_ue = NULL; - d_assert(target, return CORE_ERROR, "Null param"); + d_assert(target_ue, return CORE_ERROR, "Null param"); d_assert(mme_ue, return CORE_ERROR, "Null param"); - source = mme_ue->enb_ue; - d_assert(source, return CORE_ERROR, "Null param"); + source_ue = mme_ue->enb_ue; + d_assert(source_ue, return CORE_ERROR, "Null param"); - target->mme_ue = mme_ue; - source->target = target; + target_ue->mme_ue = mme_ue; + target_ue->source_ue = source_ue; + source_ue->target_ue = target_ue; return CORE_OK; } diff --git a/src/mme/mme_context.h b/src/mme/mme_context.h index 0a0bef8dd4..885b6fb02f 100644 --- a/src/mme/mme_context.h +++ b/src/mme/mme_context.h @@ -129,7 +129,8 @@ struct _enb_ue_t { /* Handover Info */ S1ap_HandoverType_t handover_type; - enb_ue_t *target; + enb_ue_t *source_ue; + enb_ue_t *target_ue; /* Use mme_ue->tai, mme_ue->e_cgi. * Do not access enb_ue->nas.tai enb_ue->nas.e_cgi. @@ -457,10 +458,10 @@ CORE_DECLARE(mme_ue_t*) mme_ue_find_by_teid(c_uint32_t teid); CORE_DECLARE(mme_ue_t*) mme_ue_find_by_message(nas_message_t *message); CORE_DECLARE(status_t) mme_ue_set_imsi( mme_ue_t *mme_ue, c_int8_t *imsi_bcd); -CORE_DECLARE(status_t) mme_associate_ue_context( +CORE_DECLARE(status_t) mme_ue_associate_enb_ue( mme_ue_t *mme_ue, enb_ue_t *enb_ue); -CORE_DECLARE(status_t) mme_handover_associate_ue_context( - mme_ue_t *mme_ue, enb_ue_t *target); +CORE_DECLARE(status_t) mme_ue_associate_target_ue( + mme_ue_t *mme_ue, enb_ue_t *target_ue); CORE_DECLARE(hash_index_t *) mme_ue_first(); CORE_DECLARE(hash_index_t *) mme_ue_next(hash_index_t *hi); diff --git a/src/mme/mme_sm.c b/src/mme/mme_sm.c index d7c251cc9d..2eec42b493 100644 --- a/src/mme/mme_sm.c +++ b/src/mme/mme_sm.c @@ -192,8 +192,7 @@ void mme_state_operational(fsm_t *s, event_t *e) "nas_security_decode failed"); } } - /* Set mme_ue */ - mme_associate_ue_context(mme_ue, enb_ue); + mme_ue_associate_enb_ue(mme_ue, enb_ue); } d_assert(mme_ue, pkbuf_free(pkbuf);break, "No MME UE context"); diff --git a/src/mme/s1ap_handler.c b/src/mme/s1ap_handler.c index 208ea46559..3b3de3e8aa 100644 --- a/src/mme/s1ap_handler.c +++ b/src/mme/s1ap_handler.c @@ -148,7 +148,7 @@ void s1ap_handle_initial_ue_message(mme_enb_t *enb, s1ap_message_t *message) } else { - mme_associate_ue_context(mme_ue, enb_ue); + mme_ue_associate_enb_ue(mme_ue, enb_ue); } } } @@ -650,7 +650,7 @@ void s1ap_handle_handover_required(mme_enb_t *enb, s1ap_message_t *message) status_t rv; char buf[INET_ADDRSTRLEN]; - enb_ue_t *enb_ue = NULL; + enb_ue_t *source_ue = NULL; mme_ue_t *mme_ue = NULL; S1ap_HandoverRequiredIEs_t *ies = NULL; @@ -660,17 +660,17 @@ void s1ap_handle_handover_required(mme_enb_t *enb, s1ap_message_t *message) ies = &message->s1ap_HandoverRequiredIEs; d_assert(ies, return,); - enb_ue = enb_ue_find_by_enb_ue_s1ap_id(enb, ies->eNB_UE_S1AP_ID); - d_assert(enb_ue, return, + source_ue = enb_ue_find_by_enb_ue_s1ap_id(enb, ies->eNB_UE_S1AP_ID); + d_assert(source_ue, return, "Cannot find UE for eNB-UE-S1AP-ID[%d] and eNB[%s:%d]", ies->eNB_UE_S1AP_ID, INET_NTOP(&enb->s1ap_sock->remote.sin_addr.s_addr, buf), enb->enb_id); - d_assert(enb_ue->mme_ue_s1ap_id == ies->mme_ue_s1ap_id, return, + d_assert(source_ue->mme_ue_s1ap_id == ies->mme_ue_s1ap_id, return, "Conflict MME-UE-S1AP-ID : %d != %d\n", - enb_ue->mme_ue_s1ap_id, ies->mme_ue_s1ap_id); + source_ue->mme_ue_s1ap_id, ies->mme_ue_s1ap_id); - mme_ue = enb_ue->mme_ue; + mme_ue = source_ue->mme_ue; d_assert(mme_ue, return,); if (SECURITY_CONTEXT_IS_VALID(mme_ue)) @@ -683,14 +683,14 @@ void s1ap_handle_handover_required(mme_enb_t *enb, s1ap_message_t *message) d_assert(0, return,); } - enb_ue->handover_type = ies->handoverType; + source_ue->handover_type = ies->handoverType; rv = s1ap_send_handover_request(mme_ue, ies); d_assert(rv == CORE_OK,, "s1ap send error"); d_trace(3, "[S1AP] Handover Required : " "UE[eNB-UE-S1AP-ID(%d)] --> eNB[%s:%d]\n", - enb_ue->enb_ue_s1ap_id, + source_ue->enb_ue_s1ap_id, INET_NTOP(&enb->s1ap_sock->remote.sin_addr.s_addr, buf), enb->enb_id); } @@ -701,7 +701,7 @@ void s1ap_handle_handover_request_ack(mme_enb_t *enb, s1ap_message_t *message) char buf[INET_ADDRSTRLEN]; int i; - enb_ue_t *enb_ue = NULL; + enb_ue_t *target_ue = NULL; mme_ue_t *mme_ue = NULL; S1ap_HandoverRequestAcknowledgeIEs_t *ies = NULL; @@ -711,16 +711,16 @@ void s1ap_handle_handover_request_ack(mme_enb_t *enb, s1ap_message_t *message) ies = &message->s1ap_HandoverRequestAcknowledgeIEs; d_assert(ies, return,); - enb_ue = enb_ue_find_by_mme_ue_s1ap_id(ies->mme_ue_s1ap_id); - d_assert(enb_ue, return, + target_ue = enb_ue_find_by_mme_ue_s1ap_id(ies->mme_ue_s1ap_id); + d_assert(target_ue, return, "Cannot find UE for MME-UE-S1AP-ID[%d] and eNB[%s:%d]", ies->mme_ue_s1ap_id, INET_NTOP(&enb->s1ap_sock->remote.sin_addr.s_addr, buf), enb->enb_id); - enb_ue->enb_ue_s1ap_id = ies->eNB_UE_S1AP_ID; + target_ue->enb_ue_s1ap_id = ies->eNB_UE_S1AP_ID; - mme_ue = enb_ue->mme_ue; + mme_ue = target_ue->mme_ue; d_assert(mme_ue, return,); for (i = 0; i < ies->e_RABAdmittedList.s1ap_E_RABAdmittedItem.count; i++) @@ -782,7 +782,7 @@ void s1ap_handle_handover_request_ack(mme_enb_t *enb, s1ap_message_t *message) d_trace(3, "[S1AP] Handover Request Ack : " "UE[eNB-UE-S1AP-ID(%d)] --> eNB[%s:%d]\n", - enb_ue->enb_ue_s1ap_id, + target_ue->enb_ue_s1ap_id, INET_NTOP(&enb->s1ap_sock->remote.sin_addr.s_addr, buf), enb->enb_id); } @@ -797,8 +797,7 @@ void s1ap_handle_enb_status_transfer(mme_enb_t *enb, s1ap_message_t *message) status_t rv; char buf[INET_ADDRSTRLEN]; - enb_ue_t *source = NULL, *target = NULL; - mme_ue_t *mme_ue = NULL; + enb_ue_t *source_ue = NULL, *target_ue = NULL; S1ap_ENBStatusTransferIEs_t *ies = NULL; @@ -807,22 +806,20 @@ void s1ap_handle_enb_status_transfer(mme_enb_t *enb, s1ap_message_t *message) ies = &message->s1ap_ENBStatusTransferIEs; d_assert(ies, return,); - source = enb_ue_find_by_enb_ue_s1ap_id(enb, ies->eNB_UE_S1AP_ID); - d_assert(source, return, + source_ue = enb_ue_find_by_enb_ue_s1ap_id(enb, ies->eNB_UE_S1AP_ID); + d_assert(source_ue, return, "Cannot find UE for eNB-UE-S1AP-ID[%d] and eNB[%s:%d]", ies->eNB_UE_S1AP_ID, INET_NTOP(&enb->s1ap_sock->remote.sin_addr.s_addr, buf), enb->enb_id); - d_assert(source->mme_ue_s1ap_id == ies->mme_ue_s1ap_id, return, + d_assert(source_ue->mme_ue_s1ap_id == ies->mme_ue_s1ap_id, return, "Conflict MME-UE-S1AP-ID : %d != %d\n", - source->mme_ue_s1ap_id, ies->mme_ue_s1ap_id); + source_ue->mme_ue_s1ap_id, ies->mme_ue_s1ap_id); - mme_ue = source->mme_ue; - d_assert(mme_ue, return,); - target = source->target; - d_assert(target, return,); + target_ue = source_ue->target_ue; + d_assert(target_ue, return,); - rv = s1ap_send_mme_status_transfer(target, ies); + rv = s1ap_send_mme_status_transfer(target_ue, ies); d_assert(rv == CORE_OK,,); } @@ -831,7 +828,7 @@ void s1ap_handle_handover_notification(mme_enb_t *enb, s1ap_message_t *message) status_t rv; char buf[INET_ADDRSTRLEN]; - enb_ue_t *source = NULL, *target = NULL; + enb_ue_t *target_ue = NULL; mme_ue_t *mme_ue = NULL; mme_sess_t *sess = NULL; mme_bearer_t *bearer = NULL; @@ -862,20 +859,20 @@ void s1ap_handle_handover_notification(mme_enb_t *enb, s1ap_message_t *message) tAC = &tai->tAC; d_assert(tAC && tAC->size == sizeof(c_uint16_t), return,); - target = enb_ue_find_by_enb_ue_s1ap_id(enb, ies->eNB_UE_S1AP_ID); - d_assert(target, return, + target_ue = enb_ue_find_by_enb_ue_s1ap_id(enb, ies->eNB_UE_S1AP_ID); + d_assert(target_ue, return, "Cannot find UE for eNB-UE-S1AP-ID[%d] and eNB[%s:%d]", ies->eNB_UE_S1AP_ID, INET_NTOP(&enb->s1ap_sock->remote.sin_addr.s_addr, buf), enb->enb_id); - d_assert(target->mme_ue_s1ap_id == ies->mme_ue_s1ap_id, return, + d_assert(target_ue->mme_ue_s1ap_id == ies->mme_ue_s1ap_id, return, "Conflict MME-UE-S1AP-ID : %d != %d\n", - target->mme_ue_s1ap_id, ies->mme_ue_s1ap_id); + target_ue->mme_ue_s1ap_id, ies->mme_ue_s1ap_id); - mme_ue = target->mme_ue; + mme_ue = target_ue->mme_ue; d_assert(mme_ue, return,); - source = mme_ue->enb_ue; - d_assert(source, return,); + + mme_ue_associate_enb_ue(mme_ue, target_ue); memcpy(&mme_ue->tai.plmn_id, pLMNidentity->buf, sizeof(mme_ue->tai.plmn_id)); diff --git a/src/mme/s1ap_path.c b/src/mme/s1ap_path.c index 26e7d968b8..a904532c18 100644 --- a/src/mme/s1ap_path.c +++ b/src/mme/s1ap_path.c @@ -432,8 +432,8 @@ status_t s1ap_send_handover_request( S1ap_TargetID_t *targetID = NULL; c_uint32_t enb_id; - mme_enb_t *enb = NULL; - enb_ue_t *enb_ue = NULL; + mme_enb_t *target_enb = NULL; + enb_ue_t *target_ue = NULL; d_assert(mme_ue, return CORE_ERROR,); d_assert(ies, return CORE_ERROR,); @@ -457,21 +457,21 @@ status_t s1ap_send_handover_request( } } - enb = mme_enb_find_by_enb_id(enb_id); - d_assert(enb, return CORE_ERROR, + target_enb = mme_enb_find_by_enb_id(enb_id); + d_assert(target_enb, return CORE_ERROR, "Cannot find target eNB = %d", enb_id); - enb_ue = enb_ue_add(enb); - d_assert(enb_ue, return CORE_ERROR,); + target_ue = enb_ue_add(target_enb); + d_assert(target_ue, return CORE_ERROR,); - mme_handover_associate_ue_context(mme_ue, enb_ue); + mme_ue_associate_target_ue(mme_ue, target_ue); - rv = s1ap_build_handover_request(&s1apbuf, mme_ue, enb_ue, ies); + rv = s1ap_build_handover_request(&s1apbuf, mme_ue, target_ue, ies); d_assert(rv == CORE_OK && s1apbuf, - enb_ue_remove(enb_ue); return CORE_ERROR, "s1ap build error"); + enb_ue_remove(target_ue); return CORE_ERROR, "s1ap build error"); - rv = s1ap_send_to_enb(enb, s1apbuf); - d_assert(rv == CORE_OK, enb_ue_remove(enb_ue), "s1ap send error"); + rv = s1ap_send_to_enb(target_enb, s1apbuf); + d_assert(rv == CORE_OK, enb_ue_remove(target_ue), "s1ap send error"); return rv; }