diff --git a/openair3/NAS/TOOLS/conf_emm.c b/openair3/NAS/TOOLS/conf_emm.c index 48627cdc0eee551ccba2b36c96b5dcaba943231f..668b90a0ae0514de07872b092789c68b5a187773 100644 --- a/openair3/NAS/TOOLS/conf_emm.c +++ b/openair3/NAS/TOOLS/conf_emm.c @@ -4,56 +4,65 @@ #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, const networks_t networks) { - memset(emm_data, 0, sizeof(emm_nvdata_t)); - 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, 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]; +void gen_emm_data( + emm_nvdata_t *emm_data, + const char *hplmn, + const char *msin, + const plmns_list *eplmn, + const networks_t networks) +{ + memset(emm_data, 0, sizeof(emm_nvdata_t)); + int hplmn_index = get_plmn_index(hplmn, networks); + plmn_conf_param_t *conf = &networks.items[hplmn_index].conf; + int i; - emm_data->imsi.u.num.digit4 = conf->mnc[0]; - emm_data->imsi.u.num.digit5 = conf->mnc[1]; + emm_data->imsi.length = 8; + 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]; - if (strlen(conf->mnc) == 3) { - emm_data->rplmn.MNCdigit3 = conf->mnc[2]; + emm_data->imsi.u.num.digit4 = conf->mnc[0]; + emm_data->imsi.u.num.digit5 = conf->mnc[1]; - 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]; - emm_data->imsi.u.num.digit10 = msin[3]; - emm_data->imsi.u.num.digit11 = msin[4]; - emm_data->imsi.u.num.digit12 = msin[5]; - emm_data->imsi.u.num.digit13 = msin[6]; - emm_data->imsi.u.num.digit14 = msin[7]; - emm_data->imsi.u.num.digit15 = msin[8]; + if (strlen(conf->mnc) == 3) { + emm_data->rplmn.MNCdigit3 = conf->mnc[2]; - } else { - emm_data->rplmn.MNCdigit3 = 0xf; + 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]; + emm_data->imsi.u.num.digit10 = msin[3]; + emm_data->imsi.u.num.digit11 = msin[4]; + emm_data->imsi.u.num.digit12 = msin[5]; + emm_data->imsi.u.num.digit13 = msin[6]; + emm_data->imsi.u.num.digit14 = msin[7]; + emm_data->imsi.u.num.digit15 = msin[8]; + } else { + emm_data->rplmn.MNCdigit3 = 0xf; - emm_data->imsi.u.num.digit6 = msin[0]; - emm_data->imsi.u.num.digit7 = msin[1]; - emm_data->imsi.u.num.digit8 = msin[2]; - emm_data->imsi.u.num.digit9 = msin[3]; - emm_data->imsi.u.num.digit10 = msin[4]; - emm_data->imsi.u.num.digit11 = msin[5]; - emm_data->imsi.u.num.digit12 = msin[6]; - emm_data->imsi.u.num.digit13 = msin[7]; - emm_data->imsi.u.num.digit14 = msin[8]; - emm_data->imsi.u.num.digit15 = msin[9]; + emm_data->imsi.u.num.digit6 = msin[0]; + emm_data->imsi.u.num.digit7 = msin[1]; + emm_data->imsi.u.num.digit8 = msin[2]; + emm_data->imsi.u.num.digit9 = msin[3]; + emm_data->imsi.u.num.digit10 = msin[4]; + emm_data->imsi.u.num.digit11 = msin[5]; + emm_data->imsi.u.num.digit12 = msin[6]; + emm_data->imsi.u.num.digit13 = msin[7]; + emm_data->imsi.u.num.digit14 = msin[8]; + emm_data->imsi.u.num.digit15 = msin[9]; + } - } - - 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->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; + emm_data->eplmn.n_plmns = eplmn->size; + for (i = 0; i < eplmn->size; i++) { + emm_data->eplmn.plmn[i] = networks.items[eplmn->items[i]].plmn; + } } bool 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 a7b97c5da27e34bd8a20861e272eb4f4c3b1e20b..f9c30d31c9523f2bb67ab27c6722883de76d52ba 100644 --- a/openair3/NAS/TOOLS/conf_emm.h +++ b/openair3/NAS/TOOLS/conf_emm.h @@ -3,8 +3,15 @@ #include "emmData.h" #include "conf_network.h" +#include "conf_user_plmn.h" + +void gen_emm_data( + emm_nvdata_t *emm_data, + const char *hplmn, + const char *msin, + const plmns_list *eplmn, + const networks_t networks); -void gen_emm_data(emm_nvdata_t *emm_data, const char *hplmn, const char *msin, int ehplmn_count, const networks_t networks); bool 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_parser.c b/openair3/NAS/TOOLS/conf_parser.c index e7d1240fad26fc8c8fb92156fdad065b70516d8d..d46142c4614970827c3a050323297480670f848e 100644 --- a/openair3/NAS/TOOLS/conf_parser.c +++ b/openair3/NAS/TOOLS/conf_parser.c @@ -74,7 +74,7 @@ bool parse_config_file(const char *output_dir, const char *conf_filename, int ou gen_usim_data(&usim_data_conf, &usim_data, &user_plmns, networks); gen_emm_data(&emm_data, usim_data_conf.hplmn, usim_data_conf.msin, - user_plmns.equivalents_home.size, networks); + &user_plmns.equivalents_home, networks); if ( output_flags & OUTPUT_UEDATA ) { write_user_data(output_dir, i, &user_data);