[PATCH] osmo-msc[master]: Massive removal of unused code/structs/headers

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/.

Harald Welte gerrit-no-reply at lists.osmocom.org
Wed Jan 24 23:10:10 UTC 2018


Review at  https://gerrit.osmocom.org/6051

Massive removal of unused code/structs/headers

osmo-msc still had large amounts of dead code that came along from
openbsc.git.  This commit removes a lot of it, mostly stuff relevant
only to the BSC side of things (or even GPRS).

Change-Id: I247def85da2dc3ec461389fb74414a0d964e7e3c
Related: OS#2528
---
M include/osmocom/msc/Makefile.am
D include/osmocom/msc/abis_nm.h
D include/osmocom/msc/abis_om2000.h
D include/osmocom/msc/abis_rsl.h
D include/osmocom/msc/arfcn_range_encode.h
M include/osmocom/msc/bsc_api.h
D include/osmocom/msc/bsc_msg_filter.h
D include/osmocom/msc/chan_alloc.h
D include/osmocom/msc/common_bsc.h
D include/osmocom/msc/crc24.h
D include/osmocom/msc/e1_config.h
M include/osmocom/msc/gsm_04_08.h
M include/osmocom/msc/gsm_data.h
M include/osmocom/msc/gsm_data_shared.h
M include/osmocom/msc/gsm_subscriber.h
D include/osmocom/msc/handover.h
D include/osmocom/msc/handover_decision.h
D include/osmocom/msc/meas_rep.h
D include/osmocom/msc/misdn.h
D include/osmocom/msc/network_listen.h
D include/osmocom/msc/osmo_bsc.h
D include/osmocom/msc/osmo_bsc_reset.h
D include/osmocom/msc/osmo_bsc_sigtran.h
D include/osmocom/msc/osmux.h
D include/osmocom/msc/rs232.h
D include/osmocom/msc/rtp_proxy.h
M include/osmocom/msc/signal.h
D include/osmocom/msc/slhc.h
D include/osmocom/msc/system_information.h
D include/osmocom/msc/trau_mux.h
D include/osmocom/msc/trau_upqueue.h
M include/osmocom/msc/vty.h
M src/libcommon-cs/a_reset.c
M src/libcommon/Makefile.am
M src/libcommon/common_vty.c
M src/libcommon/gsm_data.c
D src/libcommon/gsm_data_shared.c
M src/libcommon/talloc_ctx.c
M src/libmsc/gsm_04_08.c
M src/libmsc/gsm_04_11.c
M src/libmsc/gsm_04_14.c
M src/libmsc/gsm_subscriber.c
M src/libmsc/mncc.c
M src/libmsc/mncc_builtin.c
M src/libmsc/rrlp.c
M src/libmsc/silent_call.c
M src/libmsc/smpp_openbsc.c
M src/libmsc/sms_queue.c
M src/libmsc/vty_interface_layer3.c
M src/osmo-msc/msc_main.c
M tests/msc_vlr/msc_vlr_test_rest.c
M tests/msc_vlr/msc_vlr_tests.c
52 files changed, 7 insertions(+), 3,550 deletions(-)


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

diff --git a/include/osmocom/msc/Makefile.am b/include/osmocom/msc/Makefile.am
index 82e8207..cb19186 100644
--- a/include/osmocom/msc/Makefile.am
+++ b/include/osmocom/msc/Makefile.am
@@ -1,24 +1,15 @@
 noinst_HEADERS = \
-	abis_nm.h \
-	abis_om2000.h \
-	abis_rsl.h \
 	a_iface.h \
 	a_iface_bssap.h \
-	arfcn_range_encode.h \
 	auth.h \
 	bsc_api.h \
 	bsc_msc.h \
-	bsc_msg_filter.h \
 	bsc_rll.h \
-	chan_alloc.h \
 	common.h \
-	common_bsc.h \
 	common_cs.h \
-	crc24.h \
 	ctrl.h \
 	db.h \
 	debug.h \
-	e1_config.h \
 	gsm_04_08.h \
 	gsm_04_11.h \
 	gsm_04_14.h \
@@ -27,39 +18,25 @@
 	gsm_data_shared.h \
 	gsm_subscriber.h \
 	gsup_client.h \
-	handover.h \
-	handover_decision.h \
 	ipaccess.h \
 	iucs.h \
 	iucs_ranap.h \
 	iu_dummy.h \
-	meas_rep.h \
-	misdn.h \
 	mncc.h \
 	mncc_int.h \
 	msc_ifaces.h \
-	network_listen.h \
 	oap_client.h \
 	openbscdefines.h \
-	osmo_bsc.h \
 	a_reset.h \
 	osmo_msc.h \
-	osmo_bsc_sigtran.h \
 	bsc_msc_data.h \
-	osmux.h \
 	rrlp.h \
-	rs232.h \
-	rtp_proxy.h \
 	signal.h \
 	silent_call.h \
-	slhc.h \
 	smpp.h \
 	sms_queue.h \
 	socket.h \
-	system_information.h \
 	transaction.h \
-	trau_mux.h \
-	trau_upqueue.h \
 	ussd.h \
 	vlr.h \
 	vty.h \
diff --git a/include/osmocom/msc/abis_nm.h b/include/osmocom/msc/abis_nm.h
deleted file mode 100644
index 2581962..0000000
--- a/include/osmocom/msc/abis_nm.h
+++ /dev/null
@@ -1,180 +0,0 @@
-/* GSM Network Management messages on the A-bis interface 
- * 3GPP TS 12.21 version 8.0.0 Release 1999 / ETSI TS 100 623 V8.0.0 */
-
-/* (C) 2008-2009 by Harald Welte <laforge at gnumonks.org>
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#ifndef _NM_H
-#define _NM_H
-
-#include <osmocom/gsm/tlv.h>
-#include <osmocom/gsm/abis_nm.h>
-#include <osmocom/gsm/protocol/gsm_12_21.h>
-
-#include <osmocom/msc/gsm_data.h>
-
-/* max number of attributes represented as 3GPP TS 52.021 §9.4.62 SW Description array */
-#define MAX_BTS_ATTR 5
-
-struct cell_global_id {
-	uint16_t mcc;
-	uint16_t mnc;
-	uint16_t lac;
-	uint16_t ci;
-};
-
-/* The BCCH info from an ip.access test, in host byte order
- * and already parsed... */
-struct ipac_bcch_info {
-	struct llist_head list;
-
-	uint16_t info_type;
-	uint8_t freq_qual;
-	uint16_t arfcn;
-	uint8_t rx_lev;
-	uint8_t rx_qual;
-	int16_t freq_err;
-	uint16_t frame_offset;
-	uint32_t frame_nr_offset;
-	uint8_t bsic;
-	struct cell_global_id cgi;
-	uint8_t ba_list_si2[16];
-	uint8_t ba_list_si2bis[16];
-	uint8_t ba_list_si2ter[16];
-	uint8_t ca_list_si1[16];
-};
-
-/* PUBLIC */
-
-struct msgb;
-
-struct abis_nm_cfg {
-	/* callback for unidirectional reports */
-	int (*report_cb)(struct msgb *,
-			 struct abis_om_fom_hdr *);
-	/* callback for software activate requests from BTS */
-	int (*sw_act_req)(struct msgb *);
-};
-
-extern int abis_nm_rcvmsg(struct msgb *msg);
-
-int abis_nm_tlv_parse(struct tlv_parsed *tp, struct gsm_bts *bts, const uint8_t *buf, int len);
-int abis_nm_rx(struct msgb *msg);
-int abis_nm_opstart(struct gsm_bts *bts, uint8_t obj_class, uint8_t i0, uint8_t i1, uint8_t i2);
-int abis_nm_chg_adm_state(struct gsm_bts *bts, uint8_t obj_class, uint8_t i0,
-			  uint8_t i1, uint8_t i2, enum abis_nm_adm_state adm_state);
-int abis_nm_establish_tei(struct gsm_bts *bts, uint8_t trx_nr,
-			  uint8_t e1_port, uint8_t e1_timeslot, uint8_t e1_subslot,
-			  uint8_t tei);
-int abis_nm_conn_terr_sign(struct gsm_bts_trx *trx,
-			   uint8_t e1_port, uint8_t e1_timeslot, uint8_t e1_subslot);
-int abis_nm_conn_terr_traf(struct gsm_bts_trx_ts *ts,
-			   uint8_t e1_port, uint8_t e1_timeslot,
-			   uint8_t e1_subslot);
-int abis_nm_get_attr(struct gsm_bts *bts, uint8_t obj_class,
-		     uint8_t bts_nr, uint8_t trx_nr, uint8_t ts_nr,
-		     const uint8_t *attr, uint8_t attr_len);
-int abis_nm_set_bts_attr(struct gsm_bts *bts, uint8_t *attr, int attr_len);
-int abis_nm_set_radio_attr(struct gsm_bts_trx *trx, uint8_t *attr, int attr_len);
-int abis_nm_set_channel_attr(struct gsm_bts_trx_ts *ts, uint8_t chan_comb);
-int abis_nm_sw_act_req_ack(struct gsm_bts *bts, uint8_t obj_class, uint8_t i1,
-			uint8_t i2, uint8_t i3, int nack, uint8_t *attr, int att_len);
-int abis_nm_raw_msg(struct gsm_bts *bts, int len, uint8_t *msg);
-int abis_nm_event_reports(struct gsm_bts *bts, int on);
-int abis_nm_reset_resource(struct gsm_bts *bts);
-int abis_nm_software_load(struct gsm_bts *bts, int trx_nr, const char *fname,
-			  uint8_t win_size, int forced,
-			  gsm_cbfn *cbfn, void *cb_data);
-int abis_nm_software_load_status(struct gsm_bts *bts);
-int abis_nm_software_activate(struct gsm_bts *bts, const char *fname,
-			      gsm_cbfn *cbfn, void *cb_data);
-
-int abis_nm_conn_mdrop_link(struct gsm_bts *bts, uint8_t e1_port0, uint8_t ts0,
-			    uint8_t e1_port1, uint8_t ts1);
-
-int abis_nm_perform_test(struct gsm_bts *bts, uint8_t obj_class,
-			 uint8_t bts_nr, uint8_t trx_nr, uint8_t ts_nr,
-			 uint8_t test_nr, uint8_t auton_report, struct msgb *msg);
-
-/* Siemens / BS-11 specific */
-int abis_nm_bs11_reset_resource(struct gsm_bts *bts);
-int abis_nm_bs11_db_transmission(struct gsm_bts *bts, int begin);
-int abis_nm_bs11_create_object(struct gsm_bts *bts, enum abis_bs11_objtype type,
-			  uint8_t idx, uint8_t attr_len, const uint8_t *attr);
-int abis_nm_bs11_create_envaBTSE(struct gsm_bts *bts, uint8_t idx);
-int abis_nm_bs11_create_bport(struct gsm_bts *bts, uint8_t idx);
-int abis_nm_bs11_delete_object(struct gsm_bts *bts,
-				enum abis_bs11_objtype type, uint8_t idx);
-int abis_nm_bs11_delete_bport(struct gsm_bts *bts, uint8_t idx);
-int abis_nm_bs11_conn_oml_tei(struct gsm_bts *bts, uint8_t e1_port,
-			  uint8_t e1_timeslot, uint8_t e1_subslot, uint8_t tei);
-int abis_nm_bs11_get_oml_tei_ts(struct gsm_bts *bts);
-int abis_nm_bs11_get_serno(struct gsm_bts *bts);
-int abis_nm_bs11_set_trx_power(struct gsm_bts_trx *trx, uint8_t level);
-int abis_nm_bs11_get_trx_power(struct gsm_bts_trx *trx);
-int abis_nm_bs11_logon(struct gsm_bts *bts, uint8_t level, const char *name, int on);
-int abis_nm_bs11_factory_logon(struct gsm_bts *bts, int on);
-int abis_nm_bs11_infield_logon(struct gsm_bts *bts, int on);
-int abis_nm_bs11_set_trx1_pw(struct gsm_bts *bts, const char *password);
-int abis_nm_bs11_set_pll_locked(struct gsm_bts *bts, int locked);
-int abis_nm_bs11_get_pll_mode(struct gsm_bts *bts);
-int abis_nm_bs11_set_pll(struct gsm_bts *bts, int value);
-int abis_nm_bs11_get_cclk(struct gsm_bts *bts);
-int abis_nm_bs11_get_state(struct gsm_bts *bts);
-int abis_nm_bs11_load_swl(struct gsm_bts *bts, const char *fname,
-			  uint8_t win_size, int forced, gsm_cbfn *cbfn);
-int abis_nm_bs11_set_ext_time(struct gsm_bts *bts);
-int abis_nm_bs11_get_bport_line_cfg(struct gsm_bts *bts, uint8_t bport);
-int abis_nm_bs11_set_bport_line_cfg(struct gsm_bts *bts, uint8_t bport, enum abis_bs11_line_cfg line_cfg);
-int abis_nm_bs11_bsc_disconnect(struct gsm_bts *bts, int reconnect);
-int abis_nm_bs11_restart(struct gsm_bts *bts);
-
-/* ip.access nanoBTS specific commands */
-int abis_nm_ipaccess_msg(struct gsm_bts *bts, uint8_t msg_type,
-			 uint8_t obj_class, uint8_t bts_nr,
-			 uint8_t trx_nr, uint8_t ts_nr,
-			 uint8_t *attr, int attr_len);
-int abis_nm_ipaccess_set_nvattr(struct gsm_bts_trx *trx, uint8_t *attr,
-				int attr_len);
-int abis_nm_ipaccess_restart(struct gsm_bts_trx *trx);
-int abis_nm_ipaccess_set_attr(struct gsm_bts *bts, uint8_t obj_class,
-				uint8_t bts_nr, uint8_t trx_nr, uint8_t ts_nr,
-				uint8_t *attr, uint8_t attr_len);
-int abis_nm_ipaccess_rsl_connect(struct gsm_bts_trx *trx, 
-				 uint32_t ip, uint16_t port, uint8_t stream);
-void abis_nm_ipaccess_cgi(uint8_t *buf, struct gsm_bts *bts);
-int ipac_parse_bcch_info(struct ipac_bcch_info *binf, uint8_t *buf);
-const char *ipacc_testres_name(uint8_t res);
-
-/* Functions calling into other code parts */
-int nm_is_running(struct gsm_nm_state *s);
-
-int abis_nm_vty_init(void);
-
-void abis_nm_clear_queue(struct gsm_bts *bts);
-
-int _abis_nm_sendmsg(struct msgb *msg);
-
-void abis_nm_queue_send_next(struct gsm_bts *bts);	/* for bs11_config. */
-
-int abis_nm_select_newest_sw(const struct abis_nm_sw_desc *sw, const size_t len);
-
-/* Helper functions for updating attributes */
-int abis_nm_update_max_power_red(struct gsm_bts_trx *trx);
-
-#endif /* _NM_H */
diff --git a/include/osmocom/msc/abis_om2000.h b/include/osmocom/msc/abis_om2000.h
deleted file mode 100644
index b093a03..0000000
--- a/include/osmocom/msc/abis_om2000.h
+++ /dev/null
@@ -1,129 +0,0 @@
-#ifndef OPENBSC_ABIS_OM2K_H
-#define OPENBSC_ABIS_OM2K_H
-/* Ericsson RBS 2xxx GSM O&M (OM2000) messages on the A-bis interface
- * implemented based on protocol trace analysis, no formal documentation */
-
-/* (C) 2010-2011 by Harald Welte <laforge at gnumonks.org>
- *
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-enum abis_om2k_mo_cls {
-	OM2K_MO_CLS_TRXC			= 0x01,
-	OM2K_MO_CLS_TS				= 0x03,
-	OM2K_MO_CLS_TF				= 0x04,
-	OM2K_MO_CLS_IS				= 0x05,
-	OM2K_MO_CLS_CON				= 0x06,
-	OM2K_MO_CLS_DP				= 0x07,
-	OM2K_MO_CLS_CF				= 0x0a,
-	OM2K_MO_CLS_TX				= 0x0b,
-	OM2K_MO_CLS_RX				= 0x0c,
-};
-
-enum om2k_mo_state {
-	OM2K_MO_S_RESET = 0,
-	OM2K_MO_S_STARTED,
-	OM2K_MO_S_ENABLED,
-	OM2K_MO_S_DISABLED,
-};
-
-/* on-wire format for IS conn group */
-struct om2k_is_conn_grp {
-	uint16_t icp1;
-	uint16_t icp2;
-	uint8_t cont_idx;
-} __attribute__ ((packed));
-
-/* internal data formant for IS conn group */
-struct is_conn_group {
-	struct llist_head list;
-	uint16_t icp1;
-	uint16_t icp2;
-	uint8_t ci;
-};
-
-/* on-wire format for CON Path */
-struct om2k_con_path {
-	uint16_t ccp;
-	uint8_t ci;
-	uint8_t tag;
-	uint8_t tei;
-} __attribute__ ((packed));
-
-/* internal data format for CON group */
-struct con_group {
-	/* links list of CON groups in BTS */
-	struct llist_head list;
-	struct gsm_bts *bts;
-	/* CON Group ID */
-	uint8_t cg;
-	/* list of CON paths in this group */
-	struct llist_head paths;
-};
-
-/* internal data format for CON path */
-struct con_path {
-	/* links with con_group.paths */
-	struct llist_head list;
-	/* CON Connection Point */
-	uint16_t ccp;
-	/* Contiguity Index */
-	uint8_t ci;
-	/* Tag */
-	uint8_t tag;
-	/* TEI */
-	uint8_t tei;
-};
-
-extern const struct abis_om2k_mo om2k_mo_cf;
-extern const struct abis_om2k_mo om2k_mo_is;
-extern const struct abis_om2k_mo om2k_mo_con;
-extern const struct abis_om2k_mo om2k_mo_tf;
-
-extern const struct value_string om2k_mo_class_short_vals[];
-
-int abis_om2k_rcvmsg(struct msgb *msg);
-
-extern const struct abis_om2k_mo om2k_mo_cf;
-
-int abis_om2k_tx_reset_cmd(struct gsm_bts *bts, const struct abis_om2k_mo *mo);
-int abis_om2k_tx_start_req(struct gsm_bts *bts, const struct abis_om2k_mo *mo);
-int abis_om2k_tx_status_req(struct gsm_bts *bts, const struct abis_om2k_mo *mo);
-int abis_om2k_tx_connect_cmd(struct gsm_bts *bts, const struct abis_om2k_mo *mo);
-int abis_om2k_tx_disconnect_cmd(struct gsm_bts *bts, const struct abis_om2k_mo *mo);
-int abis_om2k_tx_enable_req(struct gsm_bts *bts, const struct abis_om2k_mo *mo);
-int abis_om2k_tx_disable_req(struct gsm_bts *bts, const struct abis_om2k_mo *mo);
-int abis_om2k_tx_test_req(struct gsm_bts *bts, const struct abis_om2k_mo *mo);
-int abis_om2k_tx_op_info(struct gsm_bts *bts, const struct abis_om2k_mo *mo,
-			 uint8_t operational);
-int abis_om2k_tx_cap_req(struct gsm_bts *bts, const struct abis_om2k_mo *mo);
-int abis_om2k_tx_is_conf_req(struct gsm_bts *bts);
-int abis_om2k_tx_tf_conf_req(struct gsm_bts *bts);
-int abis_om2k_tx_rx_conf_req(struct gsm_bts_trx *trx);
-int abis_om2k_tx_tx_conf_req(struct gsm_bts_trx *trx);
-int abis_om2k_tx_ts_conf_req(struct gsm_bts_trx_ts *ts);
-
-struct osmo_fsm_inst *om2k_bts_fsm_start(struct gsm_bts *bts);
-void abis_om2k_bts_init(struct gsm_bts *bts);
-void abis_om2k_trx_init(struct gsm_bts_trx *trx);
-
-int abis_om2k_vty_init(void);
-
-struct vty;
-void abis_om2k_config_write_bts(struct vty *vty, struct gsm_bts *bts);
-
-#endif /* OPENBCS_ABIS_OM2K_H */
diff --git a/include/osmocom/msc/abis_rsl.h b/include/osmocom/msc/abis_rsl.h
deleted file mode 100644
index f983fce..0000000
--- a/include/osmocom/msc/abis_rsl.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/* GSM Radio Signalling Link messages on the A-bis interface 
- * 3GPP TS 08.58 version 8.6.0 Release 1999 / ETSI TS 100 596 V8.6.0 */
-
-/* (C) 2008 by Harald Welte <laforge at gnumonks.org>
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#ifndef _RSL_H
-#define _RSL_H
-
-#include <stdbool.h>
-#include <osmocom/gsm/protocol/gsm_08_58.h>
-#include <osmocom/gsm/gsm_utils.h>
-#include <osmocom/gsm/sysinfo.h>
-#include <osmocom/core/msgb.h>
-
-struct gsm_bts;
-struct gsm_lchan;
-struct gsm_bts_trx_ts;
-
-#define GSM48_LEN2PLEN(a)	(((a) << 2) | 1)
-
-int rsl_bcch_info(const struct gsm_bts_trx *trx, enum osmo_sysinfo_type si_type, const uint8_t *data, int len);
-int rsl_sacch_filling(struct gsm_bts_trx *trx, uint8_t type,
-		      const uint8_t *data, int len);
-int rsl_chan_activate(struct gsm_bts_trx *trx, uint8_t chan_nr,
-		      uint8_t act_type,
-		      struct rsl_ie_chan_mode *chan_mode,
-		      struct rsl_ie_chan_ident *chan_ident,
-		      uint8_t bs_power, uint8_t ms_power,
-		      uint8_t ta);
-int rsl_chan_activate_lchan(struct gsm_lchan *lchan, uint8_t act_type,
-			    uint8_t ho_ref);
-int rsl_chan_mode_modify_req(struct gsm_lchan *ts);
-int rsl_encryption_cmd(struct msgb *msg);
-int rsl_paging_cmd(struct gsm_bts *bts, uint8_t paging_group, uint8_t len,
-		   uint8_t *ms_ident, uint8_t chan_needed, bool is_gprs);
-int rsl_imm_assign_cmd(struct gsm_bts *bts, uint8_t len, uint8_t *val);
-
-int rsl_data_request(struct msgb *msg, uint8_t link_id);
-int rsl_establish_request(struct gsm_lchan *lchan, uint8_t link_id);
-int rsl_relase_request(struct gsm_lchan *lchan, uint8_t link_id);
-
-/* Ericcson vendor specific RSL extensions */
-int rsl_ericsson_imm_assign_cmd(struct gsm_bts *bts, uint32_t tlli, uint8_t len, uint8_t *val);
-
-/* Siemens vendor-specific RSL extensions */
-int rsl_siemens_mrpci(struct gsm_lchan *lchan, struct rsl_mrpci *mrpci);
-
-/* ip.access specfic RSL extensions */
-int rsl_ipacc_crcx(struct gsm_lchan *lchan);
-int rsl_ipacc_mdcx(struct gsm_lchan *lchan, uint32_t ip,
-		   uint16_t port, uint8_t rtp_payload2);
-int rsl_ipacc_mdcx_to_rtpsock(struct gsm_lchan *lchan);
-int rsl_ipacc_pdch_activate(struct gsm_bts_trx_ts *ts, int act);
-
-int abis_rsl_rcvmsg(struct msgb *msg);
-
-uint64_t str_to_imsi(const char *imsi_str);
-int rsl_release_request(struct gsm_lchan *lchan, uint8_t link_id,
-			enum rsl_rel_mode release_mode);
-
-int rsl_lchan_set_state(struct gsm_lchan *lchan, int);
-int rsl_lchan_mark_broken(struct gsm_lchan *lchan, const char *broken);
-
-/* to be provided by external code */
-int rsl_deact_sacch(struct gsm_lchan *lchan);
-
-/* BCCH related code */
-int rsl_ccch_conf_to_bs_cc_chans(int ccch_conf);
-int rsl_ccch_conf_to_bs_ccch_sdcch_comb(int ccch_conf);
-
-int rsl_sacch_info_modify(struct gsm_lchan *lchan, uint8_t type,
-			  const uint8_t *data, int len);
-
-int rsl_chan_bs_power_ctrl(struct gsm_lchan *lchan, unsigned int fpc, int db);
-int rsl_chan_ms_power_ctrl(struct gsm_lchan *lchan, unsigned int fpc, int dbm);
-
-/* SMSCB functionality */
-int rsl_sms_cb_command(struct gsm_bts *bts, uint8_t chan_number,
-		       struct rsl_ie_cb_cmd_type cb_command,
-		       const uint8_t *data, int len);
-
-/* some Nokia specific stuff */
-int rsl_nokia_si_begin(struct gsm_bts_trx *trx);
-int rsl_nokia_si_end(struct gsm_bts_trx *trx);
-
-/* required for Nokia BTS power control */
-int rsl_bs_power_control(struct gsm_bts_trx *trx, uint8_t channel, uint8_t reduction);
-
-
-int rsl_release_sapis_from(struct gsm_lchan *lchan, int start,
-				enum rsl_rel_mode release_mode);
-int rsl_start_t3109(struct gsm_lchan *lchan);
-
-int rsl_direct_rf_release(struct gsm_lchan *lchan);
-
-void dyn_ts_init(struct gsm_bts_trx_ts *ts);
-int dyn_ts_switchover_start(struct gsm_bts_trx_ts *ts,
-			    enum gsm_phys_chan_config to_pchan);
-
-#endif /* RSL_MT_H */
-
diff --git a/include/osmocom/msc/arfcn_range_encode.h b/include/osmocom/msc/arfcn_range_encode.h
deleted file mode 100644
index 7ec710c..0000000
--- a/include/osmocom/msc/arfcn_range_encode.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef ARFCN_RANGE_ENCODE_H
-#define ARFCN_RANGE_ENCODE_H
-
-#include <stdint.h>
-
-enum gsm48_range {
-	ARFCN_RANGE_INVALID	= -1,
-	ARFCN_RANGE_128		= 127,
-	ARFCN_RANGE_256		= 255,
-	ARFCN_RANGE_512		= 511,
-	ARFCN_RANGE_1024	= 1023,
-};
-
-#define RANGE_ENC_MAX_ARFCNS	29
-
-int range_enc_determine_range(const int *arfcns, int size, int *f0_out);
-int range_enc_arfcns(enum gsm48_range rng, const int *arfcns, int sze, int *out, int idx);
-int range_enc_find_index(enum gsm48_range rng, const int *arfcns, int size);
-int range_enc_filter_arfcns(int *arfcns, const int sze, const int f0, int *f0_included);
-
-int range_enc_range128(uint8_t *chan_list, int f0, int *w);
-int range_enc_range256(uint8_t *chan_list, int f0, int *w);
-int range_enc_range512(uint8_t *chan_list, int f0, int *w);
-int range_enc_range1024(uint8_t *chan_list, int f0, int f0_incl, int *w);
-
-#endif
diff --git a/include/osmocom/msc/bsc_api.h b/include/osmocom/msc/bsc_api.h
index 40068d6..4936f53 100644
--- a/include/osmocom/msc/bsc_api.h
+++ b/include/osmocom/msc/bsc_api.h
@@ -46,13 +46,4 @@
 	void (*conn_cleanup)(struct gsm_subscriber_connection *conn);
 };
 
