Change in osmo-ttcn3-hacks[master]: pcu: Introduce test TC_mo_ping_pong_with_ul_racap

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

pespin gerrit-no-reply at lists.osmocom.org
Fri Apr 24 17:10:06 UTC 2020


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


Change subject: pcu: Introduce test TC_mo_ping_pong_with_ul_racap
......................................................................

pcu: Introduce test TC_mo_ping_pong_with_ul_racap

Test sending MS RA capabilities through Packet Resource Request to
update GPRS multislot class.
EGPRS multislot will come in a later commit.

Change-Id: I5026d8b78a3fb82093956b65989d18fa6f6d5424
---
M library/L3_Templates.ttcn
M library/RLCMAC_CSN1_Types.ttcn
M library/RLCMAC_Types.ttcn
M pcu/PCU_Tests_RAW.ttcn
4 files changed, 178 insertions(+), 52 deletions(-)



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

diff --git a/library/L3_Templates.ttcn b/library/L3_Templates.ttcn
index 7c22415..8af9acc 100644
--- a/library/L3_Templates.ttcn
+++ b/library/L3_Templates.ttcn
@@ -20,6 +20,7 @@
 import from MobileL3_CC_Types all;
 import from MobileL3_GMM_SM_Types all;
 import from MobileL3_SMS_Types all;
+import from RLCMAC_CSN1_Types all;
 
 /* TS 24.007 Table 11.3 TI Flag */
 const BIT1 c_TIF_ORIG := '0'B;
@@ -2012,33 +2013,6 @@
 	cnSpecificDRXCycleLength := '0000'B /* SI value used */
 };
 
-template (value) AccessCapabilitiesStruct ts_AccesssCap := {
-	lengthIndicator := 0, /* overwritten */
-	accessCapabilities := {
-		rfPowerCapability := '001'B, /* FIXME */
-		presenceBitA5 := '0'B,
-		a5bits := omit,
-		esind := '1'B,
-		psbit := '0'B,
-		vgcs := '0'B,
-		vbs := '0'B,
-		presenceBitMultislot := '0'B,
-		multislotcap := omit,
-		accessCapAdditionsAfterRel97 := omit
-	},
-	spare_bits := omit
-}
-
-template (value) MSRACapabilityValuesRecord ts_RaCapRec(BIT4 att) := {
-	mSRACapabilityValues := {
-		mSRACapabilityValuesExclude1111 := {
-			accessTechnType := '0001'B, /* E-GSM */
-			accessCapabilities := ts_AccesssCap
-		}
-	},
-	presenceBitMSRACap := '0'B
-};
-
 template (value) MSRadioAccessCapabilityLV ts_MS_RaCapa := {
 	lengthIndicator := 0, /* overwritten */
 	msRadioAccessCapabilityV := {
diff --git a/library/RLCMAC_CSN1_Types.ttcn b/library/RLCMAC_CSN1_Types.ttcn
index 9ceb339..45c1f3a 100644
--- a/library/RLCMAC_CSN1_Types.ttcn
+++ b/library/RLCMAC_CSN1_Types.ttcn
@@ -420,10 +420,9 @@
 		variant (tlli) "BYTEORDER(first)"
 	};
 
-	/* 12.30 MS Radio Access Capability 2 (feature bitmask)
-	 * (value part, see 3GPP TS 24.008, 10.5.5.12a) */
+	/* TS 44.060 sec 12.30 MS Radio Access Capability 2
+	 * (for value part, see 3GPP TS 24.008 sec 10.5.5.12a and table 10.5.146) */
 	type union MSRadioAccCap2 {
-		/* TODO: see table 10.5.146/3GPP TS 24.008 */
 		MSRadioAccessCapabilityV     msRadioAccessCapabilityV
 	};
 
@@ -676,29 +675,107 @@
 		}
 	}
 
