Change in osmo-ttcn3-hacks[master]: bsc: inter-BSC HO: add TC_ho_out_of_this_bsc, TC_ho_into_this_bsc

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Neels Hofmeyr gerrit-no-reply at lists.osmocom.org
Mon Jun 18 07:19:35 UTC 2018


Neels Hofmeyr has uploaded this change for review. ( https://gerrit.osmocom.org/9674


Change subject: bsc: inter-BSC HO: add TC_ho_out_of_this_bsc, TC_ho_into_this_bsc
......................................................................

bsc: inter-BSC HO: add TC_ho_out_of_this_bsc, TC_ho_into_this_bsc

Change-Id: Id22852d4be7f127d827e7a8beeec55db27c07f03
---
M bsc/BSC_Tests.ttcn
M bsc/osmo-bsc.cfg
2 files changed, 330 insertions(+), 36 deletions(-)



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

diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 0107091..ca7b275 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -33,6 +33,8 @@
 import from RSL_Types all;
 import from RSL_Emulation all;
 import from MGCP_Emulation all;
+import from MGCP_Templates all;
+import from MGCP_Types all;
 
 import from Osmocom_CTRL_Functions all;
 import from Osmocom_CTRL_Types all;
@@ -43,6 +45,7 @@
 
 import from MobileL3_CommonIE_Types all;
 import from MobileL3_Types all;
+import from MobileL3_RRM_Types all;
 import from L3_Templates all;
 import from GSM_RR_Types all;
 
@@ -2067,41 +2070,6 @@
 	f_vty_ss_action("handover " & int2str(new_bts_nr), bts_nr, trx_nr, chan_nr);
 }
 
