aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <zecke@selfish.org>2013-04-29 20:45:46 +0200
committerHolger Hans Peter Freyther <zecke@selfish.org>2013-04-29 20:47:52 +0200
commite152a46f6e171976f9adb20f5e11d44769ba7a31 (patch)
treeebddbdcfd212e24a2b40f4586505dd5625bbef88
parent7a0010bdd4d8741c591ad40e70798136fee6e18f (diff)
parente48c1871aff174faf2341a57b84104ab0d2abb67 (diff)
Merge branch 'zecke/features/sysmobts'
* This branch make the type sysmobts work. * Asssume a bsc_gsmnet variable to be defined. * This allows to use channel configurations not supported by the nanoBTS. * Manually tested with the FakeBTS and tested by users.
-rw-r--r--openbsc/src/ipaccess/ipaccess-config.c8
-rw-r--r--openbsc/src/libbsc/bts_ipaccess_nanobts.c27
-rw-r--r--openbsc/src/libbsc/bts_sysmobts.c22
3 files changed, 22 insertions, 35 deletions
diff --git a/openbsc/src/ipaccess/ipaccess-config.c b/openbsc/src/ipaccess/ipaccess-config.c
index 05fdc14af..14749d830 100644
--- a/openbsc/src/ipaccess/ipaccess-config.c
+++ b/openbsc/src/ipaccess/ipaccess-config.c
@@ -53,7 +53,7 @@
#include <osmocom/core/talloc.h>
#include <osmocom/abis/abis.h>
-static struct gsm_network *gsmnet;
+struct gsm_network *bsc_gsmnet;
static int net_listen_testnr;
static int restart;
@@ -980,11 +980,11 @@ int main(int argc, char **argv)
}
libosmo_abis_init(tall_ctx_config);
- gsmnet = gsm_network_init(1, 1, NULL);
- if (!gsmnet)
+ bsc_gsmnet = gsm_network_init(1, 1, NULL);
+ if (!bsc_gsmnet)
exit(1);
- bts = gsm_bts_alloc_register(gsmnet, GSM_BTS_TYPE_NANOBTS, HARDCODED_TSC,
+ bts = gsm_bts_alloc_register(bsc_gsmnet, GSM_BTS_TYPE_NANOBTS, HARDCODED_TSC,
HARDCODED_BSIC);
/* ip.access supports up to 4 chained TRX */
gsm_bts_trx_alloc(bts);
diff --git a/openbsc/src/libbsc/bts_ipaccess_nanobts.c b/openbsc/src/libbsc/bts_ipaccess_nanobts.c
index 5d96967cf..4bf937b0a 100644
--- a/openbsc/src/libbsc/bts_ipaccess_nanobts.c
+++ b/openbsc/src/libbsc/bts_ipaccess_nanobts.c
@@ -38,6 +38,8 @@
#include <osmocom/abis/ipaccess.h>
#include <osmocom/core/logging.h>
+extern struct gsm_network *bsc_gsmnet;
+
static int bts_model_nanobts_start(struct gsm_network *net);
static void bts_model_nanobts_e1line_bind_ops(struct e1inp_line *line);
@@ -276,7 +278,7 @@ static int nm_statechg_event(int evt, struct nm_statechg_signal_data *nsd)
struct gsm_bts_trx_ts *ts;
struct gsm_bts_gprs_nsvc *nsvc;
- if (nsd->bts->type != GSM_BTS_TYPE_NANOBTS)
+ if (!is_ipaccess_bts(nsd->bts))
return 0;
/* This event-driven BTS setup is currently only required on nanoBTS */
@@ -396,7 +398,7 @@ static int sw_activ_rep(struct msgb *mb)
if (!trx)
return -EINVAL;
- if (trx->bts->type != GSM_BTS_TYPE_NANOBTS)
+ if (!is_ipaccess_bts(trx->bts))
return 0;
switch (foh->obj_class) {
@@ -439,7 +441,7 @@ static int sw_activ_rep(struct msgb *mb)
}
/* Callback function to be called every time we receive a signal from NM */
-int bts_ipa_nm_sig_cb(unsigned int subsys, unsigned int signal,
+static int bts_ipa_nm_sig_cb(unsigned int subsys, unsigned int signal,
void *handler_data, void *signal_data)
{
if (subsys != SS_NM)
@@ -457,10 +459,15 @@ int bts_ipa_nm_sig_cb(unsigned int subsys, unsigned int signal,
return 0;
}
-static struct gsm_network *ipaccess_gsmnet;
-
static int bts_model_nanobts_start(struct gsm_network *net)
{
+ osmo_signal_unregister_handler(SS_NM, bts_ipa_nm_sig_cb, NULL);
+ osmo_signal_register_handler(SS_NM, bts_ipa_nm_sig_cb, NULL);
+ return 0;
+}
+
+int bts_model_nanobts_init(void)
+{
bts_model_nanobts.features.data = &bts_model_nanobts._features_data[0];
bts_model_nanobts.features.data_len =
sizeof(bts_model_nanobts._features_data);
@@ -468,14 +475,6 @@ static int bts_model_nanobts_start(struct gsm_network *net)
gsm_btsmodel_set_feature(&bts_model_nanobts, BTS_FEAT_GPRS);
gsm_btsmodel_set_feature(&bts_model_nanobts, BTS_FEAT_EGPRS);
- osmo_signal_register_handler(SS_NM, bts_ipa_nm_sig_cb, NULL);
-
- ipaccess_gsmnet = net;
- return 0;
-}
-
-int bts_model_nanobts_init(void)
-{
return gsm_bts_model_register(&bts_model_nanobts);
}
@@ -534,7 +533,7 @@ ipaccess_sign_link_up(void *unit_data, struct e1inp_line *line,
struct ipaccess_unit *dev = unit_data;
struct e1inp_sign_link *sign_link = NULL;
- bts = find_bts_by_unitid(ipaccess_gsmnet, dev->site_id, dev->bts_id);
+ bts = find_bts_by_unitid(bsc_gsmnet, dev->site_id, dev->bts_id);
if (!bts) {
LOGP(DLINP, LOGL_ERROR, "Unable to find BTS configuration for "
" %u/%u/%u, disconnecting\n", dev->site_id,
diff --git a/openbsc/src/libbsc/bts_sysmobts.c b/openbsc/src/libbsc/bts_sysmobts.c
index 9479206d2..754e277e5 100644
--- a/openbsc/src/libbsc/bts_sysmobts.c
+++ b/openbsc/src/libbsc/bts_sysmobts.c
@@ -38,15 +38,16 @@
#include <osmocom/abis/ipaccess.h>
#include <osmocom/core/logging.h>
-extern int bts_ipa_nm_sig_cb(unsigned int subsys, unsigned int signal,
- void *handler_data, void *signal_data);
-
extern struct gsm_bts_model bts_model_nanobts;
static struct gsm_bts_model model_sysmobts;
-static int bts_model_sysmobts_start(struct gsm_network *net)
+int bts_model_sysmobts_init(void)
{
+ model_sysmobts = bts_model_nanobts;
+ model_sysmobts.name = "sysmobts";
+ model_sysmobts.type = GSM_BTS_TYPE_OSMO_SYSMO;
+
model_sysmobts.features.data = &model_sysmobts._features_data[0];
model_sysmobts.features.data_len =
sizeof(model_sysmobts._features_data);
@@ -54,18 +55,5 @@ static int bts_model_sysmobts_start(struct gsm_network *net)
gsm_btsmodel_set_feature(&model_sysmobts, BTS_FEAT_GPRS);
gsm_btsmodel_set_feature(&model_sysmobts, BTS_FEAT_EGPRS);
- osmo_signal_register_handler(SS_NM, bts_ipa_nm_sig_cb, NULL);
-
- return 0;
-}
-
-int bts_model_sysmobts_init(void)
-{
- memcpy(&model_sysmobts, &bts_model_nanobts, sizeof(model_sysmobts));
-
- model_sysmobts.name = "sysmobts";
- model_sysmobts.start = bts_model_sysmobts_start;
- model_sysmobts.type = GSM_BTS_TYPE_OSMO_SYSMO;
-
return gsm_bts_model_register(&model_sysmobts);
}