fixeria has uploaded this change for review. (
https://gerrit.osmocom.org/c/erlang/osmo-s1gw/+/39524?usp=email )
Change subject: erab_fsm: handle RELEASE.{cmd,ind} in state erab_wait_setup_rsp
......................................................................
erab_fsm: handle RELEASE.{cmd,ind} in state erab_wait_setup_rsp
It can happen that either the eNB or the MME orders E-RAB release
(directly or indirectly via UE CONTEXT RELEASE) *before* the E-RAB
is fully setup (i.e. the erab_fsm state =/= erab_setup).
Change-Id: I91a010f304456c1593ef257051a912f0fe8ae2a1
Related: SYS#7318, SYS#7310
---
M src/erab_fsm.erl
M test/erab_fsm_test.erl
2 files changed, 39 insertions(+), 6 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/erlang/osmo-s1gw refs/changes/24/39524/1
diff --git a/src/erab_fsm.erl b/src/erab_fsm.erl
index bbb6dad..c4dbbd6 100644
--- a/src/erab_fsm.erl
+++ b/src/erab_fsm.erl
@@ -260,6 +260,18 @@
S#erab_state{from = From,
u2a = U2A}};
+erab_wait_setup_rsp(cast, erab_release_cmd,
+ #erab_state{} = S) ->
+ ?LOG_DEBUG("Rx E-RAB RELEASE Cmd"),
+ {next_state, session_delete,
+ S#erab_state{rel_kind = cmd}};
+
+erab_wait_setup_rsp(cast, erab_release_ind,
+ #erab_state{} = S) ->
+ ?LOG_DEBUG("Rx E-RAB RELEASE Ind"),
+ {next_state, session_delete,
+ S#erab_state{rel_kind = ind}};
+
erab_wait_setup_rsp(Event, EventData, S) ->
handle_event(?FUNCTION_NAME, Event, EventData, S).
diff --git a/test/erab_fsm_test.erl b/test/erab_fsm_test.erl
index ec40e2e..232446e 100644
--- a/test/erab_fsm_test.erl
+++ b/test/erab_fsm_test.erl
@@ -49,10 +49,14 @@
erab_release_test_() ->
- [{"E-RAB RELEASE CMD :: success",
- ?TC(fun test_erab_release_cmd_success/1)},
- {"E-RAB RELEASE IND :: success",
- ?TC(fun test_erab_release_ind_success/1)},
+ [{"E-RAB RELEASE CMD (in state erab_setup) :: success",
+ ?TC(fun test_erab_setup_release_cmd_success/1)},
+ {"E-RAB RELEASE CMD (in state erab_wait_setup_rsp) :: success",
+ ?TC(fun test_erab_wait_setup_rsp_release_cmd_success/1)},
+ {"E-RAB RELEASE IND (in state erab_setup) :: success",
+ ?TC(fun test_erab_setup_release_ind_success/1)},
+ {"E-RAB RELEASE IND (in state erab_wait_setup_rsp) :: success",
+ ?TC(fun test_erab_wait_setup_rsp_release_ind_success/1)},
{"E-RAB release :: PFCP session deletion error",
?TC(fun test_erab_release_pfcp_delete_error/1)}].
@@ -105,7 +109,8 @@
?_assertNot(erlang:is_process_alive(Pid))].
-test_erab_release_cmd_success(Pid) ->
+%% test E-RAB RELEASE.{cmd,rsp} received in state erab_setup
+test_erab_setup_release_cmd_success(Pid) ->
[?_assertEqual({ok, ?A2U}, erab_fsm:erab_setup_req(Pid, ?U2C)),
?_assertEqual({ok, ?C2U}, erab_fsm:erab_setup_rsp(Pid, ?U2A)),
?_assertEqual(ok, erab_fsm:erab_release_cmd(Pid)),
@@ -113,13 +118,29 @@
?_assertNot(erlang:is_process_alive(Pid))].
-test_erab_release_ind_success(Pid) ->
+%% test E-RAB RELEASE.{cmd,rsp} received in state erab_wait_setup_rsp
+test_erab_wait_setup_rsp_release_cmd_success(Pid) ->
+ [?_assertEqual({ok, ?A2U}, erab_fsm:erab_setup_req(Pid, ?U2C)),
+ ?_assertEqual(ok, erab_fsm:erab_release_cmd(Pid)),
+ ?_assertEqual(ok, erab_fsm:erab_release_rsp(Pid)),
+ ?_assertNot(erlang:is_process_alive(Pid))].
+
+
+%% test E-RAB RELEASE.ind received in state erab_setup
+test_erab_setup_release_ind_success(Pid) ->
[?_assertEqual({ok, ?A2U}, erab_fsm:erab_setup_req(Pid, ?U2C)),
?_assertEqual({ok, ?C2U}, erab_fsm:erab_setup_rsp(Pid, ?U2A)),
?_assertEqual(ok, erab_fsm:erab_release_ind(Pid)),
?_assertNot(erlang:is_process_alive(Pid))].
+%% test E-RAB RELEASE.ind received in state erab_wait_setup_rsp
+test_erab_wait_setup_rsp_release_ind_success(Pid) ->
+ [?_assertEqual({ok, ?A2U}, erab_fsm:erab_setup_req(Pid, ?U2C)),
+ ?_assertEqual(ok, erab_fsm:erab_release_ind(Pid)),
+ ?_assertNot(erlang:is_process_alive(Pid))].
+
+
test_erab_release_pfcp_delete_error(Pid) ->
%% pfcp_peer:session_delete_req/1 responds with a reject
PDU = pfcp_mock:pdu_rsp_reject(session_deletion_response, ?SEID_Loc),
--
To view, visit
https://gerrit.osmocom.org/c/erlang/osmo-s1gw/+/39524?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: erlang/osmo-s1gw
Gerrit-Branch: master
Gerrit-Change-Id: I91a010f304456c1593ef257051a912f0fe8ae2a1
Gerrit-Change-Number: 39524
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de>