Change in ...osmo-ttcn3-hacks[master]: bsc: add TC_ho_neighbor_config_1 thru _7

neels gerrit-no-reply at lists.osmocom.org
Sat Jul 13 03:49:18 UTC 2019


neels has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/14765


Change subject: bsc: add TC_ho_neighbor_config_1 thru _7
......................................................................

bsc: add TC_ho_neighbor_config_1 thru _7

Add tests to play through various neighbor configurations.
Tests will pass as soon as osmo-bsc I29bca59ab232eddc74e0d4698efb9c9992443983
is merged.

Add RSL2 to allow triggering handover to BTS 2.

Adjust osmo-bsc.cfg to match the new tests. Also applied in docker-playground
I1c57a04747f5ec004ccf4657954dcb0b003c24fc.
    - Actually enable handover.
    - Add bts 3

Depends: osmo-bsc I8623ab581639e9f8af6a9ff1eca990518d1b1211 ('no neighbors')
Related: OS#4056
Change-Id: Ia4ba0e75abd3d45a3422b2525e5f938cdc5a04cc
---
M bsc/BSC_Tests.ttcn
M bsc/BSC_Tests_LCLS.ttcn
M bsc/osmo-bsc.cfg
M library/RSL_Emulation.ttcn
4 files changed, 395 insertions(+), 171 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/65/14765/1

diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 44a9172..adffdf9 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -1719,6 +1719,10 @@
 		connect(vc_conn:RSL1, bts[1].rsl.vc_RSL:CLIENT_PT);
 		connect(vc_conn:RSL1_PROC, bts[1].rsl.vc_RSL:RSL_PROC);
 	}
+	if (isvalue(bts[2])) {
+		connect(vc_conn:RSL2, bts[2].rsl.vc_RSL:CLIENT_PT);
+		connect(vc_conn:RSL2_PROC, bts[2].rsl.vc_RSL:RSL_PROC);
+	}
 	connect(vc_conn:BSSAP, g_bssap.vc_RAN:CLIENT);
 	connect(vc_conn:MGCP, vc_MGCP:MGCP_CLIENT);
 	connect(vc_conn:MGCP_MULTI, vc_MGCP:MGCP_CLIENT_MULTI);
@@ -2837,6 +2841,11 @@
 	f_vty_transceive(BSCVTY, cmd & suffix);
 }
 
+/* Even though the VTY command to trigger handover takes a new BTS number as argument, behind the scenes osmo-bsc always
+ * translates that to a target ARFCN+BSIC first. See bsc_vty.c trigger_ho_or_as(), which puts the selected BTS' neighbor
+ * ident key (ARFCN + BSIC) in the struct passed on to handover_request(). handover_start() then resolves that to a
+ * viable actual neighbor cell. So from the internal osmo-bsc perspective, we always request handover to an ARFCN + BSIC
+ * pair, not really to a specific BTS number. */
 private function f_vty_handover(integer bts_nr, integer trx_nr, RslChannelNr chan_nr,
 				integer new_bts_nr)
 runs on MSC_ConnHdlr {
@@ -3587,6 +3596,353 @@
 	vc_conn.done;
 }
 
