From b5208d45b1d3a5138635bd173e26833fe332e76e Mon Sep 17 00:00:00 2001 From: Philipp Maier Date: Fri, 5 Oct 2018 14:59:37 +0200 Subject: 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 --- src/osmo-bsc/codec_pref.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'src/osmo-bsc/codec_pref.c') 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; +} -- cgit v1.2.3