Change in osmo-ttcn3-hacks[master]: bsc: f_create_chan_and_exp(): ensure that SCCP connection is up

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/.

laforge gerrit-no-reply at lists.osmocom.org
Tue Dec 7 07:38:34 UTC 2021


laforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/26448 )

Change subject: bsc: f_create_chan_and_exp(): ensure that SCCP connection is up
......................................................................

bsc: f_create_chan_and_exp(): ensure that SCCP connection is up

This change fixes sporadic failures of TC_cm_serv_rej:

  RAN Connection table not found by component TC_cm_serv_rej(2648)
        BSC_Tests.ttcn:11106 BSC_Tests control part
        BSC_Tests.ttcn:10550 TC_cm_serv_rej testcase

The reason is that sometimes a BSSAP/DTAP PDU (with CM Service Reject)
gets enqueued before the SUT has established an SCCP connection to the
virtual MSC.  This causes a lookup error in the RAN connection table.

A simple solution would be to add a receive statement after calling
f_create_chan_and_exp(), like it's done everywhere else:

  f_create_chan_and_exp();
  BSSAP.receive(tr_BSSMAP_ComplL3); // <---

But a more general solution is to expect and receive this message in
f_create_chan_and_exp(), so we can reduce code duplication and make
the API more convinient.  This is exactly what this change does.

Change-Id: Ic675168e29919e1234cb49440c4a630238ff5d70
Related: SYS#4878
---
M bsc/BSC_Tests.ttcn
M bsc/MSC_ConnectionHandler.ttcn
2 files changed, 25 insertions(+), 61 deletions(-)

Approvals:
  laforge: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 22df0cb..3aaab85 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -3880,7 +3880,6 @@
 	/* this is like the beginning of f_establish_fully(), but only up to ciphering reject */
 
 	var BSSMAP_FIELD_CodecType codecType;
-	timer T := 10.0;
 
 	codecType := exp_ass_req.pdu.bssmap.assignmentRequest.codecList.codecElements[0].codecType;
 	f_MscConnHdlr_init(g_pars.media_nr, host_bts, host_mgw_mgcp, codecType);
@@ -3888,24 +3887,6 @@
 	f_create_chan_and_exp();
 	/* we should now have a COMPL_L3 at the MSC */
 
-	var template PDU_BSSAP exp_l3_compl;
-	exp_l3_compl := tr_BSSMAP_ComplL3()
-	if (g_pars.aoip == false) {
-		exp_l3_compl.pdu.bssmap.completeLayer3Information.codecList := omit;
-	} else {
-		exp_l3_compl.pdu.bssmap.completeLayer3Information.codecList := ?;
-	}
-	T.start;
-	alt {
-	[] BSSAP.receive(exp_l3_compl);
-	[] BSSAP.receive(tr_BSSMAP_ComplL3) {
-		Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Received non-matching COMPLETE LAYER 3 INFORMATION");
-		}
-	[] T.timeout {
-		Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for COMPLETE LAYER 3 INFORMATION");
-		}
-	}
-
 	/* Start ciphering, expect Cipher Mode Reject */
 	f_cipher_mode(g_pars.encr, exp_fail := true);
 }
@@ -5055,7 +5036,6 @@
 
 	f_create_chan_and_exp();
 	/* we should now have a COMPL_L3 at the MSC */
-	BSSAP.receive(tr_BSSMAP_ComplL3);
 
 	BSSAP.send(ts_BSSMAP_ClassmarkRequest);
 	RSL.receive(tr_RSL_DATA_REQ(g_chan_nr, ?, decmatch tr_RRM_CM_ENQUIRY));
@@ -5081,7 +5061,6 @@
 
 	f_create_chan_and_exp();
 	/* we should now have a COMPL_L3 at the MSC */
-	BSSAP.receive(tr_BSSMAP_ComplL3);
 
 	/* Send CommonID */
 	BSSAP.send(ts_BSSMAP_CommonId(g_pars.imsi));
@@ -5105,7 +5084,6 @@
 	g_pars := f_gen_test_hdlr_pars();
 	f_create_chan_and_exp();
 	/* we should now have a COMPL_L3 at the MSC */
-	BSSAP.receive(tr_BSSMAP_ComplL3);
 
 	/* send the single message we want to send */
 	f_rsl_send_l3(l3);
@@ -5176,7 +5154,6 @@
 	g_pars := f_gen_test_hdlr_pars();
 	f_create_chan_and_exp();
 	/* we should now have a COMPL_L3 at the MSC */
-	BSSAP.receive(tr_BSSMAP_ComplL3);
 
 	/* send short message */
 	RSL.send(ts_RSL_DATA_IND(g_chan_nr, valueof(ts_RslLinkID_DCCH(0)), ''O));
@@ -10534,6 +10511,7 @@
 private function f_TC_cm_serv_rej(charstring id) runs on MSC_ConnHdlr
 {
 	f_create_chan_and_exp();
+	/* we should now have a COMPL_L3 at the MSC */
 	BSSAP.send(ts_PDU_DTAP_MT(ts_CM_SERV_REJ('02'O), '00'O));
 	f_sleep(1.0);
 }