-	template (value) RlcmacUlCtrlMsg ts_RlcMacUlCtrl_PKT_RES_REQ(
-		GprsTlli tlli, ChannelReqDescription ch_req_desc,
-		RlcAccessType acc_type := RLC_ACC_TYPE_TWO_PHASE
-	) := {
+	private function f_presece_bit_MultislotCap_GPRS(template (omit) MultislotCap_GPRS mscap_gprs) return BIT1 {
+		if (istemplatekind(mscap_gprs, "omit")) {
+			return '0'B;
+		}
+		return '1'B;
+	}
+	private function f_presece_bit_MultislotCap_EGPRS(template (omit) MultislotCap_EGPRS mscap_egprs) return BIT1 {
+		if (istemplatekind(mscap_egprs, "omit")) {
+			return '0'B;
+		}
+		return '1'B;
+	}
+	template (value) MSRACapabilityValuesRecord ts_RaCapRec(BIT4 att := '0001'B /* E-GSM */, template (omit) MultislotCap_GPRS mscap_gprs := omit, template (omit) MultislotCap_EGPRS mscap_egprs := omit) := {
+		mSRACapabilityValues := {
+			mSRACapabilityValuesExclude1111 := {
+				accessTechnType := att, /* E-GSM */
+				accessCapabilities := {
+					lengthIndicator := 0, /* overwritten */
+					accessCapabilities := {
+						rfPowerCapability := '001'B, /* FIXME */
+						presenceBitA5 := '0'B,
+						a5bits := omit,
+						esind := '1'B,
+						psbit := '0'B,
+						vgcs := '0'B,
+						vbs := '0'B,
+						presenceBitMultislot := '1'B,
+						multislotcap := {
+							presenceBitHscsd := '0'B,
+							hscsdmultislotclass := omit,
+							presenceBitGprs := f_presece_bit_MultislotCap_GPRS(mscap_gprs),
+							gprsmultislot := mscap_gprs,
+							presenceBitSms := '0'B,
+							multislotCap_SMS := omit,
+							multislotCapAdditionsAfterRel97 := {
+									presenceBitEcsdmulti := '0'B,
+									ecsdmultislotclass := omit,
+									presenceBitEgprsmulti := f_presece_bit_MultislotCap_EGPRS(mscap_egprs),
+									multislotCap_EGPRS := mscap_egprs,
+									presenceBitDtmGprsmulti := '0'B,
+									multislotCapdtmgprsmultislotsubclass := omit
+							}
+						},
+						accessCapAdditionsAfterRel97 := omit
+					},
+					spare_bits := omit
+				}
+			}
+		},
+		presenceBitMSRACap := '0'B
+	};
+
+	private function f_presece_bit_MSRadioAccessCapabilityV(template (omit) MSRadioAccessCapabilityV ms_rac) return BIT1 {
+		if (istemplatekind(ms_rac, "omit")) {
+			return '0'B;
+		}
+		return '1'B;
+	}
+
+	private function f_template_MSRadioAccessCapabilityV_to_MSRadioAccCap2(template (omit) MSRadioAccessCapabilityV ms_rac) return template (omit) MSRadioAccCap2 {
+		var template (omit) MSRadioAccCap2 ms_rac2 := omit;
+		if (istemplatekind(ms_rac, "omit")) {
+			return ms_rac2;
+		}
+		ms_rac2 := { msRadioAccessCapabilityV := ms_rac };
+		return ms_rac2;
+	}
+
+	private const ChannelReqDescription c_ChReqDesc_default := {
+		peak_tput_class := 0,
+		priority := 0,
+		rlc_mode := RLC_MODE_UNACKNOWLEDGED,
+		llc_pdu_type := LLC_PDU_IS_NOT_SACK_OR_ACK,
+		RlcOctetCount := 0
+	}
+
+	/* TS 44.060 sec 11.2.16 */
+	template (value) RlcmacUlCtrlMsg ts_RlcMacUlCtrl_PKT_RES_REQ(GprsTlli tlli,
+						     template (omit) MSRadioAccessCapabilityV ms_rac,
+						     ChannelReqDescription ch_req_desc := c_ChReqDesc_default,
+						     RlcAccessType acc_type := RLC_ACC_TYPE_TWO_PHASE)
+	:= {
 		msg_type := PACKET_RESOURCE_REQUEST,
 		u := {
 			resource_req := {
-				acc_type_presence := '1'B,
-				acc_type := acc_type,
-				id_type := '1'B,
-				id := { tlli := tlli },
-				ms_rac2_presence := '0'B,
-				ms_rac2 := omit,
-				ch_req_desc := ch_req_desc,
-				change_mark_presence := '0'B,
-				change_mark := omit,
-				C_val := '000000'B,
-				sign_var_presence := '0'B,
-				sign_var := omit,
-				I_levels := {
-					iNone, iNone, iNone, iNone,
-					iNone, iNone, iNone, iNone
-				}
+					acc_type_presence := '1'B,
+					acc_type := acc_type,
+					id_type := '1'B,
+					id := { tlli := tlli },
+					ms_rac2_presence := f_presece_bit_MSRadioAccessCapabilityV(ms_rac),
+					ms_rac2 := f_template_MSRadioAccessCapabilityV_to_MSRadioAccCap2(ms_rac),
+					ch_req_desc := ch_req_desc,
+					change_mark_presence := '0'B,
+					change_mark := omit,
+					C_val := '000000'B,
+					sign_var_presence := '0'B,
+					sign_var := omit,
+					I_levels := {
+							iNone, iNone, iNone, iNone,
+							iNone, iNone, iNone, iNone
+					}
 			}
 		}
 	}
diff --git a/library/RLCMAC_Types.ttcn b/library/RLCMAC_Types.ttcn
index dbcf4ae..086eb7b 100644
--- a/library/RLCMAC_Types.ttcn
+++ b/library/RLCMAC_Types.ttcn
@@ -13,6 +13,7 @@
 	import from General_Types all;
 	import from Osmocom_Types all;
 	import from GSM_Types all;
+	import from MobileL3_GMM_SM_Types all;
 	import from RLCMAC_CSN1_Types all;
 
 	/* TS 44.060 10.4.7 */
@@ -445,6 +446,32 @@
 		}
 	}
 