+type record of charstring Commands;
+
+private function f_bts_0_cfg(Commands cmds := {}) runs on MSC_ConnHdlr
+{
+	f_vty_enter_cfg_bts(BSCVTY, 0);
+	for (var integer i := 0; i < sizeof(cmds); i := i+1) {
+		f_vty_transceive(BSCVTY, cmds[i]);
+	}
+	f_vty_transceive(BSCVTY, "end");
+}
+
+private function f_probe_for_handover(charstring log_label,
+				      charstring log_descr,
+				      charstring handover_vty_cmd,
+				      boolean expect_handover,
+				      boolean is_inter_bsc_handover := false)
+runs on MSC_ConnHdlr
+{
+	var RSL_Message rsl;
+
+	var charstring log_msg := " (expecting handover)"
+	if (not expect_handover) {
+		log_msg := " (expecting NO handover)";
+	}
+	log("f_probe_for_handover starting: " & log_label & ": " & log_descr & log_msg);
+	f_vty_transceive(BSCVTY, handover_vty_cmd);
+
+	/* We're going to thwart any and all handover attempts, just be ready to handle (and ignore) handover target
+	 * lchans to be established on bts 1 or bts 2. */
+	f_rslem_suspend(RSL1_PROC);
+	f_rslem_suspend(RSL2_PROC);
+
+	timer T := 2.0;
+	T.start;
+
+	alt {
+	[] RSL.receive(tr_RSL_DATA_REQ(g_chan_nr)) -> value rsl {
+		var PDU_ML3_NW_MS l3 := dec_PDU_ML3_NW_MS(rsl.ies[2].body.l3_info.payload);
+		log("Rx L3 from net: ", l3);
+		if (ischosen(l3.msgs.rrm.handoverCommand)) {
+			var RslChannelNr new_chan_nr;
+			var GsmArfcn arfcn;
+			f_ChDesc2RslChanNr(l3.msgs.rrm.handoverCommand.channelDescription2,
+					   new_chan_nr, arfcn);
+			log("Handover to new chan ", new_chan_nr, " on ARFCN ", arfcn);
+			log(l3.msgs.rrm.handoverCommand);
+
+			/* Need to register for new lchan on new BTS -- it's either bts 1 or bts 2.  It doesn't really
+			 * matter on which BTS it really is, we're not going to follow through an entire handover
+			 * anyway. */
+			f_rslem_register(0, new_chan_nr, RSL1_PROC);
+			f_rslem_resume(RSL1_PROC);
+			f_rslem_register(0, new_chan_nr, RSL2_PROC);
+			f_rslem_resume(RSL2_PROC);
+
+			if (expect_handover and not is_inter_bsc_handover) {
+				setverdict(pass);
+				log("f_probe_for_handover(" & log_label & "): Got RSL Handover Command as expected.");
+			} else {
+				setverdict(fail, "f_probe_for_handover(" & log_label & "): Expected none, but got RSL Handover Command. "
+						 & log_label & ": " & log_descr);
+			}
+
+			log("f_probe_for_handover(" & log_label & "): Ending the test: Handover Failure stops the procedure.");
+			/* osmo-bsc has triggered Handover. That's all we need to know for this test, reply with
+			 * Handover Failure. */
+			f_rsl_send_l3(ts_RRM_HandoverFailure('00'O));
+
+			/* target BTS is told to release lchan again; don't care which BTS nor what messages. */
+			f_sleep(0.5);
+			RSL1.clear;
+			RSL2.clear;
+			log("f_probe_for_handover(" & log_label & "): done (got RSL Handover Command)");
+			break;
+		} else {
+			repeat;
+		}
+		}
+	[] BSSAP.receive(tr_BSSMAP_HandoverRequired) {
+			if (expect_handover and is_inter_bsc_handover) {
+				setverdict(pass);
+				log("f_probe_for_handover(" & log_label & "): Got BSSMAP Handover Required as expected.");
+			} else {
+				setverdict(fail, "f_probe_for_handover(" & log_label & "): Expected none, but got BSSMAP Handover Required. "
+						 & log_label & ": " & log_descr);
+			}
+
+			log("f_probe_for_handover(" & log_label & "): done (got BSSMAP Handover Required)");
+
+			/* Note: f_tc_ho_neighbor_config_start() sets T7, the timeout for BSSMAP Handover Required, to
+			 * 1 second. There is no legal way to quickly abort a handover after a BSSMAP Handover Required,
+			 * setting a short timeout and waiting is the only way. */
+			log("f_probe_for_handover(" & log_label & "): waiting for inter-BSC HO to time out...");
+			f_sleep(1.5);
+			log("f_probe_for_handover(" & log_label & "): ...done");
+
+			break;
+		}
+	[] T.timeout {
+		if (expect_handover) {
+			setverdict(fail, "f_probe_for_handover(" & log_label & "): Expected Handover, but got none. "
+					 & log_label & ": " & log_descr);
+		} else {
+			setverdict(pass);
+			log("f_probe_for_handover(" & log_label & "): Got no Handover, as expected.");
+		}
+		log("f_probe_for_handover(" & log_label & "): done (got no Handover)");
+		break;
+		}
+	}
+
+	f_rslem_resume(RSL1_PROC);
+	f_rslem_resume(RSL2_PROC);
+	f_sleep(3.0);
+	RSL.clear;
+
+	log("f_probe_for_handover(" & log_label & "): done clearing");
+}
+
+/* Test the effect of various neighbor configuration scenarios:
+ *
+ * To avoid complexity, block off any actual handover operation, and always remain on the lchan at bts 0.
+ * Reconfigure the neighbors for bts 0, trigger a Handover, and probe whether osmo-bsc does or doesn't start HO.
+ */
+private function f_tc_ho_neighbor_config_start() runs on MSC_ConnHdlr {
+	g_pars := f_gen_test_hdlr_pars();
+	var template PDU_BSSAP exp_compl := f_gen_exp_compl();
+	var PDU_BSSAP ass_cmd := f_gen_ass_req();
+	const OCT8 kc := '0001020304050607'O;
+
+	ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);
+	ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));
+
+	/* Establish lchan at bts 0 */
+	f_establish_fully(ass_cmd, exp_compl);
+
+	/* Shorten the inter-BSC Handover timeout, to not wait so long for inter-BSC Handovers */
+	f_vty_enter_cfg_network(BSCVTY);
+	f_vty_transceive(BSCVTY, "timer T7 1");
+	f_vty_transceive(BSCVTY, "end");
+}
+
+private function f_tc_ho_neighbor_config_1(charstring id) runs on MSC_ConnHdlr {
+	f_tc_ho_neighbor_config_start();
+
+	/*
+	 * bts 0 ARFCN 871 BSIC 10
+	 * bts 1 ARFCN 871 BSIC 11
+	 * bts 2 ARFCN 871 BSIC 12
+	 * bts 3 ARFCN 871 BSIC 12  serves as ambiguity for bts 2, re-using the ARFCN+BSIC
+	 */
+
+	log("f_tc_ho_neighbor_config: 1. No 'neighbor' config");
+	f_bts_0_cfg({"no neighbors"});
+	f_probe_for_handover("1.a", "HO to bts 1 works, implicitly listed as neighbor (legacy behavior when none are configured)",
+			"handover any to arfcn 871 bsic 11",
+			true);
+
+	f_probe_for_handover("1.b", "HO to unknown cell does not start",
+			"handover any to arfcn 13 bsic 39",
+			false);
+
+	f_probe_for_handover("1.c", "HO to 871-12 is ambiguous = error",
+			"handover any to arfcn 871 bsic 12",
+			false);
+
+	f_probe_for_handover("1.d", "HO to 871-11 still works (verify that this test properly cleans up)",
+			"handover any to arfcn 871 bsic 11",
+			true);
+}
+private function f_tc_ho_neighbor_config_2(charstring id) runs on MSC_ConnHdlr {
+	f_tc_ho_neighbor_config_start();
+
+	/*
+	 * bts 0 ARFCN 871 BSIC 10
+	 * bts 1 ARFCN 871 BSIC 11
+	 * bts 2 ARFCN 871 BSIC 12
+	 * bts 3 ARFCN 871 BSIC 12  serves as ambiguity for bts 2, re-using the ARFCN+BSIC
+	 */
+
+	log("f_tc_ho_neighbor_config: 2. explicit local neighbor: 'neighbor bts 1'");
+	f_bts_0_cfg({"neighbor bts 1"});
+	f_sleep(0.5);
+
+	f_probe_for_handover("2.a", "HO to bts 1 works, explicitly listed as neighbor",
+			"handover any to arfcn 871 bsic 11",
+			true);
+
+	f_probe_for_handover("2.b", "HO to bts 2 doesn't work, not listed as neighbor",
+			"handover any to arfcn 871 bsic 12",
+			false);
+}
+private function f_tc_ho_neighbor_config_3(charstring id) runs on MSC_ConnHdlr {
+	f_tc_ho_neighbor_config_start();
+
+	/*
+	 * bts 0 ARFCN 871 BSIC 10
+	 * bts 1 ARFCN 871 BSIC 11
+	 * bts 2 ARFCN 871 BSIC 12
+	 * bts 3 ARFCN 871 BSIC 12  serves as ambiguity for bts 2, re-using the ARFCN+BSIC
+	 */
+
+	log("f_tc_ho_neighbor_config: 3. explicit local neighbor: 'neighbor bts 2'");
+	f_bts_0_cfg({"no neighbors", "neighbor bts 2"});
+	f_sleep(0.5);
+
+	f_probe_for_handover("3.a", "HO to bts 1 doesn't work, not listed as neighbor",
+			"handover any to arfcn 871 bsic 11",
+			false);
+	f_probe_for_handover("3.b", "HO to bts 2 works, explicitly listed as neighbor; no ambiguity because bts 3 is not listed as neighbor",
+			"handover any to arfcn 871 bsic 12",
+			true);
+}
+private function f_tc_ho_neighbor_config_4(charstring id) runs on MSC_ConnHdlr {
+	f_tc_ho_neighbor_config_start();
+
+	/*
+	 * bts 0 ARFCN 871 BSIC 10
+	 * bts 1 ARFCN 871 BSIC 11
+	 * bts 2 ARFCN 871 BSIC 12
+	 * bts 3 ARFCN 871 BSIC 12  serves as ambiguity for bts 2, re-using the ARFCN+BSIC
+	 */
+
+	log("f_tc_ho_neighbor_config: 4. explicit remote neighbor: 'neighbor lac 99 arfcn 123 bsic 45'");
+	f_bts_0_cfg({"no neighbors", "neighbor lac 99 arfcn 123 bsic 45"});
+	f_sleep(0.5);
+
+	f_probe_for_handover("4.a", "HO to bts 1 doesn't work, not listed as neighbor",
+			"handover any to arfcn 871 bsic 11",
+			false);
+	f_probe_for_handover("4.b", "HO to bts 2 doesn't work, not listed as neighbor",
+			"handover any to arfcn 871 bsic 12",
+			false);
+	f_probe_for_handover("4.c", "HO to 123-45 triggers inter-BSC HO",
+			"handover any to arfcn 123 bsic 45",
+			true, true);
+}
+private function f_tc_ho_neighbor_config_5(charstring id) runs on MSC_ConnHdlr {
+	f_tc_ho_neighbor_config_start();
+
+	/*
+	 * bts 0 ARFCN 871 BSIC 10
+	 * bts 1 ARFCN 871 BSIC 11
+	 * bts 2 ARFCN 871 BSIC 12
+	 * bts 3 ARFCN 871 BSIC 12  serves as ambiguity for bts 2, re-using the ARFCN+BSIC
+	 */
+
+	log("f_tc_ho_neighbor_config: 5. explicit remote neighbor re-using ARFCN+BSIC: 'neighbor lac 99 arfcn 871 bsic 12'");
+	f_bts_0_cfg({"no neighbors", "neighbor lac 99 arfcn 871 bsic 12"});
+	f_sleep(0.5);
+
+	f_probe_for_handover("5.a", "HO to 871-12 triggers inter-BSC HO (ignoring local cells with same ARFCN+BSIC)",
+			"handover any to arfcn 871 bsic 12",
+			true, true);
+}
+private function f_tc_ho_neighbor_config_6(charstring id) runs on MSC_ConnHdlr {
+	f_tc_ho_neighbor_config_start();
+
+	/*
+	 * bts 0 ARFCN 871 BSIC 10
+	 * bts 1 ARFCN 871 BSIC 11
+	 * bts 2 ARFCN 871 BSIC 12
+	 * bts 3 ARFCN 871 BSIC 12  serves as ambiguity for bts 2, re-using the ARFCN+BSIC
+	 */
+
+	log("f_tc_ho_neighbor_config: 6. config error: explicit local and remote neighbors with ambiguous ARFCN+BSIC:"
+	    & " 'neighbor bts 2; neighbor lac 99 arfcn 871 bsic 12'");
+	f_bts_0_cfg({"no neighbors", "neighbor bts 2", "neighbor lac 99 arfcn 871 bsic 12"});
+	f_sleep(0.5);
+
+	f_probe_for_handover("6.a", "HO to 871-12 is ambiguous = error",
+			"handover any to arfcn 871 bsic 12",
+			false);
+}
+private function f_tc_ho_neighbor_config_7(charstring id) runs on MSC_ConnHdlr {
+	f_tc_ho_neighbor_config_start();
+
+	/*
+	 * bts 0 ARFCN 871 BSIC 10
+	 * bts 1 ARFCN 871 BSIC 11
+	 * bts 2 ARFCN 871 BSIC 12
+	 * bts 3 ARFCN 871 BSIC 12  serves as ambiguity for bts 2, re-using the ARFCN+BSIC
+	 */
+
+	log("f_tc_ho_neighbor_config: 7. explicit local and remote neighbors:"
+	    & " 'neighbor bts 2; neighbor lac 99 arfcn 123 bsic 45'");
+	f_bts_0_cfg({"no neighbors", "neighbor bts 2", "neighbor lac 99 arfcn 123 bsic 45"});
+	f_sleep(0.5);
+
+	f_probe_for_handover("7.a", "HO to 871-12 does HO to bts 2",
+			"handover any to arfcn 871 bsic 12",
+			true);
+	f_probe_for_handover("7.b", "HO to 123-45 triggers inter-BSC HO",
+			"handover any to arfcn 123 bsic 45",
+			true, true);
+}
+
+testcase TC_ho_neighbor_config_1() runs on test_CT {
+	var MSC_ConnHdlr vc_conn;
+	f_init(3, true);
+	f_sleep(1.0);
+	vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_1));
+	vc_conn.done;
+}
+testcase TC_ho_neighbor_config_2() runs on test_CT {
+	var MSC_ConnHdlr vc_conn;
+	f_init(3, true);
+	f_sleep(1.0);
+	vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_2));
+	vc_conn.done;
+}
+testcase TC_ho_neighbor_config_3() runs on test_CT {
+	var MSC_ConnHdlr vc_conn;
+	f_init(3, true);
+	f_sleep(1.0);
+	vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_3));
+	vc_conn.done;
+}
+testcase TC_ho_neighbor_config_4() runs on test_CT {
+	var MSC_ConnHdlr vc_conn;
+	f_init(3, true);
+	f_sleep(1.0);
+	vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_4));
+	vc_conn.done;
+}
+testcase TC_ho_neighbor_config_5() runs on test_CT {
+	var MSC_ConnHdlr vc_conn;
+	f_init(3, true);
+	f_sleep(1.0);
+	vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_5));
+	vc_conn.done;
+}
+testcase TC_ho_neighbor_config_6() runs on test_CT {
+	var MSC_ConnHdlr vc_conn;
+	f_init(3, true);
+	f_sleep(1.0);
+	vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_6));
+	vc_conn.done;
+}
+testcase TC_ho_neighbor_config_7() runs on test_CT {
+	var MSC_ConnHdlr vc_conn;
+	f_init(3, true);
+	f_sleep(1.0);
+	vc_conn := f_start_handler(refers(f_tc_ho_neighbor_config_7));
+	vc_conn.done;
+}
+
 /* OS#3041: Open and close N connections in a normal fashion, and expect no
  * BSSMAP Reset just because of that. */
 testcase TC_bssap_rlsd_does_not_cause_bssmap_reset() runs on test_CT {
@@ -4001,161 +4357,13 @@
  */
 
 control {
-	/* CTRL interface testing */
-	execute( TC_ctrl_msc_connection_status() );
-	execute( TC_ctrl_msc0_connection_status() );
-	execute( TC_ctrl() );
-	if (mp_bssap_cfg.transport == BSSAP_TRANSPORT_SCCPlite_SERVER) {
-		execute( TC_ctrl_location() );
-	}
-
-	/* RSL DCHAN Channel ACtivation / Deactivation */
-	execute( TC_chan_act_noreply() );
-	execute( TC_chan_act_counter() );
-	execute( TC_chan_act_ack_noest() );
-	execute( TC_chan_act_ack_est_ind_noreply() );
-	execute( TC_chan_act_ack_est_ind_refused() );
-	execute( TC_chan_act_nack() );
-	execute( TC_chan_exhaustion() );
-	execute( TC_chan_deact_silence() );
-	execute( TC_chan_rel_rll_rel_ind() );
-	execute( TC_chan_rel_conn_fail() );
-	execute( TC_chan_rel_hard_clear() );
-	execute( TC_chan_rel_hard_clear_csfb() );
-	execute( TC_chan_rel_hard_rlsd() );
-	execute( TC_chan_rel_hard_rlsd_ms_dead() );
-	execute( TC_chan_rel_a_reset() );
-
-	execute( TC_outbound_connect() );
-
-	/* Assignment related */
-	execute( TC_assignment_cic_only() );
-	execute( TC_assignment_csd() );
-	execute( TC_assignment_ctm() );
-	execute( TC_assignment_sign() );
-	execute( TC_assignment_fr_a5_0() );
-	execute( TC_assignment_fr_a5_1() );
-	if (mp_bssap_cfg.transport == BSSAP_TRANSPORT_AoIP) {
-		execute( TC_assignment_fr_a5_1_codec_missing() );
-	}
-	execute( TC_assignment_fr_a5_3() );
-	execute( TC_assignment_fr_a5_4() );
-	execute( TC_ciph_mode_a5_0() );
-	execute( TC_ciph_mode_a5_1() );
-	execute( TC_ciph_mode_a5_3() );
-
-	execute( TC_assignment_codec_fr() );
-	execute( TC_assignment_codec_hr() );
-	execute( TC_assignment_codec_efr() );
-	execute( TC_assignment_codec_amr_f() );
-	execute( TC_assignment_codec_amr_h() );
-
-	if (mp_bssap_cfg.transport == BSSAP_TRANSPORT_AoIP) {
-		execute( TC_assignment_codec_amr_f_S1() );
-		execute( TC_assignment_codec_amr_h_S1() );
-		execute( TC_assignment_codec_amr_f_S124() );
-		execute( TC_assignment_codec_amr_h_S124() );
-		execute( TC_assignment_codec_amr_f_S0() );
-		execute( TC_assignment_codec_amr_f_S02() );
-		execute( TC_assignment_codec_amr_f_S024() );
-		execute( TC_assignment_codec_amr_f_S0247() );
-		execute( TC_assignment_codec_amr_h_S0() );
-		execute( TC_assignment_codec_amr_h_S02() );
-		execute( TC_assignment_codec_amr_h_S024() );
-		execute( TC_assignment_codec_amr_h_S0247() );
-		execute( TC_assignment_codec_amr_f_S01234567() );
-		execute( TC_assignment_codec_amr_f_S0234567() );
-		execute( TC_assignment_codec_amr_f_zero() );
-		execute( TC_assignment_codec_amr_f_unsupp() );
-		execute( TC_assignment_codec_amr_h_S7() );
-	}
-
-	execute( TC_assignment_codec_fr_exhausted_req_hr() );
-	execute( TC_assignment_codec_fr_exhausted_req_fr() );
-	execute( TC_assignment_codec_fr_exhausted_req_fr_hr() );
-	execute( TC_assignment_codec_fr_exhausted_req_hr_fr() );
-	execute( TC_assignment_codec_hr_exhausted_req_fr() );
-	execute( TC_assignment_codec_hr_exhausted_req_hr() );
-	execute( TC_assignment_codec_hr_exhausted_req_hr_fr() );
-	execute( TC_assignment_codec_hr_exhausted_req_fr_hr() );
-	execute( TC_assignment_codec_req_hr_fr() );
-	execute( TC_assignment_codec_req_fr_hr() );
-
-	if (mp_enable_osmux_test) {
-		execute( TC_assignment_osmux() );
-	}
-
-	/* RLL Establish Indication on inactive DCHAN / SAPI */
-	execute( TC_rll_est_ind_inact_lchan() );
-	execute( TC_rll_est_ind_inval_sapi1() );
-	execute( TC_rll_est_ind_inval_sapi3() );
-	execute( TC_rll_est_ind_inval_sacch() );
-
-	/* Paging related tests */
-	execute( TC_paging_imsi_nochan() );
-	execute( TC_paging_tmsi_nochan() );
-	execute( TC_paging_tmsi_any() );
-	execute( TC_paging_tmsi_sdcch() );
-	execute( TC_paging_tmsi_tch_f() );
-	execute( TC_paging_tmsi_tch_hf() );
-	execute( TC_paging_imsi_nochan_cgi() );
-	execute( TC_paging_imsi_nochan_lac_ci() );
-	execute( TC_paging_imsi_nochan_ci() );
-	execute( TC_paging_imsi_nochan_lai() );
-	execute( TC_paging_imsi_nochan_lac() );
-	execute( TC_paging_imsi_nochan_all() );
-	execute( TC_paging_imsi_nochan_plmn_lac_rnc() );
-	execute( TC_paging_imsi_nochan_rnc() );
-	execute( TC_paging_imsi_nochan_lac_rnc() );
-	execute( TC_paging_imsi_nochan_lacs() );
-	execute( TC_paging_imsi_nochan_lacs_empty() );
-	execute( TC_paging_imsi_nochan_cgi_unknown_cid() );
-	execute( TC_paging_imsi_a_reset() );
-	execute( TC_paging_imsi_load() );
-	execute( TC_paging_counter() );
-	execute( TC_paging_resp_unsol() );
-
-	execute( TC_rsl_drop_counter() );
-	execute( TC_rsl_unknown_unit_id() );
-
-	execute( TC_oml_unknown_unit_id() );
-
-	execute( TC_classmark() );
-	execute( TC_unsol_ass_fail() );
-	execute( TC_unsol_ass_compl() );
-	execute( TC_unsol_ho_fail() );
-	execute( TC_err_82_short_msg() );
-	execute( TC_err_84_unknown_msg() );
-
-	execute( TC_ho_int() );
-
-	execute( TC_ho_out_of_this_bsc() );
-	execute( TC_ho_out_fail_no_msc_response() );
-	execute( TC_ho_out_fail_rr_ho_failure() );
-	execute( TC_ho_out_fail_no_result_after_ho_cmd() );
-
-	execute( TC_ho_into_this_bsc() );
-	execute( TC_ho_in_fail_msc_clears() );
-	execute( TC_ho_in_fail_msc_clears_after_ho_detect() );
-	execute( TC_ho_in_fail_no_detect() );
-	execute( TC_ho_in_fail_no_detect2() );
-
-	execute( TC_bssap_rlsd_does_not_cause_bssmap_reset() );
-	execute( TC_bssmap_clear_does_not_cause_bssmap_reset() );
-	execute( TC_ms_rel_ind_does_not_cause_bssmap_reset() );
-
-	execute( TC_dyn_pdch_ipa_act_deact() );
-	execute( TC_dyn_pdch_ipa_act_nack() );
-	execute( TC_dyn_pdch_osmo_act_deact() );
-	execute( TC_dyn_pdch_osmo_act_nack() );
-
-	execute( TC_chopped_ipa_ping() );
-	execute( TC_chopped_ipa_payload() );
-
-	/* at bottom as they might crash OsmoBSC before OS#3182 is fixed */
-	execute( TC_early_conn_fail() );
-	execute( TC_late_conn_fail() );
-
+	execute( TC_ho_neighbor_config_1() );
+	execute( TC_ho_neighbor_config_2() );
+	execute( TC_ho_neighbor_config_3() );
+	execute( TC_ho_neighbor_config_4() );
+	execute( TC_ho_neighbor_config_5() );
+	execute( TC_ho_neighbor_config_6() );
+	execute( TC_ho_neighbor_config_7() );
 }
 
 }
