Harald Welte | 59b0468 | 2009-06-10 05:40:52 +0800 | [diff] [blame] | 1 | #ifndef _GSM_SUBSCR_H |
| 2 | #define _GSM_SUBSCR_H |
| 3 | |
Harald Welte | 59b0468 | 2009-06-10 05:40:52 +0800 | [diff] [blame] | 4 | #include "gsm_data.h" |
Pablo Neira Ayuso | dd5fff4 | 2011-03-22 16:47:59 +0100 | [diff] [blame] | 5 | #include <osmocom/core/linuxlist.h> |
Harald Welte | 59b0468 | 2009-06-10 05:40:52 +0800 | [diff] [blame] | 6 | |
| 7 | #define GSM_IMEI_LENGTH 17 |
| 8 | #define GSM_IMSI_LENGTH 17 |
Holger Hans Peter Freyther | fb4e783 | 2010-07-25 18:10:02 +0800 | [diff] [blame] | 9 | #define GSM_NAME_LENGTH 160 |
Mike Haben | c0c5079 | 2009-10-26 20:36:34 +0100 | [diff] [blame] | 10 | |
| 11 | #define GSM_EXTENSION_LENGTH 15 /* MSISDN can only be 15 digits length */ |
| 12 | #define GSM_MIN_EXTEN 20000 |
| 13 | #define GSM_MAX_EXTEN 49999 |
Harald Welte | 59b0468 | 2009-06-10 05:40:52 +0800 | [diff] [blame] | 14 | |
Jan Luebbe | e297403 | 2009-08-12 10:12:52 +0200 | [diff] [blame] | 15 | #define GSM_SUBSCRIBER_FIRST_CONTACT 0x00000001 |
Holger Hans Peter Freyther | cd8bacf | 2009-08-19 12:53:57 +0200 | [diff] [blame] | 16 | #define tmsi_from_string(str) strtoul(str, NULL, 10) |
Jan Luebbe | e297403 | 2009-08-12 10:12:52 +0200 | [diff] [blame] | 17 | |
Holger Hans Peter Freyther | 2fb8ebf | 2013-07-27 21:07:57 +0200 | [diff] [blame] | 18 | #define GSM_SUBSCRIBER_NO_EXPIRATION 0x0 |
| 19 | |
Holger Hans Peter Freyther | 0fe0c8c | 2010-12-29 11:07:22 +0100 | [diff] [blame] | 20 | struct vty; |
| 21 | |
Harald Welte | f6845a7 | 2009-07-05 14:08:13 +0200 | [diff] [blame] | 22 | struct gsm_equipment { |
| 23 | long long unsigned int id; |
| 24 | char imei[GSM_IMEI_LENGTH]; |
| 25 | char name[GSM_NAME_LENGTH]; |
| 26 | |
| 27 | struct gsm48_classmark1 classmark1; |
Holger Hans Peter Freyther | 7eb8a9a | 2011-04-18 17:04:00 +0200 | [diff] [blame] | 28 | uint8_t classmark2_len; |
| 29 | uint8_t classmark2[3]; |
| 30 | uint8_t classmark3_len; |
| 31 | uint8_t classmark3[14]; |
Harald Welte | f6845a7 | 2009-07-05 14:08:13 +0200 | [diff] [blame] | 32 | }; |
| 33 | |
Harald Welte | 59b0468 | 2009-06-10 05:40:52 +0800 | [diff] [blame] | 34 | struct gsm_subscriber { |
Harald Welte | 0374084 | 2009-06-10 23:11:52 +0800 | [diff] [blame] | 35 | struct gsm_network *net; |
Harald Welte | 59b0468 | 2009-06-10 05:40:52 +0800 | [diff] [blame] | 36 | long long unsigned int id; |
| 37 | char imsi[GSM_IMSI_LENGTH]; |
Holger Hans Peter Freyther | 7eb8a9a | 2011-04-18 17:04:00 +0200 | [diff] [blame] | 38 | uint32_t tmsi; |
| 39 | uint16_t lac; |
Harald Welte | 59b0468 | 2009-06-10 05:40:52 +0800 | [diff] [blame] | 40 | char name[GSM_NAME_LENGTH]; |
| 41 | char extension[GSM_EXTENSION_LENGTH]; |
| 42 | int authorized; |
Jan Luebbe | fe7cc1e | 2012-12-27 00:27:16 +0100 | [diff] [blame] | 43 | time_t expire_lu; |
Harald Welte | 59b0468 | 2009-06-10 05:40:52 +0800 | [diff] [blame] | 44 | |
Jan Luebbe | e297403 | 2009-08-12 10:12:52 +0200 | [diff] [blame] | 45 | /* Temporary field which is not stored in the DB/HLR */ |
Holger Hans Peter Freyther | 7eb8a9a | 2011-04-18 17:04:00 +0200 | [diff] [blame] | 46 | uint32_t flags; |
Jan Luebbe | e297403 | 2009-08-12 10:12:52 +0200 | [diff] [blame] | 47 | |
Harald Welte | f6845a7 | 2009-07-05 14:08:13 +0200 | [diff] [blame] | 48 | /* Every user can only have one equipment in use at any given |
| 49 | * point in time */ |
| 50 | struct gsm_equipment equipment; |
| 51 | |
Harald Welte | 59b0468 | 2009-06-10 05:40:52 +0800 | [diff] [blame] | 52 | /* for internal management */ |
| 53 | int use_count; |
| 54 | struct llist_head entry; |
| 55 | |
Holger Freyther | 93795ac | 2009-03-31 04:35:19 +0200 | [diff] [blame] | 56 | /* pending requests */ |
Holger Freyther | 8bdf762 | 2009-04-18 13:48:55 +0200 | [diff] [blame] | 57 | int in_callback; |
Holger Freyther | 93795ac | 2009-03-31 04:35:19 +0200 | [diff] [blame] | 58 | struct llist_head requests; |
Harald Welte | 59b0468 | 2009-06-10 05:40:52 +0800 | [diff] [blame] | 59 | }; |
| 60 | |
| 61 | enum gsm_subscriber_field { |
| 62 | GSM_SUBSCRIBER_IMSI, |
| 63 | GSM_SUBSCRIBER_TMSI, |
| 64 | GSM_SUBSCRIBER_EXTENSION, |
Harald Welte | 4531c6b | 2009-07-05 14:06:41 +0200 | [diff] [blame] | 65 | GSM_SUBSCRIBER_ID, |
Harald Welte | 59b0468 | 2009-06-10 05:40:52 +0800 | [diff] [blame] | 66 | }; |
| 67 | |
| 68 | enum gsm_subscriber_update_reason { |
| 69 | GSM_SUBSCRIBER_UPDATE_ATTACHED, |
| 70 | GSM_SUBSCRIBER_UPDATE_DETACHED, |
Harald Welte | f6845a7 | 2009-07-05 14:08:13 +0200 | [diff] [blame] | 71 | GSM_SUBSCRIBER_UPDATE_EQUIPMENT, |
Harald Welte | 59b0468 | 2009-06-10 05:40:52 +0800 | [diff] [blame] | 72 | }; |
| 73 | |
| 74 | struct gsm_subscriber *subscr_get(struct gsm_subscriber *subscr); |
| 75 | struct gsm_subscriber *subscr_put(struct gsm_subscriber *subscr); |
Holger Hans Peter Freyther | abe587d | 2013-10-04 08:35:11 +0200 | [diff] [blame] | 76 | struct gsm_subscriber *subscr_create_subscriber(struct gsm_network *net, |
| 77 | const char *imsi); |
Harald Welte | 7535041 | 2009-07-23 18:46:00 +0200 | [diff] [blame] | 78 | struct gsm_subscriber *subscr_get_by_tmsi(struct gsm_network *net, |
Holger Hans Peter Freyther | 7eb8a9a | 2011-04-18 17:04:00 +0200 | [diff] [blame] | 79 | uint32_t tmsi); |
Harald Welte | 7535041 | 2009-07-23 18:46:00 +0200 | [diff] [blame] | 80 | struct gsm_subscriber *subscr_get_by_imsi(struct gsm_network *net, |
| 81 | const char *imsi); |
| 82 | struct gsm_subscriber *subscr_get_by_extension(struct gsm_network *net, |
| 83 | const char *ext); |
Harald Welte | 68b7df2 | 2009-08-08 16:03:15 +0200 | [diff] [blame] | 84 | struct gsm_subscriber *subscr_get_by_id(struct gsm_network *net, |
| 85 | unsigned long long id); |
Holger Hans Peter Freyther | dcec9aa | 2010-11-15 09:15:01 +0100 | [diff] [blame] | 86 | struct gsm_subscriber *subscr_get_or_create(struct gsm_network *net, |
| 87 | const char *imsi); |
Harald Welte | 59b0468 | 2009-06-10 05:40:52 +0800 | [diff] [blame] | 88 | int subscr_update(struct gsm_subscriber *s, struct gsm_bts *bts, int reason); |
Holger Hans Peter Freyther | 000571f | 2010-12-27 22:43:28 +0100 | [diff] [blame] | 89 | void subscr_put_channel(struct gsm_subscriber *subscr); |
Holger Freyther | 93795ac | 2009-03-31 04:35:19 +0200 | [diff] [blame] | 90 | void subscr_get_channel(struct gsm_subscriber *subscr, |
Holger Hans Peter Freyther | 3567284 | 2009-08-20 13:33:51 +0200 | [diff] [blame] | 91 | int type, gsm_cbfn *cbfn, void *param); |
Holger Hans Peter Freyther | b0065af | 2010-11-15 13:32:33 +0100 | [diff] [blame] | 92 | struct gsm_subscriber *subscr_active_by_tmsi(struct gsm_network *net, |
| 93 | uint32_t tmsi); |
| 94 | struct gsm_subscriber *subscr_active_by_imsi(struct gsm_network *net, |
| 95 | const char *imsi); |
Harald Welte | 59b0468 | 2009-06-10 05:40:52 +0800 | [diff] [blame] | 96 | |
Holger Hans Peter Freyther | 5b72b30 | 2010-12-28 22:12:30 +0100 | [diff] [blame] | 97 | int subscr_pending_requests(struct gsm_subscriber *subscr); |
Holger Hans Peter Freyther | ce69aec | 2010-12-28 22:21:55 +0100 | [diff] [blame] | 98 | int subscr_pending_clear(struct gsm_subscriber *subscr); |
Holger Hans Peter Freyther | 0fe0c8c | 2010-12-29 11:07:22 +0100 | [diff] [blame] | 99 | int subscr_pending_dump(struct gsm_subscriber *subscr, struct vty *vty); |
Holger Hans Peter Freyther | e5d806e | 2010-12-29 13:45:49 +0100 | [diff] [blame] | 100 | int subscr_pending_kick(struct gsm_subscriber *subscr); |
Holger Hans Peter Freyther | 5b72b30 | 2010-12-28 22:12:30 +0100 | [diff] [blame] | 101 | |
Harald Welte | 0747c6a | 2009-12-24 14:50:24 +0100 | [diff] [blame] | 102 | char *subscr_name(struct gsm_subscriber *subscr); |
| 103 | |
Holger Hans Peter Freyther | ec4fa9e | 2010-12-22 14:31:34 +0100 | [diff] [blame] | 104 | int subscr_purge_inactive(struct gsm_network *net); |
Holger Hans Peter Freyther | 0c29e5f | 2010-12-22 18:12:11 +0100 | [diff] [blame] | 105 | void subscr_update_from_db(struct gsm_subscriber *subscr); |
Jan Luebbe | fe7cc1e | 2012-12-27 00:27:16 +0100 | [diff] [blame] | 106 | void subscr_expire(struct gsm_network *net); |
Holger Hans Peter Freyther | c25021f | 2013-06-30 15:30:47 +0200 | [diff] [blame] | 107 | int subscr_update_expire_lu(struct gsm_subscriber *subscr, struct gsm_bts *bts); |
Holger Hans Peter Freyther | ec4fa9e | 2010-12-22 14:31:34 +0100 | [diff] [blame] | 108 | |
Harald Welte | 59b0468 | 2009-06-10 05:40:52 +0800 | [diff] [blame] | 109 | /* internal */ |
| 110 | struct gsm_subscriber *subscr_alloc(void); |
Harald Welte (local) | 02d5efa | 2009-08-14 20:27:16 +0200 | [diff] [blame] | 111 | extern struct llist_head active_subscribers; |
Harald Welte | 59b0468 | 2009-06-10 05:40:52 +0800 | [diff] [blame] | 112 | |
| 113 | #endif /* _GSM_SUBSCR_H */ |