Harald Welte | 52b1f98 | 2008-12-23 20:25:15 +0000 | [diff] [blame] | 1 | #ifndef _GSM_SUBSCR_H |
| 2 | #define _GSM_SUBSCR_H |
| 3 | |
| 4 | #include <sys/types.h> |
| 5 | #include "gsm_data.h" |
Holger Freyther | 12aa50d | 2009-01-01 18:02:05 +0000 | [diff] [blame] | 6 | #include "linuxlist.h" |
Harald Welte | 52b1f98 | 2008-12-23 20:25:15 +0000 | [diff] [blame] | 7 | |
Jan Luebbe | fac25fc | 2008-12-27 18:04:34 +0000 | [diff] [blame] | 8 | #define GSM_IMEI_LENGTH 17 |
Jan Luebbe | 5c15c85 | 2008-12-27 15:59:25 +0000 | [diff] [blame] | 9 | #define GSM_IMSI_LENGTH 17 |
| 10 | #define GSM_TMSI_LENGTH 17 |
| 11 | #define GSM_NAME_LENGTH 128 |
Jan Luebbe | 391d86e | 2008-12-27 22:33:34 +0000 | [diff] [blame] | 12 | #define GSM_EXTENSION_LENGTH 128 |
Jan Luebbe | 5c15c85 | 2008-12-27 15:59:25 +0000 | [diff] [blame] | 13 | |
Harald Welte | c2e302d | 2009-07-05 14:08:13 +0200 | [diff] [blame^] | 14 | struct gsm_equipment { |
| 15 | long long unsigned int id; |
| 16 | char imei[GSM_IMEI_LENGTH]; |
| 17 | char name[GSM_NAME_LENGTH]; |
| 18 | |
| 19 | struct gsm48_classmark1 classmark1; |
| 20 | u_int8_t classmark2_len; |
| 21 | u_int8_t classmark2[3]; |
| 22 | u_int8_t classmark3_len; |
| 23 | u_int8_t classmark3[14]; |
| 24 | }; |
| 25 | |
Harald Welte | 52b1f98 | 2008-12-23 20:25:15 +0000 | [diff] [blame] | 26 | struct gsm_subscriber { |
Harald Welte | 4bfdfe7 | 2009-06-10 23:11:52 +0800 | [diff] [blame] | 27 | struct gsm_network *net; |
Holger Freyther | 213b20b | 2009-06-02 03:24:54 +0000 | [diff] [blame] | 28 | long long unsigned int id; |
Jan Luebbe | 5c15c85 | 2008-12-27 15:59:25 +0000 | [diff] [blame] | 29 | char imsi[GSM_IMSI_LENGTH]; |
| 30 | char tmsi[GSM_TMSI_LENGTH]; |
| 31 | u_int16_t lac; |
| 32 | char name[GSM_NAME_LENGTH]; |
Jan Luebbe | 391d86e | 2008-12-27 22:33:34 +0000 | [diff] [blame] | 33 | char extension[GSM_EXTENSION_LENGTH]; |
Jan Luebbe | 6e2e545 | 2008-12-27 16:47:55 +0000 | [diff] [blame] | 34 | int authorized; |
Holger Freyther | 12aa50d | 2009-01-01 18:02:05 +0000 | [diff] [blame] | 35 | |
Harald Welte | c2e302d | 2009-07-05 14:08:13 +0200 | [diff] [blame^] | 36 | /* Every user can only have one equipment in use at any given |
| 37 | * point in time */ |
| 38 | struct gsm_equipment equipment; |
| 39 | |
Holger Freyther | 862cfff | 2009-06-04 14:15:33 +0000 | [diff] [blame] | 40 | /* for internal management */ |
Holger Freyther | 12aa50d | 2009-01-01 18:02:05 +0000 | [diff] [blame] | 41 | int use_count; |
| 42 | struct llist_head entry; |
Harald Welte | f7c4352 | 2009-06-09 20:24:21 +0000 | [diff] [blame] | 43 | |
Holger Freyther | 04866d4 | 2009-03-31 04:35:19 +0200 | [diff] [blame] | 44 | /* pending requests */ |
Holger Freyther | 85a7b36 | 2009-04-18 13:48:55 +0200 | [diff] [blame] | 45 | int in_callback; |
Holger Freyther | 04866d4 | 2009-03-31 04:35:19 +0200 | [diff] [blame] | 46 | struct llist_head requests; |
Harald Welte | 52b1f98 | 2008-12-23 20:25:15 +0000 | [diff] [blame] | 47 | }; |
| 48 | |
Jan Luebbe | 5c15c85 | 2008-12-27 15:59:25 +0000 | [diff] [blame] | 49 | enum gsm_subscriber_field { |
| 50 | GSM_SUBSCRIBER_IMSI, |
| 51 | GSM_SUBSCRIBER_TMSI, |
Holger Freyther | 9c564b8 | 2009-02-09 23:39:20 +0000 | [diff] [blame] | 52 | GSM_SUBSCRIBER_EXTENSION, |
Jan Luebbe | 5c15c85 | 2008-12-27 15:59:25 +0000 | [diff] [blame] | 53 | }; |
Harald Welte | 52b1f98 | 2008-12-23 20:25:15 +0000 | [diff] [blame] | 54 | |
Holger Freyther | 4a49e77 | 2009-04-12 05:37:29 +0000 | [diff] [blame] | 55 | enum gsm_subscriber_update_reason { |
| 56 | GSM_SUBSCRIBER_UPDATE_ATTACHED, |
| 57 | GSM_SUBSCRIBER_UPDATE_DETACHED, |
Harald Welte | c2e302d | 2009-07-05 14:08:13 +0200 | [diff] [blame^] | 58 | GSM_SUBSCRIBER_UPDATE_EQUIPMENT, |
Holger Freyther | 4a49e77 | 2009-04-12 05:37:29 +0000 | [diff] [blame] | 59 | }; |
| 60 | |
Holger Freyther | 12aa50d | 2009-01-01 18:02:05 +0000 | [diff] [blame] | 61 | struct gsm_subscriber *subscr_get(struct gsm_subscriber *subscr); |
| 62 | struct gsm_subscriber *subscr_put(struct gsm_subscriber *subscr); |
Holger Freyther | a471a41 | 2009-01-04 03:47:05 +0000 | [diff] [blame] | 63 | struct gsm_subscriber *subscr_get_by_tmsi(const char *tmsi); |
| 64 | struct gsm_subscriber *subscr_get_by_imsi(const char *imsi); |
Holger Freyther | 9c564b8 | 2009-02-09 23:39:20 +0000 | [diff] [blame] | 65 | struct gsm_subscriber *subscr_get_by_extension(const char *ext); |
Holger Freyther | 4a49e77 | 2009-04-12 05:37:29 +0000 | [diff] [blame] | 66 | int subscr_update(struct gsm_subscriber *s, struct gsm_bts *bts, int reason); |
Holger Freyther | a1f92f0 | 2009-04-12 05:37:52 +0000 | [diff] [blame] | 67 | void subscr_put_channel(struct gsm_lchan *lchan); |
Holger Freyther | 04866d4 | 2009-03-31 04:35:19 +0200 | [diff] [blame] | 68 | void subscr_get_channel(struct gsm_subscriber *subscr, |
| 69 | struct gsm_network *network, int type, |
| 70 | gsm_cbfn *cbfn, void *param); |
Holger Freyther | a471a41 | 2009-01-04 03:47:05 +0000 | [diff] [blame] | 71 | |
| 72 | /* internal */ |
| 73 | struct gsm_subscriber *subscr_alloc(void); |
Holger Freyther | 12aa50d | 2009-01-01 18:02:05 +0000 | [diff] [blame] | 74 | |
Harald Welte | 52b1f98 | 2008-12-23 20:25:15 +0000 | [diff] [blame] | 75 | #endif /* _GSM_SUBSCR_H */ |