aboutsummaryrefslogtreecommitdiffstats
path: root/src/osmo-bsc/codec_pref.c
diff options
context:
space:
mode:
authorPhilipp Maier <pmaier@sysmocom.de>2018-10-05 14:59:37 +0200
committerHarald Welte <laforge@gnumonks.org>2018-10-08 09:50:12 +0000
commitb5208d45b1d3a5138635bd173e26833fe332e76e (patch)
treec7e38ed54c0b890d112e13f694ff36ae183c88df /src/osmo-bsc/codec_pref.c
parentd4d4f918a852bb16459d6d51a7799dd03c56979b (diff)
codec_pref: check codec configuration before start
In networks with a couple of different BTSs it may be likely that one accidently sets up a codec configuration (codec-support)) that will be mutually exclusive towards the codec configuration for the MSC (codec-list). We need a check that validates the configuration before start to catch such configuration flaws quickly. - Add a check that checks each MSC codec-list against each BTS codec-support setting. Change-Id: Ice827896bab1a2330741e0fccc731a04f1a07d38 Related: OS#3625
Diffstat (limited to 'src/osmo-bsc/codec_pref.c')
-rw-r--r--src/osmo-bsc/codec_pref.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/osmo-bsc/codec_pref.c b/src/osmo-bsc/codec_pref.c
index afecaa3ad..0f0ffa546 100644
--- a/src/osmo-bsc/codec_pref.c
+++ b/src/osmo-bsc/codec_pref.c
@@ -348,3 +348,29 @@ void gen_bss_supported_codec_list(struct gsm0808_speech_codec_list *scl,
}
}
+/*! Visit the codec settings for the MSC and for each BTS in order to make sure
+ * that the configuration does not contain any combinations that lead into a
+ * mutually exclusive codec configuration (empty intersection).
+ * \param[in] mscs list head of the msc list.
+ * \returns 0 on success, -1 in case an invalid setting is found. */
+int check_codec_pref(struct llist_head *mscs)
+{
+ struct bsc_msc_data *msc;
+ struct gsm_bts *bts;
+ struct gsm0808_speech_codec_list scl;
+ int rc = 0;
+
+ llist_for_each_entry(msc, mscs, entry) {
+ llist_for_each_entry(bts, &msc->network->bts_list, list) {
+ gen_bss_supported_codec_list(&scl, msc, bts);
+ if (scl.len <= 0) {
+ LOGP(DMSC, LOGL_FATAL,
+ "codec-support of BTS %u does not intersect with codec-list of MSC %u\n",
+ bts->nr, msc->nr);
+ rc = -1;
+ }
+ }
+ }
+
+ return rc;
+}