diff --git a/src/mme/emm_build.c b/src/mme/emm_build.c index c27978abfc..d2e2e5539d 100644 --- a/src/mme/emm_build.c +++ b/src/mme/emm_build.c @@ -53,17 +53,22 @@ status_t emm_build_attach_accept( attach_accept->esm_message_container.buffer = esmbuf->payload; attach_accept->esm_message_container.length = esmbuf->len; - attach_accept->presencemask |= NAS_ATTACH_ACCEPT_GUTI_PRESENT; - guti->length = sizeof(nas_eps_mobile_identity_guti_t); - guti->guti.odd_even = NAS_EPS_MOBILE_IDENTITY_EVEN; - guti->guti.type = NAS_EPS_MOBILE_IDENTITY_GUTI; - memcpy(&guti->guti.plmn_id, &mme_ue->guti.plmn_id, PLMN_ID_LEN); - guti->guti.mme_gid = mme_ue->guti.mme_gid; - guti->guti.mme_code = mme_ue->guti.mme_code; - guti->guti.m_tmsi = mme_ue->guti.m_tmsi; - d_trace(5, " GUTI[G:%d,C:%d,M_TMSI:0x%x] IMSI:[%s]\n", - guti->guti.mme_gid, guti->guti.mme_code, guti->guti.m_tmsi, - mme_ue->imsi_bcd); + d_trace(5, " %s GUTI[G:%d,C:%d,M_TMSI:0x%x] IMSI:[%s]\n", + mme_ue->new_guti ? "# NEW #" : "# Not Changed #", + mme_ue->guti.mme_gid, mme_ue->guti.mme_code, + mme_ue->guti.m_tmsi, mme_ue->imsi_bcd); + if (mme_ue->new_guti) + { + attach_accept->presencemask |= NAS_ATTACH_ACCEPT_GUTI_PRESENT; + guti->length = sizeof(nas_eps_mobile_identity_guti_t); + guti->guti.odd_even = NAS_EPS_MOBILE_IDENTITY_EVEN; + guti->guti.type = NAS_EPS_MOBILE_IDENTITY_GUTI; + memcpy(&guti->guti.plmn_id, &mme_ue->guti.plmn_id, PLMN_ID_LEN); + guti->guti.mme_gid = mme_ue->guti.mme_gid; + guti->guti.mme_code = mme_ue->guti.mme_code; + guti->guti.m_tmsi = mme_ue->guti.m_tmsi; + } + mme_ue->new_guti = 0; attach_accept->presencemask |= NAS_ATTACH_ACCEPT_T3402_VALUE_PRESENT; t3402_value->unit = NAS_GRPS_TIMER_UNIT_MULTIPLES_OF_1_MM; diff --git a/src/mme/mme_context.c b/src/mme/mme_context.c index e0c15ff112..058a8335ea 100644 --- a/src/mme/mme_context.c +++ b/src/mme/mme_context.c @@ -2152,6 +2152,8 @@ static status_t mme_ue_new_guti(mme_ue_t *mme_ue) mme_ue->guti.m_tmsi = *(mme_ue->m_tmsi); hash_set(self.guti_ue_hash, &mme_ue->guti, sizeof(guti_t), mme_ue); + mme_ue->new_guti = 1; + return CORE_OK; } diff --git a/src/mme/mme_context.h b/src/mme/mme_context.h index edc22a6752..fde5931ab5 100644 --- a/src/mme/mme_context.h +++ b/src/mme/mme_context.h @@ -209,6 +209,7 @@ struct _mme_ue_t { c_int8_t imsi_bcd[MAX_IMSI_BCD_LEN+1]; mme_m_tmsi_t *m_tmsi; guti_t guti; + int new_guti; c_uint32_t mme_s11_teid; /* MME-S11-TEID is derived from INDEX */ c_uint32_t sgw_s11_teid; /* SGW-S11-TEID is received from SGW */