Change in osmo-msc[master]: move ran_conn declarations to new ran_conn.h

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Neels Hofmeyr gerrit-no-reply at lists.osmocom.org
Fri Nov 30 02:45:48 UTC 2018


Neels Hofmeyr has uploaded this change for review. ( https://gerrit.osmocom.org/12032


Change subject: move ran_conn declarations to new ran_conn.h
......................................................................

move ran_conn declarations to new ran_conn.h

With the dawn of inter-BSC,MSC handover, adopting the MSC-A,-I,-T roles from
3GPP TS 49.008, the RAN connection shall soon be a neatly separated corner of
osmo-msc, so gravitate ran_conn decarations to files of matching name.

Also, the current chaos of API defined in files with mismatching/meaningless
names drives me crazy.

Change-Id: Ice31e6c43e46678538c65261f150c67e1d0845e5
---
M include/osmocom/msc/Makefile.am
M include/osmocom/msc/gsm_data.h
M include/osmocom/msc/gsm_subscriber.h
M include/osmocom/msc/msc_mgcp.h
M include/osmocom/msc/osmo_msc.h
A include/osmocom/msc/ran_conn.h
M include/osmocom/msc/vlr.h
M src/libmsc/rrlp.c
8 files changed, 242 insertions(+), 240 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-msc refs/changes/32/12032/1

diff --git a/include/osmocom/msc/Makefile.am b/include/osmocom/msc/Makefile.am
index 28e4b14..9fa58c7 100644
--- a/include/osmocom/msc/Makefile.am
+++ b/include/osmocom/msc/Makefile.am
@@ -22,6 +22,7 @@
 	msc_mgcp.h \
 	a_reset.h \
 	osmo_msc.h \
+	ran_conn.h \
 	rrlp.h \
 	signal.h \
 	silent_call.h \
diff --git a/include/osmocom/msc/gsm_data.h b/include/osmocom/msc/gsm_data.h
index 0028a3d..35ec752 100644
--- a/include/osmocom/msc/gsm_data.h
+++ b/include/osmocom/msc/gsm_data.h
@@ -12,7 +12,6 @@
 #include <osmocom/core/stats.h>
 #include <osmocom/gsm/gsm48.h>
 #include <osmocom/crypt/auth.h>
-#include <osmocom/sigtran/sccp_sap.h>
 
 #include <osmocom/msc/common.h>
 #include <osmocom/msc/common_cs.h>
@@ -34,7 +33,6 @@
 struct mncc_sock_state;
 struct vlr_instance;
 struct vlr_subscr;
-struct ranap_ue_conn_ctx;
 
 #define tmsi_from_string(str) strtoul(str, NULL, 10)
 
@@ -51,139 +49,6 @@
 };
 #define GSM_KEY_SEQ_INVAL	7	/* GSM 04.08 - 10.5.1.2 */
 
