From 60032f57b40c8bed16cfe7ab133d55ca77e1c2a1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Leroy?= <frederic.leroy@b-com.com>
Date: Wed, 13 Jul 2016 15:05:48 +0200
Subject: [PATCH] UE/EMM: move _emm_attach_data to emm_data_t
---
openair3/NAS/UE/EMM/Attach.c | 40 +++++++++++++---------------------
openair3/NAS/UE/EMM/emmData.h | 12 ++++++++++
openair3/NAS/UE/EMM/emm_main.c | 14 ++++++++++++
3 files changed, 41 insertions(+), 25 deletions(-)
diff --git a/openair3/NAS/UE/EMM/Attach.c b/openair3/NAS/UE/EMM/Attach.c
index 0594306f6a..b47b8cea8b 100644
--- a/openair3/NAS/UE/EMM/Attach.c
+++ b/openair3/NAS/UE/EMM/Attach.c
@@ -99,16 +99,6 @@ static void *_emm_attach_t3402_handler(void *);
*/
static void _emm_attach_abnormal_cases_bcd(nas_user_t *user, emm_sap_t *);
-/*
- * Internal data used for attach procedure
- */
-static struct {
-#define EMM_ATTACH_COUNTER_MAX 5
- unsigned int attempt_count; /* Counter used to limit the number of
- * subsequently rejected attach attempts */
-} _emm_attach_data = {0};
-
-
/****************************************************************************/
/****************** E X P O R T E D F U N C T I O N S ******************/
/****************************************************************************/
@@ -499,7 +489,6 @@ int emm_proc_attach_accept(nas_user_t *user, long t3412, long t3402, long t3423,
** **
** Outputs: None **
** Return: RETURNok, RETURNerror **
- ** Others: user->emm_data-> _emm_attach_data, T3410 **
** **
***************************************************************************/
int emm_proc_attach_reject(nas_user_t *user, int emm_cause, const OctetString *esm_msg_pP)
@@ -509,6 +498,7 @@ int emm_proc_attach_reject(nas_user_t *user, int emm_cause, const OctetString *e
emm_sap_t emm_sap;
int rc;
emm_timers_t *emm_timers = user->emm_data->emm_timers;
+ emm_attach_data_t *emm_attach_data = user->emm_data->emm_attach_data;
LOG_TRACE(WARNING, "EMM-PROC - EPS attach rejected by the network, "
"EMM cause = %d", emm_cause);
@@ -566,14 +556,14 @@ int emm_proc_attach_reject(nas_user_t *user, int emm_cause, const OctetString *e
/* Delete the list of equivalent PLMNs */
user->emm_data->nvdata.eplmn.n_plmns = 0;
/* Reset the attach attempt counter */
- _emm_attach_data.attempt_count = 0;
+ emm_attach_data->attempt_count = 0;
break;
case EMM_CAUSE_TA_NOT_ALLOWED:
case EMM_CAUSE_EPS_NOT_ALLOWED_IN_PLMN:
case EMM_CAUSE_NO_SUITABLE_CELLS:
/* Reset the attach attempt counter */
- _emm_attach_data.attempt_count = 0;
+ emm_attach_data->attempt_count = 0;
break;
case EMM_CAUSE_ESM_FAILURE:
@@ -582,7 +572,7 @@ int emm_proc_attach_reject(nas_user_t *user, int emm_cause, const OctetString *e
if (user->emm_data->NAS_SignallingPriority != 1) {
/* The UE is not configured for NAS signalling low priority;
* set the attach attempt counter to 5 */
- _emm_attach_data.attempt_count = EMM_ATTACH_COUNTER_MAX;
+ emm_attach_data->attempt_count = EMM_ATTACH_COUNTER_MAX;
}
break;
@@ -594,7 +584,7 @@ int emm_proc_attach_reject(nas_user_t *user, int emm_cause, const OctetString *e
case EMM_CAUSE_PROTOCOL_ERROR:
/* 3GPP TS 24.301, section 5.5.1.2.6, case d
* Set the attach attempt counter to 5 */
- _emm_attach_data.attempt_count = EMM_ATTACH_COUNTER_MAX;
+ emm_attach_data->attempt_count = EMM_ATTACH_COUNTER_MAX;
break;
default :
@@ -717,14 +707,14 @@ int emm_proc_attach_reject(nas_user_t *user, int emm_cause, const OctetString *e
** **
** Outputs: None **
** Return: RETURNok, RETURNerror **
- ** Others: user->emm_data-> _emm_attach_data **
** **
***************************************************************************/
int emm_proc_attach_complete(void *args)
{
LOG_FUNC_IN;
- nas_user_t *user=args;
+ nas_user_t *user = args;
+ emm_attach_data_t *emm_attach_data = user->emm_data->emm_attach_data;
emm_sap_t emm_sap;
esm_sap_t esm_sap;
int rc;
@@ -735,7 +725,7 @@ int emm_proc_attach_complete(void *args)
(void) emm_proc_lowerlayer_initialize(NULL, NULL, NULL, NULL);
/* Reset the attach attempt counter */
- _emm_attach_data.attempt_count = 0;
+ emm_attach_data->attempt_count = 0;
/* TODO: Reset the tracking area updating attempt counter */
/* Set the EPS update status to EU1 UPDATED */
@@ -1088,15 +1078,15 @@ static void *_emm_attach_t3411_handler(void *args)
** **
** Outputs: None **
** Return: None **
- ** Others: _emm_attach_data, T3402 **
** **
***************************************************************************/
static void *_emm_attach_t3402_handler(void *args)
{
LOG_FUNC_IN;
- nas_user_t *user=args;
+ nas_user_t *user = args;
emm_timers_t *emm_timers = user->emm_data->emm_timers;
+ emm_attach_data_t *emm_attach_data = user->emm_data->emm_attach_data;
emm_sap_t emm_sap;
LOG_TRACE(WARNING, "EMM-PROC - T3402 timer expired");
@@ -1104,7 +1094,7 @@ static void *_emm_attach_t3402_handler(void *args)
/* Stop T3402 timer */
emm_timers->T3402.id = nas_timer_stop(emm_timers->T3402.id);
/* Reset the attach attempt counter */
- _emm_attach_data.attempt_count = 0;
+ emm_attach_data->attempt_count = 0;
/*
* Notify EMM that timer T3402 expired and attach procedure has to be
* restarted
@@ -1140,7 +1130,6 @@ static void *_emm_attach_t3402_handler(void *args)
** **
** Outputs: emm_sap: EMM service access point **
** Return: None **
- ** Others: user->emm_data-> _emm_attach_data, T3402, T3410, **
** T3411 **
** **
***************************************************************************/
@@ -1148,8 +1137,9 @@ static void _emm_attach_abnormal_cases_bcd(nas_user_t *user, emm_sap_t *emm_sap)
{
LOG_FUNC_IN;
emm_timers_t *emm_timers = user->emm_data->emm_timers;
+ emm_attach_data_t *emm_attach_data = user->emm_data->emm_attach_data;
LOG_TRACE(WARNING, "EMM-PROC - Abnormal case, attach counter = %d",
- _emm_attach_data.attempt_count);
+ emm_attach_data->attempt_count);
/* Stop timer T3410 */
if (emm_timers->T3410.id != NAS_TIMER_INACTIVE_ID) {
@@ -1157,9 +1147,9 @@ static void _emm_attach_abnormal_cases_bcd(nas_user_t *user, emm_sap_t *emm_sap)
emm_timers->T3410.id = nas_timer_stop(emm_timers->T3410.id);
}
- if (_emm_attach_data.attempt_count < EMM_ATTACH_COUNTER_MAX) {
+ if (emm_attach_data->attempt_count < EMM_ATTACH_COUNTER_MAX) {
/* Increment the attach attempt counter */
- _emm_attach_data.attempt_count += 1;
+ emm_attach_data->attempt_count += 1;
/* Start T3411 timer */
emm_timers->T3411.id = nas_timer_start(emm_timers->T3411.sec, _emm_attach_t3411_handler, NULL);
LOG_TRACE(INFO, "EMM-PROC - Timer T3411 (%d) expires in %ld seconds",
diff --git a/openair3/NAS/UE/EMM/emmData.h b/openair3/NAS/UE/EMM/emmData.h
index a9921c8c8b..84e58bb963 100644
--- a/openair3/NAS/UE/EMM/emmData.h
+++ b/openair3/NAS/UE/EMM/emmData.h
@@ -94,6 +94,17 @@ Description Defines internal private data handled by EPS Mobility
/************************ G L O B A L T Y P E S ************************/
/****************************************************************************/
+/*
+ * Internal data used for attach procedure
+ */
+
+#define EMM_ATTACH_COUNTER_MAX 5
+
+typedef struct {
+ unsigned int attempt_count; /* Counter used to limit the number of
+ * subsequently rejected attach attempts */
+} emm_attach_data_t;
+
/*
* Internal data used for detach procedure
*/
@@ -357,6 +368,7 @@ typedef struct emm_data_s {
*/
emm_timers_t *emm_timers;
emm_detach_data_t *emm_detach_data;
+ emm_attach_data_t *emm_attach_data;
} emm_data_t;
diff --git a/openair3/NAS/UE/EMM/emm_main.c b/openair3/NAS/UE/EMM/emm_main.c
index 95ab7872f8..5b6a44909e 100644
--- a/openair3/NAS/UE/EMM/emm_main.c
+++ b/openair3/NAS/UE/EMM/emm_main.c
@@ -106,6 +106,10 @@ void _emm_timers_initialize(emm_timers_t *emm_timers) {
emm_timers->T3430.sec = T3430_DEFAULT_VALUE;
}
+void _emm_attach_initialize(emm_attach_data_t *emm_attach_data) {
+ emm_attach_data->attempt_count = 0;
+}
+
void _emm_detach_initialize(emm_detach_data_t *emm_detach) {
emm_detach->count = 0;
emm_detach->switch_off = FALSE;
@@ -410,6 +414,16 @@ void emm_main_initialize(nas_user_t *user, emm_indication_callback_t cb, const c
}
_emm_detach_initialize(user->emm_data->emm_detach_data);
+ /*
+ * Initialize Internal data used for attach procedure
+ */
+ user->emm_data->emm_attach_data = calloc(1, sizeof(emm_attach_data_t));
+ if ( user->emm_data->emm_attach_data == NULL ) {
+ LOG_TRACE(ERROR, "EMM-MAIN - Failed to alloc emm_timers");
+ // FIXME stop here
+ }
+ _emm_attach_initialize(user->emm_data->emm_attach_data);
+
/*
* Initialize the user notification callback
*/
--
GitLab