-/* intra-BSC hand-over between BTS0 and BTS1 */
-private function f_tc_ho_int(charstring id) runs on MSC_ConnHdlr {
-	g_pars := valueof(t_def_TestHdlrPars);
-	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}));
-
-	f_establish_fully(ass_cmd, exp_compl);
-
-	var HandoverState hs := {
-		rr_ho_cmpl_seen := false,
-		handover_done := false,
-		old_chan_nr := -
-	};
-	/* issue hand-over command on VTY */
-	f_vty_handover(0, 0, g_chan_nr, 1);
-	/* temporarily suspend DChan processing on BTS1 to avoid race with RSLEM_register */
-	f_rslem_suspend(RSL1_PROC);
-	alt {
-	[] as_handover(hs);
-	/* FIXME: somehow determine that the hand-over has completed, by MGCP MDCX? */
-	}
-}
-
-testcase TC_ho_int() runs on test_CT {
-	var MSC_ConnHdlr vc_conn;
-	f_init(2, true);
-	f_sleep(1.0);
-	vc_conn := f_start_handler(refers(f_tc_ho_int));
-	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 {
@@ -2481,6 +2449,327 @@
    * is the info correct on delayed PCU (re)connect?
  */
 
+
+/***********************************************************************
+ * Handover
+ ***********************************************************************/
+
+/* intra-BSC hand-over between BTS0 and BTS1 */
+private function f_tc_ho_int(charstring id) runs on MSC_ConnHdlr {
+	g_pars := valueof(t_def_TestHdlrPars);
+	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}));
+
+	f_establish_fully(ass_cmd, exp_compl);
+
+	var HandoverState hs := {
+		rr_ho_cmpl_seen := false,
+		handover_done := false,
+		old_chan_nr := -
+	};
+	/* issue hand-over command on VTY */
+	f_vty_handover(0, 0, g_chan_nr, 1);
+	/* temporarily suspend DChan processing on BTS1 to avoid race with RSLEM_register */
+	f_rslem_suspend(RSL1_PROC);
+	alt {
+	[] as_handover(hs);
+	/* FIXME: somehow determine that the hand-over has completed, by MGCP MDCX? */
+	}
+}
+
+testcase TC_ho_int() runs on test_CT {
+	var MSC_ConnHdlr vc_conn;
+	f_init(2, true);
+	f_sleep(1.0);
+	vc_conn := f_start_handler(refers(f_tc_ho_int));
+	vc_conn.done;
+}
+
+template PDU_BSSAP tr_BSSMAP_HandoverRequired modifies tr_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			handoverRequired := {
+				messageType := '11'O
+			}
+		}
+	}
+}
+
+template PDU_BSSAP ts_BSSMAP_HandoverCommand(octetstring layer3info) modifies ts_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			handoverCommand := {
+				messageType := '13'O,
+				layer3Information := {
+					elementIdentifier := '17'O,
+					lengthIndicator := 0,
+					layer3info := layer3info
+				},
+				cellIdentifier := omit,
+				newBSSToOldBSSInfo := omit,
+				talkerPriority := omit
+			}
+		}
+	}
+}
+
+template PDU_ML3_NW_MS ts_RR_HandoverCommand := {
+	discriminator := '0110'B,
+	tiOrSkip := {
+		skipIndicator := '0000'B
+	},
+	msgs := {
+		rrm := {
+			handoverCommand := {
+				messageType := '00101011'B,
+				cellDescription := {
+					bcc := '001'B,
+					ncc := '010'B,
+					BCCHArfcn_HighPart := '11'B,
+					BCCHArfcn_LowPart := '04'O
+				},
+				channelDescription2 := {
+					timeslotNumber := '110'B,
+					channelTypeandTDMAOffset := '00001'B,
+					octet3 := '00'O,
+					octet4 := '09'O
+				},
+				handoverReference := {
+					handoverReferenceValue := '00'O
+				},
+				powerCommandAndAccesstype := {
+					powerlevel := '00000'B,
+					fPC_EP := '0'B,
+					ePC_Mode := '0'B,
+					aTC := '0'B
+				},
+				synchronizationIndication := omit,
+				frequencyShortListAfterTime := omit,
+				frequencyListAfterTime := omit,
+				cellChannelDescription := omit,
+				multislotAllocation := omit,
+				modeOfChannelSet1 := omit,
+				modeOfChannelSet2 := omit,
+				modeOfChannelSet3 := omit,
+				modeOfChannelSet4 := omit,
+				modeOfChannelSet5 := omit,
+				modeOfChannelSet6 := omit,
+				modeOfChannelSet7 := omit,
+				modeOfChannelSet8 := omit,
+				descrOf2ndCh_at := omit,
+				modeOf2ndChannel := omit,
+				frequencyChannelSequence_at := omit,
+				mobileAllocation_at := omit,
+				startingTime := omit,
+				timeDifference := omit,
+				timingAdvance := omit,
+				frequencyShortListBeforeTime := omit,
+				frequencyListBeforeTime := omit,
+				descrOf1stCh_bt := omit,
+				descrOf2ndCh_bt := omit,
+				frequencyChannelSequence_bt := omit,
+				mobileAllocation_bt := omit,
+				cipherModeSetting := omit,
+				vGCS_TargetModeIndication := omit,
+				multiRateConfiguration := omit,
+				dynamicARFCN_Mapping := omit,
+				vGCS_Ciphering_Parameters := omit,
+				dedicatedServiceInformation := omit,
+				pLMNIndex := omit,
+				extendedTSCSet_afterTime := omit,
+				extendedTSCSet_beforeTime := omit
+			}
+		}
+	}
+}
+
+private function f_tc_ho_out_of_this_bsc(charstring id) runs on MSC_ConnHdlr {
+	g_pars := valueof(t_def_TestHdlrPars);
+	var template PDU_BSSAP exp_compl := tr_BSSMAP_AssignmentComplete(omit, ?);
+	var BSSMAP_IE_AoIP_TransportLayerAddress tla := valueof(ts_BSSMAP_IE_AoIP_TLA4('01020304'O, 2342));
+	var PDU_BSSAP ass_cmd := valueof(ts_BSSMAP_AssignmentReq(omit, tla));
+	var PDU_ML3_NW_MS rr_ho_cmd;
+	var octetstring rr_ho_cmd_enc;
+	var myBSSMAP_Cause cause_val := GSM0808_CAUSE_HANDOVER_SUCCESSFUL;
+	var BssmapCause cause := enum2int(cause_val);
+	var RSL_Message rsl_ho_cmd;
+	var RSL_IE_Body rsl_ho_cmd_l3;
+	var MgcpCommand mgcp;
+
+	ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);
+	ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));
+
+	f_establish_fully(ass_cmd, exp_compl);
+
+	f_vty_transceive(BSCVTY, "handover any to arfcn 123 bsic any");
+
+	BSSAP.receive(tr_BSSMAP_HandoverRequired);
+
+	f_sleep(0.5);
+	/* The MSC negotiates Handover Request and Handover Request Ack with
+	 * the other BSS and comes back with a BSSMAP Handover Command
+	 * containing an RR Handover Command coming from the target BSS... */
+
+	rr_ho_cmd := valueof(ts_RR_HandoverCommand);
+	log("Remote cell's RR Handover Command passed through as L3 Info: ", rr_ho_cmd);
+	rr_ho_cmd_enc := enc_PDU_ML3_NW_MS(rr_ho_cmd);
+	log("Remote cell's RR Handover Command passed through as L3 Info, encoded: ", rr_ho_cmd_enc);
+	BSSAP.send(ts_BSSMAP_HandoverCommand(rr_ho_cmd_enc));
+
+	/* expect the Handover Command to go out on RR */
+	RSL.receive(tr_RSL_DATA_REQ(g_chan_nr, ?, ?)) -> value rsl_ho_cmd;
+	log("RSL Data Req went out to first BTS: ", rsl_ho_cmd);
+	if (not f_rsl_find_ie(rsl_ho_cmd, RSL_IE_L3_INFO, rsl_ho_cmd_l3)) {
+		log("RSL message contains no L3 Info IE, expected RR Handover Command");
+		setverdict(fail);
+	} else {
+		log("Found L3 Info: ", rsl_ho_cmd_l3);
+		if (rsl_ho_cmd_l3.l3_info.payload != rr_ho_cmd_enc) {
+			log("FAIL: the BSC sent out a different L3 Info, not matching the RR Handover Command the other BSS forwarded.");
+			setverdict(fail);
+		} else {
+			log("Success: the BSC sent out the same RR Handover Command the other BSS forwarded.");
+			setverdict(pass);
+		}
+	}
+
+	/* When the other BSS has reported a completed handover, this side is
+	 * torn down. */
+
+	BSSAP.send(ts_BSSMAP_ClearCommand(cause));
+
+	/* Expecting MGCP to DLCX the endpoint's two connections: towards BTS and towards MSC */
+	interleave {
+	[] BSSAP.receive(tr_BSSMAP_ClearComplete);
+	[] MGCP.receive(tr_DLCX()) -> value mgcp {
+			log("Got first DLCX: ", mgcp);
+		}
+	[] MGCP.receive(tr_DLCX()) -> value mgcp {
+			log("Got second DLCX: ", mgcp);
+		}
+	}
+	setverdict(pass);
+	f_sleep(1.0);
+}
+testcase TC_ho_out_of_this_bsc() runs on test_CT {
+	var MSC_ConnHdlr vc_conn;
+
+	f_init(1, true);
+	f_sleep(1.0);
+
+	vc_conn := f_start_handler(refers(f_tc_ho_out_of_this_bsc));
+	vc_conn.done;
+}
+
+template PDU_BSSAP ts_BSSMAP_HandoverRequest(
+		template BSSMAP_IE_CellIdentifier cell_id_target := ts_CellID_LAC_CI(1, 0),
+		template BSSMAP_IE_CellIdentifier cell_id_source := ts_CellID_LAC_CI(1, 1),
+		template BSSMAP_IE_AoIP_TransportLayerAddress aoip_tla := ts_BSSMAP_IE_AoIP_TLA4('01020304'O, 2342)
+		)
+modifies ts_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			handoverRequest := {
+				messageType := '10'O,
+				channelType := valueof(ts_BSSMAP_IE_ChannelType),
+				encryptionInformation :=
+					valueof(ts_BSSMAP_IE_EncrInfo('0000000000000000'O,'01'O)),
+				classmarkInformationType := {
+					classmarkInformationType1 := {
+						elementIdentifier := '1D'O,
+						rf_PowerCapability := '000'B,
+						a5_1 := '0'B,
+						esind := '0'B,
+						revisionLevel := '10'B,
+						spare1_1 := '0'B
+					}
+					},
+				cellIdentifierSource := cell_id_source,
+				priority := omit,
+				circuitIdentityCode := omit,
+				downLinkDTX_Flag := omit,
+				cellIdentifierTarget := cell_id_target,
+				interferenceBandToBeUsed := omit,
+				cause := omit,
+				classmarkInformationType3 := omit,
+				currentChannelType1 := omit,
+				speechVersion := omit,
+				groupCallReference := omit,
+				talkerFlag := omit,
+				configurationEvolutionIndication := omit,
+				chosenEncryptionAlgorithm := omit,
+				oldToNewBSSInfo := omit,
+				lSAInformation := omit,
+				lSAAccessControlSuppression := omit,
+				serviceHandover := omit,
+				iMSI_bssmap := omit,
+				sourceToTargetRNCTransparentInfo := omit,
+				sourceToTargetRNCTransparentInfoCDMA := omit,
+				sNAAccessInformation := omit,
+				talkerPriority := omit,
+				aoIPTransportLayer := aoip_tla,
+				codecList := omit,
+				callIdentifier := omit,
+				kC128 := omit,
+				globalCallReference := omit,
+				lCLS_Configuration := omit,
+				connectionStatusControl := omit
+			}
+		}
+	}
+}
+
+template PDU_BSSAP tr_BSSMAP_HandoverRequestAcknowledge(octetstring layer3info)
+modifies tr_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			handoverRequestAck := {
+				messageType := '12'O,
+				layer3Information := {
+					elementIdentifier := '17'O,
+					lengthIndicator := 0,
+					layer3info := layer3info
+				}
+			}
+		}
+	}
+}
+
+private function f_tc_ho_into_this_bsc(charstring id) runs on MSC_ConnHdlr {
+	var BSSAP_N_DATA_ind rx_di;
+
+	BSSAP.send(ts_BSSAP_CONNECT_req(g_bssap.sccp_addr_peer, g_bssap.sccp_addr_own, 2342,
+			ts_BSSMAP_HandoverRequest()));
+	BSSAP.receive(tr_BSSAP_CONNECT_cfm(2342, omit));
+
+	BSSAP.receive(tr_BSSAP_DATA_ind(2342, tr_BSSMAP_HandoverRequestAcknowledge('1234'O)));
+
+	alt {
+	[] BSSAP.receive(tr_BSSAP_DATA_ind(2342, tr_BSSMAP_ClearRequest)) -> value rx_di {
+			var BssmapCause cause := bit2int(rx_di.userData.pdu.bssmap.clearRequest.cause.causeValue);
+			BSSAP.send(ts_BSSAP_DATA_req(2342, ts_BSSMAP_ClearCommand(cause)));
+			repeat;
+		}
+	[] BSSAP.receive(tr_BSSAP_DATA_ind(2342, tr_BSSMAP_ClearComplete));
+	}
+
+	setverdict(pass);
+}
+
+testcase TC_ho_into_this_bsc() runs on test_CT {
+	var MSC_ConnHdlr vc_conn;
+
+	f_init(1, true);
+	f_sleep(1.0);
+
+	vc_conn := f_start_handler(refers(f_tc_ho_into_this_bsc));
+	vc_conn.done;
+}
+
 control {
 	/* CTRL interface testing */
 	execute( TC_ctrl_msc_connection_status() );
@@ -2566,7 +2855,6 @@
 	execute( TC_unsol_ho_fail() );
 	execute( TC_err_82_short_msg() );
 	execute( TC_err_84_unknown_msg() );
-	execute( TC_ho_int() );
 
 	execute( TC_bssap_rlsd_does_not_cause_bssmap_reset() );
 	execute( TC_bssmap_clear_does_not_cause_bssmap_reset() );
@@ -2577,6 +2865,10 @@
 	execute( TC_dyn_pdch_osmo_act_deact() );
 	execute( TC_dyn_pdch_osmo_act_nack() );
 
+	execute( TC_ho_int() );
+	execute( TC_ho_out_of_this_bsc() );
+	execute( TC_ho_into_this_bsc() );
+
 	/* at bottom as they might crash OsmoBSC before OS#3182 is fixed */
 	execute( TC_early_conn_fail() );
 	execute( TC_late_conn_fail() );
diff --git a/bsc/osmo-bsc.cfg b/bsc/osmo-bsc.cfg
index 1ccef09..b2409a5 100644
--- a/bsc/osmo-bsc.cfg
+++ b/bsc/osmo-bsc.cfg
@@ -88,6 +88,8 @@
   early-classmark-sending forbidden
   ip.access unit_id 1234 0
   oml ip.access stream_id 255 line 0
+  # remote-BSS neighbor:
+  neighbor add lac 99 arfcn 123 bsic any
   neighbor-list mode manual-si5
   neighbor-list add arfcn 100
   neighbor-list add arfcn 200

-- 
To view, visit https://gerrit.osmocom.org/9674
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: Id22852d4be7f127d827e7a8beeec55db27c07f03
Gerrit-Change-Number: 9674
Gerrit-PatchSet: 1
Gerrit-Owner: Neels Hofmeyr <nhofmeyr at sysmocom.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20180618/b95e932c/attachment.htm>


More information about the gerrit-log mailing list