-int bsc_api_init(struct gsm_network *network, struct bsc_api *api);
-int gsm0808_submit_dtap(struct gsm_subscriber_connection *conn, struct msgb *msg, int link_id, int allow_sacch);
-int gsm0808_assign_req(struct gsm_subscriber_connection *conn, int chan_mode, int full_rate);
-int gsm0808_cipher_mode(struct gsm_subscriber_connection *conn, int cipher,
-			const uint8_t *key, int len, int include_imeisv);
-int gsm0808_page(struct gsm_bts *bts, unsigned int page_group,
-		 unsigned int mi_len, uint8_t *mi, int chan_type);
-int gsm0808_clear(struct gsm_subscriber_connection *conn);
-
 #endif
diff --git a/include/osmocom/msc/bsc_msg_filter.h b/include/osmocom/msc/bsc_msg_filter.h
deleted file mode 100644
index a9dedf4..0000000
--- a/include/osmocom/msc/bsc_msg_filter.h
+++ /dev/null
@@ -1,107 +0,0 @@
-#pragma once
-
-#include <osmocom/core/msgb.h>
-#include <osmocom/core/msgfile.h>
-#include <osmocom/core/linuxrbtree.h>
-#include <osmocom/core/linuxlist.h>
-
-#include <regex.h>
-
-struct vty;
-struct gsm48_hdr;
-
-struct bsc_filter_reject_cause {
-	int lu_reject_cause;
-	int cm_reject_cause;
-};
-
-struct bsc_filter_barr_entry {
-	struct rb_node node;
-
-	char *imsi;
-	int cm_reject_cause;
-	int lu_reject_cause;
-};
-
-enum bsc_filter_acc_ctr {
-	ACC_LIST_LOCAL_FILTER,
-	ACC_LIST_GLOBAL_FILTER,
-};
-
-struct bsc_msg_acc_lst {
-	struct llist_head list;
-
-	/* counter */
-	struct rate_ctr_group *stats;
-
-	/* the name of the list */
-	const char *name;
-	struct llist_head fltr_list;
-};
-
-struct bsc_msg_acc_lst_entry {
-	struct llist_head list;
-
-	/* the filter */
-	char *imsi_allow;
-	regex_t imsi_allow_re;
-	char *imsi_deny;
-	regex_t imsi_deny_re;
-
-	/* reject reasons for the access lists */
-	int cm_reject_cause;
-	int lu_reject_cause;
-};
-
-enum {
-	FLT_CON_TYPE_NONE,
-	FLT_CON_TYPE_LU,
-	FLT_CON_TYPE_CM_SERV_REQ,
-	FLT_CON_TYPE_PAG_RESP,
-	FLT_CON_TYPE_SSA,
-	FLT_CON_TYPE_LOCAL_REJECT,
-	FLT_CON_TYPE_OTHER,
-};
-
-
-struct bsc_filter_state {
-	char *imsi;
-	int imsi_checked;
-	int con_type;
-};
-
-struct bsc_filter_request {
-	void *ctx;
-	struct rb_root *black_list;
-	struct llist_head *access_lists;
-	const char *local_lst_name;
-	const char *global_lst_name;
-	int bsc_nr;
-};
-
-
-int bsc_filter_barr_adapt(void *ctx, struct rb_root *rbtree, const struct osmo_config_list *);
-int bsc_filter_barr_find(struct rb_root *root, const char *imsi, int *cm, int *lu);
-
-/**
- * Content filtering.
- */
-int bsc_msg_filter_initial(struct gsm48_hdr *hdr, size_t size,
-			struct bsc_filter_request *req,
-			int *con_type, char **imsi,
-			struct bsc_filter_reject_cause *cause);
-int bsc_msg_filter_data(struct gsm48_hdr *hdr, size_t size,
-			struct bsc_filter_request *req,
-			struct bsc_filter_state *state,
-			struct bsc_filter_reject_cause *cause);
-
-/* IMSI allow/deny handling */
-struct bsc_msg_acc_lst *bsc_msg_acc_lst_find(struct llist_head *lst, const char *name);
-struct bsc_msg_acc_lst *bsc_msg_acc_lst_get(void *ctx, struct llist_head *lst, const char *name);
-void bsc_msg_acc_lst_delete(struct bsc_msg_acc_lst *lst);
-
-struct bsc_msg_acc_lst_entry *bsc_msg_acc_lst_entry_create(struct bsc_msg_acc_lst *);
-int bsc_msg_acc_lst_check_allow(struct bsc_msg_acc_lst *lst, const char *imsi);
-
-void bsc_msg_lst_vty_init(void *ctx, struct llist_head *lst, int node);
-void bsc_msg_acc_lst_write(struct vty *vty, struct bsc_msg_acc_lst *lst);
diff --git a/include/osmocom/msc/chan_alloc.h b/include/osmocom/msc/chan_alloc.h
deleted file mode 100644
index 7388e14..0000000
--- a/include/osmocom/msc/chan_alloc.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Management functions to allocate/release struct gsm_lchan */
-/* (C) 2008 by Harald Welte <laforge at gnumonks.org>
- * (C) 2009 by Holger Hans Peter Freyther <zecke at selfish.org>
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-#ifndef _CHAN_ALLOC_H
-#define _CHAN_ALLOC_H
-
-#include "gsm_data.h"
-
-struct gsm_subscriber_connection;
-
-/* Find an allocated channel for a specified subscriber */
-struct gsm_subscriber_connection *connection_for_subscr(struct vlr_subscr *vsub);
-
-/* Allocate a logical channel (SDCCH, TCH, ...) */
-struct gsm_lchan *lchan_alloc(struct gsm_bts *bts, enum gsm_chan_t type, int allow_bigger);
-
-/* Free a logical channel (SDCCH, TCH, ...) */
-void lchan_free(struct gsm_lchan *lchan);
-void lchan_reset(struct gsm_lchan *lchan);
-
-/* Release the given lchan */
-int lchan_release(struct gsm_lchan *lchan, int sacch_deact, enum rsl_rel_mode release_mode);
-
-struct load_counter {
-	unsigned int total;
-	unsigned int used;
-};
-
-struct pchan_load {
-	struct load_counter pchan[_GSM_PCHAN_MAX];
-};
-
-void bts_chan_load(struct pchan_load *cl, const struct gsm_bts *bts);
-void network_chan_load(struct pchan_load *pl, struct gsm_network *net);
-
-int trx_is_usable(struct gsm_bts_trx *trx);
-
-#endif /* _CHAN_ALLOC_H */
diff --git a/include/osmocom/msc/common_bsc.h b/include/osmocom/msc/common_bsc.h
deleted file mode 100644
index 821298c..0000000
--- a/include/osmocom/msc/common_bsc.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#pragma once
-
-#include <stdint.h>
-#include <osmocom/msc/common_cs.h>
-
-struct gsm_network *bsc_network_init(void *ctx,
-				     uint16_t country_code,
-				     uint16_t network_code,
-				     mncc_recv_cb_t mncc_recv);
diff --git a/include/osmocom/msc/crc24.h b/include/osmocom/msc/crc24.h
deleted file mode 100644
index 756638c..0000000
--- a/include/osmocom/msc/crc24.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef _CRC24_H
-#define _CRC24_H
-
-#include <stdint.h>
-
-#define INIT_CRC24	0xffffff
-
-uint32_t crc24_calc(uint32_t fcs, uint8_t *cp, unsigned int len);
-
-#endif
diff --git a/include/osmocom/msc/e1_config.h b/include/osmocom/msc/e1_config.h
deleted file mode 100644
index ac5fbb1..0000000
--- a/include/osmocom/msc/e1_config.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef _E1_CONFIG_H
-#define _E1_CONFIG_H
-
-#include <osmocom/msc/gsm_data_shared.h>
-
-int e1_reconfig_ts(struct gsm_bts_trx_ts *ts);
-int e1_reconfig_trx(struct gsm_bts_trx *trx);
-int e1_reconfig_bts(struct gsm_bts *bts);
-
-#endif /* _E1_CONFIG_H */
-
diff --git a/include/osmocom/msc/gsm_04_08.h b/include/osmocom/msc/gsm_04_08.h
index 914b3e9..58cb7ae 100644
--- a/include/osmocom/msc/gsm_04_08.h
+++ b/include/osmocom/msc/gsm_04_08.h
@@ -5,8 +5,6 @@
 #include <osmocom/gsm/gsm_utils.h>
 #include <osmocom/gsm/protocol/gsm_04_08.h>
 
-#include <osmocom/msc/meas_rep.h>
-
 struct msgb;
 struct gsm_bts;
 struct gsm_network;
@@ -67,7 +65,6 @@
 
 int gsm48_lchan_modify(struct gsm_lchan *lchan, uint8_t lchan_mode);
 int gsm48_rx_rr_modif_ack(struct msgb *msg);
-int gsm48_parse_meas_rep(struct gsm_meas_rep *rep, struct msgb *msg);
 
 struct msgb *gsm48_create_mm_serv_rej(enum gsm48_reject_value value);
 struct msgb *gsm48_create_loc_upd_rej(uint8_t cause);
diff --git a/include/osmocom/msc/gsm_data.h b/include/osmocom/msc/gsm_data.h
index 2b01a34..e987136 100644
--- a/include/osmocom/msc/gsm_data.h
+++ b/include/osmocom/msc/gsm_data.h
@@ -18,6 +18,9 @@
 #include <osmocom/msc/common_cs.h>
 #include <osmocom/mgcp_client/mgcp_client.h>
 
+#include "gsm_data_shared.h"
+
+
 
 /** annotations for msgb ownership */
 #define __uses
@@ -168,20 +171,10 @@
 	int mncc_rtp_create_pending;
 	int mncc_rtp_connect_pending;
 
-	/* bsc structures */
-	struct osmo_bsc_sccp_con *sccp_con; /* BSC */
-
 	/* back pointers */
 	struct gsm_network *network;
 
 	bool in_release;
-	struct gsm_lchan *lchan; /* BSC */
-	struct gsm_lchan *ho_lchan; /* BSC */
-	struct gsm_bts *bts; /* BSC */
-
-	/* for assignment handling */
-	struct osmo_timer_list T10; /* BSC */
-	struct gsm_lchan *secondary_lchan; /* BSC */
 
 	/* connected via 2G or 3G? */
 	enum ran_type via_ran;
@@ -220,56 +213,6 @@
 	} a;
 };
 
-
-#define ROLE_BSC
-#include "gsm_data_shared.h"
-
-
-enum {
-	BSC_CTR_CHREQ_TOTAL,
-	BSC_CTR_CHREQ_NO_CHANNEL,
-	BSC_CTR_HANDOVER_ATTEMPTED,
-	BSC_CTR_HANDOVER_NO_CHANNEL,
-	BSC_CTR_HANDOVER_TIMEOUT,
-	BSC_CTR_HANDOVER_COMPLETED,
-	BSC_CTR_HANDOVER_FAILED,
-	BSC_CTR_PAGING_ATTEMPTED,
-	BSC_CTR_PAGING_DETACHED,
-	BSC_CTR_PAGING_COMPLETED,
-	BSC_CTR_PAGING_EXPIRED,
-	BSC_CTR_CHAN_RF_FAIL,
-	BSC_CTR_CHAN_RLL_ERR,
-	BSC_CTR_BTS_OML_FAIL,
-	BSC_CTR_BTS_RSL_FAIL,
-	BSC_CTR_CODEC_AMR_F,
-	BSC_CTR_CODEC_AMR_H,
-	BSC_CTR_CODEC_EFR,
-	BSC_CTR_CODEC_V1_FR,
-	BSC_CTR_CODEC_V1_HR,
-};
-
-static const struct rate_ctr_desc bsc_ctr_description[] = {
-	[BSC_CTR_CHREQ_TOTAL] = 		{"chreq.total", "Received channel requests."},
-	[BSC_CTR_CHREQ_NO_CHANNEL] = 		{"chreq.no_channel", "Sent to MS no channel available."},
-	[BSC_CTR_HANDOVER_ATTEMPTED] = 		{"handover.attempted", "Received handover attempts."},
-	[BSC_CTR_HANDOVER_NO_CHANNEL] = 		{"handover.no_channel", "Sent no channel available responses."},
-	[BSC_CTR_HANDOVER_TIMEOUT] = 		{"handover.timeout", "Count the amount of timeouts of timer T3103."},
-	[BSC_CTR_HANDOVER_COMPLETED] = 		{"handover.completed", "Received handover completed."},
-	[BSC_CTR_HANDOVER_FAILED] = 		{"handover.failed", "Receive HO FAIL messages."},
-	[BSC_CTR_PAGING_ATTEMPTED] = 		{"paging.attempted", "Paging attempts for a MS."},
-	[BSC_CTR_PAGING_DETACHED] = 		{"paging.detached", "Counts the amount of paging attempts which couldn't sent out any paging request because no responsible bts found."},
-	[BSC_CTR_PAGING_COMPLETED] = 		{"paging.completed", "Paging successful completed."},
-	[BSC_CTR_PAGING_EXPIRED] = 		{"paging.expired", "Paging Request expired because of timeout T3113."},
-	[BSC_CTR_CHAN_RF_FAIL] = 		{"chan.rf_fail", "Received a RF failure indication from BTS."},
-	[BSC_CTR_CHAN_RLL_ERR] = 		{"chan.rll_err", "Received a RLL failure with T200 cause from BTS."},
-	[BSC_CTR_BTS_OML_FAIL] = 		{"bts.oml_fail", "Received a TEI down on a OML link."},
-	[BSC_CTR_BTS_RSL_FAIL] = 		{"bts.rsl_fail", "Received a TEI down on a OML link."},
-	[BSC_CTR_CODEC_AMR_F] =			{"bts.codec_amr_f", "Count the usage of AMR/F codec by channel mode requested."},
-	[BSC_CTR_CODEC_AMR_H] =			{"bts.codec_amr_h", "Count the usage of AMR/H codec by channel mode requested."},
-	[BSC_CTR_CODEC_EFR] = 			{"bts.codec_efr", "Count the usage of EFR codec by channel mode requested."},
-	[BSC_CTR_CODEC_V1_FR] =			{"bts.codec_fr", "Count the usage of FR codec by channel mode requested."},
-	[BSC_CTR_CODEC_V1_HR] =			{"bts.codec_hr", "Count the usage of HR codec by channel mode requested."},
-};
 
 enum {
 	MSC_CTR_LOC_UPDATE_TYPE_ATTACH,
@@ -314,15 +257,6 @@
 	[MSC_CTR_CALL_ACTIVE] =			{"call:active", "Count total amount of calls that ever reached active state."},
 	[MSC_CTR_CALL_COMPLETE] = 		{"call:complete", "Count total amount of calls which got terminated by disconnect req or ind after reaching active state."},
 	[MSC_CTR_CALL_INCOMPLETE] = 		{"call:incomplete", "Count total amount of call which got terminated by any other reason after reaching active state."},
-};
-
-
-static const struct rate_ctr_group_desc bsc_ctrg_desc = {
-	"bsc",
-	"base station controller",
-	OSMO_STATS_CLASS_GLOBAL,
-	ARRAY_SIZE(bsc_ctr_description),
-	bsc_ctr_description,
 };
 
 static const struct rate_ctr_group_desc msc_ctrg_desc = {
@@ -401,9 +335,6 @@
 	 */
 	struct llist_head trans_list;
 	struct bsc_api *bsc_api;
-
-	unsigned int num_bts;
-	struct llist_head bts_list;
 
 	unsigned int paging_response_timer;
 
@@ -525,11 +456,6 @@
 
 extern void talloc_ctx_init(void *ctx_root);
 
-enum gsm_bts_type parse_btstype(const char *arg);
-const char *btstype2str(enum gsm_bts_type type);
-struct gsm_bts *gsm_bts_by_lac(struct gsm_network *net, unsigned int lac,
-				struct gsm_bts *start_bts);
-
 extern void *tall_bsc_ctx;
 extern int ipacc_rtp_direct;
 
@@ -539,29 +465,8 @@
 enum rrlp_mode rrlp_mode_parse(const char *arg);
 const char *rrlp_mode_name(enum rrlp_mode mode);
 
-enum bts_gprs_mode bts_gprs_mode_parse(const char *arg, int *valid);
-const char *bts_gprs_mode_name(enum bts_gprs_mode mode);
-
-int gsm48_ra_id_by_bts(uint8_t *buf, struct gsm_bts *bts);
-void gprs_ra_id_by_bts(struct gprs_ra_id *raid, struct gsm_bts *bts);
-
 struct gsm_subscriber_connection *msc_subscr_con_allocate(struct gsm_network *network);
 void msc_subscr_con_free(struct gsm_subscriber_connection *conn);
-
-void set_ts_e1link(struct gsm_bts_trx_ts *ts, uint8_t e1_nr,
-		   uint8_t e1_ts, uint8_t e1_ts_ss);
-
-void gsm_trx_lock_rf(struct gsm_bts_trx *trx, int locked);
-
-struct gsm_bts_trx *gsm_bts_trx_by_nr(struct gsm_bts *bts, int nr);
-int gsm_bts_trx_set_system_infos(struct gsm_bts_trx *trx);
-int gsm_bts_set_system_infos(struct gsm_bts *bts);
-
-/* generic E1 line operations for all ISDN-based BTS. */
-extern struct e1inp_line_ops bts_isdn_e1inp_line_ops;
-
-extern const struct value_string bts_type_names[_NUM_GSM_BTS_TYPE+1];
-extern const struct value_string bts_type_descs[_NUM_GSM_BTS_TYPE+1];
 
 /* control interface handling */
 int bsc_base_ctrl_cmds_install(void);
diff --git a/include/osmocom/msc/gsm_data_shared.h b/include/osmocom/msc/gsm_data_shared.h
index 63f4d33..68b36ab 100644
--- a/include/osmocom/msc/gsm_data_shared.h
+++ b/include/osmocom/msc/gsm_data_shared.h
@@ -11,18 +11,7 @@
 #include <osmocom/core/utils.h>
 #include <osmocom/gsm/gsm_utils.h>
 #include <osmocom/gsm/tlv.h>
-#include <osmocom/gsm/rxlev_stat.h>
-#include <osmocom/gsm/sysinfo.h>
-#include <osmocom/gsm/meas_rep.h>
 #include <osmocom/gsm/protocol/gsm_04_08.h>
-#include <osmocom/gsm/protocol/gsm_08_58.h>
-#include <osmocom/gsm/protocol/gsm_12_21.h>
-#include <osmocom/msc/meas_rep.h>
-#include <osmocom/abis/e1_input.h>
-
-#ifndef ROLE_BSC
-#include <osmocom/gsm/lapdm.h>
-#endif
 
 #include <osmocom/msc/common_cs.h>
 
@@ -39,35 +28,6 @@
 	RRLP_MODE_ASS_PREF,
 };
 
