[SGsAP] clarify P_TMSI availablity

This commit is contained in:
Sukchan Lee 2019-07-06 23:30:05 +09:00
parent 0bbc5124e7
commit 65cb21ce05
4 changed files with 16 additions and 6 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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;

View File

@ -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;