1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/*****************************************************************************
Eurecom OpenAirInterface 3
Copyright(c) 2012 Eurecom
Source emm_fsm.h
Version 0.1
Date 2012/10/03
Product NAS stack
Subsystem EPS Mobility Management
Author Frederic Maurel
Description Defines the EPS Mobility Management procedures executed at
the EMMREG Service Access Point.
*****************************************************************************/
#ifndef __EMM_FSM_H__
#define __EMM_FSM_H__
#include "emm_regDef.h"
/****************************************************************************/
/********************* G L O B A L C O N S T A N T S *******************/
/****************************************************************************/
/****************************************************************************/
/************************ G L O B A L T Y P E S ************************/
/****************************************************************************/
/*
* States of the EPS Mobility Management sublayer
* ----------------------------------------------
* The EMM protocol of the UE and the network is described by means of two
* different state machines.
*/
typedef enum {
EMM_INVALID,
#ifdef NAS_UE
EMM_NULL,
#endif
EMM_DEREGISTERED,
EMM_REGISTERED,
EMM_DEREGISTERED_INITIATED,
#ifdef NAS_UE
EMM_DEREGISTERED_NORMAL_SERVICE,
EMM_DEREGISTERED_LIMITED_SERVICE,
EMM_DEREGISTERED_ATTEMPTING_TO_ATTACH,
EMM_DEREGISTERED_PLMN_SEARCH,
EMM_DEREGISTERED_NO_IMSI,
EMM_DEREGISTERED_ATTACH_NEEDED,
EMM_DEREGISTERED_NO_CELL_AVAILABLE,
EMM_REGISTERED_INITIATED,
EMM_REGISTERED_NORMAL_SERVICE,
EMM_REGISTERED_ATTEMPTING_TO_UPDATE,
EMM_REGISTERED_LIMITED_SERVICE,
EMM_REGISTERED_PLMN_SEARCH,
EMM_REGISTERED_UPDATE_NEEDED,
EMM_REGISTERED_NO_CELL_AVAILABLE,
EMM_REGISTERED_ATTEMPTING_TO_UPDATE_MM,
EMM_REGISTERED_IMSI_DETACH_INITIATED,
EMM_TRACKING_AREA_UPDATING_INITIATED,
EMM_SERVICE_REQUEST_INITIATED,
#endif
#ifdef NAS_MME
EMM_COMMON_PROCEDURE_INITIATED,
#endif
EMM_STATE_MAX
} emm_fsm_state_t;
/****************************************************************************/
/******************** G L O B A L V A R I A B L E S ********************/
/****************************************************************************/
/****************************************************************************/
/****************** E X P O R T E D F U N C T I O N S ******************/
/****************************************************************************/
void emm_fsm_initialize(void);
#ifdef NAS_UE
int emm_fsm_set_status(emm_fsm_state_t status);
emm_fsm_state_t emm_fsm_get_status(void);
#endif
#ifdef NAS_MME
struct emm_data_context_t;
int emm_fsm_set_status(unsigned int ueid, void *ctx, emm_fsm_state_t status);
emm_fsm_state_t emm_fsm_get_status(unsigned int ueid, void *ctx);
#endif
int emm_fsm_process(const emm_reg_t *evt);
#endif /* __EMM_FSM_H__*/