+	template RlcmacDlBlock tr_RLCMAC_UL_PACKET_ASS(template uint3_t usf := ?) := {
+		ctrl := {
+			mac_hdr := {
+				payload_type := (MAC_PT_RLCMAC_NO_OPT, MAC_PT_RLCMAC_OPT),
+				rrbp:= ?,
+				rrbp_valid := ?,
+				usf := usf
+			},
+			opt := *,
+			payload := {
+				msg_type := PACKET_UL_ASSIGNMENT,
+				u := {
+					ul_assignment := {
+						page_mode := ?,
+						persistence_levels_present := ?,
+						persistence_levels := *,
+						identity := ?,
+						is_egprs := ?,  /* msg escape */
+						gprs := *
+					}
+				}
+			}
+		}
+	}
+
+
 	/* Receive Template for Uplink ACK/NACK */
 	template RlcmacDlBlock tr_RLCMAC_UL_ACK_NACK(template uint5_t ul_tfi, template GprsTlli tlli := ?) := {
 		ctrl := {
diff --git a/pcu/PCU_Tests_RAW.ttcn b/pcu/PCU_Tests_RAW.ttcn
index 8e1d349..7c525e2 100644
--- a/pcu/PCU_Tests_RAW.ttcn
+++ b/pcu/PCU_Tests_RAW.ttcn
@@ -26,6 +26,7 @@
 import from Osmocom_VTY_Functions all;
 import from TELNETasp_PortType all;
 
+import from MobileL3_GMM_SM_Types all;
 import from RLCMAC_CSN1_Types all;
 import from RLCMAC_Types all;
 
@@ -491,6 +492,20 @@
 	poll_fn := dl_fn + f_rrbp_fn_delay(dl_block.ctrl.mac_hdr.rrbp);
 }
 
+private function f_rx_rlcmac_dl_block_exp_pkt_ul_ass(out RlcmacDlBlock dl_block, out uint32_t poll_fn)
+runs on RAW_PCU_Test_CT {
+        var uint32_t dl_fn;
+
+        f_rx_rlcmac_dl_block(dl_block, dl_fn);
+        if (not match(dl_block, tr_RLCMAC_UL_PACKET_ASS())) {
+                setverdict(fail, "Failed to match Packet Uplink Assignment");
+                mtc.stop;
+        }
+
+        poll_fn := dl_fn + f_rrbp_fn_delay(dl_block.ctrl.mac_hdr.rrbp);
+}
+
+
 private function f_rx_rlcmac_dl_block_exp_pkt_pag_req(out RlcmacDlBlock dl_block)
 runs on RAW_PCU_Test_CT {
 	var uint32_t dl_fn;
@@ -1164,7 +1179,7 @@
 /* Test scenario where MS wants to send some data on PDCH against SGSN and it is
  * answered, so TBFs for uplink and later for downlink are created.
  */
-testcase TC_mo_ping_pong() runs on RAW_PCU_Test_CT {
+private function f_TC_mo_ping_pong(template (omit) MSRadioAccessCapabilityV ms_racap := omit, template (present) CodingScheme exp_cs_mcs := ?) runs on RAW_PCU_Test_CT {
 	var GsmRrMessage rr_imm_ass;
 	var PacketUlAssign ul_tbf_ass;
 	var PacketDlAssign dl_tbf_ass;
@@ -1198,6 +1213,18 @@
 		mtc.stop;
 	}
 
+	if (not istemplatekind(ms_racap, "omit")) {
+		/* Send PACKET RESOURCE REQUEST to upgrade to EGPRS
+		 * (see 3GPP TS 04.60 "7.1.3.1 Initiation of the Packet resource request procedure")
+		 */
+		f_tx_rlcmac_ul_block(ts_RLC_UL_CTRL_ACK(valueof(ts_RlcMacUlCtrl_PKT_RES_REQ(tlli, ms_racap))), 0);
+		f_rx_rlcmac_dl_block_exp_pkt_ul_ass(dl_block, sched_fn);
+		if (dl_block.ctrl.payload.u.ul_assignment.identity.tlli.tlli != tlli) {
+			setverdict(fail, "Wrong TLLI ", dl_block.ctrl.payload.u.ul_assignment.identity.tlli, " received vs exp ", tlli);
+			mtc.stop;
+		}
+	}
+
 	/* Send one UL block and make sure it is ACKED fine */
 	f_tx_rlcmac_ul_n_blocks(ul_tbf_ass, 1);
 	f_rx_rlcmac_dl_block_exp_ack_nack(dl_block, sched_fn);
@@ -1219,13 +1246,33 @@
 
 	/* Wait timer X2002 and DL block is available after CCCH IMM ASS: */
 	f_sleep(X2002);
-	f_rx_rlcmac_dl_block_exp_data(dl_block, sched_fn, data, 0);
+	f_rx_rlcmac_dl_block_exp_data(dl_block, sched_fn, data, 0, exp_cs_mcs);
 
 	/* ACK the DL block */
 	f_acknackdesc_ack_block(ack_nack_desc, dl_block.data.mac_hdr.hdr_ext.bsn, '1'B);
 	f_tx_rlcmac_ul_block(ts_RLCMAC_DL_ACK_NACK(dl_block.data.mac_hdr.hdr_ext.tfi, ack_nack_desc), 0, sched_fn);
 }
 
+/* Test scenario where MS wants to send some data on PDCH against SGSN and it is
+ * answered, so TBFs for uplink and later for downlink are created.
+ */
+testcase TC_mo_ping_pong() runs on RAW_PCU_Test_CT {
+	var CodingScheme exp_cs_mcs := CS_1;
+	f_TC_mo_ping_pong(omit, exp_cs_mcs);
+}
+
+
+testcase TC_mo_ping_pong_with_ul_racap() runs on RAW_PCU_Test_CT {
+	var MultislotCap_GPRS mscap_gprs := {
+		gprsmultislotclass := '00011'B,
+		gprsextendeddynalloccap := '0'B
+	};
+	var MSRadioAccessCapabilityV ms_racap := { valueof(ts_RaCapRec('0001'B /* E-GSM */, mscap_gprs, omit)) };
+	var CodingScheme exp_cs_mcs := CS_2;
+
+	f_TC_mo_ping_pong(ms_racap, exp_cs_mcs);
+}
+
 /* Test scenario where SGSN wants to send some data against MS and it is
  * answered by the MS on PDCH, so TBFs for downlink and later for uplink are created.
  */
@@ -1573,6 +1620,7 @@
 	execute( TC_t3169() );
 	execute( TC_t3193() );
 	execute( TC_mo_ping_pong() );
+	execute( TC_mo_ping_pong_with_ul_racap() );
 	execute( TC_mt_ping_pong() );
 	execute( TC_mt_ping_pong_with_dl_racap() );
 	execute( TC_imm_ass_dl_block_retrans() );

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/17935
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: I5026d8b78a3fb82093956b65989d18fa6f6d5424
Gerrit-Change-Number: 17935
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20200424/6b92d62a/attachment.htm>


More information about the gerrit-log mailing list