-/* Channel Request reason */
-enum gsm_chreq_reason_t {
-	GSM_CHREQ_REASON_EMERG,
-	GSM_CHREQ_REASON_PAG,
-	GSM_CHREQ_REASON_CALL,
-	GSM_CHREQ_REASON_LOCATION_UPD,
-	GSM_CHREQ_REASON_OTHER,
-	GSM_CHREQ_REASON_PDCH,
-};
-
-/* lchans 0..3 are SDCCH in combined channel configuration,
-   use 4 as magic number for BCCH hack - see osmo-bts-../oml.c:opstart_compl() */
-#define CCCH_LCHAN 4
-
-#define TRX_NR_TS	8
-#define TS_MAX_LCHAN	8
-
-#define HARDCODED_ARFCN 123
-#define HARDCODED_BSIC	0x3f	/* NCC = 7 / BCC = 7 */
-
-/* for multi-drop config */
-#define HARDCODED_BTS0_TS	1
-#define HARDCODED_BTS1_TS	6
-#define HARDCODED_BTS2_TS	11
-
-#define MAX_VERSION_LENGTH 64
-
-#define MAX_BTS_FEATURES 128
-
 enum gsm_hooks {
 	GSM_HOOK_NM_SWLOAD,
 	GSM_HOOK_RR_PAGING,
@@ -81,852 +41,15 @@
 	GSM_PAGING_BUSY,
 };
 
-enum bts_gprs_mode {
-	BTS_GPRS_NONE = 0,
-	BTS_GPRS_GPRS = 1,
-	BTS_GPRS_EGPRS = 2,
-};
-
-struct gsm_lchan;
 struct gsm_mncc;
 struct osmo_rtp_socket;
 struct rtp_socket;
 struct bsc_api;
-
-/* Network Management State */
-struct gsm_nm_state {
-	uint8_t operational;
-	uint8_t administrative;
-	uint8_t availability;
-};
-
-struct gsm_abis_mo {
-	uint8_t obj_class;
-	uint8_t procedure_pending;
-	struct abis_om_obj_inst obj_inst;
-	const char *name;
-	struct gsm_nm_state nm_state;
-	struct tlv_parsed *nm_attr;
-	struct gsm_bts *bts;
-};
-
-/* Ericsson OM2000 Managed Object */
-struct abis_om2k_mo {
-	uint8_t class;
-	uint8_t bts;
-	uint8_t assoc_so;
-	uint8_t inst;
-} __attribute__ ((packed));
-
-struct om2k_mo {
-	struct abis_om2k_mo addr;
-	struct osmo_fsm_inst *fsm;
-};
-
-#define A38_XOR_MIN_KEY_LEN	12
-#define A38_XOR_MAX_KEY_LEN	16
-#define A38_COMP128_KEY_LEN	16
-#define RSL_ENC_ALG_A5(x)	(x+1)
-#define MAX_EARFCN_LIST 32
-
-/* is the data link established? who established it? */
-#define LCHAN_SAPI_UNUSED	0
-#define LCHAN_SAPI_MS		1
-#define LCHAN_SAPI_NET		2
-#define LCHAN_SAPI_REL		3
-
-/* state of a logical channel */
-enum gsm_lchan_state {
-	LCHAN_S_NONE,		/* channel is not active */
-	LCHAN_S_ACT_REQ,	/* channel activation requested */
-	LCHAN_S_ACTIVE,		/* channel is active and operational */
-	LCHAN_S_REL_REQ,	/* channel release has been requested */
-	LCHAN_S_REL_ERR,	/* channel is in an error state */
-	LCHAN_S_BROKEN,		/* channel is somehow unusable */
-	LCHAN_S_INACTIVE,	/* channel is set inactive */
-};
-
-/* BTS ONLY */
-#define MAX_NUM_UL_MEAS	104
-#define LC_UL_M_F_L1_VALID	(1 << 0)
-#define LC_UL_M_F_RES_VALID	(1 << 1)
-
-struct bts_ul_meas {
-	/* BER in units of 0.01%: 10.000 == 100% ber, 0 == 0% ber */
-	uint16_t ber10k;
-	/* timing advance offset (in quarter bits) */
-	int16_t ta_offs_qbits;
-	/* C/I ratio in dB */
-	float c_i;
-	/* flags */
-	uint8_t is_sub:1;
-	/* RSSI in dBm * -1 */
-	uint8_t inv_rssi;
-};
-
-struct bts_codec_conf {
-	uint8_t hr;
-	uint8_t efr;
-	uint8_t amr;
-};
-
-struct amr_mode {
-	uint8_t mode;
-	uint8_t threshold;
-	uint8_t hysteresis;
-};
-
-struct amr_multirate_conf {
-	uint8_t gsm48_ie[2];
-	struct amr_mode ms_mode[4];
-	struct amr_mode bts_mode[4];
-	uint8_t num_modes;
-};
-/* /BTS ONLY */
-
-enum lchan_csd_mode {
-	LCHAN_CSD_M_NT,
-	LCHAN_CSD_M_T_1200_75,
-	LCHAN_CSD_M_T_600,
-	LCHAN_CSD_M_T_1200,
-	LCHAN_CSD_M_T_2400,
-	LCHAN_CSD_M_T_9600,
-	LCHAN_CSD_M_T_14400,
-	LCHAN_CSD_M_T_29000,
-	LCHAN_CSD_M_T_32000,
-};
-
-/* State of the SAPIs in the lchan */
-enum lchan_sapi_state {
-	LCHAN_SAPI_S_NONE,
-	LCHAN_SAPI_S_REQ,
-	LCHAN_SAPI_S_ASSIGNED,
-	LCHAN_SAPI_S_REL,
-	LCHAN_SAPI_S_ERROR,
-};
-
-struct gsm_lchan {
-	/* The TS that we're part of */
-	struct gsm_bts_trx_ts *ts;
-	/* The logical subslot number in the TS */
-	uint8_t nr;
-	/* The logical channel type */
-	enum gsm_chan_t type;
-	/* RSL channel mode */
-	enum rsl_cmod_spd rsl_cmode;
-	/* If TCH, traffic channel mode */
-	enum gsm48_chan_mode tch_mode;
-	enum lchan_csd_mode csd_mode;
-	/* State */
-	enum gsm_lchan_state state;
-	const char *broken_reason;
-	/* Power levels for MS and BTS */
-	uint8_t bs_power;
-	uint8_t ms_power;
-	/* Encryption information */
-	struct gsm_encr encr;
-
-	/* AMR bits */
-	uint8_t mr_ms_lv[7];
-	uint8_t mr_bts_lv[7];
-
-	/* Established data link layer services */
-	uint8_t sapis[8];
-	int sacch_deact;
-
-	struct {
-		uint32_t bound_ip;
-		uint32_t connect_ip;
-		uint16_t bound_port;
-		uint16_t connect_port;
-		uint16_t conn_id;
-		uint8_t rtp_payload;
-		uint8_t rtp_payload2;
-		uint8_t speech_mode;
-#ifdef ROLE_BSC
-		struct rtp_socket *rtp_socket;
-
-		/* info we need to postpone the AoIP
-		 * assignment completed message */
-		struct {
-			uint8_t rr_cause;
-			uint8_t chosen_channel;
-			uint8_t encr_alg_id;
-			uint8_t speech_mode;
-			bool valid;
-		} ass_compl;
-#else
-		struct osmo_rtp_socket *rtp_socket;
-#endif
-	} abis_ip;
-
-	uint8_t rqd_ta;
-
-	char *name;
-
-#ifdef ROLE_BSC
-	struct osmo_timer_list T3101;
-	struct osmo_timer_list T3109;
-	struct osmo_timer_list T3111;
-	struct osmo_timer_list error_timer;
-	struct osmo_timer_list act_timer;
-	struct osmo_timer_list rel_work;
-	uint8_t error_cause;
-
-	/* table of neighbor cell measurements */
-	struct neigh_meas_proc neigh_meas[MAX_NEIGH_MEAS];
-
-	/* cache of last measurement reports on this lchan */
-	struct gsm_meas_rep meas_rep[6];
-	int meas_rep_idx;
-
-	/* GSM Random Access data */
-	struct gsm48_req_ref *rqd_ref;
-
-	struct gsm_subscriber_connection *conn;
-
-	struct {
-		/* channel activation type and handover ref */
-		uint8_t act_type;
-		uint8_t ho_ref;
-		struct gsm48_req_ref *rqd_ref;
-		uint8_t rqd_ta;
-	} dyn;
-#else
-	/* Number of different GsmL1_Sapi_t used in osmo_bts_sysmo is 23.
-	 * Currently we don't share these headers so this is a magic number. */
-	struct llist_head sapi_cmds;
-	uint8_t sapis_dl[23];
-	uint8_t sapis_ul[23];
-	struct lapdm_channel lapdm_ch;
-	struct llist_head dl_tch_queue;
-	struct {
-		/* bitmask of all SI that are present/valid in si_buf */
-		uint32_t valid;
-		uint32_t last;
-		/* buffers where we put the pre-computed SI:
-		   SI2Q_MAX_NUM is the max number of SI2quater messages (see 3GPP TS 44.018) */
-		sysinfo_buf_t buf[_MAX_SYSINFO_TYPE][SI2Q_MAX_NUM];
-	} si;
-	struct {
-		uint8_t flags;
-		/* RSL measurment result number, 0 at lchan_act */
-		uint8_t res_nr;
-		/* current Tx power level of the BTS */
-		uint8_t bts_tx_pwr;
-		/* number of measurements stored in array below */
-		uint8_t num_ul_meas;
-		struct bts_ul_meas uplink[MAX_NUM_UL_MEAS];
-		/* last L1 header from the MS */
-		uint8_t l1_info[2];
-		struct gsm_meas_rep_unidir ul_res;
-	} meas;
-	struct {
-		struct amr_multirate_conf amr_mr;
-		struct {
-			struct osmo_fsm_inst *dl_amr_fsm;
-			/* TCH cache */
-			uint8_t cache[20];
-			/* FACCH cache */
-			uint8_t facch[GSM_MACBLOCK_LEN];
-			uint8_t len;
-			uint32_t fn;
-			bool is_update;
-			/* set for each SID frame to detect talkspurt for codecs
-			   without explicit ONSET event */
-			bool ul_sid;
-			/* indicates if DTXd was active during DL measurement
-			   period */
-			bool dl_active;
-		} dtx;
-		uint8_t last_cmr;
-		uint32_t last_fn;
-	} tch;
-
-	/* 3GPP TS 48.058 § 9.3.37: [0; 255] ok, -1 means invalid*/
-	int16_t ms_t_offs;
-	/* 3GPP TS 45.010 § 1.2 round trip propagation delay (in symbols) or -1 */
-	int16_t p_offs;
-
-	/* BTS-side ciphering state (rx only, bi-directional, ...) */
-	uint8_t ciph_state;
-	uint8_t ciph_ns;
-	uint8_t loopback;
-	struct {
-		uint8_t active;
-		uint8_t ref;
-		/* T3105: PHYS INF retransmission */
-		struct osmo_timer_list t3105;
-		/* counts up to Ny1 */
-		unsigned int phys_info_count;
-	} ho;
-	/* S counter for link loss */
-	int s;
-	/* Kind of the release/activation. E.g. RSL or PCU */
-	int rel_act_kind;
-	/* RTP header Marker bit to indicate beginning of speech after pause  */
-	bool rtp_tx_marker;
-	/* power handling */
-	struct {
-		uint8_t current;
-		uint8_t fixed;
-	} ms_power_ctrl;
-
-	struct msgb *pending_rel_ind_msg;
-#endif
-};
-
-enum {
-	TS_F_PDCH_ACTIVE =		0x1000,
-	TS_F_PDCH_ACT_PENDING =		0x2000,
-	TS_F_PDCH_DEACT_PENDING =	0x4000,
-	TS_F_PDCH_PENDING_MASK =	0x6000 /*<
-			TS_F_PDCH_ACT_PENDING | TS_F_PDCH_DEACT_PENDING */
-} gsm_bts_trx_ts_flags;
-
-/* One Timeslot in a TRX */
-struct gsm_bts_trx_ts {
-	struct gsm_bts_trx *trx;
-	/* number of this timeslot at the TRX */
-	uint8_t nr;
-
-	enum gsm_phys_chan_config pchan;
-
-	struct {
-		enum gsm_phys_chan_config pchan_is;
-		enum gsm_phys_chan_config pchan_want;
-		struct msgb *pending_chan_activ;
-	} dyn;
-
-	unsigned int flags;
-	struct gsm_abis_mo mo;
-	struct tlv_parsed nm_attr;
-	uint8_t nm_chan_comb;
-	int tsc;		/* -1 == use BTS TSC */
-
-	struct {
-		/* Parameters below are configured by VTY */
-		int enabled;
-		uint8_t maio;
-		uint8_t hsn;
-		struct bitvec arfcns;
-		uint8_t arfcns_data[1024/8];
-		/* This is the pre-computed MA for channel assignments */
-		struct bitvec ma;
-		uint8_t ma_len;	/* part of ma_data that is used */
-		uint8_t ma_data[8];	/* 10.5.2.21: max 8 bytes value part */
-	} hopping;
-
-	/* To which E1 subslot are we connected */
-	struct gsm_e1_subslot e1_link;
-
-	union {
-		struct {
-			struct om2k_mo om2k_mo;
-		} rbs2000;
-	};
-
-	struct gsm_lchan lchan[TS_MAX_LCHAN];
-};
-
-/* One TRX in a BTS */
-struct gsm_bts_trx {
-	/* list header in bts->trx_list */
-	struct llist_head list;
-
-	struct gsm_bts *bts;
-	/* number of this TRX in the BTS */
-	uint8_t nr;
-	/* human readable name / description */
-	char *description;
-	/* how do we talk RSL with this TRX? */
-	struct gsm_e1_subslot rsl_e1_link;
-	uint8_t rsl_tei;
-	struct e1inp_sign_link *rsl_link;
-
-	/* Some BTS (specifically Ericsson RBS) have a per-TRX OML Link */
-	struct e1inp_sign_link *oml_link;
-
-	struct gsm_abis_mo mo;
-	struct tlv_parsed nm_attr;
-	struct {
-		struct gsm_abis_mo mo;
-	} bb_transc;
-
-	uint16_t arfcn;
-	int nominal_power;		/* in dBm */
-	unsigned int max_power_red;	/* in actual dB */
-
-#ifndef ROLE_BSC
-	struct trx_power_params power_params;
-	int ms_power_control;
-
-	struct {
-		void *l1h;
-	} role_bts;
-#endif
-
-	union {
-		struct {
-			struct {
-				struct gsm_abis_mo mo;
-			} bbsig;
-			struct {
-				struct gsm_abis_mo mo;
-			} pa;
-		} bs11;
-		struct {
-			unsigned int test_state;
-			uint8_t test_nr;
-			struct rxlev_stats rxlev_stat;
-		} ipaccess;
-		struct {
-			struct {
-				struct om2k_mo om2k_mo;
-			} trxc;
-			struct {
-				struct om2k_mo om2k_mo;
-			} rx;
-			struct {
-				struct om2k_mo om2k_mo;
-			} tx;
-		} rbs2000;
-	};
-	struct gsm_bts_trx_ts ts[TRX_NR_TS];
-};
-
-enum gsm_bts_type {
-	GSM_BTS_TYPE_UNKNOWN,
-	GSM_BTS_TYPE_BS11,
-	GSM_BTS_TYPE_NANOBTS,
-	GSM_BTS_TYPE_RBS2000,
-	GSM_BTS_TYPE_NOKIA_SITE,
-	GSM_BTS_TYPE_OSMOBTS,
-	_NUM_GSM_BTS_TYPE
-};
-
-enum gsm_bts_type_variant {
-	BTS_UNKNOWN,
-	BTS_OSMO_LITECELL15,
-	BTS_OSMO_OCTPHY,
-	BTS_OSMO_SYSMO,
-	BTS_OSMO_TRX,
-	_NUM_BTS_VARIANT
-};
-
-/* Used by OML layer for BTS Attribute reporting */
-enum bts_attribute {
-	BTS_TYPE_VARIANT,
-	BTS_SUB_MODEL,
-	TRX_PHY_VERSION,
-};
-
-struct vty;
-
-/* N. B: always add new features to the end of the list (right before _NUM_BTS_FEAT) to avoid breaking compatibility
-   with BTS compiled against earlier version of this header */
-enum gsm_bts_features {
-	BTS_FEAT_HSCSD,
-	BTS_FEAT_GPRS,
-	BTS_FEAT_EGPRS,
-	BTS_FEAT_ECSD,
-	BTS_FEAT_HOPPING,
-	BTS_FEAT_MULTI_TSC,
-	BTS_FEAT_OML_ALERTS,
-	BTS_FEAT_AGCH_PCH_PROP,
-	BTS_FEAT_CBCH,
-	_NUM_BTS_FEAT
-};
-
-extern const struct value_string gsm_bts_features_descs[];
-
-/*
- * This keeps track of the paging status of one BTS. It
- * includes a number of pending requests, a back pointer
- * to the gsm_bts, a timer and some more state.
- */
-struct gsm_bts_paging_state {
-	/* pending requests */
-	struct llist_head pending_requests;
-	struct gsm_bts *bts;
-
-	struct osmo_timer_list work_timer;
-	struct osmo_timer_list credit_timer;
-
-	/* free chans needed */
-	int free_chans_need;
-
-	/* load */
-	uint16_t available_slots;
-};
-
-struct gsm_envabtse {
-	struct gsm_abis_mo mo;
-};
-
-struct gsm_bts_gprs_nsvc {
-	struct gsm_bts *bts;
-	/* data read via VTY config file, to configure the BTS
-	 * via OML from BSC */
-	int id;
-	uint16_t nsvci;
-	uint16_t local_port;	/* on the BTS */
-	uint16_t remote_port;	/* on the SGSN */
-	uint32_t remote_ip;	/* on the SGSN */
-
-	struct gsm_abis_mo mo;
-};
-
-enum gprs_rlc_par {
-	RLC_T3142,
-	RLC_T3169,
-	RLC_T3191,
-	RLC_T3193,
-	RLC_T3195,
-	RLC_N3101,
-	RLC_N3103,
-	RLC_N3105,
-	CV_COUNTDOWN,
-	T_DL_TBF_EXT,	/* ms */
-	T_UL_TBF_EXT,	/* ms */
-	_NUM_RLC_PAR
-};
-
-enum gprs_cs {
-	GPRS_CS1,
-	GPRS_CS2,
-	GPRS_CS3,
-	GPRS_CS4,
-	GPRS_MCS1,
-	GPRS_MCS2,
-	GPRS_MCS3,
-	GPRS_MCS4,
-	GPRS_MCS5,
-	GPRS_MCS6,
-	GPRS_MCS7,
-	GPRS_MCS8,
-	GPRS_MCS9,
-	_NUM_GRPS_CS
-};
-
-struct gprs_rlc_cfg {
-	uint16_t parameter[_NUM_RLC_PAR];
-	struct {
-		uint16_t repeat_time; /* ms */
-		uint8_t repeat_count;
-	} paging;
-	uint32_t cs_mask; /* bitmask of gprs_cs */
-	uint8_t initial_cs;
-	uint8_t initial_mcs;
-};
-
-
-enum neigh_list_manual_mode {
-	NL_MODE_AUTOMATIC = 0,
-	NL_MODE_MANUAL = 1,
-	NL_MODE_MANUAL_SI5SEP = 2, /* SI2 and SI5 have separate neighbor lists */
-};
-
-enum bts_loc_fix {
-	BTS_LOC_FIX_INVALID = 0,
-	BTS_LOC_FIX_2D = 1,
-	BTS_LOC_FIX_3D = 2,
-};
-
-extern const struct value_string bts_loc_fix_names[];
-
-struct bts_location {
-	struct llist_head list;
-	time_t tstamp;
-	enum bts_loc_fix valid;
-	double lat;
-	double lon;
-	double height;
-};
-
-/* One BTS */
-struct gsm_bts {
-	/* list header in net->bts_list */
-	struct llist_head list;
-
-	/* Geographical location of the BTS */
-	struct llist_head loc_list;
-
-	/* number of ths BTS in network */
-	uint8_t nr;
-	/* human readable name / description */
-	char *description;
-	/* Cell Identity */
-	uint16_t cell_identity;
-	/* location area code of this BTS */
-	uint16_t location_area_code;
-	/* Base Station Identification Code (BSIC), lower 3 bits is BCC,
-	 * which is used as TSC for the CCCH */
-	uint8_t bsic;
-	/* type of BTS */
-	enum gsm_bts_type type;
-	enum gsm_bts_type_variant variant;
-
-	enum gsm_band band;
-	char version[MAX_VERSION_LENGTH];
-	char sub_model[MAX_VERSION_LENGTH];
-
-	/* features of a given BTS set/reported via OML */
-	struct bitvec features;
-	uint8_t _features_data[MAX_BTS_FEATURES/8];
-
-	/* Connected PCU version (if any) */
-	char pcu_version[MAX_VERSION_LENGTH];
-
-	/* maximum Tx power that the MS is permitted to use in this cell */
-	int ms_max_power;
-
-	/* how do we talk OML with this TRX? */
-	struct gsm_e1_subslot oml_e1_link;
-	uint8_t oml_tei;
-	struct e1inp_sign_link *oml_link;
-
-	/* Abis network management O&M handle */
-	struct abis_nm_h *nmh;
-
-	struct gsm_abis_mo mo;
-
-	/* number of this BTS on given E1 link */
-	uint8_t bts_nr;
-
-	/* DTX features of this BTS */
-	enum gsm48_dtx_mode dtxu;
-	bool dtxd;
-
-	/* paging state and control */
-	struct gsm_bts_paging_state paging;
-
-	/* CCCH is on C0 */
-	struct gsm_bts_trx *c0;
-
-	struct {
-		struct gsm_abis_mo mo;
-	} site_mgr;
-
-	/* ip.accesss Unit ID's have Site/BTS/TRX layout */
-	union {
-		struct {
-			uint16_t site_id;
-			uint16_t bts_id;
-			uint32_t flags;
-			uint32_t rsl_ip;
-		} ip_access;
-		struct {
-			struct {
-				struct gsm_abis_mo mo;
-			} cclk;
-			struct {
-				struct gsm_abis_mo mo;
-			} rack;
-			struct gsm_envabtse envabtse[4];
-		} bs11;
-		struct {
-			struct {
-				struct om2k_mo om2k_mo;
-				struct gsm_abis_mo mo;
-				struct llist_head conn_groups;
-			} cf;
-			struct {
-				struct om2k_mo om2k_mo;
-				struct gsm_abis_mo mo;
-				struct llist_head conn_groups;
-			} is;
-			struct {
-				struct om2k_mo om2k_mo;
-				struct gsm_abis_mo mo;
-				struct llist_head conn_groups;
-			} con;
-			struct {
-				struct om2k_mo om2k_mo;
-				struct gsm_abis_mo mo;
-			} dp;
-			struct {
-				struct om2k_mo om2k_mo;
-				struct gsm_abis_mo mo;
-			} tf;
-			uint32_t use_superchannel:1;
-		} rbs2000;
-		struct {
-			uint8_t bts_type;
-			unsigned int configured:1,
-				skip_reset:1,
-				no_loc_rel_cnf:1,
-				bts_reset_timer_cnf,
-				did_reset:1,
-				wait_reset:1;
-			struct osmo_timer_list reset_timer;
-		} nokia;
-	};
-
-	/* Not entirely sure how ip.access specific this is */
-	struct {
-		uint8_t supports_egprs_11bit_rach;
-		enum bts_gprs_mode mode;
-		struct {
-			struct gsm_abis_mo mo;
-			uint16_t nsei;
-			uint8_t timer[7];
-		} nse;
-		struct {
-			struct gsm_abis_mo mo;
-			uint16_t bvci;
-			uint8_t timer[11];
-			struct gprs_rlc_cfg rlc_cfg;
-		} cell;
-		struct gsm_bts_gprs_nsvc nsvc[2];
-		uint8_t rac;
-		uint8_t net_ctrl_ord;
-		bool ctrl_ack_type_use_block;
-	} gprs;
-
-	/* RACH NM values */
-	int rach_b_thresh;
-	int rach_ldavg_slots;
-
-	/* transceivers */
-	int num_trx;
-	struct llist_head trx_list;
-
-	/* SI related items */
-	int force_combined_si;
-	int bcch_change_mark;
-
-#ifdef ROLE_BSC
-	/* Abis NM queue */
-	struct llist_head abis_queue;
-	int abis_nm_pend;
-
-	struct gsm_network *network;
-
-	/* should the channel allocator allocate channels from high TRX to TRX0,
-	 * rather than starting from TRX0 and go upwards? */
-	int chan_alloc_reverse;
-
-	enum neigh_list_manual_mode neigh_list_manual_mode;
-
-	bool early_classmark_allowed;
-	/* for testing only: Have an infinitely long radio link timeout */
-	bool infinite_radio_link_timeout;
-
-	/* do we use static (user-defined) system information messages? (bitmask) */
-	uint32_t si_mode_static;
-
-	/* exclude the BTS from the global RF Lock handling */
-	int excl_from_rf_lock;
-
-	/* supported codecs beside FR */
-	struct bts_codec_conf codec;
-
-	/* BTS dependencies bit field */
-	uint32_t depends_on[256/(8*4)];
-
-	/* full and half rate multirate config */
-	struct amr_multirate_conf mr_full;
-	struct amr_multirate_conf mr_half;
-
-	/* PCU socket state */
-	char *pcu_sock_path;
-	struct pcu_sock_state *pcu_state;
-
-#endif /* ROLE_BSC */
-	void *role;
-};
-
-
-struct gsm_bts *gsm_bts_alloc(void *talloc_ctx, uint8_t bts_num);
-struct gsm_bts *gsm_bts_num(struct gsm_network *net, int num);
-
-struct gsm_bts_trx *gsm_bts_trx_alloc(struct gsm_bts *bts);
-struct gsm_bts_trx *gsm_bts_trx_num(const struct gsm_bts *bts, int num);
-
-enum gsm_bts_type str2btstype(const char *arg);
-const char *btstype2str(enum gsm_bts_type type);
-
-enum bts_attribute str2btsattr(const char *s);
-const char *btsatttr2str(enum bts_attribute v);
-
-enum gsm_bts_type_variant str2btsvariant(const char *arg);
-const char *btsvariant2str(enum gsm_bts_type_variant v);
-
-extern const struct value_string gsm_chreq_descs[];
-const struct value_string gsm_pchant_names[13];
-const struct value_string gsm_pchant_descs[13];
-const char *gsm_pchan_name(enum gsm_phys_chan_config c);
-enum gsm_phys_chan_config gsm_pchan_parse(const char *name);
-const char *gsm_lchant_name(enum gsm_chan_t c);
-const char *gsm_chreq_name(enum gsm_chreq_reason_t c);
-char *gsm_trx_name(const struct gsm_bts_trx *trx);
-char *gsm_ts_name(const struct gsm_bts_trx_ts *ts);
-char *gsm_ts_and_pchan_name(const struct gsm_bts_trx_ts *ts);
-char *gsm_lchan_name_compute(const struct gsm_lchan *lchan);
-const char *gsm_lchans_name(enum gsm_lchan_state s);
-
-static inline char *gsm_lchan_name(const struct gsm_lchan *lchan)
-{
-	return lchan->name;
-}
-
-static inline int gsm_bts_set_feature(struct gsm_bts *bts, enum gsm_bts_features feat)
-{
-	OSMO_ASSERT(_NUM_BTS_FEAT < MAX_BTS_FEATURES);
-	return bitvec_set_bit_pos(&bts->features, feat, 1);
-}
-
-static inline bool gsm_bts_has_feature(const struct gsm_bts *bts, enum gsm_bts_features feat)
-{
-	OSMO_ASSERT(_NUM_BTS_FEAT < MAX_BTS_FEATURES);
-	return bitvec_get_bit_pos(&bts->features, feat);
-}
-
-void gsm_abis_mo_reset(struct gsm_abis_mo *mo);
-
-struct gsm_abis_mo *
-gsm_objclass2mo(struct gsm_bts *bts, uint8_t obj_class,
-	    const struct abis_om_obj_inst *obj_inst);
-
-struct gsm_nm_state *
-gsm_objclass2nmstate(struct gsm_bts *bts, uint8_t obj_class,
-		 const struct abis_om_obj_inst *obj_inst);
-void *
-gsm_objclass2obj(struct gsm_bts *bts, uint8_t obj_class,
-	     const struct abis_om_obj_inst *obj_inst);
-
-/* reset the state of all MO in the BTS */
-void gsm_bts_mo_reset(struct gsm_bts *bts);
-
-uint8_t gsm_pchan2chan_nr(enum gsm_phys_chan_config pchan,
-			  uint8_t ts_nr, uint8_t lchan_nr);
-uint8_t gsm_lchan2chan_nr(const struct gsm_lchan *lchan);
-uint8_t gsm_lchan_as_pchan2chan_nr(const struct gsm_lchan *lchan,
-				   enum gsm_phys_chan_config as_pchan);
-
-/* return the gsm_lchan for the CBCH (if it exists at all) */
-struct gsm_lchan *gsm_bts_get_cbch(struct gsm_bts *bts);
 
 /*
  * help with parsing regexps
  */
 int gsm_parse_reg(void *ctx, regex_t *reg, char **str,
 		int argc, const char **argv) __attribute__ ((warn_unused_result));
