Change in osmo-bsc[master]: codec_pref: also check physical channels

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

dexter gerrit-no-reply at lists.osmocom.org
Wed Oct 10 12:10:30 UTC 2018


dexter has uploaded this change for review. ( https://gerrit.osmocom.org/11296


Change subject: codec_pref: also check physical channels
......................................................................

codec_pref: also check physical channels

At the moment codec_pref only checks the codec configuration, but it
does not check if there is actually a matching physical channel
available. This should be checked too we must make sure that the codec
we select fits the physical channels available on the BTS.

Change-Id: I2d29dfed450e5ef93c26ed5ec9fdc0730eb3d7dd
Related: OS#3503
---
M src/osmo-bsc/codec_pref.c
M tests/codec_pref/codec_pref_test.c
2 files changed, 42 insertions(+), 4 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/96/11296/1

diff --git a/src/osmo-bsc/codec_pref.c b/src/osmo-bsc/codec_pref.c
index a741e11..9f30c7b 100644
--- a/src/osmo-bsc/codec_pref.c
+++ b/src/osmo-bsc/codec_pref.c
@@ -176,8 +176,38 @@
 
 /* Helper function to check if the given permitted speech value is supported
  * by the BTS. (vty option bts->codec-support). */
-static bool test_codec_support_bts(const struct bts_codec_conf *bts_codec, uint8_t perm_spch)
+static bool test_codec_support_bts(const struct gsm_bts *bts, uint8_t perm_spch)
 {
+	struct gsm_bts_trx *trx;
+	const struct bts_codec_conf *bts_codec = &bts->codec;
+	unsigned int i;
+	bool full_rate;
+	int rc;
+	enum gsm_phys_chan_config pchan;
+	bool rate_match = false;
+
+	/* Check if the BTS provides a physical channel that matches the
+	 * bandwith of the desired codec. */
+	rc = full_rate_from_perm_spch(&full_rate, perm_spch);
+	if (rc < 0)
+		return false;
+	llist_for_each_entry(trx, &bts->trx_list, list) {
+		for (i = 0; i < TRX_NR_TS; i++) {
+			pchan = trx->ts[i].pchan_from_config;
+			if (pchan == GSM_PCHAN_TCH_F_TCH_H_PDCH)
+				rate_match = true;
+			else if (full_rate && pchan == GSM_PCHAN_TCH_F)
+				rate_match = true;
+			else if (full_rate && pchan == GSM_PCHAN_TCH_F_PDCH)
+				rate_match = true;
+			else if (!full_rate && pchan == GSM_PCHAN_TCH_H)
+				rate_match = true;
+		}
+	}
+	if (!rate_match)
+		return false;
+
+	/* Check codec support */
 	switch (perm_spch) {
 	case GSM0808_PERM_FR1:
 		/* GSM-FR is always supported by all BTSs. There is also no way to
@@ -269,7 +299,7 @@
 
 		/* Check this permitted speech value against the BTS specific parameters.
 		 * if the BTS does not support the codec, try the next one */
-		if (!test_codec_support_bts(&bts->codec, perm_spch))
+		if (!test_codec_support_bts(bts, perm_spch))
 			continue;
 
 		/* Match the permitted speech value against the codec lists that were
@@ -345,7 +375,7 @@
 
 		/* Check this permitted speech value against the BTS specific parameters.
 		 * if the BTS does not support the codec, try the next one */
-		if (!test_codec_support_bts(&bts->codec, perm_spch))
+		if (!test_codec_support_bts(bts, perm_spch))
 			continue;
 
 		/* Write item into codec list */
@@ -380,7 +410,7 @@
 			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",
+				     "codec-support/trx config of BTS %u does not intersect with codec-list of MSC %u\n",
 				     bts->nr, msc->nr);
 				rc = -1;
 			}
diff --git a/tests/codec_pref/codec_pref_test.c b/tests/codec_pref/codec_pref_test.c
index e2876e2..534b99e 100644
--- a/tests/codec_pref/codec_pref_test.c
+++ b/tests/codec_pref/codec_pref_test.c
@@ -294,6 +294,7 @@
 	/* Note: FR is supported by all BTSs, so there is no flag for it */
 
 	struct gsm48_multi_rate_conf *cfg;
+	static struct gsm_bts_trx trx;
 
 	OSMO_ASSERT(config_no < N_CONFIG_VARIANTS);
 
@@ -324,6 +325,13 @@
 	cfg->m10_2 = 0;
 	cfg->m12_2 = 0;
 
+	/* Initalize TRX with a TCH/F and a TCH/H channel */
+	memset(&trx, 0, sizeof(trx));
+	INIT_LLIST_HEAD(&bts->trx_list);
+	llist_add(&trx.list, &bts->trx_list);
+	trx.ts[0].pchan_from_config = GSM_PCHAN_TCH_F;
+	trx.ts[1].pchan_from_config = GSM_PCHAN_TCH_H;
+
 	switch (config_no) {
 	case 0:
 		/* FR1 (implicit) only */

-- 
To view, visit https://gerrit.osmocom.org/11296
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I2d29dfed450e5ef93c26ed5ec9fdc0730eb3d7dd
Gerrit-Change-Number: 11296
Gerrit-PatchSet: 1
Gerrit-Owner: dexter <pmaier at sysmocom.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20181010/12e29ebb/attachment.htm>


More information about the gerrit-log mailing list