diff options
author | Holger Hans Peter Freyther <zecke@selfish.org> | 2013-04-29 20:45:46 +0200 |
---|---|---|
committer | Holger Hans Peter Freyther <zecke@selfish.org> | 2013-04-29 20:47:52 +0200 |
commit | e152a46f6e171976f9adb20f5e11d44769ba7a31 (patch) | |
tree | ebddbdcfd212e24a2b40f4586505dd5625bbef88 | |
parent | 7a0010bdd4d8741c591ad40e70798136fee6e18f (diff) | |
parent | e48c1871aff174faf2341a57b84104ab0d2abb67 (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.c | 8 | ||||
-rw-r--r-- | openbsc/src/libbsc/bts_ipaccess_nanobts.c | 27 | ||||
-rw-r--r-- | openbsc/src/libbsc/bts_sysmobts.c | 22 |
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); } |