<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/11315">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  Harald Welte: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bsc: add 3 tests for inter-BSC HO outgoing failures<br><br>Add<br>* TC_ho_out_fail_no_msc_response()<br>* TC_ho_out_fail_rr_ho_failure()<br>* TC_ho_out_fail_no_ho_detect()<br><br>Depends: I0980cacb9713e41a1eef3a0a7f6cc892e8a20da5 (osmo-bsc)<br>Change-Id: If772dbbc5f9790d3f911465e1303dd0a99811154<br>---<br>M bsc/BSC_Tests.ttcn<br>M bsc/expected-results.xml<br>M library/BSSMAP_Templates.ttcn<br>3 files changed, 234 insertions(+), 1 deletion(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn</span><br><span>index 754f7b3..5f77021 100644</span><br><span>--- a/bsc/BSC_Tests.ttcn</span><br><span>+++ b/bsc/BSC_Tests.ttcn</span><br><span>@@ -2274,6 +2274,214 @@</span><br><span>  vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* BSC asks for inter-BSC HO, but the MSC decides that it won't happen and</span><br><span style="color: hsl(120, 100%, 40%);">+ * simply never sends a BSSMAP Handover Command. */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_tc_ho_out_fail_no_msc_response(charstring id) runs on MSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+  g_pars := valueof(t_def_TestHdlrPars);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      var PDU_BSSAP ass_req := f_gen_ass_req();</span><br><span style="color: hsl(120, 100%, 40%);">+     ass_req.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);</span><br><span style="color: hsl(120, 100%, 40%);">+        ass_req.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));</span><br><span style="color: hsl(120, 100%, 40%);">+      var template PDU_BSSAP exp_compl := f_gen_exp_compl();</span><br><span style="color: hsl(120, 100%, 40%);">+        f_establish_fully(ass_req, exp_compl);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      f_vty_transceive(BSCVTY, "handover any to arfcn 123 bsic any");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   BSSAP.receive(tr_BSSMAP_HandoverRequired);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* osmo-bsc should time out 10 seconds after the handover started.</span><br><span style="color: hsl(120, 100%, 40%);">+     * Let's give it a bit extra. */</span><br><span style="color: hsl(120, 100%, 40%);">+  f_sleep(15.0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* The old lchan and conn should still be active. See that arbitrary L3</span><br><span style="color: hsl(120, 100%, 40%);">+        * is still going through. */</span><br><span style="color: hsl(120, 100%, 40%);">+ var octetstring l3 := '0123456789'O;</span><br><span style="color: hsl(120, 100%, 40%);">+  RSL.send(ts_RSL_DATA_IND(g_chan_nr, valueof(ts_RslLinkID_DCCH(0)), l3));</span><br><span style="color: hsl(120, 100%, 40%);">+      var template PDU_BSSAP exp_data := {</span><br><span style="color: hsl(120, 100%, 40%);">+              discriminator := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                spare := '0000000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                  dlci := '00'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                lengthIndicator := 5,</span><br><span style="color: hsl(120, 100%, 40%);">+                 pdu := {</span><br><span style="color: hsl(120, 100%, 40%);">+                  dtap := l3</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span style="color: hsl(120, 100%, 40%);">+         };</span><br><span style="color: hsl(120, 100%, 40%);">+    BSSAP.receive(exp_data);</span><br><span style="color: hsl(120, 100%, 40%);">+      setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_ho_out_fail_no_msc_response() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+ var MSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   f_init(1, true);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       vc_conn := f_start_handler(refers(f_tc_ho_out_fail_no_msc_response));</span><br><span style="color: hsl(120, 100%, 40%);">+ vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* BSC asks for inter-BSC HO, receives BSSMAP Handover Command, but MS reports</span><br><span style="color: hsl(120, 100%, 40%);">+ * RR Handover Failure. */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_tc_ho_out_fail_rr_ho_failure(charstring id) runs on MSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+ g_pars := valueof(t_def_TestHdlrPars);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      var PDU_BSSAP ass_req := f_gen_ass_req();</span><br><span style="color: hsl(120, 100%, 40%);">+     ass_req.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);</span><br><span style="color: hsl(120, 100%, 40%);">+        ass_req.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));</span><br><span style="color: hsl(120, 100%, 40%);">+      var template PDU_BSSAP exp_compl := f_gen_exp_compl();</span><br><span style="color: hsl(120, 100%, 40%);">+        f_establish_fully(ass_req, exp_compl);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      f_vty_transceive(BSCVTY, "handover any to arfcn 123 bsic any");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   BSSAP.receive(tr_BSSMAP_HandoverRequired);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  f_sleep(0.5);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* The MSC negotiates Handover Request and Handover Request Ack with</span><br><span style="color: hsl(120, 100%, 40%);">+   * the other BSS and comes back with a BSSMAP Handover Command</span><br><span style="color: hsl(120, 100%, 40%);">+         * containing an RR Handover Command coming from the target BSS... */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       var PDU_ML3_NW_MS rr_ho_cmd := valueof(ts_RR_HandoverCommand);</span><br><span style="color: hsl(120, 100%, 40%);">+        log("Remote cell's RR Handover Command passed through as L3 Info: ", rr_ho_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+        var octetstring rr_ho_cmd_enc := enc_PDU_ML3_NW_MS(rr_ho_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+        log("Remote cell's RR Handover Command passed through as L3 Info, encoded: ", rr_ho_cmd_enc);</span><br><span style="color: hsl(120, 100%, 40%);">+   BSSAP.send(ts_BSSMAP_HandoverCommand(rr_ho_cmd_enc));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* expect the Handover Command to go out on RR */</span><br><span style="color: hsl(120, 100%, 40%);">+     var RSL_Message rsl_ho_cmd</span><br><span style="color: hsl(120, 100%, 40%);">+    RSL.receive(tr_RSL_DATA_REQ(g_chan_nr, ?, ?)) -> value rsl_ho_cmd;</span><br><span style="color: hsl(120, 100%, 40%);">+ log("RSL Data Req went out to first BTS: ", rsl_ho_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+    var RSL_IE_Body rsl_ho_cmd_l3;</span><br><span style="color: hsl(120, 100%, 40%);">+        if (not f_rsl_find_ie(rsl_ho_cmd, RSL_IE_L3_INFO, rsl_ho_cmd_l3)) {</span><br><span style="color: hsl(120, 100%, 40%);">+           log("RSL message contains no L3 Info IE, expected RR Handover Command");</span><br><span style="color: hsl(120, 100%, 40%);">+            setverdict(fail);</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              log("Found L3 Info: ", rsl_ho_cmd_l3);</span><br><span style="color: hsl(120, 100%, 40%);">+              if (rsl_ho_cmd_l3.l3_info.payload != rr_ho_cmd_enc) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 log("FAIL: the BSC sent out a different L3 Info, not matching the RR Handover Command the other BSS forwarded.");</span><br><span style="color: hsl(120, 100%, 40%);">+                   setverdict(fail);</span><br><span style="color: hsl(120, 100%, 40%);">+             } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      log("Success: the BSC sent out the same RR Handover Command the other BSS forwarded.");</span><br><span style="color: hsl(120, 100%, 40%);">+                     setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   f_sleep(0.2);</span><br><span style="color: hsl(120, 100%, 40%);">+ f_rsl_send_l3(ts_RRM_HandoverFailure('00'O));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* Should tell the MSC about the failure */</span><br><span style="color: hsl(120, 100%, 40%);">+   BSSAP.receive(tr_BSSMAP_HandoverFailure);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* The old lchan and conn should still be active. See that arbitrary L3</span><br><span style="color: hsl(120, 100%, 40%);">+        * is still going through. */</span><br><span style="color: hsl(120, 100%, 40%);">+ var octetstring l3 := '0123456789'O;</span><br><span style="color: hsl(120, 100%, 40%);">+  RSL.send(ts_RSL_DATA_IND(g_chan_nr, valueof(ts_RslLinkID_DCCH(0)), l3));</span><br><span style="color: hsl(120, 100%, 40%);">+      var template PDU_BSSAP exp_data := {</span><br><span style="color: hsl(120, 100%, 40%);">+              discriminator := '1'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                spare := '0000000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                  dlci := '00'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                lengthIndicator := 5,</span><br><span style="color: hsl(120, 100%, 40%);">+                 pdu := {</span><br><span style="color: hsl(120, 100%, 40%);">+                  dtap := l3</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span style="color: hsl(120, 100%, 40%);">+         };</span><br><span style="color: hsl(120, 100%, 40%);">+    BSSAP.receive(exp_data);</span><br><span style="color: hsl(120, 100%, 40%);">+      setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_ho_out_fail_rr_ho_failure() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+   var MSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   f_init(1, true);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       vc_conn := f_start_handler(refers(f_tc_ho_out_fail_rr_ho_failure));</span><br><span style="color: hsl(120, 100%, 40%);">+   vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* BSC asks for inter-BSC HO, receives BSSMAP Handover Command, but MS reports</span><br><span style="color: hsl(120, 100%, 40%);">+ * RR Handover Failure. */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_tc_ho_out_fail_no_ho_detect(charstring id) runs on MSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+  g_pars := valueof(t_def_TestHdlrPars);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      var PDU_BSSAP ass_req := f_gen_ass_req();</span><br><span style="color: hsl(120, 100%, 40%);">+     ass_req.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);</span><br><span style="color: hsl(120, 100%, 40%);">+        ass_req.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));</span><br><span style="color: hsl(120, 100%, 40%);">+      var template PDU_BSSAP exp_compl := f_gen_exp_compl();</span><br><span style="color: hsl(120, 100%, 40%);">+        f_establish_fully(ass_req, exp_compl);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      f_vty_transceive(BSCVTY, "handover any to arfcn 123 bsic any");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   BSSAP.receive(tr_BSSMAP_HandoverRequired);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  f_sleep(0.5);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* The MSC negotiates Handover Request and Handover Request Ack with</span><br><span style="color: hsl(120, 100%, 40%);">+   * the other BSS and comes back with a BSSMAP Handover Command</span><br><span style="color: hsl(120, 100%, 40%);">+         * containing an RR Handover Command coming from the target BSS... */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       var PDU_ML3_NW_MS rr_ho_cmd := valueof(ts_RR_HandoverCommand);</span><br><span style="color: hsl(120, 100%, 40%);">+        log("Remote cell's RR Handover Command passed through as L3 Info: ", rr_ho_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+        var octetstring rr_ho_cmd_enc := enc_PDU_ML3_NW_MS(rr_ho_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+        log("Remote cell's RR Handover Command passed through as L3 Info, encoded: ", rr_ho_cmd_enc);</span><br><span style="color: hsl(120, 100%, 40%);">+   BSSAP.send(ts_BSSMAP_HandoverCommand(rr_ho_cmd_enc));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       /* expect the Handover Command to go out on RR */</span><br><span style="color: hsl(120, 100%, 40%);">+     var RSL_Message rsl_ho_cmd</span><br><span style="color: hsl(120, 100%, 40%);">+    RSL.receive(tr_RSL_DATA_REQ(g_chan_nr, ?, ?)) -> value rsl_ho_cmd;</span><br><span style="color: hsl(120, 100%, 40%);">+ log("RSL Data Req went out to first BTS: ", rsl_ho_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+    var RSL_IE_Body rsl_ho_cmd_l3;</span><br><span style="color: hsl(120, 100%, 40%);">+        if (not f_rsl_find_ie(rsl_ho_cmd, RSL_IE_L3_INFO, rsl_ho_cmd_l3)) {</span><br><span style="color: hsl(120, 100%, 40%);">+           log("RSL message contains no L3 Info IE, expected RR Handover Command");</span><br><span style="color: hsl(120, 100%, 40%);">+            setverdict(fail);</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              log("Found L3 Info: ", rsl_ho_cmd_l3);</span><br><span style="color: hsl(120, 100%, 40%);">+              if (rsl_ho_cmd_l3.l3_info.payload != rr_ho_cmd_enc) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 log("FAIL: the BSC sent out a different L3 Info, not matching the RR Handover Command the other BSS forwarded.");</span><br><span style="color: hsl(120, 100%, 40%);">+                   setverdict(fail);</span><br><span style="color: hsl(120, 100%, 40%);">+             } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      log("Success: the BSC sent out the same RR Handover Command the other BSS forwarded.");</span><br><span style="color: hsl(120, 100%, 40%);">+                     setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* The MS never shows up on the remote BSS. Eventually the BSC times</span><br><span style="color: hsl(120, 100%, 40%);">+   * out and we run into 3GPP TS 48.008 3.1.5.3.3 "Abnormal Conditions":</span><br><span style="color: hsl(120, 100%, 40%);">+       * RR should be released and Clear Request should go to the MSC. */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ var MgcpCommand mgcp;</span><br><span style="color: hsl(120, 100%, 40%);">+ interleave {</span><br><span style="color: hsl(120, 100%, 40%);">+  [] RSL.receive(tr_RSL_MsgTypeD(RSL_MT_RF_CHAN_REL)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 log("Got RF Chan Rel");</span><br><span style="color: hsl(120, 100%, 40%);">+                     RSL.send(ts_RSL_RF_CHAN_REL_ACK(g_chan_nr));</span><br><span style="color: hsl(120, 100%, 40%);">+          }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] BSSAP.receive(tr_BSSMAP_ClearRequest) {</span><br><span style="color: hsl(120, 100%, 40%);">+                    log("Got BSSMAP Clear Request");</span><br><span style="color: hsl(120, 100%, 40%);">+            }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] MGCP.receive(tr_DLCX()) -> value mgcp {</span><br><span style="color: hsl(120, 100%, 40%);">+                 log("Got first DLCX: ", mgcp);</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] MGCP.receive(tr_DLCX()) -> value mgcp {</span><br><span style="color: hsl(120, 100%, 40%);">+                 log("Got second DLCX: ", mgcp);</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   setverdict(pass);</span><br><span style="color: hsl(120, 100%, 40%);">+     f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+testcase TC_ho_out_fail_no_ho_detect() runs on test_CT {</span><br><span style="color: hsl(120, 100%, 40%);">+    var MSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   f_init(1, true);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       vc_conn := f_start_handler(refers(f_tc_ho_out_fail_no_ho_detect));</span><br><span style="color: hsl(120, 100%, 40%);">+    vc_conn.done;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> private function f_tc_ho_into_this_bsc(charstring id) runs on MSC_ConnHdlr {</span><br><span>   /* Hack: the proper way would be to wait for the BSSMAP Handover Request ACK and extract the</span><br><span>          * actual assigned chan_nr from its L3 (RR Handover Command) message. But osmo-bsc starts acting</span><br><span>@@ -2847,6 +3055,9 @@</span><br><span> </span><br><span>         execute( TC_ho_int() );</span><br><span>      execute( TC_ho_out_of_this_bsc() );</span><br><span style="color: hsl(120, 100%, 40%);">+   execute( TC_ho_out_fail_no_msc_response() );</span><br><span style="color: hsl(120, 100%, 40%);">+  execute( TC_ho_out_fail_rr_ho_failure() );</span><br><span style="color: hsl(120, 100%, 40%);">+    execute( TC_ho_out_fail_no_ho_detect() );</span><br><span>    execute( TC_ho_into_this_bsc() );</span><br><span> </span><br><span>        execute( TC_bssap_rlsd_does_not_cause_bssmap_reset() );</span><br><span>diff --git a/bsc/expected-results.xml b/bsc/expected-results.xml</span><br><span>index 64d0444..cd808d8 100644</span><br><span>--- a/bsc/expected-results.xml</span><br><span>+++ b/bsc/expected-results.xml</span><br><span>@@ -1,5 +1,5 @@</span><br><span> <?xml version="1.0"?></span><br><span style="color: hsl(0, 100%, 40%);">-<testsuite name='BSC_Tests' tests='91' failures='0' errors='0' skipped='0' inconc='0' time='MASKED'></span><br><span style="color: hsl(120, 100%, 40%);">+<testsuite name='BSC_Tests' tests='94' failures='0' errors='0' skipped='0' inconc='0' time='MASKED'></span><br><span>   <testcase classname='BSC_Tests' name='TC_ctrl_msc_connection_status' time='MASKED'/></span><br><span>   <testcase classname='BSC_Tests' name='TC_ctrl_msc0_connection_status' time='MASKED'/></span><br><span>   <testcase classname='BSC_Tests' name='TC_ctrl' time='MASKED'/></span><br><span>@@ -70,6 +70,9 @@</span><br><span>   <testcase classname='BSC_Tests' name='TC_err_84_unknown_msg' time='MASKED'/></span><br><span>   <testcase classname='BSC_Tests' name='TC_ho_int' time='MASKED'/></span><br><span>   <testcase classname='BSC_Tests' name='TC_ho_out_of_this_bsc' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+  <testcase classname='BSC_Tests' name='TC_ho_out_fail_no_msc_response' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+  <testcase classname='BSC_Tests' name='TC_ho_out_fail_rr_ho_failure' time='MASKED'/></span><br><span style="color: hsl(120, 100%, 40%);">+  <testcase classname='BSC_Tests' name='TC_ho_out_fail_no_ho_detect' time='MASKED'/></span><br><span>   <testcase classname='BSC_Tests' name='TC_ho_into_this_bsc' time='MASKED'/></span><br><span>   <testcase classname='BSC_Tests' name='TC_bssap_rlsd_does_not_cause_bssmap_reset' time='MASKED'/></span><br><span>   <testcase classname='BSC_Tests' name='TC_bssmap_clear_does_not_cause_bssmap_reset' time='MASKED'/></span><br><span>diff --git a/library/BSSMAP_Templates.ttcn b/library/BSSMAP_Templates.ttcn</span><br><span>index adfcc9e..118168e 100644</span><br><span>--- a/library/BSSMAP_Templates.ttcn</span><br><span>+++ b/library/BSSMAP_Templates.ttcn</span><br><span>@@ -699,6 +699,25 @@</span><br><span>     }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+template PDU_BSSAP tr_BSSMAP_HandoverFailure modifies tr_BSSAP_BSSMAP := {</span><br><span style="color: hsl(120, 100%, 40%);">+        pdu := {</span><br><span style="color: hsl(120, 100%, 40%);">+              bssmap := {</span><br><span style="color: hsl(120, 100%, 40%);">+                   handoverFailure := {</span><br><span style="color: hsl(120, 100%, 40%);">+                          messageType := '16'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                         cause := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                           rR_Cause := *,</span><br><span style="color: hsl(120, 100%, 40%);">+                                circuitPool := *,</span><br><span style="color: hsl(120, 100%, 40%);">+                             circuitPoolList := *,</span><br><span style="color: hsl(120, 100%, 40%);">+                         gERANClassmark := *,</span><br><span style="color: hsl(120, 100%, 40%);">+                          newBSSToOldBSSInfo := *,</span><br><span style="color: hsl(120, 100%, 40%);">+                              interSystemInformation := *,</span><br><span style="color: hsl(120, 100%, 40%);">+                          talkerPriority := *,</span><br><span style="color: hsl(120, 100%, 40%);">+                          codecList := *</span><br><span style="color: hsl(120, 100%, 40%);">+                        }</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> template PDU_BSSAP ts_BSSMAP_HandoverRequest(</span><br><span>              template BSSMAP_IE_CircuitIdentityCode cic := omit,</span><br><span>          template BSSMAP_IE_AoIP_TransportLayerAddress aoip_tla := omit,</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/11315">change 11315</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/11315"/><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-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: If772dbbc5f9790d3f911465e1303dd0a99811154 </div>
<div style="display:none"> Gerrit-Change-Number: 11315 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Neels Hofmeyr <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>