Change in osmo-ttcn3-hacks[master]: WIP: bts: f_est_dchan: verify Chan Rqd originated by RACH arrives on RSL

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

Pau Espin Pedrol gerrit-no-reply at lists.osmocom.org
Wed Oct 31 21:10:57 UTC 2018


Pau Espin Pedrol has uploaded this change for review. ( https://gerrit.osmocom.org/11562


Change subject: WIP: bts: f_est_dchan: verify Chan Rqd originated by RACH arrives on RSL
......................................................................

WIP: bts: f_est_dchan: verify Chan Rqd originated by RACH arrives on RSL

Change-Id: I438fd3ee82d88498d928dbcc89ce9bd80d37ab64
---
M bts/BTS_Tests.ttcn
M library/RSL_Emulation.ttcn
M library/RSL_Types.ttcn
3 files changed, 76 insertions(+), 7 deletions(-)



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

diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index 5b073ef..0676214 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -1344,17 +1344,37 @@
 	}
 }
 
+/* Send RACH request through l1CTL and wait for ChanReq on RSL BST->BSC */
+private function f_rach_req_wait_chan_rqd(integer ra) runs on ConnHdlr return GsmFrameNumber {
+	var GsmFrameNumber fn;
+	timer T := 8.0;
+
+	f_L1CTL_PARAM(L1CTL, g_pars.l1_pars.ms_actual_ta, g_pars.l1_pars.ms_power_level);
+	/* Send the actual RACH */
+	log("PESPIN: calling f_L1CTL_RACH ", ra);
+	fn := f_L1CTL_RACH(L1CTL, ra);
+	log("PESPIN: called with fn returned ", fn);
+	/* advertise to RSL Emulation that we expect to receive confirmation from RACH */
+	RSL.send(ts_RSLDC_ChanRqd(int2oct(ra,1), fn));
+	T.start;
+	alt {
+	[] RSL.receive(tr_RSL_CHAN_RQD(int2oct(ra,1), fn)) { setverdict(pass, "Received CHAN-RQD from RACH REQ")}
+	[] T.timeout {
+		Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Timeout waiting for CHAN-RQD from RACH REQ <", ra, ", ", fn, ">"));
+		}
+	}
+	T.stop
+	return fn;
+}
 
 /* Establish dedicated channel: L1CTL + RSL side */
 private function f_est_dchan(boolean encr_enable := false) runs on ConnHdlr {
-	var GsmFrameNumber fn;
 	var ImmediateAssignment imm_ass;
 	var integer ra := 23;
+	var GsmFrameNumber fn;
 
-	f_L1CTL_PARAM(L1CTL, g_pars.l1_pars.ms_actual_ta, g_pars.l1_pars.ms_power_level);
-	fn := f_L1CTL_RACH(L1CTL, ra);
-	/* This arrives on CCHAN, so we cannot test for receiving CHAN RQDhere */
-	//RSL.receive(tr_RSL_CHAN_RQD(int2oct(23,1)));
+	/* Send RACH request and wait for ChanReq */
+	fn := f_rach_req_wait_chan_rqd(ra);
 
 	/* Activate channel on BTS side */
 	f_rsl_chan_act(g_pars.chan_mode, encr_enable);
diff --git a/library/RSL_Emulation.ttcn b/library/RSL_Emulation.ttcn
index cf02d00..24c9202 100644
--- a/library/RSL_Emulation.ttcn
+++ b/library/RSL_Emulation.ttcn
@@ -148,7 +148,7 @@
 runs on RSL_Emulation_CT return integer {
 	var integer i;
 	for (i := 0; i < sizeof(ConnectionTable); i := i+1) {
-		if (ispresent(ConnectionTable[i].comp_ref) and 
+		if (ispresent(ConnectionTable[i].comp_ref) and
 		    ConnectionTable[i].comp_ref == comp_ref) {
 			return i;
 		}
@@ -161,7 +161,7 @@
 runs on RSL_Emulation_CT return integer {
 	var integer i;
 	for (i := 0; i < sizeof(ConnectionTable); i := i+1) {
-		if (ispresent(ConnectionTable[i].chan_nr) and 
+		if (ispresent(ConnectionTable[i].chan_nr) and
 		    ConnectionTable[i].chan_nr == chan_nr and ConnectionTable[i].trx_nr == trx_nr) {
 			return i;
 		}
@@ -183,6 +183,24 @@
 	return -1;
 }
 
+private function f_cid_by_ra_fn2(OCT1 ra, RSL_IE_FrameNumber fn)
+runs on RSL_Emulation_CT return integer {
+	var RSL_IE_FrameNumber ct_fn;
+	var integer i;
+	for (i := 0; i < sizeof(ConnectionTable); i := i+1) {
+		if (ispresent(ConnectionTable[i].ra) and
+		    ConnectionTable[i].ra == ra) {
+			ct_fn := f_compute_RSL_IE_FrameNumber(ConnectionTable[i].ra_fn);
+			log("PESPIN: matching ", fn, " with ", ct_fn)
+			if (ct_fn == fn) {
+				return i;
+			}
+		}
+	}
+	log("No Dchan handler for ", ra, fn);
+	return -1;
+}
+
 /* create an ew client with given RA and FN */
 private function f_cid_create(OCT1 ra, GsmFrameNumber fn, RSL_DchanHdlr comp_ref)
 runs on RSL_Emulation_CT {
@@ -394,6 +412,23 @@
 				}
 			}
 		}
+		[not bts_role] IPA_PT.receive(tr_RSL(tr_RSL_CHAN_RQD(?))) -> value rx_rsl {
+			var RSL_IE_RequestRef req_ref;
+			var OCT1 ra;
+			var GsmFrameNumber fn;
+			req_ref := rx_rsl.rsl.ies[1].body.req_ref;
+			ra := req_ref.ra
+			//fn := 23; //FIXME(req_ref.frame_nr);
+			cid := f_cid_by_ra_fn2(req_ref.ra, req_ref.frame_nr);
+			if (cid != -1) {
+				//ConnectionTable[cid].chan_nr := rx_rsl.rsl.ies[0].body.chan_nr;
+				CLIENT_PT.send(rx_rsl.rsl) to ConnectionTable[cid].comp_ref;
+				f_cid_clear(cid);
+			} else {
+				log("Received CHAN-RQD from unknown RACH REQ", req_ref);
+				CCHAN_PT.send(rx_rsl);
+			}
+		}
 
 		[bts_role] IPA_PT.receive(tr_RSL(tr_RSL_PAGING_CMD(?, ?))) -> value rx_rsl {
 			/* broadcast to all clients? */
@@ -446,6 +481,11 @@
 						 ts_RSL_CHAN_RQD(chan_rqd.ra, chan_rqd.fn)));
 			}
 
+		[not bts_role] CLIENT_PT.receive(RSLDC_ChanRqd:?) -> value chan_rqd sender vc_conn {
+			/* Store the knowledge that this sender has requested a certain RQ+time */
+			f_cid_create(chan_rqd.ra, chan_rqd.fn, vc_conn);
+			}
+
 		[] CLIENT_PT.receive(tr_RSL_MsgType(?)) -> value rx_rsl_msg sender vc_conn {
 			/* forward to BSC */
 			cid := f_cid_by_comp_ref(vc_conn);
diff --git a/library/RSL_Types.ttcn b/library/RSL_Types.ttcn
index cd4ba58..1741c01 100644
--- a/library/RSL_Types.ttcn
+++ b/library/RSL_Types.ttcn
@@ -404,6 +404,15 @@
 	}
 	type RSL_IE_FrameNumber RSL_IE_StartingTime;
 
+	/* compute the expected request reference for given RA + FN */
+	function f_compute_RSL_IE_FrameNumber(GsmFrameNumber fn) return RSL_IE_FrameNumber {
+		var RSL_IE_FrameNumber frame_nr;
+		frame_nr.t1_p := (fn / 1326) mod 32;
+		frame_nr.t2 := fn mod 26;
+		frame_nr.t3 := fn mod 51;
+		return frame_nr
+	}
+
 	/* 9.3.10 */
 	type record RSL_IE_L1Info {
 		uint5_t		ms_power_lvl,

-- 
To view, visit https://gerrit.osmocom.org/11562
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: I438fd3ee82d88498d928dbcc89ce9bd80d37ab64
Gerrit-Change-Number: 11562
Gerrit-PatchSet: 1
Gerrit-Owner: Pau Espin Pedrol <pespin at sysmocom.de>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20181031/2b5d735f/attachment.htm>


More information about the gerrit-log mailing list