-
-static inline uint8_t gsm_ts_tsc(const struct gsm_bts_trx_ts *ts)
-{
-	if (ts->tsc != -1)
-		return ts->tsc;
-	else
-		return ts->trx->bts->bsic & 7;
-}
-
-struct gsm_lchan *rsl_lchan_lookup(struct gsm_bts_trx *trx, uint8_t chan_nr,
-				   int *rc);
-
-enum gsm_phys_chan_config ts_pchan(struct gsm_bts_trx_ts *ts);
-uint8_t ts_subslots(struct gsm_bts_trx_ts *ts);
-bool ts_is_tch(struct gsm_bts_trx_ts *ts);
 
 #endif
diff --git a/include/osmocom/msc/gsm_subscriber.h b/include/osmocom/msc/gsm_subscriber.h
index 4adfd41..16e1037 100644
--- a/include/osmocom/msc/gsm_subscriber.h
+++ b/include/osmocom/msc/gsm_subscriber.h
@@ -66,4 +66,7 @@
 int subscr_paging_dispatch(unsigned int hooknum, unsigned int event,
 			   struct msgb *msg, void *data, void *param);
 
+/* Find an allocated channel for a specified subscriber */
+struct gsm_subscriber_connection *connection_for_subscr(struct vlr_subscr *vsub);
+
 #endif /* _GSM_SUBSCR_H */
