aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/libbsc
diff options
context:
space:
mode:
Diffstat (limited to 'openbsc/src/libbsc')
-rw-r--r--openbsc/src/libbsc/Makefile.am2
-rw-r--r--openbsc/src/libbsc/bsc_init.c13
-rw-r--r--openbsc/src/libbsc/bts_ericsson_rbs2000.c10
-rw-r--r--openbsc/src/libbsc/bts_hsl_femtocell.c11
-rw-r--r--openbsc/src/libbsc/bts_init.c29
-rw-r--r--openbsc/src/libbsc/bts_ipaccess_nanobts.c12
-rw-r--r--openbsc/src/libbsc/bts_siemens_bs11.c10
7 files changed, 77 insertions, 10 deletions
diff --git a/openbsc/src/libbsc/Makefile.am b/openbsc/src/libbsc/Makefile.am
index 70f6c1c14..3af4a2a3d 100644
--- a/openbsc/src/libbsc/Makefile.am
+++ b/openbsc/src/libbsc/Makefile.am
@@ -20,5 +20,5 @@ libbsc_a_SOURCES = abis_nm.c abis_nm_vty.c \
e1_config.c \
bsc_api.c bsc_msc.c bsc_vty.c \
gsm_04_08_utils.c \
- bsc_init.c
+ bsc_init.c bts_init.c
diff --git a/openbsc/src/libbsc/bsc_init.c b/openbsc/src/libbsc/bsc_init.c
index ecb4e443a..19453f79e 100644
--- a/openbsc/src/libbsc/bsc_init.c
+++ b/openbsc/src/libbsc/bsc_init.c
@@ -315,6 +315,14 @@ static int bootstrap_bts(struct gsm_bts *bts)
{
int i, n;
+ if (bts->model->start && !bts->model->started) {
+ int ret = bts->model->start(bts->network);
+ if (ret < 0)
+ return ret;
+
+ bts->model->started = true;
+ }
+
/* FIXME: What about secondary TRX of a BTS? What about a BTS that has TRX
* in different bands? Why is 'band' a parameter of the BTS and not of the TRX? */
switch (bts->band) {
@@ -456,10 +464,5 @@ int bsc_bootstrap_network(int (*mncc_recv)(struct gsm_network *, struct msgb *),
return rc;
}
}
-
- /* initialize nanoBTS support omce */
- rc = ipaccess_setup(bsc_gsmnet);
- rc = hsl_setup(bsc_gsmnet);
-
return 0;
}
diff --git a/openbsc/src/libbsc/bts_ericsson_rbs2000.c b/openbsc/src/libbsc/bts_ericsson_rbs2000.c
index c2ae0e7ae..9c98a9fef 100644
--- a/openbsc/src/libbsc/bts_ericsson_rbs2000.c
+++ b/openbsc/src/libbsc/bts_ericsson_rbs2000.c
@@ -242,14 +242,17 @@ static void config_write_bts(struct vty *vty, struct gsm_bts *bts)
abis_om2k_config_write_bts(vty, bts);
}
+static int bts_model_rbs2k_start(struct gsm_network *net);
+
static struct gsm_bts_model model_rbs2k = {
.type = GSM_BTS_TYPE_RBS2000,
.name = "rbs2000",
+ .start = bts_model_rbs2k_start,
.oml_rcvmsg = &abis_om2k_rcvmsg,
.config_write_bts = &config_write_bts,
};
-int bts_model_rbs2k_init(void)
+static int bts_model_rbs2k_start(struct gsm_network *net)
{
model_rbs2k.features.data = &model_rbs2k._features_data[0];
model_rbs2k.features.data_len = sizeof(model_rbs2k._features_data);
@@ -261,5 +264,10 @@ int bts_model_rbs2k_init(void)
osmo_signal_register_handler(SS_GLOBAL, gbl_sig_cb, NULL);
osmo_signal_register_handler(SS_NM, nm_sig_cb, NULL);
+ return 0;
+}
+
+int bts_model_rbs2k_init(void)
+{
return gsm_bts_model_register(&model_rbs2k);
}
diff --git a/openbsc/src/libbsc/bts_hsl_femtocell.c b/openbsc/src/libbsc/bts_hsl_femtocell.c
index 7264a21a6..f94369356 100644
--- a/openbsc/src/libbsc/bts_hsl_femtocell.c
+++ b/openbsc/src/libbsc/bts_hsl_femtocell.c
@@ -30,8 +30,11 @@
#include <openbsc/signal.h>
#include <openbsc/e1_input.h>
+static int bts_model_hslfemto_start(struct gsm_network *net);
+
static struct gsm_bts_model model_hslfemto = {
.type = GSM_BTS_TYPE_HSL_FEMTO,
+ .start = bts_model_hslfemto_start,
.nm_att_tlvdef = {
.def = {
/* no HSL specific OML attributes that we know of */
@@ -148,7 +151,7 @@ static int inp_sig_cb(unsigned int subsys, unsigned int signal,
return 0;
}
-int bts_model_hslfemto_init(void)
+static int bts_model_hslfemto_start(struct gsm_network *net)
{
model_hslfemto.features.data = &model_hslfemto._features_data[0];
model_hslfemto.features.data_len = sizeof(model_hslfemto._features_data);
@@ -158,5 +161,11 @@ int bts_model_hslfemto_init(void)
osmo_signal_register_handler(SS_INPUT, inp_sig_cb, NULL);
+ /* Call A-bis input driver, start socket for OML and RSL. */
+ return hsl_setup(net);
+}
+
+int bts_model_hslfemto_init(void)
+{
return gsm_bts_model_register(&model_hslfemto);
}
diff --git a/openbsc/src/libbsc/bts_init.c b/openbsc/src/libbsc/bts_init.c
new file mode 100644
index 000000000..87bdde066
--- /dev/null
+++ b/openbsc/src/libbsc/bts_init.c
@@ -0,0 +1,29 @@
+/* (C) 2011 by Harald Welte <laforge@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 <openbsc/bss.h>
+
+int bts_init(void)
+{
+ bts_model_bs11_init();
+ bts_model_rbs2k_init();
+ bts_model_nanobts_init();
+ bts_model_hslfemto_init();
+ /* Your new BTS here. */
+ return 0;
+}
diff --git a/openbsc/src/libbsc/bts_ipaccess_nanobts.c b/openbsc/src/libbsc/bts_ipaccess_nanobts.c
index 13bed2260..706712ed4 100644
--- a/openbsc/src/libbsc/bts_ipaccess_nanobts.c
+++ b/openbsc/src/libbsc/bts_ipaccess_nanobts.c
@@ -26,10 +26,14 @@
#include <openbsc/gsm_data.h>
#include <openbsc/signal.h>
#include <openbsc/abis_nm.h>
+#include <openbsc/e1_input.h> /* for ipaccess_setup() */
+
+static int bts_model_nanobts_start(struct gsm_network *net);
static struct gsm_bts_model model_nanobts = {
.type = GSM_BTS_TYPE_NANOBTS,
.name = "nanobts",
+ .start = bts_model_nanobts_start,
.oml_rcvmsg = &abis_nm_rcvmsg,
.nm_att_tlvdef = {
.def = {
@@ -435,7 +439,7 @@ static int nm_sig_cb(unsigned int subsys, unsigned int signal,
return 0;
}
-int bts_model_nanobts_init(void)
+static int bts_model_nanobts_start(struct gsm_network *net)
{
model_nanobts.features.data = &model_nanobts._features_data[0];
model_nanobts.features.data_len = sizeof(model_nanobts._features_data);
@@ -445,5 +449,11 @@ int bts_model_nanobts_init(void)
osmo_signal_register_handler(SS_NM, nm_sig_cb, NULL);
+ /* Call A-bis input driver, start server sockets for OML and RSL. */
+ return ipaccess_setup(net);
+}
+
+int bts_model_nanobts_init(void)
+{
return gsm_bts_model_register(&model_nanobts);
}
diff --git a/openbsc/src/libbsc/bts_siemens_bs11.c b/openbsc/src/libbsc/bts_siemens_bs11.c
index 44f935857..df4a1dc23 100644
--- a/openbsc/src/libbsc/bts_siemens_bs11.c
+++ b/openbsc/src/libbsc/bts_siemens_bs11.c
@@ -28,9 +28,12 @@
#include <openbsc/e1_input.h>
#include <openbsc/signal.h>
+static int bts_model_bs11_start(struct gsm_network *net);
+
static struct gsm_bts_model model_bs11 = {
.type = GSM_BTS_TYPE_BS11,
.name = "bs11",
+ .start = bts_model_bs11_start,
.oml_rcvmsg = &abis_nm_rcvmsg,
.nm_att_tlvdef = {
.def = {
@@ -575,7 +578,7 @@ static int inp_sig_cb(unsigned int subsys, unsigned int signal,
return 0;
}
-int bts_model_bs11_init(void)
+static int bts_model_bs11_start(struct gsm_network *net)
{
model_bs11.features.data = &model_bs11._features_data[0];
model_bs11.features.data_len = sizeof(model_bs11._features_data);
@@ -586,5 +589,10 @@ int bts_model_bs11_init(void)
osmo_signal_register_handler(SS_INPUT, inp_sig_cb, NULL);
osmo_signal_register_handler(SS_GLOBAL, gbl_sig_cb, NULL);
+ return 0;
+}
+
+int bts_model_bs11_init(void)
+{
return gsm_bts_model_register(&model_bs11);
}