aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@osmocom.org>2020-11-16 09:16:17 +0100
committerDaniel Willmann <dwillmann@sysmocom.de>2020-11-16 20:32:20 +0100
commit6dc2ac471b14849fe9e4d41b6bce4f18c443f72d (patch)
tree7bbf8814d7f1fda27d4ac38b84beeb68b8847667
parent78d8db98b76a7d32df4952d6e4d607799075ee75 (diff)
gbproxy: Test for RA Capability procedure
-rw-r--r--gbproxy/GBProxy_Tests.ttcn35
-rw-r--r--library/Osmocom_Gb_Types.ttcn141
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 := (