diff --git a/include/osmocom/msc/handover.h b/include/osmocom/msc/handover.h
deleted file mode 100644
index 3fe71a2..0000000
--- a/include/osmocom/msc/handover.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef _HANDOVER_H
-#define _HANDOVER_H
-
-struct gsm_subscriber_connection;
-
-int bsc_handover_start(struct gsm_lchan *old_lchan, struct gsm_bts *bts);
-
-/* clear any operation for this connection */
-void bsc_clear_handover(struct gsm_subscriber_connection *conn, int free_lchan);
-
-/* Return the old lchan or NULL. This is meant for audio handling */
-struct gsm_lchan *bsc_handover_pending(struct gsm_lchan *new_lchan);
-
-#endif /* _HANDOVER_H */
diff --git a/include/osmocom/msc/handover_decision.h b/include/osmocom/msc/handover_decision.h
deleted file mode 100644
index 81078b0..0000000
--- a/include/osmocom/msc/handover_decision.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef _HANDOVER_DECISION_H
-#define _HANDOVER_DECISION_H
-
-void on_dso_load_ho_dec(void);
-
-#endif /* _HANDOVER_DECISION_H */
-
diff --git a/include/osmocom/msc/meas_rep.h b/include/osmocom/msc/meas_rep.h
deleted file mode 100644
index b0c03f0..0000000
--- a/include/osmocom/msc/meas_rep.h
+++ /dev/null
@@ -1,67 +0,0 @@
-#ifndef _MEAS_REP_H
-#define _MEAS_REP_H
-
-#include <stdint.h>
-
-#include <osmocom/gsm/meas_rep.h>
-
-#define MRC_F_PROCESSED	0x0001
-
-/* extracted from a L3 measurement report IE */
-struct gsm_meas_rep_cell {
-	uint8_t rxlev;
-	uint8_t bsic;
-	uint8_t neigh_idx;
-	uint16_t arfcn;
-	unsigned int flags;
-};
-
-#define MEAS_REP_F_UL_DTX	0x01
-#define MEAS_REP_F_DL_VALID	0x02
-#define MEAS_REP_F_BA1		0x04
-#define MEAS_REP_F_DL_DTX	0x08
-#define MEAS_REP_F_MS_TO	0x10
-#define MEAS_REP_F_MS_L1	0x20
-#define MEAS_REP_F_FPC		0x40
-
-/* parsed uplink and downlink measurement result */
-struct gsm_meas_rep {
-	/* back-pointer to the logical channel */
-	struct gsm_lchan *lchan;
-
-	/* number of the measurement report */
-	uint8_t nr;
-	/* flags, see MEAS_REP_F_* */
-	unsigned int flags;
-
-	/* uplink and downlink rxlev, rxqual; full and sub */
-	struct gsm_meas_rep_unidir ul;
-	struct gsm_meas_rep_unidir dl;
-
-	uint8_t bs_power;
-	/* according to 3GPP TS 48.058 § MS Timing Offset [-63; 192] */
-	int16_t ms_timing_offset;
-	struct {
-		int8_t pwr;	/* MS power in dBm */
-		uint8_t ta;	/* MS timing advance */
-	} ms_l1;
-
-	/* neighbor measurement reports for up to 6 cells */
-	int num_cell;
-	struct gsm_meas_rep_cell cell[6];
-};
-
-/* obtain an average over the last 'num' fields in the meas reps */
-int get_meas_rep_avg(const struct gsm_lchan *lchan,
-		     enum meas_rep_field field, unsigned int num);
-
-/* Check if N out of M last values for FIELD are >= bd */
-int meas_rep_n_out_of_m_be(const struct gsm_lchan *lchan,
-			enum meas_rep_field field,
-			unsigned int n, unsigned int m, int be);
-
-unsigned int calc_initial_idx(unsigned int array_size,
-			      unsigned int meas_rep_idx,
-			      unsigned int num_values);
-
-#endif /* _MEAS_REP_H */
diff --git a/include/osmocom/msc/misdn.h b/include/osmocom/msc/misdn.h
deleted file mode 100644
index 9851ad3..0000000
--- a/include/osmocom/msc/misdn.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* (C) 2008 by Harald Welte <laforge at gnumonks.org>
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#ifndef MISDN_H
-#define MISDN_H
-
-#include <osmocom/abis/e1_input.h>
-
-int mi_setup(int cardnr,  struct e1inp_line *line, int release_l2);
-int mi_e1_line_update(struct e1inp_line *line);
-
-#endif
diff --git a/include/osmocom/msc/network_listen.h b/include/osmocom/msc/network_listen.h
deleted file mode 100644
index 05fbb2f..0000000
--- a/include/osmocom/msc/network_listen.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef _OPENBSC_NWL_H
-#define _OPENBSC_NWL_H
-
-#include <stdint.h>
-#include <osmocom/msc/gsm_data.h>
-
-void ipac_nwl_init(void);
-
-/* Start a NWL test.  It will raise the S_IPAC_TEST_COMPLETE signal. */
-int ipac_nwl_test_start(struct gsm_bts_trx *trx, uint8_t testnr,
-			const uint8_t *phys_conf, unsigned int phys_conf_len);
-
-int ipac_rxlevstat2whitelist(uint16_t *buf, const struct rxlev_stats *st, uint8_t min_rxlev,
-			     uint16_t max_num_arfcns);
-
-#endif /* _OPENBSC_NWL_H */
diff --git a/include/osmocom/msc/osmo_bsc.h b/include/osmocom/msc/osmo_bsc.h
deleted file mode 100644
index 5ebea50..0000000
--- a/include/osmocom/msc/osmo_bsc.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* OpenBSC BSC code */
-
-#ifndef OSMO_BSC_H
-#define OSMO_BSC_H
-
-#include "bsc_api.h"
-#include "bsc_msg_filter.h"
-
-#define BSS_SEND_USSD 1
-
-enum bsc_con {
-	BSC_CON_SUCCESS,
-	BSC_CON_REJECT_NO_LINK,
-	BSC_CON_REJECT_RF_GRACE,
-	BSC_CON_NO_MEM,
-};
-
-struct sccp_connection;
-struct bsc_msc_data;
-struct bsc_msc_connection;
-
-struct osmo_bsc_sccp_con {
-	struct llist_head entry;
-
-	int ciphering_handled;
-
-	/* for audio handling */
-	uint16_t cic;
-	uint32_t rtp_ip;
-	int rtp_port;
-
-	/* for advanced ping/pong */
-	int send_ping;
-
-	/* SCCP connection realted */
-	struct sccp_connection *sccp;
-	struct bsc_msc_data *msc;
-	struct osmo_timer_list sccp_it_timeout;
-	struct osmo_timer_list sccp_cc_timeout;
-
-	struct llist_head sccp_queue;
-	unsigned int sccp_queue_size;
-
-	struct gsm_subscriber_connection *conn;
-	uint8_t new_subscriber;
-
-	struct bsc_filter_state filter_state;
-
-	/* Sigtran connection ID */
-	int conn_id;
-};
-
-struct bsc_api *osmo_bsc_api();
-
-int bsc_queue_for_msc(struct osmo_bsc_sccp_con *conn, struct msgb *msg);
-int bsc_open_connection(struct osmo_bsc_sccp_con *sccp, struct msgb *msg);
-enum bsc_con bsc_create_new_connection(struct gsm_subscriber_connection *conn,
-				       struct bsc_msc_data *msc, int send_ping);
-int bsc_delete_connection(struct osmo_bsc_sccp_con *sccp);
-
-struct bsc_msc_data *bsc_find_msc(struct gsm_subscriber_connection *conn, struct msgb *);
-int bsc_scan_bts_msg(struct gsm_subscriber_connection *conn, struct msgb *msg);
-int bsc_scan_msc_msg(struct gsm_subscriber_connection *conn, struct msgb *msg);
-int bsc_send_welcome_ussd(struct gsm_subscriber_connection *conn);
-
-int bsc_handle_udt(struct bsc_msc_data *msc, struct msgb *msg, unsigned int length);
-int bsc_handle_dt(struct osmo_bsc_sccp_con *conn, struct msgb *msg, unsigned int len);
-
-int bsc_ctrl_cmds_install();
-
-void bsc_gen_location_state_trap(struct gsm_bts *bts);
-
-struct llist_head *bsc_access_lists(void);
-
-#endif
diff --git a/include/osmocom/msc/osmo_bsc_reset.h b/include/osmocom/msc/osmo_bsc_reset.h
deleted file mode 100644
index 578f763..0000000
--- a/include/osmocom/msc/osmo_bsc_reset.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* (C) 2017 by sysmocom s.f.m.c. GmbH
- * All Rights Reserved
- *
- * Author: Philipp Maier
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-/* Create and start state machine which handles the reset/reset-ack procedure */
-void start_reset_fsm(struct bsc_msc_data *msc);
-
-/* Confirm that we sucessfully received a reset acknowlege message */
-void reset_ack_confirm(struct bsc_msc_data *msc);
-
-/* Report a failed connection */
-void report_conn_fail(struct bsc_msc_data *msc);
-
-/* Report a successful connection */
-void report_conn_success(struct bsc_msc_data *msc);
-
-/* Check if we have a connection to a specified msc */
-bool sccp_conn_ready(struct bsc_msc_data *msc);
diff --git a/include/osmocom/msc/osmo_bsc_sigtran.h b/include/osmocom/msc/osmo_bsc_sigtran.h
deleted file mode 100644
index 7015edb..0000000
--- a/include/osmocom/msc/osmo_bsc_sigtran.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* (C) 2017 by Sysmocom s.f.m.c. GmbH
- * All Rights Reserved
- *
- * Author: Philipp Maier
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#pragma once
-
-#include <osmocom/msc/gsm_data.h>
-#include <osmocom/msc/bsc_msc_data.h>
-
-/* Allocate resources to make a new connection oriented sigtran connection
- * (not the connection ittself!) */
-enum bsc_con osmo_bsc_sigtran_new_conn(struct gsm_subscriber_connection *conn, struct bsc_msc_data *msc);
-
-/* Open a new connection oriented sigtran connection */
-int osmo_bsc_sigtran_open_conn(const struct osmo_bsc_sccp_con *conn, struct msgb *msg);
-
-/* Send data to MSC */
-int osmo_bsc_sigtran_send(const struct osmo_bsc_sccp_con *conn, struct msgb *msg);
-
-/* Delete a connection from the list with open connections
- * (called by osmo_bsc_api.c on failing open connections and
- * locally, when a connection is closed by the MSC */
-int osmo_bsc_sigtran_del_conn(struct osmo_bsc_sccp_con *sccp);
-
-/* Initalize osmo sigtran backhaul */
-int osmo_bsc_sigtran_init(struct llist_head *mscs);
-
-/* Close all open sigtran connections and channels */
-void osmo_bsc_sigtran_reset(const struct bsc_msc_data *msc);
-
-/* Send reset-ack to MSC */
-void osmo_bsc_sigtran_tx_reset_ack(const struct bsc_msc_data *msc);
diff --git a/include/osmocom/msc/osmux.h b/include/osmocom/msc/osmux.h
deleted file mode 100644
index f3ea72a..0000000
--- a/include/osmocom/msc/osmux.h
+++ /dev/null
@@ -1,41 +0,0 @@
-#ifndef _OPENBSC_OSMUX_H_
-#define _OPENBSC_OSMUX_H_
-
-#include <osmocom/netif/osmux.h>
-
-#define OSMUX_PORT	1984
-
-enum {
-	OSMUX_ROLE_BSC = 0,
-	OSMUX_ROLE_BSC_NAT,
-};
-
-int osmux_init(int role, struct mgcp_config *cfg);
-int osmux_enable_endpoint(struct mgcp_endpoint *endp, struct in_addr *addr, uint16_t port);
-void osmux_disable_endpoint(struct mgcp_endpoint *endp);
-void osmux_allocate_cid(struct mgcp_endpoint *endp);
-void osmux_release_cid(struct mgcp_endpoint *endp);
-
-int osmux_xfrm_to_rtp(struct mgcp_endpoint *endp, int type, char *buf, int rc);
-int osmux_xfrm_to_osmux(int type, char *buf, int rc, struct mgcp_endpoint *endp);
-
-int osmux_send_dummy(struct mgcp_endpoint *endp);
-
-int osmux_get_cid(void);
-void osmux_put_cid(uint8_t osmux_cid);
-int osmux_used_cid(void);
-
-enum osmux_state {
-	OSMUX_STATE_DISABLED = 0,
-	OSMUX_STATE_NEGOTIATING,
-	OSMUX_STATE_ACTIVATING,
-	OSMUX_STATE_ENABLED,
-};
-
-enum osmux_usage {
-	OSMUX_USAGE_OFF = 0,
-	OSMUX_USAGE_ON = 1,
-	OSMUX_USAGE_ONLY = 2,
-};
-
-#endif
diff --git a/include/osmocom/msc/rs232.h b/include/osmocom/msc/rs232.h
deleted file mode 100644
index 61187ca..0000000
--- a/include/osmocom/msc/rs232.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef _RS232_H
-#define _RS232_H
-
-int rs232_setup(const char *serial_port, unsigned int delay_ms,
-		struct gsm_bts *bts);
-
-int handle_serial_msg(struct msgb *msg);
-
-#endif /* _RS232_H */
diff --git a/include/osmocom/msc/rtp_proxy.h b/include/osmocom/msc/rtp_proxy.h
deleted file mode 100644
index 3cd8cac..0000000
--- a/include/osmocom/msc/rtp_proxy.h
+++ /dev/null
@@ -1,95 +0,0 @@
-#ifndef _RTP_PROXY_H
-#define _RTP_PROXY_H
-
-/* RTP proxy handling for ip.access nanoBTS */
-
-/* (C) 2009 by Harald Welte <laforge at gnumonks.org>
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-
-#include <netinet/in.h>
-
-#include <osmocom/core/linuxlist.h>
-#include <osmocom/core/select.h>
-
-#include <osmocom/msc/mncc.h>
-
-#define RTP_PT_GSM_FULL 3
-#define RTP_PT_GSM_HALF 96
-#define RTP_PT_GSM_EFR 97
-#define RTP_PT_AMR 98
-#define RTP_LEN_GSM_FULL 33
-#define RTP_LEN_GSM_HALF 15
-#define RTP_LEN_GSM_EFR 31
-#define RTP_GSM_DURATION 160
-
-enum rtp_rx_action {
-	RTP_NONE,
-	RTP_PROXY,
-	RTP_RECV_UPSTREAM,
-};
-
-enum rtp_tx_action {
-	RTP_SEND_NONE,
-	RTP_SEND_DOWNSTREAM,
-};
-
-struct rtp_sub_socket {
-	struct sockaddr_in sin_local;
-	struct sockaddr_in sin_remote;
-
-	struct osmo_fd bfd;
-	/* linked list of to-be-transmitted msgb's */
-	struct llist_head tx_queue;
-};
-
-struct rtp_socket {
-	struct llist_head list;
-
-	struct rtp_sub_socket rtp;
-	struct rtp_sub_socket rtcp;
-
-	/* what should we do on receive? */
-	enum rtp_rx_action rx_action;
-	union {
-		struct {
-			struct rtp_socket *other_sock;
-		} proxy;
-		struct {
-			struct gsm_network *net;
-			uint32_t callref;
-		} receive;
-	};
-	enum rtp_tx_action tx_action;
-	struct {
-		uint16_t sequence;
-		uint32_t timestamp;
-		uint32_t ssrc;
-		struct timeval last_tv;
-	} transmit;
-};
-
-struct rtp_socket *rtp_socket_create(void);
-int rtp_socket_bind(struct rtp_socket *rs, uint32_t ip);
-int rtp_socket_connect(struct rtp_socket *rs, uint32_t ip, uint16_t port);
-int rtp_socket_proxy(struct rtp_socket *this, struct rtp_socket *other);
-int rtp_socket_upstream(struct rtp_socket *this, struct gsm_network *net, uint32_t callref);
-int rtp_socket_free(struct rtp_socket *rs);
-int rtp_send_frame(struct rtp_socket *rs, struct gsm_data_frame *frame);
-
-#endif /* _RTP_PROXY_H */
diff --git a/include/osmocom/msc/signal.h b/include/osmocom/msc/signal.h
index 14c76f8..29b6a59 100644
--- a/include/osmocom/msc/signal.h
+++ b/include/osmocom/msc/signal.h
@@ -35,18 +35,10 @@
 enum signal_subsystems {
 	SS_PAGING,
 	SS_SMS,
-	SS_ABISIP,
-	SS_NM,
-	SS_LCHAN,
 	SS_SUBSCR,
 	SS_SCALL,
-	SS_CHALLOC,
-	SS_IPAC_NWL,
-	SS_RF,
 	SS_MSC,
-	SS_HO,
 	SS_CCCH,
-	SS_SGSN,
 };
 
 /* SS_PAGING signals */
@@ -62,50 +54,6 @@
 	S_SMS_SMMA,		/* A MS tells us it has more space available */
 	S_SMS_MEM_EXCEEDED,	/* A MS tells us it has no more space available */
 	S_SMS_UNKNOWN_ERROR,	/* A MS tells us it has an error */
-};
-
-/* SS_ABISIP signals */
-enum signal_abisip {
-	S_ABISIP_CRCX_ACK,
-	S_ABISIP_MDCX_ACK,
-	S_ABISIP_DLCX_IND,
-};
-
-/* SS_NM signals */
-enum signal_nm {
-	S_NM_SW_ACTIV_REP,	/* GSM 12.21 software activated report */
-	S_NM_FAIL_REP,		/* GSM 12.21 failure event report */
-	S_NM_NACK,		/* GSM 12.21 various NM_MT_*_NACK happened */
-	S_NM_IPACC_NACK,	/* GSM 12.21 nanoBTS extensions NM_MT_IPACC_*_*_NACK happened */
-	S_NM_IPACC_ACK,		/* GSM 12.21 nanoBTS extensions NM_MT_IPACC_*_*_ACK happened */
-	S_NM_IPACC_RESTART_ACK, /* nanoBTS has send a restart ack */
-	S_NM_IPACC_RESTART_NACK,/* nanoBTS has send a restart ack */
-	S_NM_TEST_REP,		/* GSM 12.21 Test Report */
-	S_NM_STATECHG_OPER,	/* Operational State changed*/
-	S_NM_STATECHG_ADM,	/* Administrative State changed */
-	S_NM_OM2K_CONF_RES,	/* OM2K Configuration Result */
-};
-
-/* SS_LCHAN signals */
-enum signal_lchan {
-	/*
-	 * The lchan got freed with an use_count != 0 and error
-	 * recovery needs to be carried out from within the
-	 * signal handler.
-	 */
-	S_LCHAN_UNEXPECTED_RELEASE,
-	S_LCHAN_ACTIVATE_ACK,		/* 08.58 Channel Activate ACK */
-	S_LCHAN_ACTIVATE_NACK,		/* 08.58 Channel Activate NACK */
-	S_LCHAN_HANDOVER_COMPL,		/* 04.08 Handover Completed */
-	S_LCHAN_HANDOVER_FAIL,		/* 04.08 Handover Failed */
-	S_LCHAN_HANDOVER_DETECT,	/* 08.58 Handover Detect */
-	S_LCHAN_MEAS_REP,		/* 08.58 Measurement Report */
-};
-
-/* SS_CHALLOC signals */
-enum signal_challoc {
-	S_CHALLOC_ALLOC_FAIL,	/* allocation of lchan has failed */
-	S_CHALLOC_FREED,	/* lchan has been successfully freed */
 };
 
 /* SS_SUBSCR signals */
@@ -131,13 +79,6 @@
 	S_GLOBAL_BTS_CLOSE_OM,
 };
 
-/* SS_RF signals */
-enum signal_rf {
-	S_RF_OFF,
-	S_RF_ON,
-	S_RF_GRACE,
-};
-
 struct paging_signal_data {
 	struct vlr_subscr *vsub;
 	struct gsm_bts *bts;
@@ -152,51 +93,6 @@
 	struct gsm_subscriber_connection *conn;
 	void *data;
 };
-
-struct ipacc_ack_signal_data {
-	struct gsm_bts_trx *trx;
-	uint8_t msg_type;
-};
-
-struct abis_om2k_mo;
-
-struct nm_statechg_signal_data {
-	struct gsm_bts *bts;
-	uint8_t obj_class;
-	void *obj;
-	struct gsm_nm_state *old_state;
-	struct gsm_nm_state *new_state;
-
-	/* This pointer is vaold for TS 12.21 MO */
-	struct abis_om_obj_inst *obj_inst;
-	/* This pointer is vaold for RBS2000 MO */
-	struct abis_om2k_mo *om2k_mo;
-};
-
-struct nm_om2k_signal_data {
-	struct gsm_bts *bts;
-	void *obj;
-	struct abis_om2k_mo *om2k_mo;
-
-	uint8_t accordance_ind;
-};
-
-struct nm_nack_signal_data {
-	struct msgb *msg;
-	struct gsm_bts *bts;
-	uint8_t mt;
-};
-
-struct challoc_signal_data {
-	struct gsm_bts *bts;
-	struct gsm_lchan *lchan;
-	enum gsm_chan_t type;
-};
-
-struct rf_signal_data {
-	struct gsm_network *net;
-};
-
 struct sms_signal_data {
 	/* The transaction where this occured */
 	struct gsm_trans *trans;
@@ -204,13 +100,6 @@
 	struct gsm_sms *sms;
 	/* int paging result. Only the ones with > 0 */
 	int paging_result;
-};
-
-struct lchan_signal_data {
-	/* The lchan the signal happened on */
-	struct gsm_lchan *lchan;
-	/* Measurement reports on this lchan */
-	struct gsm_meas_rep *mr;
 };
 
 /* MSC signals */
@@ -223,38 +112,6 @@
 struct bsc_msc_data;
 struct msc_signal_data {
 	struct bsc_msc_data *data;
-};
-
-/* SS_CCCH signals */
-enum signal_ccch {
-	S_CCCH_PAGING_LOAD,
-	S_CCCH_RACH_LOAD,
-};
-
-struct ccch_signal_data {
-	struct gsm_bts *bts;
-	uint16_t pg_buf_space;
-	uint16_t rach_slot_count;
-	uint16_t rach_busy_count;
-	uint16_t rach_access_count;
-};
-
-/* GPRS SGSN signals SS_SGSN */
-enum signal_sgsn {
-	S_SGSN_ATTACH,
-	S_SGSN_DETACH,
-	S_SGSN_UPDATE,
-	S_SGSN_PDP_ACT,
-	S_SGSN_PDP_DEACT,
-	S_SGSN_PDP_TERMINATE,
-	S_SGSN_PDP_FREE,
-	S_SGSN_MM_FREE,
-};
-
-struct sgsn_mm_ctx;
-struct sgsn_signal_data {
-	struct sgsn_mm_ctx *mm;
-	struct sgsn_pdp_ctx *pdp;	/* non-NULL for PDP_ACT, PDP_DEACT, PDP_FREE */
 };
 
 #endif
