<p>Neels Hofmeyr has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/9674">View Change</a></p><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>Change-Id: Id22852d4be7f127d827e7a8beeec55db27c07f03<br>---<br>M bsc/BSC_Tests.ttcn<br>M bsc/osmo-bsc.cfg<br>2 files changed, 330 insertions(+), 36 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/74/9674/1</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 0107091..ca7b275 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,6 +45,7 @@</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>@@ -2067,41 +2070,6 @@</span><br><span>   f_vty_ss_action("handover " & int2str(new_bts_nr), bts_nr, trx_nr, chan_nr);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/* intra-BSC hand-over between BTS0 and BTS1 */</span><br><span style="color: hsl(0, 100%, 40%);">-private function f_tc_ho_int(charstring id) runs on MSC_ConnHdlr {</span><br><span style="color: hsl(0, 100%, 40%);">-    g_pars := valueof(t_def_TestHdlrPars);</span><br><span style="color: hsl(0, 100%, 40%);">-  var template PDU_BSSAP exp_compl := f_gen_exp_compl();</span><br><span style="color: hsl(0, 100%, 40%);">-  var PDU_BSSAP ass_cmd := f_gen_ass_req();</span><br><span style="color: hsl(0, 100%, 40%);">-       const OCT8 kc := '0001020304050607'O;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);</span><br><span style="color: hsl(0, 100%, 40%);">-  ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        f_establish_fully(ass_cmd, exp_compl);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  var HandoverState hs := {</span><br><span style="color: hsl(0, 100%, 40%);">-               rr_ho_cmpl_seen := false,</span><br><span style="color: hsl(0, 100%, 40%);">-               handover_done := false,</span><br><span style="color: hsl(0, 100%, 40%);">-         old_chan_nr := -</span><br><span style="color: hsl(0, 100%, 40%);">-        };</span><br><span style="color: hsl(0, 100%, 40%);">-      /* issue hand-over command on VTY */</span><br><span style="color: hsl(0, 100%, 40%);">-    f_vty_handover(0, 0, g_chan_nr, 1);</span><br><span style="color: hsl(0, 100%, 40%);">-     /* temporarily suspend DChan processing on BTS1 to avoid race with RSLEM_register */</span><br><span style="color: hsl(0, 100%, 40%);">-    f_rslem_suspend(RSL1_PROC);</span><br><span style="color: hsl(0, 100%, 40%);">-     alt {</span><br><span style="color: hsl(0, 100%, 40%);">-   [] as_handover(hs);</span><br><span style="color: hsl(0, 100%, 40%);">-     /* FIXME: somehow determine that the hand-over has completed, by MGCP MDCX? */</span><br><span style="color: hsl(0, 100%, 40%);">-  }</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-testcase TC_ho_int() runs on test_CT {</span><br><span style="color: hsl(0, 100%, 40%);">-        var MSC_ConnHdlr vc_conn;</span><br><span style="color: hsl(0, 100%, 40%);">-       f_init(2, true);</span><br><span style="color: hsl(0, 100%, 40%);">-        f_sleep(1.0);</span><br><span style="color: hsl(0, 100%, 40%);">-   vc_conn := f_start_handler(refers(f_tc_ho_int));</span><br><span style="color: hsl(0, 100%, 40%);">-        vc_conn.done;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 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>@@ -2481,6 +2449,327 @@</span><br><span>    * is the info correct on delayed PCU (re)connect?</span><br><span>  */</span><br><span> </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%);">+ * Handover</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%);">+/* intra-BSC hand-over between BTS0 and BTS1 */</span><br><span style="color: hsl(120, 100%, 40%);">+private function f_tc_ho_int(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%);">+        var template PDU_BSSAP exp_compl := f_gen_exp_compl();</span><br><span style="color: hsl(120, 100%, 40%);">+        var PDU_BSSAP ass_cmd := f_gen_ass_req();</span><br><span style="color: hsl(120, 100%, 40%);">+     const OCT8 kc := '0001020304050607'O;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);</span><br><span style="color: hsl(120, 100%, 40%);">+        ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    f_establish_fully(ass_cmd, exp_compl);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      var HandoverState hs := {</span><br><span style="color: hsl(120, 100%, 40%);">+             rr_ho_cmpl_seen := false,</span><br><span style="color: hsl(120, 100%, 40%);">+             handover_done := false,</span><br><span style="color: hsl(120, 100%, 40%);">+               old_chan_nr := -</span><br><span style="color: hsl(120, 100%, 40%);">+      };</span><br><span style="color: hsl(120, 100%, 40%);">+    /* issue hand-over command on VTY */</span><br><span style="color: hsl(120, 100%, 40%);">+  f_vty_handover(0, 0, g_chan_nr, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+   /* temporarily suspend DChan processing on BTS1 to avoid race with RSLEM_register */</span><br><span style="color: hsl(120, 100%, 40%);">+  f_rslem_suspend(RSL1_PROC);</span><br><span style="color: hsl(120, 100%, 40%);">+   alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] as_handover(hs);</span><br><span style="color: hsl(120, 100%, 40%);">+   /* FIXME: somehow determine that the hand-over has completed, by MGCP MDCX? */</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%);">+testcase TC_ho_int() 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%);">+     f_init(2, true);</span><br><span style="color: hsl(120, 100%, 40%);">+      f_sleep(1.0);</span><br><span style="color: hsl(120, 100%, 40%);">+ vc_conn := f_start_handler(refers(f_tc_ho_int));</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%);">+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 PDU_BSSAP ts_BSSMAP_HandoverCommand(octetstring layer3info) 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_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 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%);">+        var template PDU_BSSAP exp_compl := tr_BSSMAP_AssignmentComplete(omit, ?);</span><br><span style="color: hsl(120, 100%, 40%);">+    var BSSMAP_IE_AoIP_TransportLayerAddress tla := valueof(ts_BSSMAP_IE_AoIP_TLA4('01020304'O, 2342));</span><br><span style="color: hsl(120, 100%, 40%);">+   var PDU_BSSAP ass_cmd := valueof(ts_BSSMAP_AssignmentReq(omit, tla));</span><br><span style="color: hsl(120, 100%, 40%);">+ var PDU_ML3_NW_MS rr_ho_cmd;</span><br><span style="color: hsl(120, 100%, 40%);">+  var octetstring rr_ho_cmd_enc;</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%);">+ var RSL_Message 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%);">+        var MgcpCommand mgcp;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);</span><br><span style="color: hsl(120, 100%, 40%);">+        ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    f_establish_fully(ass_cmd, 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%);">+       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%);">+        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%);">+     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%);">+    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%);">+    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%);">+  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%);">+template PDU_BSSAP ts_BSSMAP_HandoverRequest(</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%);">+           template BSSMAP_IE_AoIP_TransportLayerAddress aoip_tla := ts_BSSMAP_IE_AoIP_TLA4('01020304'O, 2342)</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 := valueof(ts_BSSMAP_IE_ChannelType),</span><br><span style="color: hsl(120, 100%, 40%);">+                             encryptionInformation :=</span><br><span style="color: hsl(120, 100%, 40%);">+                                      valueof(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 := omit,</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(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 := 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%);">+                     }</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%);">+private function f_tc_ho_into_this_bsc(charstring id) runs on MSC_ConnHdlr {</span><br><span style="color: hsl(120, 100%, 40%);">+  var BSSAP_N_DATA_ind rx_di;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ BSSAP.send(ts_BSSAP_CONNECT_req(g_bssap.sccp_addr_peer, g_bssap.sccp_addr_own, 2342,</span><br><span style="color: hsl(120, 100%, 40%);">+                  ts_BSSMAP_HandoverRequest()));</span><br><span style="color: hsl(120, 100%, 40%);">+        BSSAP.receive(tr_BSSAP_CONNECT_cfm(2342, omit));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    BSSAP.receive(tr_BSSAP_DATA_ind(2342, tr_BSSMAP_HandoverRequestAcknowledge('1234'O)));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      alt {</span><br><span style="color: hsl(120, 100%, 40%);">+ [] BSSAP.receive(tr_BSSAP_DATA_ind(2342, tr_BSSMAP_ClearRequest)) -> value rx_di {</span><br><span style="color: hsl(120, 100%, 40%);">+                 var BssmapCause cause := bit2int(rx_di.userData.pdu.bssmap.clearRequest.cause.causeValue);</span><br><span style="color: hsl(120, 100%, 40%);">+                    BSSAP.send(ts_BSSAP_DATA_req(2342, ts_BSSMAP_ClearCommand(cause)));</span><br><span style="color: hsl(120, 100%, 40%);">+                   repeat;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     [] BSSAP.receive(tr_BSSAP_DATA_ind(2342, tr_BSSMAP_ClearComplete));</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%);">+}</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%);">+</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_into_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> control {</span><br><span>      /* CTRL interface testing */</span><br><span>         execute( TC_ctrl_msc_connection_status() );</span><br><span>@@ -2566,7 +2855,6 @@</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(0, 100%, 40%);">-     execute( TC_ho_int() );</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>@@ -2577,6 +2865,10 @@</span><br><span>   execute( TC_dyn_pdch_osmo_act_deact() );</span><br><span>     execute( TC_dyn_pdch_osmo_act_nack() );</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+   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 style="color: hsl(120, 100%, 40%);">+</span><br><span>  /* at bottom as they might crash OsmoBSC before OS#3182 is fixed */</span><br><span>  execute( TC_early_conn_fail() );</span><br><span>     execute( TC_late_conn_fail() );</span><br><span>diff --git a/bsc/osmo-bsc.cfg b/bsc/osmo-bsc.cfg</span><br><span>index 1ccef09..b2409a5 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></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: newchange </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: 1 </div>
<div style="display:none"> Gerrit-Owner: Neels Hofmeyr <nhofmeyr@sysmocom.de> </div>