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>