diff --git a/include/osmocom/msc/slhc.h b/include/osmocom/msc/slhc.h
deleted file mode 100644
index cd5a47c..0000000
--- a/include/osmocom/msc/slhc.h
+++ /dev/null
@@ -1,187 +0,0 @@
-#ifndef _SLHC_H
-#define _SLHC_H
-/*
- * Definitions for tcp compression routines.
- *
- * $Header: slcompress.h,v 1.10 89/12/31 08:53:02 van Exp $
- *
- * Copyright (c) 1989 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley.  The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- *	Van Jacobson (van at helios.ee.lbl.gov), Dec 31, 1989:
- *	- Initial distribution.
- *
- *
- * modified for KA9Q Internet Software Package by
- * Katie Stevens (dkstevens at ucdavis.edu)
- * University of California, Davis
- * Computing Services
- *	- 01-31-90	initial adaptation
- *
- *	- Feb 1991	Bill_Simpson at um.cc.umich.edu
- *			variable number of conversation slots
- *			allow zero or one slots
- *			separate routines
- *			status display
- */
-
-/*
- * Compressed packet format:
- *
- * The first octet contains the packet type (top 3 bits), TCP
- * 'push' bit, and flags that indicate which of the 4 TCP sequence
- * numbers have changed (bottom 5 bits).  The next octet is a
- * conversation number that associates a saved IP/TCP header with
- * the compressed packet.  The next two octets are the TCP checksum
- * from the original datagram.  The next 0 to 15 octets are
- * sequence number changes, one change per bit set in the header
- * (there may be no changes and there are two special cases where
- * the receiver implicitly knows what changed -- see below).
- *
- * There are 5 numbers which can change (they are always inserted
- * in the following order): TCP urgent pointer, window,
- * acknowledgment, sequence number and IP ID.  (The urgent pointer
- * is different from the others in that its value is sent, not the
- * change in value.)  Since typical use of SLIP links is biased
- * toward small packets (see comments on MTU/MSS below), changes
- * use a variable length coding with one octet for numbers in the
- * range 1 - 255 and 3 octets (0, MSB, LSB) for numbers in the
- * range 256 - 65535 or 0.  (If the change in sequence number or
- * ack is more than 65535, an uncompressed packet is sent.)
- */
-
-/*
- * Packet types (must not conflict with IP protocol version)
- *
- * The top nibble of the first octet is the packet type.  There are
- * three possible types: IP (not proto TCP or tcp with one of the
- * control flags set); uncompressed TCP (a normal IP/TCP packet but
- * with the 8-bit protocol field replaced by an 8-bit connection id --
- * this type of packet syncs the sender & receiver); and compressed
- * TCP (described above).
- *
- * LSB of 4-bit field is TCP "PUSH" bit (a worthless anachronism) and
- * is logically part of the 4-bit "changes" field that follows.  Top
- * three bits are actual packet type.  For backward compatibility
- * and in the interest of conserving bits, numbers are chosen so the
- * IP protocol version number (4) which normally appears in this nibble
- * means "IP packet".
- */
-
-
-#include <linux/ip.h>
-#include <linux/tcp.h>
-
-/* SLIP compression masks for len/vers byte */
-#define SL_TYPE_IP 0x40
-#define SL_TYPE_UNCOMPRESSED_TCP 0x70
-#define SL_TYPE_COMPRESSED_TCP 0x80
-#define SL_TYPE_ERROR 0x00
-
-/* Bits in first octet of compressed packet */
-#define NEW_C	0x40	/* flag bits for what changed in a packet */
-#define NEW_I	0x20
-#define NEW_S	0x08
-#define NEW_A	0x04
-#define NEW_W	0x02
-#define NEW_U	0x01
-
-/* reserved, special-case values of above */
-#define SPECIAL_I (NEW_S|NEW_W|NEW_U)		/* echoed interactive traffic */
-#define SPECIAL_D (NEW_S|NEW_A|NEW_W|NEW_U)	/* unidirectional data */
-#define SPECIALS_MASK (NEW_S|NEW_A|NEW_W|NEW_U)
-
-#define TCP_PUSH_BIT 0x10
-
-/*
- * data type and sizes conversion assumptions:
- *
- *	VJ code		KA9Q style	generic
- *	u_char		byte_t		unsigned char	 8 bits
- *	u_short		int16		unsigned short	16 bits
- *	u_int		int16		unsigned short	16 bits
- *	u_long		unsigned long	unsigned long	32 bits
- *	int		int32		long		32 bits
- */
-
-typedef __u8 byte_t;
-typedef __u32 int32;
-
-/*
- * "state" data for each active tcp conversation on the wire.  This is
- * basically a copy of the entire IP/TCP header from the last packet
- * we saw from the conversation together with a small identifier
- * the transmit & receive ends of the line use to locate saved header.
- */
-struct cstate {
-	byte_t	cs_this;	/* connection id number (xmit) */
-	struct cstate *next;	/* next in ring (xmit) */
-	struct iphdr cs_ip;	/* ip/tcp hdr from most recent packet */
-	struct tcphdr cs_tcp;
-	unsigned char cs_ipopt[64];
-	unsigned char cs_tcpopt[64];
-	int cs_hsize;
-};
-#define NULLSLSTATE	(struct cstate *)0
-
-/*
- * all the state data for one serial line (we need one of these per line).
- */
-struct slcompress {
-	struct cstate *tstate;	/* transmit connection states (array)*/
-	struct cstate *rstate;	/* receive connection states (array)*/
-
-	byte_t tslot_limit;	/* highest transmit slot id (0-l)*/
-	byte_t rslot_limit;	/* highest receive slot id (0-l)*/
-
-	byte_t xmit_oldest;	/* oldest xmit in ring */
-	byte_t xmit_current;	/* most recent xmit id */
-	byte_t recv_current;	/* most recent rcvd id */
-
-	byte_t flags;
-#define SLF_TOSS	0x01	/* tossing rcvd frames until id received */
-
-	int32 sls_o_nontcp;	/* outbound non-TCP packets */
-	int32 sls_o_tcp;	/* outbound TCP packets */
-	int32 sls_o_uncompressed;	/* outbound uncompressed packets */
-	int32 sls_o_compressed;	/* outbound compressed packets */
-	int32 sls_o_searches;	/* searches for connection state */
-	int32 sls_o_misses;	/* times couldn't find conn. state */
-
-	int32 sls_i_uncompressed;	/* inbound uncompressed packets */
-	int32 sls_i_compressed;	/* inbound compressed packets */
-	int32 sls_i_error;	/* inbound error packets */
-	int32 sls_i_tossed;	/* inbound packets tossed because of error */
-
-	int32 sls_i_runt;
-	int32 sls_i_badcheck;
-};
-#define NULLSLCOMPR	(struct slcompress *)0
-
-/* In slhc.c: */
-struct slcompress *slhc_init(const void *ctx, int rslots, int tslots);
-
-void slhc_free(struct slcompress *comp);
-
-int slhc_compress(struct slcompress *comp, unsigned char *icp, int isize,
-		  unsigned char *ocp, unsigned char **cpp, int compress_cid);
-int slhc_uncompress(struct slcompress *comp, unsigned char *icp, int isize);
-int slhc_remember(struct slcompress *comp, unsigned char *icp, int isize);
-int slhc_toss(struct slcompress *comp);
-
-void slhc_i_status(struct slcompress *comp);
-void slhc_o_status(struct slcompress *comp);
-
-#endif	/* _SLHC_H */
diff --git a/include/osmocom/msc/system_information.h b/include/osmocom/msc/system_information.h
deleted file mode 100644
index 854b7e3..0000000
--- a/include/osmocom/msc/system_information.h
+++ /dev/null
@@ -1,22 +0,0 @@
-#ifndef _SYSTEM_INFO_H
-#define _SYSTEM_INFO_H
-
-#include <osmocom/gsm/sysinfo.h>
-
-#include <osmocom/msc/arfcn_range_encode.h>
-
-struct gsm_bts;
-
-int gsm_generate_si(struct gsm_bts *bts, enum osmo_sysinfo_type type);
-size_t si2q_earfcn_count(const struct osmo_earfcn_si2q *e);
-unsigned range1024_p(unsigned n);
-unsigned range512_q(unsigned m);
-int range_encode(enum gsm48_range r, int *arfcns, int arfcns_used, int *w,
-		 int f0, uint8_t *chan_list);
-uint8_t si2q_num(struct gsm_bts *bts);
-int bts_earfcn_add(struct gsm_bts *bts, uint16_t earfcn, uint8_t thresh_hi, uint8_t thresh_lo, uint8_t prio,
-		   uint8_t qrx, uint8_t meas_bw);
-int bts_uarfcn_del(struct gsm_bts *bts, uint16_t arfcn, uint16_t scramble);
-int bts_uarfcn_add(struct gsm_bts *bts, uint16_t arfcn, uint16_t scramble,
-		   bool diversity);
-#endif
diff --git a/include/osmocom/msc/trau_mux.h b/include/osmocom/msc/trau_mux.h
deleted file mode 100644
index 08863bf..0000000
--- a/include/osmocom/msc/trau_mux.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Simple TRAU frame reflector to route voice calls */
-
-/* (C) 2009 by Harald Welte <laforge at gnumonks.org>
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-/* The "TRAU mux map" defines which particular 16kbit sub-slot (in which E1
- * timeslot on which E1 interface) should be directly muxed to which other 
- * sub-slot.  Entries in the mux map are always bi-directional. 
- *
- * The idea of all this is to directly switch voice channels in the BSC
- * from one phone to another.  We do this right now since we don't support
- * any external interface for voice channels, and in the future as an
- * optimization to routing them externally.
- */
-
-#include <stdint.h>
-#include <osmocom/msc/gsm_data.h>
-#include <osmocom/msc/mncc.h>
-
-struct decoded_trau_frame;
-
-/* map a TRAU mux map entry */
-int trau_mux_map(const struct gsm_e1_subslot *src,
-		 const struct gsm_e1_subslot *dst);
-int trau_mux_map_lchan(const struct gsm_lchan *src,	
-			const struct gsm_lchan *dst);
-
-/* unmap a TRAU mux map entry */
-int trau_mux_unmap(const struct gsm_e1_subslot *ss, uint32_t callref);
-
-/* we get called by subchan_demux */
-int trau_mux_input(struct gsm_e1_subslot *src_e1_ss,
-		   const uint8_t *trau_bits, int num_bits);
-
-/* add a trau receiver */
-int trau_recv_lchan(struct gsm_lchan *lchan, uint32_t callref);
-
-/* send trau from application */
-int trau_send_frame(struct gsm_lchan *lchan, struct gsm_data_frame *frame);
-
-/* switch trau muxer to new lchan */
-int switch_trau_mux(struct gsm_lchan *old_lchan, struct gsm_lchan *new_lchan);
-
-/* callback invoked if we receive TRAU frames */
-int subch_cb(struct subch_demux *dmx, int ch, uint8_t *data, int len, void *_priv);
-
-/* TRAU frame transcoding */
-struct msgb *trau_decode_fr(uint32_t callref,
-	const struct decoded_trau_frame *tf);
-struct msgb *trau_decode_efr(uint32_t callref,
-	const struct decoded_trau_frame *tf);
-void trau_encode_fr(struct decoded_trau_frame *tf,
-	const unsigned char *data);
-void trau_encode_efr(struct decoded_trau_frame *tf,
-	const unsigned char *data);
diff --git a/include/osmocom/msc/trau_upqueue.h b/include/osmocom/msc/trau_upqueue.h
deleted file mode 100644
index ecc7658..0000000
--- a/include/osmocom/msc/trau_upqueue.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef _TRAU_UPQUEUE_H
-#define _TRAU_UPQUEUE_H
-
-void trau_tx_to_mncc(struct gsm_network *net, struct msgb *msg);
-
-#endif /* _TRAU_UPQUEUE_H */
-
diff --git a/include/osmocom/msc/vty.h b/include/osmocom/msc/vty.h
index f705601..ff85fa0 100644
--- a/include/osmocom/msc/vty.h
+++ b/include/osmocom/msc/vty.h
@@ -17,27 +17,11 @@
 
 enum bsc_vty_node {
 	GSMNET_NODE = _LAST_OSMOVTY_NODE + 1,
-	BTS_NODE,
-	TRX_NODE,
-	TS_NODE,
 	SUBSCR_NODE,
-	MGCP_NODE,
-	GBPROXY_NODE,
-	SGSN_NODE,
-	OML_NODE,
-	NAT_NODE,
-	NAT_BSC_NODE,
 	MSC_NODE,
-	OM2K_NODE,
-	OM2K_CON_GROUP_NODE,
-	TRUNK_NODE,
-	PGROUP_NODE,
 	MNCC_INT_NODE,
-	NITB_NODE,
-	BSC_NODE,
 	SMPP_NODE,
 	SMPP_ESME_NODE,
-	GTPHUB_NODE,
 	HLR_NODE,
 };
 
diff --git a/src/libcommon-cs/a_reset.c b/src/libcommon-cs/a_reset.c
index 3ee0058..d2f4f59 100644
--- a/src/libcommon-cs/a_reset.c
+++ b/src/libcommon-cs/a_reset.c
@@ -27,7 +27,6 @@
 #include <string.h>
 #include <osmocom/msc/debug.h>
 #include <osmocom/msc/bsc_msc_data.h>
-#include <osmocom/msc/osmo_bsc_sigtran.h>
 
 #define RESET_RESEND_INTERVAL 2	/* sec */
 #define RESET_RESEND_TIMER_NO 1234	/* FIXME: dig out the real timer number */
diff --git a/src/libcommon/Makefile.am b/src/libcommon/Makefile.am
index 18272c5..8f70da7 100644
--- a/src/libcommon/Makefile.am
+++ b/src/libcommon/Makefile.am
@@ -24,7 +24,6 @@
 	common_vty.c \
 	debug.c \
 	gsm_data.c \
-	gsm_data_shared.c \
 	gsup_client.c \
 	oap_client.c \
 	socket.c \
diff --git a/src/libcommon/common_vty.c b/src/libcommon/common_vty.c
index 6037dda..71c607e 100644
--- a/src/libcommon/common_vty.c
+++ b/src/libcommon/common_vty.c
@@ -42,25 +42,11 @@
 		vty->node = CONFIG_NODE;
 		vty->index = NULL;
 		break;
-	case TS_NODE:
-		vty->node = TRX_NODE;
-		{
-			/* set vty->index correctly ! */
-			struct gsm_bts_trx_ts *ts = vty->index;
-			vty->index = ts->trx;
-			vty->index_sub = &ts->trx->description;
-		}
-		break;
-	case TRUNK_NODE:
-		vty->node = MGCP_NODE;
-		vty->index = NULL;
-		break;
 	case SMPP_ESME_NODE:
 		vty->node = SMPP_NODE;
 		vty->index = NULL;
 		break;
 	case SMPP_NODE:
-	case MGCP_NODE:
 	case MSC_NODE:
 	case MNCC_INT_NODE:
 		vty->node = CONFIG_NODE;
diff --git a/src/libcommon/gsm_data.c b/src/libcommon/gsm_data.c
index 4ab8a20..bdcdf02 100644
--- a/src/libcommon/gsm_data.c
+++ b/src/libcommon/gsm_data.c
@@ -29,73 +29,13 @@
 #include <osmocom/core/linuxlist.h>
 #include <osmocom/core/talloc.h>
 #include <osmocom/gsm/gsm_utils.h>
-#include <osmocom/gsm/abis_nm.h>
 #include <osmocom/core/statistics.h>
 #include <osmocom/gsm/protocol/gsm_04_08.h>
 
 #include <osmocom/msc/gsm_data.h>
 #include <osmocom/msc/bsc_msc_data.h>
-#include <osmocom/msc/abis_nm.h>
 
 void *tall_bsc_ctx;
-
-static LLIST_HEAD(bts_models);
-
-void set_ts_e1link(struct gsm_bts_trx_ts *ts, uint8_t e1_nr,
-		   uint8_t e1_ts, uint8_t e1_ts_ss)
-{
-	ts->e1_link.e1_nr = e1_nr;
-	ts->e1_link.e1_ts = e1_ts;
-	ts->e1_link.e1_ts_ss = e1_ts_ss;
-}
-
-const struct value_string bts_type_descs[_NUM_GSM_BTS_TYPE+1] = {
-	{ GSM_BTS_TYPE_UNKNOWN,		"Unknown BTS Type" },
-	{ GSM_BTS_TYPE_BS11,		"Siemens BTS (BS-11 or compatible)" },
-	{ GSM_BTS_TYPE_NANOBTS,		"ip.access nanoBTS or compatible" },
-	{ GSM_BTS_TYPE_RBS2000,		"Ericsson RBS2000 Series" },
-	{ GSM_BTS_TYPE_NOKIA_SITE,	"Nokia {Metro,Ultra,In}Site" },
-	{ GSM_BTS_TYPE_OSMOBTS,		"sysmocom sysmoBTS" },
-	{ 0,				NULL }
-};
-
-struct gsm_bts_trx *gsm_bts_trx_by_nr(struct gsm_bts *bts, int nr)
-{
-	struct gsm_bts_trx *trx;
-
-	llist_for_each_entry(trx, &bts->trx_list, list) {
-		if (trx->nr == nr)
-			return trx;
-	}
-	return NULL;
-}
-
-/* Search for a BTS in the given Location Area; optionally start searching
- * with start_bts (for continuing to search after the first result) */
-struct gsm_bts *gsm_bts_by_lac(struct gsm_network *net, unsigned int lac,
-				struct gsm_bts *start_bts)
-{
-	int i;
-	struct gsm_bts *bts;
-	int skip = 0;
-
-	if (start_bts)
-		skip = 1;
-
-	for (i = 0; i < net->num_bts; i++) {
-		bts = gsm_bts_num(net, i);
-
-		if (skip) {
-			if (start_bts == bts)
-				skip = 0;
-			continue;
-		}
-
-		if (lac == GSM_LAC_RESERVED_ALL_BTS || bts->location_area_code == lac)
-			return bts;
-	}
-	return NULL;
-}
 
 static const struct value_string auth_policy_names[] = {
 	{ GSM_AUTH_POLICY_CLOSED,	"closed" },
@@ -133,45 +73,6 @@
 	return get_value_string(rrlp_mode_names, mode);
 }
 
-static const struct value_string bts_gprs_mode_names[] = {
-	{ BTS_GPRS_NONE,	"none" },
-	{ BTS_GPRS_GPRS,	"gprs" },
-	{ BTS_GPRS_EGPRS,	"egprs" },
-	{ 0,			NULL }
-};
-
-enum bts_gprs_mode bts_gprs_mode_parse(const char *arg, int *valid)
-{
-	int rc;
-
-	rc = get_string_value(bts_gprs_mode_names, arg);
-	if (valid)
-		*valid = rc != -EINVAL;
-	return rc;
-}
-
-const char *bts_gprs_mode_name(enum bts_gprs_mode mode)
-{
-	return get_value_string(bts_gprs_mode_names, mode);
-}
-
-void gprs_ra_id_by_bts(struct gprs_ra_id *raid, struct gsm_bts *bts)
-{
-	raid->mcc = bts->network->country_code;
-	raid->mnc = bts->network->network_code;
-	raid->lac = bts->location_area_code;
-	raid->rac = bts->gprs.rac;
-}
-
-int gsm48_ra_id_by_bts(uint8_t *buf, struct gsm_bts *bts)
-{
-	struct gprs_ra_id raid;
-
-	gprs_ra_id_by_bts(&raid, bts);
-
-	return gsm48_construct_ra(buf, &raid);
-}
-
 int gsm_parse_reg(void *ctx, regex_t *reg, char **str, int argc, const char **argv)
 {
 	int ret;
@@ -196,9 +97,6 @@
 
 	return ret;
 }
