laforge has submitted this change. (
https://gerrit.osmocom.org/c/erlang/osmo-s1gw/+/40906?usp=email )
Change subject: erab_fsm: make fetch_info/1 return a map
......................................................................
erab_fsm: make fetch_info/1 return a map
Maps are a lot easier to work with and have better type hints.
Change-Id: I83999fa9346d19260cb44e0bb6a36b7ee1c12ce1
---
M src/erab_fsm.erl
M src/s1ap_proxy.erl
M test/erab_fsm_test.erl
3 files changed, 26 insertions(+), 15 deletions(-)
Approvals:
pespin: Looks good to me, but someone else must approve
Jenkins Builder: Verified
laforge: Looks good to me, approved
diff --git a/src/erab_fsm.erl b/src/erab_fsm.erl
index cd4fa27..f5d8efe 100644
--- a/src/erab_fsm.erl
+++ b/src/erab_fsm.erl
@@ -103,6 +103,17 @@
-type iface() :: 'Core' | 'Access'.
-type pfcp_ie() :: map().
+-type erab_info() :: #{uid := term(),
+ state := atom(),
+ f_teid_u2c => teid_addr(),
+ f_teid_c2u => teid_addr(),
+ f_teid_a2u => teid_addr(),
+ f_teid_u2a => teid_addr(),
+ seid_loc := pfcp_peer:pfcp_seid(),
+ seid_rem => pfcp_peer:pfcp_seid()}.
+
+-export_type([erab_info/0]).
+
%% ------------------------------------------------------------------
%% public API
@@ -205,7 +216,7 @@
gen_statem:cast(Pid, ?FUNCTION_NAME).
--spec fetch_info(pid()) -> proplists:proplist().
+-spec fetch_info(pid()) -> erab_info().
fetch_info(Pid) ->
gen_statem:call(Pid, ?FUNCTION_NAME).
@@ -542,16 +553,16 @@
%% Event handler for all states
handle_event(State, {call, From}, fetch_info,
#erab_state{} = S) ->
- Info = [{state, State},
- {uid, S#erab_state.uid},
- {f_teid_u2c, S#erab_state.u2c},
- {f_teid_c2u, S#erab_state.c2u},
- {f_teid_a2u, S#erab_state.a2u},
- {f_teid_u2a, S#erab_state.u2a},
- {seid_loc, S#erab_state.seid_loc},
- {seid_rem, S#erab_state.seid_rem}],
- %% omit props with Value =:= undefined
- Reply = lists:filter(fun({_, V}) -> V =/= undefined end, Info),
+ Info = #{state => State,
+ uid => S#erab_state.uid,
+ f_teid_u2c => S#erab_state.u2c,
+ f_teid_c2u => S#erab_state.c2u,
+ f_teid_a2u => S#erab_state.a2u,
+ f_teid_u2a => S#erab_state.u2a,
+ seid_loc => S#erab_state.seid_loc,
+ seid_rem => S#erab_state.seid_rem},
+ %% omit fields with Value =:= undefined
+ Reply = maps:filter(fun(_K, V) -> V =/= undefined end, Info),
{keep_state_and_data, {reply, From, Reply}};
handle_event(State, {call, From}, EventData, _S) ->
diff --git a/src/s1ap_proxy.erl b/src/s1ap_proxy.erl
index fd51b2c..658f08c 100644
--- a/src/s1ap_proxy.erl
+++ b/src/s1ap_proxy.erl
@@ -967,12 +967,12 @@
{ok, Pid} ->
%% Ignore F-TEID in the original message, just replace it with C2U F-TEID
Info = erab_fsm:fetch_info(Pid),
- case proplists:get_value(f_teid_c2u, Info) of
- {TEID, TLA} ->
+ case maps:find(f_teid_c2u, Info) of
+ {ok, {TEID, TLA}} ->
C1 =
C0#'E-RABNotToBeModifiedItemBearerModInd'{'transportLayerAddress' = TLA,
'dL-GTP-TEID'
= << TEID:32/big >>},
{{ok, C1}, S};
- undefined ->
+ error ->
?LOG_ERROR("E-RAB-ID ~p :: missing C2U F-TEID",
[erab_uid(ERABId, S)]),
{{error, missing_f_teid}, S}
end;
diff --git a/test/erab_fsm_test.erl b/test/erab_fsm_test.erl
index a3dfb4d..e49d5cc 100644
--- a/test/erab_fsm_test.erl
+++ b/test/erab_fsm_test.erl
@@ -35,7 +35,7 @@
erab_fsm_info(Pid, Key) ->
Info = erab_fsm:fetch_info(Pid),
- proplists:get_value(Key, Info).
+ maps:get(Key, Info).
%% ------------------------------------------------------------------
--
To view, visit
https://gerrit.osmocom.org/c/erlang/osmo-s1gw/+/40906?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: erlang/osmo-s1gw
Gerrit-Branch: master
Gerrit-Change-Id: I83999fa9346d19260cb44e0bb6a36b7ee1c12ce1
Gerrit-Change-Number: 40906
Gerrit-PatchSet: 3
Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>