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 <pespin(a)sysmocom.de>
Gerrit-MessageType: newchange