summaryrefslogtreecommitdiffstats
path: root/sgsn
diff options
context:
space:
mode:
Diffstat (limited to 'sgsn')
-rw-r--r--sgsn/SGSN_Tests.ttcn73
1 files changed, 73 insertions, 0 deletions
diff --git a/sgsn/SGSN_Tests.ttcn b/sgsn/SGSN_Tests.ttcn
index 3f479da..0112483 100644
--- a/sgsn/SGSN_Tests.ttcn
+++ b/sgsn/SGSN_Tests.ttcn
@@ -1943,6 +1943,78 @@ testcase TC_attach_rau_a_b() runs on test_CT {
vc_conn.done;
}
+private function f_TC_attach_gmm_attach_req_while_gmm_attach(charstring id) runs on BSSGP_ConnHdlr {
+ var integer count_req := 0;
+ var MobileL3_CommonIE_Types.MobileIdentityLV mi;
+ var RoutingAreaIdentificationV rand_rai := f_random_RAI();
+ var BssgpDecoded bd;
+
+ f_send_l3_gmm_llc(ts_GMM_ATTACH_REQ(f_mi_get_lv(), rand_rai, true, false, omit, omit));
+
+ alt {
+ [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_REJECT(?))) {
+ setverdict(fail, "Unexpected GMM ATTACH REJECT");
+ mtc.stop;
+ }
+ [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ID_REQ('001'B))) {
+ mi := valueof(ts_MI_IMSI_LV(g_pars.imsi));
+ f_send_l3_gmm_llc(ts_GMM_ID_RESP(mi));
+ repeat;
+ }
+ [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ID_REQ('010'B))) {
+ /* send out a second GMM_Attach Request.
+ * If the SGSN follows the rules, this 2nd ATTACH REQ should be ignored, because
+ * of the same content */
+ f_send_l3_gmm_llc(ts_GMM_ATTACH_REQ(f_mi_get_lv(), rand_rai, true, false, omit, omit));
+ mi := valueof(ts_MI_IMEI_LV(g_pars.imei));
+ f_send_l3_gmm_llc(ts_GMM_ID_RESP(mi));
+ }
+ }
+ f_sleep(1.0);
+
+ /* we've sent already a IMEI answer, we should NOT asked again for IMEI */
+ alt {
+ [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ID_REQ('001'B))) {
+ mi := valueof(ts_MI_IMSI_LV(g_pars.imsi));
+ f_send_l3_gmm_llc(ts_GMM_ID_RESP(mi));
+ repeat;
+ }
+ [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ID_REQ('010'B))) {
+ setverdict(fail, "Unexpected GMM ID REQ (IMEI).");
+ mtc.stop;
+ }
+ [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_REJECT(?))) {
+ setverdict(fail, "Unexpected GMM ATTACH REJECT");
+ mtc.stop;
+ }
+ [] BSSGP[0].receive(tr_BD_L3_MT(tr_GMM_ATTACH_ACCEPT('001'B, ?, ?))) -> value bd {
+ f_process_attach_accept(bd.l3_mt.msgs.gprs_mm.attachAccept);
+ f_send_l3_gmm_llc(ts_GMM_ATTACH_COMPL);
+ setverdict(pass);
+ /* FIXME: Extract P-TMSI, if any. Only send Complete if necessary */
+ }
+ }
+}
+
+testcase TC_attach_gmm_attach_req_while_gmm_attach() runs on test_CT {
+ /* Testing if the SGSN ignore Attach Request with the exact same content */
+ /* MS -> SGSN: Attach Request IMSI
+ * MS <- SGSN: Identity Request IMSI (optional)
+ * MS -> SGSN: Identity Response IMSI (optional)
+ * MS <- SGSN: Identity Request IMEI
+ * MS -> SGSN: Attach Request (2nd)
+ * MS <- SGSN: Identity Response IMEI
+ * MS <- SGSN: Attach Accept
+ * MS -> SGSN: Attach Complete
+ */
+ var BSSGP_ConnHdlr vc_conn;
+ f_init();
+ f_sleep(1.0);
+ f_vty_config(SGSNVTY, "sgsn", "auth-policy accept-all");
+ vc_conn := f_start_handler(refers(f_TC_attach_gmm_attach_req_while_gmm_attach), testcasename(), g_gb, 39);
+ vc_conn.done;
+}
+
control {
execute( TC_attach() );
execute( TC_attach_mnc3() );
@@ -1985,6 +2057,7 @@ control {
execute( TC_attach_restart_ctr_create() );
execute( TC_attach_pdp_act_deact_mt_t3395_expire() );
execute( TC_attach_pdp_act_user_error_ind_ggsn() );
+ execute( TC_attach_gmm_attach_req_while_gmm_attach() );
}