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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bsc: inter-BSC HO: add TC_ho_out_of_this_bsc, TC_ho_into_this_bsc<br><br>Add f_gen_handover_req() like f_gen_ass_req(), to match AoIP or SCCPlite<br>requirements.<br><br>For incoming HO, MSC_ConnHdlr needs to know the SCCP addresses to expect the<br>incoming SCCP Connection from MSC to BSC. Add 'handover' section to<br>TestHdlrParams, and pass in the addresses from test_CT via that.<br><br>In osmo-bsc.cfg, add a remote neighbor config, so that the VTY command<br>'handover any to arfcn 123 bsic any' can trigger an outgoing inter-BSC HO.<br><br>Add various BSSMAP handover templates to BSSMAP_Templates.ttcn.<br>Add RR Ho Command template to L3_Templates.ttcn.<br><br>Move ts_BSSAP_Conn_Req() from msc/BSC_ConnectionHandler.ttcn to<br>library/BSSMAP_Emulation.ttcn, so we can also model an SCCP Connection Request<br>in BSC_Tests.ttcn (this time from MSC to BSC).<br><br>Add the two new tests to bsc/expected-results.xml.<br><br>Related: OS#2283<br>Change-Id: Id22852d4be7f127d827e7a8beeec55db27c07f03<br>---<br>M bsc/BSC_Tests.ttcn<br>M bsc/MSC_ConnectionHandler.ttcn<br>M bsc/expected-results.xml<br>M bsc/osmo-bsc.cfg<br>M library/BSSMAP_Emulation.ttcn<br>M library/BSSMAP_Templates.ttcn<br>M library/L3_Templates.ttcn<br>M msc/BSC_ConnectionHandler.ttcn<br>8 files changed, 400 insertions(+), 9 deletions(-)<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 9a43ead..4a34310 100644</span><br><span>--- a/bsc/BSC_Tests.ttcn</span><br><span>+++ b/bsc/BSC_Tests.ttcn</span><br><span>@@ -33,6 +33,8 @@</span><br><span> import from RSL_Types all;</span><br><span> import from RSL_Emulation all;</span><br><span> import from MGCP_Emulation all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from MGCP_Templates all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from MGCP_Types all;</span><br><span> </span><br><span> import from Osmocom_CTRL_Functions all;</span><br><span> import from Osmocom_CTRL_Types all;</span><br><span>@@ -43,12 +45,15 @@</span><br><span> </span><br><span> import from MobileL3_CommonIE_Types all;</span><br><span> import from MobileL3_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+import from MobileL3_RRM_Types all;</span><br><span> import from L3_Templates all;</span><br><span> import from GSM_RR_Types all;</span><br><span> </span><br><span> import from SCCP_Templates all;</span><br><span> import from BSSMAP_Templates all;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+import from SCCPasp_Types all;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> const integer NUM_BTS := 3;</span><br><span> const float T3101_MAX := 12.0;</span><br><span> </span><br><span>@@ -572,6 +577,19 @@</span><br><span>   return ass_cmd;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+function f_gen_handover_req() return PDU_BSSAP {</span><br><span style="color: hsl(120, 100%, 40%);">+    var PDU_BSSAP ho_req;</span><br><span style="color: hsl(120, 100%, 40%);">+ if (mp_bssap_cfg.transport == BSSAP_TRANSPORT_AoIP) {</span><br><span style="color: hsl(120, 100%, 40%);">+         var BSSMAP_IE_AoIP_TransportLayerAddress tla :=</span><br><span style="color: hsl(120, 100%, 40%);">+                                               valueof(ts_BSSMAP_IE_AoIP_TLA4('01020304'O, 2342));</span><br><span style="color: hsl(120, 100%, 40%);">+           ho_req := valueof(ts_BSSMAP_HandoverRequest(omit, tla));</span><br><span style="color: hsl(120, 100%, 40%);">+      } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              var BSSMAP_IE_CircuitIdentityCode cic := valueof(ts_BSSMAP_IE_CIC(0,1));</span><br><span style="color: hsl(120, 100%, 40%);">+              ho_req := valueof(ts_BSSMAP_HandoverRequest(cic, omit));</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+     return ho_req;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* generate an assignment complete template for either AoIP or SCCPlite */</span><br><span> function f_gen_exp_compl() return template PDU_BSSAP {</span><br><span>  var template PDU_BSSAP exp_compl;</span><br><span>@@ -2083,6 +2101,10 @@</span><br><span>   vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/***********************************************************************</span><br><span style="color: hsl(120, 100%, 40%);">+ * Handover</span><br><span style="color: hsl(120, 100%, 40%);">+ ***********************************************************************/</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* execute a "bts <0-255> trx <0-255> timeslot <0-7> " command on given Dchan */</span><br><span> private function f_vty_ts_action(charstring suffix, integer bts_nr, integer trx_nr, integer ts_nr)</span><br><span> runs on test_CT {</span><br><span>@@ -2165,6 +2187,158 @@</span><br><span>      vc_conn.done;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+private function f_tc_ho_out_of_this_bsc(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%);">+   /* When the other BSS has reported a completed handover, this side is</span><br><span style="color: hsl(120, 100%, 40%);">+  * torn down. */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    var myBSSMAP_Cause cause_val := GSM0808_CAUSE_HANDOVER_SUCCESSFUL;</span><br><span style="color: hsl(120, 100%, 40%);">+    var BssmapCause cause := enum2int(cause_val);</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSAP.send(ts_BSSMAP_ClearCommand(cause));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Expecting MGCP to DLCX the endpoint's two connections: towards BTS and towards MSC */</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%);">+  [] BSSAP.receive(tr_BSSMAP_ClearComplete);</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%);">+     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_of_this_bsc() 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_of_this_bsc));</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%);">+private function f_tc_ho_into_this_bsc(charstring id) runs on MSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+      /* Hack: the proper way would be to wait for the BSSMAP Handover Request ACK and extract the</span><br><span style="color: hsl(120, 100%, 40%);">+   * actual assigned chan_nr from its L3 (RR Handover Command) message. But osmo-bsc starts acting</span><br><span style="color: hsl(120, 100%, 40%);">+       * on the lchan even before we get a chance to evaluate the BSSMAP Handover Request ACK. So we</span><br><span style="color: hsl(120, 100%, 40%);">+         * need to assume that osmo-bsc will activate TS 1 and already set up this lchan's RSL emulation</span><br><span style="color: hsl(120, 100%, 40%);">+   * before we get started. */</span><br><span style="color: hsl(120, 100%, 40%);">+  var RslChannelNr new_chan_nr := valueof(t_RslChanNr0(1, RSL_CHAN_NR_Bm_ACCH));</span><br><span style="color: hsl(120, 100%, 40%);">+        f_rslem_register(0, new_chan_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+     g_chan_nr := new_chan_nr;</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%);">+       f_create_mgcp_expect(ExpectCriteria:{omit,omit,omit});</span><br><span style="color: hsl(120, 100%, 40%);">+        f_MscConnHdlr_init(g_pars.media_nr, "127.0.0.2", "127.0.0.3", FR_AMR);</span><br><span style="color: hsl(120, 100%, 40%);">+    activate(as_Media());</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       BSSAP.send(ts_BSSAP_Conn_Req(g_pars.handover.sccp_addr_bsc, g_pars.handover.sccp_addr_msc,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 f_gen_handover_req()));</span><br><span style="color: hsl(120, 100%, 40%);">+  BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_CONF_IND);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      /* The RSL Emulation magically accepts the Chan Activ behind the scenes. */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ var PDU_BSSAP rx_bssap;</span><br><span style="color: hsl(120, 100%, 40%);">+       var octetstring ho_command_str;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     BSSAP.receive(tr_BSSMAP_HandoverRequestAcknowledge(?)) -> value rx_bssap;</span><br><span style="color: hsl(120, 100%, 40%);">+  </span><br><span style="color: hsl(120, 100%, 40%);">+      ho_command_str := rx_bssap.pdu.bssmap.handoverRequestAck.layer3Information.layer3info;</span><br><span style="color: hsl(120, 100%, 40%);">+        log("Received L3 Info in HO Request Ack: ", ho_command_str);</span><br><span style="color: hsl(120, 100%, 40%);">+        var PDU_ML3_NW_MS ho_command := dec_PDU_ML3_NW_MS(ho_command_str);</span><br><span style="color: hsl(120, 100%, 40%);">+    log("L3 Info in HO Request Ack is ", ho_command);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ var GsmArfcn arfcn;</span><br><span style="color: hsl(120, 100%, 40%);">+   var RslChannelNr actual_new_chan_nr;</span><br><span style="color: hsl(120, 100%, 40%);">+  f_ChDesc2RslChanNr(ho_command.msgs.rrm.handoverCommand.channelDescription2,</span><br><span style="color: hsl(120, 100%, 40%);">+                   actual_new_chan_nr, arfcn);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (actual_new_chan_nr != new_chan_nr) {</span><br><span style="color: hsl(120, 100%, 40%);">+              log("ERROR: osmo-bsc assigned a different lchan than we assumed above -- this test will fail now.",</span><br><span style="color: hsl(120, 100%, 40%);">+             " Assumed: ", new_chan_nr, " Assigned: ", actual_new_chan_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+                setverdict(fail);</span><br><span style="color: hsl(120, 100%, 40%);">+             return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     log("Handover Command chan_nr is", actual_new_chan_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Now the MSC forwards the RR Handover Command to the other BSC, which</span><br><span style="color: hsl(120, 100%, 40%);">+        * tells the MS to handover to the new lchan. Here comes the new MS on</span><br><span style="color: hsl(120, 100%, 40%);">+         * the new lchan with a Handover RACH: */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* send handover detect */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  RSL.send(ts_RSL_HANDO_DET(new_chan_nr));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    BSSAP.receive(tr_BSSMAP_HandoverDetect);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* send handover complete over the new channel */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   var PDU_ML3_MS_NW l3_tx := valueof(ts_RRM_HandoverComplete('00'O));</span><br><span style="color: hsl(120, 100%, 40%);">+   RSL.send(ts_RSL_EST_IND(new_chan_nr, valueof(ts_RslLinkID_DCCH(0)),</span><br><span style="color: hsl(120, 100%, 40%);">+                           enc_PDU_ML3_MS_NW(l3_tx)));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSAP.receive(tr_BSSMAP_HandoverComplete);</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%);">+testcase TC_ho_into_this_bsc() 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%);">+     var TestHdlrParams pars := valueof(t_def_TestHdlrPars);</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%);">+       pars.handover.sccp_addr_msc := g_bssap.sccp_addr_own;</span><br><span style="color: hsl(120, 100%, 40%);">+ pars.handover.sccp_addr_bsc := g_bssap.sccp_addr_peer;</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_into_this_bsc), pars);</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%);">+</span><br><span> /* OS#3041: Open and close N connections in a normal fashion, and expect no</span><br><span>  * BSSMAP Reset just because of that. */</span><br><span> testcase TC_bssap_rlsd_does_not_cause_bssmap_reset() runs on test_CT {</span><br><span>@@ -2648,7 +2822,10 @@</span><br><span>   execute( TC_unsol_ho_fail() );</span><br><span>       execute( TC_err_82_short_msg() );</span><br><span>    execute( TC_err_84_unknown_msg() );</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>        execute( TC_ho_int() );</span><br><span style="color: hsl(120, 100%, 40%);">+       execute( TC_ho_out_of_this_bsc() );</span><br><span style="color: hsl(120, 100%, 40%);">+   execute( TC_ho_into_this_bsc() );</span><br><span> </span><br><span>        execute( TC_bssap_rlsd_does_not_cause_bssmap_reset() );</span><br><span>      execute( TC_bssmap_clear_does_not_cause_bssmap_reset() );</span><br><span>diff --git a/bsc/MSC_ConnectionHandler.ttcn b/bsc/MSC_ConnectionHandler.ttcn</span><br><span>index 9f67f1b..0b11786 100644</span><br><span>--- a/bsc/MSC_ConnectionHandler.ttcn</span><br><span>+++ b/bsc/MSC_ConnectionHandler.ttcn</span><br><span>@@ -411,6 +411,11 @@</span><br><span>        BIT4 exp_sts optional</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+type record TestHdlrParamsHandover {</span><br><span style="color: hsl(120, 100%, 40%);">+  SCCP_PAR_Address sccp_addr_msc,</span><br><span style="color: hsl(120, 100%, 40%);">+       SCCP_PAR_Address sccp_addr_bsc</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> type record TestHdlrParams {</span><br><span>  OCT1            ra,</span><br><span>  GsmFrameNumber  fn,</span><br><span>@@ -420,7 +425,8 @@</span><br><span>    BSSMAP_IE_SpeechCodecList ass_codec_list optional,</span><br><span>   RSL_IE_Body     expect_mr_conf_ie optional, /* typically present for AMR codecs */</span><br><span>   TestHdlrEncrParams encr optional,</span><br><span style="color: hsl(0, 100%, 40%);">-       TestHdlrParamsLcls lcls</span><br><span style="color: hsl(120, 100%, 40%);">+       TestHdlrParamsLcls lcls,</span><br><span style="color: hsl(120, 100%, 40%);">+      TestHdlrParamsHandover handover optional</span><br><span> };</span><br><span> </span><br><span> template (value) TestHdlrParams t_def_TestHdlrPars := {</span><br><span>@@ -437,7 +443,8 @@</span><br><span>          cfg := omit,</span><br><span>                 csc := omit,</span><br><span>                 exp_sts := omit</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(120, 100%, 40%);">+     },</span><br><span style="color: hsl(120, 100%, 40%);">+    handover := omit</span><br><span> }</span><br><span> </span><br><span> function f_create_chan_and_exp() runs on MSC_ConnHdlr {</span><br><span>diff --git a/bsc/expected-results.xml b/bsc/expected-results.xml</span><br><span>index 33bc243..64d0444 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='89' failures='0' errors='0' skipped='0' inconc='0' time='MASKED'></span><br><span style="color: hsl(120, 100%, 40%);">+<testsuite name='BSC_Tests' tests='91' 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>@@ -69,6 +69,8 @@</span><br><span>   <testcase classname='BSC_Tests' name='TC_err_82_short_msg' time='MASKED'/></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 style="color: hsl(120, 100%, 40%);">+  <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_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>   <testcase classname='BSC_Tests' name='TC_ms_rel_ind_does_not_cause_bssmap_reset' time='MASKED'/></span><br><span>diff --git a/bsc/osmo-bsc.cfg b/bsc/osmo-bsc.cfg</span><br><span>index b85c690..724d567 100644</span><br><span>--- a/bsc/osmo-bsc.cfg</span><br><span>+++ b/bsc/osmo-bsc.cfg</span><br><span>@@ -88,6 +88,8 @@</span><br><span>   early-classmark-sending forbidden</span><br><span>   ip.access unit_id 1234 0</span><br><span>   oml ip.access stream_id 255 line 0</span><br><span style="color: hsl(120, 100%, 40%);">+  # remote-BSS neighbor:</span><br><span style="color: hsl(120, 100%, 40%);">+  neighbor add lac 99 arfcn 123 bsic any</span><br><span>   neighbor-list mode manual-si5</span><br><span>   neighbor-list add arfcn 100</span><br><span>   neighbor-list add arfcn 200</span><br><span>diff --git a/library/BSSMAP_Emulation.ttcn b/library/BSSMAP_Emulation.ttcn</span><br><span>index 921ac59..55ce2fb 100644</span><br><span>--- a/library/BSSMAP_Emulation.ttcn</span><br><span>+++ b/library/BSSMAP_Emulation.ttcn</span><br><span>@@ -102,6 +102,12 @@</span><br><span>   dtap := dtap</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+template BSSAP_Conn_Req ts_BSSAP_Conn_Req(SCCP_PAR_Address peer, SCCP_PAR_Address own, PDU_BSSAP bssap) := {</span><br><span style="color: hsl(120, 100%, 40%);">+   addr_peer := peer,</span><br><span style="color: hsl(120, 100%, 40%);">+    addr_own := own,</span><br><span style="color: hsl(120, 100%, 40%);">+      bssap := bssap</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> </span><br><span> /* port between individual per-connection components and this dispatcher */</span><br><span> type port BSSAP_Conn_PT message {</span><br><span>diff --git a/library/BSSMAP_Templates.ttcn b/library/BSSMAP_Templates.ttcn</span><br><span>index 70db2ec..adfcc9e 100644</span><br><span>--- a/library/BSSMAP_Templates.ttcn</span><br><span>+++ b/library/BSSMAP_Templates.ttcn</span><br><span>@@ -670,6 +670,139 @@</span><br><span>        }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+template PDU_BSSAP tr_BSSMAP_HandoverRequired 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%);">+                   handoverRequired := {</span><br><span style="color: hsl(120, 100%, 40%);">+                         messageType := '11'O</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 style="color: hsl(120, 100%, 40%);">+template (value) PDU_BSSAP ts_BSSMAP_HandoverCommand(octetstring layer3info)</span><br><span style="color: hsl(120, 100%, 40%);">+modifies ts_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%);">+                   handoverCommand := {</span><br><span style="color: hsl(120, 100%, 40%);">+                          messageType := '13'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                         layer3Information := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                        elementIdentifier := '17'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   lengthIndicator := 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 layer3info := layer3info</span><br><span style="color: hsl(120, 100%, 40%);">+                              },</span><br><span style="color: hsl(120, 100%, 40%);">+                            cellIdentifier := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                               newBSSToOldBSSInfo := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                           talkerPriority := omit</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 style="color: hsl(120, 100%, 40%);">+template PDU_BSSAP ts_BSSMAP_HandoverRequest(</span><br><span style="color: hsl(120, 100%, 40%);">+         template BSSMAP_IE_CircuitIdentityCode cic := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+           template BSSMAP_IE_AoIP_TransportLayerAddress aoip_tla := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+               template BSSMAP_IE_CellIdentifier cell_id_target := ts_CellID_LAC_CI(1, 0),</span><br><span style="color: hsl(120, 100%, 40%);">+           template BSSMAP_IE_CellIdentifier cell_id_source := ts_CellID_LAC_CI(1, 1)</span><br><span style="color: hsl(120, 100%, 40%);">+            )</span><br><span style="color: hsl(120, 100%, 40%);">+modifies ts_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%);">+                   handoverRequest := {</span><br><span style="color: hsl(120, 100%, 40%);">+                          messageType := '10'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                         channelType := ts_BSSMAP_IE_ChannelType,</span><br><span style="color: hsl(120, 100%, 40%);">+                              encryptionInformation :=</span><br><span style="color: hsl(120, 100%, 40%);">+                                      ts_BSSMAP_IE_EncrInfo('0000000000000000'O,'01'O),</span><br><span style="color: hsl(120, 100%, 40%);">+                             classmarkInformationType := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                 classmarkInformationType1 := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                                elementIdentifier := '1D'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                                           rf_PowerCapability := '000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                         a5_1 := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                         esind := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                                revisionLevel := '10'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                               spare1_1 := '0'B</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%);">+                            cellIdentifierSource := cell_id_source,</span><br><span style="color: hsl(120, 100%, 40%);">+                               priority := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                             circuitIdentityCode := cic,</span><br><span style="color: hsl(120, 100%, 40%);">+                           downLinkDTX_Flag := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                             cellIdentifierTarget := cell_id_target,</span><br><span style="color: hsl(120, 100%, 40%);">+                               interferenceBandToBeUsed := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                             cause := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                                classmarkInformationType3 := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                            currentChannelType1 := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                          speechVersion := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                                groupCallReference := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                           talkerFlag := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                           configurationEvolutionIndication := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                             chosenEncryptionAlgorithm := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                            oldToNewBSSInfo := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                              lSAInformation := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                               lSAAccessControlSuppression := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                          serviceHandover := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                              iMSI_bssmap := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                          sourceToTargetRNCTransparentInfo := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                             sourceToTargetRNCTransparentInfoCDMA := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                         sNAAccessInformation := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                         talkerPriority := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                               aoIPTransportLayer := aoip_tla,</span><br><span style="color: hsl(120, 100%, 40%);">+                               codecList := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                            callIdentifier := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                               kC128 := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                                globalCallReference := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                          lCLS_Configuration := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                           connectionStatusControl := omit</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 style="color: hsl(120, 100%, 40%);">+template PDU_BSSAP tr_BSSMAP_HandoverRequestAcknowledge(template octetstring layer3info)</span><br><span style="color: hsl(120, 100%, 40%);">+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%);">+                   handoverRequestAck := {</span><br><span style="color: hsl(120, 100%, 40%);">+                               messageType := '12'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                         layer3Information := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                        elementIdentifier := '17'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   lengthIndicator := ?,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 layer3info := layer3info</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 style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+template PDU_BSSAP tr_BSSMAP_HandoverDetect</span><br><span style="color: hsl(120, 100%, 40%);">+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%);">+                   handoverDetect := {</span><br><span style="color: hsl(120, 100%, 40%);">+                           messageType := '1B'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                         talkerPriority := *</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 style="color: hsl(120, 100%, 40%);">+template PDU_BSSAP tr_BSSMAP_HandoverComplete</span><br><span style="color: hsl(120, 100%, 40%);">+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%);">+                   handoverComplete := {</span><br><span style="color: hsl(120, 100%, 40%);">+                         messageType := '14'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                         rR_Cause := *,</span><br><span style="color: hsl(120, 100%, 40%);">+                                talkerPriority := *,</span><br><span style="color: hsl(120, 100%, 40%);">+                          speechCodec := *,</span><br><span style="color: hsl(120, 100%, 40%);">+                             codecList := *,</span><br><span style="color: hsl(120, 100%, 40%);">+                               chosenEncryptionAlgorithm := *,</span><br><span style="color: hsl(120, 100%, 40%);">+                               chosenChannel := *,</span><br><span style="color: hsl(120, 100%, 40%);">+                           lCLS_BSS_Status := *</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> </span><br><span> template BSSMAP_IE_IMSI ts_BSSMAP_Imsi(hexstring imsi_digits) := {</span><br><span>       elementIdentifier := '08'O,</span><br><span>diff --git a/library/L3_Templates.ttcn b/library/L3_Templates.ttcn</span><br><span>index 1ce84cf..a05aba2 100644</span><br><span>--- a/library/L3_Templates.ttcn</span><br><span>+++ b/library/L3_Templates.ttcn</span><br><span>@@ -496,6 +496,76 @@</span><br><span>  }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+template (value) PDU_ML3_NW_MS ts_RR_HandoverCommand := {</span><br><span style="color: hsl(120, 100%, 40%);">+ discriminator := '0110'B,</span><br><span style="color: hsl(120, 100%, 40%);">+     tiOrSkip := {</span><br><span style="color: hsl(120, 100%, 40%);">+         skipIndicator := '0000'B</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+    msgs := {</span><br><span style="color: hsl(120, 100%, 40%);">+             rrm := {</span><br><span style="color: hsl(120, 100%, 40%);">+                      handoverCommand := {</span><br><span style="color: hsl(120, 100%, 40%);">+                          messageType := '00101011'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                           cellDescription := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                  bcc := '001'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                        ncc := '010'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                        BCCHArfcn_HighPart := '11'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                  BCCHArfcn_LowPart := '04'O</span><br><span style="color: hsl(120, 100%, 40%);">+                            },</span><br><span style="color: hsl(120, 100%, 40%);">+                            channelDescription2 := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                      timeslotNumber := '110'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                     channelTypeandTDMAOffset := '00001'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 octet3 := '00'O,</span><br><span style="color: hsl(120, 100%, 40%);">+                                      octet4 := '09'O</span><br><span style="color: hsl(120, 100%, 40%);">+                               },</span><br><span style="color: hsl(120, 100%, 40%);">+                            handoverReference := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                        handoverReferenceValue := '00'O</span><br><span style="color: hsl(120, 100%, 40%);">+                               },</span><br><span style="color: hsl(120, 100%, 40%);">+                            powerCommandAndAccesstype := {</span><br><span style="color: hsl(120, 100%, 40%);">+                                        powerlevel := '00000'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                       fPC_EP := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                       ePC_Mode := '0'B,</span><br><span style="color: hsl(120, 100%, 40%);">+                                     aTC := '0'B</span><br><span style="color: hsl(120, 100%, 40%);">+                           },</span><br><span style="color: hsl(120, 100%, 40%);">+                            synchronizationIndication := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                            frequencyShortListAfterTime := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                          frequencyListAfterTime := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                               cellChannelDescription := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                               multislotAllocation := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                          modeOfChannelSet1 := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                            modeOfChannelSet2 := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                            modeOfChannelSet3 := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                            modeOfChannelSet4 := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                            modeOfChannelSet5 := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                            modeOfChannelSet6 := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                            modeOfChannelSet7 := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                            modeOfChannelSet8 := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                            descrOf2ndCh_at := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                              modeOf2ndChannel := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                             frequencyChannelSequence_at := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                          mobileAllocation_at := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                          startingTime := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                         timeDifference := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                               timingAdvance := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                                frequencyShortListBeforeTime := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                         frequencyListBeforeTime := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                              descrOf1stCh_bt := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                              descrOf2ndCh_bt := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                              frequencyChannelSequence_bt := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                          mobileAllocation_bt := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                          cipherModeSetting := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                            vGCS_TargetModeIndication := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                            multiRateConfiguration := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                               dynamicARFCN_Mapping := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                         vGCS_Ciphering_Parameters := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                            dedicatedServiceInformation := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                          pLMNIndex := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                            extendedTSCSet_afterTime := omit,</span><br><span style="color: hsl(120, 100%, 40%);">+                             extendedTSCSet_beforeTime := omit</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> function ts_CM3_TLV(template (omit) OCTN cm3) return template MobileStationClassmark3_TLV {</span><br><span>        if (not isvalue(cm3)) {</span><br><span>              return omit;</span><br><span>diff --git a/msc/BSC_ConnectionHandler.ttcn b/msc/BSC_ConnectionHandler.ttcn</span><br><span>index 4e02d6c..bf7a6d2 100644</span><br><span>--- a/msc/BSC_ConnectionHandler.ttcn</span><br><span>+++ b/msc/BSC_ConnectionHandler.ttcn</span><br><span>@@ -166,12 +166,6 @@</span><br><span> </span><br><span> </span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-template BSSAP_Conn_Req ts_BSSAP_Conn_Req(SCCP_PAR_Address peer, SCCP_PAR_Address own, PDU_BSSAP bssap) := {</span><br><span style="color: hsl(0, 100%, 40%);">-        addr_peer := peer,</span><br><span style="color: hsl(0, 100%, 40%);">-      addr_own := own,</span><br><span style="color: hsl(0, 100%, 40%);">-        bssap := bssap</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /* Encode 'l3' and ask BSSMAP_Emulation to create new connection with COMPL L3 INFO */</span><br><span> function f_bssap_compl_l3(PDU_ML3_MS_NW l3)</span><br><span> runs on BSC_ConnHdlr {</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/9674">change 9674</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/9674"/><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: Id22852d4be7f127d827e7a8beeec55db27c07f03 </div>
<div style="display:none"> Gerrit-Change-Number: 9674 </div>
<div style="display:none"> Gerrit-PatchSet: 8 </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>
<div style="display:none"> Gerrit-Reviewer: Neels Hofmeyr <nhofmeyr@sysmocom.de> </div>