-
-/* Assume there are only 256 possible bts */
-osmo_static_assert(sizeof(((struct gsm_bts *) 0)->nr) == 1, _bts_nr_is_256);
 
 bool classmark_is_r99(struct gsm_classmark *cm)
 {
diff --git a/src/libcommon/gsm_data_shared.c b/src/libcommon/gsm_data_shared.c
deleted file mode 100644
index 9382889..0000000
--- a/src/libcommon/gsm_data_shared.c
+++ /dev/null
@@ -1,853 +0,0 @@
-/* (C) 2008-2010 by Harald Welte <laforge at gnumonks.org>
- *
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <ctype.h>
-
-#include <netinet/in.h>
-
-#include <osmocom/core/linuxlist.h>
-#include <osmocom/core/talloc.h>
-#include <osmocom/gsm/gsm_utils.h>
-#include <osmocom/gsm/abis_nm.h>
-#include <osmocom/core/statistics.h>
-
-#include <osmocom/msc/gsm_data.h>
-
-void gsm_abis_mo_reset(struct gsm_abis_mo *mo)
-{
-	mo->nm_state.operational = NM_OPSTATE_NULL;
-	mo->nm_state.availability = NM_AVSTATE_POWER_OFF;
-}
-
-static void gsm_mo_init(struct gsm_abis_mo *mo, struct gsm_bts *bts,
-			uint8_t obj_class, uint8_t p1, uint8_t p2, uint8_t p3)
-{
-	mo->bts = bts;
-	mo->obj_class = obj_class;
-	mo->obj_inst.bts_nr = p1;
-	mo->obj_inst.trx_nr = p2;
-	mo->obj_inst.ts_nr = p3;
-	gsm_abis_mo_reset(mo);
-}
-
-const struct value_string bts_attribute_names[] = {
-	OSMO_VALUE_STRING(BTS_TYPE_VARIANT),
-	OSMO_VALUE_STRING(BTS_SUB_MODEL),
-	OSMO_VALUE_STRING(TRX_PHY_VERSION),
-	{ 0, NULL }
-};
-
-enum bts_attribute str2btsattr(const char *s)
-{
-	return get_string_value(bts_attribute_names, s);
-}
-
-const char *btsatttr2str(enum bts_attribute v)
-{
-	return get_value_string(bts_attribute_names, v);
-}
-
-const struct value_string osmo_bts_variant_names[_NUM_BTS_VARIANT + 1] = {
-	{ BTS_UNKNOWN,		"unknown" },
-	{ BTS_OSMO_LITECELL15,	"osmo-bts-lc15" },
-	{ BTS_OSMO_OCTPHY,	"osmo-bts-octphy" },
-	{ BTS_OSMO_SYSMO,	"osmo-bts-sysmo" },
-	{ BTS_OSMO_TRX,		"omso-bts-trx" },
-	{ 0, NULL }
-};
-
-enum gsm_bts_type_variant str2btsvariant(const char *arg)
-{
-	return get_string_value(osmo_bts_variant_names, arg);
-}
-
-const char *btsvariant2str(enum gsm_bts_type_variant v)
-{
-	return get_value_string(osmo_bts_variant_names, v);
-}
-
-const struct value_string bts_type_names[_NUM_GSM_BTS_TYPE + 1] = {
-	{ GSM_BTS_TYPE_UNKNOWN,		"unknown" },
-	{ GSM_BTS_TYPE_BS11,		"bs11" },
-	{ GSM_BTS_TYPE_NANOBTS,		"nanobts" },
-	{ GSM_BTS_TYPE_RBS2000,		"rbs2000" },
-	{ GSM_BTS_TYPE_NOKIA_SITE,	"nokia_site" },
-	{ GSM_BTS_TYPE_OSMOBTS,		"sysmobts" },
-	{ 0, NULL }
-};
-
-enum gsm_bts_type str2btstype(const char *arg)
-{
-	return get_string_value(bts_type_names, arg);
-}
-
-const char *btstype2str(enum gsm_bts_type type)
-{
-	return get_value_string(bts_type_names, type);
-}
-
-const struct value_string gsm_bts_features_descs[] = {
-	{ BTS_FEAT_HSCSD,		"HSCSD" },
-	{ BTS_FEAT_GPRS,		"GPRS" },
-	{ BTS_FEAT_EGPRS,		"EGPRS" },
-	{ BTS_FEAT_ECSD,		"ECSD" },
-	{ BTS_FEAT_HOPPING,		"Frequency Hopping" },
-	{ BTS_FEAT_MULTI_TSC,		"Multi-TSC" },
-	{ BTS_FEAT_OML_ALERTS,		"OML Alerts" },
-	{ BTS_FEAT_AGCH_PCH_PROP,	"AGCH/PCH proportional allocation" },
-	{ BTS_FEAT_CBCH,		"CBCH" },
-	{ 0, NULL }
-};
-
-const struct value_string gsm_chreq_descs[] = {
-	{ GSM_CHREQ_REASON_EMERG,	"emergency call" },
-	{ GSM_CHREQ_REASON_PAG,		"answer to paging" },
-	{ GSM_CHREQ_REASON_CALL,	"call re-establishment" },
-	{ GSM_CHREQ_REASON_LOCATION_UPD,"Location updating" },
-	{ GSM_CHREQ_REASON_PDCH,	"one phase packet access" },
-	{ GSM_CHREQ_REASON_OTHER,	"other" },
-	{ 0,				NULL }
-};
-
-const struct value_string gsm_pchant_names[13] = {
-	{ GSM_PCHAN_NONE,	"NONE" },
-	{ GSM_PCHAN_CCCH,	"CCCH" },
-	{ GSM_PCHAN_CCCH_SDCCH4,"CCCH+SDCCH4" },
-	{ GSM_PCHAN_TCH_F,	"TCH/F" },
-	{ GSM_PCHAN_TCH_H,	"TCH/H" },
-	{ GSM_PCHAN_SDCCH8_SACCH8C, "SDCCH8" },
-	{ GSM_PCHAN_PDCH,	"PDCH" },
-	{ GSM_PCHAN_TCH_F_PDCH,	"TCH/F_PDCH" },
-	{ GSM_PCHAN_UNKNOWN,	"UNKNOWN" },
-	{ GSM_PCHAN_CCCH_SDCCH4_CBCH, "CCCH+SDCCH4+CBCH" },
-	{ GSM_PCHAN_SDCCH8_SACCH8C_CBCH, "SDCCH8+CBCH" },
-	{ GSM_PCHAN_TCH_F_TCH_H_PDCH, "TCH/F_TCH/H_PDCH" },
-	{ 0,			NULL }
-};
-
-const struct value_string gsm_pchant_descs[13] = {
-	{ GSM_PCHAN_NONE,	"Physical Channel not configured" },
-	{ GSM_PCHAN_CCCH,	"FCCH + SCH + BCCH + CCCH (Comb. IV)" },
-	{ GSM_PCHAN_CCCH_SDCCH4,
-		"FCCH + SCH + BCCH + CCCH + 4 SDCCH + 2 SACCH (Comb. V)" },
-	{ GSM_PCHAN_TCH_F,	"TCH/F + FACCH/F + SACCH (Comb. I)" },
-	{ GSM_PCHAN_TCH_H,	"2 TCH/H + 2 FACCH/H + 2 SACCH (Comb. II)" },
-	{ GSM_PCHAN_SDCCH8_SACCH8C, "8 SDCCH + 4 SACCH (Comb. VII)" },
-	{ GSM_PCHAN_PDCH,	"Packet Data Channel for GPRS/EDGE" },
-	{ GSM_PCHAN_TCH_F_PDCH,	"Dynamic TCH/F or GPRS PDCH" },
-	{ GSM_PCHAN_UNKNOWN,	"Unknown / Unsupported channel combination" },
-	{ GSM_PCHAN_CCCH_SDCCH4_CBCH, "FCCH + SCH + BCCH + CCCH + CBCH + 3 SDCCH + 2 SACCH (Comb. V)" },
-	{ GSM_PCHAN_SDCCH8_SACCH8C_CBCH, "7 SDCCH + 4 SACCH + CBCH (Comb. VII)" },
-	{ GSM_PCHAN_TCH_F_TCH_H_PDCH, "Dynamic TCH/F or TCH/H or GPRS PDCH" },
-	{ 0,			NULL }
-};
-
-const char *gsm_pchan_name(enum gsm_phys_chan_config c)
-{
-	return get_value_string(gsm_pchant_names, c);
-}
-
-enum gsm_phys_chan_config gsm_pchan_parse(const char *name)
-{
-	return get_string_value(gsm_pchant_names, name);
-}
-
-/* TODO: move to libosmocore, next to gsm_chan_t_names? */
-const char *gsm_lchant_name(enum gsm_chan_t c)
-{
-	return get_value_string(gsm_chan_t_names, c);
-}
-
-static const struct value_string lchan_s_names[] = {
-	{ LCHAN_S_NONE,		"NONE" },
-	{ LCHAN_S_ACT_REQ,	"ACTIVATION REQUESTED" },
-	{ LCHAN_S_ACTIVE,	"ACTIVE" },
-	{ LCHAN_S_INACTIVE,	"INACTIVE" },
-	{ LCHAN_S_REL_REQ,	"RELEASE REQUESTED" },
-	{ LCHAN_S_REL_ERR,	"RELEASE DUE ERROR" },
-	{ LCHAN_S_BROKEN,	"BROKEN UNUSABLE" },
-	{ 0,			NULL }
-};
-
-const char *gsm_lchans_name(enum gsm_lchan_state s)
-{
-	return get_value_string(lchan_s_names, s);
-}
-
-static const struct value_string chreq_names[] = {
-	{ GSM_CHREQ_REASON_EMERG,	"EMERGENCY" },
-	{ GSM_CHREQ_REASON_PAG,		"PAGING" },
-	{ GSM_CHREQ_REASON_CALL,	"CALL" },
-	{ GSM_CHREQ_REASON_LOCATION_UPD,"LOCATION_UPDATE" },
-	{ GSM_CHREQ_REASON_OTHER,	"OTHER" },
-	{ 0,				NULL }
-};
-
-const char *gsm_chreq_name(enum gsm_chreq_reason_t c)
-{
-	return get_value_string(chreq_names, c);
-}
-
-struct gsm_bts *gsm_bts_num(struct gsm_network *net, int num)
-{
-	struct gsm_bts *bts;
-
-	if (num >= net->num_bts)
-		return NULL;
-
-	llist_for_each_entry(bts, &net->bts_list, list) {
-		if (bts->nr == num)
-			return bts;
-	}
-
-	return NULL;
-}
-
-struct gsm_bts_trx *gsm_bts_trx_alloc(struct gsm_bts *bts)
-{
-	struct gsm_bts_trx *trx = talloc_zero(bts, struct gsm_bts_trx);
-	int k;
-
-	if (!trx)
-		return NULL;
-
-	trx->bts = bts;
-	trx->nr = bts->num_trx++;
-	trx->mo.nm_state.administrative = NM_STATE_UNLOCKED;
-
-	gsm_mo_init(&trx->mo, bts, NM_OC_RADIO_CARRIER,
-		    bts->nr, trx->nr, 0xff);
-	gsm_mo_init(&trx->bb_transc.mo, bts, NM_OC_BASEB_TRANSC,
-		    bts->nr, trx->nr, 0xff);
-
-	for (k = 0; k < TRX_NR_TS; k++) {
-		struct gsm_bts_trx_ts *ts = &trx->ts[k];
-		int l;
-
-		ts->trx = trx;
-		ts->nr = k;
-		ts->pchan = GSM_PCHAN_NONE;
-		ts->dyn.pchan_is = GSM_PCHAN_NONE;
-		ts->dyn.pchan_want = GSM_PCHAN_NONE;
-		ts->tsc = -1;
-
-		gsm_mo_init(&ts->mo, bts, NM_OC_CHANNEL,
-			    bts->nr, trx->nr, ts->nr);
-
-		ts->hopping.arfcns.data_len = sizeof(ts->hopping.arfcns_data);
-		ts->hopping.arfcns.data = ts->hopping.arfcns_data;
-		ts->hopping.ma.data_len = sizeof(ts->hopping.ma_data);
-		ts->hopping.ma.data = ts->hopping.ma_data;
-
-		for (l = 0; l < TS_MAX_LCHAN; l++) {
-			struct gsm_lchan *lchan;
-			char *name;
-			lchan = &ts->lchan[l];
-
-			lchan->ts = ts;
-			lchan->nr = l;
-			lchan->type = GSM_LCHAN_NONE;
-
-			name = gsm_lchan_name_compute(lchan);
-			lchan->name = talloc_strdup(trx, name);
-#ifndef ROLE_BSC
-			INIT_LLIST_HEAD(&lchan->sapi_cmds);
-#endif
-		}
-	}
-
-	if (trx->nr != 0)
-		trx->nominal_power = bts->c0->nominal_power;
-
-	llist_add_tail(&trx->list, &bts->trx_list);
-
-	return trx;
-}
-
-
-static const uint8_t bts_nse_timer_default[] = { 3, 3, 3, 3, 30, 3, 10 };
-static const uint8_t bts_cell_timer_default[] =
-				{ 3, 3, 3, 3, 3, 10, 3, 10, 3, 10, 3 };
-static const struct gprs_rlc_cfg rlc_cfg_default = {
-	.parameter = {
-		[RLC_T3142] = 20,
-		[RLC_T3169] = 5,
-		[RLC_T3191] = 5,
-		[RLC_T3193] = 160, /* 10ms */
-		[RLC_T3195] = 5,
-		[RLC_N3101] = 10,
-		[RLC_N3103] = 4,
-		[RLC_N3105] = 8,
-		[CV_COUNTDOWN] = 15,
-		[T_DL_TBF_EXT] = 250 * 10, /* ms */
-		[T_UL_TBF_EXT] = 250 * 10, /* ms */
-	},
-	.paging = {
-		.repeat_time = 5 * 50, /* ms */
-		.repeat_count = 3,
-	},
-	.cs_mask = 0x1fff,
-	.initial_cs = 2,
-	.initial_mcs = 6,
-};
-
-struct gsm_bts *gsm_bts_alloc(void *ctx, uint8_t bts_num)
-{
-	struct gsm_bts *bts = talloc_zero(ctx, struct gsm_bts);
-	int i;
-
-	if (!bts)
-		return NULL;
-
-	bts->nr = bts_num;
-	bts->num_trx = 0;
-	INIT_LLIST_HEAD(&bts->trx_list);
-	bts->ms_max_power = 15;	/* dBm */
-
-	gsm_mo_init(&bts->mo, bts, NM_OC_BTS,
-			bts->nr, 0xff, 0xff);
-	gsm_mo_init(&bts->site_mgr.mo, bts, NM_OC_SITE_MANAGER,
-			0xff, 0xff, 0xff);
-
-	for (i = 0; i < ARRAY_SIZE(bts->gprs.nsvc); i++) {
-		bts->gprs.nsvc[i].bts = bts;
-		bts->gprs.nsvc[i].id = i;
-		gsm_mo_init(&bts->gprs.nsvc[i].mo, bts, NM_OC_GPRS_NSVC,
-				bts->nr, i, 0xff);
-	}
-	memcpy(&bts->gprs.nse.timer, bts_nse_timer_default,
-		sizeof(bts->gprs.nse.timer));
-	gsm_mo_init(&bts->gprs.nse.mo, bts, NM_OC_GPRS_NSE,
-			bts->nr, 0xff, 0xff);
-	memcpy(&bts->gprs.cell.timer, bts_cell_timer_default,
-		sizeof(bts->gprs.cell.timer));
-	gsm_mo_init(&bts->gprs.cell.mo, bts, NM_OC_GPRS_CELL,
-			bts->nr, 0xff, 0xff);
-	memcpy(&bts->gprs.cell.rlc_cfg, &rlc_cfg_default,
-		sizeof(bts->gprs.cell.rlc_cfg));
-
-	/* create our primary TRX */
-	bts->c0 = gsm_bts_trx_alloc(bts);
-	if (!bts->c0) {
-		talloc_free(bts);
-		return NULL;
-	}
-	bts->c0->ts[0].pchan = GSM_PCHAN_CCCH_SDCCH4;
-
-	bts->rach_b_thresh = -1;
-	bts->rach_ldavg_slots = -1;
-	bts->paging.free_chans_need = -1;
-	bts->features.data = &bts->_features_data[0];
-	bts->features.data_len = sizeof(bts->_features_data);
-
-	/* si handling */
-	bts->bcch_change_mark = 1;
-
-	return bts;
-}
-
-/* reset the state of all MO in the BTS */
-void gsm_bts_mo_reset(struct gsm_bts *bts)
-{
-	struct gsm_bts_trx *trx;
-	unsigned int i;
-
-	gsm_abis_mo_reset(&bts->mo);
-	gsm_abis_mo_reset(&bts->site_mgr.mo);
-	for (i = 0; i < ARRAY_SIZE(bts->gprs.nsvc); i++)
-		gsm_abis_mo_reset(&bts->gprs.nsvc[i].mo);
-	gsm_abis_mo_reset(&bts->gprs.nse.mo);
-	gsm_abis_mo_reset(&bts->gprs.cell.mo);
-
-	llist_for_each_entry(trx, &bts->trx_list, list) {
-		gsm_abis_mo_reset(&trx->mo);
-		gsm_abis_mo_reset(&trx->bb_transc.mo);
-
-		for (i = 0; i < ARRAY_SIZE(trx->ts); i++) {
-			struct gsm_bts_trx_ts *ts = &trx->ts[i];
-			gsm_abis_mo_reset(&ts->mo);
-		}
-	}
-}
-
-struct gsm_bts_trx *gsm_bts_trx_num(const struct gsm_bts *bts, int num)
-{
-	struct gsm_bts_trx *trx;
-
-	if (num >= bts->num_trx)
-		return NULL;
-
-	llist_for_each_entry(trx, &bts->trx_list, list) {
-		if (trx->nr == num)
-			return trx;
-	}
-
-	return NULL;
-}
-
-static char ts2str[255];
-
-char *gsm_trx_name(const struct gsm_bts_trx *trx)
-{
-	if (!trx)
-		snprintf(ts2str, sizeof(ts2str), "(trx=NULL)");
-	else
-		snprintf(ts2str, sizeof(ts2str), "(bts=%d,trx=%d)",
-			 trx->bts->nr, trx->nr);
-
-	return ts2str;
-}
-
-
-char *gsm_ts_name(const struct gsm_bts_trx_ts *ts)
-{
-	snprintf(ts2str, sizeof(ts2str), "(bts=%d,trx=%d,ts=%d)",
-		 ts->trx->bts->nr, ts->trx->nr, ts->nr);
-
-	return ts2str;
-}
-
-/*! Log timeslot number with full pchan information */
-char *gsm_ts_and_pchan_name(const struct gsm_bts_trx_ts *ts)
-{
-	switch (ts->pchan) {
-	case GSM_PCHAN_TCH_F_TCH_H_PDCH:
-		if (ts->dyn.pchan_is == ts->dyn.pchan_want)
-			snprintf(ts2str, sizeof(ts2str),
-				 "(bts=%d,trx=%d,ts=%d,pchan=%s as %s)",
-				 ts->trx->bts->nr, ts->trx->nr, ts->nr,
-				 gsm_pchan_name(ts->pchan),
-				 gsm_pchan_name(ts->dyn.pchan_is));
-		else
-			snprintf(ts2str, sizeof(ts2str),
-				 "(bts=%d,trx=%d,ts=%d,pchan=%s"
-				 " switching %s -> %s)",
-				 ts->trx->bts->nr, ts->trx->nr, ts->nr,
-				 gsm_pchan_name(ts->pchan),
-				 gsm_pchan_name(ts->dyn.pchan_is),
-				 gsm_pchan_name(ts->dyn.pchan_want));
-		break;
-	case GSM_PCHAN_TCH_F_PDCH:
-		if ((ts->flags & TS_F_PDCH_PENDING_MASK) == 0)
-			snprintf(ts2str, sizeof(ts2str),
-				 "(bts=%d,trx=%d,ts=%d,pchan=%s as %s)",
-				 ts->trx->bts->nr, ts->trx->nr, ts->nr,
-				 gsm_pchan_name(ts->pchan),
-				 (ts->flags & TS_F_PDCH_ACTIVE)? "PDCH"
-							       : "TCH/F");
-		else
-			snprintf(ts2str, sizeof(ts2str),
-				 "(bts=%d,trx=%d,ts=%d,pchan=%s"
-				 " switching %s -> %s)",
-				 ts->trx->bts->nr, ts->trx->nr, ts->nr,
-				 gsm_pchan_name(ts->pchan),
-				 (ts->flags & TS_F_PDCH_ACTIVE)? "PDCH"
-							       : "TCH/F",
-				 (ts->flags & TS_F_PDCH_ACT_PENDING)? "PDCH"
-								    : "TCH/F");
-		break;
-	default:
-		snprintf(ts2str, sizeof(ts2str), "(bts=%d,trx=%d,ts=%d,pchan=%s)",
-			 ts->trx->bts->nr, ts->trx->nr, ts->nr,
-			 gsm_pchan_name(ts->pchan));
-		break;
-	}
-
-	return ts2str;
-}
-
-char *gsm_lchan_name_compute(const struct gsm_lchan *lchan)
-{
-	struct gsm_bts_trx_ts *ts = lchan->ts;
-
-	snprintf(ts2str, sizeof(ts2str), "(bts=%d,trx=%d,ts=%d,ss=%d)",
-		 ts->trx->bts->nr, ts->trx->nr, ts->nr, lchan->nr);
-
-	return ts2str;
-}
-
-/* obtain the MO structure for a given object instance */
-struct gsm_abis_mo *
-gsm_objclass2mo(struct gsm_bts *bts, uint8_t obj_class,
-	    const struct abis_om_obj_inst *obj_inst)
-{
-	struct gsm_bts_trx *trx;
-	struct gsm_abis_mo *mo = NULL;
-
-	switch (obj_class) {
-	case NM_OC_BTS:
-		mo = &bts->mo;
-		break;
-	case NM_OC_RADIO_CARRIER:
-		if (obj_inst->trx_nr >= bts->num_trx) {
-			return NULL;
-		}
-		trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
-		mo = &trx->mo;
-		break;
-	case NM_OC_BASEB_TRANSC:
-		if (obj_inst->trx_nr >= bts->num_trx) {
-			return NULL;
-		}
-		trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
-		mo = &trx->bb_transc.mo;
-		break;
-	case NM_OC_CHANNEL:
-		if (obj_inst->trx_nr >= bts->num_trx) {
-			return NULL;
-		}
-		trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
-		if (obj_inst->ts_nr >= TRX_NR_TS)
-			return NULL;
-		mo = &trx->ts[obj_inst->ts_nr].mo;
-		break;
-	case NM_OC_SITE_MANAGER:
-		mo = &bts->site_mgr.mo;
-		break;
-	case NM_OC_BS11:
-		switch (obj_inst->bts_nr) {
-		case BS11_OBJ_CCLK:
-			mo = &bts->bs11.cclk.mo;
-			break;
-		case BS11_OBJ_BBSIG:
-			if (obj_inst->ts_nr > bts->num_trx)
-				return NULL;
-			trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
-			mo = &trx->bs11.bbsig.mo;
-			break;
-		case BS11_OBJ_PA:
-			if (obj_inst->ts_nr > bts->num_trx)
-				return NULL;
-			trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
-			mo = &trx->bs11.pa.mo;
-			break;
-		default:
-			return NULL;
-		}
-		break;
-	case NM_OC_BS11_RACK:
-		mo = &bts->bs11.rack.mo;
-		break;
-	case NM_OC_BS11_ENVABTSE:
-		if (obj_inst->trx_nr >= ARRAY_SIZE(bts->bs11.envabtse))
-			return NULL;
-		mo = &bts->bs11.envabtse[obj_inst->trx_nr].mo;
-		break;
-	case NM_OC_GPRS_NSE:
-		mo = &bts->gprs.nse.mo;
-		break;
-	case NM_OC_GPRS_CELL:
-		mo = &bts->gprs.cell.mo;
-		break;
-	case NM_OC_GPRS_NSVC:
-		if (obj_inst->trx_nr >= ARRAY_SIZE(bts->gprs.nsvc))
-			return NULL;
-		mo = &bts->gprs.nsvc[obj_inst->trx_nr].mo;
-		break;
-	}
-	return mo;
-}
-
-/* obtain the gsm_nm_state data structure for a given object instance */
-struct gsm_nm_state *
-gsm_objclass2nmstate(struct gsm_bts *bts, uint8_t obj_class,
-		 const struct abis_om_obj_inst *obj_inst)
-{
-	struct gsm_abis_mo *mo;
-
-	mo = gsm_objclass2mo(bts, obj_class, obj_inst);
-	if (!mo)
-		return NULL;
-
-	return &mo->nm_state;
-}
-
-/* obtain the in-memory data structure of a given object instance */
-void *
-gsm_objclass2obj(struct gsm_bts *bts, uint8_t obj_class,
-	     const struct abis_om_obj_inst *obj_inst)
-{
-	struct gsm_bts_trx *trx;
-	void *obj = NULL;
-
-	switch (obj_class) {
-	case NM_OC_BTS:
-		obj = bts;
-		break;
-	case NM_OC_RADIO_CARRIER:
-		if (obj_inst->trx_nr >= bts->num_trx) {
-			return NULL;
-		}
-		trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
-		obj = trx;
-		break;
-	case NM_OC_BASEB_TRANSC:
-		if (obj_inst->trx_nr >= bts->num_trx) {
-			return NULL;
-		}
-		trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
-		obj = &trx->bb_transc;
-		break;
-	case NM_OC_CHANNEL:
-		if (obj_inst->trx_nr >= bts->num_trx) {
-			return NULL;
-		}
-		trx = gsm_bts_trx_num(bts, obj_inst->trx_nr);
-		if (obj_inst->ts_nr >= TRX_NR_TS)
-			return NULL;
-		obj = &trx->ts[obj_inst->ts_nr];
-		break;
-	case NM_OC_SITE_MANAGER:
-		obj = &bts->site_mgr;
-		break;
-	case NM_OC_GPRS_NSE:
-		obj = &bts->gprs.nse;
-		break;
-	case NM_OC_GPRS_CELL:
-		obj = &bts->gprs.cell;
-		break;
-	case NM_OC_GPRS_NSVC:
-		if (obj_inst->trx_nr >= ARRAY_SIZE(bts->gprs.nsvc))
-			return NULL;
-		obj = &bts->gprs.nsvc[obj_inst->trx_nr];
-		break;
-	}
-	return obj;
-}
-
-/* See Table 10.5.25 of GSM04.08 */
-uint8_t gsm_pchan2chan_nr(enum gsm_phys_chan_config pchan,
-			  uint8_t ts_nr, uint8_t lchan_nr)
-{
-	uint8_t cbits, chan_nr;
-
-	switch (pchan) {
-	case GSM_PCHAN_TCH_F:
-	case GSM_PCHAN_TCH_F_PDCH:
-		OSMO_ASSERT(lchan_nr == 0);
-		cbits = 0x01;
-		break;
-	case GSM_PCHAN_PDCH:
-		OSMO_ASSERT(lchan_nr == 0);
-		cbits = RSL_CHAN_OSMO_PDCH >> 3;
-		break;
-	case GSM_PCHAN_TCH_H:
-		OSMO_ASSERT(lchan_nr < 2);
-		cbits = 0x02;
-		cbits += lchan_nr;
-		break;
-	case GSM_PCHAN_CCCH_SDCCH4:
-	case GSM_PCHAN_CCCH_SDCCH4_CBCH:
-		/*
-		 * As a special hack for BCCH, lchan_nr == 4 may be passed
-		 * here. This should never be sent in an RSL message.
-		 * See osmo-bts-xxx/oml.c:opstart_compl().
-		 */
-		if (lchan_nr == CCCH_LCHAN)
-			chan_nr = 0;
-		else
-			OSMO_ASSERT(lchan_nr < 4);
-		cbits = 0x04;
-		cbits += lchan_nr;
-		break;
-	case GSM_PCHAN_SDCCH8_SACCH8C:
-	case GSM_PCHAN_SDCCH8_SACCH8C_CBCH:
-		OSMO_ASSERT(lchan_nr < 8);
-		cbits = 0x08;
-		cbits += lchan_nr;
-		break;
-	default:
-	case GSM_PCHAN_CCCH:
-#ifdef ROLE_BSC
-		OSMO_ASSERT(lchan_nr == 0);
-#else
-		/*
-		 * FIXME: On octphy and litecell, we hit above assertion (see
-		 * Max's comment at https://gerrit.osmocom.org/589 ); disabled
-		 * for BTS until this is clarified; remove the #ifdef when it
-		 * is fixed.
-		 */
-#warning "fix caller that passes lchan_nr != 0"
-#endif
-		cbits = 0x10;
-		break;
-	}
-
-	chan_nr = (cbits << 3) | (ts_nr & 0x7);
-
-	return chan_nr;
-}
-
-uint8_t gsm_lchan2chan_nr(const struct gsm_lchan *lchan)
-{
-	enum gsm_phys_chan_config pchan = lchan->ts->pchan;
-	if (pchan == GSM_PCHAN_TCH_F_TCH_H_PDCH)
-		return gsm_lchan_as_pchan2chan_nr(lchan,
-						  lchan->ts->dyn.pchan_is);
-	return gsm_pchan2chan_nr(lchan->ts->pchan, lchan->ts->nr, lchan->nr);
-}
-
-uint8_t gsm_lchan_as_pchan2chan_nr(const struct gsm_lchan *lchan,
-				   enum gsm_phys_chan_config as_pchan)
-{
-	if (lchan->ts->pchan == GSM_PCHAN_TCH_F_TCH_H_PDCH
-	    && as_pchan == GSM_PCHAN_PDCH)
-		return RSL_CHAN_OSMO_PDCH | (lchan->ts->nr & ~RSL_CHAN_NR_MASK);
-	return gsm_pchan2chan_nr(as_pchan, lchan->ts->nr, lchan->nr);
-}
-
-/* return the gsm_lchan for the CBCH (if it exists at all) */
-struct gsm_lchan *gsm_bts_get_cbch(struct gsm_bts *bts)
-{
-	struct gsm_lchan *lchan = NULL;
-	struct gsm_bts_trx *trx = bts->c0;
-
-	if (trx->ts[0].pchan == GSM_PCHAN_CCCH_SDCCH4_CBCH)
-		lchan = &trx->ts[0].lchan[2];
-	else {
-		int i;
-		for (i = 0; i < 8; i++) {
-			if (trx->ts[i].pchan == GSM_PCHAN_SDCCH8_SACCH8C_CBCH) {
-				lchan = &trx->ts[i].lchan[2];
-				break;
-			}
-		}
-	}
-
-	return lchan;
-}
-
-/* determine logical channel based on TRX and channel number IE */
-struct gsm_lchan *rsl_lchan_lookup(struct gsm_bts_trx *trx, uint8_t chan_nr,
-				   int *rc)
-{
-	uint8_t ts_nr = chan_nr & 0x07;
-	uint8_t cbits = chan_nr >> 3;
-	uint8_t lch_idx;
-	struct gsm_bts_trx_ts *ts = &trx->ts[ts_nr];
-	bool ok = true;
-
-	if (rc)
-		*rc = -EINVAL;
-
-	if (cbits == 0x01) {
-		lch_idx = 0;	/* TCH/F */	
-		if (ts->pchan != GSM_PCHAN_TCH_F &&
-		    ts->pchan != GSM_PCHAN_PDCH &&
-		    ts->pchan != GSM_PCHAN_TCH_F_PDCH
-		    && !(ts->pchan == GSM_PCHAN_TCH_F_TCH_H_PDCH
-			 && (ts->dyn.pchan_is == GSM_PCHAN_TCH_F
-			     || ts->dyn.pchan_want == GSM_PCHAN_TCH_F)))
-			ok = false;
-	} else if ((cbits & 0x1e) == 0x02) {
-		lch_idx = cbits & 0x1;	/* TCH/H */
-		if (ts->pchan != GSM_PCHAN_TCH_H
-		    && !(ts->pchan == GSM_PCHAN_TCH_F_TCH_H_PDCH
-			 && (ts->dyn.pchan_is == GSM_PCHAN_TCH_H
-			     || ts->dyn.pchan_want == GSM_PCHAN_TCH_H)))
-			ok = false;
-	} else if ((cbits & 0x1c) == 0x04) {
-		lch_idx = cbits & 0x3;	/* SDCCH/4 */
-		if (ts->pchan != GSM_PCHAN_CCCH_SDCCH4 &&
-		    ts->pchan != GSM_PCHAN_CCCH_SDCCH4_CBCH)
-			ok = false;
-	} else if ((cbits & 0x18) == 0x08) {
-		lch_idx = cbits & 0x7;	/* SDCCH/8 */
-		if (ts->pchan != GSM_PCHAN_SDCCH8_SACCH8C &&
-		    ts->pchan != GSM_PCHAN_SDCCH8_SACCH8C_CBCH)
-			ok = false;
-	} else if (cbits == 0x10 || cbits == 0x11 || cbits == 0x12) {
-		lch_idx = 0;
-		if (ts->pchan != GSM_PCHAN_CCCH &&
-		    ts->pchan != GSM_PCHAN_CCCH_SDCCH4 &&
-		    ts->pchan != GSM_PCHAN_CCCH_SDCCH4_CBCH)
-			ok = false;
-		/* FIXME: we should not return first sdcch4 !!! */
-	} else if ((chan_nr & RSL_CHAN_NR_MASK) == RSL_CHAN_OSMO_PDCH) {
-		lch_idx = 0;
-		if (ts->pchan != GSM_PCHAN_TCH_F_TCH_H_PDCH)
-			ok = false;
-	} else
-		return NULL;
-
-	if (rc && ok)
-		*rc = 0;
-
-	return &ts->lchan[lch_idx];
-}
-
-static const uint8_t subslots_per_pchan[] = {
-	[GSM_PCHAN_NONE] = 0,
-	[GSM_PCHAN_CCCH] = 0,
-	[GSM_PCHAN_PDCH] = 0,
-	[GSM_PCHAN_CCCH_SDCCH4] = 4,
-	[GSM_PCHAN_TCH_F] = 1,
-	[GSM_PCHAN_TCH_H] = 2,
-	[GSM_PCHAN_SDCCH8_SACCH8C] = 8,
-	[GSM_PCHAN_CCCH_SDCCH4_CBCH] = 4,
-	[GSM_PCHAN_SDCCH8_SACCH8C_CBCH] = 8,
-	/*
-	 * GSM_PCHAN_TCH_F_PDCH and GSM_PCHAN_TCH_F_TCH_H_PDCH should not be
-	 * part of this, those TS are handled according to their dynamic state.
-	 */
-};
-
-/*! Return the actual pchan type, also heeding dynamic TS. */
-enum gsm_phys_chan_config ts_pchan(struct gsm_bts_trx_ts *ts)
-{
-	switch (ts->pchan) {
-	case GSM_PCHAN_TCH_F_TCH_H_PDCH:
-		return ts->dyn.pchan_is;
-	case GSM_PCHAN_TCH_F_PDCH:
-		if (ts->flags & TS_F_PDCH_ACTIVE)
-			return GSM_PCHAN_PDCH;
-		else
-			return GSM_PCHAN_TCH_F;
-	default:
-		return ts->pchan;
-	}
-}
-
-/*! According to ts->pchan and possibly ts->dyn_pchan, return the number of
- * logical channels available in the timeslot. */
-uint8_t ts_subslots(struct gsm_bts_trx_ts *ts)
-{
-	return subslots_per_pchan[ts_pchan(ts)];
-}
-
-static bool pchan_is_tch(enum gsm_phys_chan_config pchan)
-{
-	switch (pchan) {
-	case GSM_PCHAN_TCH_F:
-	case GSM_PCHAN_TCH_H:
-		return true;
-	default:
-		return false;
-	}
-}
-
-bool ts_is_tch(struct gsm_bts_trx_ts *ts)
-{
-	return pchan_is_tch(ts_pchan(ts));
-}
diff --git a/src/libcommon/talloc_ctx.c b/src/libcommon/talloc_ctx.c
index c8e9cd3..ccda0d0 100644
--- a/src/libcommon/talloc_ctx.c
+++ b/src/libcommon/talloc_ctx.c
@@ -21,35 +21,18 @@
 #include <osmocom/core/msgb.h>
 
 extern void *tall_bsc_ctx;
-extern void *tall_fle_ctx;
-extern void *tall_locop_ctx;
-extern void *tall_authciphop_ctx;
 extern void *tall_gsms_ctx;
 extern void *tall_subscr_ctx;
-extern void *tall_sub_req_ctx;
 extern void *tall_call_ctx;
-extern void *tall_paging_ctx;
 extern void *tall_sigh_ctx;
-extern void *tall_tqe_ctx;
 extern void *tall_trans_ctx;
-extern void *tall_map_ctx;
-extern void *tall_upq_ctx;
-extern void *tall_ctr_ctx;
 
 void talloc_ctx_init(void *ctx_root)
 {
 	msgb_talloc_ctx_init(ctx_root, 0);
-	tall_fle_ctx = talloc_named_const(ctx_root, 0, "bs11_file_list_entry");
-	tall_locop_ctx = talloc_named_const(ctx_root, 0, "loc_updating_oper");
-	tall_authciphop_ctx = talloc_named_const(ctx_root, 0, "auth_ciph_oper");
 	tall_gsms_ctx = talloc_named_const(ctx_root, 0, "sms");
 	tall_subscr_ctx = talloc_named_const(ctx_root, 0, "subscriber");
 	tall_call_ctx = talloc_named_const(ctx_root, 0, "gsm_call");
-	tall_paging_ctx = talloc_named_const(ctx_root, 0, "paging_request");
 	tall_sigh_ctx = talloc_named_const(ctx_root, 0, "signal_handler");
-	tall_tqe_ctx = talloc_named_const(ctx_root, 0, "subch_txq_entry");
 	tall_trans_ctx = talloc_named_const(ctx_root, 0, "transaction");
-	tall_map_ctx = talloc_named_const(ctx_root, 0, "trau_map_entry");
-	tall_upq_ctx = talloc_named_const(ctx_root, 0, "trau_upq_entry");
-	tall_ctr_ctx = talloc_named_const(ctx_root, 0, "counter");
 }
diff --git a/src/libmsc/gsm_04_08.c b/src/libmsc/gsm_04_08.c
index 956bc44..7afd0c7 100644
--- a/src/libmsc/gsm_04_08.c
+++ b/src/libmsc/gsm_04_08.c
@@ -43,18 +43,12 @@
 #include <osmocom/msc/gsm_04_08.h>
 #include <osmocom/msc/gsm_04_80.h>
 #include <osmocom/msc/gsm_04_14.h>
-#include <osmocom/msc/abis_rsl.h>
-#include <osmocom/msc/chan_alloc.h>
 #include <osmocom/msc/signal.h>
-#include <osmocom/abis/trau_frame.h>
-#include <osmocom/msc/trau_mux.h>
-#include <osmocom/msc/rtp_proxy.h>
 #include <osmocom/msc/transaction.h>
 #include <osmocom/msc/ussd.h>
 #include <osmocom/msc/silent_call.h>
 #include <osmocom/msc/bsc_api.h>
 #include <osmocom/msc/osmo_msc.h>
-#include <osmocom/msc/handover.h>
 #include <osmocom/msc/mncc_int.h>
 #include <osmocom/abis/e1_input.h>
 #include <osmocom/core/bitvec.h>
diff --git a/src/libmsc/gsm_04_11.c b/src/libmsc/gsm_04_11.c
index d8d77e9..ed1b384 100644
--- a/src/libmsc/gsm_04_11.c
+++ b/src/libmsc/gsm_04_11.c
@@ -48,12 +48,10 @@
 #include <osmocom/msc/db.h>
 #include <osmocom/msc/gsm_subscriber.h>
 #include <osmocom/msc/gsm_04_08.h>
-#include <osmocom/msc/abis_rsl.h>
 #include <osmocom/msc/signal.h>
 #include <osmocom/msc/db.h>
 #include <osmocom/msc/transaction.h>
 #include <osmocom/msc/bsc_rll.h>
-#include <osmocom/msc/chan_alloc.h>
 #include <osmocom/msc/msc_ifaces.h>
 #include <osmocom/msc/osmo_msc.h>
 #include <osmocom/msc/vlr.h>
diff --git a/src/libmsc/gsm_04_14.c b/src/libmsc/gsm_04_14.c
index 5f49574..6d75bba 100644
--- a/src/libmsc/gsm_04_14.c
+++ b/src/libmsc/gsm_04_14.c
@@ -75,7 +75,6 @@
 	subch = (loop_mode << 1);
 	msgb_put_u8(msg, subch);
 
-	msg->lchan = conn->lchan;
 	return gsm0414_conn_sendmsg(conn, msg);
 }
 
