pespin has uploaded this change for review. (
https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/36182?usp=email )
Change subject: Migrate S6b to use new epdg_dia_rc record
......................................................................
Migrate S6b to use new epdg_dia_rc record
Change-Id: I11674ef7b9fb541d7e48a74fa986ee0798042de9
---
M src/aaa_diameter_s6b.erl
M src/aaa_diameter_s6b_cb.erl
M src/aaa_ue_fsm.erl
M src/epdg_ue_fsm.erl
4 files changed, 36 insertions(+), 22 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/erlang/osmo-epdg refs/changes/82/36182/1
diff --git a/src/aaa_diameter_s6b.erl b/src/aaa_diameter_s6b.erl
index 2792b6a..163ffbd 100644
--- a/src/aaa_diameter_s6b.erl
+++ b/src/aaa_diameter_s6b.erl
@@ -147,13 +147,13 @@
gen_server:call(?SERVER,
{sar, {IMSI, Type, APN}}).
-tx_aa_answer(Pid, ResultCode) ->
+tx_aa_answer(Pid, DiaRC) ->
% handle_request(AAR) was spawned into its own process, and it's blocked waiting
for AAA:
- Pid ! {aaa, ResultCode}.
+ Pid ! {aaa, DiaRC}.
-tx_st_answer(Pid, ResultCode) ->
+tx_st_answer(Pid, DiaRC) ->
% handle_request(STR) was spawned into its own process, and it's blocked waiting
for STA:
- Pid ! {sta, ResultCode}.
+ Pid ! {sta, DiaRC}.
result_code_success(2001) -> ok;
result_code_success(2002) -> ok;
diff --git a/src/aaa_diameter_s6b_cb.erl b/src/aaa_diameter_s6b_cb.erl
index b3fe209..a56a7ca 100644
--- a/src/aaa_diameter_s6b_cb.erl
+++ b/src/aaa_diameter_s6b_cb.erl
@@ -6,6 +6,8 @@
-include_lib("diameter/include/diameter.hrl").
-include_lib("diameter_3gpp_ts29_273_s6b.hrl").
+-include("conv.hrl").
+
%% diameter callbacks
-export([peer_up/3, peer_down/3, pick_peer/4, prepare_request/3, prepare_retransmit/3,
handle_answer/4, handle_error/4, handle_request/3]).
@@ -67,15 +69,15 @@
ok = aaa_ue_fsm:ev_rx_s6b_aar(PidRes, {Apn, AgentInfoOpt}),
lager:debug("Waiting for S6b AAA~n", []),
receive
- {aaa, ResultCode} -> lager:debug("Rx AAA with ResultCode=~p~n",
[ResultCode])
+ {aaa, DiaRC} -> lager:debug("Rx AAA with DiaRC=~p~n", [DiaRC])
end;
undefined -> lager:error("Error looking up FSM for IMSI~n", [Imsi]),
- ResultCode = ?'RULE-FAILURE-CODE_CM_AUTHORIZATION_REJECTED'
+ DiaRC = #epdg_dia_rc{result_code =
?'RULE-FAILURE-CODE_CM_AUTHORIZATION_REJECTED'}
end,
Resp = #'AAA'{'Session-Id'= SessionId,
'Auth-Application-Id' = AuthAppId,
'Auth-Request-Type' = AuthReqType,
- 'Result-Code' = ResultCode,
+ 'Result-Code' = DiaRC#epdg_dia_rc.result_code,
'Origin-Host' = OH,
'Origin-Realm' = OR},
lager:info("S6b Tx to ~p: ~p~n", [Caps, Resp]),
@@ -97,10 +99,12 @@
ok ->
lager:debug("Waiting for S6b STA~n", []),
receive
- {sta, ResultCode} -> lager:debug("Rx STA with
ResultCode=~p~n", [ResultCode])
+ {sta, DiaRC} ->
+ ResultCode = DiaRC#epdg_dia_rc.result_code,
+ lager:debug("Rx STA with ResultCode=~p~n", [ResultCode])
end;
- {ok, DiaRC} when is_integer(DiaRC) ->
- ResultCode = DiaRC;
+ {ok, DiaRC} ->
+ ResultCode = DiaRC#epdg_dia_rc.result_code;
{error, Err} when is_integer(Err) ->
ResultCode = Err;
{error, _} ->
@@ -119,4 +123,4 @@
handle_request(Packet, _SvcName, Peer) ->
lager:error("S6b Rx unexpected msg from ~p: ~p~n", [Peer, Packet]),
- erlang:error({unexpected, ?MODULE, ?LINE}).
+ erlang:error({unexpected, ?MODULE, ?LINE}).
\ No newline at end of file
diff --git a/src/aaa_ue_fsm.erl b/src/aaa_ue_fsm.erl
index 4c33567..f06b326 100644
--- a/src/aaa_ue_fsm.erl
+++ b/src/aaa_ue_fsm.erl
@@ -232,12 +232,13 @@
lager:info("ue_fsm state_authenticated event=rx_s6b_str, ~p~n",
[Data]),
case {Data#ue_fsm_data.pgw_sess_active, Data#ue_fsm_data.epdg_sess_active} of
{false, _} -> %% The S6b session is not active...
- DiaRC = 5002, %% UNKNOWN_SESSION_ID
+ DiaRC = #epdg_dia_rc{result_code = 5002}, %% UNKNOWN_SESSION_ID
{keep_state, Data, [{reply,From,{error, DiaRC}}]};
{true, true} -> %% The other session is still active, no need to send SAR
Type=USER_DEREGISTRATION
lager:info("ue_fsm state_authenticated event=rx_s6b_str: ePDG
session still active, skip updating the HSS~n", []),
Data1 = Data#ue_fsm_data{pgw_sess_active = false},
- {keep_state, Data1, [{reply,From,{ok, 2001}}]};
+ DiaRC = #epdg_dia_rc{result_code = 2001}, %% SUCCESS
+ {keep_state, Data1, [{reply,From,{ok, DiaRC}}]};
{true, false} -> %% All sessions will now be gone, trigger SAR
Type=USER_DEREGISTRATION
case aaa_diameter_swx:server_assignment_request(Data#ue_fsm_data.imsi,
?'DIAMETER_CX_SERVER-ASSIGNMENT-TYPE_USER_DEREGISTRATION',
@@ -245,7 +246,7 @@
ok -> Data1 = Data#ue_fsm_data{s6b_resp_pid = Pid},
{next_state, state_authenticated_wait_swx_saa, Data1,
[{reply,From,ok}]};
{error, _Err} ->
- DiaRC = 5002, %% UNKNOWN_SESSION_ID
+ DiaRC = #epdg_dia_rc{result_code = 5002}, %% UNKNOWN_SESSION_ID
{keep_state, Data, [{reply,From,{error, DiaRC}}]}
end
end;
@@ -263,23 +264,23 @@
state_authenticated_wait_swx_saa({call, From}, {rx_swx_saa, Result}, Data) ->
case Result of
- {error, SAType, DiaRC} -> ResultCode = DiaRC#epdg_dia_rc.result_code;
- {ok, SAType, _ResInfo} -> ResultCode = 2001
+ {error, SAType, DiaRC} -> DiaRC;
+ {ok, SAType, _ResInfo} -> DiaRC = #epdg_dia_rc{result_code = 2001}
end,
- lager:info("ue_fsm state_authenticated_wait_swx_saa event=rx_swx_saa
SAType=~p ResulCode=~p, ~p~n", [SAType, ResultCode, Data]),
+ lager:info("ue_fsm state_authenticated_wait_swx_saa event=rx_swx_saa
SAType=~p ResulCode=~p, ~p~n", [SAType, DiaRC, Data]),
case SAType of
?'DIAMETER_CX_SERVER-ASSIGNMENT-TYPE_PGW_UPDATE' ->
- aaa_diameter_s6b:tx_aa_answer(Data#ue_fsm_data.s6b_resp_pid,
ResultCode),
+ aaa_diameter_s6b:tx_aa_answer(Data#ue_fsm_data.s6b_resp_pid, DiaRC),
Data1 = Data#ue_fsm_data{pgw_sess_active = true, s6b_resp_pid =
undefined},
{next_state, state_authenticated, Data1, [{reply,From,ok}]};
?'DIAMETER_CX_SERVER-ASSIGNMENT-TYPE_USER_DEREGISTRATION' ->
case Data#ue_fsm_data.s6b_resp_pid of
undefined -> %% SWm initiated
-
aaa_diameter_swm:session_termination_answer(Data#ue_fsm_data.imsi, ResultCode),
+
aaa_diameter_swm:session_termination_answer(Data#ue_fsm_data.imsi, DiaRC),
Data1 = Data#ue_fsm_data{epdg_sess_active = false},
{next_state, state_new, Data1, [{reply,From,ok}]};
_ -> %% S6b initiated
- aaa_diameter_s6b:tx_st_answer(Data#ue_fsm_data.s6b_resp_pid,
ResultCode),
+ aaa_diameter_s6b:tx_st_answer(Data#ue_fsm_data.s6b_resp_pid,
DiaRC),
Data1 = Data#ue_fsm_data{pgw_sess_active = false, s6b_resp_pid =
undefined},
{next_state, state_new, Data1, [{reply,From,ok}]}
end
diff --git a/src/epdg_ue_fsm.erl b/src/epdg_ue_fsm.erl
index 1414190..fd0d7f9 100644
--- a/src/epdg_ue_fsm.erl
+++ b/src/epdg_ue_fsm.erl
@@ -402,11 +402,11 @@
{keep_state, Data}
end;
-state_wait_swm_session_termination_answer({call, From}, {received_swm_sta,
DiaResultCode}, Data) ->
+state_wait_swm_session_termination_answer({call, From}, {received_swm_sta, DiaRC}, Data)
->
lager:info("ue_fsm state_wait_swm_session_termination_answer
event=received_swm_sta, ~p~n", [Data]),
case Data#ue_fsm_data.tear_down_gsup_needed of
true ->
- case {DiaResultCode, Data#ue_fsm_data.tear_down_gsup_cause} of
+ case {DiaRC#epdg_dia_rc.result_code,
Data#ue_fsm_data.tear_down_gsup_cause} of
{2001, 0} -> gsup_server:purge_ms_response(Data#ue_fsm_data.imsi,
ok);
{2001, _} -> gsup_server:purge_ms_response(Data#ue_fsm_data.imsi,
{error, Data#ue_fsm_data.tear_down_gsup_cause});
_ -> gsup_server:purge_ms_response(Data#ue_fsm_data.imsi, {error,
?GSUP_CAUSE_NET_FAIL})
--
To view, visit
https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/36182?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: I11674ef7b9fb541d7e48a74fa986ee0798042de9
Gerrit-Change-Number: 36182
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-MessageType: newchange