gbproxy: Test for RA Capability procedure

Change-Id: If7e5a5cab1e445e0b4ef0466990e352143c31245
This commit is contained in:
Harald Welte 2020-11-16 09:16:17 +01:00 committed by Daniel Willmann
parent 78d8db98b7
commit 6dc2ac471b
2 changed files with 175 additions and 1 deletions

View File

@ -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() );
}

View File

@ -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 := (