Change in osmo-msc[master]: mncc: rework passing GCR over the MNCC interface

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/.

fixeria gerrit-no-reply at lists.osmocom.org
Wed Nov 3 21:12:52 UTC 2021


fixeria has submitted this change. ( https://gerrit.osmocom.org/c/osmo-msc/+/25982 )

Change subject: mncc: rework passing GCR over the MNCC interface
......................................................................

mncc: rework passing GCR over the MNCC interface

Using *unpacked* 'struct osmo_gcr_parsed' in the MNCC PDUs makes
the protocol even more complicated than it currently is, and
moreover complicates implementing MNCCv8 in the ttcn3-sip-test.

Replace 'struct osmo_gcr_parsed' in 'struct gsm_mncc' with a
fixed-length buffer, which is supposed to hold the Global Call
Reference encoded as per 3GPP TS 29.205.

Indicate presence of GCR using the MNCC_F_GCR flag.

Change-Id: I259b6d7e4cbe26159b9b496356fc7c1c27d54521
Fixes: I705c860e51637b4537cad65a330ecbaaca96dd5b
Related: OS#5164, OS#5282
---
M include/osmocom/msc/mncc.h
M src/libmsc/gsm_04_08_cc.c
M tests/mncc/mncc_test.ok
3 files changed, 34 insertions(+), 17 deletions(-)

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



diff --git a/include/osmocom/msc/mncc.h b/include/osmocom/msc/mncc.h
index 5002227..06a5dcc 100644
--- a/include/osmocom/msc/mncc.h
+++ b/include/osmocom/msc/mncc.h
@@ -26,7 +26,6 @@
 
 #include <osmocom/core/linuxlist.h>
 #include <osmocom/gsm/mncc.h>
-#include <osmocom/gsm/gsm29205.h>
 
 #include <stdint.h>
 #include <netinet/in.h>
@@ -125,6 +124,7 @@
 #define MNCC_F_CCCAP		0x0800
 #define MNCC_F_KEYPAD		0x1000
 #define MNCC_F_SIGNAL		0x2000
+#define MNCC_F_GCR		0x4000
 
 struct gsm_mncc {
 	/* context based information */
@@ -161,7 +161,10 @@
 
 	unsigned char	lchan_type;
 	unsigned char	lchan_mode;
-	struct osmo_gcr_parsed gcr;
+
+	/* Global Call Reference (encoded as per 3GPP TS 29.205) */
+	uint8_t		gcr[16];
+
 	/* A buffer to contain SDP ('\0' terminated) */
 	char		sdp[1024];
 };
diff --git a/src/libmsc/gsm_04_08_cc.c b/src/libmsc/gsm_04_08_cc.c
index d6a2864..6562daa 100644
--- a/src/libmsc/gsm_04_08_cc.c
+++ b/src/libmsc/gsm_04_08_cc.c
@@ -320,12 +320,16 @@
 		trans->paging_request = NULL;
 
 		/* Get the GCR from the MO call leg (if any). */
-		if (!trans->cc.lcls) {
+		if (!trans->cc.lcls)
 			trans->cc.lcls = trans_lcls_compose(trans, true);
-			if (trans->cc.lcls) {
-				trans->cc.lcls->gcr = trans->cc.msg.gcr;
+		if (trans->cc.lcls && trans->cc.msg.fields & MNCC_F_GCR) {
+			int rc = osmo_dec_gcr(&trans->cc.lcls->gcr,
+					      &trans->cc.msg.gcr[0],
+					      sizeof(trans->cc.msg.gcr));
+			if (rc < 0)
+				LOG_TRANS(trans, LOGL_ERROR, "Failed to parse GCR\n");
+			else
 				trans->cc.lcls->gcr_available = true;
-			}
 		}
 
 		osmo_fsm_inst_dispatch(msc_a->c.fi, MSC_A_EV_TRANSACTION_ACCEPTED, trans);
@@ -517,8 +521,18 @@
 		trans->cc.lcls = trans_lcls_compose(trans, true);
 
 	/* Pass the LCLS GCR on to the MT call leg via MNCC */
-	if (trans->cc.lcls)
-		setup.gcr = trans->cc.lcls->gcr;
+	if (trans->cc.lcls) {
+		struct msgb *gcr_msg = msgb_alloc(sizeof(setup.gcr), "MNCC GCR");
+		const struct osmo_gcr_parsed *gcr = &trans->cc.lcls->gcr;
+		int rc;
+
+		if (gcr_msg != NULL && (rc = osmo_enc_gcr(gcr_msg, gcr)) > 0) {
+			memcpy(&setup.gcr[0], gcr_msg->data, rc);
+			setup.fields |= MNCC_F_GCR;
+		} else
+			LOG_TRANS(trans, LOGL_ERROR, "Failed to encode GCR\n");
+		msgb_free(gcr_msg);
+	}
 
 	tlv_parse(&tp, &gsm48_att_tlvdef, gh->data, payload_len, 0, 0);
 	/* emergency setup is identified by msg_type */
diff --git a/tests/mncc/mncc_test.ok b/tests/mncc/mncc_test.ok
index 7cb1201..059e808 100644
--- a/tests/mncc/mncc_test.ok
+++ b/tests/mncc/mncc_test.ok
@@ -1,15 +1,15 @@
 test_sdp_termination()
 
 struct gsm_mncc:
-empty SDP: len=1872 sdplen=1024 sdp="\0" rc=0
-empty SDP, shortest possible: len=849 sdplen=1 sdp="\0" rc=0
-empty SDP, zero len: len=848 sdplen=0 sdp=- rc=-22
-terminated SDP str: len=1872 sdplen=1024 sdp="Privacy is a desirable marketing option\0" rc=0
-terminated SDP str, shortest possible: len=888 sdplen=40 sdp="Privacy is a desirable marketing option\0" rc=0
-terminated SDP str, but len excludes nul: len=887 sdplen=39 sdp="Privacy is a desirable marketing option" rc=-22
-terminated SDP str, but len too short: len=871 sdplen=23 sdp="Privacy is a desirable " rc=-22
-len way too short: len=10 sdplen=-838 sdp=- rc=-22
-len zero: len=0 sdplen=-848 sdp=- rc=-22
+empty SDP: len=1876 sdplen=1026 sdp="\0" rc=0
+empty SDP, shortest possible: len=851 sdplen=1 sdp="\0" rc=0
+empty SDP, zero len: len=850 sdplen=0 sdp=- rc=-22
+terminated SDP str: len=1876 sdplen=1026 sdp="Privacy is a desirable marketing option\0" rc=0
+terminated SDP str, shortest possible: len=890 sdplen=40 sdp="Privacy is a desirable marketing option\0" rc=0
+terminated SDP str, but len excludes nul: len=889 sdplen=39 sdp="Privacy is a desirable marketing option" rc=-22
+terminated SDP str, but len too short: len=873 sdplen=23 sdp="Privacy is a desirable " rc=-22
+len way too short: len=10 sdplen=-840 sdp=- rc=-22
+len zero: len=0 sdplen=-850 sdp=- rc=-22
 
 struct gsm_mncc_rtp:
 empty SDP: len=1168 sdplen=1024 sdp="\0" rc=0

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

Gerrit-Project: osmo-msc
Gerrit-Branch: master
Gerrit-Change-Id: I259b6d7e4cbe26159b9b496356fc7c1c27d54521
Gerrit-Change-Number: 25982
Gerrit-PatchSet: 9
Gerrit-Owner: fixeria <vyanitskiy at sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy at sysmocom.de>
Gerrit-Reviewer: keith <keith at rhizomatica.org>
Gerrit-Reviewer: laforge <laforge at osmocom.org>
Gerrit-Reviewer: pespin <pespin at sysmocom.de>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20211103/13683753/attachment.htm>


More information about the gerrit-log mailing list