blob: 170e5236fc847fb46b33ed59be85548ec221f6a8 [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 {
Jan Luebbefac25fc2008-12-27 18:04:34 +000015 u_int64_t 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
23 /* for internal management */
24 int use_count;
25 struct llist_head entry;
Holger Freyther4a49e772009-04-12 05:37:29 +000026 struct gsm_bts *current_bts;
Harald Welte52b1f982008-12-23 20:25:15 +000027};
28
Jan Luebbe5c15c852008-12-27 15:59:25 +000029enum gsm_subscriber_field {
30 GSM_SUBSCRIBER_IMSI,
31 GSM_SUBSCRIBER_TMSI,
Holger Freyther9c564b82009-02-09 23:39:20 +000032 GSM_SUBSCRIBER_EXTENSION,
Jan Luebbe5c15c852008-12-27 15:59:25 +000033};
Harald Welte52b1f982008-12-23 20:25:15 +000034
Holger Freyther4a49e772009-04-12 05:37:29 +000035enum gsm_subscriber_update_reason {
36 GSM_SUBSCRIBER_UPDATE_ATTACHED,
37 GSM_SUBSCRIBER_UPDATE_DETACHED,
38};
39
Holger Freyther12aa50d2009-01-01 18:02:05 +000040struct gsm_subscriber *subscr_get(struct gsm_subscriber *subscr);
41struct gsm_subscriber *subscr_put(struct gsm_subscriber *subscr);
Holger Freythera471a412009-01-04 03:47:05 +000042struct gsm_subscriber *subscr_get_by_tmsi(const char *tmsi);
43struct gsm_subscriber *subscr_get_by_imsi(const char *imsi);
Holger Freyther9c564b82009-02-09 23:39:20 +000044struct gsm_subscriber *subscr_get_by_extension(const char *ext);
Holger Freyther4a49e772009-04-12 05:37:29 +000045int subscr_update(struct gsm_subscriber *s, struct gsm_bts *bts, int reason);
Holger Freythera471a412009-01-04 03:47:05 +000046
47/* internal */
48struct gsm_subscriber *subscr_alloc(void);
Holger Freyther12aa50d2009-01-01 18:02:05 +000049
Harald Welte52b1f982008-12-23 20:25:15 +000050#endif /* _GSM_SUBSCR_H */