Commit fec069a3 authored by Frédéric Leroy's avatar Frédéric Leroy

UE/EMM: move _emm_attach_data to emm_data_t

parent 2ce0c5c8
...@@ -99,16 +99,6 @@ static void *_emm_attach_t3402_handler(void *); ...@@ -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 *); 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 ******************/ /****************** 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, ...@@ -499,7 +489,6 @@ int emm_proc_attach_accept(nas_user_t *user, long t3412, long t3402, long t3423,
** ** ** **
** Outputs: None ** ** Outputs: None **
** Return: RETURNok, RETURNerror ** ** 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) 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 ...@@ -509,6 +498,7 @@ int emm_proc_attach_reject(nas_user_t *user, int emm_cause, const OctetString *e
emm_sap_t emm_sap; emm_sap_t emm_sap;
int rc; int rc;
emm_timers_t *emm_timers = user->emm_data->emm_timers; 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, " LOG_TRACE(WARNING, "EMM-PROC - EPS attach rejected by the network, "
"EMM cause = %d", emm_cause); "EMM cause = %d", emm_cause);
...@@ -566,14 +556,14 @@ int emm_proc_attach_reject(nas_user_t *user, int emm_cause, const OctetString *e ...@@ -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 */ /* Delete the list of equivalent PLMNs */
user->emm_data->nvdata.eplmn.n_plmns = 0; user->emm_data->nvdata.eplmn.n_plmns = 0;
/* Reset the attach attempt counter */ /* Reset the attach attempt counter */
_emm_attach_data.attempt_count = 0; emm_attach_data->attempt_count = 0;
break; break;
case EMM_CAUSE_TA_NOT_ALLOWED: case EMM_CAUSE_TA_NOT_ALLOWED:
case EMM_CAUSE_EPS_NOT_ALLOWED_IN_PLMN: case EMM_CAUSE_EPS_NOT_ALLOWED_IN_PLMN:
case EMM_CAUSE_NO_SUITABLE_CELLS: case EMM_CAUSE_NO_SUITABLE_CELLS:
/* Reset the attach attempt counter */ /* Reset the attach attempt counter */
_emm_attach_data.attempt_count = 0; emm_attach_data->attempt_count = 0;
break; break;
case EMM_CAUSE_ESM_FAILURE: case EMM_CAUSE_ESM_FAILURE:
...@@ -582,7 +572,7 @@ int emm_proc_attach_reject(nas_user_t *user, int emm_cause, const OctetString *e ...@@ -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) { if (user->emm_data->NAS_SignallingPriority != 1) {
/* The UE is not configured for NAS signalling low priority; /* The UE is not configured for NAS signalling low priority;
* set the attach attempt counter to 5 */ * 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; break;
...@@ -594,7 +584,7 @@ int emm_proc_attach_reject(nas_user_t *user, int emm_cause, const OctetString *e ...@@ -594,7 +584,7 @@ int emm_proc_attach_reject(nas_user_t *user, int emm_cause, const OctetString *e
case EMM_CAUSE_PROTOCOL_ERROR: case EMM_CAUSE_PROTOCOL_ERROR:
/* 3GPP TS 24.301, section 5.5.1.2.6, case d /* 3GPP TS 24.301, section 5.5.1.2.6, case d
* Set the attach attempt counter to 5 */ * 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; break;
default : default :
...@@ -717,14 +707,14 @@ int emm_proc_attach_reject(nas_user_t *user, int emm_cause, const OctetString *e ...@@ -717,14 +707,14 @@ int emm_proc_attach_reject(nas_user_t *user, int emm_cause, const OctetString *e
** ** ** **
** Outputs: None ** ** Outputs: None **
** Return: RETURNok, RETURNerror ** ** Return: RETURNok, RETURNerror **
** Others: user->emm_data-> _emm_attach_data **
** ** ** **
***************************************************************************/ ***************************************************************************/
int emm_proc_attach_complete(void *args) int emm_proc_attach_complete(void *args)
{ {
LOG_FUNC_IN; 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; emm_sap_t emm_sap;
esm_sap_t esm_sap; esm_sap_t esm_sap;
int rc; int rc;
...@@ -735,7 +725,7 @@ int emm_proc_attach_complete(void *args) ...@@ -735,7 +725,7 @@ int emm_proc_attach_complete(void *args)
(void) emm_proc_lowerlayer_initialize(NULL, NULL, NULL, NULL); (void) emm_proc_lowerlayer_initialize(NULL, NULL, NULL, NULL);
/* Reset the attach attempt counter */ /* 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 */ /* TODO: Reset the tracking area updating attempt counter */
/* Set the EPS update status to EU1 UPDATED */ /* Set the EPS update status to EU1 UPDATED */
...@@ -1088,15 +1078,15 @@ static void *_emm_attach_t3411_handler(void *args) ...@@ -1088,15 +1078,15 @@ static void *_emm_attach_t3411_handler(void *args)
** ** ** **
** Outputs: None ** ** Outputs: None **
** Return: None ** ** Return: None **
** Others: _emm_attach_data, T3402 **
** ** ** **
***************************************************************************/ ***************************************************************************/
static void *_emm_attach_t3402_handler(void *args) static void *_emm_attach_t3402_handler(void *args)
{ {
LOG_FUNC_IN; LOG_FUNC_IN;
nas_user_t *user=args; nas_user_t *user = args;
emm_timers_t *emm_timers = user->emm_data->emm_timers; 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; emm_sap_t emm_sap;
LOG_TRACE(WARNING, "EMM-PROC - T3402 timer expired"); LOG_TRACE(WARNING, "EMM-PROC - T3402 timer expired");
...@@ -1104,7 +1094,7 @@ static void *_emm_attach_t3402_handler(void *args) ...@@ -1104,7 +1094,7 @@ static void *_emm_attach_t3402_handler(void *args)
/* Stop T3402 timer */ /* Stop T3402 timer */
emm_timers->T3402.id = nas_timer_stop(emm_timers->T3402.id); emm_timers->T3402.id = nas_timer_stop(emm_timers->T3402.id);
/* Reset the attach attempt counter */ /* 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 * Notify EMM that timer T3402 expired and attach procedure has to be
* restarted * restarted
...@@ -1140,7 +1130,6 @@ static void *_emm_attach_t3402_handler(void *args) ...@@ -1140,7 +1130,6 @@ static void *_emm_attach_t3402_handler(void *args)
** ** ** **
** Outputs: emm_sap: EMM service access point ** ** Outputs: emm_sap: EMM service access point **
** Return: None ** ** Return: None **
** Others: user->emm_data-> _emm_attach_data, T3402, T3410, **
** T3411 ** ** T3411 **
** ** ** **
***************************************************************************/ ***************************************************************************/
...@@ -1148,8 +1137,9 @@ static void _emm_attach_abnormal_cases_bcd(nas_user_t *user, emm_sap_t *emm_sap) ...@@ -1148,8 +1137,9 @@ static void _emm_attach_abnormal_cases_bcd(nas_user_t *user, emm_sap_t *emm_sap)
{ {
LOG_FUNC_IN; LOG_FUNC_IN;
emm_timers_t *emm_timers = user->emm_data->emm_timers; 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", LOG_TRACE(WARNING, "EMM-PROC - Abnormal case, attach counter = %d",
_emm_attach_data.attempt_count); emm_attach_data->attempt_count);
/* Stop timer T3410 */ /* Stop timer T3410 */
if (emm_timers->T3410.id != NAS_TIMER_INACTIVE_ID) { 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) ...@@ -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); 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 */ /* Increment the attach attempt counter */
_emm_attach_data.attempt_count += 1; emm_attach_data->attempt_count += 1;
/* Start T3411 timer */ /* Start T3411 timer */
emm_timers->T3411.id = nas_timer_start(emm_timers->T3411.sec, _emm_attach_t3411_handler, NULL); 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", LOG_TRACE(INFO, "EMM-PROC - Timer T3411 (%d) expires in %ld seconds",
......
...@@ -94,6 +94,17 @@ Description Defines internal private data handled by EPS Mobility ...@@ -94,6 +94,17 @@ Description Defines internal private data handled by EPS Mobility
/************************ G L O B A L T Y P E S ************************/ /************************ 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 * Internal data used for detach procedure
*/ */
...@@ -357,6 +368,7 @@ typedef struct emm_data_s { ...@@ -357,6 +368,7 @@ typedef struct emm_data_s {
*/ */
emm_timers_t *emm_timers; emm_timers_t *emm_timers;
emm_detach_data_t *emm_detach_data; emm_detach_data_t *emm_detach_data;
emm_attach_data_t *emm_attach_data;
} emm_data_t; } emm_data_t;
......
...@@ -106,6 +106,10 @@ void _emm_timers_initialize(emm_timers_t *emm_timers) { ...@@ -106,6 +106,10 @@ void _emm_timers_initialize(emm_timers_t *emm_timers) {
emm_timers->T3430.sec = T3430_DEFAULT_VALUE; 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) { void _emm_detach_initialize(emm_detach_data_t *emm_detach) {
emm_detach->count = 0; emm_detach->count = 0;
emm_detach->switch_off = FALSE; emm_detach->switch_off = FALSE;
...@@ -410,6 +414,16 @@ void emm_main_initialize(nas_user_t *user, emm_indication_callback_t cb, const c ...@@ -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); _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 * Initialize the user notification callback
*/ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment