pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/41302?usp=email )
Change subject: aaa_ue_fsm: Avoid immediate stop of fsm during 2nd SWx RTR ......................................................................
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}]};