mme: Add code to derive NAS token from NAS ul_count
NAS Token is derived from kasme and NAS ul_count as specified in 3GPP TS
33.401 A.9, and its LSB 16 bits passed to the network when mapping the GUTI to
RAI+PTMSI+PTIMSI_SIG.
Take the chance to move guti2rai_ptmsi() up to before the place it is
used.
Change-Id: I5e6003a2fe3e74cc93cfe4a288e6c114aa288d0b
diff --git a/library/S1AP_Emulation.ttcn b/library/S1AP_Emulation.ttcn
index 1ef4a76..e3e3216 100644
--- a/library/S1AP_Emulation.ttcn
+++ b/library/S1AP_Emulation.ttcn
@@ -438,6 +438,7 @@
var S1APEM_Config s1cfg;
var charstring vlr_name, mme_name;
var integer ai;
+ var octetstring kasme;
alt {
/* Configuration primitive from client */
@@ -544,8 +545,13 @@
f_create_expect_proc(procedureCode, vc_conn);
S1AP_PROC.reply(S1APEM_register_proc:{procedureCode, vc_conn}) to vc_conn;
}
+ [] S1AP_PROC.getcall(S1APEM_derive_nas_token:{?, ?, -}) -> param(kasme, vc_conn) {
+ var integer assoc_id := f_assoc_id_by_comp(vc_conn);
+ var OCT32 nas_token := f_kdf_nas_token(kasme, S1apAssociationTable[assoc_id].nus.tx_count)
+ S1apAssociationTable[assoc_id].nus.tx_count := S1apAssociationTable[assoc_id].nus.tx_count + 1;
+ S1AP_PROC.reply(S1APEM_derive_nas_token:{kasme, vc_conn, nas_token}) to vc_conn;
+ }
}
-
}
}
@@ -566,10 +572,12 @@
signature S1APEM_register(in MME_UE_S1AP_ID mme_id, in ENB_UE_S1AP_ID enb_id, in S1AP_ConnHdlr hdlr);
signature S1APEM_register_proc(in integer procedureCode, in S1AP_ConnHdlr hdlr);
+signature S1APEM_derive_nas_token(in octetstring kasme, in S1AP_ConnHdlr hdlr, out OCT32 nas_token);
type port S1APEM_PROC_PT procedure {
inout S1APEM_register;
inout S1APEM_register_proc;
+ inout S1APEM_derive_nas_token;
} with { extension "internal" };
/* Function that can be used as create_cb and will use the expect table */
@@ -669,6 +677,17 @@
log(procedureCode);
}
+/* Derive NAS Token (and post-increment ul_count): */
+function f_s1apem_derive_nas_token(in octetstring kasme) runs on S1AP_ConnHdlr return OCT32
+{
+ var OCT32 nas_token;
+ S1AP_PROC.call(S1APEM_derive_nas_token:{kasme, self, -}) {
+ [] S1AP_PROC.getreply(S1APEM_derive_nas_token:{kasme, self, ?}) -> param(nas_token) {
+ return nas_token;
+ };
+ }
+}
+
private function f_expect_table_init()
runs on S1AP_Emulation_CT {
var integer i;