diff --git a/bsc/BSC_Tests_LCLS.ttcn b/bsc/BSC_Tests_LCLS.ttcn
index 6087133..c57cbfa 100644
--- a/bsc/BSC_Tests_LCLS.ttcn
+++ b/bsc/BSC_Tests_LCLS.ttcn
@@ -739,21 +739,6 @@
 
 control {
 
-	execute( TC_lcls_gcr_only() );
-	execute( TC_lcls_gcr_bway_connect() );
-	execute( TC_lcls_gcr_bway_connect_hr() );
-	execute( TC_lcls_gcr_bway_codec_mismatch() );
-	execute( TC_lcls_gcr_nomatch_bway_connect() );
-	execute( TC_lcls_gcr_bway_dont_connect() );
-	execute( TC_lcls_gcr_unsuppported_cfg() );
-	execute( TC_lcls_gcr_unsuppported_csc() );
-	execute( TC_lcls_gcr_bway_dont_connect_csc() );
-	execute( TC_lcls_connect_break() );
-	execute( TC_lcls_connect_clear() );
-
-	execute( TC_lcls_bts_gcr_bway_connect() );
-	execute( TC_lcls_bts_gcr_bway_connect_hr() );
-	execute( TC_lcls_bts_connect_break() );
 }
 
 
