Pau Espin Pedrol | 31c4657 | 2019-09-02 16:45:27 +0200 | [diff] [blame] | 1 | #pragma once |
| 2 | |
| 3 | #include <osmocom/core/fsm.h> |
Alexander Couzens | 91a8bbd | 2019-09-11 03:38:14 +0200 | [diff] [blame] | 4 | #include <osmocom/sgsn/gprs_sgsn.h> |
| 5 | |
Pau Espin Pedrol | 31c4657 | 2019-09-02 16:45:27 +0200 | [diff] [blame] | 6 | |
| 7 | /* 3GPP TS 24.008 ยง 4.1.3.3 GMM mobility management states on the network side */ |
| 8 | enum 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 | |
| 16 | enum 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 Couzens | 91a8bbd | 2019-09-11 03:38:14 +0200 | [diff] [blame] | 28 | E_GMM_RAT_CHANGE, |
| 29 | }; |
| 30 | |
| 31 | struct gmm_rat_change_data { |
| 32 | enum sgsn_ran_type new_ran_type; |
| 33 | struct gprs_llc_llme *llme; |
Pau Espin Pedrol | 31c4657 | 2019-09-02 16:45:27 +0200 | [diff] [blame] | 34 | }; |
| 35 | |
| 36 | static 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 | |
| 42 | extern struct osmo_fsm gmm_fsm; |