pespin has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/35864?usp=email )


Change subject: epdg: Do SWm STR+STA upon rx of Delete Bearer Req
......................................................................

epdg: Do SWm STR+STA upon rx of Delete Bearer Req

Change-Id: I795d973dc472f55d18048025ef4ffe1552dfdf26
---
M src/epdg_gtpc_s2b.erl
M src/epdg_ue_fsm.erl
2 files changed, 43 insertions(+), 9 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/erlang/osmo-epdg 
refs/changes/64/35864/1

diff --git a/src/epdg_gtpc_s2b.erl b/src/epdg_gtpc_s2b.erl
index ca05d9b..349aac6 100644
--- a/src/epdg_gtpc_s2b.erl
+++ b/src/epdg_gtpc_s2b.erl
@@ -312,6 +312,7 @@
         Sess ->
             Resp = gen_delete_bearer_response(Req, Sess, request_accepted, 
State),
             tx_gtp(Resp, State),
+            
epdg_ue_fsm:received_gtpc_delete_bearer_request(Sess#gtp_session.pid),
             State1 = delete_gtp_session(Sess, State),
             {noreply, State1}
         end;
diff --git a/src/epdg_ue_fsm.erl b/src/epdg_ue_fsm.erl
index 3e9d1be..350a991 100644
--- a/src/epdg_ue_fsm.erl
+++ b/src/epdg_ue_fsm.erl
@@ -41,13 +41,14 @@
 -export([init/1,callback_mode/0,terminate/3]).
 -export([auth_request/1, lu_request/1, tunnel_request/1, purge_ms_request/1]).
 -export([received_swm_auth_response/2, received_swm_auth_compl_response/2, 
received_swm_session_termination_answer/2]).
--export([received_gtpc_create_session_response/2, 
received_gtpc_delete_session_response/2]).
+-export([received_gtpc_create_session_response/2, 
received_gtpc_delete_session_response/2, 
received_gtpc_delete_bearer_request/1]).
 -export([state_new/3, state_wait_auth_resp/3, state_authenticating/3, 
state_authenticated/3,
          state_wait_delete_session_resp/3, 
state_wait_swm_session_termination_answer/3]).

 -record(ue_fsm_data, {
         imsi,
         apn = "internet" :: string(),
+        tear_down_gsup_needed = false :: boolean(), %% need to send GSUP 
PurgeMSResp after STR+STA?
         tear_down_gsup_cause = 0 :: integer()
         }).

@@ -137,6 +138,16 @@
                 {error, Err}
         end.

+received_gtpc_delete_bearer_request(Pid) ->
+        lager:info("ue_fsm received_gtpc_delete_bearer_request~n", []),
+        try
+        gen_statem:call(Pid, received_gtpc_delete_bearer_request)
+        catch
+        exit:Err ->
+                {error, Err}
+        end.
+
+
 %% ------------------------------------------------------------------
 %% Internal helpers
 %% ------------------------------------------------------------------
@@ -231,6 +242,11 @@
         {error, Err} -> {keep_state, Data, [{reply,From,{error, Err}}]}
         end;

+state_authenticated({call, From}, received_gtpc_delete_bearer_request, Data) ->
+        lager:info("ue_fsm state_authenticated 
event=received_gtpc_delete_bearer_request, ~p~n", [Data]),
+        Data1 = Data#ue_fsm_data{tear_down_gsup_needed = false},
+        {next_state, state_wait_swm_session_termination_answer, Data1, 
[{reply,From,ok}]};
+
 state_authenticated({call, From}, _Whatever, Data) ->
         lager:error("ue_fsm state_authenticated: Unexpected call event, ~p~n", 
[Data]),
         {keep_state, Data, [{reply,From,ok}]};
@@ -248,11 +264,12 @@
         GtpCause = gtp_utils:enum_v2_cause(CauseIE#v2_cause.v2_cause),
         GsupCause = conv:cause_gtp2gsup(GtpCause),
         lager:debug("Cause: GTP_atom=~p -> GTP_int=~p -> GSUP_int=~p~n", 
[CauseIE#v2_cause.v2_cause, GtpCause, GsupCause]),
+        Data1 = Data#ue_fsm_data{tear_down_gsup_needed = true},
         case GsupCause of
-        0 -> Data1 = Data;
-        _ -> Data1 = Data#ue_fsm_data{tear_down_gsup_cause = GsupCause}
+        0 -> Data2 = Data1;
+        _ -> Data2 = Data1#ue_fsm_data{tear_down_gsup_cause = GsupCause}
         end,
-        {next_state, state_wait_swm_session_termination_answer, Data1, 
[{reply,From,ok}]};
+        {next_state, state_wait_swm_session_termination_answer, Data2, 
[{reply,From,ok}]};

 state_wait_delete_session_resp({call, From}, Event, Data) ->
         lager:error("ue_fsm state_wait_delete_session_resp: Unexpected call 
event ~p, ~p~n", [Event, Data]),
@@ -265,16 +282,23 @@
         case 
epdg_diameter_swm:session_termination_request(Data#ue_fsm_data.imsi) of
         ok -> {keep_state, Data};
         {error, _Err} ->
-                gsup_server:purge_ms_response(Data#ue_fsm_data.imsi, {error, 
?GSUP_CAUSE_NET_FAIL}),
+                case Data#ue_fsm_data.tear_down_gsup_needed of
+                true -> gsup_server:purge_ms_response(Data#ue_fsm_data.imsi, 
{error, ?GSUP_CAUSE_NET_FAIL});
+                false -> ok
+                end,
                 {keep_state, Data}
         end;

 state_wait_swm_session_termination_answer({call, From}, {received_swm_sta, 
DiaResultCode}, Data) ->
         lager:info("ue_fsm state_wait_swm_session_termination_answer 
event=received_swm_sta, ~p~n", [Data]),
-        case {DiaResultCode, Data#ue_fsm_data.tear_down_gsup_cause} of
-        {2001, 0} -> gsup_server:purge_ms_response(Data#ue_fsm_data.imsi, ok);
-        {2001, _} -> gsup_server:purge_ms_response(Data#ue_fsm_data.imsi, 
{error, Data#ue_fsm_data.tear_down_gsup_cause});
-        _ -> gsup_server:purge_ms_response(Data#ue_fsm_data.imsi, {error, 
?GSUP_CAUSE_NET_FAIL})
+        case Data#ue_fsm_data.tear_down_gsup_needed of
+        true ->
+                case {DiaResultCode, Data#ue_fsm_data.tear_down_gsup_cause} of
+                {2001, 0} -> 
gsup_server:purge_ms_response(Data#ue_fsm_data.imsi, ok);
+                {2001, _} -> 
gsup_server:purge_ms_response(Data#ue_fsm_data.imsi, {error, 
Data#ue_fsm_data.tear_down_gsup_cause});
+                _ -> gsup_server:purge_ms_response(Data#ue_fsm_data.imsi, 
{error, ?GSUP_CAUSE_NET_FAIL})
+                end;
+        false -> ok
         end,
         {keep_state, Data, [{reply,From,ok}]};


--
To view, visit https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/35864?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: erlang/osmo-epdg
Gerrit-Branch: master
Gerrit-Change-Id: I795d973dc472f55d18048025ef4ffe1552dfdf26
Gerrit-Change-Number: 35864
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <[email protected]>
Gerrit-MessageType: newchange

Reply via email to