sgsn: derive altsteps from f_routing_area_update()
Change-Id: I7d5ec9c42a37a5746c36745ac738fd77e1632675
Related: SYS#6603, OS#6294
diff --git a/sgsn/SGSN_Tests.ttcn b/sgsn/SGSN_Tests.ttcn
index b8b5735..92b744f 100644
--- a/sgsn/SGSN_Tests.ttcn
+++ b/sgsn/SGSN_Tests.ttcn
@@ -2630,46 +2630,67 @@
f_cleanup();
}
-friend function f_routing_area_update(RoutingAreaIdentificationV old_ra, integer ran_index := 0) runs on BSSGP_ConnHdlr {
+friend altstep as_routing_area_update_gb(integer ran_index := 0) runs on BSSGP_ConnHdlr {
var PDU_L3_SGSN_MS l3_mt;
- var PDU_DTAP_PS_MT mt;
- var template (omit) OCT4 p_tmsi := omit;
- if (is_iu(ran_index)) {
- p_tmsi := g_pars.p_tmsi;
- }
- /* then send RAU */
- f_send_l3(ts_GMM_RAU_REQ(f_mi_get_lv(), GPRS_UPD_T_RA, old_ra, false, omit, omit, p_tmsi), ran_index);
- alt {
- [is_gb(ran_index)] BSSGP[ran_index].receive(tr_GMM_RAU_ACCEPT) -> value l3_mt {
+ [] BSSGP[ran_index].receive(tr_GMM_RAU_ACCEPT) -> value l3_mt {
f_process_rau_accept(l3_mt.msgs.gprs_mm.routingAreaUpdateAccept, ran_index);
f_send_l3(ts_GMM_RAU_COMPL, ran_index);
setverdict(pass);
}
- [is_iu(ran_index)] BSSAP.receive(tr_PDU_DTAP_PS_MT(tr_GMM_RAU_ACCEPT)) -> value mt {
+ [] BSSGP[ran_index].receive(tr_GMM_RAU_REJECT) {
+ setverdict(fail, "Unexpected RAU Reject");
+ mtc.stop;
+ }
+}
+friend altstep as_routing_area_update_iu(integer ran_index := 0) runs on BSSGP_ConnHdlr {
+ var PDU_DTAP_PS_MT mt;
+
+ [] BSSAP.receive(tr_PDU_DTAP_PS_MT(tr_GMM_RAU_ACCEPT)) -> value mt {
f_process_rau_accept(mt.dtap.msgs.gprs_mm.routingAreaUpdateAccept, ran_index);
f_send_l3(ts_GMM_RAU_COMPL, ran_index);
setverdict(pass);
}
-
- [is_gb(ran_index)] BSSGP[ran_index].receive(tr_GMM_RAU_REJECT) {
+ [] BSSAP.receive(tr_PDU_DTAP_PS_MT(tr_GMM_RAU_REJECT)) {
setverdict(fail, "Unexpected RAU Reject");
mtc.stop;
}
- [is_iu(ran_index)] BSSAP.receive(tr_PDU_DTAP_PS_MT(tr_GMM_RAU_REJECT)) {
- setverdict(fail, "Unexpected RAU Reject");
- mtc.stop;
- }
+ [] BSSAP.receive(tr_RANAP_SecurityModeCmd(uia_algs := ?,
+ uia_key := oct2bit(g_pars.vec.ik),
+ key_sts := ?)) {
+ var IntegrityProtectionAlgorithm uia_chosen := 0; /* 0 = standard_UMTS_integrity_algorithm_UIA1 */
+ BSSAP.send(ts_RANAP_SecurityModeComplete(uia_chosen));
+ BSSAP.receive(tr_RANAP_CommonId(imsi_hex2oct(g_pars.imsi)))
+ repeat;
+ }
+}
+friend altstep as_routing_area_update(integer ran_index := 0) runs on BSSGP_ConnHdlr {
+ [is_gb(ran_index)] as_routing_area_update_gb(ran_index);
+ [is_iu(ran_index)] as_routing_area_update_iu(ran_index);
+}
- [is_iu(ran_index)] BSSAP.receive(tr_RANAP_SecurityModeCmd(uia_algs := ?, uia_key := oct2bit(g_pars.vec.ik),
- key_sts := ?)) {
- var IntegrityProtectionAlgorithm uia_chosen := 0; /* 0 = standard_UMTS_integrity_algorithm_UIA1 */
- BSSAP.send(ts_RANAP_SecurityModeComplete(uia_chosen));
- BSSAP.receive(tr_RANAP_CommonId(imsi_hex2oct(g_pars.imsi)))
- repeat;
- }
+friend function f_routing_area_update(RoutingAreaIdentificationV old_ra,
+ GprsUpdateType upd_type := GPRS_UPD_T_RA,
+ integer ran_index := 0,
+ float Tval := 2.0) runs on BSSGP_ConnHdlr {
+ var template (omit) OCT4 p_tmsi := omit;
+ timer T := Tval;
+
+ if (is_iu(ran_index)) {
+ p_tmsi := g_pars.p_tmsi;
+ }
+
+ f_send_l3(ts_GMM_RAU_REQ(f_mi_get_lv(), upd_type, old_ra, p_tmsi := p_tmsi), ran_index);
+
+ T.start;
+ alt {
+ [] as_routing_area_update(ran_index) { setverdict(pass); }
[is_gb(ran_index)] BSSGP[ran_index].receive { repeat; }
[is_iu(ran_index)] BSSAP.receive { repeat; }
+ [] T.timeout {
+ setverdict(fail, "Timeout completing the RAU procedure");
+ mtc.stop;
+ }
}
}
@@ -2706,14 +2727,14 @@
f_TC_attach(id);
log("attach complete sending rau");
- f_routing_area_update(g_pars.ra, 0);
+ f_routing_area_update(g_pars.ra);
log("rau complete unregistering");
f_bssgp_client_unregister(g_pars.imsi);
f_bssgp_client_register(g_pars.imsi, g_pars.tlli, BSSGP_PROC[1]);
log("sending second RAU via different RA");
- f_routing_area_update(f_cellid_to_RAI(g_pars.bssgp_cell_id[1]), 1);
+ f_routing_area_update(f_cellid_to_RAI(g_pars.bssgp_cell_id[1]), ran_index := 1);
f_detach_mo(c_GMM_DTT_MO_GPRS, true, true, 1);
}