laforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/41169?usp=email )
Change subject: s1gw: track eNB connection, fail immediately on loss ......................................................................
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(-)
Approvals: laforge: Looks good to me, approved Jenkins Builder: Verified osmith: Looks good to me, but someone else must approve
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 */