-enum ran_type {
-       RAN_UNKNOWN,
-       RAN_GERAN_A,	/* 2G / A-interface */
-       RAN_UTRAN_IU,	/* 3G / Iu-interface (IuCS or IuPS) */
-};
-
-extern const struct value_string ran_type_names[];
-static inline const char *ran_type_name(enum ran_type val)
-{	return get_value_string(ran_type_names, val);	}
-
-struct gsm_classmark {
-	bool classmark1_set;
-	struct gsm48_classmark1 classmark1;
-	uint8_t classmark2_len;
-	uint8_t classmark2[3];
-	uint8_t classmark3_len;
-	uint8_t classmark3[14]; /* if cm3 gets extended by spec, it will be truncated */
-};
-
-enum integrity_protection_state {
-	INTEGRITY_PROTECTION_NONE	= 0,
-	INTEGRITY_PROTECTION_IK		= 1,
-	INTEGRITY_PROTECTION_IK_CK	= 2,
-};
-
-enum complete_layer3_type {
-	COMPLETE_LAYER3_NONE,
-	COMPLETE_LAYER3_LU,
-	COMPLETE_LAYER3_CM_SERVICE_REQ,
-	COMPLETE_LAYER3_PAGING_RESP,
-};
-
-extern const struct value_string complete_layer3_type_names[];
-static inline const char *complete_layer3_type_name(enum complete_layer3_type val)
-{
-	return get_value_string(complete_layer3_type_names, val);
-}
-
-/* active radio connection of a mobile subscriber */
-struct ran_conn {
-	/* global linked list of ran_conn instances */
-	struct llist_head entry;
-
-	/* FSM instance to control the RAN connection's permissions and lifetime. */
-	struct osmo_fsm_inst *fi;
-	enum complete_layer3_type complete_layer3_type;
-
-	/* usage count. If this drops to zero, we start the release
-	 * towards A/Iu */
-	uint32_t use_count;
-	uint32_t use_tokens;
-
-	/* The MS has opened the conn with a CM Service Request, and we shall
-	 * keep it open for an actual request (or until timeout). */
-	bool received_cm_service_request;
-
-	/* libmsc/libvlr subscriber information (if available) */
-	struct vlr_subscr *vsub;
-
-	/* LU expiration handling */
-	uint8_t expire_timer_stopped;
-	/* SMS helpers for libmsc */
-	uint8_t next_rp_ref;
-
-	/* Are we part of a special "silent" call */
-	int silent_call;
-
-	/* back pointers */
-	struct gsm_network *network;
-
-	/* connected via 2G or 3G? */
-	enum ran_type via_ran;
-
-	uint16_t lac;
-
-	/* "Temporary" storage for the case the VLR asked for Cipher Mode Command, but the MSC still
-	 * wants to request a Classmark Update first. */
-	struct {
-		bool umts_aka;
-		bool retrieve_imeisv;
-	} geran_set_cipher_mode;
-
-	/* N(SD) expected in the received frame, per flow (TS 24.007 11.2.3.2.3.2.2) */
-	uint8_t n_sd_next[4];
-
-	struct {
-		struct mgcp_ctx *mgcp_ctx;
-		unsigned int mgcp_rtp_endpoint;
-
-		uint16_t local_port_ran;
-		char local_addr_ran[INET_ADDRSTRLEN];
-		uint16_t remote_port_ran;
-		char remote_addr_ran[INET_ADDRSTRLEN];
-		enum mgcp_codecs codec_ran;
-
-		uint16_t local_port_cn;
-		char local_addr_cn[INET_ADDRSTRLEN];
-		uint16_t remote_port_cn;
-		char remote_addr_cn[INET_ADDRSTRLEN];
-		enum mgcp_codecs codec_cn;
-	} rtp;
-
-	/* which Iu-CS connection, if any. */
-	struct {
-		struct ranap_ue_conn_ctx *ue_ctx;
-		uint8_t rab_id;
-		bool waiting_for_release_complete;
-	} iu;
-
-	struct {
-		/* A pointer to the SCCP user that handles
-		 * the SCCP connections for this subscriber
-		 * connection */
-		struct osmo_sccp_user *scu;
-
-		/* The address of the BSC that is associated
-		 * with this RAN connection */
-		struct osmo_sccp_addr bsc_addr;
-
-		/* The connection identifier that is used
-		 * to reference the SCCP connection that is
-		 * associated with this RAN connection */
-		uint32_t conn_id;
-
-		bool waiting_for_clear_complete;
-	} a;
-
-	/* Temporary storage for Classmark Information for times when a connection has no VLR subscriber
-	 * associated yet. It will get copied to the VLR subscriber upon msc_vlr_subscr_assoc(). */
-	struct gsm_classmark temporary_classmark;
-};
-
-
 enum {
 	MSC_CTR_LOC_UPDATE_TYPE_ATTACH,
 	MSC_CTR_LOC_UPDATE_TYPE_NORMAL,
diff --git a/include/osmocom/msc/gsm_subscriber.h b/include/osmocom/msc/gsm_subscriber.h
index ec2d3a4..428b889 100644
--- a/include/osmocom/msc/gsm_subscriber.h
+++ b/include/osmocom/msc/gsm_subscriber.h
@@ -8,6 +8,8 @@
 
 #include <osmocom/msc/gsm_data.h>
 
+struct ran_conn;
+
 #define GSM_NAME_LENGTH 160
 
 #define GSM_EXTENSION_LENGTH 15 /* MSISDN can only be 15 digits length */
diff --git a/include/osmocom/msc/msc_mgcp.h b/include/osmocom/msc/msc_mgcp.h
index ddd8837..9d8b01d 100644
--- a/include/osmocom/msc/msc_mgcp.h
+++ b/include/osmocom/msc/msc_mgcp.h
@@ -23,6 +23,8 @@
 #include <osmocom/mgcp_client/mgcp_client.h>
 #include <osmocom/msc/gsm_data.h>
 
+struct ran_conn;
+
 /* MGCP state handler context. This context information stores all information
  * to handle the direction of the RTP streams via MGCP. There is one instance
  * of this context struct per RAN connection.
diff --git a/include/osmocom/msc/osmo_msc.h b/include/osmocom/msc/osmo_msc.h
index d8b34d6..1512017 100644
--- a/include/osmocom/msc/osmo_msc.h
+++ b/include/osmocom/msc/osmo_msc.h
@@ -1,114 +1,14 @@
+#pragma once
+
 /* Routines for the MSC handling */
 
-#ifndef OSMO_MSC_H
-#define OSMO_MSC_H
-
-#include <osmocom/core/fsm.h>
-#include <osmocom/gsm/gsup.h>
-
-#include <osmocom/msc/gsm_data.h>
+struct gsm_network;
+struct vlr_subscr;
 
 #define MSC_HLR_REMOTE_IP_DEFAULT "127.0.0.1"
 #define MSC_HLR_REMOTE_PORT_DEFAULT OSMO_GSUP_PORT
 
-enum ran_conn_fsm_event {
-	/* Accepted the initial Complete Layer 3 (starting to evaluate Authentication and Ciphering) */
-	RAN_CONN_E_COMPLETE_LAYER_3,
-	/* Received Classmark Update, typically neede for Ciphering Mode Command */
-	RAN_CONN_E_CLASSMARK_UPDATE,
-	/* LU or Process Access FSM has determined that this conn is good */
-	RAN_CONN_E_ACCEPTED,
-	/* received first reply from MS in "real" CC, SMS, USSD communication */
-	RAN_CONN_E_COMMUNICATING,
-	/* Some async action has completed, check again whether all is done */
-	RAN_CONN_E_RELEASE_WHEN_UNUSED,
-	/* MS/BTS/BSC originated close request */
-	RAN_CONN_E_MO_CLOSE,
-	/* MSC originated close request, e.g. failed authentication */
-	RAN_CONN_E_CN_CLOSE,
-	/* The usage count for the conn has reached zero */
-	RAN_CONN_E_UNUSED,
-};
-
-enum ran_conn_fsm_state {
-	RAN_CONN_S_NEW,
-	RAN_CONN_S_AUTH_CIPH,
-	RAN_CONN_S_WAIT_CLASSMARK_UPDATE,
-	RAN_CONN_S_ACCEPTED,
-	RAN_CONN_S_COMMUNICATING,
-	RAN_CONN_S_RELEASING,
-	RAN_CONN_S_RELEASED,
-};
-
-struct ran_conn *ran_conn_alloc(struct gsm_network *network, enum ran_type via_ran, uint16_t lac);
-
-void ran_conn_update_id(struct ran_conn *conn, enum complete_layer3_type from, const char *id);
-char *ran_conn_get_conn_id(struct ran_conn *conn);
-
-void ran_conn_complete_layer_3(struct ran_conn *conn);
-
 int msc_vlr_alloc(struct gsm_network *net);
 int msc_vlr_start(struct gsm_network *net);
 
-void ran_conn_sapi_n_reject(struct ran_conn *conn, int dlci);
-int ran_conn_clear_request(struct ran_conn *conn, uint32_t cause);
-void ran_conn_compl_l3(struct ran_conn *conn,
-		       struct msgb *msg, uint16_t chosen_channel);
-void ran_conn_dtap(struct ran_conn *conn, struct msgb *msg);
-int ran_conn_classmark_request_then_cipher_mode_cmd(struct ran_conn *conn, bool umts_aka,
-					       bool retrieve_imeisv);
-int ran_conn_geran_set_cipher_mode(struct ran_conn *conn, bool umts_aka, bool retrieve_imeisv);
-void ran_conn_cipher_mode_compl(struct ran_conn *conn,
-			   struct msgb *msg, uint8_t alg_id);
-void ran_conn_rx_sec_mode_compl(struct ran_conn *conn);
-void ran_conn_classmark_chg(struct ran_conn *conn,
-		       const uint8_t *cm2, uint8_t cm2_len,
-		       const uint8_t *cm3, uint8_t cm3_len);
-void ran_conn_assign_fail(struct ran_conn *conn,
-		     uint8_t cause, uint8_t *rr_cause);
-
-void ran_conn_init(void);
-bool ran_conn_is_accepted(const struct ran_conn *conn);
-bool ran_conn_is_establishing_auth_ciph(const struct ran_conn *conn);
-void ran_conn_communicating(struct ran_conn *conn);
-void ran_conn_close(struct ran_conn *conn, uint32_t cause);
-void ran_conn_mo_close(struct ran_conn *conn, uint32_t cause);
-bool ran_conn_in_release(struct ran_conn *conn);
-
-void ran_conn_rx_bssmap_clear_complete(struct ran_conn *conn);
-void ran_conn_rx_iu_release_complete(struct ran_conn *conn);
-
-enum ran_conn_use {
-	RAN_CONN_USE_UNTRACKED = -1,
-	RAN_CONN_USE_COMPL_L3,
-	RAN_CONN_USE_DTAP,
-	RAN_CONN_USE_AUTH_CIPH,
-	RAN_CONN_USE_CM_SERVICE,
-	RAN_CONN_USE_TRANS_CC,
-	RAN_CONN_USE_TRANS_SMS,
-	RAN_CONN_USE_TRANS_NC_SS,
-	RAN_CONN_USE_SILENT_CALL,
-	RAN_CONN_USE_RELEASE,
-};
-
-extern const struct value_string ran_conn_use_names[];
-static inline const char *ran_conn_use_name(enum ran_conn_use val)
-{ return get_value_string(ran_conn_use_names, val); }
-
-#define ran_conn_get(conn, balance_token) \
-	_ran_conn_get(conn, balance_token, __FILE__, __LINE__)
-#define ran_conn_put(conn, balance_token) \
-	_ran_conn_put(conn, balance_token, __FILE__, __LINE__)
-struct ran_conn *
-_ran_conn_get(struct ran_conn *conn,
-		     enum ran_conn_use balance_token,
-		     const char *file, int line);
-void _ran_conn_put(struct ran_conn *conn,
-			  enum ran_conn_use balance_token,
-			  const char *file, int line);
-bool ran_conn_used_by(struct ran_conn *conn,
-			     enum ran_conn_use token);
-
 void msc_stop_paging(struct vlr_subscr *vsub);
-
-#endif
diff --git a/include/osmocom/msc/ran_conn.h b/include/osmocom/msc/ran_conn.h
new file mode 100644
index 0000000..10771b1
--- /dev/null
+++ b/include/osmocom/msc/ran_conn.h
@@ -0,0 +1,231 @@
+#pragma once
+/* MSC RAN connection implementation */
+
+#include <stdint.h>
+
+#include <osmocom/gsm/protocol/gsm_04_08.h>
+#include <osmocom/sigtran/sccp_sap.h>
+#include <osmocom/mgcp_client/mgcp_client.h>
+
+enum ran_type {
+       RAN_UNKNOWN,
+       RAN_GERAN_A,	/* 2G / A-interface */
+       RAN_UTRAN_IU,	/* 3G / Iu-interface (IuCS or IuPS) */
+};
+
+extern const struct value_string ran_type_names[];
+static inline const char *ran_type_name(enum ran_type val)
+{	return get_value_string(ran_type_names, val);	}
+
+enum ran_conn_fsm_event {
+	/* Accepted the initial Complete Layer 3 (starting to evaluate Authentication and Ciphering) */
+	RAN_CONN_E_COMPLETE_LAYER_3,
+	/* Received Classmark Update, typically neede for Ciphering Mode Command */
+	RAN_CONN_E_CLASSMARK_UPDATE,
+	/* LU or Process Access FSM has determined that this conn is good */
+	RAN_CONN_E_ACCEPTED,
+	/* received first reply from MS in "real" CC, SMS, USSD communication */
+	RAN_CONN_E_COMMUNICATING,
+	/* Some async action has completed, check again whether all is done */
+	RAN_CONN_E_RELEASE_WHEN_UNUSED,
+	/* MS/BTS/BSC originated close request */
+	RAN_CONN_E_MO_CLOSE,
+	/* MSC originated close request, e.g. failed authentication */
+	RAN_CONN_E_CN_CLOSE,
+	/* The usage count for the conn has reached zero */
+	RAN_CONN_E_UNUSED,
+};
+
+enum ran_conn_fsm_state {
+	RAN_CONN_S_NEW,
+	RAN_CONN_S_AUTH_CIPH,
+	RAN_CONN_S_WAIT_CLASSMARK_UPDATE,
+	RAN_CONN_S_ACCEPTED,
+	RAN_CONN_S_COMMUNICATING,
+	RAN_CONN_S_RELEASING,
+	RAN_CONN_S_RELEASED,
+};
+
+enum integrity_protection_state {
+	INTEGRITY_PROTECTION_NONE	= 0,
+	INTEGRITY_PROTECTION_IK		= 1,
+	INTEGRITY_PROTECTION_IK_CK	= 2,
+};
+
+enum complete_layer3_type {
+	COMPLETE_LAYER3_NONE,
+	COMPLETE_LAYER3_LU,
+	COMPLETE_LAYER3_CM_SERVICE_REQ,
+	COMPLETE_LAYER3_PAGING_RESP,
+};
+
+extern const struct value_string complete_layer3_type_names[];
+static inline const char *complete_layer3_type_name(enum complete_layer3_type val)
+{
+	return get_value_string(complete_layer3_type_names, val);
+}
+
+struct gsm_classmark {
+	bool classmark1_set;
+	struct gsm48_classmark1 classmark1;
+	uint8_t classmark2_len;
+	uint8_t classmark2[3];
+	uint8_t classmark3_len;
+	uint8_t classmark3[14]; /* if cm3 gets extended by spec, it will be truncated */
+};
+
+/* active radio connection of a mobile subscriber */
+struct ran_conn {
+	/* global linked list of ran_conn instances */
+	struct llist_head entry;
+
+	/* FSM instance to control the RAN connection's permissions and lifetime. */
+	struct osmo_fsm_inst *fi;
+	enum complete_layer3_type complete_layer3_type;
+
+	/* usage count. If this drops to zero, we start the release
+	 * towards A/Iu */
+	uint32_t use_count;
+	uint32_t use_tokens;
+
+	/* The MS has opened the conn with a CM Service Request, and we shall
+	 * keep it open for an actual request (or until timeout). */
+	bool received_cm_service_request;
+
+	/* libmsc/libvlr subscriber information (if available) */
+	struct vlr_subscr *vsub;
+
+	/* LU expiration handling */
+	uint8_t expire_timer_stopped;
+	/* SMS helpers for libmsc */
+	uint8_t next_rp_ref;
+
+	/* Are we part of a special "silent" call */
+	int silent_call;
+
+	/* back pointers */
+	struct gsm_network *network;
+
+	/* connected via 2G or 3G? */
+	enum ran_type via_ran;
+
+	uint16_t lac;
+
+	/* "Temporary" storage for the case the VLR asked for Cipher Mode Command, but the MSC still
+	 * wants to request a Classmark Update first. */
+	struct {
+		bool umts_aka;
+		bool retrieve_imeisv;
+	} geran_set_cipher_mode;
+
+	/* N(SD) expected in the received frame, per flow (TS 24.007 11.2.3.2.3.2.2) */
+	uint8_t n_sd_next[4];
+
+	struct {
+		struct mgcp_ctx *mgcp_ctx;
+		unsigned int mgcp_rtp_endpoint;
+
+		uint16_t local_port_ran;
+		char local_addr_ran[INET_ADDRSTRLEN];
+		uint16_t remote_port_ran;
+		char remote_addr_ran[INET_ADDRSTRLEN];
+		enum mgcp_codecs codec_ran;
+
+		uint16_t local_port_cn;
+		char local_addr_cn[INET_ADDRSTRLEN];
+		uint16_t remote_port_cn;
+		char remote_addr_cn[INET_ADDRSTRLEN];
+		enum mgcp_codecs codec_cn;
+	} rtp;
+
+	/* which Iu-CS connection, if any. */
+	struct {
+		struct ranap_ue_conn_ctx *ue_ctx;
+		uint8_t rab_id;
+		bool waiting_for_release_complete;
+	} iu;
+
+	struct {
+		/* A pointer to the SCCP user that handles
+		 * the SCCP connections for this subscriber
+		 * connection */
+		struct osmo_sccp_user *scu;
+
+		/* The address of the BSC that is associated
+		 * with this RAN connection */
+		struct osmo_sccp_addr bsc_addr;
+
+		/* The connection identifier that is used
+		 * to reference the SCCP connection that is
+		 * associated with this RAN connection */
+		uint32_t conn_id;
+
+		bool waiting_for_clear_complete;
+	} a;
+
+	/* Temporary storage for Classmark Information for times when a connection has no VLR subscriber
+	 * associated yet. It will get copied to the VLR subscriber upon msc_vlr_subscr_assoc(). */
+	struct gsm_classmark temporary_classmark;
+};
+
+struct ran_conn *ran_conn_alloc(struct gsm_network *network, enum ran_type via_ran, uint16_t lac);
+
+void ran_conn_update_id(struct ran_conn *conn, enum complete_layer3_type from, const char *id);
+char *ran_conn_get_conn_id(struct ran_conn *conn);
+
+void ran_conn_complete_layer_3(struct ran_conn *conn);
+
+void ran_conn_sapi_n_reject(struct ran_conn *conn, int dlci);
+int ran_conn_clear_request(struct ran_conn *conn, uint32_t cause);
+void ran_conn_compl_l3(struct ran_conn *conn,
+		       struct msgb *msg, uint16_t chosen_channel);
+void ran_conn_dtap(struct ran_conn *conn, struct msgb *msg);
+int ran_conn_classmark_request_then_cipher_mode_cmd(struct ran_conn *conn, bool umts_aka,
+					       bool retrieve_imeisv);
+int ran_conn_geran_set_cipher_mode(struct ran_conn *conn, bool umts_aka, bool retrieve_imeisv);
+void ran_conn_cipher_mode_compl(struct ran_conn *conn,
+			   struct msgb *msg, uint8_t alg_id);
+void ran_conn_rx_sec_mode_compl(struct ran_conn *conn);
+void ran_conn_classmark_chg(struct ran_conn *conn,
+		       const uint8_t *cm2, uint8_t cm2_len,
+		       const uint8_t *cm3, uint8_t cm3_len);
+void ran_conn_assign_fail(struct ran_conn *conn,
+		     uint8_t cause, uint8_t *rr_cause);
+
+void ran_conn_init(void);
+bool ran_conn_is_accepted(const struct ran_conn *conn);
+bool ran_conn_is_establishing_auth_ciph(const struct ran_conn *conn);
+void ran_conn_communicating(struct ran_conn *conn);
+void ran_conn_close(struct ran_conn *conn, uint32_t cause);
+void ran_conn_mo_close(struct ran_conn *conn, uint32_t cause);
+bool ran_conn_in_release(struct ran_conn *conn);
+
+void ran_conn_rx_bssmap_clear_complete(struct ran_conn *conn);
+void ran_conn_rx_iu_release_complete(struct ran_conn *conn);
+
+enum ran_conn_use {
+	RAN_CONN_USE_UNTRACKED = -1,
+	RAN_CONN_USE_COMPL_L3,
+	RAN_CONN_USE_DTAP,
+	RAN_CONN_USE_AUTH_CIPH,
+	RAN_CONN_USE_CM_SERVICE,
+	RAN_CONN_USE_TRANS_CC,
+	RAN_CONN_USE_TRANS_SMS,
+	RAN_CONN_USE_TRANS_NC_SS,
+	RAN_CONN_USE_SILENT_CALL,
+	RAN_CONN_USE_RELEASE,
+};
+
+extern const struct value_string ran_conn_use_names[];
+static inline const char *ran_conn_use_name(enum ran_conn_use val)
+{ return get_value_string(ran_conn_use_names, val); }
+
+#define ran_conn_get(conn, balance_token) \
+	_ran_conn_get(conn, balance_token, __FILE__, __LINE__)
+#define ran_conn_put(conn, balance_token) \
+	_ran_conn_put(conn, balance_token, __FILE__, __LINE__)
+struct ran_conn * _ran_conn_get(struct ran_conn *conn, enum ran_conn_use balance_token,
+				const char *file, int line);
+void _ran_conn_put(struct ran_conn *conn, enum ran_conn_use balance_token,
+		   const char *file, int line);
+bool ran_conn_used_by(struct ran_conn *conn, enum ran_conn_use token);
diff --git a/include/osmocom/msc/vlr.h b/include/osmocom/msc/vlr.h
index 6e16903..1168c32 100644
--- a/include/osmocom/msc/vlr.h
+++ b/include/osmocom/msc/vlr.h
@@ -9,7 +9,7 @@
 #include <osmocom/gsm/gsm23003.h>
 #include <osmocom/gsm/gsm0808.h>
 #include <osmocom/gsm/gsup.h>
-#include <osmocom/msc/gsm_data.h>
+#include <osmocom/msc/ran_conn.h>
 // for GSM_NAME_LENGTH
 #include <osmocom/msc/gsm_subscriber.h>
 #include <osmocom/gsupclient/gsup_client.h>
diff --git a/src/libmsc/rrlp.c b/src/libmsc/rrlp.c
index c0747cd..6ff30b7 100644
--- a/src/libmsc/rrlp.c
+++ b/src/libmsc/rrlp.c
@@ -27,6 +27,7 @@
 #include <osmocom/msc/signal.h>
 #include <osmocom/msc/debug.h>
 #include <osmocom/msc/gsm_subscriber.h>
+#include <osmocom/msc/ran_conn.h>
 
 /* RRLP msPositionReq, nsBased,
  *	Accuracy=60, Method=gps, ResponseTime=2, oneSet */

-- 
To view, visit https://gerrit.osmocom.org/12032
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-msc
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ice31e6c43e46678538c65261f150c67e1d0845e5
Gerrit-Change-Number: 12032
Gerrit-PatchSet: 1
Gerrit-Owner: Neels Hofmeyr <nhofmeyr at sysmocom.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20181130/475355cc/attachment.htm>


More information about the gerrit-log mailing list