[M] Change in ...osmo-epdg[master]: epdg: Trigger AAR+AAA upon rx of RAR
pespin has submitted this change. ( https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/36340?usp=email ) Change subject: epdg: Trigger AAR+AAA upon rx of RAR .. epdg: Trigger AAR+AAA upon rx of RAR Related: OS#6406 Change-Id: I478b781e65eb5dd0cce5b51c75a1aa592b6555bc --- M src/aaa_diameter_swm.erl M src/aaa_ue_fsm.erl M src/epdg_diameter_swm.erl M src/epdg_ue_fsm.erl 4 files changed, 150 insertions(+), 17 deletions(-) Approvals: Jenkins Builder: Verified pespin: Looks good to me, approved diff --git a/src/aaa_diameter_swm.erl b/src/aaa_diameter_swm.erl index fadff7e..0f5e279 100644 --- a/src/aaa_diameter_swm.erl +++ b/src/aaa_diameter_swm.erl @@ -17,6 +17,7 @@ -export([rx_der_auth_request/4, rx_der_auth_compl_request/2, rx_reauth_answer/2, +rx_auth_request/1, rx_session_termination_request/1, rx_abort_session_answer/1]). -export([tx_dea_auth_response/2, @@ -65,6 +66,10 @@ rx_reauth_answer(Imsi, Result) -> gen_server:cast(?SERVER, {raa, Imsi, Result}). +% 3GPP TS 29.273 7.2.2.1.3 Diameter-AA-Request (AAR) Command +rx_auth_request(Imsi) -> + gen_server:cast(?SERVER, {aar, Imsi}). + rx_session_termination_request(Imsi) -> gen_server:cast(?SERVER, {str, Imsi}). @@ -98,6 +103,22 @@ end, {noreply, State}; +handle_cast({aar, Imsi}, State) -> + case aaa_ue_fsm:get_pid_by_imsi(Imsi) of + Pid when is_pid(Pid) -> + case aaa_ue_fsm:ev_rx_swm_auth_request(Pid) of + ok -> + epdg_diameter_swm:rx_auth_answer(Imsi, ok); + _ -> + RC_UNABLE_TO_COMPLY=5012, + epdg_diameter_swm:rx_auth_answer(Imsi, {error, RC_UNABLE_TO_COMPLY}) + end; + undefined -> + RC_USER_UNKNOWN=5030, + epdg_diameter_swm:rx_auth_answer(Imsi, {error, RC_USER_UNKNOWN}) + end, + {noreply, State}; + handle_cast({str, Imsi}, State) -> case aaa_ue_fsm:get_pid_by_imsi(Imsi) of Pid when is_pid(Pid) -> diff --git a/src/aaa_ue_fsm.erl b/src/aaa_ue_fsm.erl index abbe40e..968c7bd 100644 --- a/src/aaa_ue_fsm.erl +++ b/src/aaa_ue_fsm.erl @@ -43,7 +43,8 @@ -export([init/1,callback_mode/0,terminate/3]). -export([get_server_name_by_imsi/1, get_pid_by_imsi/1]). -export([ev_rx_swm_der_auth_req/2, ev_rx_swm_der_auth_compl/2, - ev_rx_swm_reauth_answer/2, ev_rx_swm_str/1, ev_rx_swm_asa/1, + ev_rx_swm_reauth_answer/2, ev_rx_swm_auth_request/1, + ev_rx_swm_str/1, ev_rx_swm_asa/1, ev_rx_swx_maa/2, ev_rx_swx_saa/2, ev_rx_swx_ppr/2, ev_rx_swx_rtr/1, ev_rx_s6b_aar/2, ev_rx_s6b_str/1, ev_rx_s6b_raa/2, ev_rx_s6b_asa/2]). -export([state_new/3, @@ -104,6 +105,15 @@ {error, Err} end. +ev_rx_swm_auth_request(Pid) -> +lager:info("ue_fsm ev_rx_swm_auth_request~n", []), +try +gen_statem:call(Pid, rx_swm_auth_request) +catch +exit:Err -> +{error, Err} +end. + ev_rx_swm_der_auth_compl(Pid, Apn) -> lager:info("ue_fsm ev_rx_swm_der_auth_compl~n", []), try @@ -371,6 +381,11 @@ %% SWx PPA was already answered immediately when PPR was received, nothing to do here. {keep_state, Data, [{reply,From,ok}]}; +state_authenticated({call, From}, rx_swm_auth_request, Data) -> +lager:info("ue_fsm state_authenticated event=rx_swm_auth_request, ~p~n", [Data]), +%% answer is trnamsitted when returning ok: +{keep_state, Data, [{reply,From,ok}]}; + state_authenticated({call, From}, {rx_s6b_raa, Result}, Data) -> lager:info("ue_fsm state_authenticated event=rx_s6b_raa ~p, ~p~n", [Result, Data]), %% SWx PPA was already answered immediately when PPR was received, nothing to do here. diff --git a/src/epdg_diameter_swm.erl b/src/epdg_diameter_swm.erl index cdf572f..ba5893c 100644 --- a/src/epdg_diameter_swm.erl +++ b/src/epdg_diameter_swm.erl @@ -15,13 +15,15 @@ -export([code_change/3, terminate/2]). -export([tx_der_auth_request/4, -tx_reauth_answer/2, tx_der_auth_compl_request/2, +tx_reauth_answer/2, +tx_auth_req/1, tx_session_termination_request/1, tx_abort_session_answer/1]). -export([rx_dea_auth_response/2, rx_dea_auth_compl_response/2, rx_reauth_request/1, +rx_auth_answer/2, rx_session_termination_answer/2, rx_abort_session_request/1]). @@ -56,6 +58,12 @@ ImsiStr = binary_to_list(Imsi), ok = gen_server:cast(?SERVER, {tx_dia, {der_auth_compl_req, ImsiStr, Apn}}). +% 3GPP TS 29.273 7.1.2.2 +tx_auth_req(Imsi) -> + % In Diameter we use Imsi as strings, as done by diameter module. + ImsiStr = binary_to_list(Imsi), + ok = gen_server:cast(?SERVER, {tx_dia, {aar, ImsiStr}}). + % 3GPP TS 29.273 7.1.2.3
[M] Change in ...osmo-epdg[master]: epdg: Trigger AAR+AAA upon rx of RAR
pespin has posted comments on this change. ( https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/36340?usp=email ) Change subject: epdg: Trigger AAR+AAA upon rx of RAR .. Patch Set 1: Code-Review+2 -- To view, visit https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/36340?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: I478b781e65eb5dd0cce5b51c75a1aa592b6555bc Gerrit-Change-Number: 36340 Gerrit-PatchSet: 1 Gerrit-Owner: pespin Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: pespin Gerrit-Comment-Date: Mon, 18 Mar 2024 17:28:42 + Gerrit-HasComments: No Gerrit-Has-Labels: Yes Gerrit-MessageType: comment
[M] Change in ...osmo-epdg[master]: epdg: Trigger AAR+AAA upon rx of RAR
pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/36340?usp=email ) Change subject: epdg: Trigger AAR+AAA upon rx of RAR .. epdg: Trigger AAR+AAA upon rx of RAR Related: OS#6406 Change-Id: I478b781e65eb5dd0cce5b51c75a1aa592b6555bc --- M src/aaa_diameter_swm.erl M src/aaa_ue_fsm.erl M src/epdg_diameter_swm.erl M src/epdg_ue_fsm.erl 4 files changed, 150 insertions(+), 17 deletions(-) git pull ssh://gerrit.osmocom.org:29418/erlang/osmo-epdg refs/changes/40/36340/1 diff --git a/src/aaa_diameter_swm.erl b/src/aaa_diameter_swm.erl index fadff7e..0f5e279 100644 --- a/src/aaa_diameter_swm.erl +++ b/src/aaa_diameter_swm.erl @@ -17,6 +17,7 @@ -export([rx_der_auth_request/4, rx_der_auth_compl_request/2, rx_reauth_answer/2, +rx_auth_request/1, rx_session_termination_request/1, rx_abort_session_answer/1]). -export([tx_dea_auth_response/2, @@ -65,6 +66,10 @@ rx_reauth_answer(Imsi, Result) -> gen_server:cast(?SERVER, {raa, Imsi, Result}). +% 3GPP TS 29.273 7.2.2.1.3 Diameter-AA-Request (AAR) Command +rx_auth_request(Imsi) -> + gen_server:cast(?SERVER, {aar, Imsi}). + rx_session_termination_request(Imsi) -> gen_server:cast(?SERVER, {str, Imsi}). @@ -98,6 +103,22 @@ end, {noreply, State}; +handle_cast({aar, Imsi}, State) -> + case aaa_ue_fsm:get_pid_by_imsi(Imsi) of + Pid when is_pid(Pid) -> + case aaa_ue_fsm:ev_rx_swm_auth_request(Pid) of + ok -> + epdg_diameter_swm:rx_auth_answer(Imsi, ok); + _ -> + RC_UNABLE_TO_COMPLY=5012, + epdg_diameter_swm:rx_auth_answer(Imsi, {error, RC_UNABLE_TO_COMPLY}) + end; + undefined -> + RC_USER_UNKNOWN=5030, + epdg_diameter_swm:rx_auth_answer(Imsi, {error, RC_USER_UNKNOWN}) + end, + {noreply, State}; + handle_cast({str, Imsi}, State) -> case aaa_ue_fsm:get_pid_by_imsi(Imsi) of Pid when is_pid(Pid) -> diff --git a/src/aaa_ue_fsm.erl b/src/aaa_ue_fsm.erl index abbe40e..968c7bd 100644 --- a/src/aaa_ue_fsm.erl +++ b/src/aaa_ue_fsm.erl @@ -43,7 +43,8 @@ -export([init/1,callback_mode/0,terminate/3]). -export([get_server_name_by_imsi/1, get_pid_by_imsi/1]). -export([ev_rx_swm_der_auth_req/2, ev_rx_swm_der_auth_compl/2, - ev_rx_swm_reauth_answer/2, ev_rx_swm_str/1, ev_rx_swm_asa/1, + ev_rx_swm_reauth_answer/2, ev_rx_swm_auth_request/1, + ev_rx_swm_str/1, ev_rx_swm_asa/1, ev_rx_swx_maa/2, ev_rx_swx_saa/2, ev_rx_swx_ppr/2, ev_rx_swx_rtr/1, ev_rx_s6b_aar/2, ev_rx_s6b_str/1, ev_rx_s6b_raa/2, ev_rx_s6b_asa/2]). -export([state_new/3, @@ -104,6 +105,15 @@ {error, Err} end. +ev_rx_swm_auth_request(Pid) -> +lager:info("ue_fsm ev_rx_swm_auth_request~n", []), +try +gen_statem:call(Pid, rx_swm_auth_request) +catch +exit:Err -> +{error, Err} +end. + ev_rx_swm_der_auth_compl(Pid, Apn) -> lager:info("ue_fsm ev_rx_swm_der_auth_compl~n", []), try @@ -371,6 +381,11 @@ %% SWx PPA was already answered immediately when PPR was received, nothing to do here. {keep_state, Data, [{reply,From,ok}]}; +state_authenticated({call, From}, rx_swm_auth_request, Data) -> +lager:info("ue_fsm state_authenticated event=rx_swm_auth_request, ~p~n", [Data]), +%% answer is trnamsitted when returning ok: +{keep_state, Data, [{reply,From,ok}]}; + state_authenticated({call, From}, {rx_s6b_raa, Result}, Data) -> lager:info("ue_fsm state_authenticated event=rx_s6b_raa ~p, ~p~n", [Result, Data]), %% SWx PPA was already answered immediately when PPR was received, nothing to do here. diff --git a/src/epdg_diameter_swm.erl b/src/epdg_diameter_swm.erl index cdf572f..ba5893c 100644 --- a/src/epdg_diameter_swm.erl +++ b/src/epdg_diameter_swm.erl @@ -15,13 +15,15 @@ -export([code_change/3, terminate/2]). -export([tx_der_auth_request/4, -tx_reauth_answer/2, tx_der_auth_compl_request/2, +tx_reauth_answer/2, +tx_auth_req/1, tx_session_termination_request/1, tx_abort_session_answer/1]). -export([rx_dea_auth_response/2, rx_dea_auth_compl_response/2, rx_reauth_request/1, +rx_auth_answer/2, rx_session_termination_answer/2, rx_abort_session_request/1]). @@ -56,6 +58,12 @@ ImsiStr = binary_to_list(Imsi), ok = gen_server:cast(?SERVER, {tx_dia, {der_auth_compl_req, ImsiStr, Apn}}). +% 3GPP TS 29.273 7.1.2.2 +tx_auth_req(Imsi) -> + % In Diameter we use Imsi as strings, as done by diameter module. + ImsiStr = binary_to_list(Imsi), + ok = gen_server:cast(?SERVER, {tx_dia, {aar, ImsiStr}}). + % 3GPP