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


Change subject: epdg_ue_fsm: Move s2b CreateSession to its own state
......................................................................

epdg_ue_fsm: Move s2b CreateSession to its own state

Change-Id: Ifb29baeac8b4ea056ca0c3d2435305894954eaa6
---
M src/epdg_ue_fsm.erl
1 file changed, 40 insertions(+), 18 deletions(-)



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

diff --git a/src/epdg_ue_fsm.erl b/src/epdg_ue_fsm.erl
index 92f94f7..63c0223 100644
--- a/src/epdg_ue_fsm.erl
+++ b/src/epdg_ue_fsm.erl
@@ -44,7 +44,8 @@
 -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, 
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]).
+         state_wait_create_session_resp/3, state_wait_delete_session_resp/3,
+         state_wait_swm_session_termination_answer/3]).

 -record(ue_fsm_data, {
         imsi,
@@ -244,23 +245,7 @@
 state_authenticated({call, From}, tunnel_request, Data) ->
         lager:info("ue_fsm state_authenticated event=tunnel_request, ~p~n", 
[Data]),
         epdg_gtpc_s2b:create_session_req(Data#ue_fsm_data.imsi, 
Data#ue_fsm_data.apn),
-        {keep_state, Data, [{reply,From,ok}]};
-
-state_authenticated({call, From}, {received_gtpc_create_session_response, 
Result}, Data) ->
-        lager:info("ue_fsm state_authenticated 
event=received_gtpc_create_session_response, ~p~n", [Data]),
-        case Result of
-        {ok, ResInfo} ->
-                #{eua := EUA,
-                  local_teid := LocalTEID,
-                  remote_teid := RemoteTEID,
-                  remote_ipv4 := RemoteIPv4 % TODO: remote_ipv6
-                 } = ResInfo,
-                Ret = gtp_u_tun:create_pdp_context(RemoteIPv4, EUA, LocalTEID, 
RemoteTEID),
-                lager:debug("gtp_u_tun:create_pdp_context(~p) returned ~p~n", 
[ResInfo, Ret]);
-        _ -> ok
-        end,
-        gsup_server:tunnel_response(Data#ue_fsm_data.imsi, Result),
-        {keep_state, Data, [{reply,From,ok}]};
+        {next_state, state_wait_create_session_resp, Data, [{reply,From,ok}]};

 state_authenticated({call, From}, purge_ms_request, Data) ->
         lager:info("ue_fsm state_authenticated event=purge_ms_request, ~p~n", 
[Data]),
@@ -283,6 +268,34 @@
         lager:error("ue_fsm state_authenticated: Unexpected cast event, ~p~n", 
[Data]),
         {keep_state, Data}.

+state_wait_create_session_resp(enter, _OldState, Data) ->
+        {keep_state, Data, [{state_timeout,5000,create_session_timeout}]};
+
+state_wait_create_session_resp({call, From}, 
{received_gtpc_create_session_response, Result}, Data) ->
+        lager:info("ue_fsm state_authenticated 
event=received_gtpc_create_session_response, ~p~n", [Data]),
+        case Result of
+        {ok, ResInfo} ->
+                #{eua := EUA,
+                  local_teid := LocalTEID,
+                  remote_teid := RemoteTEID,
+                  remote_ipv4 := RemoteIPv4 % TODO: remote_ipv6
+                  } = ResInfo,
+                Ret = gtp_u_tun:create_pdp_context(RemoteIPv4, EUA, LocalTEID, 
RemoteTEID),
+                lager:debug("gtp_u_tun:create_pdp_context(~p) returned ~p~n", 
[ResInfo, Ret]);
+        _ -> ok
+        end,
+        gsup_server:tunnel_response(Data#ue_fsm_data.imsi, Result),
+        {next_state, state_authenticated, Data, [{reply,From,ok}]};
+
+state_wait_create_session_resp({call, From}, Event, Data) ->
+        lager:error("ue_fsm state_wait_delete_session_resp: Unexpected call 
event ~p, ~p~n", [Event, Data]),
+        {keep_state, Data, [{reply,From,{error,unexpected_event}}]};
+
+state_wait_create_session_resp(state_timeout, create_session_timeout, Data) ->
+        lager:error("ue_fsm state_wait_create_session_resp: Timeout ~p, ~p~n", 
[create_session_timeout, Data]),
+        gsup_server:tunnel_response(Data#ue_fsm_data.imsi, {error, 
create_session_timeout}),
+        {next_state, state_authenticated, Data}.
+
 state_wait_delete_session_resp(enter, _OldState, Data) ->
         {keep_state, Data};


--
To view, visit https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/35951?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: Ifb29baeac8b4ea056ca0c3d2435305894954eaa6
Gerrit-Change-Number: 35951
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <[email protected]>
Gerrit-MessageType: newchange

Reply via email to