blob: 4a23115559b9ea3d0d06127f45028f6ae48ec4ac [file] [log] [blame]
Harald Welte52b1f982008-12-23 20:25:15 +00001#ifndef _GSM_SUBSCR_H
2#define _GSM_SUBSCR_H
3
4#include <sys/types.h>
5#include "gsm_data.h"
Holger Freyther12aa50d2009-01-01 18:02:05 +00006#include "linuxlist.h"
Harald Welte52b1f982008-12-23 20:25:15 +00007
Jan Luebbefac25fc2008-12-27 18:04:34 +00008#define GSM_IMEI_LENGTH 17
Jan Luebbe5c15c852008-12-27 15:59:25 +00009#define GSM_IMSI_LENGTH 17
10#define GSM_TMSI_LENGTH 17
11#define GSM_NAME_LENGTH 128
Jan Luebbe391d86e2008-12-27 22:33:34 +000012#define GSM_EXTENSION_LENGTH 128
Jan Luebbe5c15c852008-12-27 15:59:25 +000013
Harald Weltec2e302d2009-07-05 14:08:13 +020014struct 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 Welte52b1f982008-12-23 20:25:15 +000026struct gsm_subscriber {
Harald Welte4bfdfe72009-06-10 23:11:52 +080027 struct gsm_network *net;
Holger Freyther213b20b2009-06-02 03:24:54 +000028 long long unsigned int id;
Jan Luebbe5c15c852008-12-27 15:59:25 +000029 char imsi[GSM_IMSI_LENGTH];
30 char tmsi[GSM_TMSI_LENGTH];
31 u_int16_t lac;
32 char name[GSM_NAME_LENGTH];
Jan Luebbe391d86e2008-12-27 22:33:34 +000033 char extension[GSM_EXTENSION_LENGTH];
Jan Luebbe6e2e5452008-12-27 16:47:55 +000034 int authorized;
Holger Freyther12aa50d2009-01-01 18:02:05 +000035
Harald Weltec2e302d2009-07-05 14:08:13 +020036 /* Every user can only have one equipment in use at any given
37 * point in time */
38 struct gsm_equipment equipment;
39
Holger Freyther862cfff2009-06-04 14:15:33 +000040 /* for internal management */
Holger Freyther12aa50d2009-01-01 18:02:05 +000041 int use_count;
42 struct llist_head entry;
Harald Weltef7c43522009-06-09 20:24:21 +000043
Holger Freyther04866d42009-03-31 04:35:19 +020044 /* pending requests */
Holger Freyther85a7b362009-04-18 13:48:55 +020045 int in_callback;
Holger Freyther04866d42009-03-31 04:35:19 +020046 struct llist_head requests;
Harald Welte52b1f982008-12-23 20:25:15 +000047};
48
Jan Luebbe5c15c852008-12-27 15:59:25 +000049enum gsm_subscriber_field {
50 GSM_SUBSCRIBER_IMSI,
51 GSM_SUBSCRIBER_TMSI,
Holger Freyther9c564b82009-02-09 23:39:20 +000052 GSM_SUBSCRIBER_EXTENSION,
Jan Luebbe5c15c852008-12-27 15:59:25 +000053};
Harald Welte52b1f982008-12-23 20:25:15 +000054
Holger Freyther4a49e772009-04-12 05:37:29 +000055enum gsm_subscriber_update_reason {
56 GSM_SUBSCRIBER_UPDATE_ATTACHED,
57 GSM_SUBSCRIBER_UPDATE_DETACHED,
Harald Weltec2e302d2009-07-05 14:08:13 +020058 GSM_SUBSCRIBER_UPDATE_EQUIPMENT,
Holger Freyther4a49e772009-04-12 05:37:29 +000059};
60
Holger Freyther12aa50d2009-01-01 18:02:05 +000061struct gsm_subscriber *subscr_get(struct gsm_subscriber *subscr);
62struct gsm_subscriber *subscr_put(struct gsm_subscriber *subscr);
Holger Freythera471a412009-01-04 03:47:05 +000063struct gsm_subscriber *subscr_get_by_tmsi(const char *tmsi);
64struct gsm_subscriber *subscr_get_by_imsi(const char *imsi);
Holger Freyther9c564b82009-02-09 23:39:20 +000065struct gsm_subscriber *subscr_get_by_extension(const char *ext);
Holger Freyther4a49e772009-04-12 05:37:29 +000066int subscr_update(struct gsm_subscriber *s, struct gsm_bts *bts, int reason);
Holger Freythera1f92f02009-04-12 05:37:52 +000067void subscr_put_channel(struct gsm_lchan *lchan);
Holger Freyther04866d42009-03-31 04:35:19 +020068void subscr_get_channel(struct gsm_subscriber *subscr,
69 struct gsm_network *network, int type,
70 gsm_cbfn *cbfn, void *param);
Holger Freythera471a412009-01-04 03:47:05 +000071
72/* internal */
73struct gsm_subscriber *subscr_alloc(void);
Holger Freyther12aa50d2009-01-01 18:02:05 +000074
Harald Welte52b1f982008-12-23 20:25:15 +000075#endif /* _GSM_SUBSCR_H */