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