aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2019-05-09 13:40:52 +0200
committerHarald Welte <laforge@gnumonks.org>2019-05-11 12:26:49 +0200
commita183a5ddc2bd0ddcef19129c7277a1611369ca26 (patch)
tree4c60f9ce94c5777f6967513bb405a168b91df089
parentd29a64c6d347e0d9eb63f667d02d95511acf810e (diff)
msc: Separate as_GSUP_SAI from f_mm_auth
In some cases we might want to match on (and perform) the GSUP SEND AUTH INFO without also expecting/performing a MM authentication on the Iu/A interface. Hence it makes sense to split those two. Change-Id: I7b298d589930bab976b478ac84553a6352f25c93
-rw-r--r--msc/BSC_ConnectionHandler.ttcn43
1 files changed, 24 insertions, 19 deletions
diff --git a/msc/BSC_ConnectionHandler.ttcn b/msc/BSC_ConnectionHandler.ttcn
index 9fc06169..93a311e6 100644
--- a/msc/BSC_ConnectionHandler.ttcn
+++ b/msc/BSC_ConnectionHandler.ttcn
@@ -379,34 +379,39 @@ private function f_build_lu(MobileIdentityLV mi) runs on BSC_ConnHdlr return PDU
return l3_info;
}
+altstep as_GSUP_SAI() runs on BSC_ConnHdlr {
+var GSUP_IE auth_tuple;
+[] GSUP.receive(tr_GSUP_SAI_REQ(g_pars.imsi)) {
+ if (g_pars.use_umts_aka) {
+ g_pars.vec := f_gen_auth_vec_3g();
+ auth_tuple := valueof(ts_GSUP_IE_AuthTuple2G3G(g_pars.vec.rand,
+ g_pars.vec.sres,
+ g_pars.vec.kc,
+ g_pars.vec.ik,
+ g_pars.vec.ck,
+ g_pars.vec.autn,
+ g_pars.vec.res));
+ GSUP.send(ts_GSUP_SAI_RES(g_pars.imsi, auth_tuple));
+ } else {
+ g_pars.vec := f_gen_auth_vec_2g();
+ auth_tuple := valueof(ts_GSUP_IE_AuthTuple2G(g_pars.vec.rand,
+ g_pars.vec.sres,
+ g_pars.vec.kc));
+ GSUP.send(ts_GSUP_SAI_RES(g_pars.imsi, auth_tuple));
+ }
+ }
+}
+
function f_mm_auth() runs on BSC_ConnHdlr
{
if (g_pars.net.expect_auth) {
- var GSUP_IE auth_tuple;
- GSUP.receive(tr_GSUP_SAI_REQ(g_pars.imsi));
-
+ as_GSUP_SAI();
if (g_pars.use_umts_aka) {
- g_pars.vec := f_gen_auth_vec_3g();
- auth_tuple := valueof(ts_GSUP_IE_AuthTuple2G3G(g_pars.vec.rand,
- g_pars.vec.sres,
- g_pars.vec.kc,
- g_pars.vec.ik,
- g_pars.vec.ck,
- g_pars.vec.autn,
- g_pars.vec.res));
- GSUP.send(ts_GSUP_SAI_RES(g_pars.imsi, auth_tuple));
-
BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_MM_AUTH_REQ_3G(g_pars.vec.rand, g_pars.vec.autn)));
var OCT4 res := substr(g_pars.vec.res, 0, 4);
var OCT4 xres := substr(g_pars.vec.res, 4, 4);
BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MT_MM_AUTH_RESP_3G(res, xres)));
} else {
- g_pars.vec := f_gen_auth_vec_2g();
- auth_tuple := valueof(ts_GSUP_IE_AuthTuple2G(g_pars.vec.rand,
- g_pars.vec.sres,
- g_pars.vec.kc));
- GSUP.send(ts_GSUP_SAI_RES(g_pars.imsi, auth_tuple));
-
BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_MM_AUTH_REQ(g_pars.vec.rand)));
BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MT_MM_AUTH_RESP_2G(g_pars.vec.sres)));
}