diff options
-rw-r--r-- | hnbgw/HNBGW_Tests.ttcn | 2 | ||||
-rw-r--r-- | library/rua/RUA_Emulation.ttcn | 27 |
2 files changed, 26 insertions, 3 deletions
diff --git a/hnbgw/HNBGW_Tests.ttcn b/hnbgw/HNBGW_Tests.ttcn index bfbab7d2..6498698b 100644 --- a/hnbgw/HNBGW_Tests.ttcn +++ b/hnbgw/HNBGW_Tests.ttcn @@ -2179,6 +2179,8 @@ runs on ConnHdlr { f_bssap_expect(tx); } else { RUA.receive(RUA_Disc_Ind:?); + RUA.send(tx); + RUA.receive(RUA_Disc_Ind:?); } } diff --git a/library/rua/RUA_Emulation.ttcn b/library/rua/RUA_Emulation.ttcn index 4c3b5ed9..f3b999b7 100644 --- a/library/rua/RUA_Emulation.ttcn +++ b/library/rua/RUA_Emulation.ttcn @@ -56,7 +56,8 @@ type port RUA_Conn_PT message { inout RANAP_PDU, RUA_Conn_Req, RUA_Disc_Req, - RUA_Disc_Ind; + RUA_Disc_Ind, + RUA_Ignore_Ctx_Id; } with { extension "internal" }; type record RUA_Conn_Req { @@ -73,13 +74,19 @@ type record RUA_Disc_Ind { RUA_IEs.Cause cause }; +type record RUA_Ignore_Ctx_Id { + boolean ps_domain, + integer context_id +}; + type bitstring ContextId length(24); // with { variant "FIELDLENGTH(24)" }; /* represents a single RANAP connection over RUA */ type record ConnectionData { RUA_ConnHdlr comp_ref, RUA_IEs.CN_DomainIndicator domain, - integer context_id + integer context_id, + boolean connected } type component RUA_Emulation_CT { @@ -180,6 +187,7 @@ runs on RUA_Emulation_CT { for (var integer i := 0; i < sizeof(ConnectionTable); i := i+1) { ConnectionTable[i].comp_ref := null; ConnectionTable[i].context_id := -1; + ConnectionTable[i].connected := false; } /* for (var integer i := 0; i < sizeof(ImsiTable); i := i+1) { @@ -198,6 +206,7 @@ runs on RUA_Emulation_CT { ConnectionTable[i].comp_ref := comp_ref; ConnectionTable[i].domain := domain; ConnectionTable[i].context_id := int_context_id; + ConnectionTable[i].connected := true; log("Added conn table entry ", ConnectionTable[i]); return; } @@ -212,7 +221,7 @@ runs on RUA_Emulation_CT { if (ConnectionTable[i].context_id == int_context_id) { log("Deleted conn table entry ", i, ConnectionTable[i].comp_ref, int_context_id); - ConnectionTable[i].context_id := -1; + ConnectionTable[i].connected := false; return } } @@ -267,6 +276,7 @@ private altstep as_main_rua() runs on RUA_Emulation_CT { var RUA_Conn_Req creq; var RUA_Disc_Req dreq; var RUA_IEs.Cause cause; + var RUA_Ignore_Ctx_Id ignctx; /* RUA -> Client: UNIT-DATA (connectionless RUA) from CN */ [] RUA.receive(tr_RUA_ConnectionlessTransfer) -> value rua { @@ -357,6 +367,17 @@ private altstep as_main_rua() runs on RUA_Emulation_CT { } } + /* RANAP from client, for a new RANAP connection */ + [] CLIENT.receive(RUA_Ignore_Ctx_Id:?) -> value ignctx sender vc_conn { + context_id := int2bit(ignctx.context_id, 24); + if (ignctx.ps_domain) { + domain_ind := ps_domain; + } else { + domain_ind := cs_domain; + } + f_conn_table_add(vc_conn, domain_ind, context_id); + } + } |