From 459a6ec37233cd9ff24d689739b81f4b8d5ccbd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Leroy?= <frederic.leroy@b-com.com> Date: Tue, 23 Aug 2016 14:46:25 +0200 Subject: [PATCH] refactor(conf2uedata): use user_plmns struct to store plmns lists This remove the old static lists --- openair3/NAS/TOOLS/conf2uedata.c | 27 ++++++++++------------ openair3/NAS/TOOLS/conf2uedata.h | 15 +++++++----- openair3/NAS/TOOLS/conf_emm.c | 4 ++-- openair3/NAS/TOOLS/conf_emm.h | 3 ++- openair3/NAS/TOOLS/conf_usim.c | 39 ++++++++++++++++---------------- openair3/NAS/TOOLS/conf_usim.h | 3 ++- 6 files changed, 47 insertions(+), 44 deletions(-) diff --git a/openair3/NAS/TOOLS/conf2uedata.c b/openair3/NAS/TOOLS/conf2uedata.c index 3a783c2fe3..2e9317dc1c 100644 --- a/openair3/NAS/TOOLS/conf2uedata.c +++ b/openair3/NAS/TOOLS/conf2uedata.c @@ -12,12 +12,6 @@ #include "conf_user_data.h" #include "conf_usim.h" -plmns_list ucplmns; -plmns_list oplmns; -plmns_list ocplmns; -plmns_list fplmns; -plmns_list ehplmns; - int plmn_nb = 0; plmn_conf_param_t* user_plmn_list=NULL; @@ -106,6 +100,8 @@ int parse_config_file(const char *output_dir, const char *conf_filename) { usim_data_t usim_data; usim_data_conf_t usim_data_conf; + user_plmns_t user_plmns; + sprintf(user, "%s%d", UE, i); ue_setting = config_setting_get_member(root_setting, user); @@ -114,7 +110,7 @@ int parse_config_file(const char *output_dir, const char *conf_filename) { return EXIT_FAILURE; } - rc = parse_ue_plmn_param(ue_setting, i, &usim_data_conf.hplmn); + rc = parse_user_plmns_conf(ue_setting, i, &user_plmns, &usim_data_conf.hplmn); if (rc != EXIT_SUCCESS) { return EXIT_FAILURE; } @@ -132,10 +128,10 @@ int parse_config_file(const char *output_dir, const char *conf_filename) { printf("Problem in SIM section for UE%d. EXITING...\n", i); return EXIT_FAILURE; } - gen_usim_data(&usim_data_conf, &usim_data); + gen_usim_data(&usim_data_conf, &usim_data, &user_plmns); write_usim_data(output_dir, i, &usim_data); - gen_emm_data(&emm_data, usim_data_conf.hplmn, usim_data_conf.msin); + gen_emm_data(&emm_data, usim_data_conf.hplmn, usim_data_conf.msin, user_plmns.equivalents_home.size); write_emm_data(output_dir, i, &emm_data); } @@ -221,7 +217,8 @@ int parse_plmns(config_setting_t *all_plmn_setting) { return rc; } -int parse_ue_plmn_param(config_setting_t *ue_setting, int user_id, const char **h) { +int parse_user_plmns_conf(config_setting_t *ue_setting, int user_id, + user_plmns_t *user_plmns, const char **h) { int nb_errors = 0; const char *hplmn; @@ -236,15 +233,15 @@ int parse_ue_plmn_param(config_setting_t *ue_setting, int user_id, const char ** return EXIT_FAILURE; } - if ( parse_Xplmn(ue_setting, UCPLMN, user_id, &ucplmns) == EXIT_FAILURE ) + if ( parse_Xplmn(ue_setting, UCPLMN, user_id, &user_plmns->users_controlled) == EXIT_FAILURE ) nb_errors++; - if ( parse_Xplmn(ue_setting, OPLMN, user_id, &oplmns) == EXIT_FAILURE ) + if ( parse_Xplmn(ue_setting, OPLMN, user_id, &user_plmns->operators) == EXIT_FAILURE ) nb_errors++; - if ( parse_Xplmn(ue_setting, OCPLMN, user_id, &ocplmns) == EXIT_FAILURE ) + if ( parse_Xplmn(ue_setting, OCPLMN, user_id, &user_plmns->operators_controlled) == EXIT_FAILURE ) nb_errors++; - if ( parse_Xplmn(ue_setting, FPLMN, user_id, &fplmns) == EXIT_FAILURE ) + if ( parse_Xplmn(ue_setting, FPLMN, user_id, &user_plmns->forbiddens) == EXIT_FAILURE ) nb_errors++; - if ( parse_Xplmn(ue_setting, EHPLMN, user_id, &ehplmns) == EXIT_FAILURE ) + if ( parse_Xplmn(ue_setting, EHPLMN, user_id, &user_plmns->equivalents_home) == EXIT_FAILURE ) nb_errors++; if ( nb_errors > 0 ) diff --git a/openair3/NAS/TOOLS/conf2uedata.h b/openair3/NAS/TOOLS/conf2uedata.h index 64a182af75..21cc2c3fbd 100644 --- a/openair3/NAS/TOOLS/conf2uedata.h +++ b/openair3/NAS/TOOLS/conf2uedata.h @@ -48,11 +48,13 @@ typedef struct { int *items; } plmns_list; -extern plmns_list ucplmns; -extern plmns_list oplmns; -extern plmns_list ocplmns; -extern plmns_list fplmns; -extern plmns_list ehplmns; +typedef struct { + plmns_list users_controlled; + plmns_list operators; + plmns_list operators_controlled; + plmns_list forbiddens; + plmns_list equivalents_home; +} user_plmns_t; extern int plmn_nb; @@ -68,7 +70,8 @@ void fill_network_record_list(void); int parse_plmn_param(config_setting_t *plmn_setting, int index); int parse_plmns(config_setting_t *all_plmn_setting); int get_plmn_index(const char * mccmnc); -int parse_ue_plmn_param(config_setting_t *ue_setting, int user_id, const char **hplmn); +int parse_user_plmns_conf(config_setting_t *ue_setting, int user_id, + user_plmns_t *user_plmns, const char **h); int parse_Xplmn(config_setting_t *ue_setting, const char *section, int user_id, plmns_list *plmns); diff --git a/openair3/NAS/TOOLS/conf_emm.c b/openair3/NAS/TOOLS/conf_emm.c index ca9665e6d6..bc9f3441ae 100644 --- a/openair3/NAS/TOOLS/conf_emm.c +++ b/openair3/NAS/TOOLS/conf_emm.c @@ -5,7 +5,7 @@ #include "conf_emm.h" #include "fs.h" -void gen_emm_data(emm_nvdata_t *emm_data, const char *hplmn, const char *msin) { +void gen_emm_data(emm_nvdata_t *emm_data, const char *hplmn, const char *msin, int ehplmn_count) { memset(emm_data, 0, sizeof(emm_nvdata_t)); int hplmn_index = get_plmn_index(hplmn); emm_data->imsi.length = 8; @@ -53,7 +53,7 @@ void gen_emm_data(emm_nvdata_t *emm_data, const char *hplmn, const char *msin) { emm_data->rplmn.MNCdigit1 = user_plmn_list[hplmn_index].mnc[0]; emm_data->rplmn.MNCdigit2 = user_plmn_list[hplmn_index].mnc[1]; - emm_data->eplmn.n_plmns = ehplmns.size; + emm_data->eplmn.n_plmns = ehplmn_count; } int write_emm_data(const char *directory, int user_id, emm_nvdata_t *emm_data) { diff --git a/openair3/NAS/TOOLS/conf_emm.h b/openair3/NAS/TOOLS/conf_emm.h index 996e63ca05..c405e02612 100644 --- a/openair3/NAS/TOOLS/conf_emm.h +++ b/openair3/NAS/TOOLS/conf_emm.h @@ -3,7 +3,8 @@ #include "emmData.h" -void gen_emm_data(emm_nvdata_t *emm_data, const char *hplmn, const char *msin); +void gen_emm_data(emm_nvdata_t *emm_data, const char *hplmn, const char *msin, + int ehplmn_count); int write_emm_data(const char *directory, int user_id, emm_nvdata_t *emm_data); int get_msin_parity(const char * msin, const char *mcc, const char *mnc); diff --git a/openair3/NAS/TOOLS/conf_usim.c b/openair3/NAS/TOOLS/conf_usim.c index 9161041862..8b1a80ad52 100644 --- a/openair3/NAS/TOOLS/conf_usim.c +++ b/openair3/NAS/TOOLS/conf_usim.c @@ -5,8 +5,8 @@ #include "utils.h" #include "conf_emm.h" #include "fs.h" -#include "conf_usim.h" #include "conf2uedata.h" +#include "conf_usim.h" int parse_ue_sim_param(config_setting_t *ue_setting, int user_id, usim_data_conf_t *u) { int rc = EXIT_SUCCESS; @@ -40,7 +40,8 @@ int parse_ue_sim_param(config_setting_t *ue_setting, int user_id, usim_data_conf return EXIT_SUCCESS; } -void gen_usim_data(usim_data_conf_t *u, usim_data_t *usim_data) { +void gen_usim_data(usim_data_conf_t *u, usim_data_t *usim_data, + const user_plmns_t *user_plmns) { int hplmn_index = get_plmn_index(u->hplmn); memset(usim_data, 0, sizeof(usim_data_t)); usim_data->imsi.length = 8; @@ -96,9 +97,9 @@ void gen_usim_data(usim_data_conf_t *u, usim_data_t *usim_data) { for (int i = 0; i < USIM_FPLMN_MAX; i++) { memset(&usim_data->fplmn[i], 0xff, sizeof(plmn_t)); } - if (fplmns.size > 0) { - for (int i = 0; i < fplmns.size; i++) { - usim_data->fplmn[i] = user_network_record_list[fplmns.items[i]].plmn; + if (user_plmns->forbiddens.size > 0) { + for (int i = 0; i < user_plmns->forbiddens.size; i++) { + usim_data->fplmn[i] = user_network_record_list[user_plmns->forbiddens.items[i]].plmn; } } @@ -183,8 +184,8 @@ void gen_usim_data(usim_data_conf_t *u, usim_data_t *usim_data) { /* * PLMN Network Name and Operator PLMN List */ - for (int i = 0; i < oplmns.size; i++) { - network_record_t record = user_network_record_list[oplmns.items[i]]; + for (int i = 0; i < user_plmns->operators.size; i++) { + network_record_t record = user_network_record_list[user_plmns->operators.items[i]]; usim_data->pnn[i].fullname.type = USIM_PNN_FULLNAME_TAG; usim_data->pnn[i].fullname.length = strlen(record.fullname); strncpy((char*) usim_data->pnn[i].fullname.value, record.fullname, @@ -198,8 +199,8 @@ void gen_usim_data(usim_data_conf_t *u, usim_data_t *usim_data) { usim_data->opl[i].end = record.tac_end; usim_data->opl[i].record_id = i; } - if (oplmns.size < USIM_OPL_MAX) { - for (int i = oplmns.size; i < USIM_OPL_MAX; i++) { + if (user_plmns->operators.size < USIM_OPL_MAX) { + for (int i = user_plmns->operators.size; i < USIM_OPL_MAX; i++) { memset(&usim_data->opl[i].plmn, 0xff, sizeof(plmn_t)); } } @@ -207,11 +208,11 @@ void gen_usim_data(usim_data_conf_t *u, usim_data_t *usim_data) { /* * List of Equivalent HPLMNs */ - for (int i = 0; i < ehplmns.size; i++) { - usim_data->ehplmn[i] = user_network_record_list[ehplmns.items[i]].plmn; + for (int i = 0; i < user_plmns->equivalents_home.size; i++) { + usim_data->ehplmn[i] = user_network_record_list[user_plmns->equivalents_home.items[i]].plmn; } - if (ehplmns.size < USIM_EHPLMN_MAX) { - for (int i = ehplmns.size; i < USIM_EHPLMN_MAX; i++) { + if (user_plmns->equivalents_home.size < USIM_EHPLMN_MAX) { + for (int i = user_plmns->equivalents_home.size; i < USIM_EHPLMN_MAX; i++) { memset(&usim_data->ehplmn[i], 0xff, sizeof(plmn_t)); } } @@ -227,9 +228,9 @@ void gen_usim_data(usim_data_conf_t *u, usim_data_t *usim_data) { for (int i = 0; i < USIM_PLMN_MAX; i++) { memset(&usim_data->plmn[i], 0xff, sizeof(plmn_t)); } - if (ucplmns.size > 0) { - for (int i = 0; i < ucplmns.size; i++) { - usim_data->plmn[i].plmn = user_network_record_list[ucplmns.items[i]].plmn; + if (user_plmns->users_controlled.size > 0) { + for (int i = 0; i < user_plmns->users_controlled.size; i++) { + usim_data->plmn[i].plmn = user_network_record_list[user_plmns->users_controlled.items[i]].plmn; } } @@ -238,9 +239,9 @@ void gen_usim_data(usim_data_conf_t *u, usim_data_t *usim_data) { for (int i = 0; i < USIM_OPLMN_MAX; i++) { memset(&usim_data->oplmn[i], 0xff, sizeof(plmn_t)); } - if (ocplmns.size > 0) { - for (int i = 0; i < ocplmns.size; i++) { - usim_data->oplmn[i].plmn = user_network_record_list[ocplmns.items[i]].plmn; + if (user_plmns->operators_controlled.size > 0) { + for (int i = 0; i < user_plmns->operators_controlled.size; i++) { + usim_data->oplmn[i].plmn = user_network_record_list[user_plmns->operators_controlled.items[i]].plmn; usim_data->oplmn[i].AcT = (USIM_ACT_GSM | USIM_ACT_UTRAN | USIM_ACT_EUTRAN); } diff --git a/openair3/NAS/TOOLS/conf_usim.h b/openair3/NAS/TOOLS/conf_usim.h index 3375bf9d5d..5018be8148 100644 --- a/openair3/NAS/TOOLS/conf_usim.h +++ b/openair3/NAS/TOOLS/conf_usim.h @@ -40,6 +40,7 @@ typedef struct { int parse_ue_sim_param(config_setting_t *ue_setting, int user_id, usim_data_conf_t *u); int write_usim_data(const char *directory, int user_id, usim_data_t *usim_data); -void gen_usim_data(usim_data_conf_t *u, usim_data_t *usim_data); +void gen_usim_data(usim_data_conf_t *u, usim_data_t *usim_data, + const user_plmns_t *user_plmns); #endif -- 2.26.2