fixeria has submitted this change. ( 
https://gerrit.osmocom.org/c/osmo-msc/+/38311?usp=email )

Change subject: silent-call: add CSD channel modes
......................................................................

silent-call: add CSD channel modes

This is useful for BER testing and figuring out if the baseband
supports the requested channel mode, e.g. half-rate data calls.

Going below 2.4k (0.6k, 1.2k, 1.2k_75) makes no sense, because:

* these rates are carried by TCH/[FH]2.4 channels anyway, and
* we never tell the user data rate to the MS (part of CC SETUP)

The same applies to transparent vs non-transparent channel modes,
but let's add non-transparent variants anyway, just in case the
BTS PHY does not support transparent modes.

Change-Id: Ife83f5bcb2b68a228a014f47c7cbb21660290593
---
M src/libmsc/msc_vty.c
1 file changed, 65 insertions(+), 20 deletions(-)

Approvals:
  fixeria: Looks good to me, approved
  falconia: Looks good to me, but someone else must approve
  laforge: Looks good to me, but someone else must approve
  Jenkins Builder: Verified




diff --git a/src/libmsc/msc_vty.c b/src/libmsc/msc_vty.c
index 1f389f4..dfed117 100644
--- a/src/libmsc/msc_vty.c
+++ b/src/libmsc/msc_vty.c
@@ -1474,19 +1474,39 @@

 #define CHAN_TYPES "(any|tch/f|tch/h|tch/any|sdcch)"
 #define CHAN_TYPE_HELP                         \
-               "Any channel\n"         \
-               "TCH/F channel\n"       \
-               "TCH/H channel\n"       \
-               "Any TCH channel\n"     \
-               "SDCCH channel\n"
+       "Any channel\n"                 \
+       "TCH/F channel\n"               \
+       "TCH/H channel\n"               \
+       "Any TCH channel\n"             \
+       "SDCCH channel\n"

-#define CHAN_MODES "(signalling|speech-hr|speech-fr|speech-efr|speech-amr)"
-#define CHAN_MODE_HELP                         \
-               "Signalling only\n"             \
-               "Speech with HR codec\n"        \
-               "Speech with FR codec\n"        \
-               "Speech with EFR codec\n"       \
-               "Speech with AMR codec\n"
+#define CHAN_MODES_SPEECH "speech-hr|speech-fr|speech-efr|speech-amr"
+#define CHAN_MODE_HELP_SPEECH          \
+       "Speech with HR codec\n"        \
+       "Speech with FR codec\n"        \
+       "Speech with EFR codec\n"       \
+       "Speech with AMR codec\n"
+
+#define CHAN_MODES_DATA_T "data-2400|data-4800|data-9600|data-14400"
+#define CHAN_MODE_HELP_DATA_T                          \
+       "Data (transparent) @ 2.4k/3.6k\n"              \
+       "Data (transparent) @ 4.8k/6.0k\n"              \
+       "Data (transparent) @ 9.6k/12.0k\n"             \
+       "Data (transparent) @ 14.4k/14.5k\n"
+
+#define CHAN_MODES_DATA_NT "data-4800-nt|data-9600-nt|data-14400-nt"
+#define CHAN_MODE_HELP_DATA_NT                         \
+       "Data (non-transparent) @ 4.8k/6k\n"            \
+       "Data (non-transparent) @ 9.6k/12k\n"           \
+       "Data (non-transparent) @ 14.4k/14.5k\n"
+
+#define CHAN_MODES "(signalling|" CHAN_MODES_SPEECH "|" CHAN_MODES_DATA_T "|" 
CHAN_MODES_DATA_NT ")"
+#define CHAN_MODE_HELP                 \
+       "Signalling only\n"             \
+       CHAN_MODE_HELP_SPEECH           \
+       CHAN_MODE_HELP_DATA_T           \
+       CHAN_MODE_HELP_DATA_NT
+

 DEFUN(subscriber_silent_call_start,
       subscriber_silent_call_start_cmd,
@@ -1500,7 +1520,7 @@
        struct gsm0808_channel_type ct;
        const char *ip;
        uint16_t port;
-       int rc, speech;
+       int rc, sign;

        if (!vsub) {
                vty_out(vty, "%% No subscriber found for %s %s%s",
@@ -1531,24 +1551,49 @@
                ct.perm_spch[0] = GSM0808_PERM_FR3;
                ct.perm_spch[1] = GSM0808_PERM_HR3;
                ct.perm_spch_len = 2;
+       } else if (!strcmp(argv[3], "data-2400")) {
+               ct.ch_indctr = GSM0808_CHAN_DATA;
+               ct.data_rate = GSM0808_DATA_RATE_TRANSP_2k4;
+               ct.data_transparent = true;
+       } else if (!strcmp(argv[3], "data-4800")) {
+               ct.ch_indctr = GSM0808_CHAN_DATA;
+               ct.data_rate = GSM0808_DATA_RATE_TRANSP_4k8;
+               ct.data_transparent = true;
+       } else if (!strcmp(argv[3], "data-9600")) {
+               ct.ch_indctr = GSM0808_CHAN_DATA;
+               ct.data_rate = GSM0808_DATA_RATE_TRANSP_9k6;
+               ct.data_transparent = true;
+       } else if (!strcmp(argv[3], "data-14400")) {
+               ct.ch_indctr = GSM0808_CHAN_DATA;
+               ct.data_rate = GSM0808_DATA_RATE_TRANSP_14k4;
+               ct.data_transparent = true;
+       } else if (!strcmp(argv[3], "data-4800-nt")) {
+               ct.ch_indctr = GSM0808_CHAN_DATA;
+               ct.data_rate = GSM0808_DATA_RATE_NON_TRANSP_6k0;
+       } else if (!strcmp(argv[3], "data-9600-nt")) {
+               ct.ch_indctr = GSM0808_CHAN_DATA;
+               ct.data_rate = GSM0808_DATA_RATE_NON_TRANSP_12k0;
+       } else if (!strcmp(argv[3], "data-14400-nt")) {
+               ct.ch_indctr = GSM0808_CHAN_DATA;
+               ct.data_rate = GSM0808_DATA_RATE_NON_TRANSP_14k5;
        }

-       speech = ct.ch_indctr == GSM0808_CHAN_SPEECH;
+       sign = ct.ch_indctr == GSM0808_CHAN_SIGN;

        if (!strcmp(argv[2], "tch/f"))
-               ct.ch_rate_type = speech ? GSM0808_SPEECH_FULL_BM : 
GSM0808_SIGN_FULL_BM;
+               ct.ch_rate_type = sign ? GSM0808_SIGN_FULL_BM : 
GSM0808_SPEECH_FULL_BM;
        else if (!strcmp(argv[2], "tch/h"))
-               ct.ch_rate_type = speech ? GSM0808_SPEECH_HALF_LM : 
GSM0808_SIGN_HALF_LM;
+               ct.ch_rate_type = sign ? GSM0808_SIGN_HALF_LM : 
GSM0808_SPEECH_HALF_LM;
        else if (!strcmp(argv[2], "tch/any"))
-               ct.ch_rate_type = speech ? GSM0808_SPEECH_FULL_PREF : 
GSM0808_SIGN_FULL_PREF;
+               ct.ch_rate_type = sign ? GSM0808_SIGN_FULL_PREF : 
GSM0808_SPEECH_FULL_PREF;
        else if (!strcmp(argv[2], "sdcch")) {
-               if (speech) {
-                       vty_out(vty, "Can't request speech on SDCCH%s", 
VTY_NEWLINE);
+               if (!sign) {
+                       vty_out(vty, "Can't request speech/data on SDCCH%s", 
VTY_NEWLINE);
                        return CMD_WARNING;
                }
                ct.ch_rate_type = GSM0808_SIGN_SDCCH;
        } else
-               ct.ch_rate_type = speech ? GSM0808_SPEECH_FULL_PREF : 
GSM0808_SIGN_ANY;
+               ct.ch_rate_type = sign ? GSM0808_SIGN_ANY : 
GSM0808_SPEECH_FULL_PREF;

        ip   = argc >= 5 ? argv[4] : "127.0.0.1";
        port = argc >= 6 ? atoi(argv[5]) : 4000;

--
To view, visit https://gerrit.osmocom.org/c/osmo-msc/+/38311?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings?usp=email

Gerrit-MessageType: merged
Gerrit-Project: osmo-msc
Gerrit-Branch: master
Gerrit-Change-Id: Ife83f5bcb2b68a228a014f47c7cbb21660290593
Gerrit-Change-Number: 38311
Gerrit-PatchSet: 2
Gerrit-Owner: fixeria <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: falconia <[email protected]>
Gerrit-Reviewer: fixeria <[email protected]>
Gerrit-Reviewer: laforge <[email protected]>

Reply via email to