From 8bc36c3b96e0c7d4260ce47c4f2883631fdabf8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Leroy?= <frederic.leroy@b-com.com> Date: Tue, 26 Jul 2016 11:59:11 +0200 Subject: [PATCH] UE/EMM: move emm_nvram filename to nas_user_t --- openair3/NAS/UE/EMM/emm_main.c | 91 +++++++++++++++------------------- openair3/NAS/UE/EMM/emm_main.h | 2 +- openair3/NAS/UE/nas_proc.c | 2 +- openair3/NAS/UE/nas_ue_task.c | 9 +++- openair3/NAS/UE/user_defs.h | 1 + 5 files changed, 51 insertions(+), 54 deletions(-) diff --git a/openair3/NAS/UE/EMM/emm_main.c b/openair3/NAS/UE/EMM/emm_main.c index 980deb15830..c64fd6df261 100644 --- a/openair3/NAS/UE/EMM/emm_main.c +++ b/openair3/NAS/UE/EMM/emm_main.c @@ -344,50 +344,43 @@ void emm_main_initialize(nas_user_t *user, emm_indication_callback_t cb, const c */ memset(&user->emm_data->nvdata.rplmn, 0xFF, sizeof(plmn_t)); user->emm_data->nvdata.eplmn.n_plmns = 0; - /* Get EMM data pathname */ - char *path = memory_get_path(EMM_NVRAM_DIRNAME, EMM_NVRAM_FILENAME); - if (path == NULL) { - LOG_TRACE(ERROR, "EMM-MAIN - Failed to get EMM data pathname"); - } else { - /* Get EMM data stored in the non-volatile memory device */ - int rc = memory_read(path, &user->emm_data->nvdata, sizeof(emm_nvdata_t)); + /* Get EMM data stored in the non-volatile memory device */ + int rc = memory_read(user->emm_nvdata_store, &user->emm_data->nvdata, sizeof(emm_nvdata_t)); - if (rc != RETURNok) { - LOG_TRACE(ERROR, "EMM-MAIN - Failed to read %s", path); - } else { - /* Check the IMSI */ - LOG_TRACE(INFO, "EMM-MAIN - EMM data successfully read"); - user->emm_data->imsi = &user->usim_data.imsi; - int imsi_ok = _emm_main_imsi_cmp(&user->emm_data->nvdata.imsi, - &user->usim_data.imsi); - - if (!imsi_ok) { - LOG_TRACE(WARNING, "EMM-MAIN - IMSI checking failed nvram: " - "%02x.%02x.%02x.%02x.%02x.%02x.%02x.%02x, " - "usim: %02x.%02x.%02x.%02x.%02x.%02x.%02x.%02x", - user->emm_data->nvdata.imsi.u.value[0], - user->emm_data->nvdata.imsi.u.value[1], - user->emm_data->nvdata.imsi.u.value[2], - user->emm_data->nvdata.imsi.u.value[3], - user->emm_data->nvdata.imsi.u.value[4], - user->emm_data->nvdata.imsi.u.value[5], - user->emm_data->nvdata.imsi.u.value[6], - user->emm_data->nvdata.imsi.u.value[7], - user->usim_data.imsi.u.value[0], - user->usim_data.imsi.u.value[1], - user->usim_data.imsi.u.value[2], - user->usim_data.imsi.u.value[3], - user->usim_data.imsi.u.value[4], - user->usim_data.imsi.u.value[5], - user->usim_data.imsi.u.value[6], - user->usim_data.imsi.u.value[7]); - memset(&user->emm_data->nvdata.rplmn, 0xFF, sizeof(plmn_t)); - user->emm_data->nvdata.eplmn.n_plmns = 0; - } - } + if (rc != RETURNok) { + LOG_TRACE(ERROR, "EMM-MAIN - Failed to read %s", user->emm_nvdata_store); + exit(EXIT_FAILURE); + } - free(path); + /* Check the IMSI */ + LOG_TRACE(INFO, "EMM-MAIN - EMM data successfully read"); + user->emm_data->imsi = &user->usim_data.imsi; + int imsi_ok = _emm_main_imsi_cmp(&user->emm_data->nvdata.imsi, + &user->usim_data.imsi); + + if (!imsi_ok) { + LOG_TRACE(WARNING, "EMM-MAIN - IMSI checking failed nvram: " + "%02x.%02x.%02x.%02x.%02x.%02x.%02x.%02x, " + "usim: %02x.%02x.%02x.%02x.%02x.%02x.%02x.%02x", + user->emm_data->nvdata.imsi.u.value[0], + user->emm_data->nvdata.imsi.u.value[1], + user->emm_data->nvdata.imsi.u.value[2], + user->emm_data->nvdata.imsi.u.value[3], + user->emm_data->nvdata.imsi.u.value[4], + user->emm_data->nvdata.imsi.u.value[5], + user->emm_data->nvdata.imsi.u.value[6], + user->emm_data->nvdata.imsi.u.value[7], + user->usim_data.imsi.u.value[0], + user->usim_data.imsi.u.value[1], + user->usim_data.imsi.u.value[2], + user->usim_data.imsi.u.value[3], + user->usim_data.imsi.u.value[4], + user->usim_data.imsi.u.value[5], + user->usim_data.imsi.u.value[6], + user->usim_data.imsi.u.value[7]); + memset(&user->emm_data->nvdata.rplmn, 0xFF, sizeof(plmn_t)); + user->emm_data->nvdata.eplmn.n_plmns = 0; } } @@ -437,10 +430,12 @@ void emm_main_initialize(nas_user_t *user, emm_indication_callback_t cb, const c ** Others: None ** ** ** ***************************************************************************/ -void emm_main_cleanup(emm_data_t *emm_data) +void emm_main_cleanup(nas_user_t *user) { LOG_FUNC_IN; + emm_data_t *emm_data = user->emm_data; + if (emm_data->usim_is_valid) { /* * TODO: Update USIM application data @@ -452,16 +447,10 @@ void emm_main_cleanup(emm_data_t *emm_data) * - Registered PLMN * - List of equivalent PLMNs */ - char *path = memory_get_path(EMM_NVRAM_DIRNAME, EMM_NVRAM_FILENAME); - - if (path == NULL) { - LOG_TRACE(ERROR, "EMM-MAIN - Failed to get EMM data pathname"); - } else { - int rc = memory_write(path, &emm_data->nvdata, sizeof(emm_nvdata_t)); + int rc = memory_write(user->emm_nvdata_store, &emm_data->nvdata, sizeof(emm_nvdata_t)); - if (rc != RETURNok) { - LOG_TRACE(ERROR, "EMM-MAIN - Failed to write %s", path); - } + if (rc != RETURNok) { + LOG_TRACE(ERROR, "EMM-MAIN - Failed to write %s", user->emm_nvdata_store); } /* Release dynamically allocated memory */ diff --git a/openair3/NAS/UE/EMM/emm_main.h b/openair3/NAS/UE/EMM/emm_main.h index 1885a42469f..aa98965b041 100644 --- a/openair3/NAS/UE/EMM/emm_main.h +++ b/openair3/NAS/UE/EMM/emm_main.h @@ -70,7 +70,7 @@ typedef int (*emm_indication_callback_t) (user_api_id_t *user_api_id, Stat_t, ta void emm_main_initialize(nas_user_t *user, emm_indication_callback_t cb, const char *imei); -void emm_main_cleanup(emm_data_t *emm_data); +void emm_main_cleanup(nas_user_t *user); /* User's getter of UE's identity */ diff --git a/openair3/NAS/UE/nas_proc.c b/openair3/NAS/UE/nas_proc.c index b5ecc6a6ed9..97ecea8e5a7 100644 --- a/openair3/NAS/UE/nas_proc.c +++ b/openair3/NAS/UE/nas_proc.c @@ -138,7 +138,7 @@ void nas_proc_cleanup(nas_user_t *user) /* Perform the EPS Mobility Manager's clean up procedure */ - emm_main_cleanup(user->emm_data); + emm_main_cleanup(user); /* Perform the EPS Session Manager's clean up procedure */ esm_main_cleanup(user->esm_data); diff --git a/openair3/NAS/UE/nas_ue_task.c b/openair3/NAS/UE/nas_ue_task.c index af176bd169c..8393f0c786a 100644 --- a/openair3/NAS/UE/nas_ue_task.c +++ b/openair3/NAS/UE/nas_ue_task.c @@ -105,7 +105,14 @@ void *nas_ue_task(void *args_p) /* Get UE's data pathname */ user->user_nvdata_store = memory_get_path(USER_NVRAM_DIRNAME, USER_NVRAM_FILENAME); if ( user->user_nvdata_store == NULL ) { - LOG_E(NAS, "[UE %d] - Failed to get USIM data application filename", user->ueid); + LOG_E(NAS, "[UE %d] - Failed to get USIM nvdata filename", user->ueid); + exit(EXIT_FAILURE); + } + + /* Get EMM data pathname */ + user->emm_nvdata_store = memory_get_path(EMM_NVRAM_DIRNAME, EMM_NVRAM_FILENAME); + if ( user->emm_nvdata_store == NULL ) { + LOG_E(NAS, "[UE %d] - Failed to get EMM nvdata filename", user->ueid); exit(EXIT_FAILURE); } diff --git a/openair3/NAS/UE/user_defs.h b/openair3/NAS/UE/user_defs.h index ac16e39ef64..63eb860d80f 100644 --- a/openair3/NAS/UE/user_defs.h +++ b/openair3/NAS/UE/user_defs.h @@ -70,6 +70,7 @@ typedef struct { // Eps Mobility Management emm_fsm_state_t emm_fsm_status; // Current EPS Mobility Management status emm_data_t *emm_data; // EPS mobility management data + const char *emm_nvdata_store; emm_plmn_list_t *emm_plmn_list; // list of PLMN identities authentication_data_t *authentication_data; security_data_t *security_data; //Internal data used for security mode control procedure -- GitLab