Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Michael Black
OpenXG UE
Commits
20cb51cb
Commit
20cb51cb
authored
Jul 12, 2016
by
Frédéric Leroy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
UE/EMM: move _emm_data to nas_user_t
parent
97fdf8bb
Changes
22
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
452 additions
and
501 deletions
+452
-501
openair3/NAS/UE/EMM/Attach.c
openair3/NAS/UE/EMM/Attach.c
+75
-75
openair3/NAS/UE/EMM/Authentication.c
openair3/NAS/UE/EMM/Authentication.c
+27
-27
openair3/NAS/UE/EMM/Detach.c
openair3/NAS/UE/EMM/Detach.c
+5
-5
openair3/NAS/UE/EMM/EmmStatusHdl.c
openair3/NAS/UE/EMM/EmmStatusHdl.c
+2
-2
openair3/NAS/UE/EMM/Identification.c
openair3/NAS/UE/EMM/Identification.c
+8
-8
openair3/NAS/UE/EMM/IdleMode.c
openair3/NAS/UE/EMM/IdleMode.c
+80
-81
openair3/NAS/UE/EMM/IdleMode.h
openair3/NAS/UE/EMM/IdleMode.h
+2
-2
openair3/NAS/UE/EMM/LowerLayer.c
openair3/NAS/UE/EMM/LowerLayer.c
+4
-4
openair3/NAS/UE/EMM/SAP/EmmDeregisteredNoCellAvailable.c
openair3/NAS/UE/EMM/SAP/EmmDeregisteredNoCellAvailable.c
+1
-2
openair3/NAS/UE/EMM/SAP/EmmDeregisteredPlmnSearch.c
openair3/NAS/UE/EMM/SAP/EmmDeregisteredPlmnSearch.c
+2
-2
openair3/NAS/UE/EMM/SAP/EmmRegisteredInitiated.c
openair3/NAS/UE/EMM/SAP/EmmRegisteredInitiated.c
+2
-2
openair3/NAS/UE/EMM/SAP/emm_as.c
openair3/NAS/UE/EMM/SAP/emm_as.c
+19
-19
openair3/NAS/UE/EMM/SAP/emm_esm.c
openair3/NAS/UE/EMM/SAP/emm_esm.c
+1
-1
openair3/NAS/UE/EMM/SecurityModeControl.c
openair3/NAS/UE/EMM/SecurityModeControl.c
+38
-37
openair3/NAS/UE/EMM/emmData.h
openair3/NAS/UE/EMM/emmData.h
+0
-7
openair3/NAS/UE/EMM/emm_main.c
openair3/NAS/UE/EMM/emm_main.c
+147
-190
openair3/NAS/UE/EMM/emm_main.h
openair3/NAS/UE/EMM/emm_main.h
+13
-13
openair3/NAS/UE/EMM/emm_proc.h
openair3/NAS/UE/EMM/emm_proc.h
+4
-4
openair3/NAS/UE/nas_proc.c
openair3/NAS/UE/nas_proc.c
+17
-17
openair3/NAS/UE/nas_proc.h
openair3/NAS/UE/nas_proc.h
+1
-1
openair3/NAS/UE/nas_user.c
openair3/NAS/UE/nas_user.c
+1
-1
openair3/NAS/UE/user_defs.h
openair3/NAS/UE/user_defs.h
+3
-1
No files found.
openair3/NAS/UE/EMM/Attach.c
View file @
20cb51cb
This diff is collapsed.
Click to expand it.
openair3/NAS/UE/EMM/Authentication.c
View file @
20cb51cb
...
...
@@ -163,11 +163,11 @@ static int _authentication_kasme(const OctetString *autn,
** ksi: The NAS ket sey identifier **
** rand: Authentication parameter RAND **
** autn: Authentication parameter AUTN **
** Others:
_emm_data,
_authentication_data **
** Others:
user->emm_data->
_authentication_data **
** **
** Outputs: None **
** Return: RETURNok, RETURNerror **
** Others:
_emm_data,
_authentication_data, T3416, **
** Others:
user->emm_data->
_authentication_data, T3416, **
** T3418, T3420 **
** **
***************************************************************************/
...
...
@@ -185,7 +185,7 @@ int emm_proc_authentication_request(nas_user_t *user, int native_ksi, int ksi,
* The UE shall proceed with an EPS authentication challenge only if a
* USIM is present
*/
if
(
!
_emm_data
.
usim_is_valid
)
{
if
(
!
user
->
emm_data
->
usim_is_valid
)
{
LOG_TRACE
(
WARNING
,
"EMM-PROC - USIM is not present or not valid"
);
LOG_FUNC_RETURN
(
RETURNerror
);
}
...
...
@@ -327,14 +327,14 @@ int emm_proc_authentication_request(nas_user_t *user, int native_ksi, int ksi,
*/
emm_sap_t
emm_sap
;
emm_sap
.
primitive
=
EMMAS_SECURITY_RES
;
emm_sap
.
u
.
emm_as
.
u
.
security
.
guti
=
_emm_data
.
guti
;
emm_sap
.
u
.
emm_as
.
u
.
security
.
guti
=
user
->
emm_data
->
guti
;
emm_sap
.
u
.
emm_as
.
u
.
security
.
ueid
=
0
;
emm_sap
.
u
.
emm_as
.
u
.
security
.
msgType
=
EMM_AS_MSG_TYPE_AUTH
;
emm_sap
.
u
.
emm_as
.
u
.
security
.
emm_cause
=
EMM_CAUSE_SUCCESS
;
emm_sap
.
u
.
emm_as
.
u
.
security
.
res
=
&
res
;
/* Setup EPS NAS security data */
emm_as_set_security_data
(
&
emm_sap
.
u
.
emm_as
.
u
.
security
.
sctx
,
_emm_data
.
security
,
FALSE
,
TRUE
);
user
->
emm_data
->
security
,
FALSE
,
TRUE
);
rc
=
emm_sap_send
(
user
,
&
emm_sap
);
if
(
rc
!=
RETURNerror
)
{
...
...
@@ -344,29 +344,29 @@ int emm_proc_authentication_request(nas_user_t *user, int native_ksi, int ksi,
_authentication_data
.
sync_count
=
0
;
/* Create non-current EPS security context */
if
(
_emm_data
.
non_current
==
NULL
)
{
_emm_data
.
non_current
=
if
(
user
->
emm_data
->
non_current
==
NULL
)
{
user
->
emm_data
->
non_current
=
(
emm_security_context_t
*
)
malloc
(
sizeof
(
emm_security_context_t
));
}
if
(
_emm_data
.
non_current
)
{
memset
(
_emm_data
.
non_current
,
0
,
sizeof
(
emm_security_context_t
));
if
(
user
->
emm_data
->
non_current
)
{
memset
(
user
->
emm_data
->
non_current
,
0
,
sizeof
(
emm_security_context_t
));
/* Set the security context type */
if
(
native_ksi
)
{
_emm_data
.
non_current
->
type
=
EMM_KSI_NATIVE
;
user
->
emm_data
->
non_current
->
type
=
EMM_KSI_NATIVE
;
}
else
{
_emm_data
.
non_current
->
type
=
EMM_KSI_MAPPED
;
user
->
emm_data
->
non_current
->
type
=
EMM_KSI_MAPPED
;
}
/* Set the EPS key set identifier */
_emm_data
.
non_current
->
eksi
=
ksi
;
user
->
emm_data
->
non_current
->
eksi
=
ksi
;
/* Derive the Kasme from the authentication challenge using
* the PLMN identity of the selected PLMN */
_emm_data
.
non_current
->
kasme
.
length
=
AUTH_KASME_SIZE
;
_emm_data
.
non_current
->
kasme
.
value
=
malloc
(
32
);
_authentication_kasme
(
autn
,
&
ck
,
&
ik
,
&
_emm_data
.
splmn
,
&
_emm_data
.
non_current
->
kasme
);
user
->
emm_data
->
non_current
->
kasme
.
length
=
AUTH_KASME_SIZE
;
user
->
emm_data
->
non_current
->
kasme
.
value
=
malloc
(
32
);
_authentication_kasme
(
autn
,
&
ck
,
&
ik
,
&
user
->
emm_data
->
splmn
,
&
user
->
emm_data
->
non_current
->
kasme
);
/* NAS integrity and cyphering keys are not yet available */
}
}
...
...
@@ -392,7 +392,7 @@ int emm_proc_authentication_request(nas_user_t *user, int native_ksi, int ksi,
** **
** Outputs: None **
** Return: RETURNok, RETURNerror **
** Others:
_emm_data,
_authentication_data, T3410, **
** Others:
user->emm_data->
_authentication_data, T3410, **
** T3417, T3430 **
** **
***************************************************************************/
...
...
@@ -409,21 +409,21 @@ int emm_proc_authentication_reject(nas_user_t *user)
(
void
)
emm_proc_authentication_delete
();
/* Set the EPS update status to EU3 ROAMING NOT ALLOWED */
_emm_data
.
status
=
EU3_ROAMING_NOT_ALLOWED
;
user
->
emm_data
->
status
=
EU3_ROAMING_NOT_ALLOWED
;
/* Delete the stored GUTI */
_emm_data
.
guti
=
NULL
;
user
->
emm_data
->
guti
=
NULL
;
/* Delete the TAI list */
_emm_data
.
ltai
.
n_tais
=
0
;
user
->
emm_data
->
ltai
.
n_tais
=
0
;
/* Delete the last visited registered TAI */
_emm_data
.
tai
=
NULL
;
user
->
emm_data
->
tai
=
NULL
;
/* Delete the eKSI */
if
(
_emm_data
.
security
)
{
_emm_data
.
security
->
type
=
EMM_KSI_NOT_AVAILABLE
;
if
(
user
->
emm_data
->
security
)
{
user
->
emm_data
->
security
->
type
=
EMM_KSI_NOT_AVAILABLE
;
}
/* Consider the USIM invalid */
_emm_data
.
usim_is_valid
=
FALSE
;
user
->
emm_data
->
usim_is_valid
=
FALSE
;
/* Stop timer T3410 */
if
(
T3410
.
id
!=
NAS_TIMER_INACTIVE_ID
)
{
...
...
@@ -664,14 +664,14 @@ static int _authentication_abnormal_cases_cde(nas_user_t *user, int emm_cause,
*/
emm_sap_t
emm_sap
;
emm_sap
.
primitive
=
EMMAS_SECURITY_RES
;
emm_sap
.
u
.
emm_as
.
u
.
security
.
guti
=
_emm_data
.
guti
;
emm_sap
.
u
.
emm_as
.
u
.
security
.
guti
=
user
->
emm_data
->
guti
;
emm_sap
.
u
.
emm_as
.
u
.
security
.
ueid
=
0
;
emm_sap
.
u
.
emm_as
.
u
.
security
.
msgType
=
EMM_AS_MSG_TYPE_AUTH
;
emm_sap
.
u
.
emm_as
.
u
.
security
.
emm_cause
=
emm_cause
;
emm_sap
.
u
.
emm_as
.
u
.
security
.
auts
=
auts
;
/* Setup EPS NAS security data */
emm_as_set_security_data
(
&
emm_sap
.
u
.
emm_as
.
u
.
security
.
sctx
,
_emm_data
.
security
,
FALSE
,
TRUE
);
user
->
emm_data
->
security
,
FALSE
,
TRUE
);
rc
=
emm_sap_send
(
user
,
&
emm_sap
);
if
(
rc
!=
RETURNerror
)
{
...
...
@@ -787,7 +787,7 @@ static int _authentication_abnormal_case_f(nas_user_t *user)
*/
emm_sap_t
emm_sap
;
emm_sap
.
primitive
=
EMMAS_RELEASE_REQ
;
emm_sap
.
u
.
emm_as
.
u
.
release
.
guti
=
_emm_data
.
guti
;
emm_sap
.
u
.
emm_as
.
u
.
release
.
guti
=
user
->
emm_data
->
guti
;
emm_sap
.
u
.
emm_as
.
u
.
release
.
cause
=
EMM_AS_CAUSE_AUTHENTICATION
;
rc
=
emm_sap_send
(
user
,
&
emm_sap
);
...
...
openair3/NAS/UE/EMM/Detach.c
View file @
20cb51cb
...
...
@@ -124,7 +124,7 @@ static struct {
** Inputs: type: Type of the requested detach **
** switch_off: Indicates whether the detach is required **
** because the UE is switched off or not **
** Others:
_emm_data
**
** Others:
user->emm_data->
**
** **
** Outputs: None **
** Return: RETURNok, RETURNerror **
...
...
@@ -167,10 +167,10 @@ int emm_proc_detach(nas_user_t *user, emm_proc_detach_type_t type, int switch_of
/* Set the switch-off indicator */
emm_as
->
switch_off
=
switch_off
;
/* Set the EPS mobile identity */
emm_as
->
guti
=
_emm_data
.
guti
;
emm_as
->
guti
=
user
->
emm_data
->
guti
;
emm_as
->
ueid
=
0
;
/* Setup EPS NAS security data */
emm_as_set_security_data
(
&
emm_as
->
sctx
,
_emm_data
.
security
,
FALSE
,
TRUE
);
emm_as_set_security_data
(
&
emm_as
->
sctx
,
user
->
emm_data
->
security
,
FALSE
,
TRUE
);
/*
* Notify EMM-AS SAP that Detach Request message has to
...
...
@@ -413,10 +413,10 @@ void *_emm_detach_t3421_handler(void *args)
/* Set the switch-off indicator */
emm_as
->
switch_off
=
_emm_detach_data
.
switch_off
;
/* Set the EPS mobile identity */
emm_as
->
guti
=
_emm_data
.
guti
;
emm_as
->
guti
=
user
->
emm_data
->
guti
;
emm_as
->
ueid
=
0
;
/* Setup EPS NAS security data */
emm_as_set_security_data
(
&
emm_as
->
sctx
,
_emm_data
.
security
,
emm_as_set_security_data
(
&
emm_as
->
sctx
,
user
->
emm_data
->
security
,
FALSE
,
TRUE
);
/*
...
...
openair3/NAS/UE/EMM/EmmStatusHdl.c
View file @
20cb51cb
...
...
@@ -134,8 +134,8 @@ int emm_proc_status(nas_user_t *user, unsigned int ueid, int emm_cause)
emm_sap
.
u
.
emm_as
.
u
.
status
.
emm_cause
=
emm_cause
;
emm_sap
.
u
.
emm_as
.
u
.
status
.
ueid
=
ueid
;
emm_sap
.
u
.
emm_as
.
u
.
status
.
guti
=
_emm_data
.
guti
;
sctx
=
_emm_data
.
security
;
emm_sap
.
u
.
emm_as
.
u
.
status
.
guti
=
user
->
emm_data
->
guti
;
sctx
=
user
->
emm_data
->
security
;
/* Setup EPS NAS security data */
emm_as_set_security_data
(
&
emm_sap
.
u
.
emm_as
.
u
.
status
.
sctx
,
sctx
,
FALSE
,
TRUE
);
...
...
openair3/NAS/UE/EMM/Identification.c
View file @
20cb51cb
...
...
@@ -130,8 +130,8 @@ int emm_proc_identification_request(nas_user_t *user, emm_proc_identity_type_t t
imsi_t
modified_imsi
;
/* International Mobile Subscriber Identity is requested */
if
(
_emm_data
.
imsi
)
{
memcpy
(
&
modified_imsi
,
_emm_data
.
imsi
,
sizeof
(
modified_imsi
));
if
(
user
->
emm_data
->
imsi
)
{
memcpy
(
&
modified_imsi
,
user
->
emm_data
->
imsi
,
sizeof
(
modified_imsi
));
/* LW: Eventually replace the 0xF value set in MNC digit 3 by a 0 to avoid IMSI to be truncated before reaching HSS */
if
(
modified_imsi
.
u
.
num
.
digit6
==
0xF
)
{
...
...
@@ -167,9 +167,9 @@ int emm_proc_identification_request(nas_user_t *user, emm_proc_identity_type_t t
case
EMM_IDENT_TYPE_IMEI
:
/* International Mobile Equipment Identity is requested */
if
(
_emm_data
.
imei
)
{
if
(
user
->
emm_data
->
imei
)
{
emm_sap
.
u
.
emm_as
.
u
.
security
.
identType
=
EMM_IDENT_TYPE_IMEI
;
emm_sap
.
u
.
emm_as
.
u
.
security
.
imei
=
_emm_data
.
imei
;
emm_sap
.
u
.
emm_as
.
u
.
security
.
imei
=
user
->
emm_data
->
imei
;
}
break
;
...
...
@@ -177,9 +177,9 @@ int emm_proc_identification_request(nas_user_t *user, emm_proc_identity_type_t t
case
EMM_IDENT_TYPE_TMSI
:
/* Temporary Mobile Subscriber Identity is requested */
if
(
_emm_data
.
guti
)
{
if
(
user
->
emm_data
->
guti
)
{
emm_sap
.
u
.
emm_as
.
u
.
security
.
identType
=
EMM_IDENT_TYPE_TMSI
;
emm_sap
.
u
.
emm_as
.
u
.
security
.
tmsi
=
_emm_data
.
guti
->
m_tmsi
;
emm_sap
.
u
.
emm_as
.
u
.
security
.
tmsi
=
user
->
emm_data
->
guti
->
m_tmsi
;
}
break
;
...
...
@@ -194,12 +194,12 @@ int emm_proc_identification_request(nas_user_t *user, emm_proc_identity_type_t t
* to the MME
*/
emm_sap
.
primitive
=
EMMAS_SECURITY_RES
;
emm_sap
.
u
.
emm_as
.
u
.
security
.
guti
=
_emm_data
.
guti
;
emm_sap
.
u
.
emm_as
.
u
.
security
.
guti
=
user
->
emm_data
->
guti
;
emm_sap
.
u
.
emm_as
.
u
.
security
.
ueid
=
0
;
emm_sap
.
u
.
emm_as
.
u
.
security
.
msgType
=
EMM_AS_MSG_TYPE_IDENT
;
/* Setup EPS NAS security data */
emm_as_set_security_data
(
&
emm_sap
.
u
.
emm_as
.
u
.
security
.
sctx
,
_emm_data
.
security
,
FALSE
,
TRUE
);
user
->
emm_data
->
security
,
FALSE
,
TRUE
);
rc
=
emm_sap_send
(
user
,
&
emm_sap
);
LOG_FUNC_RETURN
(
rc
);
...
...
openair3/NAS/UE/EMM/IdleMode.c
View file @
20cb51cb
This diff is collapsed.
Click to expand it.
openair3/NAS/UE/EMM/IdleMode.h
View file @
20cb51cb
...
...
@@ -51,7 +51,7 @@ Description Defines the functions used to get information from the list
/************************ G L O B A L T Y P E S ************************/
/****************************************************************************/
typedef
int
(
*
IdleMode_callback_t
)
(
int
);
typedef
int
(
*
IdleMode_callback_t
)
(
emm_data_t
*
emm_data
,
int
);
/****************************************************************************/
/******************** G L O B A L V A R I A B L E S ********************/
...
...
@@ -68,7 +68,7 @@ int IdleMode_get_hplmn_index(void);
int
IdleMode_get_rplmn_index
(
void
);
int
IdleMode_get_splmn_index
(
void
);
int
IdleMode_update_plmn_list
(
int
index
);
int
IdleMode_update_plmn_list
(
emm_data_t
*
emm_data
,
int
i
);
const
char
*
IdleMode_get_plmn_fullname
(
const
plmn_t
*
plmn
,
int
index
,
size_t
*
len
);
...
...
openair3/NAS/UE/EMM/LowerLayer.c
View file @
20cb51cb
...
...
@@ -160,7 +160,7 @@ int lowerlayer_establish(nas_user_t *user)
LOG_FUNC_IN
;
/* Update the EPS Connection Management status */
_emm_data
.
ecm_status
=
ECM_CONNECTED
;
user
->
emm_data
->
ecm_status
=
ECM_CONNECTED
;
LOG_FUNC_RETURN
(
RETURNok
);
}
...
...
@@ -188,7 +188,7 @@ int lowerlayer_release(nas_user_t *user, int cause)
int
rc
;
/* Update the EPS Connection Management status */
_emm_data
.
ecm_status
=
ECM_IDLE
;
user
->
emm_data
->
ecm_status
=
ECM_IDLE
;
emm_sap
.
primitive
=
EMMREG_LOWERLAYER_RELEASE
;
emm_sap
.
u
.
emm_reg
.
ueid
=
0
;
...
...
@@ -257,9 +257,9 @@ int lowerlayer_data_req(nas_user_t *user, unsigned int ueid, const OctetString *
//struct emm_data_context_s *ctx = NULL;
emm_sap
.
primitive
=
EMMAS_DATA_REQ
;
emm_sap
.
u
.
emm_as
.
u
.
data
.
guti
=
_emm_data
.
guti
;
emm_sap
.
u
.
emm_as
.
u
.
data
.
guti
=
user
->
emm_data
->
guti
;
emm_sap
.
u
.
emm_as
.
u
.
data
.
ueid
=
0
;
sctx
=
_emm_data
.
security
;
sctx
=
user
->
emm_data
->
security
;
emm_sap
.
u
.
emm_as
.
u
.
data
.
NASinfo
=
0
;
emm_sap
.
u
.
emm_as
.
u
.
data
.
NASmsg
.
length
=
data
->
length
;
...
...
openair3/NAS/UE/EMM/SAP/EmmDeregisteredNoCellAvailable.c
View file @
20cb51cb
...
...
@@ -108,8 +108,7 @@ int EmmDeregisteredNoCellAvailable(nas_user_t *user, const emm_reg_t *evt)
* Notify EMM that the MT is currently searching an operator
* to register to
*/
// FIXME REVIEW
rc
=
emm_proc_registration_notify
(
NET_REG_STATE_ON
);
rc
=
emm_proc_registration_notify
(
user
->
emm_data
,
NET_REG_STATE_ON
);
if
(
rc
!=
RETURNok
)
{
LOG_TRACE
(
WARNING
,
"EMM-FSM - "
...
...
openair3/NAS/UE/EMM/SAP/EmmDeregisteredPlmnSearch.c
View file @
20cb51cb
...
...
@@ -95,7 +95,7 @@ int EmmDeregisteredPlmnSearch(nas_user_t *user, const emm_reg_t *evt)
/*
* No suitable cell of the selected PLMN has been found to camp on
*/
rc
=
emm_proc_registration_notify
(
NET_REG_STATE_DENIED
);
rc
=
emm_proc_registration_notify
(
user
->
emm_data
,
NET_REG_STATE_DENIED
);
if
(
rc
!=
RETURNok
)
{
LOG_TRACE
(
WARNING
,
"EMM-FSM - "
...
...
@@ -112,7 +112,7 @@ int EmmDeregisteredPlmnSearch(nas_user_t *user, const emm_reg_t *evt)
* may be selected either automatically or manually.
* Or the user manually re-selected a PLMN to register to.
*/
rc
=
emm_proc_registration_notify
(
NET_REG_STATE_ON
);
rc
=
emm_proc_registration_notify
(
user
->
emm_data
,
NET_REG_STATE_ON
);
if
(
rc
!=
RETURNok
)
{
LOG_TRACE
(
WARNING
,
"EMM-FSM - "
...
...
openair3/NAS/UE/EMM/SAP/EmmRegisteredInitiated.c
View file @
20cb51cb
...
...
@@ -140,7 +140,7 @@ int EmmRegisteredInitiated(nas_user_t *user, const emm_reg_t *evt)
/*
* Notify EMM that the MT is registered
*/
rc
=
emm_proc_registration_notify
(
NET_REG_STATE_HN
);
rc
=
emm_proc_registration_notify
(
user
->
emm_data
,
NET_REG_STATE_HN
);
if
(
rc
!=
RETURNok
)
{
LOG_TRACE
(
WARNING
,
"EMM-FSM - "
...
...
@@ -167,7 +167,7 @@ int EmmRegisteredInitiated(nas_user_t *user, const emm_reg_t *evt)
/*
* Notify EMM that the MT's registration is denied
*/
rc
=
emm_proc_registration_notify
(
NET_REG_STATE_DENIED
);
rc
=
emm_proc_registration_notify
(
user
->
emm_data
,
NET_REG_STATE_DENIED
);
if
(
rc
!=
RETURNok
)
{
LOG_TRACE
(
WARNING
,
"EMM-FSM - "
...
...
openair3/NAS/UE/EMM/SAP/emm_as.c
View file @
20cb51cb
...
...
@@ -135,16 +135,16 @@ static int _emm_as_encrypt(
static
int
_emm_as_send
(
const
nas_user_t
*
user
,
const
emm_as_t
*
msg
);
static
int
_emm_as_security_res
(
const
emm_as_security_t
*
,
static
int
_emm_as_security_res
(
const
emm_
data_t
*
emm_data
,
const
emm_
as_security_t
*
,
ul_info_transfer_req_t
*
);
static
int
_emm_as_establish_req
(
const
emm_as_establish_t
*
,
static
int
_emm_as_establish_req
(
const
emm_
data_t
*
emm_data
,
const
emm_
as_establish_t
*
,
nas_establish_req_t
*
);
static
int
_emm_as_cell_info_req
(
const
emm_as_cell_info_t
*
,
cell_info_req_t
*
);
static
int
_emm_as_data_req
(
const
emm_as_data_t
*
msg
,
ul_info_transfer_req_t
*
);
static
int
_emm_as_status_ind
(
const
emm_as_status_t
*
,
ul_info_transfer_req_t
*
);
static
int
_emm_as_data_req
(
const
emm_
data_t
*
emm_data
,
const
emm_
as_data_t
*
msg
,
ul_info_transfer_req_t
*
);
static
int
_emm_as_status_ind
(
const
emm_
data_t
*
emm_data
,
const
emm_
as_status_t
*
,
ul_info_transfer_req_t
*
);
static
int
_emm_as_release_req
(
const
emm_as_release_t
*
,
nas_release_req_t
*
);
/****************************************************************************/
...
...
@@ -321,7 +321,7 @@ static int _emm_as_recv(nas_user_t *user, unsigned int ueid, const char *msg, in
emm_security_context_t
*
security
=
NULL
;
/* Current EPS NAS security context */
security
=
_emm_data
.
security
;
security
=
user
->
emm_data
->
security
;
/* Decode the received message */
decoder_rc
=
nas_message_decode
(
msg
,
&
nas_msg
,
len
,
security
);
...
...
@@ -428,7 +428,7 @@ static int _emm_as_data_ind(nas_user_t *user, const emm_as_data_t *msg, int *emm
memset
(
&
header
,
0
,
sizeof
(
header
));
/* Decrypt the received security protected message */
security
=
_emm_data
.
security
;
security
=
user
->
emm_data
->
security
;
int
bytes
=
nas_message_decrypt
((
char
*
)(
msg
->
NASmsg
.
value
),
plain_msg
,
&
header
,
...
...
@@ -509,7 +509,7 @@ static int _emm_as_establish_cnf(nas_user_t *user, const emm_as_establish_t *msg
decoder_rc
=
nas_message_decode
((
char
*
)(
msg
->
NASmsg
.
value
),
&
nas_msg
,
msg
->
NASmsg
.
length
,
_emm_data
.
security
);
user
->
emm_data
->
security
);
if
(
decoder_rc
<
0
)
{
LOG_TRACE
(
WARNING
,
"EMMAS-SAP - Failed to decode initial NAS message"
...
...
@@ -937,13 +937,13 @@ static int _emm_as_send(const nas_user_t *user, const emm_as_t *msg)
switch
(
msg
->
primitive
)
{
case
_EMMAS_DATA_REQ
:
as_msg
.
msgID
=
_emm_as_data_req
(
as_msg
.
msgID
=
_emm_as_data_req
(
user
->
emm_data
,
&
msg
->
u
.
data
,
&
as_msg
.
msg
.
ul_info_transfer_req
);
break
;
case
_EMMAS_STATUS_IND
:
as_msg
.
msgID
=
_emm_as_status_ind
(
as_msg
.
msgID
=
_emm_as_status_ind
(
user
->
emm_data
,
&
msg
->
u
.
status
,
&
as_msg
.
msg
.
ul_info_transfer_req
);
break
;
...
...
@@ -956,13 +956,13 @@ static int _emm_as_send(const nas_user_t *user, const emm_as_t *msg)
case
_EMMAS_SECURITY_RES
:
as_msg
.
msgID
=
_emm_as_security_res
(
as_msg
.
msgID
=
_emm_as_security_res
(
user
->
emm_data
,
&
msg
->
u
.
security
,
&
as_msg
.
msg
.
ul_info_transfer_req
);
break
;
case
_EMMAS_ESTABLISH_REQ
:
as_msg
.
msgID
=
_emm_as_establish_req
(
as_msg
.
msgID
=
_emm_as_establish_req
(
user
->
emm_data
,
&
msg
->
u
.
establish
,
&
as_msg
.
msg
.
nas_establish_req
);
break
;
...
...
@@ -1065,7 +1065,7 @@ static int _emm_as_send(const nas_user_t *user, const emm_as_t *msg)
** Others: None **
** **
***************************************************************************/
static
int
_emm_as_data_req
(
const
emm_as_data_t
*
msg
,
static
int
_emm_as_data_req
(
const
emm_
data_t
*
emm_data
,
const
emm_
as_data_t
*
msg
,
ul_info_transfer_req_t
*
as_msg
)
{
LOG_FUNC_IN
;
...
...
@@ -1112,7 +1112,7 @@ static int _emm_as_data_req(const emm_as_data_t *msg,
int
bytes
;
emm_security_context_t
*
emm_security_context
=
NULL
;
emm_security_context
=
_emm_data
.
security
;
emm_security_context
=
emm_data
->
security
;
if
(
emm_security_context
)
{
...
...
@@ -1161,7 +1161,7 @@ static int _emm_as_data_req(const emm_as_data_t *msg,
** Others: None **
** **
***************************************************************************/
static
int
_emm_as_status_ind
(
const
emm_as_status_t
*
msg
,
static
int
_emm_as_status_ind
(
const
emm_
data_t
*
emm_data
,
const
emm_
as_status_t
*
msg
,
ul_info_transfer_req_t
*
as_msg
)
{
LOG_FUNC_IN
;
...
...
@@ -1193,7 +1193,7 @@ static int _emm_as_status_ind(const emm_as_status_t *msg,
if
(
size
>
0
)
{
emm_security_context_t
*
emm_security_context
=
NULL
;
emm_security_context
=
_emm_data
.
security
;
emm_security_context
=
emm_data
->
security
;
if
(
emm_security_context
)
{
...
...
@@ -1275,7 +1275,7 @@ static int _emm_as_release_req(const emm_as_release_t *msg,
** Others: None **
** **
***************************************************************************/
static
int
_emm_as_security_res
(
const
emm_as_security_t
*
msg
,
static
int
_emm_as_security_res
(
const
emm_
data_t
*
emm_data
,
const
emm_
as_security_t
*
msg
,
ul_info_transfer_req_t
*
as_msg
)
{
LOG_FUNC_IN
;
...
...
@@ -1340,7 +1340,7 @@ static int _emm_as_security_res(const emm_as_security_t *msg,
int
bytes
=
_emm_as_encode
(
&
as_msg
->
nasMsg
,
&
nas_msg
,
size
,
_emm_data
.
security
);
emm_data
->
security
);
if
(
bytes
>
0
)
{
LOG_FUNC_RETURN
(
AS_UL_INFO_TRANSFER_REQ
);
...
...
@@ -1369,7 +1369,7 @@ static int _emm_as_security_res(const emm_as_security_t *msg,
** Others: None **
** **
***************************************************************************/
static
int
_emm_as_establish_req
(
const
emm_as_establish_t
*
msg
,
static
int
_emm_as_establish_req
(
const
emm_
data_t
*
emm_data
,
const
emm_
as_establish_t
*
msg
,
nas_establish_req_t
*
as_msg
)
{
LOG_FUNC_IN
;
...
...
@@ -1433,7 +1433,7 @@ static int _emm_as_establish_req(const emm_as_establish_t *msg,
&
as_msg
->
initialNasMsg
,
&
nas_msg
,
size
,
_emm_data
.
security
);
emm_data
->
security
);
if
(
bytes
>
0
)
{
LOG_FUNC_RETURN
(
AS_NAS_ESTABLISH_REQ
);
...
...
openair3/NAS/UE/EMM/SAP/emm_esm.c
View file @
20cb51cb
...
...
@@ -134,7 +134,7 @@ int emm_esm_send(nas_user_t *user, const emm_esm_t *msg)
if
(
msg
->
u
.
establish
.
is_emergency
)
{
/* Consider the UE attached for emergency bearer services
* only */
rc
=
emm_proc_attach_set_emergency
();
rc
=
emm_proc_attach_set_emergency
(
user
->
emm_data
);
}
}
else
{
/* Consider the UE locally detached from the network */
...
...
openair3/NAS/UE/EMM/SecurityModeControl.c
View file @
20cb51cb
...
...
@@ -163,8 +163,8 @@ int emm_proc_security_mode_command(nas_user_t *user, int native_ksi, int ksi,
/*
* Check the replayed UE security capabilities
*/
uint8_t
eea
=
(
0x80
>>
_emm_data
.
security
->
capability
.
eps_encryption
);
uint8_t
eia
=
(
0x80
>>
_emm_data
.
security
->
capability
.
eps_integrity
);
uint8_t
eea
=
(
0x80
>>
user
->
emm_data
->
security
->
capability
.
eps_encryption
);
uint8_t
eia
=
(
0x80
>>
user
->
emm_data
->
security
->
capability
.
eps_integrity
);
if
(
(
reea
!=
eea
)
||
(
reia
!=
eia
)
)
{
LOG_TRACE
(
WARNING
,
"EMM-PROC - Replayed UE security capabilities "
...
...
@@ -180,7 +180,7 @@ int emm_proc_security_mode_command(nas_user_t *user, int native_ksi, int ksi,
/*
* Check the non-current EPS security context
*/
else
if
(
_emm_data
.
non_current
==
NULL
)
{
else
if
(
user
->
emm_data
->
non_current
==
NULL
)
{
LOG_TRACE
(
WARNING
,
"EMM-PROC - Non-current EPS security context "
"is not valid"
);
emm_cause
=
EMM_CAUSE_SECURITY_MODE_REJECTED
;
...
...
@@ -191,37 +191,37 @@ int emm_proc_security_mode_command(nas_user_t *user, int native_ksi, int ksi,
else
{
LOG_TRACE
(
INFO
,
"EMM-PROC - Update the non-current EPS security context seea=%u seia=%u"
,
seea
,
seia
);
/* Update selected cyphering and integrity algorithms */
//LG COMENTED
_emm_data.
non_current->capability.encryption = seea;
//LG COMENTED
_emm_data.
non_current->capability.integrity = seia;
//LG COMENTED
user->emm_data->
non_current->capability.encryption = seea;
//LG COMENTED
user->emm_data->
non_current->capability.integrity = seia;
_emm_data
.
non_current
->
selected_algorithms
.
encryption
=
seea
;
_emm_data
.
non_current
->
selected_algorithms
.
integrity
=
seia
;
user
->
emm_data
->
non_current
->
selected_algorithms
.
encryption
=
seea
;
user
->
emm_data
->
non_current
->
selected_algorithms
.
integrity
=
seia
;
/* Derive the NAS cyphering key */
if
(
_emm_data
.
non_current
->
knas_enc
.
value
==
NULL
)
{
_emm_data
.
non_current
->
knas_enc
.
value
=
if
(
user
->
emm_data
->
non_current
->
knas_enc
.
value
==
NULL
)
{
user
->
emm_data
->
non_current
->
knas_enc
.
value
=
(
uint8_t
*
)
calloc
(
1
,
AUTH_KNAS_ENC_SIZE
);
_emm_data
.
non_current
->
knas_enc
.
length
=
AUTH_KNAS_ENC_SIZE
;
user
->
emm_data
->
non_current
->
knas_enc
.
length
=
AUTH_KNAS_ENC_SIZE
;
}
if
(
_emm_data
.
non_current
->
knas_enc
.
value
!=
NULL
)
{
if
(
user
->
emm_data
->
non_current
->
knas_enc
.
value
!=
NULL
)
{
LOG_TRACE
(
INFO
,
"EMM-PROC - Update the non-current EPS security context knas_enc"
);
rc
=
_security_knas_enc
(
&
_emm_data
.
non_current
->
kasme
,
&
_emm_data
.
non_current
->
knas_enc
,
seea
);
rc
=
_security_knas_enc
(
&
user
->
emm_data
->
non_current
->
kasme
,
&
user
->
emm_data
->
non_current
->
knas_enc
,
seea
);
}
/* Derive the NAS integrity key */
if
(
_emm_data
.
non_current
->
knas_int
.
value
==
NULL
)
{
_emm_data
.
non_current
->
knas_int
.
value
=
if
(
user
->
emm_data
->
non_current
->
knas_int
.
value
==
NULL
)
{
user
->
emm_data
->
non_current
->
knas_int
.
value
=
(
uint8_t
*
)
calloc
(
1
,
AUTH_KNAS_INT_SIZE
);
_emm_data
.
non_current
->
knas_int
.
length
=
AUTH_KNAS_INT_SIZE
;
user
->
emm_data
->
non_current
->
knas_int
.
length
=
AUTH_KNAS_INT_SIZE
;
}
if
(
_emm_data
.
non_current
->
knas_int
.
value
!=
NULL
)
{
if
(
user
->
emm_data
->
non_current
->
knas_int
.
value
!=
NULL
)
{
if
(
rc
!=
RETURNerror
)
{
LOG_TRACE
(
INFO
,
"EMM-PROC - Update the non-current EPS security context knas_int"
);
rc
=
_security_knas_int
(
&
_emm_data
.
non_current
->
kasme
,
&
_emm_data
.
non_current
->
knas_int
,
seia
);
rc
=
_security_knas_int
(
&
user
->
emm_data
->
non_current
->
kasme
,
&
user
->
emm_data
->
non_current
->
knas_int
,
seia
);
}
}
...
...
@@ -234,10 +234,10 @@ int emm_proc_security_mode_command(nas_user_t *user, int native_ksi, int ksi,
if
(
_security_data
.
kenb
.
value
!=
NULL
)
{
if
(
rc
!=
RETURNerror
)
{
LOG_TRACE
(
INFO
,
"EMM-PROC - Update the non-current EPS security context kenb"
);
// LG COMMENT rc = _security_kenb(&
_emm_data.
security->kasme,
rc
=
_security_kenb
(
&
_emm_data
.
non_current
->
kasme
,
// LG COMMENT rc = _security_kenb(&
user->emm_data->
security->kasme,
rc
=
_security_kenb
(
&
user
->
emm_data
->
non_current
->
kasme
,
&
_security_data
.
kenb
,
*
(
uint32_t
*
)(
&
_emm_data
.
non_current
->
ul_count
));
*
(
uint32_t
*
)(
&
user
->
emm_data
->
non_current
->
ul_count
));
}
}
...
...
@@ -248,13 +248,13 @@ int emm_proc_security_mode_command(nas_user_t *user, int native_ksi, int ksi,
LOG_TRACE
(
INFO
,
"EMM-PROC - NAS security mode command accepted by the UE"
);
/* Update the current EPS security context */
if
(
native_ksi
&&
(
_emm_data
.
security
->
type
!=
EMM_KSI_NATIVE
)
)
{
if
(
native_ksi
&&
(
user
->
emm_data
->
security
->
type
!=
EMM_KSI_NATIVE
)
)
{
/* The type of security context flag included in the SECURITY
* MODE COMMAND message is set to "native security context" and
* the UE has a mapped EPS security context as the current EPS
* security context */
if
(
(
_emm_data
.
non_current
->
type
==
EMM_KSI_NATIVE
)
&&
(
_emm_data
.
non_current
->
eksi
==
ksi
)
)
{
if
(
(
user
->
emm_data
->
non_current
->
type
==
EMM_KSI_NATIVE
)
&&
(
user
->
emm_data
->
non_current
->
eksi
==
ksi
)
)
{
/* The KSI matches the non-current native EPS security
* context; the UE shall take the non-current native EPS
* security context into use which then becomes the
...
...
@@ -263,36 +263,37 @@ int emm_proc_security_mode_command(nas_user_t *user, int native_ksi, int ksi,
LOG_TRACE
(
INFO
,
"EMM-PROC - Update Current security context"
);
/* Release non-current security context */
_security_release
(
_emm_data
.
security
);
_emm_data
.
security
=
_emm_data
.
non_current
;
_security_release
(
user
->
emm_data
->
security
);
user
->
emm_data
->
security
=
user
->
emm_data
->
non_current
;
/* Reset the uplink NAS COUNT counter */
_emm_data
.
security
->
ul_count
.
overflow
=
0
;
_emm_data
.
security
->
ul_count
.
seq_num
=
0
;
user
->
emm_data
->
security
->
ul_count
.
overflow
=
0
;
user
->
emm_data
->
security
->
ul_count
.
seq_num
=
0
;
/* Set new security context indicator */
security_context_is_new
=
TRUE
;
}
}
if
(
!
native_ksi
&&
(
_emm_data
.
security
->
type
!=
EMM_KSI_NATIVE
)
)
{
if
(
!
native_ksi
&&
(
user
->
emm_data
->
security
->
type
!=
EMM_KSI_NATIVE
)
)
{
/* The type of security context flag included in the SECURITY
* MODE COMMAND message is set to "mapped security context" and
* the UE has a mapped EPS security context as the current EPS
* security context */
if
(
ksi
!=
_emm_data
.
security
->
eksi
)
{
if
(
ksi
!=
user
->
emm_data
->
security
->
eksi
)
{
/* The KSI does not match the current EPS security context;
* the UE shall reset the uplink NAS COUNT counter */
LOG_TRACE
(
INFO
,
"EMM-PROC - Reset uplink NAS COUNT counter"
);
_emm_data
.
security
->
ul_count
.
overflow
=
0
;
_emm_data
.
security
->
ul_count
.
seq_num
=
0
;
user
->
emm_data
->
security
->
ul_count
.
overflow
=
0
;
user
->
emm_data
->
security
->
ul_count
.
seq_num
=
0
;
}
}
_emm_data
.
security
->
selected_algorithms
.
encryption
=
seea
;
_emm_data
.
security
->
selected_algorithms
.
integrity
=
seia
;
user
->
emm_data
->
security
->
selected_algorithms
.
encryption
=
seea
;
user
->
emm_data
->
security
->
selected_algorithms
.
integrity
=
seia
;
#if defined(NAS_BUILT_IN_UE)
nas_itti_kenb_refresh_req
(
_security_data
.
kenb
.
value
);
#endif
}
/*
* NAS security mode command not accepted by the UE
...
...
@@ -326,14 +327,14 @@ int emm_proc_security_mode_command(nas_user_t *user, int native_ksi, int ksi,
*/
emm_sap_t
emm_sap
;
emm_sap
.
primitive
=
EMMAS_SECURITY_RES
;
emm_sap
.
u
.
emm_as
.
u
.
security
.
guti
=
_emm_data
.
guti
;
emm_sap
.
u
.
emm_as
.
u
.
security
.
guti
=
user
->
emm_data
->
guti
;
emm_sap
.
u
.
emm_as
.
u
.
security
.
ueid
=
0
;
emm_sap
.
u
.
emm_as
.
u
.
security
.
msgType
=
EMM_AS_MSG_TYPE_SMC
;
emm_sap
.
u
.
emm_as
.
u
.
security
.
imeisv_request
=
imeisv_request
;
emm_sap
.
u
.
emm_as
.
u
.
security
.
emm_cause
=
emm_cause
;
/* Setup EPS NAS security data */
emm_as_set_security_data
(
&
emm_sap
.
u
.
emm_as
.
u
.
security
.
sctx
,
_emm_data
.
security
,
security_context_is_new
,
TRUE
);
user
->
emm_data
->
security
,
security_context_is_new
,
TRUE
);
rc
=
emm_sap_send
(
user
,
&
emm_sap
);
LOG_FUNC_RETURN
(
rc
);
...
...
openair3/NAS/UE/EMM/emmData.h
View file @
20cb51cb
...
...
@@ -333,13 +333,6 @@ typedef struct emm_data_s {
/******************** G L O B A L V A R I A B L E S ********************/
/****************************************************************************/
/*
* --------------------------------------------------------------------------
* EPS mobility management data (used within EMM only)
* --------------------------------------------------------------------------
*/
emm_data_t
_emm_data
;
/*
* --------------------------------------------------------------------------
* EPS mobility management timers – UE side
...
...
openair3/NAS/UE/EMM/emm_main.c
View file @
20cb51cb
This diff is collapsed.
Click to expand it.
openair3/NAS/UE/EMM/emm_main.h
View file @
20cb51cb
...
...
@@ -70,32 +70,32 @@ typedef int (*emm_indication_callback_t) (Stat_t, tac_t, ci_t, AcT_t,
void
emm_main_initialize
(
nas_user_t
*
user
,
emm_indication_callback_t
cb
,
const
char
*
imei
);
void
emm_main_cleanup
(
void
);
void
emm_main_cleanup
(
emm_data_t
*
emm_data
);
/* User's getter of UE's identity */
const
imsi_t
*
emm_main_get_imsi
(
void
);
const
imsi_t
*
emm_main_get_imsi
(
emm_data_t
*
emm_data
);
/* User's getter of the subscriber dialing number */
const
msisdn_t
*
emm_main_get_msisdn
(
void
);
/* User's getter/setter for network selection */
int
emm_main_set_plmn_selection_mode
(
int
mode
,
int
format
,
int
emm_main_set_plmn_selection_mode
(
emm_data_t
*
emm_data
,
int
mode
,
int
format
,
const
network_plmn_t
*
plmn
,
int
rat
);
int
emm_main_get_plmn_selection_mode
(
void
);
int
emm_main_get_plmn_list
(
const
char
**
plist
);
const
char
*
emm_main_get_selected_plmn
(
network_plmn_t
*
plmn
,
int
format
);
int
emm_main_get_plmn_selection_mode
(
emm_data_t
*
emm_data
);
int
emm_main_get_plmn_list
(
emm_data_t
*
emm_data
,
const
char
**
plist
);
const
char
*
emm_main_get_selected_plmn
(
emm_data_t
*
emm_data
,
network_plmn_t
*
plmn
,
int
format
);
/* User's getter for network registration */
Stat_t
emm_main_get_plmn_status
(
void
);
tac_t
emm_main_get_plmn_tac
(
void
);
ci_t
emm_main_get_plmn_ci
(
void
);
AcT_t
emm_main_get_plmn_rat
(
void
);
const
char
*
emm_main_get_registered_plmn
(
network_plmn_t
*
plmn
,
int
format
);
Stat_t
emm_main_get_plmn_status
(
emm_data_t
*
emm_data
);
tac_t
emm_main_get_plmn_tac
(
emm_data_t
*
emm_data
);
ci_t
emm_main_get_plmn_ci
(
emm_data_t
*
emm_data
);
AcT_t
emm_main_get_plmn_rat
(
emm_data_t
*
emm_data
);
const
char
*
emm_main_get_registered_plmn
(
emm_data_t
*
emm_data
,
network_plmn_t
*
plmn
,
int
format
);
/* User's getter for network attachment */
int
emm_main_is_attached
(
void
);
int
emm_main_is_emergency
(
void
);
int
emm_main_is_attached
(
emm_data_t
*
emm_data
);
int
emm_main_is_emergency
(
emm_data_t
*
emm_data
);
#endif
/* __EMM_MAIN_H__*/
openair3/NAS/UE/EMM/emm_proc.h
View file @
20cb51cb
...
...
@@ -133,7 +133,7 @@ int emm_proc_attach_failure(int is_initial, void *args);
int
emm_proc_attach_release
(
void
*
args
);
int
emm_proc_attach_restart
(
nas_user_t
*
user
);
int
emm_proc_attach_set_emergency
(
void
);
int
emm_proc_attach_set_emergency
(
emm_data_t
*
emm_data
);
// FIXME check prototype
int
emm_proc_attach_set_detach
(
void
*
user
);
...
...
@@ -183,8 +183,8 @@ int emm_proc_security_mode_command(nas_user_t *user, int native_ksi, int ksi, in
* Network indication handlers
*---------------------------------------------------------------------------
*/
int
emm_proc_registration_notify
(
Stat_t
status
);
int
emm_proc_location_notify
(
tac_t
tac
,
ci_t
ci
,
AcT_t
rat
);
int
emm_proc_network_notify
(
int
index
);
int
emm_proc_registration_notify
(
emm_data_t
*
emm_data
,
Stat_t
status
);
int
emm_proc_location_notify
(
emm_data_t
*
emm_data
,
tac_t
tac
,
ci_t
ci
,
AcT_t
rat
);
int
emm_proc_network_notify
(
emm_data_t
*
emm_data
,
int
index
);
#endif
/* __EMM_PROC_H__*/
openair3/NAS/UE/nas_proc.c
View file @
20cb51cb
...
...
@@ -134,7 +134,7 @@ void nas_proc_cleanup(nas_user_t *user)
/* Perform the EPS Mobility Manager's clean up procedure */
emm_main_cleanup
();
emm_main_cleanup
(
user
->
emm_data
);
/* Perform the EPS Session Manager's clean up procedure */
esm_main_cleanup
(
user
->
esm_data
);
...
...
@@ -251,11 +251,11 @@ int nas_proc_get_eps(nas_user_t *user, int *stat)
** Others: None **
** **
***************************************************************************/
int
nas_proc_get_imsi
(
char
*
imsi_str
)
int
nas_proc_get_imsi
(
emm_data_t
*
emm_data
,
char
*
imsi_str
)
{
LOG_FUNC_IN
;
const
imsi_t
*
imsi
=
emm_main_get_imsi
();
const
imsi_t
*
imsi
=
emm_main_get_imsi
(
emm_data
);
if
(
imsi
!=
NULL
)
{
int
offset
=
0
;
...
...
@@ -386,7 +386,7 @@ int nas_proc_register(nas_user_t *user, int mode, int format, const network_plmn
/*
* Set the PLMN selection mode of operation
*/
int
index
=
emm_main_set_plmn_selection_mode
(
mode
,
format
,
oper
,
AcT
);
int
index
=
emm_main_set_plmn_selection_mode
(
user
->
emm_data
,
mode
,
format
,
oper
,
AcT
);
if
(
!
(
index
<
0
)
)
{
/*
...
...
@@ -452,16 +452,16 @@ int nas_proc_get_reg_data(nas_user_t *user, int *mode, int *selected, int format
LOG_FUNC_IN
;
/* Get the PLMN selection mode of operation */
*
mode
=
emm_main_get_plmn_selection_mode
();
*
mode
=
emm_main_get_plmn_selection_mode
(
user
->
emm_data
);
/* Get the currently selected operator */
const
char
*
oper_name
=
emm_main_get_selected_plmn
(
oper
,
format
);
const
char
*
oper_name
=
emm_main_get_selected_plmn
(
user
->
emm_data
,
oper
,
format
);
if
(
oper_name
!=
NULL
)
{
/* An operator is currently selected */
*
selected
=
TRUE
;
/* Get the supported Radio Access Technology */
*
AcT
=
emm_main_get_plmn_rat
();
*
AcT
=
emm_main_get_plmn_rat
(
user
->
emm_data
);
}
else
{
/* No any operator is selected */
*
selected
=
FALSE
;
...
...
@@ -489,7 +489,7 @@ int nas_proc_get_oper_list(nas_user_t *user, const char **oper_list)
{
LOG_FUNC_IN
;
int
size
=
emm_main_get_plmn_list
(
oper_list
);
int
size
=
emm_main_get_plmn_list
(
user
->
emm_data
,
oper_list
);
LOG_FUNC_RETURN
(
size
);
}
...
...
@@ -514,7 +514,7 @@ int nas_proc_get_reg_status(nas_user_t *user, int *stat)
{
LOG_FUNC_IN
;
*
stat
=
emm_main_get_plmn_status
();
*
stat
=
emm_main_get_plmn_status
(
user
->
emm_data
);
LOG_FUNC_RETURN
(
RETURNok
);
}
...
...
@@ -542,9 +542,9 @@ int nas_proc_get_loc_info(nas_user_t *user, char *tac, char *ci, int *AcT)
{
LOG_FUNC_IN
;
sprintf
(
tac
,
"%.4x"
,
emm_main_get_plmn_tac
());
// two byte
sprintf
(
ci
,
"%.8x"
,
emm_main_get_plmn_ci
());
// four byte
*
AcT
=
emm_main_get_plmn_rat
();
// E-UTRAN
sprintf
(
tac
,
"%.4x"
,
emm_main_get_plmn_tac
(
user
->
emm_data
));
// two byte
sprintf
(
ci
,
"%.8x"
,
emm_main_get_plmn_ci
(
user
->
emm_data
));
// four byte
*
AcT
=
emm_main_get_plmn_rat
(
user
->
emm_data
);
// E-UTRAN
LOG_FUNC_RETURN
(
RETURNok
);
}
...
...
@@ -570,7 +570,7 @@ int nas_proc_detach(nas_user_t *user, int switch_off)
emm_sap_t
emm_sap
;
int
rc
=
RETURNok
;
if
(
emm_main_is_attached
()
)
{
if
(
emm_main_is_attached
(
user
->
emm_data
)
)
{
/* Initiate an Detach procedure */
emm_sap
.
primitive
=
EMMREG_DETACH_INIT
;
emm_sap
.
u
.
emm_reg
.
u
.
detach
.
switch_off
=
switch_off
;
...
...
@@ -601,7 +601,7 @@ int nas_proc_attach(nas_user_t *user)
emm_sap_t
emm_sap
;
int
rc
=
RETURNok
;
if
(
!
emm_main_is_attached
()
)
{
if
(
!
emm_main_is_attached
(
user
->
emm_data
)
)
{
/* Initiate an Attach procedure */
emm_sap
.
primitive
=
EMMREG_ATTACH_INIT
;
emm_sap
.
u
.
emm_reg
.
u
.
attach
.
is_emergency
=
FALSE
;
...
...
@@ -630,7 +630,7 @@ int nas_proc_get_attach_status(nas_user_t *user)
{
LOG_FUNC_IN
;
int
is_attached
=
emm_main_is_attached
();
int
is_attached
=
emm_main_is_attached
(
user
->
emm_data
);
LOG_FUNC_RETURN
(
is_attached
);
}
...
...
@@ -950,14 +950,14 @@ int nas_proc_activate_pdn(nas_user_t *user, int cid)
int
rc
=
RETURNok
;
if
(
!
emm_main_is_attached
()
)
{
if
(
!
emm_main_is_attached
(
user
->
emm_data
)
)
{
/*
* If the UE is not attached to the network, perform EPS attach
* procedure prior to attempt to request any PDN connectivity
*/
LOG_TRACE
(
WARNING
,
"NAS-PROC - UE is not attached to the network"
);
rc
=
nas_proc_attach
(
user
);
}
else
if
(
emm_main_is_emergency
())
{
}
else
if
(
emm_main_is_emergency
(
user
->
emm_data
))
{
/* The UE is attached for emergency bearer services; It shall not
* request a PDN connection to any other PDN */
LOG_TRACE
(
WARNING
,
"NAS-PROC - Attached for emergency bearer services"
);
...
...
openair3/NAS/UE/nas_proc.h
View file @
20cb51cb
...
...
@@ -76,7 +76,7 @@ int nas_proc_enable_s1_mode(nas_user_t *user);
int
nas_proc_disable_s1_mode
(
nas_user_t
*
user
);
int
nas_proc_get_eps
(
nas_user_t
*
user
,
int
*
stat
);
int
nas_proc_get_imsi
(
char
*
imsi_str
);
int
nas_proc_get_imsi
(
emm_data_t
*
emm_data
,
char
*
imsi_str
);
int
nas_proc_get_msisdn
(
char
*
msisdn_str
,
int
*
ton_npi
);
int
nas_proc_get_signal_quality
(
nas_user_t
*
user
,
int
*
rsrq
,
int
*
rsrp
);
...
...
openair3/NAS/UE/nas_user.c
View file @
20cb51cb
...
...
@@ -652,7 +652,7 @@ static int _nas_user_proc_cimi(nas_user_t *user, const at_command_t *data)
}
/* Get the International Mobile Subscriber Identity (IMSI) */
ret_code
=
nas_proc_get_imsi
(
cimi
->
IMSI
);
ret_code
=
nas_proc_get_imsi
(
user
->
emm_data
,
cimi
->
IMSI
);
if
(
ret_code
!=
RETURNok
)
{
LOG_TRACE
(
ERROR
,
"USR-MAIN - Failed to get IMSI number"
);
...
...
openair3/NAS/UE/user_defs.h
View file @
20cb51cb
...
...
@@ -49,14 +49,16 @@ Description NAS type definition to manage a user equipment
#include "esmData.h"
#include "esm_pt_defs.h"
#include "EMM/emm_fsm_defs.h"
#include "EMM/emmData.h"
typedef
struct
{
int
fd
;
proc_data_t
proc
;
esm_data_t
*
esm_data
;
// ESM internal data (used within ESM only)
esm_pt_data_t
*
esm_pt_data
;
emm_fsm_state_t
emm_fsm_status
;
// Current EPS Mobility Management status
esm_ebr_data_t
*
esm_ebr_data
;
// EPS bearer contexts
emm_fsm_state_t
emm_fsm_status
;
// Current EPS Mobility Management status
emm_data_t
*
emm_data
;
// EPS mobility management data
}
nas_user_t
;
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment