fixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/31455 )
Change subject: library/DIAMETER_Emulation: add API for generating Session-Id AVP ......................................................................
library/DIAMETER_Emulation: add API for generating Session-Id AVP
Change-Id: I0fbd271ad123e9663aab5163915e1edbf5915bb6 Related: SYS#6343, SYS#5602 --- M library/DIAMETER_Emulation.ttcn 1 file changed, 37 insertions(+), 0 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/55/31455/1
diff --git a/library/DIAMETER_Emulation.ttcn b/library/DIAMETER_Emulation.ttcn index 6eb72ad..2a7bbd0 100644 --- a/library/DIAMETER_Emulation.ttcn +++ b/library/DIAMETER_Emulation.ttcn @@ -86,6 +86,10 @@ /* test port for unit data messages */ port DIAMETER_PT DIAMETER_UNIT;
+ /* monotonically increasing 64-bit value for Session-Id AVP */ + var uint32_t g_sess_id_seed_h32; + var uint32_t g_sess_id_seed_l32; + var charstring g_diameter_id; var integer g_diameter_conn_id := -1; } @@ -307,6 +311,10 @@ DIAMETER_UNIT.send(DiameterCapabilityExchgInd:{rx := rsp, tx := valueof(req)}); }
+ /* Init seed for Session-Id AVP: randomize the high 32 bits */ + g_sess_id_seed_h32 := f_rnd_int(c_UINT32_MAX); + g_sess_id_seed_l32 := 0; + while (true) { var DIAMETER_ConnHdlr vc_conn; var template IMSI imsi_t; @@ -314,6 +322,7 @@ var DIAMETER_RecvFrom mrf; var PDU_DIAMETER msg; var charstring vlr_name, mme_name; + var charstring identity; var PortEvent port_evt;
alt { @@ -381,6 +390,14 @@ f_create_expect(imsi, vc_conn); DIAMETER_PROC.reply(DIAMETEREM_register:{imsi, vc_conn}) to vc_conn; } + [] DIAMETER_PROC.getcall(DIAMETEREM_gen_sess_id:{?,?}) -> param(identity) { + var charstring sess_id := identity & ";" & int2str(g_sess_id_seed_h32) + & ";" & int2str(g_sess_id_seed_l32); + if (g_sess_id_seed_l32 == c_UINT32_MAX) + { g_sess_id_seed_h32 := g_sess_id_seed_h32 + 1; } + g_sess_id_seed_l32 := g_sess_id_seed_l32 + 1; + DIAMETER_PROC.reply(DIAMETEREM_gen_sess_id:{identity, sess_id}); + }
}
@@ -395,9 +412,11 @@ }
signature DIAMETEREM_register(in hexstring imsi, in DIAMETER_ConnHdlr hdlr); +signature DIAMETEREM_gen_sess_id(in charstring identity, out charstring sess_id);
type port DIAMETEREM_PROC_PT procedure { inout DIAMETEREM_register; + inout DIAMETEREM_gen_sess_id; } with { extension "internal" };
/* Function that can be used as create_cb and will use the expect table */ @@ -452,6 +471,14 @@ } }
+function f_diameter_gen_sess_id(DIAMETEREM_PROC_PT pt, charstring identity) return charstring { + var charstring sess_id; + pt.call(DIAMETEREM_gen_sess_id:{identity,-}) { + [] pt.getreply(DIAMETEREM_gen_sess_id:{?,?}) -> param (sess_id) {}; + } + return sess_id; +} + private function f_expect_table_init() runs on DIAMETER_Emulation_CT { var integer i;