pespin has uploaded this change for review.
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),
To view, visit change 35889. To unsubscribe, or for help writing mail filters, visit settings.