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.orgpespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/16677 )
Change subject: pcu: WIP EGPRS
......................................................................
pcu: WIP EGPRS
Change-Id: I3b36d20b5350c8011fd5b4cd2bb2eadd08b74823
---
M library/RLCMAC_CSN1_Types.ttcn
M library/RLCMAC_Types.ttcn
M pcu/PCU_Tests_RAW.ttcn
3 files changed, 204 insertions(+), 3 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/77/16677/1
diff --git a/library/RLCMAC_CSN1_Types.ttcn b/library/RLCMAC_CSN1_Types.ttcn
index ea2edf6..121d350 100644
--- a/library/RLCMAC_CSN1_Types.ttcn
+++ b/library/RLCMAC_CSN1_Types.ttcn
@@ -16,6 +16,7 @@
import from General_Types all;
import from Osmocom_Types all;
import from GSM_Types all;
+ import from MobileL3_GMM_SM_Types all;
/* TS 44.060 11.2.0.1 */
type enumerated RlcmacDlCtrlMsgType {
@@ -418,7 +419,7 @@
* (value part, see 3GPP TS 24.008, 10.5.5.12a) */
type union MSRadioAccCap2 {
/* TODO: see table 10.5.146/3GPP TS 24.008 */
- bitstring other
+ MSRadioAccessCapabilityV msRadioAccessCapabilityV
};
/* Table 11.2.16.2 Access Type */
@@ -510,6 +511,14 @@
uint16_t RlcOctetCount
} with { variant "" };
+ 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
+ }
+
/* 12.8 Frequency Parameters */
type record FreqIndirect {
uint6_t maio,
diff --git a/library/RLCMAC_Types.ttcn b/library/RLCMAC_Types.ttcn
index 8f9f2a5..37956e8 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 */
@@ -289,6 +290,43 @@
}
}
+ /* TS 44.016 sec 11.2.16 */
+ template RlcmacUlBlock ts_RLCMAC_PKT_RES_REQ(GprsTlli tlli,
+ MSRadioAccessCapabilityV ms_rac,
+ ChannelReqDescription ch_req_desc := c_ChReqDesc_default,
+ RlcAccessType acc_type := RLC_ACC_TYPE_TWO_PHASE) := {
+ ctrl := {
+ mac_hdr := {
+ payload_type := MAC_PT_RLCMAC_NO_OPT,
+ spare := '00000'B,
+ retry := false
+ },
+ payload := {
+ 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 := '1'B,
+ ms_rac2 := { msRadioAccessCapabilityV := 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
+ }
+ }
+ }
+ }
+ }
+ }
+
/* Template for uplink Data block */
template RlcmacUlBlock t_RLCMAC_UL_DATA(template uint5_t tfi, template uint4_t cv, template uint7_t bsn,
template LlcBlocks blocks := {}, template boolean stall := false) := {
@@ -384,6 +422,31 @@
}
}
+ 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 c800d43..16131f4 100644
--- a/pcu/PCU_Tests_RAW.ttcn
+++ b/pcu/PCU_Tests_RAW.ttcn
@@ -28,6 +28,7 @@
import from RLCMAC_Types all;
import from MobileL3_CommonIE_Types all;
+import from MobileL3_GMM_SM_Types all;
import from L3_Templates all;
import from NS_Types all;
@@ -818,7 +819,7 @@
}
}
-private function f_rx_rlcmac_dl_block_exp_pkt_ass(out RlcmacDlBlock dl_block, out uint32_t poll_fn)
+private function f_rx_rlcmac_dl_block_exp_pkt_dl_ass(out RlcmacDlBlock dl_block, out uint32_t poll_fn)
runs on RAW_PCU_Test_CT {
var uint32_t dl_fn;
@@ -831,6 +832,19 @@
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;
@@ -1492,7 +1506,7 @@
(T3192 in MS) was started and until it fires the MS will be abailable
on PDCH in case new data arrives from SGSN. Let's verify it: */
BSSGP[0].send(ts_BSSGP_DL_UD(tlli, data));
- f_rx_rlcmac_dl_block_exp_pkt_ass(dl_block, sched_fn);
+ f_rx_rlcmac_dl_block_exp_pkt_dl_ass(dl_block, sched_fn);
f_tx_rlcmac_ul_block(ts_RLCMAC_CTRL_ACK(tlli), 0, sched_fn);
/* Now that we confirmed the new assignment in the dl-tbf, lets receive the data and ack it */
@@ -1566,6 +1580,120 @@
f_tx_rlcmac_ul_block(ts_RLCMAC_DL_ACK_NACK(dl_block.data.mac_hdr.hdr_ext.tfi, ack_nack_desc), 0, sched_fn);
}
+
+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_RaCapRecEGPRS(BIT4 att := '0001'B /* E-GSM */, MultislotCap_GPRS mscap_gprs, MultislotCap_EGPRS mscap_egprs) := {
+ 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 := '1'B,
+ gprsmultislot := mscap_gprs,
+ presenceBitSms := '0'B,
+ multislotCap_SMS := omit,
+ multislotCapAdditionsAfterRel97 := {
+ presenceBitEcsdmulti := '0'B,
+ ecsdmultislotclass := omit,
+ presenceBitEgprsmulti := '1'B,
+ multislotCap_EGPRS := mscap_egprs,
+ presenceBitDtmGprsmulti := '0'B,
+ multislotCapdtmgprsmultislotsubclass := omit
+ }
+ },
+ accessCapAdditionsAfterRel97 := omit
+ },
+ spare_bits := omit
+ }
+ }
+ },
+ presenceBitMSRACap := '0'B
+};
+
+/* 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_egprs() runs on RAW_PCU_Test_CT {
+ var GsmRrMessage rr_imm_ass;
+ var PacketUlAssign ul_tbf_ass;
+ var PacketDlAssign dl_tbf_ass;
+ var RlcmacDlBlock dl_block;
+ var PCUIF_Message pcu_msg;
+ var octetstring data := f_rnd_octstring(10);
+ var boolean ok;
+ var uint32_t sched_fn;
+ var OCT4 tlli := '00000001'O;
+ var AckNackDescription ack_nack_desc := valueof(t_AckNackDescription_init);
+ var MultislotCap_GPRS mscap_gprs := {
+ gprsmultislotclass := '00001'B,
+ gprsextendeddynalloccap := '0'B
+ } ;
+ var MultislotCap_EGPRS mscap_egprs := {
+ egprsmultislotclass := '00001'B,
+ egprsextendeddynalloccap := '0'B
+ } ;
+ var MSRadioAccessCapabilityV ms_racap := { valueof(ts_RaCapRecEGPRS('0001'B /* E-GSM */, mscap_gprs, mscap_egprs)) };
+
+ /* Initialize NS/BSSGP side */
+ f_init_bssgp();
+
+ /* Initialize the PCU interface abstraction */
+ f_init_raw(testcasename());
+
+ /* Establish BSSGP connection to the PCU */
+ f_bssgp_establish();
+ f_bssgp_client_llgmm_assign('FFFFFFFF'O, tlli);
+
+ /* Establish an Uplink TBF */
+ ok := f_establish_tbf(rr_imm_ass);
+ if (not ok) {
+ setverdict(fail, "Failed to establish TBF");
+ mtc.stop;
+ }
+ ok := f_imm_ass_verify_ul_tbf_ass(rr_imm_ass, ul_tbf_ass);
+ if (not ok) {
+ setverdict(fail, "Immediate Assignment not an Uplink TBF");
+ mtc.stop;
+ }
+
+ /* Send PACKET RESOURCE REQUEST to upgrade to EGPRS */
+ f_tx_rlcmac_ul_block(ts_RLCMAC_PKT_RES_REQ(tlli, ms_racap), 0);
+
+ f_rx_rlcmac_dl_block_exp_pkt_ul_ass(dl_block, sched_fn);
+ f_tx_rlcmac_ul_block(ts_RLCMAC_CTRL_ACK(tlli), 0, sched_fn);
+ ////////////////////////
+
+ f_sleep(3.0);
+}
+
/* Verify that if PCU doesn't get an ACK for first DL block after IMM ASS, it
* will retry by retransmitting both the IMM ASS + DL block after poll (ack)
* timeout occurs (specified by sent RRBP on DL block). */
@@ -1793,6 +1921,7 @@
execute( TC_t3169() );
execute( TC_t3193() );
execute( TC_mo_ping_pong() );
+ execute( TC_mo_ping_pong_egprs() );
execute( TC_imm_ass_dl_block_retrans() );
execute( TC_paging_cs_from_bts() );
execute (TC_paging_cs_from_sgsn_sign() );
--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/16677
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: I3b36d20b5350c8011fd5b4cd2bb2eadd08b74823
Gerrit-Change-Number: 16677
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/20191224/f5259279/attachment.htm>