osmith has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/33354 )
Change subject: msc: new test: TC_lu_and_mo_csd ......................................................................
msc: new test: TC_lu_and_mo_csd
Related: OS#4394 Depends: https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.MobileL3_v13.... Change-Id: Ia863a63a318a9b0a8b4bfc1dc425cbc0235256b3 --- M deps/Makefile M library/L3_Templates.ttcn M msc/BSC_ConnectionHandler.ttcn M msc/MSC_Tests.ttcn 4 files changed, 120 insertions(+), 2 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/54/33354/1
diff --git a/deps/Makefile b/deps/Makefile index d4f209a..c7be960 100644 --- a/deps/Makefile +++ b/deps/Makefile @@ -104,7 +104,7 @@ titan.ProtocolModules.MAP_commit= R.2.A-1-g79c6a3d titan.ProtocolModules.M2PA_commit= R.2.A-5-ga75b589 titan.ProtocolModules.M3UA_commit= c496d298876fed55c2b730278b7ee77982555563 -titan.ProtocolModules.MobileL3_v13.4.0_commit= badbad680df216b3211260d56b14734eeb2c9028 +titan.ProtocolModules.MobileL3_v13.4.0_commit= 76a3557f69834b6171652aaeaeef220444c35ba7 titan.ProtocolModules.NAS_EPS_15.2.0.1_commit= R.1.A-2-g2ba853c titan.ProtocolModules.NS_v7.3.0_commit= R.2.A-6-gf73f195 titan.ProtocolModules.RTP_commit= R.5.A-4-g83ee83a diff --git a/library/L3_Templates.ttcn b/library/L3_Templates.ttcn index de7063f..edec440 100644 --- a/library/L3_Templates.ttcn +++ b/library/L3_Templates.ttcn @@ -1305,6 +1305,7 @@ template (value) Speech_AuxiliarySpeech ts_SpeechAuxFR(SpeechVer ver) := ts_SpeechAux(ver, '0'B); template (value) Speech_AuxiliarySpeech ts_SpeechAuxHR(SpeechVer ver) := ts_SpeechAux(ver, '1'B);
+/* TS 3GPP 24.008 § 10.5.4.5 */ template (value) BearerCapability_TLV ts_Bcap_voice := { elementIdentifier := '04'O, lengthIndicator := 0, /* overwritten */ @@ -1328,6 +1329,86 @@ octet7 := omit }
+/* TS 3GPP 24.008 § 10.5.4.5 */ +template (value) BearerCapability_TLV ts_Bcap_csd := { + elementIdentifier := '04'O, + lengthIndicator := 0, /* overwritten */ + octet3 := { + informationTransferCapability := '001'B, + transferMode := '0'B, + codingStandard := '0'B, + radioChannelRequirement := '11'B, + extension_octet_3 := '0'B, + speech_aux_3a_3b := omit + }, + octet4 := { + establishment := '0'B, + nirr := '1'B, + configuration := '0'B, + duplexMode := '1'B, + structure := '00'B, + compression := '0'B, + extension_octet_4 := '1'B + }, + octet5 := { + signallingAccessProtocol := '001'B, + rateAdaptation := '01'B, /* V.110 */ + accessId := '00'B, + extension_octet_5 := '0'B, + spare2_3 := omit, + otherRateAdaptation := omit, + otherInformationTransferCapability := omit, + extension_octet_5a := omit, + spare3_1 := omit, + inbandNegotiation := omit, + assignor_assignee := omit, + lli := omit, + mode := omit, + multiframe := omit, + hdrNohdr := omit, + extension_octet_5b := omit + }, + octet6 := { + synchronous_asynchronous := '1'B, /* 0: sync, 1: async */ + userInformationLayer1Protocol := '0000'B, + layer1Id := '01'B, + extension_octet_6 := '0'B, + /* octet 6a */ + userRate := '0100'B, /* 4.8 kbit/s */ + numberDataBits := '0'B, + negotiation := '0'B, + numberStopBits := '0'B, + extension_octet_6a := '1'B, + /* octet 6b */ + parity := '000'B, + nicOnRX := '0'B, + nicOnTX := '0'B, + intermediateRate := '10'B, + extension_octet_6b := '1'B, + /* octet 6c */ + modemType := '00000'B, + connectionElement := '00'B, /* 00: T / 01: NT */ + extension_octet_6c := '0'B, + /* octet 6d */ + fixedNetworkUserRate := omit, + otherModemType := omit, + extension_octet_6d := omit, + /* octet 6e */ + maxNumberOfTrafficChannels := omit, + acceptableChannelCodings := omit, + extension_octet_6e := omit, + wantedAirInterfaceUserRate := omit, + uimi := omit, + /* octet 6f */ + extension_octet_6f := omit, + spare := omit, + asymetryIndication := omit, + acceptableChannelCodingsExt := omit, + extension_octet_6g := omit + }, + octet7 := omit +} + template PDU_ML3_MS_NW ts_ML3_MO_CC_SETUP(integer tid, hexstring called, template BearerCapability_TLV bcap := ts_Bcap_voice) := { discriminator := '0011'B, tiOrSkip := { diff --git a/msc/BSC_ConnectionHandler.ttcn b/msc/BSC_ConnectionHandler.ttcn index 4351e06..3d7dc07 100644 --- a/msc/BSC_ConnectionHandler.ttcn +++ b/msc/BSC_ConnectionHandler.ttcn @@ -375,7 +375,8 @@ EST_TYPE_EMERG_CALL, EST_TYPE_PAG_RESP, EST_TYPE_MO_SMS, - EST_TYPE_SS_ACT + EST_TYPE_SS_ACT, + EST_TYPE_MO_CSD };
/* helper function to fully establish a dedicated channel */ @@ -395,6 +396,9 @@ case (EST_TYPE_MO_CALL) { l3_info := valueof(ts_CM_SERV_REQ(CM_TYPE_MO_CALL, mi)); } + case (EST_TYPE_MO_CSD) { + l3_info := valueof(ts_CM_SERV_REQ(CM_TYPE_MO_CALL, mi)); + } case (EST_TYPE_EMERG_CALL) { l3_info := valueof(ts_CM_SERV_REQ(CM_TYPE_EMERG_CALL, mi)); } @@ -951,6 +955,7 @@ important to set the TI flag properly */ BearerCapability_TLV bearer_cap, /* which bearer capabilities to claim */ boolean emergency, /* is this an emergency call? */ + boolean csd, /* is this a circuit switched data call? */
/* MNCC related parameters */ uint32_t mncc_callref optional, /* call reference on the MNCC side */ @@ -1538,6 +1543,8 @@
if (cpars.emergency) { f_establish_fully(EST_TYPE_EMERG_CALL); + } else if (cpars.csd) { + f_establish_fully(EST_TYPE_MO_CSD); } else { f_establish_fully(EST_TYPE_MO_CALL); } @@ -1548,6 +1555,8 @@
if (cpars.emergency) { BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_CC_EMERG_SETUP(cpars.transaction_id))); + } if (cpars.csd) { + BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_CC_SETUP(cpars.transaction_id, cpars.called_party, ts_Bcap_csd))); } else { BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_CC_SETUP(cpars.transaction_id, cpars.called_party))); } diff --git a/msc/MSC_Tests.ttcn b/msc/MSC_Tests.ttcn index 666c6c1..9650b3e 100644 --- a/msc/MSC_Tests.ttcn +++ b/msc/MSC_Tests.ttcn @@ -7187,6 +7187,21 @@ f_TC_auth_options(11); }
+friend function f_tc_lu_and_mo_csd(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr { + f_init_handler(pars); + var CallParameters cpars := valueof(t_CallParams); + cpars.csd := true; + f_perform_lu(); + f_mo_call(cpars); +} +testcase TC_lu_and_mo_csd() runs on MTC_CT { + var BSC_ConnHdlr vc_conn; + f_init(); + + vc_conn := f_start_handler(refers(f_tc_lu_and_mo_csd), 7); + vc_conn.done; +} + control { execute( TC_cr_before_reset() ); execute( TC_lu_imsi_noauth_tmsi() ); @@ -7364,6 +7379,8 @@ execute( TC_auth_options_9() ); execute( TC_auth_options_10() ); execute( TC_auth_options_11() ); + + execute( TC_lu_and_mo_csd() ); }