pespin has uploaded this change for review.

View Change

aaa_ue_fsm: Avoid immediate stop of fsm during 2nd SWx RTR

During Network Initiated De-Registration by HSS Procedure, if a 2nd RTR
arrives for an aaa_ue_fsm which is already in
state_dereg_net_initiated_*, let it continue with the ordered tear down
consisting of informing peer nodes.

Change-Id: I6d564ec1583692a6b6f3f273268b400570b246ff
---
M src/aaa_ue_fsm.erl
1 file changed, 34 insertions(+), 4 deletions(-)

git pull ssh://gerrit.osmocom.org:29418/erlang/osmo-epdg refs/changes/02/41302/1
diff --git a/src/aaa_ue_fsm.erl b/src/aaa_ue_fsm.erl
index 64f6cb3..fa1c807 100644
--- a/src/aaa_ue_fsm.erl
+++ b/src/aaa_ue_fsm.erl
@@ -256,7 +256,12 @@
case aaa_diameter_swx:server_assignment_request(Data#ue_fsm_data.imsi, 1, Apn, []) of
ok -> {next_state, state_wait_swx_saa, Data, [{reply,From,ok}]};
{error, Err} -> {keep_state, Data, [{reply,From,{error, Err}}]}
- end.
+ end;
+
+state_new({call, From}, rx_swx_rtr, Data) ->
+ lager:info("ue_fsm state_new event=rx_swx_rtr ~p~n", [Data]),
+ %% No need to inform anybody else, tear down FSM:
+ {stop_and_reply, normal, [{reply,From,ok}], Data}.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% state_wait_swx_maa:
@@ -268,7 +273,12 @@
state_wait_swx_maa({call, From}, {rx_swx_maa, Result}, Data) ->
lager:info("ue_fsm state_wait_swx_maa event=rx_swx_maa, ~p~n", [Data]),
aaa_diameter_swm:tx_dea_auth_response(Data#ue_fsm_data.imsi, Result),
- {next_state, state_new, Data, [{reply,From,ok}]}.
+ {next_state, state_new, Data, [{reply,From,ok}]};
+
+state_wait_swx_maa({call, From}, rx_swx_rtr, Data) ->
+ lager:info("ue_fsm state_wait_swx_maa event=rx_swx_rtr ~p~n", [Data]),
+ %% No need to inform anybody else, tear down FSM:
+ {stop_and_reply, normal, [{reply,From,ok}], Data}.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% state_wait_swx_saa:
@@ -286,7 +296,12 @@
{ok, _SAType, ResInfo} ->
aaa_diameter_swm:tx_dea_auth_compl_response(Data#ue_fsm_data.imsi, {ok, ResInfo}),
{next_state, state_authenticated, Data, [{reply,From,ok}]}
- end.
+ end;
+
+state_wait_swx_saa({call, From}, rx_swx_rtr, Data) ->
+ lager:info("ue_fsm state_wait_swx_saa event=rx_swx_rtr ~p~n", [Data]),
+ %% No need to inform anybody else, tear down FSM:
+ {stop_and_reply, normal, [{reply,From,ok}], Data}.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% state_authenticated:
@@ -431,7 +446,12 @@
Data1 = Data#ue_fsm_data{pgw_sess_active = false, s6b_resp_pid = undefined},
{next_state, state_new, Data1, [{reply,From,ok}]}
end
- end.
+ end;
+
+state_authenticated_wait_swx_saa({call, From}, rx_swx_rtr, Data) ->
+ lager:info("ue_fsm state_authenticated_wait_swx_saa event=rx_swx_rtr ~p~n", [Data]),
+ %% We are already tearing down in an ordered manner, accept and do nothing.
+ {keep_state, Data, [{reply,From,ok}]};

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% state_dereg_net_initiated_wait_s6b_asa:
@@ -446,6 +466,11 @@
state_dereg_net_initiated_wait_s6b_asa({call, From}, {rx_s6b_asa, _Result}, Data) ->
{next_state, state_dereg_net_initiated_wait_swm_asa, Data, [{reply,From,ok}]};

+state_dereg_net_initiated_wait_s6b_asa({call, From}, rx_swx_rtr, Data) ->
+ lager:info("ue_fsm state_dereg_net_initiated_wait_s6b_asa event=rx_swx_rtr ~p~n", [Data]),
+ %% We are already tearing down in an ordered manner, accept and do nothing.
+ {keep_state, Data, [{reply,From,ok}]};
+
state_dereg_net_initiated_wait_s6b_asa({call, From}, Ev, Data) ->
lager:notice("ue_fsm state_dereg_net_initiated_wait_s6b_asa: Unexpected call event ~p, ~p~n", [Ev, Data]),
{keep_state, Data, [{reply,From,ok}]};
@@ -466,6 +491,11 @@
state_dereg_net_initiated_wait_swm_asa({call, From}, rx_swm_asa, Data) ->
{stop_and_reply, normal, [{reply,From,ok}], Data};

+state_dereg_net_initiated_wait_swm_asa({call, From}, rx_swx_rtr, Data) ->
+ lager:info("ue_fsm state_dereg_net_initiated_wait_swm_asa event=rx_swx_rtr ~p~n", [Data]),
+ %% We are already tearing down in an ordered manner, accept and do nothing.
+ {keep_state, Data, [{reply,From,ok}]};
+
state_dereg_net_initiated_wait_swm_asa({call, From}, Ev, Data) ->
lager:notice("ue_fsm state_dereg_net_initiated_wait_swm_asa: Unexpected call event ~p, ~p~n", [Ev, Data]),
{keep_state, Data, [{reply,From,ok}]};

To view, visit change 41302. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-MessageType: newchange
Gerrit-Project: erlang/osmo-epdg
Gerrit-Branch: master
Gerrit-Change-Id: I6d564ec1583692a6b6f3f273268b400570b246ff
Gerrit-Change-Number: 41302
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin@sysmocom.de>