From a183a5ddc2bd0ddcef19129c7277a1611369ca26 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Thu, 9 May 2019 13:40:52 +0200 Subject: 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 --- msc/BSC_ConnectionHandler.ttcn | 43 +++++++++++++++++++++++------------------- 1 file 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))); } -- cgit v1.2.3