diff --git a/bsc/osmo-bsc.cfg b/bsc/osmo-bsc.cfg
index bca5b20..9384491 100644
--- a/bsc/osmo-bsc.cfg
+++ b/bsc/osmo-bsc.cfg
@@ -57,7 +57,7 @@
  encryption a5 0 1 3
  neci 1
  paging any use tch 0
- handover 0
+ handover 1
  handover window rxlev averaging 10
  handover window rxqual averaging 1
  handover window rxlev neighbor averaging 10
@@ -339,6 +339,35 @@
    timeslot 7
     phys_chan_config PDCH
     hopping enabled 0
+ bts 3
+  type sysmobts
+  band DCS1800
+  cell_identity 3
+  location_area_code 3
+  # re-use bts 2's ARFCN 871 and BSIC 12 (to test handover config)
+  base_station_id_code 12
+  trx 0
+   rf_locked 0
+   arfcn 871
+   nominal power 23
+   max_power_red 20
+   rsl e1 tei 0
+   timeslot 0
+    phys_chan_config CCCH+SDCCH4
+   timeslot 1
+    phys_chan_config TCH/F
+   timeslot 2
+    phys_chan_config TCH/F
+   timeslot 3
+    phys_chan_config TCH/F
+   timeslot 4
+    phys_chan_config TCH/F
+   timeslot 5
+    phys_chan_config TCH/H
+   timeslot 6
+    phys_chan_config PDCH
+   timeslot 7
+    phys_chan_config PDCH
 msc 0
  ip.access rtp-base 4000
  no bsc-welcome-text
diff --git a/library/RSL_Emulation.ttcn b/library/RSL_Emulation.ttcn
index 790dd7a..309ec13 100644
--- a/library/RSL_Emulation.ttcn
+++ b/library/RSL_Emulation.ttcn
@@ -45,6 +45,8 @@
 	/* second BTS / DChan during hand-over */
 	port RSL_DCHAN_PT RSL1;
 	port RSLEM_PROC_PT RSL1_PROC;
+	port RSL_DCHAN_PT RSL2;
+	port RSLEM_PROC_PT RSL2_PROC;
 };
 
 type record RSLDC_ChanRqd {

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/14765
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Ia4ba0e75abd3d45a3422b2525e5f938cdc5a04cc
Gerrit-Change-Number: 14765
Gerrit-PatchSet: 1
Gerrit-Owner: neels <nhofmeyr at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20190713/80d520c3/attachment.html>


More information about the gerrit-log mailing list