diff options
author | Harald Welte <laforge@osmocom.org> | 2020-11-16 09:16:17 +0100 |
---|---|---|
committer | Daniel Willmann <dwillmann@sysmocom.de> | 2020-11-16 20:32:20 +0100 |
commit | 6dc2ac471b14849fe9e4d41b6bce4f18c443f72d (patch) | |
tree | 7bbf8814d7f1fda27d4ac38b84beeb68b8847667 | |
parent | 78d8db98b76a7d32df4952d6e4d607799075ee75 (diff) |
gbproxy: Test for RA Capability procedure
Change-Id: If7e5a5cab1e445e0b4ef0466990e352143c31245
-rw-r--r-- | gbproxy/GBProxy_Tests.ttcn | 35 | ||||
-rw-r--r-- | library/Osmocom_Gb_Types.ttcn | 141 |
2 files changed, 175 insertions, 1 deletions
diff --git a/gbproxy/GBProxy_Tests.ttcn b/gbproxy/GBProxy_Tests.ttcn index 8837a632..7d39e7cc 100644 --- a/gbproxy/GBProxy_Tests.ttcn +++ b/gbproxy/GBProxy_Tests.ttcn @@ -640,10 +640,45 @@ testcase TC_dl_unitdata() runs on test_CT f_cleanup(); } +private function f_TC_ra_capability(charstring id) runs on BSSGP_ConnHdlr { + var integer i; + + for (i := 0; i < 10; i := i+1) { + var template (value) PDU_BSSGP pdu_tx := ts_BSSGP_RA_CAP(g_pars.tlli, { ts_RaCapRec_BSSGP }); + /* we cannot use pdu_tx as there are some subtle differences in the length field :/ */ + var template (present) PDU_BSSGP pdu_rx := tr_BSSGP_RA_CAP(g_pars.tlli, { tr_RaCapRec_BSSGP }) + + SGSN[0].send(pdu_tx); + alt { + [] PCU[0].receive(pdu_rx); + [] PCU[0].receive { + setverdict(fail, "SGSN Received unexpected"); + mtc.stop; + } + } + } + setverdict(pass); +} +testcase TC_ra_capability() runs on test_CT +{ + var BSSGP_ConnHdlr vc_conn; + f_init(); + + vc_conn := f_start_handler(refers(f_TC_ra_capability), testcasename(), g_pcu, g_sgsn, 3); + vc_conn.done; + /* TODO: start multiple handlers (UEs) on various cells on same and other NSEs */ + + f_cleanup(); +} + + + + control { execute( TC_BVC_bringup() ); execute( TC_ul_unitdata() ); execute( TC_dl_unitdata() ); + execute( TC_ra_capability() ); } diff --git a/library/Osmocom_Gb_Types.ttcn b/library/Osmocom_Gb_Types.ttcn index 8271ced5..82fdb07b 100644 --- a/library/Osmocom_Gb_Types.ttcn +++ b/library/Osmocom_Gb_Types.ttcn @@ -929,6 +929,43 @@ octetstring sdu) := { return ret; } +template (value) Tag ts_BSSGP_IE_Tag(OCT1 tag) := { + iEI := '1E'O, + ext := '1'B, + lengthIndicator := { + length1 := 1 + }, + unstructured_Value := tag +} + +template (present) Tag tr_BSSGP_IE_Tag(template (present) OCT1 tag) := { + iEI := '1E'O, + ext := '1'B, + lengthIndicator := { + length1 := 1 + }, + unstructured_Value := tag +} + +template (value) RA_Cap_UPD_CAUSE ts_BSSGP_IE_RACU_Cause(template (value) OCT1 cause) := { + iEI := '1A'O, + ext := '1'B, + lengthIndicator := { + length1 := 1 + }, + rA_CAP_UPD_Cause_value := cause +} + +template (present) RA_Cap_UPD_CAUSE tr_BSSGP_IE_RACU_Cause(template (present) OCT1 cause) := { + iEI := '1A'O, + ext := '1'B, + lengthIndicator := { + length1 := 1 + }, + rA_CAP_UPD_Cause_value := cause +} + + template PDU_BSSGP ts_BVC_RESET(BssgpCause cause, BssgpBvci bvci, template BssgpCellId cell_id) := { pDU_BSSGP_BVC_RESET := { @@ -1204,6 +1241,48 @@ octetstring sdu) := { }, presenceBitMSRACap := '0'B }; + template (present) MSRACapabilityValuesRecord_BSSGP + tr_RaCapRec_BSSGP(template (present) BIT4 att := '0001'B /* E-GSM */, template MultislotCap_GPRS_BSSGP mscap_gprs := *, + template MultislotCap_EGPRS_BSSGP mscap_egprs := *) := { + mSRACapabilityValues := { + mSRACapabilityValuesExclude1111 := { + accessTechnType := att, /* E-GSM */ + accessCapabilities := { + lengthIndicator := ?, /* overwritten */ + accessCapabilities := { + rfPowerCapability := '001'B, /* FIXME */ + presenceBitA5 := ?, + a5bits := *, + esind := '1'B, + psbit := '0'B, + vgcs := '0'B, + vbs := '0'B, + presenceBitMultislot := '1'B, + multislotcap := { + presenceBitHscsd := '0'B, + hscsdmultislotclass := omit, + presenceBitGprs := ?, + gprsmultislot := mscap_gprs, + presenceBitSms := '0'B, + multislotCap_SMS := omit, + multislotCapAdditionsAfterRel97 := { + presenceBitEcsdmulti := '0'B, + ecsdmultislotclass := *, + presenceBitEgprsmulti := ?, + multislotCap_EGPRS := mscap_egprs, + presenceBitDtmGprsmulti := ?, + multislotCapdtmgprsmultislotsubclass := * + } + }, + accessCapAdditionsAfterRel97 := * + }, + spare_bits := * + } + } + }, + presenceBitMSRACap := '0'B + }; + template QoS_Profile_V t_defaultQos := { peak_Bit_Rate := int2oct(80, 2), @@ -1253,7 +1332,7 @@ octetstring sdu) := { return omit; } else { ret := { - iEI := '00'O, + iEI := '13'O, ext := '1'B, lengthIndicator := { length1 := 1 @@ -1264,6 +1343,21 @@ octetstring sdu) := { } } + function tr_BSSGP_IE_MSRAcap(template MSRadioAccessCapabilityV_BSSGP racap) return template MS_Radio_Access_Capability { + var template MS_Radio_Access_Capability ret; + if (istemplatekind(racap, "omit")) { + return omit; + } else { + ret := { + iEI := '13'O, + ext := ?, + lengthIndicator := ?, + mSRadioAccessCapabilityV_BSSGP := racap + } + return ret; + } + } + template PDU_BSSGP ts_BSSGP_DL_UD(GprsTlli tlli, octetstring pdu, template (omit) MSRadioAccessCapabilityV_BSSGP racap := omit, template (omit) IMSI_BSSGP imsi := omit) := { @@ -1589,6 +1683,51 @@ octetstring sdu) := { } } +/* 10.2.3 */ +template (value) PDU_BSSGP ts_BSSGP_RA_CAP(GprsTlli tlli, + template (omit) MSRadioAccessCapabilityV_BSSGP racap := omit) := { + pDU_BSSGP_RA_CAPABILITY := { + bssgpPduType := '02'O, + tLLI := ts_BSSGP_TLLI(tlli), + mS_Radio_Access_Capability := ts_BSSGP_IE_MSRAcap_omit(racap) + } +} +template (present) PDU_BSSGP tr_BSSGP_RA_CAP(template (present) GprsTlli tlli, + template MSRadioAccessCapabilityV_BSSGP racap) := { + pDU_BSSGP_RA_CAPABILITY := { + bssgpPduType := '02'O, + tLLI := ts_BSSGP_TLLI(tlli), + mS_Radio_Access_Capability := tr_BSSGP_IE_MSRAcap(racap) + } +} + + +/* 10.3.3 */ +template (value) PDU_BSSGP ts_BSSGP_RA_CAP_UPD(GprsTlli tlli, OCT1 tag) := { + pDU_BSSGP_RA_CAPABILITY_UPDATE := { + bssgpPduType := '08'O, + tLLI := ts_BSSGP_TLLI(tlli), + tag := ts_BSSGP_IE_Tag(tag) + } +} + +/* 10.3.4 */ +template (value) PDU_BSSGP +ts_BSSGP_RA_CAP_UPD_ACK(GprsTlli tlli, OCT1 tag, template (value) OCT1 cause, + template (omit) MSRadioAccessCapabilityV_BSSGP racap := omit) := { + pDU_BSSGP_RA_CAPABILITY_UPDATE_ACK := { + bssgpPduType := '09'O, + tLLI := ts_BSSGP_TLLI(tlli), + tag := ts_BSSGP_IE_Tag(tag), + iMSI := omit, + rA_Cap_UPDATE_CAUSE := ts_BSSGP_IE_RACU_Cause(cause), + mS_Radio_Access_Capability := ts_BSSGP_IE_MSRAcap_omit(racap) + } +} + + + + /* PDU permitted on PTP BVC only (TS 48.018 Section 5.4.1) */ template (present) PDU_BSSGP tr_BSSGP_PERMITTED_PTP_ONLY := ( |