aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--openbsc/.gitignore23
-rw-r--r--openbsc/configure.in12
-rw-r--r--openbsc/src/Makefile.am44
-rw-r--r--openbsc/src/abis/Makefile.am13
-rw-r--r--openbsc/src/abis/e1_input.c (renamed from openbsc/src/e1_input.c)0
-rw-r--r--openbsc/src/abis/e1_input_vty.c (renamed from openbsc/src/e1_input_vty.c)0
-rw-r--r--openbsc/src/abis/input/dahdi.c (renamed from openbsc/src/input/dahdi.c)0
-rw-r--r--openbsc/src/abis/input/ipaccess.c (renamed from openbsc/src/input/ipaccess.c)0
-rw-r--r--openbsc/src/abis/input/lapd.c (renamed from openbsc/src/input/lapd.c)0
-rw-r--r--openbsc/src/abis/input/lapd.h (renamed from openbsc/src/input/lapd.h)0
-rw-r--r--openbsc/src/abis/input/misdn.c (renamed from openbsc/src/input/misdn.c)0
-rw-r--r--openbsc/src/bsc/Makefile.am28
-rw-r--r--openbsc/src/bsc/abis_nm.c (renamed from openbsc/src/abis_nm.c)0
-rw-r--r--openbsc/src/bsc/abis_nm_ipaccess.c (renamed from openbsc/src/abis_nm_ipaccess.c)0
-rw-r--r--openbsc/src/bsc/abis_nm_vty.c (renamed from openbsc/src/abis_nm_vty.c)0
-rw-r--r--openbsc/src/bsc/abis_om2000.c (renamed from openbsc/src/abis_om2000.c)0
-rw-r--r--openbsc/src/bsc/abis_om2000_vty.c (renamed from openbsc/src/abis_om2000_vty.c)0
-rw-r--r--openbsc/src/bsc/abis_rsl.c (renamed from openbsc/src/abis_rsl.c)0
-rw-r--r--openbsc/src/bsc/bsc_api.c (renamed from openbsc/src/bsc_api.c)0
-rw-r--r--openbsc/src/bsc/bsc_init.c (renamed from openbsc/src/bsc_init.c)0
-rw-r--r--openbsc/src/bsc/bsc_msc.c (renamed from openbsc/src/bsc_msc.c)0
-rw-r--r--openbsc/src/bsc/bsc_rll.c (renamed from openbsc/src/bsc_rll.c)0
-rw-r--r--openbsc/src/bsc/bsc_vty.c (renamed from openbsc/src/bsc_vty.c)0
-rw-r--r--openbsc/src/bsc/bts_ericsson_rbs2000.c (renamed from openbsc/src/bts_ericsson_rbs2000.c)2
-rw-r--r--openbsc/src/bsc/bts_ipaccess_nanobts.c (renamed from openbsc/src/bts_ipaccess_nanobts.c)0
-rw-r--r--openbsc/src/bsc/bts_siemens_bs11.c (renamed from openbsc/src/bts_siemens_bs11.c)0
-rw-r--r--openbsc/src/bsc/bts_unknown.c (renamed from openbsc/src/bts_unknown.c)0
-rw-r--r--openbsc/src/bsc/chan_alloc.c (renamed from openbsc/src/chan_alloc.c)0
-rw-r--r--openbsc/src/bsc/e1_config.c (renamed from openbsc/src/e1_config.c)0
-rw-r--r--openbsc/src/bsc/gsm_04_08_utils.c (renamed from openbsc/src/gsm_04_08_utils.c)0
-rw-r--r--openbsc/src/bsc/gsm_subscriber_base.c (renamed from openbsc/src/gsm_subscriber_base.c)0
-rw-r--r--openbsc/src/bsc/handover_decision.c (renamed from openbsc/src/handover_decision.c)0
-rw-r--r--openbsc/src/bsc/handover_logic.c (renamed from openbsc/src/handover_logic.c)0
-rw-r--r--openbsc/src/bsc/meas_proc.c (renamed from openbsc/src/meas_proc.c)4
-rw-r--r--openbsc/src/bsc/meas_rep.c (renamed from openbsc/src/meas_rep.c)0
-rw-r--r--openbsc/src/bsc/paging.c (renamed from openbsc/src/paging.c)0
-rw-r--r--openbsc/src/bsc/rest_octets.c (renamed from openbsc/src/rest_octets.c)0
-rw-r--r--openbsc/src/bsc/system_information.c (renamed from openbsc/src/system_information.c)0
-rw-r--r--openbsc/src/bsc/transaction.c (renamed from openbsc/src/transaction.c)0
-rw-r--r--openbsc/src/common/Makefile.am7
-rw-r--r--openbsc/src/common/bsc_version.c (renamed from openbsc/src/bsc_version.c)0
-rw-r--r--openbsc/src/common/common_vty.c (renamed from openbsc/src/common_vty.c)0
-rw-r--r--openbsc/src/common/debug.c (renamed from openbsc/src/debug.c)0
-rw-r--r--openbsc/src/common/gsm_data.c (renamed from openbsc/src/gsm_data.c)0
-rw-r--r--openbsc/src/common/socket.c (renamed from openbsc/src/socket.c)0
-rw-r--r--openbsc/src/common/talloc_ctx.c (renamed from openbsc/src/talloc_ctx.c)0
-rw-r--r--openbsc/src/gprs/Makefile.am10
-rw-r--r--openbsc/src/ipaccess/Makefile.am12
-rw-r--r--openbsc/src/mgcp/Makefile.am7
-rw-r--r--openbsc/src/msc/Makefile.am19
-rw-r--r--openbsc/src/msc/a3a8.c269
-rw-r--r--openbsc/src/msc/auth.c (renamed from openbsc/src/auth.c)0
-rw-r--r--openbsc/src/msc/db.c (renamed from openbsc/src/db.c)0
-rw-r--r--openbsc/src/msc/gsm_04_08.c (renamed from openbsc/src/gsm_04_08.c)5
-rw-r--r--openbsc/src/msc/gsm_04_11.c (renamed from openbsc/src/gsm_04_11.c)0
-rw-r--r--openbsc/src/msc/gsm_04_80.c (renamed from openbsc/src/gsm_04_80.c)0
-rw-r--r--openbsc/src/msc/gsm_subscriber.c (renamed from openbsc/src/gsm_subscriber.c)0
-rw-r--r--openbsc/src/msc/mncc.c (renamed from openbsc/src/mncc.c)0
-rw-r--r--openbsc/src/msc/mncc_builtin.c (renamed from openbsc/src/mncc_builtin.c)0
-rw-r--r--openbsc/src/msc/mncc_sock.c (renamed from openbsc/src/mncc_sock.c)0
-rw-r--r--openbsc/src/msc/osmo_msc.c (renamed from openbsc/src/osmo_msc.c)0
-rw-r--r--openbsc/src/msc/rrlp.c (renamed from openbsc/src/rrlp.c)0
-rw-r--r--openbsc/src/msc/silent_call.c (renamed from openbsc/src/silent_call.c)0
-rw-r--r--openbsc/src/msc/sms_queue.c (renamed from openbsc/src/sms_queue.c)0
-rw-r--r--openbsc/src/msc/token_auth.c (renamed from openbsc/src/token_auth.c)0
-rw-r--r--openbsc/src/msc/ussd.c (renamed from openbsc/src/ussd.c)0
-rw-r--r--openbsc/src/msc/vty_interface_layer3.c (renamed from openbsc/src/vty_interface_layer3.c)0
-rw-r--r--openbsc/src/nat/Makefile.am8
-rw-r--r--openbsc/src/osmo-bsc/Makefile.am14
-rw-r--r--openbsc/src/osmo-bsc/osmo_bsc_api.c (renamed from openbsc/src/bsc/osmo_bsc_api.c)0
-rw-r--r--openbsc/src/osmo-bsc/osmo_bsc_audio.c (renamed from openbsc/src/bsc/osmo_bsc_audio.c)0
-rw-r--r--openbsc/src/osmo-bsc/osmo_bsc_bssap.c (renamed from openbsc/src/bsc/osmo_bsc_bssap.c)0
-rw-r--r--openbsc/src/osmo-bsc/osmo_bsc_filter.c (renamed from openbsc/src/bsc/osmo_bsc_filter.c)0
-rw-r--r--openbsc/src/osmo-bsc/osmo_bsc_grace.c (renamed from openbsc/src/bsc/osmo_bsc_grace.c)0
-rw-r--r--openbsc/src/osmo-bsc/osmo_bsc_main.c (renamed from openbsc/src/bsc/osmo_bsc_main.c)0
-rw-r--r--openbsc/src/osmo-bsc/osmo_bsc_msc.c (renamed from openbsc/src/bsc/osmo_bsc_msc.c)0
-rw-r--r--openbsc/src/osmo-bsc/osmo_bsc_rf.c (renamed from openbsc/src/bsc/osmo_bsc_rf.c)0
-rw-r--r--openbsc/src/osmo-bsc/osmo_bsc_sccp.c (renamed from openbsc/src/bsc/osmo_bsc_sccp.c)0
-rw-r--r--openbsc/src/osmo-bsc/osmo_bsc_vty.c (renamed from openbsc/src/bsc/osmo_bsc_vty.c)0
-rw-r--r--openbsc/src/osmo-nitb/Makefile.am10
-rw-r--r--openbsc/src/osmo-nitb/bsc_hack.c (renamed from openbsc/src/bsc_hack.c)0
-rw-r--r--openbsc/src/trau/Makefile.am7
-rw-r--r--openbsc/src/trau/rtp_proxy.c (renamed from openbsc/src/rtp_proxy.c)2
-rw-r--r--openbsc/src/trau/subchan_demux.c (renamed from openbsc/src/subchan_demux.c)0
-rw-r--r--openbsc/src/trau/trau_frame.c (renamed from openbsc/src/trau_frame.c)0
-rw-r--r--openbsc/src/trau/trau_mux.c (renamed from openbsc/src/trau_mux.c)2
-rw-r--r--openbsc/src/trau/trau_upqueue.c (renamed from openbsc/src/mncc_upqueue.c)4
-rw-r--r--openbsc/src/utils/Makefile.am10
-rw-r--r--openbsc/src/utils/bs11_config.c (renamed from openbsc/src/bs11_config.c)0
-rw-r--r--openbsc/src/utils/isdnsync.c (renamed from openbsc/src/isdnsync.c)0
-rw-r--r--openbsc/src/utils/rs232.c (renamed from openbsc/src/rs232.c)0
91 files changed, 428 insertions, 84 deletions
diff --git a/openbsc/.gitignore b/openbsc/.gitignore
index f9dacacbc..bd35256dc 100644
--- a/openbsc/.gitignore
+++ b/openbsc/.gitignore
@@ -6,10 +6,9 @@ Makefile.in
bscconfig.h
bscconfig.h.in
openbsc.pc
-bsc_hack
-bsc_msc_ip
+src/osmo-nitb/osmo-nitb
bsc_mgcp
-src/bsc/osmo-bsc
+src/osmo-bsc/osmo-bsc
*.*~
*.sw?
@@ -31,15 +30,15 @@ stamp-h1
# apps and app data
hlr.sqlite3
-bs11_config
-ipaccess-config
-ipaccess-find
-ipaccess-firmware
-ipaccess-proxy
-isdnsync
-bsc_nat
-osmo-sgsn
-osmo-gbproxy
+src/utils/bs11_config
+src/ipaccess/ipaccess-config
+src/ipaccess/ipaccess-find
+src/ipaccess/ipaccess-firmware
+src/ipaccess/ipaccess-proxy
+src/utils/isdnsync
+src/nat/bsc_nat
+src/gprs/osmo-sgsn
+src/gprs/osmo-gbproxy
#tests
tests/channel/channel_test
diff --git a/openbsc/configure.in b/openbsc/configure.in
index 50f7dbc38..525bad82c 100644
--- a/openbsc/configure.in
+++ b/openbsc/configure.in
@@ -87,10 +87,18 @@ AC_OUTPUT(
include/openbsc/Makefile
include/Makefile
src/Makefile
+ src/trau/Makefile
+ src/abis/Makefile
+ src/bsc/Makefile
+ src/msc/Makefile
+ src/mgcp/Makefile
+ src/common/Makefile
+ src/osmo-nitb/Makefile
+ src/osmo-bsc/Makefile
+ src/nat/Makefile
src/ipaccess/Makefile
+ src/utils/Makefile
src/gprs/Makefile
- src/nat/Makefile
- src/bsc/Makefile
tests/Makefile
tests/debug/Makefile
tests/gsm0408/Makefile
diff --git a/openbsc/src/Makefile.am b/openbsc/src/Makefile.am
index 6507591db..e4b2b960c 100644
--- a/openbsc/src/Makefile.am
+++ b/openbsc/src/Makefile.am
@@ -2,51 +2,17 @@ INCLUDES = $(all_includes) -I$(top_srcdir)/include -I$(top_builddir)
AM_CFLAGS=-Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOVTY_CFLAGS) $(COVERAGE_CFLAGS)
AM_LDFLAGS = $(LIBOSMOCORE_LIBS) $(COVERAGE_LDFLAGS)
-# build current directory before building gprs
-SUBDIRS = . ipaccess gprs
+SUBDIRS = common abis mgcp bsc trau osmo-nitb utils ipaccess gprs
# Conditional modules
if BUILD_NAT
SUBDIRS += nat
endif
if BUILD_BSC
-SUBDIRS += bsc
+SUBDIRS += osmo-bsc
endif
-bin_PROGRAMS = bsc_hack bs11_config isdnsync bsc_mgcp
-noinst_LIBRARIES = libbsc.a libmsc.a libvty.a libmgcp.a
+bin_PROGRAMS = bsc_mgcp
-libbsc_a_SOURCES = abis_rsl.c abis_nm.c abis_om2000.c gsm_data.c gsm_04_08_utils.c \
- chan_alloc.c debug.c socket.c abis_nm_vty.c abis_om2000_vty.c \
- gsm_subscriber_base.c subchan_demux.c bsc_rll.c transaction.c \
- trau_frame.c trau_mux.c paging.c \
- e1_config.c e1_input.c e1_input_vty.c \
- input/misdn.c input/ipaccess.c input/dahdi.c input/lapd.c \
- handover_logic.c talloc_ctx.c system_information.c rest_octets.c \
- bts_siemens_bs11.c bts_ipaccess_nanobts.c bts_ericsson_rbs2000.c mncc_upqueue.c \
- bts_unknown.c bsc_version.c bsc_api.c bsc_vty.c meas_rep.c gsm_04_80.c
-
-libmsc_a_SOURCES = gsm_subscriber.c db.c \
- mncc.c mncc_builtin.c mncc_sock.c \
- gsm_04_08.c gsm_04_11.c transaction.c \
- token_auth.c rrlp.c ussd.c silent_call.c \
- handover_decision.c auth.c \
- osmo_msc.c rtp_proxy.c
-
-libvty_a_SOURCES = common_vty.c
-
-libmgcp_a_SOURCES = mgcp/mgcp_protocol.c mgcp/mgcp_network.c mgcp/mgcp_vty.c
-
-bsc_hack_SOURCES = bsc_hack.c bsc_init.c bsc_vty.c vty_interface_layer3.c sms_queue.c
-bsc_hack_LDADD = libmsc.a libbsc.a libvty.a libmsc.a \
- -ldl -ldbi $(LIBCRYPT) $(LIBOSMOVTY_LIBS)
-
-bs11_config_SOURCES = bs11_config.c abis_nm.c gsm_data.c debug.c \
- rs232.c bts_siemens_bs11.c
-
-isdnsync_SOURCES = isdnsync.c
-
-bsc_mgcp_SOURCES = mgcp/mgcp_main.c debug.c
-bsc_mgcp_LDADD = libvty.a libmgcp.a $(LIBOSMOVTY_LIBS)
-
-EXTRA_DIST = input/lapd.h
+bsc_mgcp_SOURCES = mgcp/mgcp_main.c
+bsc_mgcp_LDADD = common/libcommon.a mgcp/libmgcp.a $(LIBOSMOVTY_LIBS)
diff --git a/openbsc/src/abis/Makefile.am b/openbsc/src/abis/Makefile.am
new file mode 100644
index 000000000..7f5ac47cc
--- /dev/null
+++ b/openbsc/src/abis/Makefile.am
@@ -0,0 +1,13 @@
+INCLUDES = $(all_includes) -I$(top_srcdir)/include -I$(top_builddir)
+AM_CFLAGS=-Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOVTY_CFLAGS) $(COVERAGE_CFLAGS)
+AM_LDFLAGS = $(LIBOSMOCORE_LIBS) $(COVERAGE_LDFLAGS)
+
+noinst_LIBRARIES = libabis.a
+
+libabis_a_SOURCES = e1_input.c e1_input_vty.c \
+ input/misdn.c \
+ input/ipaccess.c \
+ input/dahdi.c \
+ input/lapd.c
+
+EXTRA_DIST = input/lapd.h
diff --git a/openbsc/src/e1_input.c b/openbsc/src/abis/e1_input.c
index e5dd11b94..e5dd11b94 100644
--- a/openbsc/src/e1_input.c
+++ b/openbsc/src/abis/e1_input.c
diff --git a/openbsc/src/e1_input_vty.c b/openbsc/src/abis/e1_input_vty.c
index 3909f652f..3909f652f 100644
--- a/openbsc/src/e1_input_vty.c
+++ b/openbsc/src/abis/e1_input_vty.c
diff --git a/openbsc/src/input/dahdi.c b/openbsc/src/abis/input/dahdi.c
index 2fc99f58e..2fc99f58e 100644
--- a/openbsc/src/input/dahdi.c
+++ b/openbsc/src/abis/input/dahdi.c
diff --git a/openbsc/src/input/ipaccess.c b/openbsc/src/abis/input/ipaccess.c
index dcf8d1a53..dcf8d1a53 100644
--- a/openbsc/src/input/ipaccess.c
+++ b/openbsc/src/abis/input/ipaccess.c
diff --git a/openbsc/src/input/lapd.c b/openbsc/src/abis/input/lapd.c
index 7bce6cc51..7bce6cc51 100644
--- a/openbsc/src/input/lapd.c
+++ b/openbsc/src/abis/input/lapd.c
diff --git a/openbsc/src/input/lapd.h b/openbsc/src/abis/input/lapd.h
index fd11edaa3..fd11edaa3 100644
--- a/openbsc/src/input/lapd.h
+++ b/openbsc/src/abis/input/lapd.h
diff --git a/openbsc/src/input/misdn.c b/openbsc/src/abis/input/misdn.c
index 459887917..459887917 100644
--- a/openbsc/src/input/misdn.c
+++ b/openbsc/src/abis/input/misdn.c
diff --git a/openbsc/src/bsc/Makefile.am b/openbsc/src/bsc/Makefile.am
index 9ebc84632..91be7fa62 100644
--- a/openbsc/src/bsc/Makefile.am
+++ b/openbsc/src/bsc/Makefile.am
@@ -1,15 +1,21 @@
INCLUDES = $(all_includes) -I$(top_srcdir)/include -I$(top_builddir)
-AM_CFLAGS=-Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOVTY_CFLAGS) $(LIBOSMOSCCP_CFLAGS) $(COVERAGE_CFLAGS)
-AM_LDFLAGS = $(LIBOSMOCORE_LIBS) $(LIBOSMOVTY_LIBS) $(COVERAGE_LDFLAGS)
+AM_CFLAGS=-Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOVTY_CFLAGS) $(COVERAGE_CFLAGS)
+AM_LDFLAGS = $(LIBOSMOCORE_LIBS) $(COVERAGE_LDFLAGS)
-bin_PROGRAMS = osmo-bsc
+noinst_LIBRARIES = libbsc.a
+libbsc_a_SOURCES = abis_nm.c abis_nm_vty.c \
+ abis_om2000.c abis_om2000_vty.c \
+ abis_rsl.c bsc_rll.c \
+ paging.c \
+ bts_ericsson_rbs2000.c bts_ipaccess_nanobts.c bts_siemens_bs11.c bts_unknown.c \
+ chan_alloc.c \
+ gsm_subscriber_base.c \
+ handover_decision.c handover_logic.c meas_rep.c \
+ rest_octets.c system_information.c \
+ e1_config.c \
+ transaction.c \
+ bsc_api.c bsc_msc.c bsc_vty.c \
+ gsm_04_08_utils.c \
+ bsc_init.c
-osmo_bsc_SOURCES = osmo_bsc_main.c osmo_bsc_rf.c osmo_bsc_vty.c osmo_bsc_api.c \
- osmo_bsc_grace.c osmo_bsc_msc.c osmo_bsc_sccp.c \
- osmo_bsc_filter.c osmo_bsc_bssap.c osmo_bsc_audio.c \
- $(top_srcdir)/src/debug.c $(top_srcdir)/src/bsc_msc.c \
- $(top_srcdir)/src/bsc_init.c
-osmo_bsc_LDADD = $(top_builddir)/src/libvty.a \
- $(top_builddir)/src/libmgcp.a $(top_builddir)/src/libbsc.a \
- $(LIBOSMOSCCP_LIBS)
diff --git a/openbsc/src/abis_nm.c b/openbsc/src/bsc/abis_nm.c
index 45db8bac5..45db8bac5 100644
--- a/openbsc/src/abis_nm.c
+++ b/openbsc/src/bsc/abis_nm.c
diff --git a/openbsc/src/abis_nm_ipaccess.c b/openbsc/src/bsc/abis_nm_ipaccess.c
index 754efe28d..754efe28d 100644
--- a/openbsc/src/abis_nm_ipaccess.c
+++ b/openbsc/src/bsc/abis_nm_ipaccess.c
diff --git a/openbsc/src/abis_nm_vty.c b/openbsc/src/bsc/abis_nm_vty.c
index 996a85749..996a85749 100644
--- a/openbsc/src/abis_nm_vty.c
+++ b/openbsc/src/bsc/abis_nm_vty.c
diff --git a/openbsc/src/abis_om2000.c b/openbsc/src/bsc/abis_om2000.c
index e7a5f8386..e7a5f8386 100644
--- a/openbsc/src/abis_om2000.c
+++ b/openbsc/src/bsc/abis_om2000.c
diff --git a/openbsc/src/abis_om2000_vty.c b/openbsc/src/bsc/abis_om2000_vty.c
index 5949c869c..5949c869c 100644
--- a/openbsc/src/abis_om2000_vty.c
+++ b/openbsc/src/bsc/abis_om2000_vty.c
diff --git a/openbsc/src/abis_rsl.c b/openbsc/src/bsc/abis_rsl.c
index 07a7dc68c..07a7dc68c 100644
--- a/openbsc/src/abis_rsl.c
+++ b/openbsc/src/bsc/abis_rsl.c
diff --git a/openbsc/src/bsc_api.c b/openbsc/src/bsc/bsc_api.c
index 0f09aecd3..0f09aecd3 100644
--- a/openbsc/src/bsc_api.c
+++ b/openbsc/src/bsc/bsc_api.c
diff --git a/openbsc/src/bsc_init.c b/openbsc/src/bsc/bsc_init.c
index 752056c37..752056c37 100644
--- a/openbsc/src/bsc_init.c
+++ b/openbsc/src/bsc/bsc_init.c
diff --git a/openbsc/src/bsc_msc.c b/openbsc/src/bsc/bsc_msc.c
index 508697ab1..508697ab1 100644
--- a/openbsc/src/bsc_msc.c
+++ b/openbsc/src/bsc/bsc_msc.c
diff --git a/openbsc/src/bsc_rll.c b/openbsc/src/bsc/bsc_rll.c
index 722f3fafc..722f3fafc 100644
--- a/openbsc/src/bsc_rll.c
+++ b/openbsc/src/bsc/bsc_rll.c
diff --git a/openbsc/src/bsc_vty.c b/openbsc/src/bsc/bsc_vty.c
index ed45afd4d..ed45afd4d 100644
--- a/openbsc/src/bsc_vty.c
+++ b/openbsc/src/bsc/bsc_vty.c
diff --git a/openbsc/src/bts_ericsson_rbs2000.c b/openbsc/src/bsc/bts_ericsson_rbs2000.c
index ab2959107..def42b544 100644
--- a/openbsc/src/bts_ericsson_rbs2000.c
+++ b/openbsc/src/bsc/bts_ericsson_rbs2000.c
@@ -29,7 +29,7 @@
#include <openbsc/e1_input.h>
#include <openbsc/signal.h>
-#include "input/lapd.h"
+#include "../abis/input/lapd.h"
static void bootstrap_om_bts(struct gsm_bts *bts)
{
diff --git a/openbsc/src/bts_ipaccess_nanobts.c b/openbsc/src/bsc/bts_ipaccess_nanobts.c
index 25dc0c8a2..25dc0c8a2 100644
--- a/openbsc/src/bts_ipaccess_nanobts.c
+++ b/openbsc/src/bsc/bts_ipaccess_nanobts.c
diff --git a/openbsc/src/bts_siemens_bs11.c b/openbsc/src/bsc/bts_siemens_bs11.c
index 5a5f88306..5a5f88306 100644
--- a/openbsc/src/bts_siemens_bs11.c
+++ b/openbsc/src/bsc/bts_siemens_bs11.c
diff --git a/openbsc/src/bts_unknown.c b/openbsc/src/bsc/bts_unknown.c
index f95459959..f95459959 100644
--- a/openbsc/src/bts_unknown.c
+++ b/openbsc/src/bsc/bts_unknown.c
diff --git a/openbsc/src/chan_alloc.c b/openbsc/src/bsc/chan_alloc.c
index 167381b37..167381b37 100644
--- a/openbsc/src/chan_alloc.c
+++ b/openbsc/src/bsc/chan_alloc.c
diff --git a/openbsc/src/e1_config.c b/openbsc/src/bsc/e1_config.c
index 958839dcc..958839dcc 100644
--- a/openbsc/src/e1_config.c
+++ b/openbsc/src/bsc/e1_config.c
diff --git a/openbsc/src/gsm_04_08_utils.c b/openbsc/src/bsc/gsm_04_08_utils.c
index 6d12cc08e..6d12cc08e 100644
--- a/openbsc/src/gsm_04_08_utils.c
+++ b/openbsc/src/bsc/gsm_04_08_utils.c
diff --git a/openbsc/src/gsm_subscriber_base.c b/openbsc/src/bsc/gsm_subscriber_base.c
index caf84e7bb..caf84e7bb 100644
--- a/openbsc/src/gsm_subscriber_base.c
+++ b/openbsc/src/bsc/gsm_subscriber_base.c
diff --git a/openbsc/src/handover_decision.c b/openbsc/src/bsc/handover_decision.c
index d3f843afb..d3f843afb 100644
--- a/openbsc/src/handover_decision.c
+++ b/openbsc/src/bsc/handover_decision.c
diff --git a/openbsc/src/handover_logic.c b/openbsc/src/bsc/handover_logic.c
index c2e3f8c72..c2e3f8c72 100644
--- a/openbsc/src/handover_logic.c
+++ b/openbsc/src/bsc/handover_logic.c
diff --git a/openbsc/src/meas_proc.c b/openbsc/src/bsc/meas_proc.c
index d88e10e90..ade1f2e0c 100644
--- a/openbsc/src/meas_proc.c
+++ b/openbsc/src/bsc/meas_proc.c
@@ -22,12 +22,12 @@
#include <stdlib.h>
#include <errno.h>
-#include <openbsc/msgb.h>
+#include <osmocore/talloc.h>
+#include <osmocore/msgb.h>
#include <openbsc/debug.h>
#include <openbsc/gsm_data.h>
#include <openbsc/meas_rep.h>
#include <openbsc/signal.h>
-#include <openbsc/talloc.h>
/* process an already parsed measurement report */
static int process_meas_rep(struct gsm_meas_rep *mr)
diff --git a/openbsc/src/meas_rep.c b/openbsc/src/bsc/meas_rep.c
index 788a9baed..788a9baed 100644
--- a/openbsc/src/meas_rep.c
+++ b/openbsc/src/bsc/meas_rep.c
diff --git a/openbsc/src/paging.c b/openbsc/src/bsc/paging.c
index 650254575..650254575 100644
--- a/openbsc/src/paging.c
+++ b/openbsc/src/bsc/paging.c
diff --git a/openbsc/src/rest_octets.c b/openbsc/src/bsc/rest_octets.c
index 084f14498..084f14498 100644
--- a/openbsc/src/rest_octets.c
+++ b/openbsc/src/bsc/rest_octets.c
diff --git a/openbsc/src/system_information.c b/openbsc/src/bsc/system_information.c
index 8a99c565e..8a99c565e 100644
--- a/openbsc/src/system_information.c
+++ b/openbsc/src/bsc/system_information.c
diff --git a/openbsc/src/transaction.c b/openbsc/src/bsc/transaction.c
index 9b4af1aac..9b4af1aac 100644
--- a/openbsc/src/transaction.c
+++ b/openbsc/src/bsc/transaction.c
diff --git a/openbsc/src/common/Makefile.am b/openbsc/src/common/Makefile.am
new file mode 100644
index 000000000..2895452ea
--- /dev/null
+++ b/openbsc/src/common/Makefile.am
@@ -0,0 +1,7 @@
+INCLUDES = $(all_includes) -I$(top_srcdir)/include -I$(top_builddir)
+AM_CFLAGS=-Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOVTY_CFLAGS) $(COVERAGE_CFLAGS)
+AM_LDFLAGS = $(LIBOSMOCORE_LIBS) $(COVERAGE_LDFLAGS)
+
+noinst_LIBRARIES = libcommon.a
+
+libcommon_a_SOURCES = bsc_version.c common_vty.c debug.c gsm_data.c socket.c talloc_ctx.c
diff --git a/openbsc/src/bsc_version.c b/openbsc/src/common/bsc_version.c
index cc1e76449..cc1e76449 100644
--- a/openbsc/src/bsc_version.c
+++ b/openbsc/src/common/bsc_version.c
diff --git a/openbsc/src/common_vty.c b/openbsc/src/common/common_vty.c
index 84375a22d..84375a22d 100644
--- a/openbsc/src/common_vty.c
+++ b/openbsc/src/common/common_vty.c
diff --git a/openbsc/src/debug.c b/openbsc/src/common/debug.c
index ea5db49e5..ea5db49e5 100644
--- a/openbsc/src/debug.c
+++ b/openbsc/src/common/debug.c
diff --git a/openbsc/src/gsm_data.c b/openbsc/src/common/gsm_data.c
index f181fd162..f181fd162 100644
--- a/openbsc/src/gsm_data.c
+++ b/openbsc/src/common/gsm_data.c
diff --git a/openbsc/src/socket.c b/openbsc/src/common/socket.c
index 47778e746..47778e746 100644
--- a/openbsc/src/socket.c
+++ b/openbsc/src/common/socket.c
diff --git a/openbsc/src/talloc_ctx.c b/openbsc/src/common/talloc_ctx.c
index 8e7ec230f..8e7ec230f 100644
--- a/openbsc/src/talloc_ctx.c
+++ b/openbsc/src/common/talloc_ctx.c
diff --git a/openbsc/src/gprs/Makefile.am b/openbsc/src/gprs/Makefile.am
index 2fa9181fb..cdad70f7c 100644
--- a/openbsc/src/gprs/Makefile.am
+++ b/openbsc/src/gprs/Makefile.am
@@ -16,11 +16,9 @@ libgb_a_SOURCES = gprs_ns.c gprs_ns_frgre.c gprs_ns_vty.c \
gprs_bssgp.c gprs_bssgp_util.c gprs_bssgp_vty.c \
gprs_llc.c gprs_llc_vty.c crc24.c
-osmo_gbproxy_SOURCES = gb_proxy.c gb_proxy_main.c gb_proxy_vty.c \
- $(top_srcdir)/src/socket.c $(top_srcdir)/src/debug.c
-osmo_gbproxy_LDADD = libgb.a $(top_builddir)/src/libvty.a
+osmo_gbproxy_SOURCES = gb_proxy.c gb_proxy_main.c gb_proxy_vty.c
+osmo_gbproxy_LDADD = libgb.a $(top_builddir)/src/common/libcommon.a
osmo_sgsn_SOURCES = gprs_gmm.c gprs_sgsn.c gprs_sndcp.c gprs_sndcp_vty.c \
- sgsn_main.c sgsn_vty.c sgsn_libgtp.c \
- $(top_srcdir)/src/socket.c $(top_srcdir)/src/debug.c
-osmo_sgsn_LDADD = libgb.a $(top_builddir)/src/libvty.a -lgtp
+ sgsn_main.c sgsn_vty.c sgsn_libgtp.c
+osmo_sgsn_LDADD = libgb.a $(top_builddir)/src/common/libcommon.a -lgtp
diff --git a/openbsc/src/ipaccess/Makefile.am b/openbsc/src/ipaccess/Makefile.am
index c677b3cee..e789a0b08 100644
--- a/openbsc/src/ipaccess/Makefile.am
+++ b/openbsc/src/ipaccess/Makefile.am
@@ -7,7 +7,13 @@ bin_PROGRAMS = ipaccess-find ipaccess-config ipaccess-proxy
ipaccess_find_SOURCES = ipaccess-find.c
ipaccess_config_SOURCES = ipaccess-config.c ipaccess-firmware.c network_listen.c
-ipaccess_config_LDADD = $(top_builddir)/src/libbsc.a $(top_builddir)/src/libmsc.a \
- $(top_builddir)/src/libbsc.a $(top_builddir)/src/libvty.a -ldl -ldbi $(LIBCRYPT)
-ipaccess_proxy_SOURCES = ipaccess-proxy.c ../debug.c
+# FIXME: resolve the bogus dependencies patched around here:
+ipaccess_config_LDADD = $(top_builddir)/src/bsc/libbsc.a $(top_builddir)/src/msc/libmsc.a \
+ $(top_builddir)/src/abis/libabis.a $(top_builddir)/src/bsc/libbsc.a \
+ $(top_builddir)/src/trau/libtrau.a \
+ $(top_builddir)/src/common/libcommon.a \
+ -ldl -ldbi $(LIBCRYPT)
+
+ipaccess_proxy_SOURCES = ipaccess-proxy.c
+ipaccess_proxy_LDADD = $(top_builddir)/src/common/libcommon.a
diff --git a/openbsc/src/mgcp/Makefile.am b/openbsc/src/mgcp/Makefile.am
new file mode 100644
index 000000000..b1d1d158a
--- /dev/null
+++ b/openbsc/src/mgcp/Makefile.am
@@ -0,0 +1,7 @@
+INCLUDES = $(all_includes) -I$(top_srcdir)/include -I$(top_builddir)
+AM_CFLAGS=-Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOVTY_CFLAGS) $(COVERAGE_CFLAGS)
+AM_LDFLAGS = $(LIBOSMOCORE_LIBS) $(COVERAGE_LDFLAGS)
+
+noinst_LIBRARIES = libmgcp.a
+
+libmgcp_a_SOURCES = mgcp_protocol.c mgcp_network.c mgcp_vty.c
diff --git a/openbsc/src/msc/Makefile.am b/openbsc/src/msc/Makefile.am
new file mode 100644
index 000000000..7d895c394
--- /dev/null
+++ b/openbsc/src/msc/Makefile.am
@@ -0,0 +1,19 @@
+INCLUDES = $(all_includes) -I$(top_srcdir)/include -I$(top_builddir)
+AM_CFLAGS=-Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOVTY_CFLAGS) $(COVERAGE_CFLAGS)
+AM_LDFLAGS = $(LIBOSMOCORE_LIBS) $(COVERAGE_LDFLAGS)
+
+noinst_LIBRARIES = libmsc.a
+
+libmsc_a_SOURCES = auth.c \
+ db.c \
+ gsm_04_08.c gsm_04_11.c gsm_04_80.c \
+ gsm_subscriber.c \
+ mncc.c mncc_builtin.c mncc_sock.c \
+ rrlp.c \
+ silent_call.c \
+ sms_queue.c \
+ token_auth.c \
+ ussd.c \
+ vty_interface_layer3.c \
+ osmo_msc.c
+
diff --git a/openbsc/src/msc/a3a8.c b/openbsc/src/msc/a3a8.c
new file mode 100644
index 000000000..04470ba18
--- /dev/null
+++ b/openbsc/src/msc/a3a8.c
@@ -0,0 +1,269 @@
+/* An implementation of the GSM A3A8 algorithm. (Specifically, COMP128.)
+ */
+
+/* Copyright 1998, Marc Briceno, Ian Goldberg, and David Wagner.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * * Neither the name of the authors nor the names of the contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Coded in C merely because C is a much more precise, concise form of
+ * expression for these purposes. See Judge Patel if you have any problems
+ * with this...
+ * Of course, it's only authentication, so it should be exportable for the
+ * usual boring reasons.
+ */
+
+typedef unsigned char Byte;
+
+#include <stdio.h>
+/* #define TEST */
+
+/*
+ * rand[0..15]: the challenge from the base station
+ * key[0..15]: the SIM's A3/A8 long-term key Ki
+ * simoutput[0..11]: what you'd get back if you fed rand and key to a real
+ * SIM.
+ *
+ * The GSM spec states that simoutput[0..3] is SRES,
+ * and simoutput[4..11] is Kc (the A5 session key).
+ * (See GSM 11.11, Section 8.16. See also the leaked document
+ * referenced below.)
+ * Note that Kc is bits 74..127 of the COMP128 output, followed by 10
+ * zeros.
+ * In other words, A5 is keyed with only 54 bits of entropy. This
+ * represents a deliberate weakening of the key used for voice privacy
+ * by a factor of over 1000.
+ *
+ * Verified with a Pacific Bell Schlumberger SIM. Your mileage may vary.
+ *
+ * Marc Briceno <marc@scard.org>, Ian Goldberg <iang@cs.berkeley.edu>,
+ * and David Wagner <daw@cs.berkeley.edu>
+ */
+
+void A3A8(/* in */ Byte rand[16], /* in */ Byte key[16],
+ /* out */ Byte simoutput[12]);
+
+/* The compression tables. */
+static const Byte table_0[512] = {
+ 102,177,186,162, 2,156,112, 75, 55, 25, 8, 12,251,193,246,188,
+ 109,213,151, 53, 42, 79,191,115,233,242,164,223,209,148,108,161,
+ 252, 37,244, 47, 64,211, 6,237,185,160,139,113, 76,138, 59, 70,
+ 67, 26, 13,157, 63,179,221, 30,214, 36,166, 69,152,124,207,116,
+ 247,194, 41, 84, 71, 1, 49, 14, 95, 35,169, 21, 96, 78,215,225,
+ 182,243, 28, 92,201,118, 4, 74,248,128, 17, 11,146,132,245, 48,
+ 149, 90,120, 39, 87,230,106,232,175, 19,126,190,202,141,137,176,
+ 250, 27,101, 40,219,227, 58, 20, 51,178, 98,216,140, 22, 32,121,
+ 61,103,203, 72, 29,110, 85,212,180,204,150,183, 15, 66,172,196,
+ 56,197,158, 0,100, 45,153, 7,144,222,163,167, 60,135,210,231,
+ 174,165, 38,249,224, 34,220,229,217,208,241, 68,206,189,125,255,
+ 239, 54,168, 89,123,122, 73,145,117,234,143, 99,129,200,192, 82,
+ 104,170,136,235, 93, 81,205,173,236, 94,105, 52, 46,228,198, 5,
+ 57,254, 97,155,142,133,199,171,187, 50, 65,181,127,107,147,226,
+ 184,218,131, 33, 77, 86, 31, 44, 88, 62,238, 18, 24, 43,154, 23,
+ 80,159,134,111, 9,114, 3, 91, 16,130, 83, 10,195,240,253,119,
+ 177,102,162,186,156, 2, 75,112, 25, 55, 12, 8,193,251,188,246,
+ 213,109, 53,151, 79, 42,115,191,242,233,223,164,148,209,161,108,
+ 37,252, 47,244,211, 64,237, 6,160,185,113,139,138, 76, 70, 59,
+ 26, 67,157, 13,179, 63, 30,221, 36,214, 69,166,124,152,116,207,
+ 194,247, 84, 41, 1, 71, 14, 49, 35, 95, 21,169, 78, 96,225,215,
+ 243,182, 92, 28,118,201, 74, 4,128,248, 11, 17,132,146, 48,245,
+ 90,149, 39,120,230, 87,232,106, 19,175,190,126,141,202,176,137,
+ 27,250, 40,101,227,219, 20, 58,178, 51,216, 98, 22,140,121, 32,
+ 103, 61, 72,203,110, 29,212, 85,204,180,183,150, 66, 15,196,172,
+ 197, 56, 0,158, 45,100, 7,153,222,144,167,163,135, 60,231,210,
+ 165,174,249, 38, 34,224,229,220,208,217, 68,241,189,206,255,125,
+ 54,239, 89,168,122,123,145, 73,234,117, 99,143,200,129, 82,192,
+ 170,104,235,136, 81, 93,173,205, 94,236, 52,105,228, 46, 5,198,
+ 254, 57,155, 97,133,142,171,199, 50,187,181, 65,107,127,226,147,
+ 218,184, 33,131, 86, 77, 44, 31, 62, 88, 18,238, 43, 24, 23,154,
+ 159, 80,111,134,114, 9, 91, 3,130, 16, 10, 83,240,195,119,253
+ }, table_1[256] = {
+ 19, 11, 80,114, 43, 1, 69, 94, 39, 18,127,117, 97, 3, 85, 43,
+ 27,124, 70, 83, 47, 71, 63, 10, 47, 89, 79, 4, 14, 59, 11, 5,
+ 35,107,103, 68, 21, 86, 36, 91, 85,126, 32, 50,109, 94,120, 6,
+ 53, 79, 28, 45, 99, 95, 41, 34, 88, 68, 93, 55,110,125,105, 20,
+ 90, 80, 76, 96, 23, 60, 89, 64,121, 56, 14, 74,101, 8, 19, 78,
+ 76, 66,104, 46,111, 50, 32, 3, 39, 0, 58, 25, 92, 22, 18, 51,
+ 57, 65,119,116, 22,109, 7, 86, 59, 93, 62,110, 78, 99, 77, 67,
+ 12,113, 87, 98,102, 5, 88, 33, 38, 56, 23, 8, 75, 45, 13, 75,
+ 95, 63, 28, 49,123,120, 20,112, 44, 30, 15, 98,106, 2,103, 29,
+ 82,107, 42,124, 24, 30, 41, 16,108,100,117, 40, 73, 40, 7,114,
+ 82,115, 36,112, 12,102,100, 84, 92, 48, 72, 97, 9, 54, 55, 74,
+ 113,123, 17, 26, 53, 58, 4, 9, 69,122, 21,118, 42, 60, 27, 73,
+ 118,125, 34, 15, 65,115, 84, 64, 62, 81, 70, 1, 24,111,121, 83,
+ 104, 81, 49,127, 48,105, 31, 10, 6, 91, 87, 37, 16, 54,116,126,
+ 31, 38, 13, 0, 72,106, 77, 61, 26, 67, 46, 29, 96, 37, 61, 52,
+ 101, 17, 44,108, 71, 52, 66, 57, 33, 51, 25, 90, 2,119,122, 35
+ }, table_2[128] = {
+ 52, 50, 44, 6, 21, 49, 41, 59, 39, 51, 25, 32, 51, 47, 52, 43,
+ 37, 4, 40, 34, 61, 12, 28, 4, 58, 23, 8, 15, 12, 22, 9, 18,
+ 55, 10, 33, 35, 50, 1, 43, 3, 57, 13, 62, 14, 7, 42, 44, 59,
+ 62, 57, 27, 6, 8, 31, 26, 54, 41, 22, 45, 20, 39, 3, 16, 56,
+ 48, 2, 21, 28, 36, 42, 60, 33, 34, 18, 0, 11, 24, 10, 17, 61,
+ 29, 14, 45, 26, 55, 46, 11, 17, 54, 46, 9, 24, 30, 60, 32, 0,
+ 20, 38, 2, 30, 58, 35, 1, 16, 56, 40, 23, 48, 13, 19, 19, 27,
+ 31, 53, 47, 38, 63, 15, 49, 5, 37, 53, 25, 36, 63, 29, 5, 7
+ }, table_3[64] = {
+ 1, 5, 29, 6, 25, 1, 18, 23, 17, 19, 0, 9, 24, 25, 6, 31,
+ 28, 20, 24, 30, 4, 27, 3, 13, 15, 16, 14, 18, 4, 3, 8, 9,
+ 20, 0, 12, 26, 21, 8, 28, 2, 29, 2, 15, 7, 11, 22, 14, 10,
+ 17, 21, 12, 30, 26, 27, 16, 31, 11, 7, 13, 23, 10, 5, 22, 19
+ }, table_4[32] = {
+ 15, 12, 10, 4, 1, 14, 11, 7, 5, 0, 14, 7, 1, 2, 13, 8,
+ 10, 3, 4, 9, 6, 0, 3, 2, 5, 6, 8, 9, 11, 13, 15, 12
+ }, *table[5] = { table_0, table_1, table_2, table_3, table_4 };
+
+/*
+ * This code derived from a leaked document from the GSM standards.
+ * Some missing pieces were filled in by reverse-engineering a working SIM.
+ * We have verified that this is the correct COMP128 algorithm.
+ *
+ * The first page of the document identifies it as
+ * _Technical Information: GSM System Security Study_.
+ * 10-1617-01, 10th June 1988.
+ * The bottom of the title page is marked
+ * Racal Research Ltd.
+ * Worton Drive, Worton Grange Industrial Estate,
+ * Reading, Berks. RG2 0SB, England.
+ * Telephone: Reading (0734) 868601 Telex: 847152
+ * The relevant bits are in Part I, Section 20 (pages 66--67). Enjoy!
+ *
+ * Note: There are three typos in the spec (discovered by
+ * reverse-engineering).
+ * First, "z = (2 * x[n] + x[n]) mod 2^(9-j)" should clearly read
+ * "z = (2 * x[m] + x[n]) mod 2^(9-j)".
+ * Second, the "k" loop in the "Form bits from bytes" section is severely
+ * botched: the k index should run only from 0 to 3, and clearly the range
+ * on "the (8-k)th bit of byte j" is also off (should be 0..7, not 1..8,
+ * to be consistent with the subsequent section).
+ * Third, SRES is taken from the first 8 nibbles of x[], not the last 8 as
+ * claimed in the document. (And the document doesn't specify how Kc is
+ * derived, but that was also easily discovered with reverse engineering.)
+ * All of these typos have been corrected in the following code.
+ */
+
+void A3A8(/* in */ Byte rand[16], /* in */ Byte key[16],
+ /* out */ Byte simoutput[12])
+{
+ Byte x[32], bit[128];
+ int i, j, k, l, m, n, y, z, next_bit;
+
+ /* ( Load RAND into last 16 bytes of input ) */
+ for (i=16; i<32; i++)
+ x[i] = rand[i-16];
+
+ /* ( Loop eight times ) */
+ for (i=1; i<9; i++) {
+ /* ( Load key into first 16 bytes of input ) */
+ for (j=0; j<16; j++)
+ x[j] = key[j];
+ /* ( Perform substitutions ) */
+ for (j=0; j<5; j++)
+ for (k=0; k<(1<<j); k++)
+ for (l=0; l<(1<<(4-j)); l++) {
+ m = l + k*(1<<(5-j));
+ n = m + (1<<(4-j));
+ y = (x[m]+2*x[n]) % (1<<(9-j));
+ z = (2*x[m]+x[n]) % (1<<(9-j));
+ x[m] = table[j][y];
+ x[n] = table[j][z];
+ }
+ /* ( Form bits from bytes ) */
+ for (j=0; j<32; j++)
+ for (k=0; k<4; k++)
+ bit[4*j+k] = (x[j]>>(3-k)) & 1;
+ /* ( Permutation but not on the last loop ) */
+ if (i < 8)
+ for (j=0; j<16; j++) {
+ x[j+16] = 0;
+ for (k=0; k<8; k++) {
+ next_bit = ((8*j + k)*17) % 128;
+ x[j+16] |= bit[next_bit] << (7-k);
+ }
+ }
+ }
+
+ /*
+ * ( At this stage the vector x[] consists of 32 nibbles.
+ * The first 8 of these are taken as the output SRES. )
+ */
+
+ /* The remainder of the code is not given explicitly in the
+ * standard, but was derived by reverse-engineering.
+ */
+
+ for (i=0; i<4; i++)
+ simoutput[i] = (x[2*i]<<4) | x[2*i+1];
+ for (i=0; i<6; i++)
+ simoutput[4+i] = (x[2*i+18]<<6) | (x[2*i+18+1]<<2)
+ | (x[2*i+18+2]>>2);
+ simoutput[4+6] = (x[2*6+18]<<6) | (x[2*6+18+1]<<2);
+ simoutput[4+7] = 0;
+}
+
+
+#ifdef TEST
+int hextoint(char x)
+{
+ x = toupper(x);
+ if (x >= 'A' && x <= 'F')
+ return x-'A'+10;
+ else if (x >= '0' && x <= '9')
+ return x-'0';
+ fprintf(stderr, "bad input.\n");
+ exit(1);
+}
+
+int main(int argc, char **argv)
+{
+ Byte key[16], rand[16], simoutput[12];
+ int i;
+
+ if (argc != 3 || strlen(argv[1]) != 34 || strlen(argv[2]) != 34
+ || strncmp(argv[1], "0x", 2) != 0
+ || strncmp(argv[2], "0x", 2) != 0) {
+ fprintf(stderr, "Usage: %s 0x<key> 0x<rand>\n", argv[0]);
+ exit(1);
+ }
+
+ for (i=0; i<16; i++)
+ key[i] = (hextoint(argv[1][2*i+2])<<4)
+ | hextoint(argv[1][2*i+3]);
+ for (i=0; i<16; i++)
+ rand[i] = (hextoint(argv[2][2*i+2])<<4)
+ | hextoint(argv[2][2*i+3]);
+ A3A8(rand, key, simoutput);
+ printf("simoutput: ");
+ for (i=0; i<12; i++)
+ printf("%02X", simoutput[i]);
+ printf("\n");
+ return 0;
+}
+#endif
+
diff --git a/openbsc/src/auth.c b/openbsc/src/msc/auth.c
index e09bde5f3..e09bde5f3 100644
--- a/openbsc/src/auth.c
+++ b/openbsc/src/msc/auth.c
diff --git a/openbsc/src/db.c b/openbsc/src/msc/db.c
index 95a7d36fb..95a7d36fb 100644
--- a/openbsc/src/db.c
+++ b/openbsc/src/msc/db.c
diff --git a/openbsc/src/gsm_04_08.c b/openbsc/src/msc/gsm_04_08.c
index b08b375cb..2b61aa9b0 100644
--- a/openbsc/src/gsm_04_08.c
+++ b/openbsc/src/msc/gsm_04_08.c
@@ -75,6 +75,11 @@ struct gsm_lai {
static u_int32_t new_callref = 0x80000001;
+void cc_tx_to_mncc(struct gsm_network *net, struct msgb *msg)
+{
+ net->mncc_recv(net, msg);
+}
+
static int gsm48_conn_sendmsg(struct msgb *msg, struct gsm_subscriber_connection *conn,
struct gsm_trans *trans)
{
diff --git a/openbsc/src/gsm_04_11.c b/openbsc/src/msc/gsm_04_11.c
index 812e758cd..812e758cd 100644
--- a/openbsc/src/gsm_04_11.c
+++ b/openbsc/src/msc/gsm_04_11.c
diff --git a/openbsc/src/gsm_04_80.c b/openbsc/src/msc/gsm_04_80.c
index 494c319fe..494c319fe 100644
--- a/openbsc/src/gsm_04_80.c
+++ b/openbsc/src/msc/gsm_04_80.c
diff --git a/openbsc/src/gsm_subscriber.c b/openbsc/src/msc/gsm_subscriber.c
index db61f25aa..db61f25aa 100644
--- a/openbsc/src/gsm_subscriber.c
+++ b/openbsc/src/msc/gsm_subscriber.c
diff --git a/openbsc/src/mncc.c b/openbsc/src/msc/mncc.c
index 3630b91b4..3630b91b4 100644
--- a/openbsc/src/mncc.c
+++ b/openbsc/src/msc/mncc.c
diff --git a/openbsc/src/mncc_builtin.c b/openbsc/src/msc/mncc_builtin.c
index 0226b2748..0226b2748 100644
--- a/openbsc/src/mncc_builtin.c
+++ b/openbsc/src/msc/mncc_builtin.c
diff --git a/openbsc/src/mncc_sock.c b/openbsc/src/msc/mncc_sock.c
index 2eef7c86e..2eef7c86e 100644
--- a/openbsc/src/mncc_sock.c
+++ b/openbsc/src/msc/mncc_sock.c
diff --git a/openbsc/src/osmo_msc.c b/openbsc/src/msc/osmo_msc.c
index 8c86dcc8e..8c86dcc8e 100644
--- a/openbsc/src/osmo_msc.c
+++ b/openbsc/src/msc/osmo_msc.c
diff --git a/openbsc/src/rrlp.c b/openbsc/src/msc/rrlp.c
index ae5ca478e..ae5ca478e 100644
--- a/openbsc/src/rrlp.c
+++ b/openbsc/src/msc/rrlp.c
diff --git a/openbsc/src/silent_call.c b/openbsc/src/msc/silent_call.c
index 64ebdfdb9..64ebdfdb9 100644
--- a/openbsc/src/silent_call.c
+++ b/openbsc/src/msc/silent_call.c
diff --git a/openbsc/src/sms_queue.c b/openbsc/src/msc/sms_queue.c
index 079755d22..079755d22 100644
--- a/openbsc/src/sms_queue.c
+++ b/openbsc/src/msc/sms_queue.c
diff --git a/openbsc/src/token_auth.c b/openbsc/src/msc/token_auth.c
index 3404dd4ee..3404dd4ee 100644
--- a/openbsc/src/token_auth.c
+++ b/openbsc/src/msc/token_auth.c
diff --git a/openbsc/src/ussd.c b/openbsc/src/msc/ussd.c
index 72f26bd36..72f26bd36 100644
--- a/openbsc/src/ussd.c
+++ b/openbsc/src/msc/ussd.c
diff --git a/openbsc/src/vty_interface_layer3.c b/openbsc/src/msc/vty_interface_layer3.c
index a38d15bbb..a38d15bbb 100644
--- a/openbsc/src/vty_interface_layer3.c
+++ b/openbsc/src/msc/vty_interface_layer3.c
diff --git a/openbsc/src/nat/Makefile.am b/openbsc/src/nat/Makefile.am
index 5afcc2e7f..7ee587d42 100644
--- a/openbsc/src/nat/Makefile.am
+++ b/openbsc/src/nat/Makefile.am
@@ -6,8 +6,8 @@ bin_PROGRAMS = bsc_nat
bsc_nat_SOURCES = bsc_filter.c bsc_mgcp_utils.c bsc_nat.c bsc_nat_utils.c \
- bsc_nat_vty.c bsc_sccp.c bsc_ussd.c \
- $(top_srcdir)/src/debug.c $(top_srcdir)/src/bsc_msc.c
-bsc_nat_LDADD = $(top_builddir)/src/libvty.a \
- $(top_builddir)/src/libmgcp.a $(top_builddir)/src/libbsc.a \
+ bsc_nat_vty.c bsc_sccp.c bsc_ussd.c
+bsc_nat_LDADD = $(top_builddir)/src/common/libcommon.a \
+ $(top_builddir)/src/mgcp/libmgcp.a $(top_builddir)/src/bsc/libbsc.a \
+ $(top_builddir)/src/abis/libabis.a $(top_builddir)/src/trau/libtrau.a \
-lrt $(LIBOSMOSCCP_LIBS)
diff --git a/openbsc/src/osmo-bsc/Makefile.am b/openbsc/src/osmo-bsc/Makefile.am
new file mode 100644
index 000000000..735d440a1
--- /dev/null
+++ b/openbsc/src/osmo-bsc/Makefile.am
@@ -0,0 +1,14 @@
+INCLUDES = $(all_includes) -I$(top_srcdir)/include -I$(top_builddir)
+AM_CFLAGS=-Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOVTY_CFLAGS) $(LIBOSMOSCCP_CFLAGS) $(COVERAGE_CFLAGS)
+AM_LDFLAGS = $(LIBOSMOCORE_LIBS) $(LIBOSMOVTY_LIBS) $(COVERAGE_LDFLAGS)
+
+bin_PROGRAMS = osmo-bsc
+
+
+osmo_bsc_SOURCES = osmo_bsc_main.c osmo_bsc_rf.c osmo_bsc_vty.c osmo_bsc_api.c \
+ osmo_bsc_grace.c osmo_bsc_msc.c osmo_bsc_sccp.c \
+ osmo_bsc_filter.c osmo_bsc_bssap.c osmo_bsc_audio.c
+# once again since TRAU uses CC symbol :(
+osmo_bsc_LDADD = ../bsc/libbsc.a ../msc/libmsc.a ../bsc/libbsc.a \
+ ../abis/libabis.a ../trau/libtrau.a ../common/libcommon.a \
+ $(LIBOSMOSCCP_LIBS)
diff --git a/openbsc/src/bsc/osmo_bsc_api.c b/openbsc/src/osmo-bsc/osmo_bsc_api.c
index b8cbcf2f3..b8cbcf2f3 100644
--- a/openbsc/src/bsc/osmo_bsc_api.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_api.c
diff --git a/openbsc/src/bsc/osmo_bsc_audio.c b/openbsc/src/osmo-bsc/osmo_bsc_audio.c
index 515cfa7fb..515cfa7fb 100644
--- a/openbsc/src/bsc/osmo_bsc_audio.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_audio.c
diff --git a/openbsc/src/bsc/osmo_bsc_bssap.c b/openbsc/src/osmo-bsc/osmo_bsc_bssap.c
index f8711314d..f8711314d 100644
--- a/openbsc/src/bsc/osmo_bsc_bssap.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_bssap.c
diff --git a/openbsc/src/bsc/osmo_bsc_filter.c b/openbsc/src/osmo-bsc/osmo_bsc_filter.c
index d2735a63a..d2735a63a 100644
--- a/openbsc/src/bsc/osmo_bsc_filter.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_filter.c
diff --git a/openbsc/src/bsc/osmo_bsc_grace.c b/openbsc/src/osmo-bsc/osmo_bsc_grace.c
index f699cf39c..f699cf39c 100644
--- a/openbsc/src/bsc/osmo_bsc_grace.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_grace.c
diff --git a/openbsc/src/bsc/osmo_bsc_main.c b/openbsc/src/osmo-bsc/osmo_bsc_main.c
index 18756e52f..18756e52f 100644
--- a/openbsc/src/bsc/osmo_bsc_main.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_main.c
diff --git a/openbsc/src/bsc/osmo_bsc_msc.c b/openbsc/src/osmo-bsc/osmo_bsc_msc.c
index 2e8cf0579..2e8cf0579 100644
--- a/openbsc/src/bsc/osmo_bsc_msc.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_msc.c
diff --git a/openbsc/src/bsc/osmo_bsc_rf.c b/openbsc/src/osmo-bsc/osmo_bsc_rf.c
index 5652c9df5..5652c9df5 100644
--- a/openbsc/src/bsc/osmo_bsc_rf.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_rf.c
diff --git a/openbsc/src/bsc/osmo_bsc_sccp.c b/openbsc/src/osmo-bsc/osmo_bsc_sccp.c
index 1abb47394..1abb47394 100644
--- a/openbsc/src/bsc/osmo_bsc_sccp.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_sccp.c
diff --git a/openbsc/src/bsc/osmo_bsc_vty.c b/openbsc/src/osmo-bsc/osmo_bsc_vty.c
index 166774275..166774275 100644
--- a/openbsc/src/bsc/osmo_bsc_vty.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_vty.c
diff --git a/openbsc/src/osmo-nitb/Makefile.am b/openbsc/src/osmo-nitb/Makefile.am
new file mode 100644
index 000000000..55822e906
--- /dev/null
+++ b/openbsc/src/osmo-nitb/Makefile.am
@@ -0,0 +1,10 @@
+INCLUDES = $(all_includes) -I$(top_srcdir)/include -I$(top_builddir)
+AM_CFLAGS=-Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOVTY_CFLAGS) $(COVERAGE_CFLAGS)
+AM_LDFLAGS = $(LIBOSMOCORE_LIBS) $(COVERAGE_LDFLAGS)
+
+bin_PROGRAMS = osmo-nitb
+
+osmo_nitb_SOURCES = bsc_hack.c
+osmo_nitb_LDADD = -ldl -ldbi $(LIBCRYPT) $(LIBOSMOVTY_LIBS) \
+ ../bsc/libbsc.a ../msc/libmsc.a ../bsc/libbsc.a ../trau/libtrau.a ../abis/libabis.a \
+ ../common/libcommon.a
diff --git a/openbsc/src/bsc_hack.c b/openbsc/src/osmo-nitb/bsc_hack.c
index 8c6d30b0d..8c6d30b0d 100644
--- a/openbsc/src/bsc_hack.c
+++ b/openbsc/src/osmo-nitb/bsc_hack.c
diff --git a/openbsc/src/trau/Makefile.am b/openbsc/src/trau/Makefile.am
new file mode 100644
index 000000000..01ed251d8
--- /dev/null
+++ b/openbsc/src/trau/Makefile.am
@@ -0,0 +1,7 @@
+INCLUDES = $(all_includes) -I$(top_srcdir)/include -I$(top_builddir)
+AM_CFLAGS=-Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOVTY_CFLAGS) $(COVERAGE_CFLAGS)
+AM_LDFLAGS = $(LIBOSMOCORE_LIBS) $(COVERAGE_LDFLAGS)
+
+noinst_LIBRARIES = libtrau.a
+
+libtrau_a_SOURCES = rtp_proxy.c subchan_demux.c trau_frame.c trau_mux.c trau_upqueue.c
diff --git a/openbsc/src/rtp_proxy.c b/openbsc/src/trau/rtp_proxy.c
index 8d14447fa..eefc0e1d6 100644
--- a/openbsc/src/rtp_proxy.c
+++ b/openbsc/src/trau/rtp_proxy.c
@@ -442,7 +442,7 @@ static int rtp_socket_read(struct rtp_socket *rs, struct rtp_sub_socket *rss)
if (rc < 0)
goto out_free;
msgb_free(msg);
- cc_tx_to_mncc(rs->receive.net, new_msg);
+ trau_tx_to_mncc(rs->receive.net, new_msg);
break;
case RTP_NONE: /* if socket exists, but disabled by app */
diff --git a/openbsc/src/subchan_demux.c b/openbsc/src/trau/subchan_demux.c
index 6bcf279fe..6bcf279fe 100644
--- a/openbsc/src/subchan_demux.c
+++ b/openbsc/src/trau/subchan_demux.c
diff --git a/openbsc/src/trau_frame.c b/openbsc/src/trau/trau_frame.c
index d4d6447cc..d4d6447cc 100644
--- a/openbsc/src/trau_frame.c
+++ b/openbsc/src/trau/trau_frame.c
diff --git a/openbsc/src/trau_mux.c b/openbsc/src/trau/trau_mux.c
index d521a62e6..712e22d85 100644
--- a/openbsc/src/trau_mux.c
+++ b/openbsc/src/trau/trau_mux.c
@@ -213,7 +213,7 @@ int trau_mux_input(struct gsm_e1_subslot *src_e1_ss,
}
frame->msg_type = GSM_TCHF_FRAME;
frame->callref = ue->callref;
- cc_tx_to_mncc(ue->net, msg);
+ trau_tx_to_mncc(ue->net, msg);
return 0;
}
diff --git a/openbsc/src/mncc_upqueue.c b/openbsc/src/trau/trau_upqueue.c
index 126072b2c..f8edaf0ff 100644
--- a/openbsc/src/mncc_upqueue.c
+++ b/openbsc/src/trau/trau_upqueue.c
@@ -1,4 +1,4 @@
-/* mncc_upqueue.c - Pass msgb's up the chain */
+/* trau_upqueue.c - Pass msgb's up the chain */
/* (C) 2010 by Harald Welte <laforge@gnumonks.org>
* All Rights Reserved
@@ -21,7 +21,7 @@
#include <openbsc/mncc.h>
#include <openbsc/gsm_data.h>
-void cc_tx_to_mncc(struct gsm_network *net, struct msgb *msg)
+void trau_tx_to_mncc(struct gsm_network *net, struct msgb *msg)
{
net->mncc_recv(net, msg);
}
diff --git a/openbsc/src/utils/Makefile.am b/openbsc/src/utils/Makefile.am
new file mode 100644
index 000000000..2847c6ad8
--- /dev/null
+++ b/openbsc/src/utils/Makefile.am
@@ -0,0 +1,10 @@
+INCLUDES = $(all_includes) -I$(top_srcdir)/include -I$(top_builddir)
+AM_CFLAGS=-Wall $(LIBOSMOCORE_CFLAGS) $(LIBOSMOVTY_CFLAGS) $(COVERAGE_CFLAGS)
+AM_LDFLAGS = $(LIBOSMOCORE_LIBS) $(COVERAGE_LDFLAGS)
+
+bin_PROGRAMS = bs11_config isdnsync
+
+bs11_config_SOURCES = bs11_config.c rs232.c
+bs11_config_LDADD = ../common/libcommon.a ../abis/libabis.a ../bsc/libbsc.a
+
+isdnsync_SOURCES = isdnsync.c
diff --git a/openbsc/src/bs11_config.c b/openbsc/src/utils/bs11_config.c
index eaed8b75d..eaed8b75d 100644
--- a/openbsc/src/bs11_config.c
+++ b/openbsc/src/utils/bs11_config.c
diff --git a/openbsc/src/isdnsync.c b/openbsc/src/utils/isdnsync.c
index 1c4aa5d6e..1c4aa5d6e 100644
--- a/openbsc/src/isdnsync.c
+++ b/openbsc/src/utils/isdnsync.c
diff --git a/openbsc/src/rs232.c b/openbsc/src/utils/rs232.c
index 75505710f..75505710f 100644
--- a/openbsc/src/rs232.c
+++ b/openbsc/src/utils/rs232.c