aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorNeels Hofmeyr <neels@hofmeyr.de>2019-02-19 02:36:35 +0100
committerNeels Hofmeyr <neels@hofmeyr.de>2019-04-12 02:15:25 +0200
commit7c5346cd7005ad469702a2f74572b79de738fbbb (patch)
treef03af83b8c1047516e442521b71bba33c9e17a32 /include
parentd553c085e7fbe4b41234e821896e6e6bbcc1e201 (diff)
vlr_subscr: use osmo_use_count
Diffstat (limited to 'include')
-rw-r--r--include/osmocom/msc/db.h2
-rw-r--r--include/osmocom/msc/ran_conn.h2
-rw-r--r--include/osmocom/msc/sms_queue.h2
-rw-r--r--include/osmocom/msc/vlr.h43
-rw-r--r--include/osmocom/msc/vlr_sgs.h3
5 files changed, 36 insertions, 16 deletions
diff --git a/include/osmocom/msc/db.h b/include/osmocom/msc/db.h
index 6d07055eb..8d9ec41f2 100644
--- a/include/osmocom/msc/db.h
+++ b/include/osmocom/msc/db.h
@@ -24,6 +24,8 @@
#include "gsm_subscriber.h"
+#define VSUB_USE_SMS_RECEIVER "SMS-receiver"
+
struct gsm_network;
struct gsm_sms;
diff --git a/include/osmocom/msc/ran_conn.h b/include/osmocom/msc/ran_conn.h
index fca7ab656..0b99e252c 100644
--- a/include/osmocom/msc/ran_conn.h
+++ b/include/osmocom/msc/ran_conn.h
@@ -14,6 +14,8 @@
#define LOG_RAN_CONN_CAT(conn, subsys, level, fmt, args ...) \
LOGPFSMSL((conn)? (conn)->fi : NULL, subsys, level, fmt, ## args)
+#define VSUB_USE_CONN "conn"
+
enum ran_conn_fsm_event {
/* Accepted the initial Complete Layer 3 (starting to evaluate Authentication and Ciphering) */
RAN_CONN_E_COMPLETE_LAYER_3,
diff --git a/include/osmocom/msc/sms_queue.h b/include/osmocom/msc/sms_queue.h
index b5488fe8d..70cabe287 100644
--- a/include/osmocom/msc/sms_queue.h
+++ b/include/osmocom/msc/sms_queue.h
@@ -5,6 +5,8 @@ struct gsm_network;
struct gsm_sms_queue;
struct vty;
+#define VSUB_USE_SMS_PENDING "SMS-pending"
+
int sms_queue_start(struct gsm_network *, int in_flight);
int sms_queue_trigger(struct gsm_sms_queue *);
diff --git a/include/osmocom/msc/vlr.h b/include/osmocom/msc/vlr.h
index d2d59c702..92ebda1e6 100644
--- a/include/osmocom/msc/vlr.h
+++ b/include/osmocom/msc/vlr.h
@@ -4,6 +4,7 @@
#include <osmocom/core/linuxlist.h>
#include <osmocom/core/fsm.h>
#include <osmocom/core/logging.h>
+#include <osmocom/core/use_count.h>
#include <osmocom/gsm/protocol/gsm_23_003.h>
#include <osmocom/gsm/protocol/gsm_04_08_gprs.h>
#include <osmocom/gsm/gsm23003.h>
@@ -26,6 +27,8 @@ struct log_target;
#define VLR_SUBSCRIBER_NO_EXPIRATION 0
#define VLR_SUBSCRIBER_LU_EXPIRATION_INTERVAL 60 /* in seconds */
+#define VSUB_USE_ATTACHED "attached"
+
/* from 3s to 10s */
#define GSM_29002_TIMER_S 10
/* from 15s to 30s */
@@ -158,7 +161,8 @@ struct vlr_subscr {
bool ms_not_reachable_flag; /* 2.10.2 (MNRF) */
bool la_allowed;
- int use_count;
+ struct osmo_use_count use_count;
+ struct osmo_use_count_entry use_count_buf[10];
struct osmo_fsm_inst *lu_fsm;
struct osmo_fsm_inst *auth_fsm;
@@ -349,49 +353,56 @@ lu_compl_vlr_proc_start(struct osmo_fsm_inst *parent,
const char *vlr_subscr_name(const struct vlr_subscr *vsub);
const char *vlr_subscr_msisdn_or_name(const struct vlr_subscr *vsub);
-#define vlr_subscr_find_by_imsi(vlr, imsi) \
- _vlr_subscr_find_by_imsi(vlr, imsi, __FILE__, __LINE__)
-#define vlr_subscr_find_or_create_by_imsi(vlr, imsi, created) \
- _vlr_subscr_find_or_create_by_imsi(vlr, imsi, created, \
+#define vlr_subscr_find_by_imsi(vlr, imsi, USE) \
+ _vlr_subscr_find_by_imsi(vlr, imsi, USE, __FILE__, __LINE__)
+#define vlr_subscr_find_or_create_by_imsi(vlr, imsi, USE, created) \
+ _vlr_subscr_find_or_create_by_imsi(vlr, imsi, USE, created, \
__FILE__, __LINE__)
-#define vlr_subscr_find_by_tmsi(vlr, tmsi) \
- _vlr_subscr_find_by_tmsi(vlr, tmsi, __FILE__, __LINE__)
-#define vlr_subscr_find_or_create_by_tmsi(vlr, tmsi, created) \
- _vlr_subscr_find_or_create_by_tmsi(vlr, tmsi, created, \
+#define vlr_subscr_find_by_tmsi(vlr, tmsi, USE) \
+ _vlr_subscr_find_by_tmsi(vlr, tmsi, USE, __FILE__, __LINE__)
+#define vlr_subscr_find_or_create_by_tmsi(vlr, tmsi, USE, created) \
+ _vlr_subscr_find_or_create_by_tmsi(vlr, tmsi, USE, created, \
__FILE__, __LINE__)
-#define vlr_subscr_find_by_msisdn(vlr, msisdn) \
- _vlr_subscr_find_by_msisdn(vlr, msisdn, __FILE__, __LINE__)
+#define vlr_subscr_find_by_msisdn(vlr, msisdn, USE) \
+ _vlr_subscr_find_by_msisdn(vlr, msisdn, USE, __FILE__, __LINE__)
struct vlr_subscr *_vlr_subscr_find_by_imsi(struct vlr_instance *vlr,
const char *imsi,
+ const char *use,
const char *file, int line);
struct vlr_subscr *_vlr_subscr_find_or_create_by_imsi(struct vlr_instance *vlr,
const char *imsi,
+ const char *use,
bool *created,
const char *file,
int line);
struct vlr_subscr *_vlr_subscr_find_by_tmsi(struct vlr_instance *vlr,
uint32_t tmsi,
+ const char *use,
const char *file, int line);
struct vlr_subscr *_vlr_subscr_find_or_create_by_tmsi(struct vlr_instance *vlr,
uint32_t tmsi,
+ const char *use,
bool *created,
const char *file,
int line);
struct vlr_subscr *_vlr_subscr_find_by_msisdn(struct vlr_instance *vlr,
const char *msisdn,
+ const char *use,
const char *file, int line);
-#define vlr_subscr_get(sub) _vlr_subscr_get(sub, __FILE__, __LINE__)
-#define vlr_subscr_put(sub) _vlr_subscr_put(sub, __FILE__, __LINE__)
-struct vlr_subscr *_vlr_subscr_get(struct vlr_subscr *sub, const char *file, int line);
-struct vlr_subscr *_vlr_subscr_put(struct vlr_subscr *sub, const char *file, int line);
+#define vlr_subscr_get(VSUB, USE) vlr_subscr_get_src(VSUB, USE, __FILE__, __LINE__)
+#define vlr_subscr_put(VSUB, USE) vlr_subscr_put_src(VSUB, USE, __FILE__, __LINE__)
+
+#define vlr_subscr_get_src(VSUB, USE, SRCFILE, SRCLINE) \
+ OSMO_ASSERT(_osmo_use_count_get_put(&(VSUB)->use_count, USE, 1, SRCFILE, SRCLINE) == 0)
+#define vlr_subscr_put_src(VSUB, USE, SRCFILE, SRCLINE) \
+ OSMO_ASSERT(_osmo_use_count_get_put(&(VSUB)->use_count, USE, -1, SRCFILE, SRCLINE) == 0)
-struct vlr_subscr *vlr_subscr_alloc(struct vlr_instance *vlr);
void vlr_subscr_free(struct vlr_subscr *vsub);
int vlr_subscr_alloc_tmsi(struct vlr_subscr *vsub);
diff --git a/include/osmocom/msc/vlr_sgs.h b/include/osmocom/msc/vlr_sgs.h
index cc07807b1..1cbb771af 100644
--- a/include/osmocom/msc/vlr_sgs.h
+++ b/include/osmocom/msc/vlr_sgs.h
@@ -26,6 +26,9 @@ enum vlr_lu_type;
struct vlr_subscr;
struct vlr_instance;
+#define VSUB_USE_SGS "SGs"
+#define VSUB_USE_SGS_PAGING "SGs-paging"
+
/* See also 3GPP TS 29.118, chapter 4.2.2 States at the VLR */
enum sgs_ue_fsm_state {
SGS_UE_ST_NULL,