<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/15936">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, but someone else must approve
  pespin: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">improve/fix f_tc_mo_setup_dtmf_dup<br><br>- Fix error log for a missing final DTMF.<br><br>- Instead of code dup to establish a call, use f_mo_call_establish().  This<br>  will make the test benefit from changes to f_mo_call_establish() (which will<br>  soon come up to accomodate changes in osmo-msc's codec negotiation).<br><br>- Instead of hardcoding the expected N_SD counter values to detect DTAP<br>  duplicates, use f_bssmap_last_n_sd() and f_next_n_sd(), so that the N_SD<br>  counter is correct regardless of how many DTAP were sent in<br>  f_mo_call_establish().<br><br>- Instead of hardcoding a correct N_SD in the end, use skip_seq_patching ==<br>  false, so that the ttcn DTAP correctly tracks N_SD for subsequent call<br>  release messages.<br><br>- Release the call.<br><br>Change-Id: Ibfa8b906764f2d5ed75fe74125be42af4546e864<br>---<br>M msc/BSC_ConnectionHandler.ttcn<br>M msc/MSC_Tests.ttcn<br>2 files changed, 26 insertions(+), 16 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/msc/BSC_ConnectionHandler.ttcn b/msc/BSC_ConnectionHandler.ttcn</span><br><span>index 5b0a125..0ddc911 100644</span><br><span>--- a/msc/BSC_ConnectionHandler.ttcn</span><br><span>+++ b/msc/BSC_ConnectionHandler.ttcn</span><br><span>@@ -1273,50 +1273,58 @@</span><br><span>     var MgcpCommand mgcp_cmd;</span><br><span>    var template PDU_ML3_MS_NW dtmf_dtap;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       f_establish_fully();</span><br><span style="color: hsl(120, 100%, 40%);">+  f_mo_call_establish(cpars);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* Create MNCC and MGCP expect */</span><br><span style="color: hsl(0, 100%, 40%);">-       f_create_mncc_expect(hex2str(cpars.called_party));</span><br><span style="color: hsl(0, 100%, 40%);">-      f_create_mgcp_expect(ExpectCriteria:{omit,omit,omit});</span><br><span style="color: hsl(120, 100%, 40%);">+        /* Send DTMF: send the exact same DTAP message twice, the dup should be filtered out by</span><br><span style="color: hsl(120, 100%, 40%);">+        * 3GPP TS 24.007 11.2.3.2 Message Type Octet / Duplicate Detection. */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_CC_SETUP(cpars.transaction_id, cpars.called_party)));</span><br><span style="color: hsl(0, 100%, 40%);">-       MNCC.receive(tr_MNCC_SETUP_ind(?, tr_MNCC_number(hex2str(cpars.called_party)))) -> value mncc;</span><br><span style="color: hsl(0, 100%, 40%);">-       cpars.mncc_callref := mncc.u.signal.callref;</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Find out the next NSD that will be used, from RAN emulation. */</span><br><span style="color: hsl(120, 100%, 40%);">+    var N_Sd_Array last_n_sd := f_bssmap_last_n_sd();</span><br><span style="color: hsl(120, 100%, 40%);">+     var uint2_t next_n_sd := f_next_n_sd(last_n_sd, 0 /* cc is index 0 */);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     /* Send DTMF */</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Compose DTAP with this correct NSD */</span><br><span>     dtmf_dtap := ts_ML3_MO_CC_START_DTMF(cpars.transaction_id, "2");</span><br><span style="color: hsl(0, 100%, 40%);">-      dtmf_dtap.msgs.cc.startDTMF.nsd := int2bit(2, 2);</span><br><span style="color: hsl(0, 100%, 40%);">-       BSSAP.send(ts_PDU_DTAP_MO(dtmf_dtap, '00'O, true));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Here, pass skip_seq_patching == false so that the RAN Emulation NSD increments after this message. */</span><br><span style="color: hsl(120, 100%, 40%);">+      BSSAP.send(ts_PDU_DTAP_MO(dtmf_dtap, '00'O, false));</span><br><span>         T.start;</span><br><span>     alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] MNCC.receive(tr_MNCC_START_DTMF_ind(cpars.mncc_callref, "2")) {}</span><br><span style="color: hsl(120, 100%, 40%);">+ [] MNCC.receive(tr_MNCC_START_DTMF_ind(cpars.mncc_callref, "2")) {</span><br><span style="color: hsl(120, 100%, 40%);">+          log("f_mo_seq_dtmf_dup() 1: got first START_DTMF_ind");</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span>    [] T.timeout {</span><br><span>               setverdict(fail, "Timeout waiting for START_DTMF_ind");</span><br><span>            mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* Send the exact same DTAP with above NSD, which is now incorrect (has not incremented), so that this message</span><br><span style="color: hsl(120, 100%, 40%);">+         * will get filtered by the duplicate detection. Write NSD into DTAP and pass skip_seq_patching == true. */</span><br><span style="color: hsl(120, 100%, 40%);">+   dtmf_dtap.msgs.cc.startDTMF.nsd := int2bit(next_n_sd, 2);</span><br><span>    BSSAP.send(ts_PDU_DTAP_MO(dtmf_dtap, '00'O, true));</span><br><span>  T.start;</span><br><span>     alt {</span><br><span>        [] MNCC.receive(tr_MNCC_START_DTMF_ind(cpars.mncc_callref, "2")) {</span><br><span style="color: hsl(0, 100%, 40%);">-            setverdict(fail, "Received duplicate START_DTMF_ind");</span><br><span style="color: hsl(120, 100%, 40%);">+              setverdict(fail, "f_mo_seq_dtmf_dup() 2: Received duplicate START_DTMF_ind");</span><br><span>              mtc.stop;</span><br><span>            }</span><br><span>    [] T.timeout { }</span><br><span>     }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* Here the NSD should be correct again and we see a DTMF. */</span><br><span>        dtmf_dtap := ts_ML3_MO_CC_START_DTMF(cpars.transaction_id, "3");</span><br><span style="color: hsl(0, 100%, 40%);">-      dtmf_dtap.msgs.cc.startDTMF.nsd := int2bit(3, 2);</span><br><span style="color: hsl(0, 100%, 40%);">-       BSSAP.send(ts_PDU_DTAP_MO(dtmf_dtap, '00'O, true));</span><br><span style="color: hsl(120, 100%, 40%);">+   BSSAP.send(ts_PDU_DTAP_MO(dtmf_dtap, '00'O, false));</span><br><span>         alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] MNCC.receive(tr_MNCC_START_DTMF_ind(cpars.mncc_callref, "3")) { }</span><br><span style="color: hsl(120, 100%, 40%);">+        [] MNCC.receive(tr_MNCC_START_DTMF_ind(cpars.mncc_callref, "3")) {</span><br><span style="color: hsl(120, 100%, 40%);">+          log("f_mo_seq_dtmf_dup() 3: got second START_DTMF_ind");</span><br><span style="color: hsl(120, 100%, 40%);">+            }</span><br><span>    [] T.timeout {</span><br><span style="color: hsl(0, 100%, 40%);">-          setverdict(fail, "Received duplicate START_DTMF_ind");</span><br><span style="color: hsl(120, 100%, 40%);">+              setverdict(fail, "Timeout waiting for final START_DTMF_ind");</span><br><span>              mtc.stop;</span><br><span>            }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ f_call_hangup(cpars, true);</span><br><span>  setverdict(pass);</span><br><span> }</span><br><span> </span><br><span>diff --git a/msc/MSC_Tests.ttcn b/msc/MSC_Tests.ttcn</span><br><span>index fbb471e..c290d7c 100644</span><br><span>--- a/msc/MSC_Tests.ttcn</span><br><span>+++ b/msc/MSC_Tests.ttcn</span><br><span>@@ -1776,6 +1776,8 @@</span><br><span>      cpars.bss_rtp_port := 1110;</span><br><span>  cpars.mgcp_connection_id_bss := '22222'H;</span><br><span>    cpars.mgcp_connection_id_mss := '33333'H;</span><br><span style="color: hsl(120, 100%, 40%);">+     cpars.mgcp_ep := "rtpbridge/1@mgw";</span><br><span style="color: hsl(120, 100%, 40%);">+ cpars.mo_call := true;</span><br><span> </span><br><span>   f_perform_lu();</span><br><span>      f_mo_seq_dtmf_dup(cpars);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/15936">change 15936</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/15936"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ttcn3-hacks </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ibfa8b906764f2d5ed75fe74125be42af4546e864 </div>
<div style="display:none"> Gerrit-Change-Number: 15936 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>