pespin has submitted this change. ( https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/35931?usp=email )
Change subject: Expect NAI instead of Imsi in S6b AAR ......................................................................
Expect NAI instead of Imsi in S6b AAR
Change-Id: I6599b84c2a0e1a758cb63bb9e419fa4c3cf4f4a6 --- M src/aaa_diameter_s6b_cb.erl M src/conv.erl 2 files changed, 22 insertions(+), 2 deletions(-)
Approvals: Jenkins Builder: Verified laforge: Looks good to me, but someone else must approve pespin: Looks good to me, approved
diff --git a/src/aaa_diameter_s6b_cb.erl b/src/aaa_diameter_s6b_cb.erl index 7e3915d..ab15bd6 100644 --- a/src/aaa_diameter_s6b_cb.erl +++ b/src/aaa_diameter_s6b_cb.erl @@ -59,7 +59,8 @@ 'Auth-Request-Type' = AuthReqType, 'User-Name' = [UserName], 'Service-Selection' = [Apn]} = Req, - PidRes = aaa_ue_fsm:get_pid_by_imsi(UserName), + Imsi = conv:nai_to_imsi(UserName), + PidRes = aaa_ue_fsm:get_pid_by_imsi(Imsi), case PidRes of PidRes when is_pid(PidRes) -> ok = aaa_ue_fsm:ev_rx_s6b_aar(PidRes, Apn), @@ -67,7 +68,7 @@ receive {aaa, ResultCode} -> lager:debug("Rx AAA with ResultCode=~p~n", [ResultCode]) end; - undefined -> lager:error("Error looking up FSM for IMSI~n", [UserName]), + undefined -> lager:error("Error looking up FSM for IMSI~n", [Imsi]), ResultCode = ?'RULE-FAILURE-CODE_CM_AUTHORIZATION_REJECTED' end, Resp = #'AAA'{'Session-Id'= SessionId, diff --git a/src/conv.erl b/src/conv.erl index 95e103d..cdba445 100644 --- a/src/conv.erl +++ b/src/conv.erl @@ -41,6 +41,7 @@ -export([ip_to_bin/1, bin_to_ip/1]). -export([cause_gtp2gsup/1]). -export([gtp2_paa_to_epdg_eua/1, epdg_eua_to_gsup_pdp_address/1]). +-export([nai_to_imsi/1]).
% ergw_aaa/src/ergw_aaa_3gpp_dict.erl % under GPLv2+ @@ -93,3 +94,12 @@ pdp_type_nr => ?GTP_PDP_ADDR_TYPE_NR_IPv6, address => #{ ipv6 => Addr}}. %TODO: IPv4v6 + +% 3GPP TS 23.003 clause 19 +% Input: "<IMSI>@nai.epc.mnc<MNC>.mcc<MCC>.3gppnetwork.org" +% % TODO: lead number prefix +nai_to_imsi(NAI) -> + NAIRev = string:reverse(NAI), + ImsiRev = string:find(NAIRev, "@", trailing), + ImsiRev2 = string:trim(ImsiRev, leading, "@"), + string:reverse(ImsiRev2).