[M] Change in ...osmo-epdg[master]: epdg: Trigger AAR+AAA upon rx of RAR

2024-03-18 Thread pespin
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

2024-03-18 Thread pespin
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

2024-03-18 Thread pespin
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