blob: f10851e5cc1627e80e76a7cf614b92a5957750fa [file] [log] [blame]
Pau Espin Pedrol31c46572019-09-02 16:45:27 +02001#pragma once
2
3#include <osmocom/core/fsm.h>
Alexander Couzens91a8bbd2019-09-11 03:38:14 +02004#include <osmocom/sgsn/gprs_sgsn.h>
5
Pau Espin Pedrol31c46572019-09-02 16:45:27 +02006
7/* 3GPP TS 24.008 ยง 4.1.3.3 GMM mobility management states on the network side */
8enum gmm_fsm_states {
9 ST_GMM_DEREGISTERED, /* 4.1.3.3.1.1 */
10 ST_GMM_COMMON_PROC_INIT, /* 4.1.3.3.1.2 */
11 ST_GMM_REGISTERED_NORMAL, /* 4.1.3.3.2.1 */
12 ST_GMM_REGISTERED_SUSPENDED, /* 4.1.3.3.2.2 */
13 ST_GMM_DEREGISTERED_INIT, /* 4.1.3.3.1.4 */
14};
15
16enum gmm_fsm_events {
17 E_GMM_COMMON_PROC_INIT_REQ,
18 /* E_GMM_COMMON_PROC_FAILED, NOT USED */
19 /* E_GMM_LOWER_LAYER_FAILED, NOT USED */
20 E_GMM_COMMON_PROC_SUCCESS,
21 E_GMM_ATTACH_SUCCESS,
22 /* E_GMM_NET_INIT_DETACH_REQ, NOT USED */
23 /* E_GMM_MS_INIT_DETACH_REQ, NOT USED */
24 /* E_GMM_DETACH_ACCEPTED, */
25 E_GMM_SUSPEND,
26 E_GMM_RESUME,
27 E_GMM_CLEANUP,
Alexander Couzens91a8bbd2019-09-11 03:38:14 +020028 E_GMM_RAT_CHANGE,
29};
30
31struct gmm_rat_change_data {
32 enum sgsn_ran_type new_ran_type;
33 struct gprs_llc_llme *llme;
Pau Espin Pedrol31c46572019-09-02 16:45:27 +020034};
35
36static inline bool gmm_fsm_is_registered(struct osmo_fsm_inst *fi)
37{
38 return fi->state == ST_GMM_REGISTERED_NORMAL ||
39 fi->state == ST_GMM_REGISTERED_SUSPENDED;
40}
41
42extern struct osmo_fsm gmm_fsm;