From eeb44860e9cef26b850b3fcefa3706af1c5c7764 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Leroy?= <frederic.leroy@b-com.com>
Date: Tue, 16 Aug 2016 15:58:35 +0200
Subject: [PATCH] refactor(conf2uedata): move emm_data funcions in
 conf_emm.[c|h]

---
 cmake_targets/nas_sim_tools/CMakeLists.txt |  2 +
 openair3/NAS/TOOLS/conf2uedata.c           | 75 +-------------------
 openair3/NAS/TOOLS/conf2uedata.h           |  4 --
 openair3/NAS/TOOLS/conf_emm.c              | 80 ++++++++++++++++++++++
 openair3/NAS/TOOLS/conf_emm.h              | 10 +++
 5 files changed, 94 insertions(+), 77 deletions(-)
 create mode 100644 openair3/NAS/TOOLS/conf_emm.c
 create mode 100644 openair3/NAS/TOOLS/conf_emm.h

diff --git a/cmake_targets/nas_sim_tools/CMakeLists.txt b/cmake_targets/nas_sim_tools/CMakeLists.txt
index 81583629125..9e48fd5eb39 100644
--- a/cmake_targets/nas_sim_tools/CMakeLists.txt
+++ b/cmake_targets/nas_sim_tools/CMakeLists.txt
@@ -17,6 +17,7 @@ set(OPENAIR3_DIR    $ENV{OPENAIR_DIR}/openair3)
 
 set(conf2uedata_SRC
     ${OPENAIR_DIR}/openair3/NAS/TOOLS/conf2uedata.c
+    ${OPENAIR_DIR}/openair3/NAS/TOOLS/conf_emm.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
@@ -30,6 +31,7 @@ set(conf2uedata_SRC
 
 set(conf2uedata_HDR
     ${OPENAIR_DIR}/openair3/NAS/TOOLS/conf2uedata.h
+    ${OPENAIR_DIR}/openair3/NAS/TOOLS/conf_emm.h
     ${OPENAIR_DIR}/openair3/NAS/UE/API/USIM/usim_api.h
     ${OPENAIR_DIR}/openair3/NAS/UE/API/USIM/aka_functions.h
     ${OPENAIR_DIR}/openair3/NAS/COMMON/UTIL/memory.h
diff --git a/openair3/NAS/TOOLS/conf2uedata.c b/openair3/NAS/TOOLS/conf2uedata.c
index 486b7e2bff0..c14232d00d6 100644
--- a/openair3/NAS/TOOLS/conf2uedata.c
+++ b/openair3/NAS/TOOLS/conf2uedata.c
@@ -10,6 +10,7 @@
 #include "utils.h"
 #include "display.h"
 #include "fs.h"
+#include "conf_emm.h"
 
 const char *msin = NULL;
 const char *usim_api_k = NULL;
@@ -138,7 +139,7 @@ int parse_config_file(const char *output_dir, const char *conf_filename) {
         if (rc != EXIT_SUCCESS) {
             return EXIT_FAILURE;
         }
-        gen_emm_data(i, &emm_data);
+        gen_emm_data(&emm_data);
         write_emm_data(output_dir, i, &emm_data);
 
         gen_usim_data(&usim_data);
@@ -427,70 +428,6 @@ int write_usim_data(const char *directory, int user_id, usim_data_t *usim_data){
 }
 
 
-void gen_emm_data(int user_id, emm_nvdata_t *emm_data) {
-	hplmn_index = get_plmn_index(hplmn);
-	memset(emm_data, 0, sizeof(emm_nvdata_t));
-	int hplmn_index = get_plmn_index(hplmn);
-	emm_data->imsi.length = 8;
-	emm_data->imsi.u.num.parity = get_msin_parity(msin);
-	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.digit4 = user_plmn_list[hplmn_index].mnc[0];
-	emm_data->imsi.u.num.digit5 = user_plmn_list[hplmn_index].mnc[1];
-
-	if (strlen(user_plmn_list[hplmn_index].mnc) == 3) {
-		emm_data->rplmn.MNCdigit3 = user_plmn_list[hplmn_index].mnc[2];
-
-		emm_data->imsi.u.num.digit6 = user_plmn_list[hplmn_index].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->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->eplmn.n_plmns = ehplmn_nb;
-}
-
-int write_emm_data(const char *directory, int user_id, emm_nvdata_t *emm_data) {
-    int rc;
-	char* filename = make_filename(directory, EMM_NVRAM_FILENAME, user_id);
-	rc = memory_write(filename, emm_data, sizeof(emm_nvdata_t));
-	free(filename);
-	if (rc != RETURNok) {
-		perror("ERROR\t: memory_write() failed");
-		exit(EXIT_FAILURE);
-	}
-    return(EXIT_SUCCESS);
-}
-
 int parse_plmn_param(config_setting_t *plmn_setting, int index) {
 	int rc = 0;
 	rc = config_setting_lookup_string(plmn_setting,
@@ -827,14 +764,6 @@ int get_plmn_index(const char * mccmnc) {
 	return -1;
 }
 
-int get_msin_parity(const char * msin) {
-	int imsi_size = strlen(msin) + strlen(user_plmn_list[hplmn_index].mcc)
-			+ strlen(user_plmn_list[hplmn_index].mnc);
-	int result = (imsi_size % 2 == 0) ? 0 : 1;
-	return result;
-
-}
-
 void fill_network_record_list() {
 	for (int i = 0; i < plmn_nb; i++) {
 		strcpy(user_network_record_list[i].fullname,
diff --git a/openair3/NAS/TOOLS/conf2uedata.h b/openair3/NAS/TOOLS/conf2uedata.h
index 1aee521e79a..e58f5877e39 100644
--- a/openair3/NAS/TOOLS/conf2uedata.h
+++ b/openair3/NAS/TOOLS/conf2uedata.h
@@ -3,7 +3,6 @@
 
 #include <libconfig.h>
 
-#include "emmData.h"
 #include "usim_api.h"
 #include "userDef.h"
 
@@ -100,12 +99,10 @@ 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_emm_data(int user_id, emm_nvdata_t *emm_data);
 void fill_network_record_list(void);
 
 int parse_ue_user_param(config_setting_t *ue_setting, int user_id, user_nvdata_t *user_data);
 void write_user_data(const char *directory, int user_id, user_nvdata_t *data);
-int write_emm_data(const char *directory, int user_id, emm_nvdata_t *emm_data);
 int write_usim_data(const char *directory, int user_id, usim_data_t *usim_data);
 void gen_usim_data(usim_data_t *usim_data);
 
@@ -115,7 +112,6 @@ int _luhn(const char* cc);
 int parse_ue_sim_param(config_setting_t *ue_setting, int user_id);
 int parse_plmn_param(config_setting_t *plmn_setting, int index);
 int parse_plmns(config_setting_t *all_plmn_setting);
-int get_msin_parity(const char * msin);
 int get_plmn_index(const char * mccmnc);
 int parse_ue_plmn_param(config_setting_t *ue_setting, int user_id);
 int fill_ucplmn(config_setting_t* setting, int use_id);
diff --git a/openair3/NAS/TOOLS/conf_emm.c b/openair3/NAS/TOOLS/conf_emm.c
new file mode 100644
index 00000000000..a46fc5d59b4
--- /dev/null
+++ b/openair3/NAS/TOOLS/conf_emm.c
@@ -0,0 +1,80 @@
+#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) {
+	hplmn_index = get_plmn_index(hplmn);
+	memset(emm_data, 0, sizeof(emm_nvdata_t));
+	int hplmn_index = get_plmn_index(hplmn);
+	emm_data->imsi.length = 8;
+	emm_data->imsi.u.num.parity = get_msin_parity(msin);
+	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.digit4 = user_plmn_list[hplmn_index].mnc[0];
+	emm_data->imsi.u.num.digit5 = user_plmn_list[hplmn_index].mnc[1];
+
+	if (strlen(user_plmn_list[hplmn_index].mnc) == 3) {
+		emm_data->rplmn.MNCdigit3 = user_plmn_list[hplmn_index].mnc[2];
+
+		emm_data->imsi.u.num.digit6 = user_plmn_list[hplmn_index].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->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->eplmn.n_plmns = ehplmn_nb;
+}
+
+int write_emm_data(const char *directory, int user_id, emm_nvdata_t *emm_data) {
+    int rc;
+	char* filename = make_filename(directory, EMM_NVRAM_FILENAME, user_id);
+	rc = memory_write(filename, emm_data, sizeof(emm_nvdata_t));
+	free(filename);
+	if (rc != RETURNok) {
+		perror("ERROR\t: memory_write() failed");
+		exit(EXIT_FAILURE);
+	}
+    return(EXIT_SUCCESS);
+}
+
+int get_msin_parity(const char * msin) {
+	int imsi_size = strlen(msin) + strlen(user_plmn_list[hplmn_index].mcc)
+			+ strlen(user_plmn_list[hplmn_index].mnc);
+	int result = (imsi_size % 2 == 0) ? 0 : 1;
+	return result;
+
+}
+
+
diff --git a/openair3/NAS/TOOLS/conf_emm.h b/openair3/NAS/TOOLS/conf_emm.h
new file mode 100644
index 00000000000..ddb920f5b50
--- /dev/null
+++ b/openair3/NAS/TOOLS/conf_emm.h
@@ -0,0 +1,10 @@
+#ifndef _CONF_EMM_H
+#define _CONF_EMM_H
+
+#include "emmData.h"
+
+void gen_emm_data(emm_nvdata_t *emm_data);
+int write_emm_data(const char *directory, int user_id, emm_nvdata_t *emm_data);
+int get_msin_parity(const char * msin);
+
+#endif
-- 
GitLab