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 <[email protected]>

Reply via email to