diff options
Diffstat (limited to 'openbsc/src/libbsc')
-rw-r--r-- | openbsc/src/libbsc/Makefile.am | 2 | ||||
-rw-r--r-- | openbsc/src/libbsc/bsc_init.c | 13 | ||||
-rw-r--r-- | openbsc/src/libbsc/bts_ericsson_rbs2000.c | 10 | ||||
-rw-r--r-- | openbsc/src/libbsc/bts_hsl_femtocell.c | 11 | ||||
-rw-r--r-- | openbsc/src/libbsc/bts_init.c | 29 | ||||
-rw-r--r-- | openbsc/src/libbsc/bts_ipaccess_nanobts.c | 12 | ||||
-rw-r--r-- | openbsc/src/libbsc/bts_siemens_bs11.c | 10 |
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); } |