aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--hnbgw/HNBGW_Tests.ttcn2
-rw-r--r--library/rua/RUA_Emulation.ttcn27
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);
+ }
+
}