summaryrefslogtreecommitdiffstats
path: root/openbsc/src/osmo-nitb/bsc_hack.c
diff options
context:
space:
mode:
authorNeels Hofmeyr <neels@hofmeyr.de>2016-07-23 20:15:28 +0200
committerNeels Hofmeyr <neels@hofmeyr.de>2016-07-28 17:40:59 +0200
commit5f0c71b7d5c38dcd5eecd2836a86cb9b4768a759 (patch)
tree5d321eba53f2061c3c38f3882e0cf813beca940a /openbsc/src/osmo-nitb/bsc_hack.c
parentc5e75f3e6a5d0dd482d4f5d17da80043fb02e181 (diff)
dyn TS: OS#1778 workaround: disable TCH/F on dyn TS for nitb
To avoid two phones picking mismatching TCH pchans, never pick TCH/F on dynamic TS in osmo-nitb. Add gsm_network flag dyn_ts_allow_tch_f, set to true by default in gsm_network_init(). Set this flag to false in osmo-nitb's main(). See http://osmocom.org/issues/1778 Reasoning about ways to solve this: * a compile time switch doesn't work because libbsc is first compiled and then linked to both osmo-nitb and osmo-bsc. * we could test net->bsc_api == msc_bsc_api(), but I have the so-called MSC split waiting on branch sysmocom/cscn, which will result in msc_bsc_api() not being linked in the osmo-bsc binary. * have a function am_i_nitb() with different implementations in osmo-nitb and osmo-bsc, but then we'd need to add implementations to all tests and other binaries linking lchan_alloc(). * have a flag in struct bsc_api, but so far there are only function pointers there. Having a "global" flag in gsm_network allows to add a VTY command in case we decide to keep this feature (#1781), has no linking implications and is nicely explicit. Tested that osmo-bsc still picks TCH/F on dyn TS indirectly, since I have no standalone MSC available: when compiling osmo-nitb with the line that sets dyn_ts_allow_tch_f = false commented out, TCH/F is picked as described in OS#1778; and by printf-verifying that dyn_ts_allow_tch_f == true in osmo-bsc main(), only osmo-nitb should have TCH/F disabled. Related: OS#1778, OS#1781 Change-Id: If7e4797a72815fc6e2bbef27756ea5df69f4bde7
Diffstat (limited to 'openbsc/src/osmo-nitb/bsc_hack.c')
-rw-r--r--openbsc/src/osmo-nitb/bsc_hack.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/openbsc/src/osmo-nitb/bsc_hack.c b/openbsc/src/osmo-nitb/bsc_hack.c
index 0b360dcf6..e3e89271e 100644
--- a/openbsc/src/osmo-nitb/bsc_hack.c
+++ b/openbsc/src/osmo-nitb/bsc_hack.c
@@ -299,6 +299,19 @@ int main(int argc, char **argv)
#endif
bsc_api_init(bsc_gsmnet, msc_bsc_api());
+ /*
+ * For osmo-nitb, skip TCH/F for now, because otherwise dyn TS
+ * always imply the possibility to have a mix of TCH/F and
+ * TCH/H channels; if two phones request a TCH/F and a TCH/H,
+ * respectively, they cannot call each other. If we deny TCH/F,
+ * they will both fall back to TCH/H, and dynamic channels are
+ * usable. See http://osmocom.org/issues/1778.
+ *
+ * A third-party MSC may well be able to handle a TCH/H TCH/F
+ * mismatch.
+ */
+ bsc_gsmnet->dyn_ts_allow_tch_f = false;
+
/* start control interface after reading config for
* ctrl_vty_get_bind_addr() */
LOGP(DNM, LOGL_NOTICE, "CTRL at %s %d\n",