laforge submitted this change.
s1gw: track eNB connection, fail immediately on loss
Change-Id: I34a3d30270f1236908643b60fc8abe590a780b89
---
M s1gw/S1GW_ConnHdlr.ttcn
M s1gw/S1GW_Tests.ttcn
2 files changed, 29 insertions(+), 0 deletions(-)
diff --git a/s1gw/S1GW_ConnHdlr.ttcn b/s1gw/S1GW_ConnHdlr.ttcn
index 4e47544..94c6d78 100644
--- a/s1gw/S1GW_ConnHdlr.ttcn
+++ b/s1gw/S1GW_ConnHdlr.ttcn
@@ -45,6 +45,7 @@
var ConnHdlrPars g_pars;
port S1AP_CODEC_PT S1AP_ENB;
var ConnectionId g_s1ap_conn_id := -1;
+ var default conn_track := null;
};
type record of ConnHdlr ConnHdlrList;
@@ -92,6 +93,25 @@
fn.apply(id);
}
+/* track eNB connection loss events */
+private altstep as_conn_track() runs on ConnHdlr {
+ [] S1AP_CONN.receive(S1APSRV_Event:S1APSRV_EVENT_CONN_DOWN) {
+ setverdict(fail, "eNB disconnected unexpectedly");
+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
+ }
+}
+
+function f_ConnHdlr_conn_track_enable() runs on ConnHdlr {
+ if (conn_track == null) {
+ conn_track := activate(as_conn_track());
+ }
+}
+
+function f_ConnHdlr_conn_track_disable() runs on ConnHdlr {
+ if (conn_track != null) {
+ deactivate(conn_track);
+ }
+}
function f_ConnHdlr_s1ap_connect(charstring local_addr, charstring remote_addr) runs on ConnHdlr {
var Result res;
@@ -110,6 +130,9 @@
}
g_s1ap_conn_id := res.connId;
+ /* start tracking eNB connection */
+ f_ConnHdlr_conn_track_enable();
+
/* wait for the establishment confirmation */
T.start(2.0);
alt {
@@ -127,6 +150,9 @@
function f_ConnHdlr_s1ap_disconnect() runs on ConnHdlr {
var Result res;
+ /* stop tracking eNB connection (teardown expected) */
+ f_ConnHdlr_conn_track_disable();
+
S1AP_CodecPort_CtrlFunct.f_IPL4_close(S1AP_ENB, g_s1ap_conn_id,
{ sctp := c_SctpTuple_S1AP });
g_s1ap_conn_id := -1;
diff --git a/s1gw/S1GW_Tests.ttcn b/s1gw/S1GW_Tests.ttcn
index 296c234..501f1be 100644
--- a/s1gw/S1GW_Tests.ttcn
+++ b/s1gw/S1GW_Tests.ttcn
@@ -343,6 +343,9 @@
f_ConnHdlr_s1ap_setup(g_pars.genb_id);
f_sleep(0.5); /* keep the connection idle for some time */
+ /* stop tracking eNB connection (teardown expected) */
+ f_ConnHdlr_conn_track_disable();
+
/* MME (S1AP_Server_CT) terminates connection */
f_ConnHdlr_s1ap_close_conn(g_pars.genb_id);
/* expect our eNB connection to be released gracefully */
To view, visit change 41169. To unsubscribe, or for help writing mail filters, visit settings.