blob: 6fffafdb3245e07f34fab1abe46934b24d9a8ef4 [file] [log] [blame]
Neels Hofmeyr6d804b12017-02-18 22:20:46 +01001/* GSM subscriber details for use in BSC land */
2
3#pragma once
4
5#include <stdint.h>
6
7#include <osmocom/core/linuxlist.h>
Neels Hofmeyr86a1dca2020-09-15 01:03:58 +00008#include <osmocom/core/use_count.h>
Neels Hofmeyr6d804b12017-02-18 22:20:46 +01009#include <osmocom/gsm/protocol/gsm_23_003.h>
Neels Hofmeyr2c612452020-05-26 03:33:24 +020010#include <osmocom/gsm/gsm48.h>
Neels Hofmeyr6d804b12017-02-18 22:20:46 +010011
12struct log_target;
13
14struct bsc_subscr {
15 struct llist_head entry;
Neels Hofmeyr86a1dca2020-09-15 01:03:58 +000016 struct osmo_use_count use_count;
Neels Hofmeyr6d804b12017-02-18 22:20:46 +010017
18 char imsi[GSM23003_IMSI_MAX_DIGITS+1];
19 uint32_t tmsi;
Neels Hofmeyr6d804b12017-02-18 22:20:46 +010020};
21
22const char *bsc_subscr_name(struct bsc_subscr *bsub);
Neels Hofmeyr31f525e2018-05-14 18:14:15 +020023const char *bsc_subscr_id(struct bsc_subscr *bsub);
Neels Hofmeyr6d804b12017-02-18 22:20:46 +010024
25struct bsc_subscr *bsc_subscr_find_or_create_by_imsi(struct llist_head *list,
Neels Hofmeyr86a1dca2020-09-15 01:03:58 +000026 const char *imsi,
27 const char *use_token);
Neels Hofmeyr6d804b12017-02-18 22:20:46 +010028struct bsc_subscr *bsc_subscr_find_or_create_by_tmsi(struct llist_head *list,
Neels Hofmeyr86a1dca2020-09-15 01:03:58 +000029 uint32_t tmsi,
30 const char *use_token);
31struct bsc_subscr *bsc_subscr_find_or_create_by_mi(struct llist_head *list, const struct osmo_mobile_identity *mi,
32 const char *use_token);
Neels Hofmeyr6d804b12017-02-18 22:20:46 +010033
34struct bsc_subscr *bsc_subscr_find_by_imsi(struct llist_head *list,
Neels Hofmeyr86a1dca2020-09-15 01:03:58 +000035 const char *imsi,
36 const char *use_token);
Neels Hofmeyr6d804b12017-02-18 22:20:46 +010037struct bsc_subscr *bsc_subscr_find_by_tmsi(struct llist_head *list,
Neels Hofmeyr86a1dca2020-09-15 01:03:58 +000038 uint32_t tmsi,
39 const char *use_token);
40struct bsc_subscr *bsc_subscr_find_by_mi(struct llist_head *list, const struct osmo_mobile_identity *mi,
41 const char *use_token);
Neels Hofmeyr6d804b12017-02-18 22:20:46 +010042
43void bsc_subscr_set_imsi(struct bsc_subscr *bsub, const char *imsi);
44
Neels Hofmeyr86a1dca2020-09-15 01:03:58 +000045#define bsc_subscr_get(bsc_subscr, use) \
46 OSMO_ASSERT(osmo_use_count_get_put(&(bsc_subscr)->use_count, use, 1) == 0)
47#define bsc_subscr_put(bsc_subscr, use) \
48 OSMO_ASSERT(osmo_use_count_get_put(&(bsc_subscr)->use_count, use, -1) == 0)
Neels Hofmeyr6d804b12017-02-18 22:20:46 +010049
50void log_set_filter_bsc_subscr(struct log_target *target,
51 struct bsc_subscr *bsub);