diff --git a/src/libmsc/gsm_subscriber.c b/src/libmsc/gsm_subscriber.c
index 4838027..fb61209 100644
--- a/src/libmsc/gsm_subscriber.c
+++ b/src/libmsc/gsm_subscriber.c
@@ -45,7 +45,6 @@
 #include <osmocom/msc/debug.h>
 #include <osmocom/msc/signal.h>
 #include <osmocom/msc/db.h>
-#include <osmocom/msc/chan_alloc.h>
 #include <osmocom/msc/vlr.h>
 #include <osmocom/msc/osmo_msc.h>
 #include <osmocom/msc/msc_ifaces.h>
diff --git a/src/libmsc/mncc.c b/src/libmsc/mncc.c
index 3b4c41d..d2cd170 100644
--- a/src/libmsc/mncc.c
+++ b/src/libmsc/mncc.c
@@ -34,7 +34,6 @@
 #include <osmocom/msc/mncc.h>
 #include <osmocom/msc/gsm_data.h>
 #include <osmocom/msc/transaction.h>
-#include <osmocom/msc/rtp_proxy.h>
 
 
 static const struct value_string mncc_names[] = {
diff --git a/src/libmsc/mncc_builtin.c b/src/libmsc/mncc_builtin.c
index 84623df..d6f3e3d 100644
--- a/src/libmsc/mncc_builtin.c
+++ b/src/libmsc/mncc_builtin.c
@@ -34,7 +34,6 @@
 #include <osmocom/core/talloc.h>
 #include <osmocom/msc/gsm_data.h>
 #include <osmocom/msc/transaction.h>
-#include <osmocom/msc/rtp_proxy.h>
 
 void *tall_call_ctx;
 
diff --git a/src/libmsc/rrlp.c b/src/libmsc/rrlp.c
index 7428893..9cc6b04 100644
--- a/src/libmsc/rrlp.c
+++ b/src/libmsc/rrlp.c
@@ -24,7 +24,6 @@
 #include <osmocom/msc/gsm_04_08.h>
 #include <osmocom/msc/signal.h>
 #include <osmocom/msc/gsm_subscriber.h>
-#include <osmocom/msc/chan_alloc.h>
 
 /* RRLP msPositionReq, nsBased,
  *	Accuracy=60, Method=gps, ResponseTime=2, oneSet */
diff --git a/src/libmsc/silent_call.c b/src/libmsc/silent_call.c
index d715d5c..f3291d7 100644
--- a/src/libmsc/silent_call.c
+++ b/src/libmsc/silent_call.c
@@ -29,8 +29,6 @@
 #include <osmocom/msc/debug.h>
 #include <osmocom/msc/gsm_data.h>
 #include <osmocom/msc/gsm_subscriber.h>
-#include <osmocom/msc/abis_rsl.h>
-#include <osmocom/msc/chan_alloc.h>
 #include <osmocom/msc/osmo_msc.h>
 
 /* paging of the requested subscriber has completed */
diff --git a/src/libmsc/smpp_openbsc.c b/src/libmsc/smpp_openbsc.c
index 3ea5ddd..4e2fb55 100644
--- a/src/libmsc/smpp_openbsc.c
+++ b/src/libmsc/smpp_openbsc.c
@@ -44,7 +44,6 @@
 #include <osmocom/msc/signal.h>
 #include <osmocom/msc/transaction.h>
 #include <osmocom/msc/gsm_subscriber.h>
-#include <osmocom/msc/chan_alloc.h>
 #include <osmocom/msc/vlr.h>
 
 #include "smpp_smsc.h"
diff --git a/src/libmsc/sms_queue.c b/src/libmsc/sms_queue.c
index 1372a2c..3d39a0e 100644
--- a/src/libmsc/sms_queue.c
+++ b/src/libmsc/sms_queue.c
@@ -31,7 +31,6 @@
 #include <limits.h>
 
 #include <osmocom/msc/sms_queue.h>
-#include <osmocom/msc/chan_alloc.h>
 #include <osmocom/msc/db.h>
 #include <osmocom/msc/debug.h>
 #include <osmocom/msc/gsm_data.h>
diff --git a/src/libmsc/vty_interface_layer3.c b/src/libmsc/vty_interface_layer3.c
index 4f59554..f6083b6 100644
--- a/src/libmsc/vty_interface_layer3.c
+++ b/src/libmsc/vty_interface_layer3.c
@@ -35,8 +35,6 @@
 #include <osmocom/msc/gsm_subscriber.h>
 #include <osmocom/msc/silent_call.h>
 #include <osmocom/msc/gsm_04_11.h>
-#include <osmocom/abis/e1_input.h>
-#include <osmocom/msc/abis_nm.h>
 #include <osmocom/gsm/gsm_utils.h>
 #include <osmocom/core/utils.h>
 #include <osmocom/msc/db.h>
@@ -46,10 +44,9 @@
 #include <osmocom/msc/vty.h>
 #include <osmocom/msc/gsm_04_80.h>
 #include <osmocom/msc/gsm_04_14.h>
-#include <osmocom/msc/chan_alloc.h>
+#include <osmocom/gsm/protocol/gsm_08_58.h>
 #include <osmocom/msc/sms_queue.h>
 #include <osmocom/msc/mncc_int.h>
-#include <osmocom/msc/handover.h>
 #include <osmocom/msc/vlr.h>
 #include <osmocom/msc/transaction.h>
 
diff --git a/src/osmo-msc/msc_main.c b/src/osmo-msc/msc_main.c
index 0d23697..f41df01 100644
--- a/src/osmo-msc/msc_main.c
+++ b/src/osmo-msc/msc_main.c
@@ -54,7 +54,6 @@
 #include <osmocom/vty/logging.h>
 #include <osmocom/msc/vty.h>
 #include <osmocom/msc/mncc.h>
-#include <osmocom/msc/handover_decision.h>
 #include <osmocom/msc/rrlp.h>
 #include <osmocom/ctrl/control_if.h>
 #include <osmocom/ctrl/control_vty.h>
@@ -89,10 +88,7 @@
 
 /* satisfy deps from libbsc legacy.
    TODO double check these */
-void *tall_fle_ctx = NULL;
-void *tall_paging_ctx = NULL;
 void *tall_map_ctx = NULL;
-void *tall_upq_ctx = NULL;
 /* end deps from libbsc legacy. */
 
 static struct {
diff --git a/tests/msc_vlr/msc_vlr_test_rest.c b/tests/msc_vlr/msc_vlr_test_rest.c
index c5f7fcf..c19c4c6 100644
--- a/tests/msc_vlr/msc_vlr_test_rest.c
+++ b/tests/msc_vlr/msc_vlr_test_rest.c
@@ -32,7 +32,6 @@
 
 	btw("freshly allocated conn");
 	g_conn = msc_subscr_con_allocate(net);
-	g_conn->bts = the_bts;
 	EXPECT_ACCEPTED(false);
 
 	btw("conn_fsm present, in state NEW");
diff --git a/tests/msc_vlr/msc_vlr_tests.c b/tests/msc_vlr/msc_vlr_tests.c
index cf9122b..2152fe4 100644
--- a/tests/msc_vlr/msc_vlr_tests.c
+++ b/tests/msc_vlr/msc_vlr_tests.c
@@ -49,8 +49,6 @@
 
 struct gsm_network *net = NULL;
 
-struct gsm_bts *the_bts;
-
 const char *gsup_tx_expected = NULL;
 bool gsup_tx_confirmed;
 
@@ -160,7 +158,6 @@
 {
 	struct gsm_subscriber_connection *conn;
 	conn = msc_subscr_con_allocate(net);
-	conn->bts = the_bts;
 	conn->via_ran = rx_from_ran;
 	conn->lac = 23;
 	if (conn->via_ran == RAN_UTRAN_IU) {
@@ -866,8 +863,6 @@
 	}
 
 	printf("Done\n");
-
-	talloc_free(the_bts);
 
 	check_talloc(msgb_ctx, tall_bsc_ctx, 8);
 	return 0;

-- 
To view, visit https://gerrit.osmocom.org/6051
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I247def85da2dc3ec461389fb74414a0d964e7e3c
Gerrit-PatchSet: 1
Gerrit-Project: osmo-msc
Gerrit-Branch: master
Gerrit-Owner: Harald Welte <laforge at gnumonks.org>



More information about the gerrit-log mailing list