Harald Welte | 59b0468 | 2009-06-10 05:40:52 +0800 | [diff] [blame] | 1 | #ifndef _GSM_SUBSCR_H |
| 2 | #define _GSM_SUBSCR_H |
| 3 | |
| 4 | #include <sys/types.h> |
| 5 | #include "gsm_data.h" |
| 6 | #include "linuxlist.h" |
| 7 | |
| 8 | #define GSM_IMEI_LENGTH 17 |
| 9 | #define GSM_IMSI_LENGTH 17 |
| 10 | #define GSM_TMSI_LENGTH 17 |
| 11 | #define GSM_NAME_LENGTH 128 |
| 12 | #define GSM_EXTENSION_LENGTH 128 |
| 13 | |
Jan Luebbe | 62cc86d | 2009-08-12 19:45:37 +0200 | [diff] [blame] | 14 | #define GSM_MIN_EXTEN 20000 |
| 15 | #define GSM_MAX_EXTEN 49999 |
| 16 | |
Jan Luebbe | e297403 | 2009-08-12 10:12:52 +0200 | [diff] [blame] | 17 | #define GSM_SUBSCRIBER_FIRST_CONTACT 0x00000001 |
| 18 | |
Harald Welte | f6845a7 | 2009-07-05 14:08:13 +0200 | [diff] [blame] | 19 | struct gsm_equipment { |
| 20 | long long unsigned int id; |
| 21 | char imei[GSM_IMEI_LENGTH]; |
| 22 | char name[GSM_NAME_LENGTH]; |
| 23 | |
| 24 | struct gsm48_classmark1 classmark1; |
| 25 | u_int8_t classmark2_len; |
| 26 | u_int8_t classmark2[3]; |
| 27 | u_int8_t classmark3_len; |
| 28 | u_int8_t classmark3[14]; |
| 29 | }; |
| 30 | |
Harald Welte | 59b0468 | 2009-06-10 05:40:52 +0800 | [diff] [blame] | 31 | struct gsm_subscriber { |
Harald Welte | 0374084 | 2009-06-10 23:11:52 +0800 | [diff] [blame] | 32 | struct gsm_network *net; |
Harald Welte | 59b0468 | 2009-06-10 05:40:52 +0800 | [diff] [blame] | 33 | long long unsigned int id; |
| 34 | char imsi[GSM_IMSI_LENGTH]; |
| 35 | char tmsi[GSM_TMSI_LENGTH]; |
| 36 | u_int16_t lac; |
| 37 | char name[GSM_NAME_LENGTH]; |
| 38 | char extension[GSM_EXTENSION_LENGTH]; |
| 39 | int authorized; |
| 40 | |
Jan Luebbe | e297403 | 2009-08-12 10:12:52 +0200 | [diff] [blame] | 41 | /* Temporary field which is not stored in the DB/HLR */ |
| 42 | u_int32_t flags; |
| 43 | |
Harald Welte | f6845a7 | 2009-07-05 14:08:13 +0200 | [diff] [blame] | 44 | /* Every user can only have one equipment in use at any given |
| 45 | * point in time */ |
| 46 | struct gsm_equipment equipment; |
| 47 | |
Harald Welte | 59b0468 | 2009-06-10 05:40:52 +0800 | [diff] [blame] | 48 | /* for internal management */ |
| 49 | int use_count; |
| 50 | struct llist_head entry; |
| 51 | |
Holger Freyther | 93795ac | 2009-03-31 04:35:19 +0200 | [diff] [blame] | 52 | /* pending requests */ |
Holger Freyther | 8bdf762 | 2009-04-18 13:48:55 +0200 | [diff] [blame] | 53 | int in_callback; |
Holger Freyther | 93795ac | 2009-03-31 04:35:19 +0200 | [diff] [blame] | 54 | struct llist_head requests; |
Harald Welte | 59b0468 | 2009-06-10 05:40:52 +0800 | [diff] [blame] | 55 | }; |
| 56 | |
| 57 | enum gsm_subscriber_field { |
| 58 | GSM_SUBSCRIBER_IMSI, |
| 59 | GSM_SUBSCRIBER_TMSI, |
| 60 | GSM_SUBSCRIBER_EXTENSION, |
Harald Welte | 4531c6b | 2009-07-05 14:06:41 +0200 | [diff] [blame] | 61 | GSM_SUBSCRIBER_ID, |
Harald Welte | 59b0468 | 2009-06-10 05:40:52 +0800 | [diff] [blame] | 62 | }; |
| 63 | |
| 64 | enum gsm_subscriber_update_reason { |
| 65 | GSM_SUBSCRIBER_UPDATE_ATTACHED, |
| 66 | GSM_SUBSCRIBER_UPDATE_DETACHED, |
Harald Welte | f6845a7 | 2009-07-05 14:08:13 +0200 | [diff] [blame] | 67 | GSM_SUBSCRIBER_UPDATE_EQUIPMENT, |
Harald Welte | 59b0468 | 2009-06-10 05:40:52 +0800 | [diff] [blame] | 68 | }; |
| 69 | |
| 70 | struct gsm_subscriber *subscr_get(struct gsm_subscriber *subscr); |
| 71 | struct gsm_subscriber *subscr_put(struct gsm_subscriber *subscr); |
Harald Welte | 7535041 | 2009-07-23 18:46:00 +0200 | [diff] [blame] | 72 | struct gsm_subscriber *subscr_get_by_tmsi(struct gsm_network *net, |
| 73 | const char *tmsi); |
| 74 | struct gsm_subscriber *subscr_get_by_imsi(struct gsm_network *net, |
| 75 | const char *imsi); |
| 76 | struct gsm_subscriber *subscr_get_by_extension(struct gsm_network *net, |
| 77 | const char *ext); |
Harald Welte | 68b7df2 | 2009-08-08 16:03:15 +0200 | [diff] [blame] | 78 | struct gsm_subscriber *subscr_get_by_id(struct gsm_network *net, |
| 79 | unsigned long long id); |
Harald Welte | 59b0468 | 2009-06-10 05:40:52 +0800 | [diff] [blame] | 80 | int subscr_update(struct gsm_subscriber *s, struct gsm_bts *bts, int reason); |
| 81 | void subscr_put_channel(struct gsm_lchan *lchan); |
Holger Freyther | 93795ac | 2009-03-31 04:35:19 +0200 | [diff] [blame] | 82 | void subscr_get_channel(struct gsm_subscriber *subscr, |
Holger Hans Peter Freyther | 3567284 | 2009-08-20 13:33:51 +0200 | [diff] [blame^] | 83 | int type, gsm_cbfn *cbfn, void *param); |
Harald Welte | 59b0468 | 2009-06-10 05:40:52 +0800 | [diff] [blame] | 84 | |
| 85 | /* internal */ |
| 86 | struct gsm_subscriber *subscr_alloc(void); |
Harald Welte (local) | 02d5efa | 2009-08-14 20:27:16 +0200 | [diff] [blame] | 87 | extern struct llist_head active_subscribers; |
Harald Welte | 59b0468 | 2009-06-10 05:40:52 +0800 | [diff] [blame] | 88 | |
| 89 | #endif /* _GSM_SUBSCR_H */ |