From 65cb21ce05b0a449861a6432c4616bbf8d754047 Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Sat, 6 Jul 2019 23:30:05 +0900 Subject: [PATCH] [SGsAP] clarify P_TMSI availablity --- src/mme/emm-build.c | 8 +++++--- src/mme/emm-sm.c | 4 ++-- src/mme/mme-context.h | 6 ++++++ src/mme/s1ap-build.c | 4 +++- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/mme/emm-build.c b/src/mme/emm-build.c index 5461f7a06e..3fa62fc97e 100644 --- a/src/mme/emm-build.c +++ b/src/mme/emm-build.c @@ -22,6 +22,7 @@ #include "nas-security.h" #include "mme-kdf.h" #include "emm-build.h" +#include "mme-sm.h" #undef OGS_LOG_DOMAIN #define OGS_LOG_DOMAIN __emm_log_domain @@ -111,16 +112,17 @@ int emm_build_attach_accept( eps_network_feature_support->length = 1; eps_network_feature_support->ims_vops = 1; - if (mme_ue->vlr) { + if (MME_P_TMSI_IS_AVAILABLE(mme_ue)) { + ogs_assert(mme_ue->vlr); + ogs_assert(mme_ue->p_tmsi); + attach_accept->presencemask |= NAS_ATTACH_ACCEPT_LOCATION_AREA_IDENTIFICATION_PRESENT; lai->nas_plmn_id = mme_ue->vlr->lai.nas_plmn_id; lai->lac = mme_ue->vlr->lai.lac; ogs_debug(" LAI[PLMN_ID:%06x,LAC:%d]", plmn_id_hexdump(&lai->nas_plmn_id), lai->lac); - } - if (mme_ue->p_tmsi) { attach_accept->presencemask |= NAS_ATTACH_ACCEPT_MS_IDENTITY_PRESENT; ms_identity->length = 5; tmsi->spare = 0xf; diff --git a/src/mme/emm-sm.c b/src/mme/emm-sm.c index c109d06254..ac1fc15cff 100644 --- a/src/mme/emm-sm.c +++ b/src/mme/emm-sm.c @@ -227,7 +227,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e) return; } - if (mme_ue->p_tmsi) { + if (MME_P_TMSI_IS_AVAILABLE(mme_ue)) { rv = sgsap_send_detach_indication(mme_ue); } else { rv = mme_send_delete_session_or_detach(mme_ue); @@ -650,7 +650,7 @@ void emm_state_initial_context_setup(ogs_fsm_t *s, mme_event_t *e) OGS_FSM_TRAN(s, emm_state_exception); break; } - if (mme_ue->p_tmsi) + if (MME_P_TMSI_IS_AVAILABLE(mme_ue)) sgsap_send_tmsi_reallocation_complete(mme_ue); OGS_FSM_TRAN(s, &emm_state_registered); diff --git a/src/mme/mme-context.h b/src/mme/mme-context.h index 1b069eda09..b3a32c2024 100644 --- a/src/mme/mme-context.h +++ b/src/mme/mme-context.h @@ -189,6 +189,12 @@ typedef struct mme_pgw_s { const char *apn; } mme_pgw_t; +#define MME_SGSAP_IS_CONNECTED(__mME) \ + ((__mME) && ((__mME)->vlr) && \ + (OGS_FSM_CHECK(&(__mME)->vlr->sm, sgsap_state_connected))) +#define MME_P_TMSI_IS_AVAILABLE(__mME) \ + (MME_SGSAP_IS_CONNECTED(__mME) && (__mME)->p_tmsi) + typedef struct mme_vlr_s { ogs_lnode_t lnode; diff --git a/src/mme/s1ap-build.c b/src/mme/s1ap-build.c index f3fd38c255..e088dad7b2 100644 --- a/src/mme/s1ap-build.c +++ b/src/mme/s1ap-build.c @@ -21,6 +21,7 @@ #include "mme-context.h" #include "mme-kdf.h" +#include "mme-sm.h" #include "s1ap-build.h" #include "s1ap-conv.h" @@ -491,7 +492,8 @@ int s1ap_build_initial_context_setup_request( memcpy(SecurityKey->buf, mme_ue->kenb, SecurityKey->size); /* Set CS-Fallback */ - if (mme_ue->nas_eps.type == MME_EPS_TYPE_EXTENDED_SERVICE_REQUEST) { + if (mme_ue->nas_eps.type == MME_EPS_TYPE_EXTENDED_SERVICE_REQUEST && + MME_P_TMSI_IS_AVAILABLE(mme_ue)) { S1AP_CSFallbackIndicator_t *CSFallbackIndicator = NULL; S1AP_LAI_t *LAI = NULL;