diff --git a/cmake_targets/nas_sim_tools/CMakeLists.txt b/cmake_targets/nas_sim_tools/CMakeLists.txt index 39e710235711baf379320a45619c6f7bb34f3471..1bf158a904725364d3b2f565cd0a8ff035f986f7 100644 --- a/cmake_targets/nas_sim_tools/CMakeLists.txt +++ b/cmake_targets/nas_sim_tools/CMakeLists.txt @@ -20,6 +20,7 @@ set(conf2uedata_SRC ${OPENAIR_DIR}/openair3/NAS/TOOLS/conf_emm.c ${OPENAIR_DIR}/openair3/NAS/TOOLS/conf_user_data.c ${OPENAIR_DIR}/openair3/NAS/TOOLS/conf_usim.c + ${OPENAIR_DIR}/openair3/NAS/TOOLS/conf_network.c ${OPENAIR_DIR}/openair3/NAS/TOOLS/fs.c ${OPENAIR_DIR}/openair3/NAS/TOOLS/display.c ${OPENAIR_DIR}/openair3/NAS/UE/API/USIM/usim_api.c diff --git a/openair3/NAS/TOOLS/conf2uedata.c b/openair3/NAS/TOOLS/conf2uedata.c index 44005b9dd18a178fd962379cd0cf2a772063a620..853bca3d8872ba7f9e311198af0290f2288797b3 100644 --- a/openair3/NAS/TOOLS/conf2uedata.c +++ b/openair3/NAS/TOOLS/conf2uedata.c @@ -82,9 +82,8 @@ int parse_config_file(const char *output_dir, const char *conf_filename) { return (EXIT_FAILURE); } - rc = parse_plmns(all_plmn_setting, &networks); - if (rc == EXIT_FAILURE) { - return rc; + if ( parse_plmns(all_plmn_setting, &networks) == false ) { + return EXIT_FAILURE; } for (int i = 0; i < ue_nb; i++) { @@ -159,65 +158,6 @@ int get_config_from_file(const char *filename, config_t *config) { } -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, &conf->fullname); - if (rc != 1) { - printf("Error on FULLNAME\n"); - return EXIT_FAILURE; - } - rc = config_setting_lookup_string(plmn_setting, SHORTNAME, &conf->shortname); - if (rc != 1) { - printf("Error on SHORTNAME\n"); - return EXIT_FAILURE; - } - 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, &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, networks_t *networks) { - config_setting_t *plmn_setting = NULL; - char plmn[10]; - int rc = EXIT_SUCCESS; - 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 < 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, &network->conf); - if (rc == EXIT_FAILURE) { - return rc; - } - } else { - 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, const networks_t networks) { @@ -285,55 +225,6 @@ int parse_Xplmn(config_setting_t *ue_setting, const char *section, return EXIT_SUCCESS; } -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 < networks.size; i++) { - if (strcmp(networks.items[i].conf.mcc, mcc) == 0) { - if (strcmp(networks.items[i].conf.mnc, mnc) == 0) { - return i; - } - } - } - return -1; -} - -plmn_t make_plmn_from_conf(const plmn_conf_param_t *plmn_conf) { - plmn_t plmn; - char num[6]; - - memset(&plmn, 0xff, sizeof(plmn)); - - snprintf(num, 6, "%s%s", plmn_conf->mcc, plmn_conf->mnc); - - plmn.MCCdigit2 = plmn_conf->mcc[1]; - plmn.MCCdigit1 = plmn_conf->mcc[0]; - plmn.MCCdigit3 = plmn_conf->mcc[2]; - plmn.MNCdigit2 = plmn_conf->mnc[1]; - plmn.MNCdigit1 = plmn_conf->mnc[0]; - if (strlen(plmn_conf->mnc) > 2) { - plmn.MNCdigit3 = plmn_conf->mnc[2]; - } - return plmn; -} - -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", conf->mcc, conf->mnc); - record->num = atoi(num); - - record->plmn = make_plmn_from_conf(conf); - record->tac_end = 0xfffd; - record->tac_start = 0x0001; -} - /* * Displays command line usage */ diff --git a/openair3/NAS/TOOLS/conf2uedata.h b/openair3/NAS/TOOLS/conf2uedata.h index 3693aafffb7f512228aad4d5b789832f6666d4b6..f7afdde0c46b622310cefaa166918554a6ea0d32 100644 --- a/openair3/NAS/TOOLS/conf2uedata.h +++ b/openair3/NAS/TOOLS/conf2uedata.h @@ -4,16 +4,10 @@ #include <libconfig.h> #include "usim_api.h" +#include "conf_network.h" #define UE "UE" -#define PLMN "PLMN" - -#define FULLNAME "FULLNAME" -#define SHORTNAME "SHORTNAME" -#define MNC "MNC" -#define MCC "MCC" - #define HPLMN "HPLMN" #define UCPLMN "UCPLMN_LIST" #define OPLMN "OPLMN_LIST" @@ -21,28 +15,6 @@ #define FPLMN "FPLMN_LIST" #define EHPLMN "EHPLMN_LIST" -#define MIN_TAC 0x0000 -#define MAX_TAC 0xFFFE - -/* - * PLMN network operator record - */ -typedef struct { - unsigned int num; - plmn_t plmn; - char fullname[NET_FORMAT_LONG_SIZE + 1]; - char shortname[NET_FORMAT_SHORT_SIZE + 1]; - tac_t tac_start; - tac_t tac_end; -} network_record_t; - -typedef struct { - const char *fullname; - const char *shortname; - const char *mnc; - const char *mcc; -} plmn_conf_param_t; - typedef struct { int size; int *items; @@ -56,26 +28,11 @@ typedef struct { plmns_list equivalents_home; } user_plmns_t; -typedef struct { - plmn_conf_param_t conf; - network_record_t record; - plmn_t plmn; -} network_t; - -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 gen_network_record_from_conf(const plmn_conf_param_t *conf, network_record_t *record); -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, const networks_t networks); diff --git a/openair3/NAS/TOOLS/conf_network.c b/openair3/NAS/TOOLS/conf_network.c new file mode 100644 index 0000000000000000000000000000000000000000..96e2183327ad1c8d35215f898566582efe2ee994 --- /dev/null +++ b/openair3/NAS/TOOLS/conf_network.c @@ -0,0 +1,112 @@ +#include <stdlib.h> +#include <string.h> + +#include "conf_network.h" + +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 < networks.size; i++) { + if (strcmp(networks.items[i].conf.mcc, mcc) == 0) { + if (strcmp(networks.items[i].conf.mnc, mnc) == 0) { + return i; + } + } + } + return -1; +} + +plmn_t make_plmn_from_conf(const plmn_conf_param_t *plmn_conf) { + plmn_t plmn; + char num[6]; + + memset(&plmn, 0xff, sizeof(plmn)); + + snprintf(num, 6, "%s%s", plmn_conf->mcc, plmn_conf->mnc); + + plmn.MCCdigit2 = plmn_conf->mcc[1]; + plmn.MCCdigit1 = plmn_conf->mcc[0]; + plmn.MCCdigit3 = plmn_conf->mcc[2]; + plmn.MNCdigit2 = plmn_conf->mnc[1]; + plmn.MNCdigit1 = plmn_conf->mnc[0]; + if (strlen(plmn_conf->mnc) > 2) { + plmn.MNCdigit3 = plmn_conf->mnc[2]; + } + return plmn; +} + +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", conf->mcc, conf->mnc); + record->num = atoi(num); + + record->plmn = make_plmn_from_conf(conf); + record->tac_end = 0xfffd; + record->tac_start = 0x0001; +} + +bool parse_plmn_param(config_setting_t *plmn_setting, plmn_conf_param_t *conf) { + int rc = 0; + rc = config_setting_lookup_string(plmn_setting, FULLNAME, &conf->fullname); + if (rc != 1) { + printf("Error on FULLNAME\n"); + return false; + } + rc = config_setting_lookup_string(plmn_setting, SHORTNAME, &conf->shortname); + if (rc != 1) { + printf("Error on SHORTNAME\n"); + return false; + } + 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 false; + } + rc = config_setting_lookup_string(plmn_setting, MCC, &conf->mcc); + if (rc != 1 || strlen(conf->mcc) != 3) { + printf("Error on MCC\n"); + return false; + } + return true; +} + +bool parse_plmns(config_setting_t *all_plmn_setting, networks_t *networks) { + config_setting_t *plmn_setting = NULL; + char plmn[10]; + 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 < 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) { + printf("PLMN%d not fouund\n", i); + return false; + } + + if ( parse_plmn_param(plmn_setting, &network->conf) == false ) { + return false; + } + gen_network_record_from_conf(&network->conf, &network->record); + network->plmn = network->record.plmn; + } + return true; +} + + diff --git a/openair3/NAS/TOOLS/conf_network.h b/openair3/NAS/TOOLS/conf_network.h new file mode 100644 index 0000000000000000000000000000000000000000..a535841a4cfbc7bc4b41a186ab28dc476a793dbc --- /dev/null +++ b/openair3/NAS/TOOLS/conf_network.h @@ -0,0 +1,54 @@ +#ifndef _CONF_NETWORK_H +#define _CONF_NETWORK_H + +#include <stdbool.h> +#include <libconfig.h> +#include "usim_api.h" + +#define PLMN "PLMN" + +#define FULLNAME "FULLNAME" +#define SHORTNAME "SHORTNAME" +#define MNC "MNC" +#define MCC "MCC" + +#define MIN_TAC 0x0000 +#define MAX_TAC 0xFFFE + +/* + * PLMN network operator record + */ +typedef struct { + unsigned int num; + plmn_t plmn; + char fullname[NET_FORMAT_LONG_SIZE + 1]; + char shortname[NET_FORMAT_SHORT_SIZE + 1]; + tac_t tac_start; + tac_t tac_end; +} network_record_t; + +typedef struct { + const char *fullname; + const char *shortname; + const char *mnc; + const char *mcc; +} plmn_conf_param_t; + +typedef struct { + plmn_conf_param_t conf; + network_record_t record; + plmn_t plmn; +} network_t; + +typedef struct { + int size; + network_t *items; +} networks_t; + +bool parse_plmn_param(config_setting_t *plmn_setting, plmn_conf_param_t *conf); +bool parse_plmns(config_setting_t *all_plmn_setting, networks_t *plmns); + +void gen_network_record_from_conf(const plmn_conf_param_t *conf, network_record_t *record); +int get_plmn_index(const char * mccmnc, const networks_t networks); + +#endif