pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/35889?usp=email )
Change subject: AAA-Server: Convert binary Imsi coming from internal SWm to string ......................................................................
AAA-Server: Convert binary Imsi coming from internal SWm to string
ePDG handles Imsi as binary, but since all diameter uses strings, better keep it as a string everywhere inside AAA-Server. This fixes matching and finding sessions by Imsi.
Change-Id: Iba07ca02d9ca2bd6227d92b1d9c727107f37d9cd --- M src/aaa_diameter_swm.erl M src/aaa_ue_fsm.erl M src/epdg_diameter_swm.erl 3 files changed, 26 insertions(+), 7 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/erlang/osmo-epdg refs/changes/89/35889/1
diff --git a/src/aaa_diameter_swm.erl b/src/aaa_diameter_swm.erl index d425ed6..bcedcac 100644 --- a/src/aaa_diameter_swm.erl +++ b/src/aaa_diameter_swm.erl @@ -12,7 +12,7 @@ }).
-record(swm_session, { - imsi :: binary(), + imsi :: string(), pid :: pid() }).
diff --git a/src/aaa_ue_fsm.erl b/src/aaa_ue_fsm.erl index e395d58..52918d2 100644 --- a/src/aaa_ue_fsm.erl +++ b/src/aaa_ue_fsm.erl @@ -45,7 +45,7 @@ -export([state_new/3, state_wait_swx_maa/3, state_wait_swx_saa/3, state_authenticated/3, state_authenticated_wait_swx_saa/3]).
-record(ue_fsm_data, { - imsi = unknown :: binary(), + imsi = unknown :: string(), apn :: string(), epdg_sess_active = false :: boolean(), pgw_sess_active = false :: boolean(), @@ -53,7 +53,7 @@ }).
start_link(Imsi) -> - ServerName = lists:concat([?NAME, "_", binary_to_list(Imsi)]), + ServerName = lists:concat([?NAME, "_", Imsi]), lager:info("ue_fsm start_link(~p)~n", [ServerName]), gen_statem:start_link({local, list_to_atom(ServerName)}, ?MODULE, Imsi, [{debug, [trace]}]).
diff --git a/src/epdg_diameter_swm.erl b/src/epdg_diameter_swm.erl index 2e4d738..57c0921 100644 --- a/src/epdg_diameter_swm.erl +++ b/src/epdg_diameter_swm.erl @@ -11,7 +11,7 @@ }).
-record(swm_session, { - imsi :: binary(), + imsi :: string(), pid :: pid() }).
@@ -34,7 +34,9 @@
auth_request(Imsi) -> - Result = gen_server:call(?SERVER, {epdg_auth_req, Imsi}), + % In Diameter we use Imsi as strings, as done by diameter module. + ImsiStr = binary_to_list(Imsi), + Result = gen_server:call(?SERVER, {epdg_auth_req, ImsiStr}), case Result of {ok, _Mar} -> epdg_ue_fsm:received_swm_auth_response(self(), Result), @@ -44,7 +46,9 @@
% Rx "GSUP CEAI LU Req" is our way of saying Rx "Swm Diameter-EAP REQ (DER) with EAP AVP containing successuful auth": auth_compl_request(Imsi, Apn) -> - Result = gen_server:call(?SERVER, {epdg_auth_compl_req, Imsi, Apn}), + % In Diameter we use Imsi as strings, as done by diameter module. + ImsiStr = binary_to_list(Imsi), + Result = gen_server:call(?SERVER, {epdg_auth_compl_req, ImsiStr, Apn}), case Result of {ok, _Mar} -> epdg_ue_fsm:received_swm_auth_compl_response(self(), Result), @@ -54,7 +58,9 @@
% 3GPP TS 29.273 7.1.2.3 session_termination_request(Imsi) -> - Result = gen_server:call(?SERVER, {str, Imsi}), + % In Diameter we use Imsi as strings, as done by diameter module. + ImsiStr = binary_to_list(Imsi), + Result = gen_server:call(?SERVER, {str, ImsiStr}), case Result of {ok, _Mar} -> epdg_ue_fsm:received_swm_session_terminate_answer(self(), Result),