Hi,

I had a problem placing MO GSM calls from a Siemens S11E: The calls
were dropped immediately; Osmo-MSC reports "Cannot compose Channel
Type from bearer capabilities"

After investigating the SETUP request from the S11E, the phone does
not use octet 3a (no extension bit set in IE 3). Wireshark decodes the
radio channel requirement as "Full rate support only MS/fullrate
speech version 1 supported", so I added a condition to the gsm48_ie.c
function of libosmocore to include at least GSM FR in the list of
available speech_ver in case octet 3 has no extension.

Attached to this message are the Abis-IP PCAP traces of MO calls, and
the patch for gsm48_ie.c.


Regards,
Lennart

Attachment: Siemens_S11E.pcap
Description: application/vnd.tcpdump.pcap

Attachment: Siemens_M35.pcap
Description: application/vnd.tcpdump.pcap

diff --git a/src/gsm/gsm48_ie.c b/src/gsm/gsm48_ie.c
index 6d40bec4..b3e56075 100644
--- a/src/gsm/gsm48_ie.c
+++ b/src/gsm/gsm48_ie.c
@@ -203,16 +203,25 @@ int gsm48_decode_bearer_cap(struct gsm_mncc_bearer_cap *bcap,
 	case GSM_MNCC_BCAP_SPEECH:
 		i = 1;
 		s = 0;
-		while(!(lv[i] & 0x80)) {
-			i++; /* octet 3a etc */
-			if (in_len < i)
-				return 0;
-			bcap->speech_ver[s++] = lv[i] & 0x0f;
+		if((lv[1] & 0x80) != 0)
+		{
+			bcap->speech_ver[s++] = GSM48_BCAP_SV_FR; /* GSM FR only */
 			bcap->speech_ver[s] = -1; /* end of list */
-			if (i == 2) /* octet 3a */
-				bcap->speech_ctm = (lv[i] & 0x20) >> 5;
-			if (s == 7) /* maximum speech versions + end of list */
-				return 0;
+			return 0;
+		}
+		else
+		{
+			while(!(lv[i] & 0x80)) {
+				i++; /* octet 3a etc */
+				if (in_len < i)
+					return 0;
+				bcap->speech_ver[s++] = lv[i] & 0x0f;
+				bcap->speech_ver[s] = -1; /* end of list */
+				if (i == 2) /* octet 3a */
+					bcap->speech_ctm = (lv[i] & 0x20) >> 5;
+				if (s == 7) /* maximum speech versions + end of list */
+					return 0;
+			}
 		}
 		break;
 	case GSM_MNCC_BCAP_UNR_DIG:

Reply via email to