@@ -10575,24 +10553,6 @@
 	f_rslem_dchan_queue_enable();
 
 	/* we should now have a COMPL_L3 at the MSC */
-	var template PDU_BSSAP exp_l3_compl;
-	exp_l3_compl := tr_BSSMAP_ComplL3()
-	if (g_pars.aoip == false) {
-		exp_l3_compl.pdu.bssmap.completeLayer3Information.codecList := omit;
-	} else {
-		exp_l3_compl.pdu.bssmap.completeLayer3Information.codecList := ?;
-	}
-	timer T := 10.0;
-	T.start;
-	alt {
-	[] BSSAP.receive(exp_l3_compl);
-	[] BSSAP.receive(tr_BSSMAP_ComplL3) {
-		Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Received non-matching COMPLETE LAYER 3 INFORMATION");
-		}
-	[] T.timeout {
-		Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for COMPLETE LAYER 3 INFORMATION");
-		}
-	}
 
 	f_create_mgcp_expect(ExpectCriteria:{omit,omit,omit});
 	activate(as_Media_mgw());
diff --git a/bsc/MSC_ConnectionHandler.ttcn b/bsc/MSC_ConnectionHandler.ttcn
index 481abc0..4aeb539 100644
--- a/bsc/MSC_ConnectionHandler.ttcn
+++ b/bsc/MSC_ConnectionHandler.ttcn
@@ -644,19 +644,42 @@
 	expect_tsc := omit
 }
 
-function f_create_chan_and_exp() runs on MSC_ConnHdlr {
+function f_create_chan_and_exp(template (present) PDU_BSSAP exp_l3_compl := ?)
+runs on MSC_ConnHdlr {
 	var MobileIdentityLV mi := valueof(ts_MI_IMSI_LV(g_pars.imsi));
 	var PDU_ML3_MS_NW l3_info := valueof(ts_CM_SERV_REQ(CM_TYPE_MO_CALL, mi));
 	var octetstring l3_enc := enc_PDU_ML3_MS_NW(l3_info);
 	var template uint3_t tsc := ?;
+	timer T;
 
 	if (not istemplatekind(g_pars.expect_tsc, "omit")) {
 		tsc := g_pars.expect_tsc;
 	}
 
+	if (istemplatekind(exp_l3_compl, "?")) {
+		if (g_pars.aoip == false) {
+			exp_l3_compl := tr_BSSMAP_ComplL3(l3_enc, codec_list := omit);
+		} else {
+			exp_l3_compl := tr_BSSMAP_ComplL3(l3_enc, codec_list := ?);
+		}
+	}
+
 	f_create_bssmap_exp(l3_enc);
 	/* call helper function for CHAN_RQD -> IMM ASS ->EST_IND */
 	RSL_Emulation.f_chan_est(g_pars.ra, l3_enc, g_pars.link_id, g_pars.fn, tsc);
+	/* wait for a COMPL_L3 from the BSC to ensure that the SCCP connection is up */
+	T.start(2.0);
+	alt {
+	[] BSSAP.receive(exp_l3_compl);
+	[] BSSAP.receive(tr_BSSMAP_ComplL3) {
+		setverdict(fail, "Received non-matching COMPLETE LAYER 3 INFORMATION");
+		Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
+		}
+	[] T.timeout {
+		setverdict(fail, "Timeout waiting for COMPLETE LAYER 3 INFORMATION");
+		Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
+		}
+	}
 }
 
 function f_rsl_send_l3(template PDU_ML3_MS_NW l3, template (omit) RslLinkId link_id := omit,
@@ -1214,25 +1237,6 @@
 	f_ass_patch_lcls(ass_tpl, exp_ass_cpl);
 
 	f_create_chan_and_exp();
-	/* we should now have a COMPL_L3 at the MSC */
-
-	var template PDU_BSSAP exp_l3_compl;
-	exp_l3_compl := tr_BSSMAP_ComplL3()
-	if (g_pars.aoip == false) {
-		exp_l3_compl.pdu.bssmap.completeLayer3Information.codecList := omit;
-	} else {
-		exp_l3_compl.pdu.bssmap.completeLayer3Information.codecList := ?;
-	}
-	T.start;
-	alt {
-	[] BSSAP.receive(exp_l3_compl);
-	[] BSSAP.receive(tr_BSSMAP_ComplL3) {
-		Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Received non-matching COMPLETE LAYER 3 INFORMATION");
-		}
-	[] T.timeout {
-		Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for COMPLETE LAYER 3 INFORMATION");
-		}
-	}
 
 	/* start ciphering, if requested */
 	if (ispresent(g_pars.encr)) {

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/26448
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: Ic675168e29919e1234cb49440c4a630238ff5d70
Gerrit-Change-Number: 26448
Gerrit-PatchSet: 2
Gerrit-Owner: fixeria <vyanitskiy at sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: dexter <pmaier at sysmocom.de>
Gerrit-Reviewer: laforge <laforge at osmocom.org>
Gerrit-Reviewer: neels <nhofmeyr at sysmocom.de>
Gerrit-Reviewer: osmith <osmith at sysmocom.de>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20211207/8d2a623f/attachment.htm>


More information about the gerrit-log mailing list