blob: aaf261eda4c5b086d3f4753ec054e07a3c6ed72f [file] [log] [blame]
Harald Welte59b04682009-06-10 05:40:52 +08001#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 Luebbe62cc86d2009-08-12 19:45:37 +020014#define GSM_MIN_EXTEN 20000
15#define GSM_MAX_EXTEN 49999
16
Jan Luebbee2974032009-08-12 10:12:52 +020017#define GSM_SUBSCRIBER_FIRST_CONTACT 0x00000001
18
Harald Weltef6845a72009-07-05 14:08:13 +020019struct 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 Welte59b04682009-06-10 05:40:52 +080031struct gsm_subscriber {
Harald Welte03740842009-06-10 23:11:52 +080032 struct gsm_network *net;
Harald Welte59b04682009-06-10 05:40:52 +080033 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 Luebbee2974032009-08-12 10:12:52 +020041 /* Temporary field which is not stored in the DB/HLR */
42 u_int32_t flags;
43
Harald Weltef6845a72009-07-05 14:08:13 +020044 /* Every user can only have one equipment in use at any given
45 * point in time */
46 struct gsm_equipment equipment;
47
Harald Welte59b04682009-06-10 05:40:52 +080048 /* for internal management */
49 int use_count;
50 struct llist_head entry;
51
Holger Freyther93795ac2009-03-31 04:35:19 +020052 /* pending requests */
Holger Freyther8bdf7622009-04-18 13:48:55 +020053 int in_callback;
Holger Freyther93795ac2009-03-31 04:35:19 +020054 struct llist_head requests;
Harald Welte59b04682009-06-10 05:40:52 +080055};
56
57enum gsm_subscriber_field {
58 GSM_SUBSCRIBER_IMSI,
59 GSM_SUBSCRIBER_TMSI,
60 GSM_SUBSCRIBER_EXTENSION,
Harald Welte4531c6b2009-07-05 14:06:41 +020061 GSM_SUBSCRIBER_ID,
Harald Welte59b04682009-06-10 05:40:52 +080062};
63
64enum gsm_subscriber_update_reason {
65 GSM_SUBSCRIBER_UPDATE_ATTACHED,
66 GSM_SUBSCRIBER_UPDATE_DETACHED,
Harald Weltef6845a72009-07-05 14:08:13 +020067 GSM_SUBSCRIBER_UPDATE_EQUIPMENT,
Harald Welte59b04682009-06-10 05:40:52 +080068};
69
70struct gsm_subscriber *subscr_get(struct gsm_subscriber *subscr);
71struct gsm_subscriber *subscr_put(struct gsm_subscriber *subscr);
Harald Welte75350412009-07-23 18:46:00 +020072struct gsm_subscriber *subscr_get_by_tmsi(struct gsm_network *net,
73 const char *tmsi);
74struct gsm_subscriber *subscr_get_by_imsi(struct gsm_network *net,
75 const char *imsi);
76struct gsm_subscriber *subscr_get_by_extension(struct gsm_network *net,
77 const char *ext);
Harald Welte68b7df22009-08-08 16:03:15 +020078struct gsm_subscriber *subscr_get_by_id(struct gsm_network *net,
79 unsigned long long id);
Harald Welte59b04682009-06-10 05:40:52 +080080int subscr_update(struct gsm_subscriber *s, struct gsm_bts *bts, int reason);
81void subscr_put_channel(struct gsm_lchan *lchan);
Holger Freyther93795ac2009-03-31 04:35:19 +020082void subscr_get_channel(struct gsm_subscriber *subscr,
Holger Hans Peter Freyther35672842009-08-20 13:33:51 +020083 int type, gsm_cbfn *cbfn, void *param);
Harald Welte59b04682009-06-10 05:40:52 +080084
85/* internal */
86struct gsm_subscriber *subscr_alloc(void);
Harald Welte (local)02d5efa2009-08-14 20:27:16 +020087extern struct llist_head active_subscribers;
Harald Welte59b04682009-06-10 05:40:52 +080088
89#endif /* _GSM_SUBSCR_H */