diff --git a/openair3/NAS/TOOLS/conf2uedata.c b/openair3/NAS/TOOLS/conf2uedata.c index 197c6394548be8cecea66883ed178976d2b23848..44005b9dd18a178fd962379cd0cf2a772063a620 100644 --- a/openair3/NAS/TOOLS/conf2uedata.c +++ b/openair3/NAS/TOOLS/conf2uedata.c @@ -12,11 +12,6 @@ #include "conf_user_data.h" #include "conf_usim.h" -int plmn_nb = 0; - -plmn_conf_param_t* user_plmn_list=NULL; -network_record_t* user_network_record_list = NULL; - int main(int argc, char**argv) { int option; const char* conf_file = NULL; @@ -71,6 +66,8 @@ int parse_config_file(const char *output_dir, const char *conf_filename) { char user[10]; config_t cfg; + networks_t networks;; + ret = get_config_from_file(conf_filename, &cfg); if (ret == EXIT_FAILURE) { exit(1); @@ -85,11 +82,10 @@ int parse_config_file(const char *output_dir, const char *conf_filename) { return (EXIT_FAILURE); } - rc = parse_plmns(all_plmn_setting); + rc = parse_plmns(all_plmn_setting, &networks); if (rc == EXIT_FAILURE) { return rc; } - fill_network_record_list(); for (int i = 0; i < ue_nb; i++) { emm_nvdata_t emm_data; @@ -110,7 +106,7 @@ int parse_config_file(const char *output_dir, const char *conf_filename) { return EXIT_FAILURE; } - rc = parse_user_plmns_conf(ue_setting, i, &user_plmns, &usim_data_conf.hplmn); + rc = parse_user_plmns_conf(ue_setting, i, &user_plmns, &usim_data_conf.hplmn, networks); if (rc != EXIT_SUCCESS) { return EXIT_FAILURE; } @@ -128,13 +124,16 @@ 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, &user_plmns); + gen_usim_data(&usim_data_conf, &usim_data, &user_plmns, networks); write_usim_data(output_dir, i, &usim_data); - gen_emm_data(&emm_data, usim_data_conf.hplmn, usim_data_conf.msin, user_plmns.equivalents_home.size); + gen_emm_data(&emm_data, usim_data_conf.hplmn, usim_data_conf.msin, + user_plmns.equivalents_home.size, networks); write_emm_data(output_dir, i, &emm_data); } + free(networks.items); + networks.size=0; config_destroy(&cfg); return(EXIT_SUCCESS); } @@ -160,52 +159,52 @@ int get_config_from_file(const char *filename, config_t *config) { } -int parse_plmn_param(config_setting_t *plmn_setting, int index) { +int parse_plmn_param(config_setting_t *plmn_setting, plmn_conf_param_t *conf) { int rc = 0; - rc = config_setting_lookup_string(plmn_setting, - FULLNAME, &user_plmn_list[index].fullname); + rc = config_setting_lookup_string(plmn_setting, FULLNAME, &conf->fullname); if (rc != 1) { - printf("Check PLMN%d FULLNAME. Exiting\n", index); + printf("Error on FULLNAME\n"); return EXIT_FAILURE; } - rc = config_setting_lookup_string(plmn_setting, - SHORTNAME, &user_plmn_list[index].shortname); + rc = config_setting_lookup_string(plmn_setting, SHORTNAME, &conf->shortname); if (rc != 1) { - printf("Check PLMN%d SHORTNAME. Exiting\n", index); + printf("Error on SHORTNAME\n"); return EXIT_FAILURE; } - rc = config_setting_lookup_string(plmn_setting, - MNC, &user_plmn_list[index].mnc); - if (rc != 1 || strlen(user_plmn_list[index].mnc) > 3 - || strlen(user_plmn_list[index].mnc) < 2) { - printf("Check PLMN%d MNC. Exiting\n", index); + rc = config_setting_lookup_string(plmn_setting, MNC, &conf->mnc); + if (rc != 1 || strlen(conf->mnc) > 3 + || strlen(conf->mnc) < 2) { + printf("Error ond MNC. Exiting\n"); return EXIT_FAILURE; } - rc = config_setting_lookup_string(plmn_setting, - MCC, &user_plmn_list[index].mcc); - if (rc != 1 || strlen(user_plmn_list[index].mcc) != 3) { - printf("Check PLMN%d MCC. Exiting\n", index); + rc = config_setting_lookup_string(plmn_setting, MCC, &conf->mcc); + if (rc != 1 || strlen(conf->mcc) != 3) { + printf("Error on MCC\n"); return EXIT_FAILURE; } return EXIT_SUCCESS; } -int parse_plmns(config_setting_t *all_plmn_setting) { +int parse_plmns(config_setting_t *all_plmn_setting, networks_t *networks) { config_setting_t *plmn_setting = NULL; char plmn[10]; int rc = EXIT_SUCCESS; - plmn_nb = config_setting_length(all_plmn_setting); - user_plmn_list = malloc(sizeof(plmn_conf_param_t) * plmn_nb); - user_network_record_list = malloc(sizeof(network_record_t) * plmn_nb); - for (int i = 0; i < plmn_nb; i++) { - memset(&user_network_record_list[i], 0xff, sizeof(network_record_t)); - memset(&user_plmn_list[i], 0xff, sizeof(plmn_conf_param_t)); + int size = 0; + + size = config_setting_length(all_plmn_setting); + + networks->size = size; + networks->items = malloc(sizeof(network_t) * size); + for (int i = 0; i < size; i++) { + memset(&networks->items[i].record, 0xff, sizeof(network_record_t)); } - for (int i = 0; i < plmn_nb; i++) { + + for (int i = 0; i < networks->size; i++) { + network_t *network = &networks->items[i]; sprintf(plmn, "%s%d", PLMN, i); plmn_setting = config_setting_get_member(all_plmn_setting, plmn); if (plmn_setting != NULL) { - rc = parse_plmn_param(plmn_setting, i); + rc = parse_plmn_param(plmn_setting, &network->conf); if (rc == EXIT_FAILURE) { return rc; } @@ -213,12 +212,15 @@ int parse_plmns(config_setting_t *all_plmn_setting) { printf("Problem in PLMN%d. Exiting...\n", i); return EXIT_FAILURE; } + gen_network_record_from_conf(&network->conf, &network->record); + network->plmn = network->record.plmn; } return rc; } int parse_user_plmns_conf(config_setting_t *ue_setting, int user_id, - user_plmns_t *user_plmns, const char **h) { + user_plmns_t *user_plmns, const char **h, + const networks_t networks) { int nb_errors = 0; const char *hplmn; @@ -227,21 +229,21 @@ int parse_user_plmns_conf(config_setting_t *ue_setting, int user_id, return EXIT_FAILURE; } hplmn = *h; - if (get_plmn_index(hplmn) == -1) { + if (get_plmn_index(hplmn, networks) == -1) { printf("HPLMN for UE%d is not defined in PLMN section. Exiting\n", user_id); return EXIT_FAILURE; } - if ( parse_Xplmn(ue_setting, UCPLMN, user_id, &user_plmns->users_controlled) == EXIT_FAILURE ) + if ( parse_Xplmn(ue_setting, UCPLMN, user_id, &user_plmns->users_controlled, networks) == EXIT_FAILURE ) nb_errors++; - if ( parse_Xplmn(ue_setting, OPLMN, user_id, &user_plmns->operators) == EXIT_FAILURE ) + if ( parse_Xplmn(ue_setting, OPLMN, user_id, &user_plmns->operators, networks) == EXIT_FAILURE ) nb_errors++; - if ( parse_Xplmn(ue_setting, OCPLMN, user_id, &user_plmns->operators_controlled) == EXIT_FAILURE ) + if ( parse_Xplmn(ue_setting, OCPLMN, user_id, &user_plmns->operators_controlled, networks) == EXIT_FAILURE ) nb_errors++; - if ( parse_Xplmn(ue_setting, FPLMN, user_id, &user_plmns->forbiddens) == EXIT_FAILURE ) + if ( parse_Xplmn(ue_setting, FPLMN, user_id, &user_plmns->forbiddens, networks) == EXIT_FAILURE ) nb_errors++; - if ( parse_Xplmn(ue_setting, EHPLMN, user_id, &user_plmns->equivalents_home) == EXIT_FAILURE ) + if ( parse_Xplmn(ue_setting, EHPLMN, user_id, &user_plmns->equivalents_home, networks) == EXIT_FAILURE ) nb_errors++; if ( nb_errors > 0 ) @@ -250,7 +252,7 @@ int parse_user_plmns_conf(config_setting_t *ue_setting, int user_id, } int parse_Xplmn(config_setting_t *ue_setting, const char *section, - int user_id, plmns_list *plmns) { + int user_id, plmns_list *plmns, const networks_t networks) { int rc; int item_count; config_setting_t *setting; @@ -269,7 +271,7 @@ int parse_Xplmn(config_setting_t *ue_setting, const char *section, printf("Check %s section for UE%d. Exiting\n", section, user_id); return EXIT_FAILURE; } - rc = get_plmn_index(mccmnc); + rc = get_plmn_index(mccmnc, networks); if (rc == -1) { printf("The PLMN %s is not defined in PLMN section. Exiting...\n", mccmnc); @@ -283,16 +285,16 @@ int parse_Xplmn(config_setting_t *ue_setting, const char *section, return EXIT_SUCCESS; } -int get_plmn_index(const char * mccmnc) { +int get_plmn_index(const char * mccmnc, const networks_t networks) { char mcc[4]; char mnc[strlen(mccmnc) - 2]; strncpy(mcc, mccmnc, 3); mcc[3] = '\0'; strncpy(mnc, mccmnc + 3, 3); mnc[strlen(mccmnc) - 3] = '\0'; - for (int i = 0; i < plmn_nb; i++) { - if (strcmp(user_plmn_list[i].mcc, mcc) == 0) { - if (strcmp(user_plmn_list[i].mnc, mnc) == 0) { + for (int i = 0; i < networks.size; i++) { + if (strcmp(networks.items[i].conf.mcc, mcc) == 0) { + if (strcmp(networks.items[i].conf.mnc, mnc) == 0) { return i; } } @@ -300,7 +302,6 @@ int get_plmn_index(const char * mccmnc) { return -1; } - plmn_t make_plmn_from_conf(const plmn_conf_param_t *plmn_conf) { plmn_t plmn; char num[6]; @@ -320,21 +321,17 @@ plmn_t make_plmn_from_conf(const plmn_conf_param_t *plmn_conf) { return plmn; } -void fill_network_record_list() { - for (int i = 0; i < plmn_nb; i++) { - strcpy(user_network_record_list[i].fullname, - user_plmn_list[i].fullname); - strcpy(user_network_record_list[i].shortname, - user_plmn_list[i].shortname); +void gen_network_record_from_conf(const plmn_conf_param_t *conf, network_record_t *record) { + strcpy(record->fullname, conf->fullname); + strcpy(record->shortname, conf->shortname); char num[6]; - sprintf(num, "%s%s", user_plmn_list[i].mcc, user_plmn_list[i].mnc); - user_network_record_list[i].num = atoi(num); + sprintf(num, "%s%s", conf->mcc, conf->mnc); + record->num = atoi(num); - user_network_record_list[i].plmn = make_plmn_from_conf(&user_plmn_list[i]); - user_network_record_list[i].tac_end = 0xfffd; - user_network_record_list[i].tac_start = 0x0001; - } + record->plmn = make_plmn_from_conf(conf); + record->tac_end = 0xfffd; + record->tac_start = 0x0001; } /* diff --git a/openair3/NAS/TOOLS/conf2uedata.h b/openair3/NAS/TOOLS/conf2uedata.h index 21cc2c3fbd9e2f48af6a777f7a8db3d428089784..3693aafffb7f512228aad4d5b789832f6666d4b6 100644 --- a/openair3/NAS/TOOLS/conf2uedata.h +++ b/openair3/NAS/TOOLS/conf2uedata.h @@ -56,24 +56,31 @@ typedef struct { plmns_list equivalents_home; } user_plmns_t; -extern int plmn_nb; +typedef struct { + plmn_conf_param_t conf; + network_record_t record; + plmn_t plmn; +} network_t; -extern plmn_conf_param_t* user_plmn_list; -extern network_record_t* user_network_record_list; +typedef struct { + int size; + network_t *items; +} networks_t; int get_config_from_file(const char *filename, config_t *config); int parse_config_file(const char *output_dir, const char *filename); void _display_usage(void); -void fill_network_record_list(void); +void gen_network_record_from_conf(const plmn_conf_param_t *conf, network_record_t *record); -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_plmn_param(config_setting_t *plmn_setting, plmn_conf_param_t *conf); +int parse_plmns(config_setting_t *all_plmn_setting, networks_t *plmns); +int get_plmn_index(const char * mccmnc, const networks_t networks); int parse_user_plmns_conf(config_setting_t *ue_setting, int user_id, - user_plmns_t *user_plmns, const char **h); + user_plmns_t *user_plmns, const char **h, + const networks_t networks); int parse_Xplmn(config_setting_t *ue_setting, const char *section, - int user_id, plmns_list *plmns); + int user_id, plmns_list *plmns, const networks_t networks); #endif // _CONF2UEDATA_H diff --git a/openair3/NAS/TOOLS/conf_emm.c b/openair3/NAS/TOOLS/conf_emm.c index bc9f3441ae2418df51a9932f9e05cde0bd6e2a8d..04debda412189944d49aa458a54ef3fff2208f3d 100644 --- a/openair3/NAS/TOOLS/conf_emm.c +++ b/openair3/NAS/TOOLS/conf_emm.c @@ -1,26 +1,26 @@ #include <string.h> -#include "conf2uedata.h" #include "memory.h" #include "conf_emm.h" #include "fs.h" -void gen_emm_data(emm_nvdata_t *emm_data, const char *hplmn, const char *msin, int ehplmn_count) { +void gen_emm_data(emm_nvdata_t *emm_data, const char *hplmn, const char *msin, int ehplmn_count, const networks_t networks) { memset(emm_data, 0, sizeof(emm_nvdata_t)); - int hplmn_index = get_plmn_index(hplmn); + int hplmn_index = get_plmn_index(hplmn, networks); + plmn_conf_param_t *conf = &networks.items[hplmn_index].conf; emm_data->imsi.length = 8; - emm_data->imsi.u.num.parity = get_msin_parity(msin, user_plmn_list[hplmn_index].mcc, user_plmn_list[hplmn_index].mnc); - emm_data->imsi.u.num.digit1 = user_plmn_list[hplmn_index].mcc[0]; - emm_data->imsi.u.num.digit2 = user_plmn_list[hplmn_index].mcc[1]; - emm_data->imsi.u.num.digit3 = user_plmn_list[hplmn_index].mcc[2]; + emm_data->imsi.u.num.parity = get_msin_parity(msin, conf->mcc, conf->mnc); + emm_data->imsi.u.num.digit1 = conf->mcc[0]; + emm_data->imsi.u.num.digit2 = conf->mcc[1]; + emm_data->imsi.u.num.digit3 = conf->mcc[2]; - emm_data->imsi.u.num.digit4 = user_plmn_list[hplmn_index].mnc[0]; - emm_data->imsi.u.num.digit5 = user_plmn_list[hplmn_index].mnc[1]; + emm_data->imsi.u.num.digit4 = conf->mnc[0]; + emm_data->imsi.u.num.digit5 = conf->mnc[1]; - if (strlen(user_plmn_list[hplmn_index].mnc) == 3) { - emm_data->rplmn.MNCdigit3 = user_plmn_list[hplmn_index].mnc[2]; + if (strlen(conf->mnc) == 3) { + emm_data->rplmn.MNCdigit3 = conf->mnc[2]; - emm_data->imsi.u.num.digit6 = user_plmn_list[hplmn_index].mnc[2]; + emm_data->imsi.u.num.digit6 = conf->mnc[2]; emm_data->imsi.u.num.digit7 = msin[0]; emm_data->imsi.u.num.digit8 = msin[1]; emm_data->imsi.u.num.digit9 = msin[2]; @@ -47,11 +47,11 @@ void gen_emm_data(emm_nvdata_t *emm_data, const char *hplmn, const char *msin, i } - emm_data->rplmn.MCCdigit1 = user_plmn_list[hplmn_index].mcc[0]; - emm_data->rplmn.MCCdigit2 = user_plmn_list[hplmn_index].mcc[1]; - emm_data->rplmn.MCCdigit3 = user_plmn_list[hplmn_index].mcc[2]; - emm_data->rplmn.MNCdigit1 = user_plmn_list[hplmn_index].mnc[0]; - emm_data->rplmn.MNCdigit2 = user_plmn_list[hplmn_index].mnc[1]; + emm_data->rplmn.MCCdigit1 = conf->mcc[0]; + emm_data->rplmn.MCCdigit2 = conf->mcc[1]; + emm_data->rplmn.MCCdigit3 = conf->mcc[2]; + emm_data->rplmn.MNCdigit1 = conf->mnc[0]; + emm_data->rplmn.MNCdigit2 = conf->mnc[1]; emm_data->eplmn.n_plmns = ehplmn_count; } diff --git a/openair3/NAS/TOOLS/conf_emm.h b/openair3/NAS/TOOLS/conf_emm.h index c405e026123450bc5f6ca7fd184d1c147c0f00ff..0b5f7370913100363f9cbce9a7c76c4c8cdc3abd 100644 --- a/openair3/NAS/TOOLS/conf_emm.h +++ b/openair3/NAS/TOOLS/conf_emm.h @@ -1,10 +1,10 @@ #ifndef _CONF_EMM_H #define _CONF_EMM_H +#include "conf2uedata.h" #include "emmData.h" -void gen_emm_data(emm_nvdata_t *emm_data, const char *hplmn, const char *msin, - int ehplmn_count); +void gen_emm_data(emm_nvdata_t *emm_data, const char *hplmn, const char *msin, int ehplmn_count, const networks_t networks); 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 8b1a80ad52b79fd090b482946451d0e25d43bea5..da2c44dc23c7a9e896d048a89d7bf7bf7efcaad7 100644 --- a/openair3/NAS/TOOLS/conf_usim.c +++ b/openair3/NAS/TOOLS/conf_usim.c @@ -41,22 +41,23 @@ int parse_ue_sim_param(config_setting_t *ue_setting, int user_id, usim_data_conf } 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); + const user_plmns_t *user_plmns, const networks_t networks) { + int hplmn_index = get_plmn_index(u->hplmn, networks); + const plmn_conf_param_t *conf = &networks.items[hplmn_index].conf; memset(usim_data, 0, sizeof(usim_data_t)); usim_data->imsi.length = 8; usim_data->imsi.u.num.parity = get_msin_parity(u->msin, - user_plmn_list[hplmn_index].mcc, - user_plmn_list[hplmn_index].mnc); + conf->mcc, + conf->mnc); - usim_data->imsi.u.num.digit1 = user_plmn_list[hplmn_index].mcc[0]; - usim_data->imsi.u.num.digit2 = user_plmn_list[hplmn_index].mcc[1]; - usim_data->imsi.u.num.digit3 = user_plmn_list[hplmn_index].mcc[2]; + usim_data->imsi.u.num.digit1 = conf->mcc[0]; + usim_data->imsi.u.num.digit2 = conf->mcc[1]; + usim_data->imsi.u.num.digit3 = conf->mcc[2]; - usim_data->imsi.u.num.digit4 = user_plmn_list[hplmn_index].mnc[0]; - usim_data->imsi.u.num.digit5 = user_plmn_list[hplmn_index].mnc[1]; + usim_data->imsi.u.num.digit4 = conf->mnc[0]; + usim_data->imsi.u.num.digit5 = conf->mnc[1]; - if (strlen(user_plmn_list[hplmn_index].mnc) == 2) { + if (strlen(conf->mnc) == 2) { usim_data->imsi.u.num.digit6 = u->msin[0]; usim_data->imsi.u.num.digit7 = u->msin[1]; usim_data->imsi.u.num.digit8 = u->msin[2]; @@ -68,7 +69,7 @@ void gen_usim_data(usim_data_conf_t *u, usim_data_t *usim_data, usim_data->imsi.u.num.digit14 = u->msin[8]; usim_data->imsi.u.num.digit15 = u->msin[9]; } else { - usim_data->imsi.u.num.digit6 = user_plmn_list[hplmn_index].mnc[2]; + usim_data->imsi.u.num.digit6 = conf->mnc[2]; usim_data->imsi.u.num.digit7 = u->msin[0]; usim_data->imsi.u.num.digit8 = u->msin[1]; usim_data->imsi.u.num.digit9 = u->msin[2]; @@ -99,7 +100,7 @@ void gen_usim_data(usim_data_conf_t *u, usim_data_t *usim_data, } 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; + usim_data->fplmn[i] = networks.items[user_plmns->forbiddens.items[i]].plmn; } } @@ -107,7 +108,7 @@ void gen_usim_data(usim_data_conf_t *u, usim_data_t *usim_data, * Location Information */ usim_data->loci.tmsi = DEFAULT_TMSI; - usim_data->loci.lai.plmn = user_network_record_list[hplmn_index].plmn; + usim_data->loci.lai.plmn = networks.items[hplmn_index].plmn; usim_data->loci.lai.lac = DEFAULT_LAC; usim_data->loci.status = USIM_LOCI_NOT_UPDATED; /* @@ -117,7 +118,7 @@ void gen_usim_data(usim_data_conf_t *u, usim_data_t *usim_data, usim_data->psloci.signature[0] = 0x01; usim_data->psloci.signature[1] = 0x02; usim_data->psloci.signature[2] = 0x03; - usim_data->psloci.rai.plmn = user_network_record_list[hplmn_index].plmn; + usim_data->psloci.rai.plmn = networks.items[hplmn_index].plmn; usim_data->psloci.rai.lac = DEFAULT_LAC; usim_data->psloci.rai.rac = DEFAULT_RAC; usim_data->psloci.status = USIM_PSLOCI_NOT_UPDATED; @@ -126,7 +127,7 @@ void gen_usim_data(usim_data_conf_t *u, usim_data_t *usim_data, */ usim_data->ad.UE_Operation_Mode = USIM_NORMAL_MODE; usim_data->ad.Additional_Info = 0xffff; - usim_data->ad.MNC_Length = strlen(user_plmn_list[hplmn_index].mnc); + usim_data->ad.MNC_Length = strlen(conf->mnc); /* * EPS NAS security context */ @@ -185,7 +186,7 @@ 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 < user_plmns->operators.size; i++) { - network_record_t record = user_network_record_list[user_plmns->operators.items[i]]; + network_record_t record = networks.items[user_plmns->operators.items[i]].record; 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, @@ -209,7 +210,7 @@ void gen_usim_data(usim_data_conf_t *u, usim_data_t *usim_data, * List of Equivalent HPLMNs */ 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; + usim_data->ehplmn[i] = networks.items[user_plmns->equivalents_home.items[i]].plmn; } if (user_plmns->equivalents_home.size < USIM_EHPLMN_MAX) { for (int i = user_plmns->equivalents_home.size; i < USIM_EHPLMN_MAX; i++) { @@ -219,7 +220,7 @@ void gen_usim_data(usim_data_conf_t *u, usim_data_t *usim_data, /* * Home PLMN Selector with Access Technology */ - usim_data->hplmn.plmn = user_network_record_list[hplmn_index].plmn; + usim_data->hplmn.plmn = networks.items[hplmn_index].plmn; usim_data->hplmn.AcT = (USIM_ACT_GSM | USIM_ACT_UTRAN | USIM_ACT_EUTRAN); /* @@ -230,7 +231,7 @@ void gen_usim_data(usim_data_conf_t *u, usim_data_t *usim_data, } 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; + usim_data->plmn[i].plmn = networks.items[user_plmns->users_controlled.items[i]].plmn; } } @@ -241,7 +242,7 @@ void gen_usim_data(usim_data_conf_t *u, usim_data_t *usim_data, } 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].plmn = networks.items[user_plmns->operators_controlled.items[i]].plmn; usim_data->oplmn[i].AcT = (USIM_ACT_GSM | USIM_ACT_UTRAN | USIM_ACT_EUTRAN); } @@ -250,7 +251,7 @@ void gen_usim_data(usim_data_conf_t *u, usim_data_t *usim_data, * EPS Location Information */ usim_data->epsloci.guti.gummei.plmn = - user_network_record_list[hplmn_index].plmn; + networks.items[hplmn_index].plmn; usim_data->epsloci.guti.gummei.MMEgid = DEFAULT_MME_ID; usim_data->epsloci.guti.gummei.MMEcode = DEFAULT_MME_CODE; usim_data->epsloci.guti.m_tmsi = DEFAULT_M_TMSI; diff --git a/openair3/NAS/TOOLS/conf_usim.h b/openair3/NAS/TOOLS/conf_usim.h index 5018be81483d9706ebd0e931aacf0a6ae07beec0..90b3a9e4183ec17ccca80ba3c635c9b984d4d175 100644 --- a/openair3/NAS/TOOLS/conf_usim.h +++ b/openair3/NAS/TOOLS/conf_usim.h @@ -41,6 +41,6 @@ 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, - const user_plmns_t *user_plmns); + const user_plmns_t *user_plmns, const networks_t networks); #endif