lynxis lazus has submitted this change. ( 
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/38397?usp=email )

Change subject: SGSN: BSSGP_ConnHdlr: GMM Service Request: handle PMM IDLE UE 
correct
......................................................................

SGSN: BSSGP_ConnHdlr: GMM Service Request: handle PMM IDLE UE correct

24.008: 4.7.13.3: explicitly mention the completion of the low layer security 
to be an implicit
Security Command Accept if the UE is in PMM Idle.
Extend the as_service_request() to handle both cases when UE is in PMM-IDLE as 
well in
PMM-CONNECTED.

Change-Id: I29237997e414aea80f254247da54f909410a4b36
---
M sgsn/BSSGP_ConnHdlr.ttcn
1 file changed, 30 insertions(+), 6 deletions(-)

Approvals:
  pespin: Looks good to me, but someone else must approve
  laforge: Looks good to me, approved
  Jenkins Builder: Verified




diff --git a/sgsn/BSSGP_ConnHdlr.ttcn b/sgsn/BSSGP_ConnHdlr.ttcn
index 2a434aa..82788f5 100644
--- a/sgsn/BSSGP_ConnHdlr.ttcn
+++ b/sgsn/BSSGP_ConnHdlr.ttcn
@@ -618,24 +618,48 @@
        }
 }

-/* Iu only */
-altstep as_service_request(integer ran_index := 0) runs on BSSGP_ConnHdlr {
+/* Iu only
+ *
+ * Handle a service request for a UE in PMM_IDLE or PMM_CONNECTED depending on 
exp_service_acc
+ * Depending on the PMM state:
+ * a) PMM_IDLE: The network will do a SecurityModeCommand on Iu, which the UE 
will treat as an implicit Service Accept
+ * b) PMM_CONNECTED: The Iu connection is already secured, do an explicit 
Service Accept
+ *
+ * NOTE: The old osmo-sgsn will always respond with a ServiceAccept even when 
the spec is clear this is not needed.
+ */
+altstep as_service_request(boolean exp_service_acc := true, integer ran_index 
:= 0) runs on BSSGP_ConnHdlr {
        var PDU_DTAP_PS_MT mt;

-       [] BSSAP.receive(tr_PDU_DTAP_PS_MT(tr_GMM_SERVICE_ACC)) -> value mt {
+       [exp_service_acc] BSSAP.receive(tr_PDU_DTAP_PS_MT(tr_GMM_SERVICE_ACC)) 
-> value mt {
                setverdict(pass);
                }
+       [not exp_service_acc] 
BSSAP.receive(tr_PDU_DTAP_PS_MT(tr_GMM_SERVICE_ACC)) -> value mt {
+               setverdict(fail, "Unexpected Service Accept");
+               mtc.stop;
+               }
        [] BSSAP.receive(tr_PDU_DTAP_PS_MT(tr_GMM_SERVICE_REJ)) {
                setverdict(fail, "Unexpected Service Reject");
                mtc.stop;
                }
+       /* 24.008 4.7.13.3: a SecurityModeCommand is an implicit Service Accept 
if UE was in PMM-IDLE */
        [] 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;
+               if (not exp_service_acc) {
+                       /* Because we stop processing early, we need to consume 
the CommonID */
+                       
BSSAP.receive(tr_RANAP_CommonId(imsi_hex2oct(g_pars.imsi)));
+                       setverdict(pass);
+               } else {
+                       /* This repeat would be wrong if you follow the spec 
correct. Because:
+                        * a) the UE is in PMM Idle and in this case the 
exp_service_acc would be true
+                        * b) the UE is in PMM Connected and in this case the 
Iu Connection should be already secure and this would fail.
+                        * The old osmo-sgsn is doing for UE in PMM Idle both a 
Security Command and a Service Accept, after the VLR change, the
+                        * osmo-sgsn will follow the spec correct.
+                        */
+                       repeat;
+               }
        }
 }

@@ -671,7 +695,7 @@
        }

        alt {
-       [] as_service_request(ran_index) { setverdict(pass); }
+       [] as_service_request(exp_service_acc := true, ran_index := ran_index) 
{ setverdict(pass); }
        [] BSSAP.receive { repeat; }
        [] T.timeout {
                Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,

--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/38397?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings?usp=email

Gerrit-MessageType: merged
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I29237997e414aea80f254247da54f909410a4b36
Gerrit-Change-Number: 38397
Gerrit-PatchSet: 8
Gerrit-Owner: lynxis lazus <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <[email protected]>
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-Reviewer: lynxis lazus <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>

Reply via email to