blob: 16e1037c0324dc4f3509769ef30a09d82131dc5a [file] [log] [blame]
Harald Welte52b1f982008-12-23 20:25:15 +00001#ifndef _GSM_SUBSCR_H
2#define _GSM_SUBSCR_H
3
Neels Hofmeyrab04fb22016-05-30 22:32:51 +02004#include <stdbool.h>
5
Pablo Neira Ayuso136f4532011-03-22 16:47:59 +01006#include <osmocom/core/linuxlist.h>
Harald Welted3fa84d2016-04-20 17:50:17 +02007#include <osmocom/gsm/protocol/gsm_23_003.h>
Harald Welte52b1f982008-12-23 20:25:15 +00008
Neels Hofmeyr90843962017-09-04 15:04:35 +02009#include <osmocom/msc/gsm_data.h>
Maxe6052c42016-06-30 10:25:49 +020010
Holger Hans Peter Freytherfa530cd2010-07-25 18:10:02 +080011#define GSM_NAME_LENGTH 160
Mike Haben2449b372009-10-26 20:36:34 +010012
13#define GSM_EXTENSION_LENGTH 15 /* MSISDN can only be 15 digits length */
14#define GSM_MIN_EXTEN 20000
15#define GSM_MAX_EXTEN 49999
Jan Luebbe5c15c852008-12-27 15:59:25 +000016
Jan Luebbeb0dfc312009-08-12 10:12:52 +020017#define GSM_SUBSCRIBER_FIRST_CONTACT 0x00000001
Jacob Erlbeck33b6dad2014-11-12 10:12:11 +010018/* gprs_sgsn.h defines additional flags including and above bit 16 (0x10000) */
Jan Luebbeb0dfc312009-08-12 10:12:52 +020019
Holger Hans Peter Freytherc63f6f12013-07-27 21:07:57 +020020#define GSM_SUBSCRIBER_NO_EXPIRATION 0x0
21
Jan Luebbe5c15c852008-12-27 15:59:25 +000022enum gsm_subscriber_field {
23 GSM_SUBSCRIBER_IMSI,
24 GSM_SUBSCRIBER_TMSI,
Holger Freyther9c564b82009-02-09 23:39:20 +000025 GSM_SUBSCRIBER_EXTENSION,
Harald Weltebe3e3782009-07-05 14:06:41 +020026 GSM_SUBSCRIBER_ID,
Jan Luebbe5c15c852008-12-27 15:59:25 +000027};
Harald Welte52b1f982008-12-23 20:25:15 +000028
Holger Freyther4a49e772009-04-12 05:37:29 +000029enum gsm_subscriber_update_reason {
30 GSM_SUBSCRIBER_UPDATE_ATTACHED,
31 GSM_SUBSCRIBER_UPDATE_DETACHED,
Harald Weltec2e302d2009-07-05 14:08:13 +020032 GSM_SUBSCRIBER_UPDATE_EQUIPMENT,
Holger Freyther4a49e772009-04-12 05:37:29 +000033};
34
Neels Hofmeyre2f24d52017-05-08 15:12:20 +020035/*
36 * Struct for pending channel requests. This is managed in the
37 * llist_head requests of each subscriber. The reference counting
38 * should work in such a way that a subscriber with a pending request
39 * remains in memory.
40 */
41struct subscr_request {
42 struct llist_head entry;
43
Neels Hofmeyr84da6b12016-05-20 21:59:55 +020044 /* human readable label to be able to log pending request kinds */
45 const char *label;
46
Neels Hofmeyre2f24d52017-05-08 15:12:20 +020047 /* the callback data */
48 gsm_cbfn *cbfn;
49 void *param;
50};
51
52int subscr_update(struct vlr_subscr *vsub, int reason);
Holger Hans Peter Freytherf694d5f2010-12-22 14:31:34 +010053
Holger Hans Peter Freytherd6d7aff2015-04-06 12:03:45 +020054/*
55 * Paging handling with authentication
56 */
Neels Hofmeyre2f24d52017-05-08 15:12:20 +020057struct subscr_request *subscr_request_conn(struct vlr_subscr *vsub,
Neels Hofmeyr84da6b12016-05-20 21:59:55 +020058 gsm_cbfn *cbfn, void *param,
59 const char *label);
Neels Hofmeyre2f24d52017-05-08 15:12:20 +020060
Holger Hans Peter Freytherd6d7aff2015-04-06 12:03:45 +020061void subscr_remove_request(struct subscr_request *req);
Neels Hofmeyr84da6b12016-05-20 21:59:55 +020062int subscr_rx_paging_response(struct msgb *msg,
63 struct gsm_subscriber_connection *conn);
Holger Hans Peter Freytherd6d7aff2015-04-06 12:03:45 +020064
Neels Hofmeyrfacd57a2017-12-15 03:48:48 +010065void subscr_paging_cancel(struct vlr_subscr *vsub, enum gsm_paging_event event);
Harald Welte2483f1b2016-06-19 18:06:02 +020066int subscr_paging_dispatch(unsigned int hooknum, unsigned int event,
67 struct msgb *msg, void *data, void *param);
Holger Freyther12aa50d2009-01-01 18:02:05 +000068
Harald Welted35038d2018-01-25 00:07:33 +010069/* Find an allocated channel for a specified subscriber */
70struct gsm_subscriber_connection *connection_for_subscr(struct vlr_subscr *vsub);
71
Harald Welte52b1f982008-12-23 20:25:15 +000072#endif /* _GSM_SUBSCR_H */