aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/osmocom/bsc/codec_pref.h8
-rw-r--r--src/osmo-bsc/codec_pref.c44
-rw-r--r--src/osmo-bsc/osmo_bsc_bssap.c2
-rw-r--r--tests/codec_pref/codec_pref_test.c143
-rw-r--r--tests/codec_pref/codec_pref_test.ok314
5 files changed, 490 insertions, 21 deletions
diff --git a/include/osmocom/bsc/codec_pref.h b/include/osmocom/bsc/codec_pref.h
index 6933ceacd..bbda14e47 100644
--- a/include/osmocom/bsc/codec_pref.h
+++ b/include/osmocom/bsc/codec_pref.h
@@ -1,6 +1,6 @@
#pragma once
-int match_codec_pref(int *full_rate, enum gsm48_chan_mode *chan_mode,
- const struct gsm0808_channel_type *ct,
- const struct gsm0808_speech_codec_list *scl,
- const struct bsc_msc_data *msc);
+struct gsm_bts;
+
+int match_codec_pref(int *full_rate, enum gsm48_chan_mode *chan_mode, const struct gsm0808_channel_type *ct,
+ const struct gsm0808_speech_codec_list *scl, const struct bsc_msc_data *msc, struct gsm_bts *bts);
diff --git a/src/osmo-bsc/codec_pref.c b/src/osmo-bsc/codec_pref.c
index ee0760a59..d2887ac60 100644
--- a/src/osmo-bsc/codec_pref.c
+++ b/src/osmo-bsc/codec_pref.c
@@ -23,6 +23,7 @@
#include <osmocom/gsm/gsm0808_utils.h>
#include <osmocom/bsc/bsc_msc_data.h>
#include <osmocom/bsc/codec_pref.h>
+#include <osmocom/bsc/gsm_data.h>
/* Helper function for match_codec_pref(), looks up a matching chan mode for
* a given permitted speech value */
@@ -130,6 +131,34 @@ static bool test_codec_pref(const struct gsm0808_channel_type *ct,
return false;
}
+/* 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(struct gsm_bts *bts, uint8_t perm_spch)
+{
+ switch (perm_spch) {
+ case GSM0808_PERM_FR1:
+ /* GSM-FR is always supported by all BTSs. There is also no way to
+ * selectively disable GSM-RF per BTS via VTY. */
+ return true;
+ case GSM0808_PERM_FR2:
+ if (bts->codec.efr)
+ return true;
+ case GSM0808_PERM_FR3:
+ if (bts->codec.amr)
+ return true;
+ case GSM0808_PERM_HR1:
+ if (bts->codec.hr)
+ return true;
+ case GSM0808_PERM_HR3:
+ if (bts->codec.amr)
+ return true;
+ default:
+ return false;
+ }
+
+ return false;
+}
+
/*! Helper function for bssmap_handle_assignm_req(), matches the codec
* preferences from the MSC with the codec preferences
* \param[out] full_rate '1' if full-rate, '0' if half-rate, '-1' if no match
@@ -137,17 +166,26 @@ static bool test_codec_pref(const struct gsm0808_channel_type *ct,
* \param[in] ct GSM 08.08 channel type
* \param[in] scl GSM 08.08 speech codec list
* \param[in] msc MSC data [for configuration]
+ * \param[in] bts BTS data [for configuration]
* \returns 0 on success, -1 in case no match was found */
-int match_codec_pref(int *full_rate, enum gsm48_chan_mode *chan_mode,
- const struct gsm0808_channel_type *ct,
- const struct gsm0808_speech_codec_list *scl, const struct bsc_msc_data *msc)
+int match_codec_pref(int *full_rate, enum gsm48_chan_mode *chan_mode, const struct gsm0808_channel_type *ct,
+ const struct gsm0808_speech_codec_list *scl, const struct bsc_msc_data *msc, struct gsm_bts *bts)
{
unsigned int i;
uint8_t perm_spch;
bool match = false;
for (i = 0; i < msc->audio_length; i++) {
+ /* Pick a permitted speech value from the global codec configuration list */
perm_spch = audio_support_to_gsm88(msc->audio_support[i]);
+
+ /* 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, perm_spch) == false)
+ continue;
+
+ /* Match the permitted speech value against the codec lists that were
+ * advertised by the MS and the MSC */
if (test_codec_pref(ct, scl, perm_spch)) {
match = true;
break;
diff --git a/src/osmo-bsc/osmo_bsc_bssap.c b/src/osmo-bsc/osmo_bsc_bssap.c
index 96cc2c59d..887a86682 100644
--- a/src/osmo-bsc/osmo_bsc_bssap.c
+++ b/src/osmo-bsc/osmo_bsc_bssap.c
@@ -680,7 +680,7 @@ static int bssmap_handle_assignm_req(struct gsm_subscriber_connection *conn,
/* Match codec information from the assignment command against the
* local preferences of the BSC */
- rc = match_codec_pref(&full_rate, &chan_mode, &ct, scl_ptr, msc);
+ rc = match_codec_pref(&full_rate, &chan_mode, &ct, scl_ptr, msc, conn_get_bts(conn));
if (rc < 0) {
LOGP(DMSC, LOGL_ERROR, "No supported audio type found for channel_type ="
" { ch_indctr=0x%x, ch_rate_type=0x%x, perm_spch=[ %s] }\n",
diff --git a/tests/codec_pref/codec_pref_test.c b/tests/codec_pref/codec_pref_test.c
index 73547ad9d..385854f12 100644
--- a/tests/codec_pref/codec_pref_test.c
+++ b/tests/codec_pref/codec_pref_test.c
@@ -270,9 +270,62 @@ static void make_msc_config(struct bsc_msc_data *msc, uint8_t config_no)
}
}
+/* Generate a realitically looking bts codec configuration */
+static void make_bts_config(struct gsm_bts *bts, uint8_t config_no)
+{
+ /* Note: FR is supported by all BTSs, so there is no flag for it */
+
+ OSMO_ASSERT(config_no < N_CONFIG_VARIANTS);
+
+ bts->codec.hr = 0;
+ bts->codec.efr = 0;
+ bts->codec.amr = 0;
+
+ switch (config_no) {
+ case 0:
+ /* FR1 (implicit) only */
+ break;
+ case 1:
+ /* HR1 only (+FR implicit) */
+ bts->codec.hr = 1;
+ break;
+ case 2:
+ /* FR2 only (+FR implicit) */
+ bts->codec.efr = 1;
+ break;
+ case 3:
+ /* FR3 only (+FR implicit) */
+ bts->codec.amr = 1;
+ break;
+ case 4:
+ /* HR3 only (+FR implicit) */
+ bts->codec.amr = 1;
+ break;
+ case 5:
+ /* FR1 (implicit) and HR1 */
+ bts->codec.hr = 1;
+ break;
+ case 6:
+ /* FR1 (implicit), FR2 and HR1 */
+ bts->codec.efr = 1;
+ bts->codec.hr = 1;
+ break;
+ case 7:
+ /* FR1 (implicit), FR3 and HR3 */
+ bts->codec.amr = 1;
+ break;
+ case 8:
+ /* FR1 (implicit), FR2, FR3, HR1 and HR3 */
+ bts->codec.hr = 1;
+ bts->codec.efr = 1;
+ bts->codec.amr = 1;
+ break;
+ }
+}
+
/* Try execute match_codec_pref(), display input and output parameters */
-static int test_match_codec_pref(const struct gsm0808_channel_type *ct,
- const struct gsm0808_speech_codec_list *scl, const struct bsc_msc_data *msc)
+static int test_match_codec_pref(const struct gsm0808_channel_type *ct, const struct gsm0808_speech_codec_list *scl,
+ const struct bsc_msc_data *msc, struct gsm_bts *bts)
{
int rc;
unsigned int i;
@@ -296,7 +349,13 @@ static int test_match_codec_pref(const struct gsm0808_channel_type *ct,
else
printf(" audio_support[%u]=FR%u\n", i, msc->audio_support[i]->ver);
- rc = match_codec_pref(&full_rate, &chan_mode, ct, scl, msc);
+ printf(" * BTS: audio support settings:\n");
+ printf(" (GSM-FR implicitly supported)\n");
+ printf(" codec->hr=%u\n", bts->codec.hr);
+ printf(" codec->efr=%u\n", bts->codec.efr);
+ printf(" codec->amr=%u\n", bts->codec.amr);
+
+ rc = match_codec_pref(&full_rate, &chan_mode, ct, scl, msc, bts);
printf(" * result: rc=%i, full_rate=%i, chan_mode=%s\n", rc, full_rate, gsm48_chan_mode_name(chan_mode));
printf("\n");
@@ -311,6 +370,7 @@ static void test_one_to_one(void)
struct gsm0808_channel_type ct_msc;
struct gsm0808_speech_codec_list scl_ms;
struct bsc_msc_data msc_local;
+ struct gsm_bts bts_local;
int rc;
printf("============== test_one_to_one ==============\n\n");
@@ -321,7 +381,8 @@ static void test_one_to_one(void)
make_msc_config(&msc_local, i);
make_scl_config(&scl_ms, i);
make_ct_config(&ct_msc, i);
- rc = test_match_codec_pref(&ct_msc, &scl_ms, &msc_local);
+ make_bts_config(&bts_local, i);
+ rc = test_match_codec_pref(&ct_msc, &scl_ms, &msc_local, &bts_local);
OSMO_ASSERT(rc == 0);
}
@@ -335,6 +396,7 @@ static void test_ms(void)
struct gsm0808_channel_type ct_msc;
struct gsm0808_speech_codec_list scl_ms;
struct bsc_msc_data msc_local;
+ struct gsm_bts bts_local;
int rc;
printf("============== test_ms ==============\n\n");
@@ -343,9 +405,10 @@ static void test_ms(void)
make_msc_config(&msc_local, 8);
make_ct_config(&ct_msc, 8);
+ make_bts_config(&bts_local, 8);
for (i = 0; i < N_CONFIG_VARIANTS; i++) {
make_scl_config(&scl_ms, i);
- rc = test_match_codec_pref(&ct_msc, &scl_ms, &msc_local);
+ rc = test_match_codec_pref(&ct_msc, &scl_ms, &msc_local, &bts_local);
OSMO_ASSERT(rc == 0);
}
@@ -359,6 +422,7 @@ static void test_ct(void)
struct gsm0808_channel_type ct_msc;
struct gsm0808_speech_codec_list scl_ms;
struct bsc_msc_data msc_local;
+ struct gsm_bts bts_local;
int rc;
printf("============== test_ct ==============\n\n");
@@ -367,9 +431,10 @@ static void test_ct(void)
make_msc_config(&msc_local, 8);
make_scl_config(&scl_ms, 8);
+ make_bts_config(&bts_local, 8);
for (i = 0; i < N_CONFIG_VARIANTS; i++) {
make_ct_config(&ct_msc, i);
- rc = test_match_codec_pref(&ct_msc, &scl_ms, &msc_local);
+ rc = test_match_codec_pref(&ct_msc, &scl_ms, &msc_local, &bts_local);
OSMO_ASSERT(rc == 0);
}
@@ -383,6 +448,7 @@ static void test_msc(void)
struct gsm0808_channel_type ct_msc;
struct gsm0808_speech_codec_list scl_ms;
struct bsc_msc_data msc_local;
+ struct gsm_bts bts_local;
int rc;
printf("============== test_msc ==============\n\n");
@@ -391,9 +457,10 @@ static void test_msc(void)
make_ct_config(&ct_msc, 8);
make_scl_config(&scl_ms, 8);
+ make_bts_config(&bts_local, 8);
for (i = 0; i < N_CONFIG_VARIANTS; i++) {
make_msc_config(&msc_local, 8);
- rc = test_match_codec_pref(&ct_msc, &scl_ms, &msc_local);
+ rc = test_match_codec_pref(&ct_msc, &scl_ms, &msc_local, &bts_local);
OSMO_ASSERT(rc == 0);
}
@@ -406,6 +473,7 @@ static void test_selected_working(void)
struct gsm0808_channel_type ct_msc;
struct gsm0808_speech_codec_list scl_ms;
struct bsc_msc_data msc_local;
+ struct gsm_bts bts_local;
int rc;
printf("============== test_selected_working ==============\n\n");
@@ -415,19 +483,43 @@ static void test_selected_working(void)
make_scl_config(&scl_ms, 6);
make_ct_config(&ct_msc, 5);
make_msc_config(&msc_local, 7);
- rc = test_match_codec_pref(&ct_msc, &scl_ms, &msc_local);
+ make_bts_config(&bts_local, 8);
+ rc = test_match_codec_pref(&ct_msc, &scl_ms, &msc_local, &bts_local);
OSMO_ASSERT(rc == 0);
make_scl_config(&scl_ms, 0);
make_ct_config(&ct_msc, 5);
make_msc_config(&msc_local, 7);
- rc = test_match_codec_pref(&ct_msc, &scl_ms, &msc_local);
+ make_bts_config(&bts_local, 8);
+ rc = test_match_codec_pref(&ct_msc, &scl_ms, &msc_local, &bts_local);
OSMO_ASSERT(rc == 0);
make_scl_config(&scl_ms, 1);
make_ct_config(&ct_msc, 5);
make_msc_config(&msc_local, 6);
- rc = test_match_codec_pref(&ct_msc, &scl_ms, &msc_local);
+ make_bts_config(&bts_local, 8);
+ rc = test_match_codec_pref(&ct_msc, &scl_ms, &msc_local, &bts_local);
+ OSMO_ASSERT(rc == 0);
+
+ make_scl_config(&scl_ms, 6);
+ make_ct_config(&ct_msc, 5);
+ make_msc_config(&msc_local, 7);
+ make_bts_config(&bts_local, 4);
+ rc = test_match_codec_pref(&ct_msc, &scl_ms, &msc_local, &bts_local);
+ OSMO_ASSERT(rc == 0);
+
+ make_scl_config(&scl_ms, 0);
+ make_ct_config(&ct_msc, 5);
+ make_msc_config(&msc_local, 7);
+ make_bts_config(&bts_local, 2);
+ rc = test_match_codec_pref(&ct_msc, &scl_ms, &msc_local, &bts_local);
+ OSMO_ASSERT(rc == 0);
+
+ make_scl_config(&scl_ms, 1);
+ make_ct_config(&ct_msc, 5);
+ make_msc_config(&msc_local, 6);
+ make_bts_config(&bts_local, 1);
+ rc = test_match_codec_pref(&ct_msc, &scl_ms, &msc_local, &bts_local);
OSMO_ASSERT(rc == 0);
free_msc_config(&msc_local);
@@ -439,6 +531,7 @@ static void test_selected_non_working(void)
struct gsm0808_channel_type ct_msc;
struct gsm0808_speech_codec_list scl_ms;
struct bsc_msc_data msc_local;
+ struct gsm_bts bts_local;
int rc;
printf("============== test_selected_non_working ==============\n\n");
@@ -448,19 +541,43 @@ static void test_selected_non_working(void)
make_scl_config(&scl_ms, 1);
make_ct_config(&ct_msc, 5);
make_msc_config(&msc_local, 7);
- rc = test_match_codec_pref(&ct_msc, &scl_ms, &msc_local);
+ make_bts_config(&bts_local, 8);
+ rc = test_match_codec_pref(&ct_msc, &scl_ms, &msc_local, &bts_local);
OSMO_ASSERT(rc == -1);
make_scl_config(&scl_ms, 1);
make_ct_config(&ct_msc, 5);
make_msc_config(&msc_local, 7);
- rc = test_match_codec_pref(&ct_msc, &scl_ms, &msc_local);
+ make_bts_config(&bts_local, 8);
+ rc = test_match_codec_pref(&ct_msc, &scl_ms, &msc_local, &bts_local);
+ OSMO_ASSERT(rc == -1);
+
+ make_scl_config(&scl_ms, 1);
+ make_ct_config(&ct_msc, 4);
+ make_msc_config(&msc_local, 6);
+ make_bts_config(&bts_local, 8);
+ rc = test_match_codec_pref(&ct_msc, &scl_ms, &msc_local, &bts_local);
+ OSMO_ASSERT(rc == -1);
+
+ make_scl_config(&scl_ms, 1);
+ make_ct_config(&ct_msc, 2);
+ make_msc_config(&msc_local, 7);
+ make_bts_config(&bts_local, 8);
+ rc = test_match_codec_pref(&ct_msc, &scl_ms, &msc_local, &bts_local);
OSMO_ASSERT(rc == -1);
make_scl_config(&scl_ms, 1);
+ make_ct_config(&ct_msc, 5);
+ make_msc_config(&msc_local, 4);
+ make_bts_config(&bts_local, 8);
+ rc = test_match_codec_pref(&ct_msc, &scl_ms, &msc_local, &bts_local);
+ OSMO_ASSERT(rc == -1);
+
+ make_scl_config(&scl_ms, 8);
make_ct_config(&ct_msc, 4);
make_msc_config(&msc_local, 6);
- rc = test_match_codec_pref(&ct_msc, &scl_ms, &msc_local);
+ make_bts_config(&bts_local, 7);
+ rc = test_match_codec_pref(&ct_msc, &scl_ms, &msc_local, &bts_local);
OSMO_ASSERT(rc == -1);
free_msc_config(&msc_local);
diff --git a/tests/codec_pref/codec_pref_test.ok b/tests/codec_pref/codec_pref_test.ok
index f97fbb166..d3cd0285b 100644
--- a/tests/codec_pref/codec_pref_test.ok
+++ b/tests/codec_pref/codec_pref_test.ok
@@ -7,6 +7,11 @@ Determining channel mode and rate:
perm_spch[0]=FR1
* BSS: audio support settings (1 items):
audio_support[0]=FR1
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=0
+ codec->efr=0
+ codec->amr=0
* result: rc=0, full_rate=1, chan_mode=SPEECH_V1
Determining channel mode and rate:
@@ -16,6 +21,11 @@ Determining channel mode and rate:
perm_spch[0]=HR1
* BSS: audio support settings (1 items):
audio_support[0]=HR1
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=0
+ codec->amr=0
* result: rc=0, full_rate=0, chan_mode=SPEECH_V1
Determining channel mode and rate:
@@ -25,6 +35,11 @@ Determining channel mode and rate:
perm_spch[0]=FR2
* BSS: audio support settings (1 items):
audio_support[0]=FR2
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=0
+ codec->efr=1
+ codec->amr=0
* result: rc=0, full_rate=1, chan_mode=SPEECH_EFR
Determining channel mode and rate:
@@ -34,6 +49,11 @@ Determining channel mode and rate:
perm_spch[0]=FR3
* BSS: audio support settings (1 items):
audio_support[0]=FR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=0
+ codec->efr=0
+ codec->amr=1
* result: rc=0, full_rate=1, chan_mode=SPEECH_AMR
Determining channel mode and rate:
@@ -43,6 +63,11 @@ Determining channel mode and rate:
perm_spch[0]=HR3
* BSS: audio support settings (1 items):
audio_support[0]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=0
+ codec->efr=0
+ codec->amr=1
* result: rc=0, full_rate=0, chan_mode=SPEECH_AMR
Determining channel mode and rate:
@@ -55,6 +80,11 @@ Determining channel mode and rate:
* BSS: audio support settings (2 items):
audio_support[0]=FR1
audio_support[1]=HR1
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=0
+ codec->amr=0
* result: rc=0, full_rate=1, chan_mode=SPEECH_V1
Determining channel mode and rate:
@@ -70,6 +100,11 @@ Determining channel mode and rate:
audio_support[0]=FR1
audio_support[1]=FR2
audio_support[2]=HR1
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=0
* result: rc=0, full_rate=1, chan_mode=SPEECH_V1
Determining channel mode and rate:
@@ -85,6 +120,11 @@ Determining channel mode and rate:
audio_support[0]=FR1
audio_support[1]=FR3
audio_support[2]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=0
+ codec->efr=0
+ codec->amr=1
* result: rc=0, full_rate=1, chan_mode=SPEECH_V1
Determining channel mode and rate:
@@ -106,6 +146,11 @@ Determining channel mode and rate:
audio_support[2]=FR3
audio_support[3]=HR1
audio_support[4]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=1, chan_mode=SPEECH_V1
============== test_ms ==============
@@ -125,6 +170,11 @@ Determining channel mode and rate:
audio_support[2]=FR3
audio_support[3]=HR1
audio_support[4]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=1, chan_mode=SPEECH_V1
Determining channel mode and rate:
@@ -142,6 +192,11 @@ Determining channel mode and rate:
audio_support[2]=FR3
audio_support[3]=HR1
audio_support[4]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=0, chan_mode=SPEECH_V1
Determining channel mode and rate:
@@ -159,6 +214,11 @@ Determining channel mode and rate:
audio_support[2]=FR3
audio_support[3]=HR1
audio_support[4]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=1, chan_mode=SPEECH_EFR
Determining channel mode and rate:
@@ -176,6 +236,11 @@ Determining channel mode and rate:
audio_support[2]=FR3
audio_support[3]=HR1
audio_support[4]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=1, chan_mode=SPEECH_AMR
Determining channel mode and rate:
@@ -193,6 +258,11 @@ Determining channel mode and rate:
audio_support[2]=FR3
audio_support[3]=HR1
audio_support[4]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=0, chan_mode=SPEECH_AMR
Determining channel mode and rate:
@@ -211,6 +281,11 @@ Determining channel mode and rate:
audio_support[2]=FR3
audio_support[3]=HR1
audio_support[4]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=1, chan_mode=SPEECH_V1
Determining channel mode and rate:
@@ -230,6 +305,11 @@ Determining channel mode and rate:
audio_support[2]=FR3
audio_support[3]=HR1
audio_support[4]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=1, chan_mode=SPEECH_V1
Determining channel mode and rate:
@@ -249,6 +329,11 @@ Determining channel mode and rate:
audio_support[2]=FR3
audio_support[3]=HR1
audio_support[4]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=1, chan_mode=SPEECH_V1
Determining channel mode and rate:
@@ -270,6 +355,11 @@ Determining channel mode and rate:
audio_support[2]=FR3
audio_support[3]=HR1
audio_support[4]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=1, chan_mode=SPEECH_V1
============== test_ct ==============
@@ -289,6 +379,11 @@ Determining channel mode and rate:
audio_support[2]=FR3
audio_support[3]=HR1
audio_support[4]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=1, chan_mode=SPEECH_V1
Determining channel mode and rate:
@@ -306,6 +401,11 @@ Determining channel mode and rate:
audio_support[2]=FR3
audio_support[3]=HR1
audio_support[4]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=0, chan_mode=SPEECH_V1
Determining channel mode and rate:
@@ -323,6 +423,11 @@ Determining channel mode and rate:
audio_support[2]=FR3
audio_support[3]=HR1
audio_support[4]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=1, chan_mode=SPEECH_EFR
Determining channel mode and rate:
@@ -340,6 +445,11 @@ Determining channel mode and rate:
audio_support[2]=FR3
audio_support[3]=HR1
audio_support[4]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=1, chan_mode=SPEECH_AMR
Determining channel mode and rate:
@@ -357,6 +467,11 @@ Determining channel mode and rate:
audio_support[2]=FR3
audio_support[3]=HR1
audio_support[4]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=0, chan_mode=SPEECH_AMR
Determining channel mode and rate:
@@ -375,6 +490,11 @@ Determining channel mode and rate:
audio_support[2]=FR3
audio_support[3]=HR1
audio_support[4]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=1, chan_mode=SPEECH_V1
Determining channel mode and rate:
@@ -394,6 +514,11 @@ Determining channel mode and rate:
audio_support[2]=FR3
audio_support[3]=HR1
audio_support[4]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=1, chan_mode=SPEECH_V1
Determining channel mode and rate:
@@ -413,6 +538,11 @@ Determining channel mode and rate:
audio_support[2]=FR3
audio_support[3]=HR1
audio_support[4]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=1, chan_mode=SPEECH_V1
Determining channel mode and rate:
@@ -434,6 +564,11 @@ Determining channel mode and rate:
audio_support[2]=FR3
audio_support[3]=HR1
audio_support[4]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=1, chan_mode=SPEECH_V1
============== test_msc ==============
@@ -457,6 +592,11 @@ Determining channel mode and rate:
audio_support[2]=FR3
audio_support[3]=HR1
audio_support[4]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=1, chan_mode=SPEECH_V1
Determining channel mode and rate:
@@ -478,6 +618,11 @@ Determining channel mode and rate:
audio_support[2]=FR3
audio_support[3]=HR1
audio_support[4]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=1, chan_mode=SPEECH_V1
Determining channel mode and rate:
@@ -499,6 +644,11 @@ Determining channel mode and rate:
audio_support[2]=FR3
audio_support[3]=HR1
audio_support[4]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=1, chan_mode=SPEECH_V1
Determining channel mode and rate:
@@ -520,6 +670,11 @@ Determining channel mode and rate:
audio_support[2]=FR3
audio_support[3]=HR1
audio_support[4]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=1, chan_mode=SPEECH_V1
Determining channel mode and rate:
@@ -541,6 +696,11 @@ Determining channel mode and rate:
audio_support[2]=FR3
audio_support[3]=HR1
audio_support[4]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=1, chan_mode=SPEECH_V1
Determining channel mode and rate:
@@ -562,6 +722,11 @@ Determining channel mode and rate:
audio_support[2]=FR3
audio_support[3]=HR1
audio_support[4]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=1, chan_mode=SPEECH_V1
Determining channel mode and rate:
@@ -583,6 +748,11 @@ Determining channel mode and rate:
audio_support[2]=FR3
audio_support[3]=HR1
audio_support[4]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=1, chan_mode=SPEECH_V1
Determining channel mode and rate:
@@ -604,6 +774,11 @@ Determining channel mode and rate:
audio_support[2]=FR3
audio_support[3]=HR1
audio_support[4]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=1, chan_mode=SPEECH_V1
Determining channel mode and rate:
@@ -625,6 +800,11 @@ Determining channel mode and rate:
audio_support[2]=FR3
audio_support[3]=HR1
audio_support[4]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=1, chan_mode=SPEECH_V1
============== test_selected_working ==============
@@ -641,6 +821,11 @@ Determining channel mode and rate:
audio_support[0]=FR1
audio_support[1]=FR3
audio_support[2]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=1, chan_mode=SPEECH_V1
Determining channel mode and rate:
@@ -653,6 +838,11 @@ Determining channel mode and rate:
audio_support[0]=FR1
audio_support[1]=FR3
audio_support[2]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=0, full_rate=1, chan_mode=SPEECH_V1
Determining channel mode and rate:
@@ -665,6 +855,64 @@ Determining channel mode and rate:
audio_support[0]=FR1
audio_support[1]=FR2
audio_support[2]=HR1
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
+ * result: rc=0, full_rate=0, chan_mode=SPEECH_V1
+
+Determining channel mode and rate:
+ * MS: speech codec list (3 items):
+ codec[0]->type=FR1
+ codec[1]->type=FR2
+ codec[2]->type=HR1
+ * MSC: channel type permitted speech (2 items):
+ perm_spch[0]=FR1
+ perm_spch[1]=HR1
+ * BSS: audio support settings (3 items):
+ audio_support[0]=FR1
+ audio_support[1]=FR3
+ audio_support[2]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=0
+ codec->efr=0
+ codec->amr=1
+ * result: rc=0, full_rate=1, chan_mode=SPEECH_V1
+
+Determining channel mode and rate:
+ * MS: speech codec list (1 items):
+ codec[0]->type=FR1
+ * MSC: channel type permitted speech (2 items):
+ perm_spch[0]=FR1
+ perm_spch[1]=HR1
+ * BSS: audio support settings (3 items):
+ audio_support[0]=FR1
+ audio_support[1]=FR3
+ audio_support[2]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=0
+ codec->efr=1
+ codec->amr=0
+ * result: rc=0, full_rate=1, chan_mode=SPEECH_V1
+
+Determining channel mode and rate:
+ * MS: speech codec list (1 items):
+ codec[0]->type=HR1
+ * MSC: channel type permitted speech (2 items):
+ perm_spch[0]=FR1
+ perm_spch[1]=HR1
+ * BSS: audio support settings (3 items):
+ audio_support[0]=FR1
+ audio_support[1]=FR2
+ audio_support[2]=HR1
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=0
+ codec->amr=0
* result: rc=0, full_rate=0, chan_mode=SPEECH_V1
============== test_selected_non_working ==============
@@ -679,6 +927,11 @@ Determining channel mode and rate:
audio_support[0]=FR1
audio_support[1]=FR3
audio_support[2]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=-1, full_rate=-1, chan_mode=SIGNALLING
Determining channel mode and rate:
@@ -691,6 +944,11 @@ Determining channel mode and rate:
audio_support[0]=FR1
audio_support[1]=FR3
audio_support[2]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
* result: rc=-1, full_rate=-1, chan_mode=SIGNALLING
Determining channel mode and rate:
@@ -702,6 +960,62 @@ Determining channel mode and rate:
audio_support[0]=FR1
audio_support[1]=FR2
audio_support[2]=HR1
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
+ * result: rc=-1, full_rate=-1, chan_mode=SIGNALLING
+
+Determining channel mode and rate:
+ * MS: speech codec list (1 items):
+ codec[0]->type=HR1
+ * MSC: channel type permitted speech (1 items):
+ perm_spch[0]=FR2
+ * BSS: audio support settings (3 items):
+ audio_support[0]=FR1
+ audio_support[1]=FR3
+ audio_support[2]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
+ * result: rc=-1, full_rate=-1, chan_mode=SIGNALLING
+
+Determining channel mode and rate:
+ * MS: speech codec list (1 items):
+ codec[0]->type=HR1
+ * MSC: channel type permitted speech (2 items):
+ perm_spch[0]=FR1
+ perm_spch[1]=HR1
+ * BSS: audio support settings (1 items):
+ audio_support[0]=HR3
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=1
+ codec->efr=1
+ codec->amr=1
+ * result: rc=-1, full_rate=-1, chan_mode=SIGNALLING
+
+Determining channel mode and rate:
+ * MS: speech codec list (5 items):
+ codec[0]->type=FR1
+ codec[1]->type=FR2
+ codec[2]->type=FR3
+ codec[3]->type=HR1
+ codec[4]->type=HR3
+ * MSC: channel type permitted speech (1 items):
+ perm_spch[0]=HR3
+ * BSS: audio support settings (3 items):
+ audio_support[0]=FR1
+ audio_support[1]=FR2
+ audio_support[2]=HR1
+ * BTS: audio support settings:
+ (GSM-FR implicitly supported)
+ codec->hr=0
+ codec->efr=0
+ codec->amr=1
* result: rc=-1, full_rate=-1, chan_mode=SIGNALLING
Testing execution completed.