From 5c8410c56f42a62b6c3981f4c8a8e3bddc75b451 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Leroy?= <frederic.leroy@b-com.com>
Date: Mon, 22 Aug 2016 15:43:42 +0200
Subject: [PATCH] fix(conf2uedata): make hplmn_index a local variable

There was a side effect corrupting data because hplmn_index was not computed.
---
 openair3/NAS/TOOLS/conf2uedata.c | 1 -
 openair3/NAS/TOOLS/conf2uedata.h | 1 -
 openair3/NAS/TOOLS/conf_emm.c    | 9 ++++-----
 openair3/NAS/TOOLS/conf_emm.h    | 2 +-
 openair3/NAS/TOOLS/conf_usim.c   | 5 ++++-
 5 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/openair3/NAS/TOOLS/conf2uedata.c b/openair3/NAS/TOOLS/conf2uedata.c
index a3beb27b2d..804c8aecdb 100644
--- a/openair3/NAS/TOOLS/conf2uedata.c
+++ b/openair3/NAS/TOOLS/conf2uedata.c
@@ -18,7 +18,6 @@ int *ocplmn = NULL;
 int *fplmn = NULL;
 int *ehplmn = NULL;
 
-int hplmn_index = 0;
 int plmn_nb = 0;
 int ucplmn_nb = 0;
 int oplmn_nb = 0;
diff --git a/openair3/NAS/TOOLS/conf2uedata.h b/openair3/NAS/TOOLS/conf2uedata.h
index 7ae326bf1c..ed74ccf288 100644
--- a/openair3/NAS/TOOLS/conf2uedata.h
+++ b/openair3/NAS/TOOLS/conf2uedata.h
@@ -49,7 +49,6 @@ extern int *ocplmn;
 extern int *fplmn;
 extern int *ehplmn;
 
-extern int hplmn_index;
 extern int plmn_nb;
 extern int ucplmn_nb;
 extern int oplmn_nb;
diff --git a/openair3/NAS/TOOLS/conf_emm.c b/openair3/NAS/TOOLS/conf_emm.c
index ad877e32ef..de696592de 100644
--- a/openair3/NAS/TOOLS/conf_emm.c
+++ b/openair3/NAS/TOOLS/conf_emm.c
@@ -6,11 +6,10 @@
 #include "fs.h"
 
 void gen_emm_data(emm_nvdata_t *emm_data, const char *hplmn, const char *msin) {
-	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.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];
@@ -69,9 +68,9 @@ int write_emm_data(const char *directory, int user_id, emm_nvdata_t *emm_data) {
     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 get_msin_parity(const char * msin, const char *mcc, const char *mnc) {
+	int imsi_size = strlen(msin) + strlen(mcc)
+			+ strlen(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
index 80562aba55..996e63ca05 100644
--- a/openair3/NAS/TOOLS/conf_emm.h
+++ b/openair3/NAS/TOOLS/conf_emm.h
@@ -5,6 +5,6 @@
 
 void gen_emm_data(emm_nvdata_t *emm_data, const char *hplmn, const char *msin);
 int write_emm_data(const char *directory, int user_id, emm_nvdata_t *emm_data);
-int get_msin_parity(const char * msin);
+int get_msin_parity(const char * msin, const char *mcc, const char *mnc);
 
 #endif
diff --git a/openair3/NAS/TOOLS/conf_usim.c b/openair3/NAS/TOOLS/conf_usim.c
index ee8ed8e0d0..345309996f 100644
--- a/openair3/NAS/TOOLS/conf_usim.c
+++ b/openair3/NAS/TOOLS/conf_usim.c
@@ -41,9 +41,12 @@ 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) {
+    int hplmn_index = get_plmn_index(u->hplmn);
 	memset(usim_data, 0, sizeof(usim_data_t));
 	usim_data->imsi.length = 8;
-	usim_data->imsi.u.num.parity = get_msin_parity(u->msin);
+	usim_data->imsi.u.num.parity = get_msin_parity(u->msin,
+		user_plmn_list[hplmn_index].mcc,
+		user_plmn_list[hplmn_index].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];
-- 
GitLab