blob: 1ca79e2ae90737ad265d1057769526724d52da2d [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 Welte52b1f982008-12-23 20:25:15 +000014struct gsm_subscriber {
Holger Freyther213b20b2009-06-02 03:24:54 +000015 long long unsigned int id;
Jan Luebbe5c15c852008-12-27 15:59:25 +000016 char imsi[GSM_IMSI_LENGTH];
17 char tmsi[GSM_TMSI_LENGTH];
18 u_int16_t lac;
19 char name[GSM_NAME_LENGTH];
Jan Luebbe391d86e2008-12-27 22:33:34 +000020 char extension[GSM_EXTENSION_LENGTH];
Jan Luebbe6e2e5452008-12-27 16:47:55 +000021 int authorized;
Holger Freyther12aa50d2009-01-01 18:02:05 +000022
Holger Freyther862cfff2009-06-04 14:15:33 +000023 /* for internal management */
Holger Freyther12aa50d2009-01-01 18:02:05 +000024 int use_count;
25 struct llist_head entry;
Harald Weltef7c43522009-06-09 20:24:21 +000026
27 /* those are properties of the equipment, but they
28 * are applicable to the subscriber at the moment */
29 struct gsm48_classmark1 classmark1;
30 u_int8_t classmark2_len;
31 u_int8_t classmark2[3];
32 u_int8_t classmark3_len;
33 u_int8_t classmark3[14];
Harald Welte52b1f982008-12-23 20:25:15 +000034};
35
Jan Luebbe5c15c852008-12-27 15:59:25 +000036enum gsm_subscriber_field {
37 GSM_SUBSCRIBER_IMSI,
38 GSM_SUBSCRIBER_TMSI,
Holger Freyther9c564b82009-02-09 23:39:20 +000039 GSM_SUBSCRIBER_EXTENSION,
Jan Luebbe5c15c852008-12-27 15:59:25 +000040};
Harald Welte52b1f982008-12-23 20:25:15 +000041
Holger Freyther4a49e772009-04-12 05:37:29 +000042enum gsm_subscriber_update_reason {
43 GSM_SUBSCRIBER_UPDATE_ATTACHED,
44 GSM_SUBSCRIBER_UPDATE_DETACHED,
45};
46
Holger Freyther12aa50d2009-01-01 18:02:05 +000047struct gsm_subscriber *subscr_get(struct gsm_subscriber *subscr);
48struct gsm_subscriber *subscr_put(struct gsm_subscriber *subscr);
Holger Freythera471a412009-01-04 03:47:05 +000049struct gsm_subscriber *subscr_get_by_tmsi(const char *tmsi);
50struct gsm_subscriber *subscr_get_by_imsi(const char *imsi);
Holger Freyther9c564b82009-02-09 23:39:20 +000051struct gsm_subscriber *subscr_get_by_extension(const char *ext);
Holger Freyther4a49e772009-04-12 05:37:29 +000052int subscr_update(struct gsm_subscriber *s, struct gsm_bts *bts, int reason);
Holger Freythera1f92f02009-04-12 05:37:52 +000053void subscr_put_channel(struct gsm_lchan *lchan);
Holger Freythera471a412009-01-04 03:47:05 +000054
55/* internal */
56struct gsm_subscriber *subscr_alloc(void);
Holger Freyther12aa50d2009-01-01 18:02:05 +000057
Harald Welte52b1f982008-12-23 20:25:15 +000058#endif /* _GSM_SUBSCR_H */